При автоматизации торговых процессов и маркировки в среде 1С 7.7 часто возникает необходимость выводить двумерные и многострочные штрихкоды, такие как GS1 DataBar Expanded Stacked. Однако попытка настроить внешние OLE/ActiveX-компоненты напрямую в макете таблицы платформы 7.7 может приводить к аварийному завершению работы Конфигуратора или к выводу пустого (прозрачного) прямоугольника на печать.
Разберем подробно причины возникающих технических проблем и рассмотрим проверенные способы успешного формирования штрихкодов данной символики.
Проанализируем, почему платформа 1С 7.7 может вести себя некорректно при попытке работы с компонентами штрихкодирования:
Если требуется вставить ActiveX-компонент непосредственно в табличный документ 1С 7.7, прямое добавление из списка OLE-объектов Конфигуратора может завершаться ошибкой. Разберем по шагам обходной способ интеграции:
Чтобы полностью исключить нестабильность OLE-контейнера 1С 7.7 и вылеты Конфигуратора, рассмотрим наиболее надежное решение — генерацию картинки штрихкода во временный файл с помощью внешней утилиты (например, Zint Barcode Studio) с последующей подгрузкой в макет.
Посмотрим на алгоритм реализации данного подхода:
КомандаСистемы запустим консольную утилиту Zint в фоновом режиме, передав параметры типа символики, кодируемую строку и путь сохранения графического файла (BMP или PNG) во временный каталог..Загрузить().Рассмотрим пример кода 1С 7.7 для реализации данного метода:
// Сформируем имя временного файла картинки
ИмяФайлаКартинки = КаталогВременныхФайлов() + "gs1_barcode.png";
// Подготовим команду запуска внешнего генератора Zint (79 - код GS1 DataBar Expanded Stacked)
КомандаЗапуска = "zint.exe -b 79 -d """ + СтрокаДанныхGS1 + """ -o """ + ИмяФайлаКартинки + """";
КомандаСистемы(КомандаЗапуска);
// Выведем секцию таблицы с подгруженной картинкой
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Макет");
Секция = Таб.ПолучитьСекцию("Шапка");
Секция.Область("ОбластьШтрихкода").Рисунок.Загрузить(ИмяФайлаКартинки);
Таб.ВывестиСекцию(Секция);
// Удаляем временный файл после формирования
ФС.УдалитьФайл(ИмяФайлаКартинки);
Проанализируем важные детали, которые необходимо учитывать при работе с данным типом штрихкода:
Многострочность и ширина сегментов: GS1 DataBar Expanded Stacked является составным (двумерным) вариантом расширенного DataBar. Количество строк в нем варьируется от 2 до 11. Чтобы штрихкод формировался именно в многострочном виде, внешнему генератору необходимо передавать параметр ограничение ширины сегмента (Segments). Без этого параметра компонент построит длинный однострочный штрихкод, который не поместится на этикетке.
Невозможность использования только TTF-шрифта: В отличие от простых типов штрихкодов (Code 39 или EAN-13), данный формат требует предварительного математического кодирования, расчета контрольных сумм и разбиения на слои. Назначить обычный TrueType-шрифт к исходному тексту недостаточно — предварительно исходную строку требуется обработать специализированным алгоритмом-кодировщиком (Encoder).