Почему возникает ошибка «Поле объекта не обнаружено (ТипКода)» при печати штрихкодов в 1С и как её исправить

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

При формировании печатных форм с выводом штрихкодов (например, ТОРГ-12, товарно-транспортных накладных или ценников) специалисты часто сталкиваются со следующей ошибкой выполнения модуля:


{ВнешняяОбработка.ТОРГ12.МодульОбъекта(432)}: Поле объекта не обнаружено (ТипКода)
ОбластьМакета.Рисунки.Штрихкод1.Объект.ТипКода = ПолучитьЗначениеТипаШтрихкодаДляЭУ(ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13);

Проанализируем ситуацию, выясним техническую причину появления этой проблемы и рассмотрим все доступные способы её решения.

Причина возникновения ошибки

Данная ошибка возникает из-за конфликта разрядности платформы 1С и внешней компоненты печати штрихкодов:

  1. Классическая компонента «1С:Печать штрихкодов» (библиотека 1CBarCod.dll) представляет собой 32-разрядный элемент ActiveX (OLE/COM).
  2. Если на сервере или рабочем месте пользователя запускается 64-разрядный клиент «1С:Предприятие» (x64), он физически не может загрузить 32-битный ActiveX-объект, встроенный в макет табличного документа.
  3. В результате свойство Объект у элемента рисунка Штрихкод1 остается равным Неопределено, и при обращении к его свойствам (ТипКода, ТекстКода, Сообщение) платформа выдает исключение «Поле объекта не обнаружено».

Также следует учитывать, что ActiveX-компоненты принципиально не поддерживаются на стороне сервера 1С (в фоновых заданиях или при вызове серверных процедур), независимо от разрядности сервера.

Способ 1. Использование 32-разрядного клиента 1С (x86)

Самый быстрый и эффективный способ вернуть работоспособность печатным формам, использующим ActiveX-компоненту — запустить 32-разрядную версию тонкого или толстого клиента «1С:Предприятие 8.3».

Разберем по шагам, как это настроить:

  1. 32-битный клиент 1С без проблем устанавливается и функционирует на любых 64-разрядных операционных системах Windows (включая Windows Server 2008 R2, Windows Server 2016/2019/2022 и Windows 10/11).
  2. Наличие 64-битного сервера 1С не обязывает использовать 64-битный клиент на рабочих местах. 32-разрядный клиент идеально подключается к 64-разрядному кластеру серверов.
  3. Для установки необходимо скачать и установить дистрибутивом «Тонкий клиент (32-бит)» или «Клиент 1С:Предприятия для Windows (32-бит)».
  4. В окне запуска 1С зайти в настройки нужной информационной базы, выбрать пункт «Изменить», перейти на страницу параметров запуска и в поле «Основная разрядность» явно выбрать значение «32 (x86)».

Способ 2. Перевод печати на компоненту Native API

Для долгосрочного решения задачи и обеспечения независимости от разрядности клиента и сервера рекомендуется перевести вывод штрихкодов на механизм Native API.

Преимущества данного подхода:

Внешние компоненты Native API поставляются сразу в двух сборках (32-бит и 64-бит) и корректно исполняются как на клиенте, так и на сервере 1С.

Рассмотрим алгоритм переработки обработки:

  1. Откроем макет печатной формы и удалим ActiveX-объект штрихкода. На его место добавим обычный рисунок типа «Картинка» (присвоим ему имя, например, Штрихкод).
  2. В коде формирования макета заменим обращение к ActiveX-объекту на подключение Native-компоненты.
  3. Компонента формирует двоичные данные штрихкода, которые затем передаются в рисунок табличного документа через создание объекта Картинка:

ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкодов", "BarCode", ТипВнешнейКомпоненты.Native);
Компонента = Новый("AddIn.BarCode.BarcodeExtension");

// Настройка параметров штрихкода
Компонента.АвтоТип = Ложь;
Компонента.ТипКода = 4; // EAN13
Компонента.Текст = "2000000000015";
Компонента.Ширина = 300;
Компонента.Высота = 150;

// Получаем картинку в виде двоичных данных
КартинкаДвоичныеДанные = Компонента.ПолучитьШтрихкод();
ОбластьМакета.Рисунки.Штрихкод.Картинка = Новый Картинка(КартинкаДвоичныеДанные);

Способ 3. Использование специализированных шрифтов штрихкодов

Ещё один универсальный способ, не зависящий от разрядности платформы — выводить штрихкод с помощью шрифтов (BarCode Fonts, например, EAN-13, Code 128, GS1-128).

Рассмотрим особенность этого метода:

  1. На сервер и рабочие станции пользователей устанавливается файл шрифта (например, EAN13.ttf).
  2. В макете табличного документа ячейке задается данный шрифт.
  3. В коде модуля предварительно рассчитываются стартовые/стоповые символы и контрольный разряд, после чего подготовленная строка записывается в ячейку табличного документа.

Способ 4. Программное формирование картинки внешней утилитой

Если нет возможности изменять макет или подключать компоненты Native API, штрихкод можно генерировать внешними утилитами или графическими библиотеками во временный файл формата PNG/BMP.

Рассмотрим пример загрузки готового файла в макет:


ИмяФайлаКартинки = ПолучитьИмяВременногоФайла("png");
// ... Вызов внешнего генератора, который сохраняет картинку по пути ИмяФайлаКартинки ...

ДвоичныеДанные = Новый ДвоичныеДанные(ИмяФайлаКартинки);
ОбластьМакета.Рисунки.Штрихкод.Картинка = Новый Картинка(ДвоичныеДанные);

УдалитьФайлы(ИмяФайлаКартинки);

Подведение итогов

При переходе на платформу 1С 8.3 и серверные 64-битные системы старые ActiveX-компоненты печати штрихкодов (1CBarCod.dll) перестают работать. Для оперативного исправления ошибки вызовов ТипКода достаточно переключить запуск базы на 32-разрядный клиент (x86). Для стратегического решения проблемы следует перевести макеты печатных форм на компоненты Native API или шрифты штрихкодов.

← На главную