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

21.02.20

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Печать маркировки в DataMatrix через Zint:
.epf 462,68Kb ver:1
16
16 Скачать (1 SM) Купить за 1 850 руб.

Первый заход на этикетку был через 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С v8.3 Конфигурации 1cv8 Розничная и сетевая торговля (FMCG) Рестораны, кафе и фаст-фуд Беларусь Украина Россия Управленческий учет Платные (руб)

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

3588 руб.

11.11.2020    49715    60    47    

69

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

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

2000 руб.

04.11.2019    29395    115    87    

54

Этикетки, ценники Пользователь Платформа 1С v8.3 1С:Розница 2 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 Абонемент ($m)

Расширение "Контроль ценников". Позволяет автоматизировать контроль над устаревшими ценниками в магазине при изменении цен на товары. Продавцы или товароведы получают список товаров с измененными ценами для замены ценников в режиме онлайн.

10 стартмани

30.10.2024    256    3    Miket78    4    

5

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

Внешняя обработка для 1С Розница 2.2.ХХХ - 2.3.ХХХ для печати формирования штрихкодов весового товара и печати на принтере термоэтикеток или кассовом аппарате.

1 стартмани

29.10.2024    305    3    independ    1    

5

Логистика, склад и ТМЦ Этикетки, ценники Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Абонемент ($m)

Выводит при печати этикетки складской ячейки в качестве штрихкода адрес ячейки вместо уникального идентификатора

1 стартмани

20.06.2024    1151    3    Alexei_Siva    4    

6

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

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

20.01.2023    2580    aldar    0    

9

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

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

2 стартмани

03.01.2023    4133    29    AndreyPonom    9    

11
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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. Что делать?
Оставьте свое сообщение