Thermal Print Library — ActiveX библиотека для печати на термопринтерах Godex BZB2/EZ2/EZ4, C.Itoh EZ2/EZ4, Citizen CLP-521/621




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

23 Comments

  1. Johny_v

    А принтеры Zebra будут работать с этой библиотекой?

    Reply
  2. GreenLab

    В версии 1.6 поддержки «прямой» печати на принтеры Zebra нет.

    Сейчас в разработке версия 1.7 в которой будет добавлена поддержка «прямой» печати на Argox-203DT и расширены возможности печати этикеток через стандартную систему печати windows.

    Пока тестировались все заявленные ранее термопринтеры с драйверами от Seagull.

    http://www.seagullscientific.com/aspx/free-windows-printer-drivers-for-label-printers.aspx

    Преимущество библиотеки в том, что можно установить размер материала для печати без настройки форм в параметрах принтера. Зачастую именно настройки форм этикеток и сбиваются в параметрах печати принтера. Если есть желание поучаствовать в тестировании, то могу выслать предварительную версию.

    Reply
  3. S_VA

    1С 7.7 ТиС 9.2 Принтер BZB-2 OC XP печатает через Thermal Print library

    Расшарил принтер для доступа по сети.

    Пытаюсь печатать с ноутбука OC WIN 7 64-bit используя метод «RAW», «\BZB-2»

    принтер молчит.

    Видимо необходимо обновить драйвер с поддержкой WIN7

    Может есть тестовая версия? Готов протестировать.

    9241747337@mail.ru

    Reply
  4. GreenLab

    Метод печати «RAW» использует стандартный windows api для печати. Скорее всего проблема действительно с драйвером. Попробуйте на win7 подключить термопринтер как обычный сетевой принтер с использованием стандартного драйвера Epson LX 300 (либо 300+).

    Ну и проверить работоспособность просто: задания печати должны появляться в очереди печати принтера.

    Планируется выпуск версии 1.7 в которой будет добавлена поддержка «прямой» печати на Argox 203DT.

    Также будут переработаны и улучшены методы печати на любой термопринтер имеющий windows драйвера.

    В частности библиотека будет настраивать размер этикетки без настройки макетов в драйверах принтера.

    Сейчас протестированы все текущие поддерживаемые принтеры с использованием драйверов от Seagull.

    Reply
  5. GreenLab

    Возможно также появиться отдельно x64 версия, но это пока под вопросом

    Reply
  6. b-real
    Летом планируется выпуск версии 1.7 в которой будет добавлена поддержка «прямой» печати на Argox 203DT.

    Также будут переработаны и улучшены методы печати на любой термопринтер имеющий windows драйвера.

    Каким летом ожидается появление и ожидается ли вообще?

    Reply
  7. GreenLab

    (6) b-real, Насчет лета информацию убрал дабы не дезинформировать общественность. Планы по развитию есть, но конкретных сроков указывать не буду, это не коммерческая разработка. Методы «прямой» печати на Argox 203DT реализованы, но это будет последний принтер для которого будет поддерживаться «прямая» печать. Дальнейшие планы: развитие методов формирования этикетки и печати через драйвера (без настройки форм печати и п.р.)

    Reply
  8. b-real

    (7) Ну тогда ждемс…))

    Reply
  9. ImageWriter

    Кому интересно можете посмотреть мою похожую разработку!

    http://infostart.ru/public/147535/

    Reply
  10. XXIVek

    Сейчас все принтеры переводятся на USB. Как с помощью вашей обработки печатать на BZB-2 с USB интерфейсом. Использую вашу разработку 5 лет. Теперь приходится отказываться, т.к. не знаю как указать порт для вывода на печать. Возможно все просто подскажите.

    Reply
  11. GreenLab

    Да все действительно просто и давно реализовано. Вы используете режим печати напрямую в порт, а есть режим печати через стандартный спулер печати windows.

    Вот пример использования:

    Синтаксис :

    EZPrintLabel(CopyCount,DestinationType,Destination)

    Назначение :

    Выводит сформированную этикетку на термопринтер

    Параметры :

    CopyCount

    Количество копий этикетки которое нужно напечатать.

    DestinationType

    Указывает каким способом вывести этикетку на печать.

    Допустимые значения:

    ‘PORT’ — выводить в порт.

    ‘RAW’ — выводить на сетевой принтер через спулер.

    ‘FILE_APPEND’ — выводить в файл с дописыванием.

    ‘FILE_REWRITE’ — выводить в файл с переписыванием.

    Destination

    В зависимости от параметра DestinationType может быть либо числовым либо строковым значением. Если DestinationType задан как ‘PORT’, то это числовое значение с номером LPT порта (может быть любым при использовании маппинга портов), иначе это строка с именем файла или сетевого принтера (к примеру ‘\SERVERHP’ или ‘C:ezscript.dat’).

    В документации и в примере это все описано. Можно использовать как стандартный драйвер для windows от производителя, либо драйвера Seagull http://www.bartenderbarcodesoftware.com/drivers/godex-windows-printer-drivers.aspx, либо стандартные драйвера windows для принтеров типа Epson LX-300

    Этот метод печати даже более удобный и предпочтительный т.к. все задачи по организации очереди печати возложены на подсистему печати windows.

    Reply
  12. koliaff

    Довольно долго пользуюсь данной библиотекой. Проблемы начались с принтером BZB-2U (USB интерфейс). Из Q-label печатает отлично. Из 1С печать идет рывками по миллиметру, из-за чего падает скорость печать, видно что изображение состоит из множества горизонтальных полос, принтер издает ужасный звук при печати. При этом повторюсь при печати из программы QLabel — все отлично. Печатаю так:

    Порт = «RAW»;

    Принтер = «\192.168.2.43GodexBZB»;

    LabelPrinter.EZPrintLabel(1,Порт,Принтер);

    Reply
  13. GreenLab

    (12) koliaff, Мне пока не приходилось работать с модификацией BZB-2U, но если язык описания этикетки в нем такой же как и в BZB-2 (EZPL), то проверьте обработчик печати в настройках драйвера принтера. Должен использоваться winprint (RAW).

    Reply
  14. koliaff

    Обработчик печати указан верный. Может быть проблема в драйвере? Что еще можно проверить?

    Reply
  15. GreenLab

    (14) koliaff, А какой драйвер используется для принтера ?

    Reply
  16. koliaff

    EZ_BZB_drivers_v2.0_vistaE_F_921.exe

    Далее при установке пробовал BZB2 и EZ2. Самое интересное что и при печати через формирование макета штрих код не четкий получается.

    Reply
  17. koliaff

    Видимо отличается система команд у BZB-2U. Специалисты из scancode для этого принтера рекомендуют «BZB-2/BZB-2U/EZ-2/EZ-2S — компонента для печати этикеток из 1С 7.7 ТиС (V1.0.2.0)». А для LPT — шного была другая версия компоненты. Проверил, работает. Из минусов, не получилось запустить на 8-ке. Не достаточно функциональная.

    Также хорошо работает эта обработка http://infostart.ru/public/147535/#comm , но в ней также недостаточно функций.

    Возможно в вашу обработку добавить систему команд этого принтера?

    Reply
  18. ToJIuK

    Здравствуйте . ни кто не сталкивался с проблемой печати пустых этикеток? Использую данную библиотеку , печатаю напрямую через LPT 1 . Но при печати выходят пустые этикетки. Притер исправен . тестовую страницу печатает.

    Reply
  19. universal_kondopoga

    Здравствуйте!

    Подскажите пожалуйста как пользоваться данной библиотекой в 1с7.7. ТиС, и в программе Qlabel, принтер подключен через LPT1, марка принтера GODEX EZ-2S

    Reply
  20. GreenLab

    (19) universal_kondopoga, Для EZ-2S библиотека не тестировалась. Когда я прекратил поддержку библиотеки этот принтер еще не производился. Библиотека является стандартным COM сервером. Все подробно описано в документации . Документация входит в дистрибутив.

    Reply
  21. PovAndy

    Есть ли у кого Библиотека Thermal Print Library v 1.4?

    Пробовал 1.6, у нас на 1С 7.7 работает некорректно.

    Reply
  22. GreenLab
  23. PovAndy

    Спасибо!

    Reply

Leave a Comment

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