Печать маркировки в DataMatrix через Zint

21.02.20

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

Собрал все грабли (может, еще не все). Мой вариант печати этикеток с маркировкой. Примеры кода и обработки для обычных форм платформы 1С: Предприятия, независимо от конфигурации.

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

Наименование Файл Версия Размер
Печать маркировки в DataMatrix через Zint:
.epf 462,68Kb
16
.epf 1 462,68Kb 16 Скачать

Первый заход на этикетку был через Ocvita Barcode , тогда я еще не понял некоторых тонкостей.

Заказал этикетки в CSV и пошел печатать.

Оказалось что в этой компоненте есть ошибка, которая повторяется в Zint 2.4 https://zint.github.io/ (может и других). В некоторых этикетках к тексту в конце добавлялся символ "=". Конечно та же печать была проверена на последней версии https://sourceforge.net/projects/zint/ и оказалось все норм.

Еще одна проблема с Ocvita Barcode - печать DataMatrix GS-1 У меня при переключении компонента грохает 1С.

В наборе Zint была обнаружена оболочка, на ней проверил все в том числе и признак символики - FNC1 (просто берем все что надо в квадратные скобки).

Например:

010290000045865921TDGuv?4DS%MbL91802992XWvJ9U1nf7QTf7MqitBTZgwF1xoZ7eRabtbKJIH8fHFamEJkPqXlilc3Tp4Dx3Wk7UKpGFV0NBbH/N4vN5L/Mw==

[01]02900000458659[21]TDGuv?4DS%MbL[91]8029[92]XWvJ9U1nf7QTf7MqitBTZgwF1xoZ7eRabtbKJIH8fHFamEJkPqXlilc3Tp4Dx3Wk7UKpGFV0NBbH/N4vN5L/Mw==

И самое полезное в наборе - консольная утилита.

Работает просто: zint.exe -b 71 --gs1 -d ДатаМатрикс

Чтобы далеко не ходить утилиту сохранил в макет.

Но вначале разбор того что в CSV. Вроде бы просто текст, но там есть символы которые решил убрать и заменить на FNC1.

ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогВыбора.Фильтр     = "Файл данных (*.csv)|*.csv";
ДиалогВыбора.Заголовок  = "Выберите файл для загрузки данных";
ДиалогВыбора.ПредварительныйПросмотр = Ложь;
ДиалогВыбора.ИндексФильтра = 0;
ДиалогВыбора.ПроверятьСуществованиеФайла = Ложь;
    
Если НЕ ДиалогВыбора.Выбрать() Тогда
    Сообщить("Не выбран файл для загрузки");
    Возврат;
Иначе
    ПолноеИмяФайла = ДиалогВыбора.ПолноеИмяФайла;
КонецЕсли;
ТекстДок = Новый ТекстовыйДокумент;
ТекстДок.Прочитать(ПолноеИмяФайла);
Для сч = 1 по ТекстДок.КоличествоСтрок() Цикл
    НовСтрока = ШтрихКоды.Добавить();
    ДатаМатрикс = Строка(ТекстДок.ПолучитьСтроку(сч));
    НовСтрока.КодИдентификации = Лев(ДатаМатрикс,31);
    НовСтрока.ДатаМатрикс =
    "["+Сред(ДатаМатрикс,1,2)+"]"+Сред(ДатаМатрикс,3,14)+
    "["+Сред(ДатаМатрикс,17,2)+"]"+Сред(ДатаМатрикс,19,13)+
    "["+Сред(ДатаМатрикс,33,2)+"]"+Сред(ДатаМатрикс,35,4)+
    "["+Сред(ДатаМатрикс,40,2)+"]"+Сред(ДатаМатрикс,42,88);
КонецЦикла;

Код идентификации нужен для обратной загрузки при "Вводе в оборот".

Разбор кода идет по спецификации [01]перваяГруппа[21]ВтораяГруппа[91]ТретьяГруппа[92]ЧетвертаяГруппа

Печать еще проще

