Печать этикеток на принтере с ножом и автоматическая резка по группам

20.08.19

Задачи пользователя - Этикетки, ценники

В статье описан процесс печати и автоматической резки этикеток из 1С на примере принтера с режущим лезвием Zebra ZT410 с помощью предварительного формирования файла с командами для принтера.

Скачать файлы

Наименование Файл Версия Размер
Процедура ОбработатьФайлКомандДляПринтера
.txt 2,78Kb
7
.txt 2,78Kb 7 Скачать

Весь товар в нашей организации стикеруется по приходу. В одной накладной, откуда печатаются этикетки, может быть до 100 позиций, каждой по 10-100 единиц, т.е. в результате печати может получиться лента с 1000 этикетками. Естественно, работать с такой лентой кладовщикам не удобно – приходится искать, где заканчивается один товар и начинается другой, рвать ленту на куски, делить между собой, на что уходит куча времени. Куда проще, чтобы принтер сам сразу нарезал этикетки по группам товаров.

Поэтому, вместо простенького принтера этикеток был закуплен промышленный принтер Zebra ZT410 с режущим лезвием. В комплекте поставляется утилита, которая позволяет рисовать этикетки и резать их в определенном кол-ве, но у нее нет API и она не поддерживает работу через командную строку. Через драйвер принтера есть возможность настройки резки этикеток, но, опять же, только через определённое кол-во напечатанных этикеток.

В решении задачи помогла возможность Windows (наверно, как и в других ОС) отправки любого задания на печать в драйвер принтера с последующим сохранением команд для принтера в файл.

Сохранить файл команд для принтера можно либо непосредственно перед печатью через диалоговое окно, поставив соответствующий флаг:


либо установив в качестве порта принтера значение FILE:

 


Файл с командами для принтера Zebra ZT410 выглядит примерно так:

На помощь в расшифровке пришел мануал по программированию и командам данного принтера. Кстати, этот язык программирования называется ZPL (Zebra Programming Language).

Блок команд находится между командами ^XA и ^XZ, то есть, грубо говоря, этот блок и есть наша этикетка. Внутри идут команды с размерами этикетки и качеством, закодированная строка (возможно в base64), содержащая картинку и текст этикетки.

Находим в мануале, что смена режимов работы принтера - ручное отрывание или резка, осуществляется командами ^MMT и ^MMC соответственно. Следовательно, задача заключается в том, чтобы весь текст команд разбить на блоки (этикетки) и последовательно их сравнить. Как только блок команд будет отличаться от предыдущего, вставляем в предыдущий блок команду перевода принтера в режим резки, а в текущем опять переводим принтер в режим отрывания.

Процедуру распарсивания текста я приводить не буду (можно скачать в конце статьи), но покажу, как изменился текст команд после его обработки:

На приведенном примере видно, что первые 3 блока команд одинаковые, а 4-ый отличается закодированной строкой с текстом этикетки. В первом блоке переводим принтер в режим отрывания (не известно в каком режиме принтер был до этого). В 3-ем блоке вставляем команду резки ^MMC, а в 4-ом обратно переводим в режим отрывания. Во время печати принтер отрежет ленту после 3-ей этикетки.

Теперь у нас есть файл с командами, которые укажут принтеру как распечатать и нарезать этикетки. Как отправить его на принтер? Существуют различные способы – использовать зебровскую утилиту либо сторонний софт, который отправляет на принтер команды, но нам подходит другой, самый простой - команда COPY командной строки Windows. Работает это так:

copy /b <Путь к файлу с командами> <Имя принтера>

Однако, данный метод не работает с сетевыми принтерами, подключенными через TCP/IP. Применяем небольшую хитрость – создаем общий доступ на локальном ПК для сетевого принтера. Отправка файла команд на него будет выглядеть так: «copy /b <Путь к файлу с командами> \\localhost\<Имя принтера>».

С теорией разобрались, приступаем к практике.

Для полной автоматизации процесса нам потребуется добавить в систему один и тот же принтер этикеток два раза с разными настройками.

У первого принтера в качестве порта укажем FILE, он будет сохранять файл команд.

Второй будет настроен на нормальную печать (и иметь общий доступ, если это сетевой принтер).

На стороне 1С каждый сам для себя может решить, как ему будет удобнее это доработать. Я решил доработать команду «Печать» на общей форме ПечатьДокументов (УТ 11) таким образом, чтобы доработка не касалась остальных сотрудников и не мешала им - добавляем в справочник «Пользователи» доп. реквизит типа булево «Печать этикеток». Теперь при печати система проверяет этот реквизит, если он есть, то задается вопрос: «Резать этикетки по группам?». «Да» - запускается наш новый механизм, «Нет» - работает типовой механизм отправки на печать на принтер, установленный по умолчанию.

