Обработка создания ТТН Исходящая ЕГАИС по реализации для УТ 11




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

18 Comments

  1. AlexCherdakov

    скачал пробую, может подскажете заранее с какими проблемами столкнусь при организации оптовой продажи пива в УТ 11 ? и смогу ли я обойтись без покупки УТАП либо модуля обмена ЕГАИС какого-нибудь с инфостарта?

    Reply
  2. protsenkodv

    Пока обходимся стандартным функционалом УТ 11.

    Reply
  3. AlexCherdakov

    (2)

    Пока обходимся стандартным функционалом УТ 11.

    спасибо, если бы не ваша обработка вообще не задумался бы о том что в УТ все и так есть, нужны лишь небольшие доработки. Первая тестовая отгрузка прошла, немного доработал вашу обработку:

    ДокТТНИсх.Грузополучатель = ПолучитьОргЕГАИСПоКонтр(ДокОснование.Контрагент);
    ДокТТНИсх.НомерТТН = ПрефиксацияОбъектовКлиентСервер.ПолучитьНомерНаПечать(ДокОснование.Номер);
    ДокТТНИсх.ДатаТТН = ДокОснование.Дата;
    ДокТТНИсх.ДатаОтгрузки = ДокОснование.Дата;
    ДокТТНИсх.ДокументОснование = ДокОснование;//тут нужно изменение конфигурации

    еще адреса погрузки отгрузки добавлю, посмотрим как полетит

    Если ЗначениеЗаполнено(СтрПередачи.АлкогольнаяПродукция) Тогда
    Если СтрПередачи.АлкогольнаяПродукция.ТипПродукции = Перечисления.ТипыПродукцииЕГАИС.Неупакованная Тогда
    СтрПередачи.Количество = СтрТЧ.Количество/10;
    КонецЕсли;

    КонецЕсли;//это для пива в кегах

    Reply
  4. protsenkodv

    (3) Рад помочь.

    Reply
  5. MAkarPRM

    Под 11.4.3 доработаете?

    Reply
  6. klif

    Кто нибудь допиливал ввод Исходящей ТТН Егаис при ордерной системе?

    Reply
  7. protsenkodv

    (5) Обновил

    Reply
  8. akrelius

    Это печатная форма или что значит «Исходящей ТТН»? мне нужна ФОРМА справки к товарно-транспортной накладной на этиловый спирт, алкогольную и спиртосодержащую продукцию. Утверждена

    постановлением Правительства РФ от 31.12.2005 N 864

    (в редакции постановления Правительства РФ от 02.05.2012 N 422)

    Это оно или нет?

    Reply
  9. protsenkodv

    (8) Это не печатная форма, а обработка создания документа.

    Reply
  10. akrelius

    (9) то есть сам ТТН в УТ есть, только на основании Реализации он «криво» заполняется, а так он заполняется всеми правильными полями?

    Reply
  11. protsenkodv

    (10) На основании реализации он вообще не заполняется. Поэтому и сделал обработку.

    Reply
  12. zhiv

    А если реализация не проведена, ТТН будет создаваться?

    Reply
  13. protsenkodv

    (12)Будет

    Reply
  14. Alexx-k

    Подскажите с ут 11.4.5 будет работать?

    Reply
  15. protsenkodv

    (14) да, работает.

    Reply
  16. Работник

    Я может отстал от жизни.

    1) Какое то время назад в УТ не было возможности создавать исходящие ТТН для продажи оптом. Сейчас это стало возможным?

    2) Протестировал Управление торговлей: редакция 11.4.5.86. Там после проведения документа «Реализация» внизу появляется ссылка для создания ТТН ЕГАИС, по которой она создается и заполняется.

    Это об опте речь или это для продажи юр. лицу в розницу как конечному потребителю?

    Reply
  17. protsenkodv

    Выходит что сделали этот функционал…

    Reply
  18. Работник

    (17) На сайте итс по ЕГАИС начальный материал перелопатили. Убрали описание

    алгоритма работы с продажами как розничными так и оптовыми как для Розницы так и для УТ. И материал не обновляют. Наощупь и методом тыка теперь приходится изучать. В дополнительной документации к дистрибутивам обновления тоже не видел описания изменений (может просмотрел, конечно). Даже звонил в службу поддержки по ЕГАИС всеобщую — и там ссылаются на то, что на ИТС описания нет.

    А справку №1 не надо указывать в Исходящей ТТН? Или она автоматически из данных справки №2 берется?

    Reply

Leave a Comment

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