<?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 (если собрать там комплексное решение из нескольких инструментов).
Что точно не ново, так это реализация — несколько человек независимо от меня реализовали подобный механизм, когда узнали идею.
(1) не сомневайтесь, она и правда очень простая и полезная.
Я пользовался ей в реальном внедрении 3 года.
в демо базе поправьте режим совместимости интерфейса 🙂
что-то вообще какая-то странная демо-база… вроде как все под УФ, а пришлось пошаманить для правильного запуска
(5) там все правильно вроде. Режим совместимости интерфейса такой же, как в УПП, в которой автозадачи разрабатывались изначально.
(3) ДО2 это совсем другая тема, задачи там таки существуют как сущность и закрыться сами могут далеко не всегда.
Относительно похожая подсистема есть в одной WMS родом из начала 2010-х, только там все кодом без СКД, и кроме рассылки почтой иных способов доставки «задач» нет. Ваша подсистема конечно гораздо более продвинутая и удобная.
(7) я видимо неправильно акцентировал внимание в публикации — здесь задачи тоже существуют как сущность. Это справочник.
(8) Я имел в виду объект платформы Задача.
(9) Понятно. Ну это вроде не так важно.
(10) Использование объектов задача — это скажем так более классический подход, и накладывает определенные ограничения на функциональность, в отличии от вашего решения.
(11) я за 12 лет несколько раз смотрел на ветку «Задачи» в дереве метаданных, но каждый раз что-то останавливало от их использования. Ну нет там ничего такого интересного, существенно выделяющего их на фоне справочников и документов.
Возможно, это просто мертворожденный тип объектов метаданных. Равно как и железобетонные бизнес-процессы, карты которых рисуются в конфигураторе.
(12) Вы видимо близко не смотрели ДО2, там все на задачах, бизнес-процессах и справочниках. И бизнес-процессы в конфигураторе там уже давно не рисуются, в последней версии даже сделана попытка обеспечить графический интерфейс создания новых бизнес-процессов в режиме предприятия.
Кстати, сейчас ДО2 внедряется на Почте России, и по результатам внедрения обещают новую прорывную версию 🙂
(13) ладно, хрен с ними, с задачами этими 🙂
(6) да, всё верно. Просто уже привык к УФ (даже не к УФ, а Такси) и мои необоснованные ожидания были не оправданы….
У меня один вопрос: зачем конфигурацию и демо-базу выкладывать двумя разными архивами, почему не объединить в один?
Они что, весят по гигу?
(16) даже не знаю, что ответить. Не мелькнула такая мысль в голове.
Получается, что на любую конфигурацию можно накатить? например, мне нужно на УТ10.3 и на Розницу 2.1.
(18) на УТ 10.3 и Розницу точно встанет.
А вообще — да, на любую, кроме самописанных — там минут 10 рихтануть придется.
Будут трудности — пишите.
Друзья, кто скачал, удалось попробовать сделать автозадачи?
Трудности есть?
накатил на Розницу.
http://v8.1 бла-бла -бла} settingsVariant
http://www.w3 бла-бла-бла}
При добавлении нового элемента в справочник «Параметры автозадач» ошибка преобразования данных ХДТО: НачалоСвойства: {
Форма: Элемент
Тип:{
Версия Розницы 2.1.8.16, доработанная.
Платформа 8.3.6.2237
PS. Кажется, ошибка возникает в тонком клиенте. В Толстом нормально….
(21) да, так и должно быть — в тонком клиенте 8.3.6 нет конструктора схемы компоновки.
Схемы рисуйте в толстом, сами задачи в тонком нормально работают.
Иван, а можете хотя бы список всех применяемых у вас автозадач выложить?
(23) обновил публикацию, дописал раздел про мою практику использования автозадач.
Задавайте вопросы, буду рад ответить.
Прям точный список дать не могу, т.к. у меня нет доступа к базе.
На днях, обсуждая развитие недавно начатого проектаflowcon , вспомнили про автозадачи.
Похоже, найдется им место во флаконе, как одному из ответвлений — управлению задачами, которых еще нет.
Когда задачи есть, как сущности, ими управлять не сложно. Об этом есть миллион программ и сервисов, типа redmine или JIRA.
А когда задач нет, управлять нечем, есть только хаос, некие двоичные данные, блоб, который называется «вот как-то так мы работаем». И никакой сервис тут не поможет, потому что ему нечем оперировать.
Спасаются, в основном, через KPI. Формула такая: я не могу прочитать этот блоб, оценю хотя бы его размер. Другими словами, не понимаю, что и как происходит и как этим управлять, поэтому буду смотреть на результат и оценивать его.
Управлять в такой ситуации очень сложно, только эпизодически и вручную, или как крутой управленец — «мне не нравится ваш результат, работайте лучше! Повышайте эффективность!».
Автозадачи это препятствие — отсутствие задач как сущностей — устраняют, и появляется шанс навести блестящую красоту.
Поэтому автозадачи войдут во флакон — причешем их методически, перепишем на metadata.js, сделаем красивую морду, и пойдем мир завоевывать.
(20) скачали, попробовали, используем (УТ, Битфинанс). Были мелкие трудности в освоении из-за того, что подсистема рассчитана на знающего, не сообщает об ошибках зачастую, но статья, комментарии к ней помогли быстро разобраться с этими трудностями.
Начали с проверок, критичных для работы бизнеса. Потом постепенно добавляли менее «критичные» проверки. Первыми пользователями были представители бизнеса, позже хотим и службу поддержки подключить к автозадачам.
Для непосредственно бизнес-пользователей (менеджеров) функционал удобен: вывели им форму на рабочий стол — и они все проблемы/задачи видят сразу. Не нужно строить 200 отчетов, не нужно искать нужный отчет — все в одном месте. Скорость добавления новых проверок теперь измеряется в минутах, а не часах и днях как при использовании «стандартных» отчетов
Для разработчиков тоже довольно удобно — одним инструментом заменили множество отчетов.
Естественно, дорабатываем под себя. Но в целом идеи, заложенные в фундаменте автозадач — отличные. Автозадачи позволяют быстро и с малыми затратами решать множество часто встречающихся проблем.
P.S.
Я часто объясняю принцип работы автозадач через игру Тетрис — в Тетрисе ты всегда видишь только свои ошибки, проблемы. Когда собираешь полную линию — она исчезает, оставляя тебя наедине с тем, что было сделано «неправильно»
(22) Эта ошибка появляется при открытии формы параметров автозадачи в тонком клиенте. Часто в тонком клиенте нужно просто посмотреть или отредактировать параметры автозадачи без редактирования СКД, запускать для этого толстый клиент неудобно.
Мы это переработали: блокируем кнопку редактирования СКД в тонком клиенте и выводим надпись с инструкцией о том, что редактировать можно только в толстом клиенте
Скрестили несколько своих решений, помогли администратору БД 1С.
Взяли Автозадачи, настроили на те механизмы, которые могут время от времени зависать или требовать внимания администратора.
Сначала просто вывели ему автозадачи, но скучновато — надо же заходить и смотреть на них. А администратор БД — человек занятой, на месте не сидит.
Потом вспомнили про диаграммы Flowcon (https://infostart.ru/public/907796/) . Они же умеют не только графики выводить, но и любые данные в виде таблицы. А автозадачи — это, по сути, просто таблица, содержащая все необходимые данные.
Ну и скрестили одно с другим. Автозадачи формируются сами, асинхронно, реагируя на появление проблем. Диаграммы сами, опять же асинхронно, подхватывают автозадачи и несут их в облако.
А администратор просто заходит иногда в телефон и видит, надо ему бежать к компу, или нет.
И все это — на бесплатных компонентах. Тру-ля-ля. Картинку приложил. Задачи еще и разукрашиваются, в зависимости от просрочки.
Так, все дружно ломимся читать и жарко плюсоватьстатью о практике применения автозадач .
Если у вас етсь интеграции через внешние SQL базы данных и ваша платформа умеет работать с внешними источниками данных — автозадачи отлично решают проблему, например, сверки данных внешнего источника с данными 1С: например, поиск незагруженных данных (отсутствующих в 1С), ошибки загрузку и т.п.
Иван, пробую настраивать автозадачи.
Все работает, но почему-то при каждом выполнении регламентного задания создается новая задача, хотя ключ и исполнитель не меняются (ключ — истина, исполнитель задан в настройке). Старая задача при этом помечается как выполненная.
Так и должно быть?
(31) вероятно, у вас взведен флаг «Закрывать по окончании срока».
(32) нет, флаг не стоит
(33) можете как-то показать элемент справочника «Параметры автозадач»? Скриншоты закладок или выгрузить, если на типовой работать будет.
На типовой не будет, есть свой документ.
Суть — проверка, чтобы у непроведенного заказа покупателя не было введенной на основании заявки на сборку.
Запрос:
ВЫБРАТЬ
ИСТИНА КАК КлючЗадачи,
ЗаказПокупателя.Ссылка КАК ЗаказПокупателя,
ЗаявкиНаСборку.Ссылка КАК ЗаявкаНаСборку,
ПеремещениеТоваров.Ссылка КАК Перемещение,
РеализацияТоваровУслуг.Ссылка КАК Реализация,
1 КАК ТекущийОстаток,
ЗаказПокупателя.Дата КАК ДатаЗаказа
ИЗ
Документ.стЗаявкаНаСборку КАК ЗаявкиНаСборку
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
ПО (ПеремещениеТоваров.стЗаявкаНаСборку = ЗаявкиНаСборку.Ссылка)
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя КАК ЗаказПокупателя
ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ПО (РеализацияТоваровУслуг.Сделка = ЗаказПокупателя.Ссылка)
ПО ЗаявкиНаСборку.ДокументОснование = ЗаказПокупателя.Ссылка
ГДЕ
ЗаявкиНаСборку.Проведен
И НЕ ЗаказПокупателя.Проведен
И ЗаказПокупателя.Дата > &Дата
(35) черт его знает, странно как-то…
Попробуйте ключ задачи числовым сделать, единичку например. Без отладки и только гадать могу.
(36) Замена Истины на единичку помогло, спасибо)
(25) Ссылка на флакон не работает.
(38) да, это нормально. Тот флакон умер.