Печать этикеток 1С УТ 8.1




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2025-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='\

29 Comments

  1. ПСВ

    Сетевого принтера у меня нет так что не проверял и не заполнял эти данные

    Но подбор не работает нн в УТ 10.3.6.8 Демо ,ни в Комплексной автоматизации

    1.04 Демо

    Кнопки командной панели вообще не доступны: Количество по остаткам , Установить количество

    Reply
  2. Alexsisit

    (1) Подбор работает. Делал как раз на этом релизе УТ 10.3.6.8.

    Значит у вас не заполненны штрих-кода. Было ограничение на печать только внутренних ШК, те у которых два первых символа «20», возможно из-за этого.

    По поводу кнопок, они будут доступны после заполнения таблицы.

    Reply
  3. Alexsisit

    Ограничение на печать внутренних ШК убрал.

    Reply
  4. ПСВ

    Да заработал, только Вашу версию я уже не могу скачать по статусу:

    мне можно качать обработки только 1 раз в день

    заккоментировал вот эти строчки:

    |ГДЕ

    |Номенклатура.Ссылка В ИЕРАРХИИ(&список)

    //|И ВЫБОР

    //|КОГДА (ВЫРАЗИТЬ(Штрихкоды.Штрихкод КАК СТРОКА(2))) = «»20″»

    //|ТОГДА ИСТИНА

    //|КОНЕЦ»

    |»);

    Reply
  5. Alexsisit

    (4) и правильно ))) …

    Reply
  6. detec

    К сожалению, непонятно, для какого принтера формируются коды печати.

    Reply
  7. Alexsisit

    (6) у себя использую зебру Штрих-м

    Reply
  8. trof

    Никак немогу разобраться с параметрами..

    в комментариях описано частично..

    есть ли ссылка на описание формата файла?

    у меня принтер zebra lp 2824

    «размер буфера», «высота секции», «разрыв»

    Ар1,р2,р3,р4,р5,р6,р7,р8 — параметры строки?

    upd: разобрался вроде.. спасибо за идею

    Reply
  9. philphil

    Для каких версий ЭТО???

    Reply
  10. philphil

    {Форма.Форма(178)}: Поле объекта не обнаружено (ТипЦен)

    ЦенаПр = Ценообразование.ПолучитьЦенуНоменклатуры(стрТабл.Номенклатура,,глТекущаяОрганизация.ТипЦен,ТекущаяДата());

    Reply
  11. philphil

    СокрЛП(стрТабл.Номенклатура.Модель)???

    Reply
  12. philphil

    Если это для конфигурированной УТ, так неплохо бы написать об этом.

    Reply
  13. philphil

    ну и как указать размер этикетки?

    Reply
  14. Alexsisit

    Исправил ошибки, перезалил.

    Дико извиняюсь, не было времени. Если будут еще ошибки пишите, обязательно исправлю.

    Reply
  15. Bladimir2020

    а на hp1320 пойдет?

    Reply
  16. extreme861

    Автор подскажите пожалуйста как правильно указать принтер Lp 2824

    Reply
  17. DimaP

    что с принтером делать?

    у меня локальный

    Reply
  18. Ivan_82

    Каким образом заставит ее работать на 8.2 или скачать доработанную http://infostart.ru/public/75613/

    Reply
  19. Ivan_82

    В УТ 8.2 ред 10.3 когда делаешь из документа «Поступление товаров и услуг» почему то не выводит еденицу измерения и кол-во. Хотя под 8.1 работает отлично. Конфигуратором сконвертировал.

    Reply
  20. Alexsisit

    (19) Ivan_82, Конечно можете взять доработанную. Не зря же её дописал автор! )

    Если уж совсем ничего не получить тогда обращайтесь, сделаю лично для вас )

    Reply
  21. rvk68

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

    Reply
  22. Alexsisit

    (22) rvk68, Я давным давно эту обработку скачал также. Настраивал методом «тыка», т.к. EPL тоже не знал )). Смотри каким шрифтом и как позиционируются строчки и поиграй настройками.

    Reply
  23. mmx2003

    хоть бы предварительный просмотр сделали ато неясно что и куда печатается — зря рейтинг использовал на это

    Reply
  24. Alexsisit

    (24) mmx2003,

    Первое: в описании есть картинка этикетки.

    Второе: В описании написано «Данная обработка отправляет данные для печати напрямую в порт, куда установлен ваш принтер.».

    Читайте внимательно описание!

    Reply
  25. mob51

    Обработка отличная, заменил ею стандартную. Но есть один минус, обработка не имеет макет чем усложняет редактирования под личные цели… Спасибо.

    Reply
  26. Scorpio1985

    Обработка очень помогла, как то давным давно печатал на COM порт что на много удобней и работает стабильно надеюсь что этой обработкой можно и через USB передавать на печать. Спасибо!! Спасибо!! Спасибо!! Спасибо!! Спасибо!! Спасибо!! Спасибо!!

    Reply
  27. SiviS

    Никто не пробовал тестировать данную обработку на 8.2 Комплексная автоматизация? Если обработку подключить к документу «Поступление товаров и услуг» будет ли она брать номенклатуру из табличной части документа и печатать штрихкод?

    Reply
  28. 1977

    Проверяли в КА 8.2 ?

    Reply
  29. net7wolf

    неплохо бы добавить отбор из документа

    Reply

Leave a Comment

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