Таб                     = Новый ТабличныйДокумент;
Таб.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Этикетка"+СокрЛП(ИмяКомпьютера());
Макет                   = ПолучитьМакет("ДатаМатриксZint");
ЭтикеткаОбласть         = Макет.ПолучитьОбласть("Гориз|Верт");
ОбластьШтрихкод         = ЭтикеткаОбласть.Области.ОбластьШтрихкод;
РисунокШтрихкод         = ЭтикеткаОбласть.Рисунки.Штрихкод;

Макет = ПолучитьМакет("zint");
Макет.Записать(КаталогВременныхФайлов()+"zint.exe");
Для каждого СтрокаШК из ШтрихКоды Цикл
    ЗапуститьПриложение(КаталогВременныхФайлов()+"zint.exe -b 71 --gs1 -d "+""""+СтрЗаменить(СтрокаШК.ДатаМатрикс,"""","""""")+"""",КаталогВременныхФайлов(),Истина);
    Попытка
        ЭтикеткаОбласть.Рисунки.Штрихкод.Картинка = Новый Картинка(КаталогВременныхФайлов()+"out.png");
        УдалитьФайлы(КаталогВременныхФайлов()+"out.png");
    Исключение
        Сообщить(СтрокаШК.НомерСтроки);
    КонецПопытки;
    ЭтикеткаОбласть.Параметры.Остатки = Остатки;
    ЭтикеткаОбласть.Параметры.Обувь = Обувь;
    ЭтикеткаОбласть.Параметры.ВидОбуви = ВидОбуви;
    ЭтикеткаОбласть.Параметры.ВвезенВРФ = ВвезенВРФ;
    Таб.Вывести(ЭтикеткаОбласть);
    Таб.ВывестиГоризонтальныйРазделительСтраниц();	
КонецЦикла;
Таб.АвтоМасштаб = Истина;
Таб.Показать("ДатаМатрикс");

 

Интересно послушать замечания.

Прилагаю обработку, в ней первый вариант с Ocvita Barcode и не доделанное на перспективу. Для тестирования использовалась пустая база на платформе 1С:Предприятие 8.3 (8.3.11.3133) в режиме толстого клиента обычные формы.

Есть рекомедация печатать символ(29), но с ним у меня не печатается, в "Службе поддержки единой национальной системы цифровой маркировки" проверили ШК сказали норм так. Для проверки можно использовать программу https://play.google.com/store/apps/details?id=pk.pharmatrax.pharmatraxscanner&hl=en

Обновление.

Может для кого актуально, кто не пробовал.

Сделал ввод в оборот маркированных остатков через CSV файл.

Если что-то можно было не указывать, я так и делал.

ДокCSV = Новый ТекстовыйДокумент;
ДокCSV.ВставитьСтроку(1,"ИНН участника оборота,Версия");
ДокCSV.ДобавитьСтроку(ИНН+",1");
ДокCSV.ДобавитьСтроку("Параметры товаров");
ДокCSV.ДобавитьСтроку("КИ,КИТУ,Страна производства,Дата регистрации ДТ,Регистрационный номер ДТ,Вид документа подтверждающего соответствие,Номер документа подтверждающего соответствие,Дата документа подтверждающего соответствие");
Для каждого СтрокаШК из ШтрихКоды Цикл
    ДокCSV.ДобавитьСтроку(""""+СтрЗаменить(СтрокаШК.КодИдентификации,"""","""""")+""""+",,,,,,,");
КонецЦикла;
//Здесь я пытаюсь удалить последнюю строку, но безуспешно, удалил потом вручную
Если Не ЗначениеЗаполнено(ДокCSV.ПолучитьСтроку(ДокCSV.КоличествоСтрок()+1)) Тогда
    ДокCSV.УдалитьСтроку(ДокCSV.КоличествоСтрок()+1);
КонецЕсли;	
ДиалогСохранения = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
ДиалогСохранения.Фильтр     = "Файл данных (*.csv)|*.csv";
ДиалогСохранения.Заголовок  = "Выберите файл для сохранения данных";
ДиалогСохранения.ПредварительныйПросмотр = Ложь;
ДиалогСохранения.ИндексФильтра = 0;
ДиалогСохранения.ПроверятьСуществованиеФайла = Ложь;
Если НЕ ДиалогСохранения.Выбрать() Тогда
    Сообщить("Не выбран файл для сохранения");
    Возврат;
Иначе
    ПолноеИмяФайла = ДиалогСохранения.ПолноеИмяФайла;
КонецЕсли;
ДокCSV.Записать(ПолноеИмяФайла,КодировкаТекста.UTF8);

Ввод прошел успешно, только удалил последнюю пустую строку в блокноте

Маркировка zint datamatrix

См. также

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

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

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

3588 руб.

11.11.2020    47571    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    28150    113    87    

52

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

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

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

20.01.2023    1810    aldar    0    

7

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

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

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

2 стартмани

03.01.2023    2996    19    AndreyPonom    7    

9

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

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

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

2 стартмани

04.05.2022    11879    44    aximo    3    

11

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

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

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

1 стартмани

01.05.2022    11162    6    zemskov    7    

5

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

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

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

1 стартмани

27.04.2022    4609    21    SergeyPZU    13    

18
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Johny_v 140 21.02.20 12:23 Сейчас в теме
Собрал все грабли (может, еще не все). Мой вариант печати этикеток с маркировкой.

Осталось еще на стандартной компоненте 1С Печать штрихкодов реализовать. Она уже полгода как поддерживает этот тип штрихкодов.
5. tech1c 18 21.02.20 17:08 Сейчас в теме
(3)Спс, попробую, ради интереса, и этой компонентой попечатать
2. Vladimir45 90 21.02.20 12:44 Сейчас в теме
Символ(29) так-то обязателен. Очень странный ответ техподдержки.
Этот символ превращает просто текст в текст формата GS1

Возможно российское ПО и проигнорирует этот символ, но вот если эти ШК попадут куда-то на иностранное ПО - это будет для них сюрпризом. Огромным таким сюрпризом. Да и многое российское ПО тоже очень удивится.

Так что без 29 символа это какое-то странное решение. Только для своей точки продаж. Костыль с огнемётом.
4. tech1c 18 21.02.20 16:56 Сейчас в теме
(2)В спецификации написано что надо после 2,3,4 группы вставлять символ(29).
Я вставил вместо них признак символики - FNC1. Если формат не соответствует GS1, то Zint не формирует, т.е. не формирует без FNC1. Если вставлять символ(29) Zint это не понимает. Может другие библиотеки работают иначе. А в чем конкретно назначение символа(29)? Просто обозначить конец группы? FNC1 тоже ведь разделяет группы.
6. Vladimir45 90 26.02.20 09:31 Сейчас в теме
(4)
Просто обозначить конец группы?

Да потому-что AI есть фиксированные, к примеру дата всегда 6 символов.
А есть AI, к примеру, до 30 символов. И чтоб можно было понять когда она закончится, ставится символ GS таблицы ASCII
что является:
символом 29
символом FNC1
Было так-же в 1С как не печатаемый пробел, из-за которых было мнооооого проблем.

описание GS1 Application Identifiers
7. tech1c 18 27.02.20 07:22 Сейчас в теме
(6)Полистал спецификацию, не нашел про символ 29, только про FNC1. Я конечно зря спорю, т.к. в самих файлах символ 29 есть, а значит кому-то это нужно. Может попробую напечатать на компоненте 1с печать шк со всеми символами, но для меня уже поздно, все расклеено.
9. Vladimir45 90 27.02.20 12:16 Сейчас в теме
(7)
поздно, все расклеено.

приготовьтесь переклеить только на возвратах поставщику и оптовых продажах (я просто не знаю как в обуви движение идет, я с лекарствами работаю там каждый чих передаётся)

С продажей в розницу проблем не должно возникнуть, если вы сами это продаёте.
8. tech1c 18 27.02.20 07:33 Сейчас в теме
Ввод в оборот тоже прошел удачно.
1.Получил коды,
2.напечатал,
3.убрал строки из файлов которые не печатал,
4.по формату ввел в оборот
11. Shaldryn 05.03.21 12:46 Сейчас в теме
Никто не сталкивался с выводом ITF14 в формате SVG? У меня Zint режет нижнюю часть цифр в штрихкоде, область вывода цифр неверно рассчитывает...
12. set5553 18.06.21 05:52 Сейчас в теме
При сканировании пишет что отсутствует лидирующий спецсимвол FNC1. Что делать?
Оставьте свое сообщение