Кастомизация бирки на Godex

Предварительная подготовка к работе в программе GoLabel

Подключаемый принтер Godex должен работать в одной локальной сети с компьютером на котором будет создаваться бирка

  • Скачиваем и устанавливаем программу GoLabel (рекомендуем использовать версию 1.17) по ссылке
  • Запускаем программу GoLabel и заходим в настройки печати:

  • Настраиваем тип принтера и интерфейс подключения к принтеру

  • Очищаем внутреннюю память принтера (если там что то есть)

  • На вкладке «Дополнительно», перетаскиваем в поле редактирования бирки элемент “Текст шрифтами принтера”. Переходим на вкладку «Тип шрифта», выбираем «Шрифт TrueType», указываем имя шрифта TA и приступаем к загрузке шрифта в память принтера

  • Для использования подходит любой моноширинный шрифт, мы рекомендуем использовать шрифт CourierNew. После этого этапа предварительная настройка принтера заканчивается.

  • Продвинутые пользователи могут использовать несколько шрифтов, например, шрифт LiberationMono-Bold - он более «Жирный», и если требуется выделить на бирке элемент можно воспользоваться этим шрифтом. Все используемые шрифты должны иметь разные название, например, второй шрифт лучше назвать TB.

Создание будущего шаблона бирки

  • На предыдущем этапе мы настроили все необходимые параметры нашей бирки (используемого принтера, указав тип носителя, наличие автоматического обрезщика и т.п.). Теперь необходимо задать размер бирки и тип используемой бумаги. Для этого на вкладке «Основной» нажимаем кнопку «Новая» и настраиваем «Размер носителя» и «Тип бумаги». В примере мы будем настраивать бирку размером 58*30 без отступов на непрерывной чековой ленте без разрыва.


  • Если на текущем этапе экспортировать бирку в формат EZPL то увидим наш шаблон для печати. В этом шаблоне указаны все необходимые параметры (тип печати, обрезчик, размер бумаги, отступы, кол-во бирок и т.д.) которые мы настроили до этого момента через GUI программы

  • Теперь необходимо определиться какую информацию об услуге будем выводить на бирке. В нашем примере мы будем отображать: название склада приёма, даты приёма/выдачи, номер бирки, штрихкод бирки, имя клиента, номер заказа и название услуги.
  • Помещаем в область печати настроенный шрифт с текстом «1234567890123…» что бы гарантированно мы зашли за видимую область печати бирки (в будущем мы будем считать сколько символов помещается в одну одну строчку выбранным размером шрифта.

  • Изменяем размер шрифта которым мы будем печатать. Например, в пример мы будем печатать название склада мелким шрифтом размером всего 8 у.е.

  • Дальше аналогичным образом добавляем все необходимые строчки нашей бирки с нужными размерами таким образом что бы все красиво разместилось и влезло. Смотреть промежуточный результат можно после нажатия на кнопку «Экспортировать»

  • ШК на бирку добавляется немного иначе. Чаще всего мы используем ШК Barcode128 (например, 280000000000002320). Его можно добавить штатными средствами. Для того что бы сэкономить место можно отключить печать символов самого ШК. Для этого на вкладке “Понятный читаемый стиль” отключаем заголовок.


  • Для того что бы проверить наш шаблон необходимо печатаем получившуюся бирку. Если мы используем автоматический обрезчик он также должен сработать.

  • В итоге из принтера должно показаться нечто похожее на наш макет. На нашей бирке мы использовали 3 размера шрифта: 8, 10 и 16. Теперь необходимо посчитать сколько символов каждого размера у нас получилось. В нашем примере получились следующие цифры: для размера 8 у нас вышло 27 символов, для размера 10 у нас вышло 22 символа а для размера 16 всего 14 символов. На этом создание шаблона для нашей бирки подошло к концу.

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

  • Запускаем программу IBExpert и проводим скрипт по созданию/изменению процедуры генерации EZPL шаблона нашей будущей бирки. Входным параметром процедуры всегда будет внутренний номер услуги. Запросом необходимо вытащить из базы данных информацию которую мы в будущем планируем отображать на бирке.
CREATE OR ALTER PROCEDURE SP_GET_CUSTOM_EZPL_LABEL (
    DOS_ID D_ID_INT64)
RETURNS (
    EZPL_TEXT D_BLOB)
AS
DECLARE variable SCLAD_KREDIT_NAME D_STR_100;
DECLARE variable DATE_BEG D_STR_50;
DECLARE variable DATE_END D_STR_12;
DECLARE variable BARCODE_READ D_STR_25;
DECLARE variable BARCODE D_STR_25;
DECLARE variable DOC_NUM D_STR_50;
DECLARE variable CLIENT_NAME D_STR_100;
DECLARE variable TOVAR_NAME D_STR_500;
BEGIN
 
  SELECT
    s.name,
    lpad(EXTRACT(DAY FROM d.doc_date), 2, '0') || '.' || lpad(EXTRACT(MONTH FROM d.doc_date), 2, '0'),
    lpad(EXTRACT(DAY FROM dor.date_out), 2, '0') || '.' || lpad(EXTRACT(MONTH FROM dor.date_out), 2, '0'),
    dos.barcode_read,
    dos.barcode,
    c.name,
    d.doc_num,
    tt.name AS tovar_name
  FROM doc_order_services dos
  LEFT JOIN docs_order dor ON dor.id = dos.doc_order_id
  LEFT JOIN docs d ON d.doc_id = dor.doc_id
  LEFT JOIN tovars_tbl tt ON tt.TOVAR_ID = dos.tovar_id
  LEFT JOIN contragents c ON c.contr_id = d.contragent_id
  LEFT JOIN sclads s ON s.id = dor.sclad_kredit_id
  WHERE dos.id = :dos_id
  INTO :sclad_kredit_name, :date_beg, :date_end, :barcode_read, :barcode, :client_name, :doc_num, :tovar_name;
 
  SELECT res FROM sp_ezpl_print_string(:sclad_kredit_name, 27, 1) INTO :sclad_kredit_name;
  SELECT res FROM sp_ezpl_print_string(:date_beg||'    '||:date_end, 22, 1) INTO :date_beg;
  SELECT res FROM sp_ezpl_print_string(:barcode_read, 14, 1) INTO :barcode_read;
  SELECT res FROM sp_ezpl_print_string(:client_name, 27, 1) INTO :client_name;
  SELECT res FROM sp_ezpl_print_string(:doc_num, 22, 1) INTO :doc_num;
  SELECT res FROM sp_ezpl_print_string(:tovar_name, 22, 0) INTO :tovar_name;
 
  ezpl_text = '';
 
  suspend;
END
  • В переменную ezpl_text вставляем наш результат экспорта бирки на предыдущем этапе

  • Меняем наш текст («1234567890123…») на реальный текст, который будет отображаться. Все фразы выводимые на бирке мы проводим через процедуру sp_ezpl_print_string. Данная процедура добавляет необходимое кол-во пробелов вначале печатаемого текста в зависимости от типа выравнивания и кол-во символов помещаемых в строке. Первый параметр данной процедуры - собственно желаемая фраза, второй - кол0во символов в строке (в примере мы печатаем склад приёма самым мелким шрифтов, у которого помещается 27 символов в одну строчку), третий - тип выравнивания (0 - выровнять по левому краю, 1 - выровнять по центру, 2 - выровнять по правому краю)
SELECT res FROM sp_ezpl_print_string(:sclad_kredit_name, 27, 1) INTO :sclad_kredit_name;

  • Сохраняем получившуюся процедуру и проводим ее в модуле Agbis Updater.exe что бы репликация разнесла данную процедуру по всем другим репликационным базам.

Проверка созданного шаблона и бирки

  • В IBExpert открываем таблицу DOC_ORDER_SERVICES, копируем внутренний номер услуги и выполняем запрос к базе данных
SELECT * FROM sp_get_custom_ezpl_label(:dos_id)
  • Результат выполнения процедуры вставляем в новую бирку (что бы не затереть по ошибке наш созданный шаблон).Импортируем EZPL команду в визуальную бирку. Производим печать нашей бирки. Если результат устраивает то приступаем к настройке Meta, если результат требует корректировки то возвращаемся к правке EZPL шаблона после чего модифицируем нашу процедуру sp_get_custom_ezpl_label

Редактирование локальной настройки для модуля Агбис Приёмка

  • В нужном комплекте локальных настроек изменяем «Тип квитанции» на «Godex EZPL Custom»

Настройка кодировки при печати бирки

По умолчанию на принтере Godex установлена кодировка cp1251. Если требуется начать работать с другой кодировкой, то в процедуру необходимо добавить специальную команду которая выставить значение кодировки: ^XSET,CODEPAGE,14 Список всех поддерживаемых кодировок

0: 'cp850'
1: 'cp852'
2: 'cp437'
3: 'cp860'
4: 'cp863'
5: 'cp865'
6: 'cp867'
7: 'cp861'
8: 'cp862'
9: 'cp855'
10: 'cp856'
11: 'cp737'
12: 'cp851'
13: 'cp869'
14: 'cp1252'
15: 'cp1250'
16: 'cp1251'
17: 'cp1253'
18: 'cp1254'
19: 'cp1255'
20: 'cp1257'

Для России должна использоваться кодировка cp1251, а для Германии кодировка cp1252

Примеры готовых процедур для бирок

  • Бирка 1
    CREATE OR ALTER PROCEDURE SP_GET_CUSTOM_EZPL_LABEL (
        DOS_ID D_ID_INT64)
    RETURNS (
        EZPL_TEXT D_BLOB)
    AS
    DECLARE variable SCLAD_KREDIT_NAME D_STR_100;
    DECLARE variable DATE_BEG D_STR_50;
    DECLARE variable DATE_END D_STR_12;
    DECLARE variable BARCODE_READ D_STR_25;
    DECLARE variable BARCODE D_STR_25;
    DECLARE variable DOC_NUM D_STR_50;
    DECLARE variable CLIENT_NAME D_STR_100;
    DECLARE variable TOVAR_NAME D_STR_500;
    BEGIN
     
    /*
        Бирка для печати на Godex на бесконечной чековой ленте без отрезщика и без разделителя бирок
        Бирка размером 58*30 (ширина ленты 58 мм, высота бирки 30 мм)
        На бирке выводится инфомрация:
          * Склад приема (1 строка)
          * Дата начала обработки/дата конца обработки (2 строка)
          * Номер бирки (3 строка)
          * ШК бирки (4 строка)
          * Имя клиента (5 строка)
          * Номер заказа (6 строка)
          * Название услуги ( 7 строка)
    */
     
      SELECT
        s.name,
        lpad(EXTRACT(DAY FROM d.doc_date), 2, '0') || '.' || lpad(EXTRACT(MONTH FROM d.doc_date), 2, '0'),
        lpad(EXTRACT(DAY FROM dor.date_out), 2, '0') || '.' || lpad(EXTRACT(MONTH FROM dor.date_out), 2, '0'),
        dos.barcode_read,
        dos.barcode,
        c.name,
        d.doc_num,
        tt.name AS tovar_name
      FROM doc_order_services dos
      LEFT JOIN docs_order dor ON dor.id = dos.doc_order_id
      LEFT JOIN docs d ON d.doc_id = dor.doc_id
      LEFT JOIN tovars_tbl tt ON tt.TOVAR_ID = dos.tovar_id
      LEFT JOIN contragents c ON c.contr_id = d.contragent_id
      LEFT JOIN sclads s ON s.id = dor.sclad_kredit_id
      WHERE dos.id = :dos_id
      INTO :sclad_kredit_name, :date_beg, :date_end, :barcode_read, :barcode, :client_name, :doc_num, :tovar_name;
     
      SELECT res FROM sp_ezpl_print_string(:sclad_kredit_name, 27, 1) INTO :sclad_kredit_name;
      SELECT res FROM sp_ezpl_print_string(:date_beg||'    '||:date_end, 22, 1) INTO :date_beg;
      SELECT res FROM sp_ezpl_print_string(:barcode_read, 14, 1) INTO :barcode_read;
      SELECT res FROM sp_ezpl_print_string(:client_name, 27, 1) INTO :client_name;
      SELECT res FROM sp_ezpl_print_string(:doc_num, 22, 1) INTO :doc_num;
      SELECT res FROM sp_ezpl_print_string(:tovar_name, 22, 0) INTO :tovar_name;
     
      ezpl_text = '^Q30,0,0
    ^W58
    ^H8
    ^P1
    ^S4
    ^AD
    ^C1
    ^R0
    ~Q+0
    ^O0
    ^D0
    ^E18
    ~R255
    ^L
    Dy2-me-dd
    Th:m:s
    Dy2-me-dd
    Th:m:s
    ATA,0,0,23,23,0,0,A,0,'||sclad_kredit_name||'
    ATA,0,27,28,28,0,0,A,0,'||date_beg||'
    ATA,0,59,45,45,0,0,A,0,'||barcode_read||'
    BQ,98,110,2,6,39,0,0,'||barcode||'
    ATA,0,149,23,23,0,0,A,0,'||client_name||'
    ATA,0,176,28,28,0,0,A,0,'||doc_num||'
    ATA,0,208,28,28,0,0,A,0,'||tovar_name||'
    E
    ';
     
      suspend;
    END