Самый простой клиент ЕГАИС УТМ для розницы. $m




Принцип обмена данными из 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='\

46 Comments

  1. Tarlich

    Т.Е ни какого сопоставления, создания документов…

    тогда она и на бух и на УТ взлетит?

    Reply
  2. Terrain25

    (1) Tarlich, Да обработка полностью абстрактная, в ней можно только отправить акт всех видов, и посмотреть документы. Необходимые данные хранятся во внешнем файле. Зависимость от конфигурации отсутствует … Интеграции с учетными документами нет — полностью отдельный учет. Ответ на вопрос: Да взлетит , да можно открывать по очереди то там ,тот там, только указывайте одну и туже папку «Каталог хранения данных«

    Reply
  3. MyPuK_OLD

    На Рарус-общепит 1.6 будет работать?

    Reply
  4. Terrain25

    (3) MyPuK_OLD, Добрый день! Да подойдет,если Вы запускаете ее на платформе 8.2 в режиме обычного приложения (толстый клиент).

    Reply
  5. MyPuK_OLD

    (4) Спасибо за ответ, в данный момент наш общепит работает на 8.1, но я не вижу преград для обновления платформы. Буду обсуждать с руководством.

    Reply
  6. Terrain25

    (5) MyPuK_OLD, Обработка использует только возможности платформы. вы можете использовать обработку в другой БД например в демо-версии одной из типовых конфигураций, хоть ЗУП. Но не забывайте о лицензионном соглашении с 1С и РАРУС. Это должен быть приобретенный продукт… одна эта обработка не дает Вам права использовать 1С.

    Reply
  7. MyPuK_OLD

    (6) Да, лицензия на общепит имеется, документы тоже все есть..будем думать..может до 01.07.2016 нам и этого хватит.

    Reply
  8. vin1c

    на управляемых формах откроется? в рознице 2.1 не хочется делать пока сопоставление и т.п.

    Reply
  9. Terrain25

    (8) vin1c, Добрый день!

    Управляемой формы не предусмотрено…

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

    Добавьте к ней один справочник чтобы она стала Вашим прикладным решением собственной разработки, и открывайте в ней эту обработку …

    Опыт показывает: учитывая нулевую интеграцию к учетной системе, открывать обработку в «соседнем » окне даже удобнее…

    Reply
  10. vin1c

    а если базовая версия розница 2.1 запустить в обычном приложении мне кажется она тоже откроет эту обработку? у нас куча ноутов в офисе с базовыми версиями и не хочется возится с сопоставлением справочников и т.п всем в принципе нужен только прием накладных.

    Reply
  11. Terrain25

    (10) vin1c, Если у Вас получится запустить Розницу 2.1 в режиме обычного приложения — не вопрос все заработает. Проэксперементируйте с любой «толстой» обработкой если откроется значит и эта обработка откроется. Боюсь что в Рознице 2.1 этот режим не предусмотрен, но на 100 % не уверен пробуйте.

    Reply
  12. tanya_charm

    (10) vin1c, Да без проблем будет работать, только функционал самой Розницы будет не доступен. Весь функционал конфигурации доступен в управляемых формах.

    Reply
  13. Tarlich

    А демо или триал есть.? сумма хоть и маленькая ……

    Reply
  14. Terrain25

    (13) Tarlich, Нет. Дэмо и триала нет. Такие версии присущи более крупным решениям. Защита от разтриаливания подобной обработки может стать сложнее самой обработки… Обычно в демо кладут часть функционала, а в самой обработке и так одна существенная функция — отправка акта. Просто верьте гарантиям infostart.ru …

    Reply
  15. Tarlich

    (14) оплатил

    Reply
  16. Terrain25

    (15) Tarlich, Сообщите если возникнут проблемы

    Reply
  17. Tarlich

    Предусмотрена бесплатная поддержка (обновление) (вдруг в Егаисе будут глоб изменения)?

    Reply
  18. Terrain25

    (17) Tarlich, Добрый день! Мелкие изменения однозначно да. Представить себе глобальные изменения пока не могу, думаю их не будет… По крайней мере в части подтверждения факта оприходования(закупки)…

    Reply
  19. Filchaleks

    (18) Насколько закрыт код, можно ли будет самостоятельно увеличить функционал(прикрутить привязку). Какая привязка обработки(лицензирование) — у нас база на флешке на двух компьютерах работает.

    Reply
  20. Terrain25

    (19) Filchaleks, Добрый день! Ограничений по лицензиям внутри одного юр. лица(ИП) не предусмотрено. Код полностью открыт. Я не возражаю против использования доработанных версий, как угодно, если это не коммерческий проект, а доработка под собственные нужды. Программной привязки нет.

    Reply
  21. derevce

    Что означает сообщение «Нет данных в архиве для сохранения» — в ЕГАИС нет никаких запрашиваемых данных?

    Reply
  22. Terrain25

    (21) derevce, Означает только то, что в таблице сохранения данных нет ни одной записи… Это происходит до момента загрузки первого значимого документа в систему. После появления любой архивной записи сообщение перестанет появляться. Это вызвано тем что для Вас нет пока в егаис ничего… Или Ваш модуль УТМ работает однобоко(не может получить данные с сервера), но сама обработка может видеть только собственный пустой архив. Работу модуля УТМ оценивайте по логам…

    Reply
  23. derevce

    почему-то перестали уходить подтверждения актов. (в логах УТМ чисто — только успешное получение накладных). в момент отправки подтверждения обработка как бы «подвисает». очистка транспортного каталога не помогла. в какую сторону копать ?

    Reply
  24. Terrain25

    (23) derevce, Первая рекомендация всегда : перезагрузите компьютер с УТМ. Подвисание при отправке как правило происходит в момент установки подписи (ЭЦП). Проверьте джакарту… Но при этом в логах все равно будут ошибки(если с джакартой что то не так)… Возможно требуется обновление УТМ.

    Reply
  25. derevce

    (24) спасибо за ответ. заработало, похоже как раз после обновления УТМ

    Reply
  26. Ольга_tmp

    Доброго дня, правильно ли понимаю, что для ИП данного функционала достаточно и после 01.07? у нас платформа 8.3 — будет работать?

    Reply
  27. Terrain25

    (26) Ольга_tmp, Добрый день! По поводу после 01.07. могу только сказать, что если ИП можно выполнять только приходную часть после этой даты, то да функционал подойдет. По поводу 8.3 отвечаю сама платформа 8.3 подходит, но форма обработки неуправляемая — это значит, что она запускается только в обычном приложении(толстый клиент). Например бухгалтерия предприятия 3.0 и Управление торговлей 11.х запускается только в управляемом приложении, если у Вас не «базовая 1С», то выход есть можно изменить режим запуска конфигурации или создать пустую с режимом запуска «обычное приложение»… Как правило в новых, сопровождаемых, конфигурациях и так есть все необходимое просто поставьте обновления. Это решение создавалось для заброшенных версий и самоделок на базе 1С. Внимание! Прежде чем выбирать решение для интеграции, проверьте работоспособность самого УТМ и сертификатов на джакарте… у ИП зачастую возникали сложности с этим…

    Reply
  28. newbas

    Купили и поставили вашу обработку.

    Пришли накладные. При нажатии «открыть» в колонке «Управление» на вкладке «поставки» ошибка

    {ВнешняяОбработка.ПростойРозничныйКлиентЕГАИСУТМ.МодульОбъекта(1146)}: Поле объекта не обнаружено (Производитель)

    Для каждого ТекКлючПроизводитель Из ТекСтрокаТТН.Производитель Цикл

    Платформа 8.3.7

    Конфигурация БП 3.0.28 в обычном режиме

    Reply
  29. Ольга_tmp

    (27) Terrain25 , Добрый день, загрузили накладные, выбрали одну, нажали «отправить акт».на вкладке Отправленные запроса 2 строчки с QueryPartner и WayBillAct, надо ждать пока ЕГАИС обработает ответы или что-то еще не сделано?

    Reply
  30. Terrain25

    (29) Ольга_tmp, Добрый день! от Вас больше ничего не требуется, просто проследите чтобы впоследствии (обычно в течении 3-20 минут) пришел ответ на акт… Для разных типов актов (расхождение, отказ, подтверждение) разные наборы ответов ….

    Reply
  31. Ольга_tmp

    Спасибо за ответы, обработка отличная, помогает разобраться с сущностью ЕГАИС и стоит каждой копейки..и даже больше)

    Reply
  32. newbas

    (30)

    Скажите что-нибудь по сообщению (28)

    Reply
  33. Terrain25

    (32) newbas, Добрый день! Я Вам отвечал в ветке техподдержки… Пришлите текст XML WayBill и соответствующей ей FORMBREGINFO, получить тексты можно в соответствующих разделах «входящих» в колонке «ссылка» (нажатие на кнопку открытия)

    Reply
  34. newbas

    (33)

    Я никаких сообщений не получал. Сейчас скину

    Reply
  35. Terrain25

    (31) Ольга_tmp, Спасибо за одобрение, но вы не нажали на звездочку слева от публикации — по правилам сайта если вы рекомендуете эту разработку то звездочка, если вы остались недовольны то знак «кирпич»

    Reply
  36. Terrain25

    Внимание! Уважаемые пользователи. Подтверждаю информацию в сообщении (28), в арсенале поставщиков появилась программа которая отправляет Документы не прошедшие проверку, в них по отдельным позициям полностью отсутствует информация о производителе. Для подавления ошибки в обработке выпущена новая версия которая будет отправлена каждому покупателю на почту указанную при регистрации заказа на обработку…

    Reply
  37. Tarlich

    Интересует : есть ли доработка не только для приема но и для отправки ТТН нашим покупателям? (желательно УТ 10,3)

    Может отдельное решение?

    Reply
  38. Terrain25

    (37) Tarlich, Такой доработки не может быть, для отправки ТТН требуется полная интеграция ЕГАИС УТМ к Вашей учетной системе… Таких решений полно как на этом портале, так и вне его, например от фирмы 1С. Просто надо поставить обновления….

    Reply
  39. Tarlich

    Не реализован ли возврат поставщику?

    Reply
  40. Terrain25

    (39) Tarlich, Добрый день! нет такой функции не предусмотрено…

    Reply
  41. Tarlich

    (40)

    Нет ли доработок по запросу остатков?

    или (для примера) для каких либо для типовых решений?

    Reply
  42. Terrain25

    (41) Tarlich, На базе вот этого легко сделать: http://infostart.ru/public/402052/

    Reply
  43. Djagernaut

    {Обработка.ПростойРозничныйКлиентЕГАИСУТМ.МодульОбъекта(142)}:

    Ошибка при вызове конструктора (HTTPСоединение)

    НТТР = Новый HTTPСоединение(АдресСервераУТМ, ПортСервераУТМ);

    по причине:

    Несоответствие типов (параметр номер ‘2’)

    Reply
  44. Terrain25

    (43) Djagernaut, Версия платформы соответствует?

    Reply
  45. Djagernaut

    (44) Terrain25,

    8.3

    Установил режим совместимости, Версия 8.2.16 запросы стали обрабатываться.

    Reply
  46. Terrain25

    (45) Djagernaut, Конструктор HTTPСоединение эволюционировал …

    Reply

Leave a Comment

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