<?php // Полная загрузка сервисных книжек, создан 2024-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='\
Аккуратно и доходчиво для многих разработчиков. Однозначно +
Такая раскраска отчетов подходит только для укр конф.
В российских всё обезличено в отчете.
(2) В смысле обезличено?
(2) Приехали…, причем здесь конкретная конфа м раскраска ❓
Для выбора цвета не обязательно использовать внешнюю компоненту. Перейти к форме Контрагента по двойному клику по ячейке теперь не удастся. Единственно где оправдано применение формекса в этом примере — список элементов справочника.
(3) тем, что нет в ней Запрос.Контрагент в выражении, тем , что не можешь ты просто так написать в расшифровку ФункцияРасшифровки(ТЗ, траляля).
Все группировки выводятся динамически.
И тебе придётся, как минимум, красить нужную ячейку после вывода секции (что и сделано в типовых в некоторых отчетах), определяя тип и вид выводимого значения (или смотреть, что за группировку выводим).
(4) Прежде чем писать, думай хоть иногда.
Тем, что приведена методика для конкретной конфы.
+6 но техническая реализация в даном примере — это вообще семечки, по сравнению с главной проблемой — «ручной» раскраской клиентосов.
Представляю себе картину — сидит девочка и каждый день «руктями красит» элементы справочника — васю..
(5) > Перейти к форме Контрагента по двойному клику по ячейке теперь не удастся.
Кто тебе такую глупость сказал? Посмотри что функция глЗаписатьСтрокуТзРаскраскиТаблиц возвращает.
(6) > И тебе придётся, как минимум, красить нужную ячейку после вывода секции
Ты, по моему, не внимательно читаешь, после вывода секции и раскрашивается, по сути. А определение типа идет автоматом, попытка-исключение в функции глЗаписатьСтрокуТзРаскраскиТаблиц для этого и существует.
(7) > по сравнению с главной проблемой — «ручной» раскраской клиентосов
И нафига в описании идеи описывать добавление действия установки цвета в групповую обработку контрагентов? Я ж писал, что в центре внимание идея «малой кровью» раскрасить таблицы отчетов, а не долгая нудная статья, как я еще то дописал и это. А давай еще будем говорить, что хотелось бы фильтры в отчетах по цветам тоже сделать, кто ж мешает, я описал идею раскраски табличных форм, причем, если внимательно вникнешь, учитывающую все Ваши «поверхностные замечания», а развивать удобство использования цвета в базе уже можно сколько угодно, никто ж не мешает.
Опять же, можно раскрашивать не цвет текста, а фон, а можно и то и другое, естественно тогда функционал можно развить дальше, можно ввести еще не ракраску всей строки, а ввести в глЗаписатьСтрокуТзРаскраскиТаблиц еще параметр номер столбца и формировать адрес области — одну ячейку, у меня в реальной базе так, чтобы раскрашивалась только ячейка, а не вся строка.
В общем, вникайте внимательно, прежде чем … «говорить»;-)
(8) Сорри ошибся.
(7) > Даже, если она будет их красить обработкой, ей придётся это делать как минимум, каждый день, как максимум — раз в час, чтоб актуальность раскраски была всегда.
В общем, не комильфо.
Ты не понял, вопрос не как задавать цвет контрагенту, а как раскрашивать таблицы отчетов;-) А как и откуда определять цвет контрагента — это второе дело, для примера удобнее было описать простое хранение в поле справочника, а можно хоть от долгов контрагента плясать, долг больше мильона — красный и т.д.;-)
Стареете, господа;-)
(8) Ты типовые конфы видел вообще в глаза когда нить ?
Россейские ?
Там не получится запихать в ячейку свою расшифровку.
(11) Я могу развернуть сейчас, но давай проще, что в расшифровке идет там? Сразу сейчас и выясним, если в российских не пройдет, то я без проблем напишу, что это только для украинских.
(9) Ну -ну.. у нас в базе > 5000 предлагаешь руками менять это поле ?
+ что считать долгом , если у клиентоса есть отсрочка платежа ?
Это ка минимум, определение текущего долга в данный момент времени, как максимум — определение только просроченного долга, ибо именно его клиентос должен оплатить в данный момент.
Да и техническая реализация через Расшифровку, да еще и в ТЗ скидывать — это вообще прошлый век.
Когда достаточно было написать так, и привет :
(13) > Ну -ну.. у нас в базе > 5000 предлагаешь руками менять это поле ?
Я предлагаю определять цвет контрагента (хранить ли в поле или каким-либо другим способом) так, как необходимо и удобно в каждом конкретном случае, иначе у тебя получается, что и раскраска списков FormEx’сом бесполезна;-) Я предлагаю способ раскраски отчетов, а не способ хранения цвета;-)
(13) > Да и техническая реализация через Расшифровку, да еще и в ТЗ скидывать — это вообще прошлый век.
А нафига мне лазить по отчетам (он же не один в конфе), в том числе и самописным, дописанным кем-то в типовой, и выискивать вывод нужных секций и разбираться с тем, будет ли еще присоединяться секция, например, или пойдет новая строка и т.д. и т.п.?
Да еще выискивать кто и где там контрагент, чтобы тоже условие прописать и т.д. и т.п., проделывать кучу действий в каждом отчете, если я сразу перешел на таблицу отчета и проставил в паре ячеек (а обычно вообще в одной) расшифровку и вперед? Т.е. с каждым отчетом проделываются однотипные простые и понятные действия и вникать в код отчета мне не нужно, что проще и удобней мне как разработчику в данном случае, так что прошлый век — это преждевременно;-)
иначе у тебя получается, что и раскраска списков FormEx’сом бесполезн
Еще бы!
Такое разделение клиентосов (по долгам) в таком виде — это полный пэ..
Нужно автоматизировать, а не лишнюю работу кому-то скидывать.
Вот у тебя, кто будет раскрашивать клиентосов ?
:)))
(15) У меня все проще, раскрашивать планируют только небольшое кол-во, относительно общей массы, и по особому указанию сверху;-) А раскрашивать будут менеджера отвечающие за свои группы контрагентов. Т.е. тут скорее «выделение» некоторых контрагентов из общей массы будет, чем тотальная раскраска всех.
Господа! Если есть желание — помогите решить подобную задачу. Мне необходимо при подборе товара выделить цветом ячейку с остатками, чтобы, например, видеть нулевой остаток красным цветом и т.д. Буду очень признателен за помощь. В программировании я пока не спец, но кое-что под себя уже «заточил» в формах и отчётах.
Всё замечательно!
А как прописать в форме диалогов документов, раскрашивание строк с цветноштанным контрагентом?
Не дождался ответа,сам разобрался.
(19) Прально сделал;-)
З.Ы. Только вернулся с Карпат, вот и молчал по этому…
Радость от установки была не долгой, всё хорошо работало устраивало и так далее, но после включения в рабочую базу терминал 25 пользователей стала вылетать такая надпись a required resource was unavailable и делался корявый интерфейс окон 1с пока не закроешь её и не зайдешь заново, может автор в курсе сей проблемы.
(21) А внешние компоненты свежие? Возможно там лежат старые? И при каких действиях/событиях это происходит?
А такое есть для 8ки? УТ мне надо расскрасить отчет по поставщикам.
Ну всеравно давольно таки интересный метод используется!
Спасибо! Очень доходчиво!
Респект автору!