Первый заход на этикетку был через 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);
Ввод прошел успешно, только удалил последнюю пустую строку в блокноте