<?php // Полная загрузка сервисных книжек, создан 2025-01-05 12:44:55
global $wpdb2;
global $failure;
global $file_hist;
///// echo '<H2><b>Старт загрузки</b></H2><br>';
$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
///// echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}
$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
///// echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}
/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
///// echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
///// echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist); ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7]; ////получаем размер файла
$m_mtime_file=$masiv_data_file[9]; ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file
///// echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
///// echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
///// echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);
if ($results)
{ foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));
////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
///// echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
///// echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}
////загружаем данные
$table='vin_history'; // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация // (путь от корня web-сервера)
$delim=';'; // Разделитель полей в CSV файле
$enclosed='"'; // Кавычки для содержимого полей
$escaped='\
Стандартом в 1с является, когда все строки табличной части имеют одинаковый шрифт, цвет шрифта и цвет фона строки. Но иногда нужно, чтобы строки выделялись по некоторому признаку. Иногда нужно что-либо оформлять на уровне конфигуратора. В 8.1 это делалось через процедуры ПриВыводеСтроки и ПриПолученииДанных. В управляемом приложении 8.2 их нет, там сделано условное оформление. Привожу пример, как можно работать с условным оформлением программно, как форма оформляется кодом в 8.2.
В качестве примера будем использовать, что в документе реализации строки выделялись в зависимости от склада, с которого отгружается номенклатура.
Перейти к публикации
(0) Такие сложности действительно необходимы или условное оформление в пофигураторе ужо не катит?
(2) Это же в режиме управляемого приложения, там нет ПриВыводеСтроки насколько я понимаю…
Ну да, в первом посте об этом и спрашивал, к чему такие сложности? Плюс поставил за другое.
(4)
[quote]Я бы уволил программиста который бы начал в справочник добавлять подобные реквизиты.[/quote]
Что плохого в этом решении, например если надо конкретному складу назначить конкретный цвет? И иметь возможность отображать склад этим цветом везде (в т.ч. там где нет условного оформления).
Я бы только цвет числом хранил а не хранилищем значений.
(5)
Ну это же пример. Условное оформление — это ограниченные возможности. В сложных случаях без кода все равно не обойтись.
Да и в простых часто проще один раз сделать этот расчет оформления именно кодом и вынести его в общий модуля, а в конкретные формы вставлять одну строчку — вызов этой процедуры.
(8) Считай, что в статье приведён пример программного управления оформлением формы, а добавление реквизитов — это абстракция.
(8)
[quote]что значит везде? Условное оформление есть ВЕЗДЕ. во всех формах[/quote]
Везде — это везде, откуда может быть доступ к справочнику. В том числе и в запросе, подготоваливающем данные для выгрузки в стороннее приложение и при коннекте по ОЛЕ из стороннего приложения и при коннекте к соответствующей SQL таблице на сервере. Во всех указанных случаях условного оформления нет.
[quote]А если еще что то надо будет разукрашивать. Например номенклатуру. по какому нибудь реквизиту? Это вообще будет жестко. [/quote]
Ну если номенклатура имеет цвет и он имеет важное значение (одежда, обувь, краски, автомобили и т.п.) то раскраска номенклатуры выглядит вполне уместной.
(13) Прокол в (2) не в том , что в 8.2 нет процедуры ПриВыводеСтроки()(она есть!), а в том , что её нет
в режиме управляемого приложения.
(14) Она есть только в режиме совместимости с 8.1. Но он по определению временный, рано или поздно он должен быть отключен и должны быть только управляемые формы. Собственно я и расписываю как работать, когда нет данных процедур. Можно еще вспомнить что есть и чего нет в 7.7, 7.5, 6.0. Я привожу пример как работать с условным оформлением на управляемых формах 8.2.
(15)
[quote]Она есть только в режиме совместимости с 8.1. Но он по определению временный[/quote]
Вобще-то в 8.2 есть еще режим нормального приложения, безо всяких управляемых форм, в котором эта функция, слава Богу, есть. К тому же многих вполне устраивает этот «временный» режим совместимости, зачем его менять, если все работает.
(16) Да, верно. Тут я погорячился немного)
А вообще мне инфостарт напоминает консилиум врачей. Вот дали тебе больного, ты смотришь что с ним, и выписываешь ему рецепт. И выкладываешь сюда. После чего в комнатку набивается сотня других врачей и начинают со всех сторон и ракурсов рассматривать и самого больного, и сам рецепт, спорить между собой, спорить с тобой, предлагать что-то другое, соглашаться с тобой) Но это имеет офигенный плюс. Больной после этого стопроцентно будет жить)))))
😀 (18)бородатый анекдот
Доктор, — говорит ассистент, — пациент Ларю из второй палаты скверно
себя чувствует.
— Надо говорить: «Пациент Ларю думает, что скверно себя чувствует».
Это новейший взгляд на сущность болезней.
На следующий день ассистент подходит к доктору.
— Доктор, пациент Ларю из второй палаты думает, что он умер.
(18) Эй, врач, получай камень в свой огород.
Чтобы врачи не набивались к тебе в кабинет нужно ЧЕТКО ,ЯВНО указывать в рецепте диагноз и кому он предназначен. Диагноз не должен содержать и намека на двойое толкование .
Например. Указать явно в теме , что рассматривается пример для ТОЛЬКО УПРАВЛЯЕМОГО ПРИЛОЖЕНИЯ , в котором.. Объяснить ЯВНО в теме почему выбран именно такой вариант и в чем его преимущества.
Этого сделано не было.
Поэтому вздохи о тупости и непонимании порождают лишь ответные вежливые вздохи.
(20)
Чтобы врачи не набивались к тебе в кабинет нужно ЧЕТКО ,ЯВНО указывать в рецепте диагноз и кому он предназначен. Диагноз не должен содержать и намека на двойое толкование .
Например. Указать явно в теме , что рассматривается пример для ТОЛЬКО УПРАВЛЯЕМОГО ПРИЛОЖЕНИЯ , в котором.. Объяснить ЯВНО в теме почему выбран именно такой вариант и в чем его преимущества.
Этого сделано не было.
Поэтому вздохи о тупости и непонимании порождают лишь ответные вежливые вздохи.
Так там же сриншоты управляемого приложения!
(21) Однако , еще один. Еще раз для врачей.
Людей много хороших и разных, по-разному всё понимающих.
Поэтому :
Первое. Область применения указанного примера должна быть указана ЯВНО (в тексте).
Второе. Нужно явно привести (хотя бы простенький ) сравнительный анализ ( сравнить с возможными альтернативами) и показать преимущества на взгляд автора представленного решения.
Это есть — взрослый подход.
(22) Тут нет альтернатив..
(23) Смело.
Так укажи в теме , что ,дескать, так мол и так, представленное решение по выделению цветом складов альтернатив НЕ ИМЕЕТ. Глядишь, дискуссия примет новый поворот.
(24) Это не решение по выделению цветом складов!! Я писал выше!! Это пример работы с условным оформлением программно!
И вообще. Цель статьи в самой статье, а не в дискуссии после нее. У меня нет столько времени, чтобы расписывать всё и вся. Я выдал подход, кто надо — воспримет, кому не надо — тому не надо. За это время можно сделать много другого полезного. Судя по тому, что ты не знаешь об отсутсвии в управляемых формах процедуры ПриВыводеСтроки, данная статья не несет для тебя никакой нагрузки, так что я думаю эту дискуссию с тобой надо прекратить.
(25) Ок.
(18) (24)
>>>> Больной после этого стопроцентно будет жить
Или стопроцентно двинет кони от таких врачей. Второй вариант более достоверен.
(25)(26) мужики Вы чего? Это всего лишь выделение цветом 😀
Не стоит так болезненно реагировать на такой подход и такое описание.
Ну скажем перебор, вместо запроса и т.д.
Типовые решения и то такими вещами занимаются.
Получилось такая статья и что? Хуже когда 1С-овцы вообще ничего не делают, а тупо качают раз в день 😉
Указал в начале на то, что статья плохо оформлена и(или) есть альтернативное решение — человек понял и в следующий раз сделает лучше!
(28)
спасибо на добром слове)))
(29) Мне кажется , ты критику воспринял как озлобленность. И зря.
Да стал бы я распинаться , если б не представлял с кем имею дело.
А раз так то с тебя и спрос другой. Чего я церемониться буду ?
(28) Делал, конечно . И неправильно , и как проще.
Хм.. Хотел бы я посмотреть на человека , который делает сразу все правильно. Ау ..
А про перебор вместо запроса — ты зря написал.
Милости прошу в ту тему. Там я расскажу , что понимается под перебором.
(7)
Ведет к формированию дурного вкуса, а он, как говорят французы,ведет к преступлению 😉
Примечание: дурной вкус — это всё. что не нравится мне 😀 😀
Автор вообще в курсе, что есть хранилища настроек, в частности, заточенные именно для настроек СКД? И что всё можно сделать именно так?
А программная работа с СКД — она в книжках описана, у Хрусталёвой, да на всяких ресурсах, какой смысл за это плюсы ставить?
(33)
[quote]хранилища настроек, в частности, заточенные именно для настроек СКД[/quote]
Какие хранилища настроек??? Цвет в 1С — это обычное целое число. Можно его конечно превратить во что угодно, сделать xml файлик потом поместить в хранилище, и т.п. Только потом не надо удивляться, что пользователь на калькуляторе считает быстрее, чем в 1С…
(34) Ага, а условное оформление в 1С — это условное оформление. И, если вы не в курсе, только цветом не исчерпывается. И входит оно в состав настроек СКД, каковая и лежит в основе динамических списков 8.2, и каковую собственно и следует использовать на всю катушку, а не изобретать кривые велосипеды и курочить справочники.
Советую ознакомиться с тем, что такое хранилище настроек, и чем, собственно, 8.2 отличается от 8.1 в части управляемых интерфейсов.
воспитательная порка удалась на славу… 😀
Чем тут закончилось ? — Тяжело без морали в конце .
Я не понял кто кого выпорол. Так наши победили или нет ?
По моему, ничья. Каждый остался при своём мнении по принципу: сам
мудакдурактакой.Тут ещё народ повоспитанней будет. Вот на другом сайте
срачьспор растянули бы на десяток страниц с тысячью постов.такие бои местного значения получились 🙂
а в таких случаях, по-моему, обычно никто и не побеждает, все поспорят и разойдутся до следующего раза. Зато автору почту заспамили сообщениями о комментариях, наверно
С другой стороны конструктивная критика никогда не помешает 😀
Зато автору почту заспамили сообщениями о комментариях, наверно
И не только автору 🙂
«подпишусь» на условное оформление 🙂
Ёжики плакали, кололись — но продолжали насиловать кактус….
Ребят 8.2 в динамических списках позволяет по условиям сама все красить, зачем столько кода писать!?
(44) Возможности 8.2 по раскрашиванию конечно впечатляют по сравнению с их отсутствием в предыдущих версиях, но это всего лишь ограниченный набор средств, который несравним с возможностями встроенного языка. Кроме того в ряде случаев удобнее видеть все, что делает программа, собранным в одном месте (модуле, процедуре) а не вспоминать, что это — в настройках оформления, это — в подписке на события, это — в модуле и т.п. Особенно когда над программой работаешь не один.
Круто не знал про встроенное оформление. будет полезно. А не подскажите как табличной части обновлять данные?
К чему все эти красивости ?
Чем строже и незатейливей — тем проще и у юзеров не возникает соблазнов …
Отличный пример. Мне он очень помог в реализации подобной, но немного другой задачи. Автору (+)
все прикольно, но не допру как раскрасить сами склады в списке справочника по цвету, который в них выбран?
(47) дело не в соблазнах, а в удобстве и скорости работы…
иногда намного проще увидеть 1 красную строчку из 100 в накладной, чем пол часа искать глазами…
Программное оформление куда выгоднее при обновлениях.
Может быть вопрос не по теме, но спрошу. При обновлении динамического списка не обновляется оформление, только при повторном открытии формы. То есть есть процедура на сервере, осталось добавить на клиенте, только что?
ОбновитьОтображениеДанных();
Элементы.Список.Обновить();
Оповестить(«ОбновитьСписок», , ЭтаФорма);
не помогают.
Спасибо автору за статью, однозначный «плюс».
Формирую таблицу на управляемой форме программно, только так и можно задать условное оформление. Тут я ни только правого значения не знаю, так ещё и списка колонок, которые я оформляю..
какие то страсти написаны… напишу проще — при редактировании табличной части поставить что то типа:
&НаКлиенте
Процедура ЗаявкиПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
ОформитьСтрокиНаСервере ();
КонецПроцедуры
&НаСервере
Процедура ОформитьСтрокиНаСервере ()
ЭтаФорма.УсловноеОформление.Элементы.Очистить();
ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(«Заявки»);
ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(«Объект.Заявки.Закрыть»);
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Истина;
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра(«ЦветФона», WebЦвета.Киноварь);
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(«Объект.Заявки.Утвердить»);
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Истина;
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра(«ЦветФона», WebЦвета.ВесеннеЗеленый);
КонецПроцедуры
Если нужно наложить несколько условий — повторить ниж еще раз серверный модуль, но тока без первой строчки по поводу очистки [ЭтаФорма.УсловноеОформление.Элементы.Очистить()]
День добрый, всем.
Есть номенклатура с доп реквизитами.
Может кто нить подскажет как разукрасить поле Номенклатура, в табличной части товары, по условию накладываемому на доп реквизиты выводимой номенклатуры?