И так, что нам осталось. «Распечатать» табличный документ с этикетками на первом принтере, который сохранит команды в файл. А затем обработать файл добавив команды резки и отправить сформированный файл на второй принтер командой copy, который уже и распечатает этикетки согласно отправленным командам. При «печати» на первом принтере система будет каждый раз спрашивать, куда сохранить наш файл команд, что не очень удобно, т.к. кладовщик должен минимально участвовать в этом процессе.

Чтобы система ничего не спрашивала, необходимо у принтера, сохраняющего файл команд, указать в качестве порта не FILE, а путь до файла.

В 1С у табличного документа есть свойство ИмяПринтера, куда нам нужно записать имя первого принтера, формирующего команды.

Для его поиска создадим COM-объект WScript.Network. Его метод EnumPrinterConnections() возвращает коллекцию, содержащую последовательно порт, а затем имя принтера.

 

Через найденный принтер «Печатаем» наш табличный документ с этикетками, в результате чего он сохранится в файл с командами:

Далее откроем, распарсим и вставим нужные команды в получившемся файле (ПринтерДляПечатиВФайл.ПутьКФайлу) так, чтобы между отличающимися блоками была команда ^MMC. Сама процедура парсинга громоздкая и не представляет особого технического интереса, поэтому я приложил ее отдельным файлом к статье.

Ну и теперь осталось только отправить на второй принтер наш подготовленный файл с командами:

ИмяПринтераДляПечати – в случае, если это сетевой принтер, то это имя, которое мы указываем в свойствах доступа расшаренного принтера:

Так как пользователь в процессе ничего не выбирает, то имя принтера для печати необходимо где-то хранить. Для этого я поменял тип ранее добавленного доп. реквизита «Печать этикеток» с булево на строку и храню там имя принтера.

печать этикеток резка zebra

См. также

Ценники и этикетки со штрих-кодом для 1С 8.х любой конфигурации

Этикетки, ценники Платформа 1С v8.3 Конфигурации 1cv8 Розничная и сетевая торговля (FMCG) Рестораны, кафе и фаст-фуд Беларусь Украина Россия Управленческий учет Платные (руб)

Простая в использовании обработка для формирования и печати ценников и этикеток со штрих-кодом, с дополнительной ценой, для 1С8.х любой конфигурации. Большое разнообразие шаблонов печатных форм. Управляемая форма (Такси) + Обычный режим.

3588 руб.

11.11.2020    47552    53    44    

64

Печать ценников. (Розница 2.3, УНФ 1.6, две цены + серийные номера) + УНФ 3.0

Этикетки, ценники Платформа 1С v8.3 Управляемые формы 1С:Розница 2 1С:Управление нашей фирмой 1.6 Платные (руб)

Встроенная в конфигурации Розница 2.3 и УНФ 1.6 подсистема печати ценников по мне слишком неповоротлива и с усилиями поддается тонкой настройке, решил с нуля написать свою универсальную печать ценников для этих конфигураций.

2000 руб.

04.11.2019    28137    113    87    

52

Печать из Андроид

Этикетки, ценники Мобильная платформа Бесплатно (free)

Печать этикеток на принтер WiFi без драйвера.

20.01.2023    1808    aldar    0    

7

Ценники (этикетки) для термопринтера

Этикетки, ценники Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Абонемент ($m)

Внешняя печатная форма для принтера этикеток. В отличие от базовой обработки для печати этикеток эта может выводить на печать дополнительные свойства справочника Номенклатура, а также в ней несложный программный код, что позволяет легко дорабатывать обработку под свои нужды.

2 стартмани

03.01.2023    2993    19    AndreyPonom    7    

9

Набор готовых макетов этикеток (ценников) для Розницы 2.3

Этикетки, ценники Платформа 1С v8.3 1С:Розница 2 Розничная и сетевая торговля (FMCG) Россия Управленческий учет Абонемент ($m)

Архив с экспортными шаблонами этикеток (ценников) формата 58х40. Для тех, кто не хочет сам рисовать их.

2 стартмани

04.05.2022    11863    44    aximo    3    

11

Шаблон этикетки для УНФ (1С:Фреш)

Этикетки, ценники Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 Розничная и сетевая торговля (FMCG) Россия Абонемент ($m)

Описан механизм создания этикетки для термопринтера ТSC TDP-225 в подробностях. Приложен XML-файл с самим шаблоном.

1 стартмани

01.05.2022    11147    6    zemskov    7    

5

Вывод изображений штрихкодов на СКД

СКД Этикетки, ценники Система компоновки данных 8.3.14 Конфигурации 1cv8 Россия Абонемент ($m)

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

1 стартмани

27.04.2022    4604    21    SergeyPZU    13    

18
Оставьте свое сообщение