При формировании печатных форм этикеток, ценников или бейджей сотрудников разработчики нередко сталкиваются с ситуацией, когда вместо переданного из информационной базы штрихкода на печать или предварительный просмотр выводится стандартная комбинация цифр и полос: 1234567890128. При этом под отладчиком значения штрихкода рассчитываются абсолютно корректно, а проверка контрольного символа EAN-13 успешно проходит. Разберем детально, почему возникает подобный сбой и как восстановить правильную печать штрихкодов.
Значение 1234567890128 является жестко прошитым тестовым шаблоном по умолчанию в элементе управления ActiveX внешней компоненты 1С:Печать штрихкодов (1CBarCode.dll). Подмена реального значения на стандартное происходит в следующих случаях:
ТабДок.Вывести(Область) или ТабДок.Присоединить(Область), платформа 1С выполняет копирование и пересоздание ActiveX-элемента. В ряде версий платформы и компоненты параметры инициализации нового экземпляра теряются, и элемент управления отображает значение по умолчанию.Проанализируем типовой фрагмент формирования этикетки. Часто разработчики передают значение штрихкода непосредственно в полученную область макета:
Если РаботаСТорговымОборудованием.ПроверитьШтрихКод(СтрокаИзСписка.Штрихкод, СтрокаИзСписка.ТипШтрихкода) Тогда
ЭтикеткаОбласть.Рисунки.Штрихкод.Объект.ТипКода = ТипКода;
ЭтикеткаОбласть.Рисунки.Штрихкод.Объект.Сообщение = СтрокаИзСписка.Штрихкод;
ЭтикеткаОбласть.Рисунки.Штрихкод.Объект.ТекстКода = СтрокаИзСписка.Штрихкод;
ТабДокумент.Вывести(ЭтикеткаОбласть);
КонецЕсли;
Чтобы избежать сброса параметров при сериализации объекта ActiveX, изменим порядок работы. Выведем область в итоговый табличный документ, после чего обратимся к последнему добавленному рисунку результирующего документа и установим его свойства:
Если РаботаСТорговымОборудованием.ПроверитьШтрихКод(СтрокаИзСписка.Штрихкод, СтрокаИзСписка.ТипШтрихкода) Тогда
// Сначала выводим область в результирующий документ
ТабДокумент.Вывести(ЭтикеткаОбласть);
// Получаем добавленный рисунок в итоговом документе
ИндексРисунка = ТабДокумент.Рисунки.Количество() - 1;
ОбъектШК = ТабДокумент.Рисунки[ИндексРисунка].Объект;
// Заполняем свойства конкретного экземпляра ActiveX
ОбъектШК.ТипКода = ТипКода;
ОбъектШК.Сообщение = СтрокаИзСписка.Штрихкод;
ОбъектШК.ТекстКода = СтрокаИзСписка.Штрихкод;
КонецЕсли;
Рассмотрим вариант, когда на чистую операционную систему была установлена новая версия компоненты (например, 8.0.16.4), переставшая корректно отрабатывать старые алгоритмы конфигураций на обычных формах (УТ 2.3, УПП 1.3, КА 1.1). Пошагово выполним следующие действия:
cmd.exe от имени Администратора и выполним команду:
C:\Windows\SysWOW64\regsvr32.exe "C:\Program Files (x86)\1C\1CBCode\1CBarCode.dll"
Выясним, не связана ли проблема с геометрическими ограничениями макета печатной формы:
Элементы управления ActiveX являются устаревшей технологией, зависящей от 32-разрядного окружения и контекста графической сессии Windows. Для долгосрочного решения задачи печати рассмотрим альтернативные варианты:
ТипРисункаТабличногоДокумента.Картинка. Это устраняет любые сбои ActiveX и обеспечивает независимость от разрядности клиента.