Кастомизация "на лету"




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?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='\

44 Comments

  1. ardn

    Очень круто.

    Reply
  2. 1c-intelligence

    (1) ardn, спасибо.

    Жаль, что мне пока не удается выделить достаточно времени, чтобы рассказать о решениях подробнее и выложить в общий доступ. Пока только проверку данных сделал не платной, а за смартмани, и проверку ведения учета выложил в варианте «как есть». Но я надежды не теряю.

    За полгода, прошедших с конференции, появилось еще несколько решений, построенных по тем же принципам.

    Например:

    1. Расчет, хранение и представление произвольных показателей + интегральные сценарные показатели;

    2. Управление произвольными задачами через матрицу Эйзенхауэра;

    3. Универсальное рабочее место по формированию документов.

    Т.е. тема продолжается. Может, на следующую конференцию удастся попасть в качестве докладчика и рассказать 🙂

    Reply
  3. miavolas

    Мы регулярно используем различные напоминания как о запланированных бизнес-событиях, так и событиях, сообщающих о наличии проблем. Правда без использования предложенных автором терминов «автоинформатор» и «автозадача».

    Просим подсказать автора, каково место механизма бизнес-процессов (как механизма платформы) в предлагаемых им решениях?

    Reply
  4. 1c-intelligence

    (3) miavolas, механизм бизнес-процессов не используется. Используется только карта маршрута бизнес-процесса, просто как средство визуализации в одном из решений.

    Можете поподробнее рассказать, в каких конфигурациях и какие механизмы используете для напоминания о запланированных бизнес-событиях, и событиях, сообщающих о наличии проблем? И каков сценарий использования этих напоминаний? Каков сценарий контроля отработки этих напоминаний? Ну и любую информацию по этой теме.

    Reply
  5. ИНТЕГРА

    Аналогично работаем. Код бизнес-логики максимально в режим предприятия выводим — в дело идут и произвольные отчеты, и использование справочников для хранения/редактирования исходного кода (пример). Лет 10 назад консоль отчетов очень помогала пользователям свеже-внедренной УПП отлавливать пустую аналитику, которая не давала закрывать затратные счета. Но автоматическое заполнение все-же не рискую, надо и людям давать подумать. Полная автоматизация — грех 🙂

    Также большим подспорьем является «консоль запросов с обработкой результата».

    Reply
  6. miavolas

    (4)

    О конфигурациях и их механизмах:

    — в управлении торговлей 10.3 использовали типовой механизм оповещения о задачах;

    — в типовом отраслевом решении Альфа-Авто тоже использовали штатный механизм напоминаний (там это отдельный регистр сведений)

    Нам очевидно, что использование одиночных извещений, даже об очень важных бизнес-событиях связано с ограничением ресурсов выделяемых на то, чтобы продумать бизнес-процессы комплексно. Также нам видится, что бы хотя бы основные бизнес-процессы предприятия, если они длительные или находятся на стыке зон ответственности разных людей желательно автоматизировать с использованием бизнес-процессов(платформы) и уже с привязкой к задачам использовать извещения.

    При использовании типового продукта не редко приходится внедрять, например бизнес-процесс торговли по заказам, с простой картой маршрута ( http://www.mailvirtual.ru/images/mapmax.png ), где механизм напоминаний подсказывает пользователю о появлении задачи.

    Reply
  7. necropunk

    Помню доклад, очень понравился, после конференции скачал Проверку Данных, покопался — действительно интересные решения, спасибо!

    Reply
  8. Makushimo

    Вау!

    Reply
  9. miavolas

    Статья действительно интересная, прошу автора подсказать где можно скачать материалы для более подробного изучения

    Reply
  10. kasper076

    Кроме красивых картинок ничего не увидел.

    Reply
  11. dddxddd

    Спасибо за статью!

    Reply
  12. ИНТЕГРА

    (10) kasper076, тоже считаю, что ничего принципиально уникального тут нет. Меня удивляет что все так не работают априори ) Пихать сложную бизнес-логику в конфигуратор считаю дикостью. В очередной раз скажу, что верхом безумия и идиотизма является механизм регламентированных отчетов от 1С, когда они его приведут в порядок мне не понятно, развивается в непонятном направлении.

    Reply
  13. 1c-intelligence

    (7) necropunk, спасибо, рад что понравилось.

    Reply
  14. 1c-intelligence

    (5) ИНТЕГРА, все верно пишете, про хранение и настройку бизнес-логики в данных, а не в конфигурации.

    Единственная разница — в данной статье сделан упор на решения, хранящие и использующие СКД — там, где это лучше всего подходит.

    Reply
  15. 1c-intelligence

    (9) miavolas, из приведенных в статье выложены 2 решения — «Проверка данных» и «Проверка ведения учета в УПП», они есть в моих публикациях.

    Остальные тоже планирую распространить каким-либо способом.

    Часть решений распространял на партнерской конференции.

    Reply
  16. 1c-intelligence

    (10) kasper076, это же статья по докладу 🙂

    Когда я выбирал тему доклада, то упор сделал не на подробное изложение какого-либо решения, а на обзор. Поэтому получилось кратко.

    Я подавал еще несколько тем для докладов, например — отдельный доклад про автозадачи, где все хотел подробно разжевать. Смысл был в том, что автозадачи может реализовать любой программист 1С, в чем я убеждался дважды. На собеседовании рассказывал кандидату о решении, кратко его показывал, а он потом мне писал с новой работы, что сделал такое же, даже лучше.

    Другой доклад предлагал по универсальному механизму планирования.

    Но люди выбрали именно этот доклад — обзорный. Поэтому только картинки 🙂

    Если зададите вопрос по какому-либо решению — с радостью отвечу. По архитектуре, использованным приемам работы, практике использования.

    Reply
  17. 1c-intelligence

    (6) miavolas, спасибо за подробный ответ.

    У нас основная конфигурация УПП 1.3, т.е. механизм напоминаний там как в УТ 10.3. Мы его использовали лет 5 назад, но он слишком узкоспециализированный. Нужно было решение, позволяющее информировать о любых событиях, связанных с любыми объектами и состояниями данных,в т.ч. с отсутствием каких-либо данных и состояний. Если на разработку такого решения нужно 1-2 дня, то почему бы и нет. Так было с информатором.

    Автозадачи — почти то же самое, только хранимое в системе. Немного похоже на понятие «триггер» в базах данных. Главная фишка, также как и в информаторе — простота запуска конкретной задачи в работу. На запуск уходят минуты — достаточно написать запрос, выбрать ответственного и срок.

    Reply
  18. 1c-intelligence

    (11) dddxddd, рад что понравилось.

    Reply
  19. psih12

    Спасибо за полезную статью. Хотелось бы поглядеть на решение «Консолидированные отчеты» и «Расчет, хранение и представление произвольных показателей + интегральные сценарные показатели».

    Reply
  20. Amel2010

    Очень интересные идеи… Спасибо за информацию!

    Reply
  21. kasper076

    (16) скачал Проверка данных. Теперь за стартмани и с отслеживанием срабатывания, все праздники изучал. Оценил красоту кода, идею решения и реализацию. Нашел даже парочку моментов, которые можно оптимизировать ))) Спасибо.

    Reply
  22. 1c-intelligence

    (21) kasper076, рад что понравилось.

    Reply
  23. 1c-intelligence

    (22) Yashazz, я правильно понял, что ваше руководство — некий авторитет профессиональном плане, в том числе для вас?

    Если ваша идея не вызвала у них энтузиазма и вам было объяснено, что подобные навороты от лукавого — это действительно так и есть? Т.е. идея плоха?

    Я прошу прощения, просто не знаю, что у вас за руководство — оно же разное бывает.

    Про баян — все верно, претензии на уникальность нет. И стремления к ней — тоже.

    Reply
  24. 1c-intelligence

    (20) Amel2010, спасибо, надеюсь пригодится — идеи для разработки и те решения, которые выложены на инфостарте.

    Reply
  25. 1c-intelligence

    (19) psih12, пока только рассказать могу, чтобы идеи решений могли вам пригодиться в собственной разработке.

    До публикации этих решений, скорее всего, доберусь не скоро.

    Reply
  26. CheBurator

    Хороший материал.

    Reply
  27. Synoecium

    классная статья. Жаль, что не выкладываете больше разработок

    Reply
  28. 1c-intelligence

    (28) Сергей, а вам какие решения были бы интересны?

    Reply
  29. Synoecium

    (29) В первую очередь интересует решение «Автозадачи», которое перекликается на мой взгляд с решением «Информатор» (наступает событие — система либо оповещает пользователя, либо создает задачу и отслеживает выполнение). Мне кажется больше всего вопросов и одобрительных высказываний на Infostart Event как раз было по автозадачам.

    Еще очень интересная тема «Консолидированные отчеты», с ростом числа конфигураций и баз, ощущается потребность в простой консолидации отчетных данных, без выгрузок-загрузок таблиц.

    На третьем месте моих интересов «Проверка ведения учета». У нас есть куча разрозненных отчетов, которые просто выводят ошибки, найденные в определенных данных в заданном периоде. Было бы любопытно взглянуть на универсальный инструмент за вашим авторством и, возможно, взять его на вооружение.

    Reply
  30. Новиков

    (29) Интересуют «Консолидированные отчеты». Планируете ли вы их выложить в открытый доступ? Любопытно бы было взглянуть!

    Reply
  31. 1c-intelligence

    (30) над автозадачами я поработал, уже есть изолированная конфигурация и руководство по внедрению. Осталось собраться с силами и изготовить публикацию.

    Единственное, и наверное главное, что меня беспокоит — будет ли кто-то ей пользоваться. Я рассылал эту изолированную версию примерно 10 людям, которые заявились как тестировщики, но пользы ни им, ни мне это не принесло.

    Возможно, есть какой-то порог вхождения в такие инструменты для программистов. Невозможно сделать ни одной автозадачи, не создав схему компоновки. Схема компоновки — центральный элемент всех решений кастомизации на лету. А у ребят, почему-то, плохо со схемами компоновки. Код писать — да, мышкой настраивать (как проверка данных) — да, а схему компоновки написать — нет. Даже если на это нужно 5 минут, и результат для бизнес-задачи будет полезный.

    Или зря драматизирую?

    Reply
  32. aeteros

    (32) Зря драматизируете, очень интересно разобраться с вашим механизмом, у меня, например, каждое описанное в статье решение нашло отклик, т.к. при внедрении подобные желания были и у заказчика и у меня. А кому это действительно нужно с СКД разберется.

    Reply
  33. ifilll

    Меня удивили комментарии, почему никто не рассказал своего подобного опыта?

    Практически везде где больше 100 человек в базе работает, какие то подобные системы разрабатывались.

    Пакеты каждодневных отчетов, рассылка ошибок по email, рабочие столы (больше актуально для ОП чем для УФ), шаблоны стандартных операций на процессы, тысячи их.

    Но у вас тут искорка все реализовано в СКД.

    Reply
  34. Synoecium

    (32)

    «А у ребят, почему-то, плохо со схемами компоновки.» — думаю проблема в том, что схема компоновки данных это инструмент программиста, к тому же довольно капризный инструмент. Многие программисты сталкиваясь с граблями и багами в СКД, со временем отказываются от него вовсе, предпочитая надежную связку запрос + табличный документ с оформлением. Но самая ценность подобных подсистем кастомизации, на мой взгляд, заключается в возможности «настроить все мышкой» обычному специалисту/методисту, не прибегая к помощи программиста и в идеале в подсистеме должно быть 2 варианта настройки: 1) простой и быстрый, но с ограничениями 2) гибкий и мощный, но скорее всего слишком сложный для пользователя. Еще одна версия непопулярности схем компоновки данных это их тяжеловесность и избыточность для задач, отличающихся от построения отчета.

    Reply
  35. Synoecium

    (34)

    ну вот например у нас используется самодельная автоматическая рассылка отчетов, которая оформилась со временем в эту публикацию

    http://infostart.ru/public/464647/

    Reply
  36. 1c-intelligence

    (34) конечно разрабатывались. В моих разработках нет ничего принципиально нового.

    Просто немного более систематизировано, выделен ключевой подход — использование СКД в режиме 1С:Предприятие, как средства быстрой кастомизации с учетом данных ИБ.

    Возьмите тот же монитор ERP, который есть в типовых конфигурациях. Там тоже есть возможность делать свои показатели через СКД. Много людей делают свои показатели?

    Reply
  37. 1c-intelligence

    (35) видимо мы по-разному смотрим на СКД. Или в разное время смотрели.

    Лет 8 назад — да, в СКД были ошибки. Сейчас не припомню ничего критического.

    Мне СКД нравится по нескольким причинам:

    1. Не нужен конфигуратор, чтобы писать запросы, настраивать вывод и отборы;

    2. Раз схема делается в режиме 1С:Предприятие, можно использовать данные ИБ в отборах и параметрах. Это архиважно, когда делаешь именно кастомизацию у конкретного клиента, а не создаешь инструмент, который кто-то потом будет настраивать;

    3. СКД хранит в себе все, что нужно — и запрос, и настройку вывода, и отборы, и сортировку, и УО. Другие инструменты такого не позволяют сделать.

    4. При этом все, что хранится в СКД, можно разбирать по кускам и использовать. Например, сделать парсер УО, прочитав из схемы только УО. Или взять только текст запроса, или только макет (такой подход использован в Проверке данных).

    5. СКД сериализуется, может сохраняться в файл. Отдельно можно сохранить только настройки.

    6. СКД имеет несколько инструментов для визуализации своих частей. Например, можно прочитать и вывести на форму только настройки. Можно только отбор. И т.д. Такой подход использован в той же проверке данных.

    Наверное, ключевое отличие — во взгляде на СКД. Я смотрю не на как средство построения отчетов, а как на инструмент получения требуемых данных. Своего рода view, как она была в СУБД.

    Reply
  38. ifilll

    (37) ненене я как раз вами восхищаюсь, систематизировали, написали, применяете в быту, круто!

    И то что обернули это все в СКД считаю более положительным решением чем отрицательным. Все таки однообразно лучшем чем зоопарк (пишу как человек руки которого по локоть в зоопарках испачканы).

    Немного удивлен другими товарищами, как индиффирентненько как то.

    Reply
  39. KapasMordorov

    У СКД основной недостаток — оптимизация текста запроса с получением неожидаемых результатов. Обход заводит в такие дебри, что на простых задачах бывает неэффективно.

    Просили в партнерском форуме отключение оптимизации… воз как обычно…

    Reply
  40. 1c-intelligence

    (40) в задачах, которые описаны в статье, такие штуки если встречаются, то редко.

    Обычно мне от СКД нужна плоская таблица, которую как не обходи — она будет плоской.

    Reply
  41. 1c-intelligence

    Выложил автозадачи — https://infostart.ru/public/656758/

    Reply
  42. mishinas1987

    Спасибо

    Reply
  43. psih12

    (26) Прошло уже три года.. Надеюсь, что доживу и увижу решения «Консолидированные отчеты» и «Расчет, хранение и представление произвольных показателей + интегральные сценарные показатели».

    Reply
  44. 1c-intelligence

    (44) второй будет в ближайшем релизе флакона

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *