Что делать при ошибке «Значение не является значением объектного типа (ТипКода)» при печати этикеток в 1С?

Пользователь 1С v8.3 (Управляемые формы) 1С:Розница Торговля и дистрибуция
← На главную

При попытке распечатать ценники или этикетки в программе 1С (например, 1С:Розница) может возникать следующая ошибка выполнения программы:

{Обработка.ПечатьЭтикетокИЦенников.Форма.Форма.Форма(3826)}: Значение не является значением объектного типа (ТипКода)

Рассмотрим подробно, почему появляется эта проблема и как быстро восстановить правильную печать ценников и этикеток.

Выясним причину возникновения ошибки

Часто подобная ошибка проявляется после перехода с файловой базы на клиент-серверный вариант работы или при обновлении платформы 1С. Проанализируем техническую сторону ситуации:

  1. Использование внешнего ActiveX-объекта (COM-компоненты): В устаревших или доработанных печатных формах для вывода штрихкода в макете используется элемент типа Объект (ActiveX-компонента 1С:Печать штрихкодов / V8.Barcod.1).
  2. Несовместимость разрядности и контекста сервера: На сервере 1С или при формировании макета в клиент-серверном режиме ActiveX-объекты не могут проинициализироваться. В результате обращение ОбластьЦенника.Рисунки.Штрихкод.Объект возвращает значение Неопределено.
  3. Попытка обращения к свойству несуществующего объекта: Поскольку вместо объекта компоненты возвращено Неопределено, попытка задать свойство ТипКода вызывает аварийную остановку кода.

Способ 1. Использование штатного механизма настройки шаблонов

Если ошибка возникает в пользовательской кнопке или доработанной печатной форме, чаще всего создавать специальный программный код не требуется. В типовых конфигурациях (1С:Розница, 1С:Управление торговлей и др.) есть мощный встроенный редактор шаблонов ценников и этикеток.

Проанализируем порядок действий для настройки печатных форм без привлечения программиста:

  1. Перейдем в режим конфигурации через меню Все функции (или Функции для технического специалиста).
  2. Откроем справочник Хранилище шаблонов (или Шаблоны этикеток, ценников и чеков ККМ).
  3. Выберем существующий макет или создадим новый шаблон с нужным типом (например, «Этикетка для товара»).
  4. Отредактируем параметры макета: настроим высоту, ширину, поля, положение наименования товара, цены и самого штрихкода.
  5. Сохраним настройки и назначим созданный шаблон для требуемого вида номенклатуры или прямо в обработке печати ценников.

Штатный механизм использует современные библиотеки генерации штрихкодов и корректно работает как в файловом, так и в клиент-серверном режиме.

Способ 2. Исправление кода печатной формы (для разработчиков)

Если необходимо сохранить именно пользовательскую доработку, разберем, как исправить программный код обработки.

Вместо устаревшего обращения к OLE/ActiveX объекту напрямую в макете:


// Устаревший код, вызывающий ошибку на сервере:
ОбластьЦенника.Рисунки.Штрихкод.Объект.ТипКода = 1;

Необходимо перевести формирование штрихкода на библиотеку Native API или вызов функций БСП. Посмотрим на алгоритм исправления:

  1. Замените элемент рисунка в макете с типа Объект на тип Картинка.
  2. Подключите внешнюю компоненту печати штрихкодов с типом Native на клиенте или сервере.
  3. Сформируйте изображение штрихкода в виде объекта Картинка и подставьте его в область макета.

Пример корректного заполнения картинки штрихкода:


// Формирование картинки через компоненту Native API или функции БСП
ПараметрыШтрихкода = Новый Структура;
ПараметрыШтрихкода.Вставить("Штрихкод", ДанныеСтроки.Штрихкод);
ПараметрыШтрихкода.Вставить("ТипВходныхДанных", 1);

КартинкаШтрихкода = МенеджерОборудованияВызовСервера.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);
Если ЗначениеЗаполнено(КартинкаШтрихкода) Тогда
    ОбластьЦенника.Рисунки.Штрихкод.Картинка = КартинкаШтрихкода;
КонецЕсли;

Итоги и рекомендации

Для быстрой настройки печати этикеток под нужные размеры проще всего отказаться от устаревших доработок и перенастроить макет через справочник Хранилище шаблонов. Если же требуется сохранить уникальный программный код, замените обращение к свойствам ActiveX-объекта на использование Native API компоненты штрихкодирования 1С.

← На главную