При попытке распечатать ценники или этикетки в программе 1С (например, 1С:Розница) может возникать следующая ошибка выполнения программы:
{Обработка.ПечатьЭтикетокИЦенников.Форма.Форма.Форма(3826)}: Значение не является значением объектного типа (ТипКода)
Рассмотрим подробно, почему появляется эта проблема и как быстро восстановить правильную печать ценников и этикеток.
Часто подобная ошибка проявляется после перехода с файловой базы на клиент-серверный вариант работы или при обновлении платформы 1С. Проанализируем техническую сторону ситуации:
Объект (ActiveX-компонента 1С:Печать штрихкодов / V8.Barcod.1).ОбластьЦенника.Рисунки.Штрихкод.Объект возвращает значение Неопределено.Неопределено, попытка задать свойство ТипКода вызывает аварийную остановку кода.Если ошибка возникает в пользовательской кнопке или доработанной печатной форме, чаще всего создавать специальный программный код не требуется. В типовых конфигурациях (1С:Розница, 1С:Управление торговлей и др.) есть мощный встроенный редактор шаблонов ценников и этикеток.
Проанализируем порядок действий для настройки печатных форм без привлечения программиста:
Штатный механизм использует современные библиотеки генерации штрихкодов и корректно работает как в файловом, так и в клиент-серверном режиме.
Если необходимо сохранить именно пользовательскую доработку, разберем, как исправить программный код обработки.
Вместо устаревшего обращения к OLE/ActiveX объекту напрямую в макете:
// Устаревший код, вызывающий ошибку на сервере:
ОбластьЦенника.Рисунки.Штрихкод.Объект.ТипКода = 1;
Необходимо перевести формирование штрихкода на библиотеку Native API или вызов функций БСП. Посмотрим на алгоритм исправления:
Объект на тип Картинка.Native на клиенте или сервере.Картинка и подставьте его в область макета.Пример корректного заполнения картинки штрихкода:
// Формирование картинки через компоненту Native API или функции БСП
ПараметрыШтрихкода = Новый Структура;
ПараметрыШтрихкода.Вставить("Штрихкод", ДанныеСтроки.Штрихкод);
ПараметрыШтрихкода.Вставить("ТипВходныхДанных", 1);
КартинкаШтрихкода = МенеджерОборудованияВызовСервера.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);
Если ЗначениеЗаполнено(КартинкаШтрихкода) Тогда
ОбластьЦенника.Рисунки.Штрихкод.Картинка = КартинкаШтрихкода;
КонецЕсли;
Для быстрой настройки печати этикеток под нужные размеры проще всего отказаться от устаревших доработок и перенастроить макет через справочник Хранилище шаблонов. Если же требуется сохранить уникальный программный код, замените обращение к свойствам ActiveX-объекта на использование Native API компоненты штрихкодирования 1С.