В процессе эксплуатации конфигурации «Управление торговлей 10.3», которая базируется на обычных формах, технические специалисты часто сталкиваются с внезапным прекращением работы печати этикеток и ценников. Ошибка обычно проявляется после обновления платформы или переноса информационной базы на новый сервер. В этой статье мы подробно разберем, почему возникает ошибка «Поле объекта не обнаружено (ТипКода)» и как восстановить работоспособность системы.
Разберем ситуацию: при попытке распечатать этикетку из документа (например, «Заказ покупателя» или «Поступление товаров и услуг») система выдает критическую ошибку. Проанализируем строку кода, на которой происходит остановка исполнения программы:
{ВнешняяОбработка.ПечатьЯрлыкЛС.МодульОбъекта(123)}: Поле объекта не обнаружено (ТипКода)
Макет.Рисунки.штрих.Объект.ТипКода = ТипКода;
Выясним причину такого поведения. В конфигурациях на обычных формах (УТ 10.3, КА 1.1, УПП 1.3) для генерации штрихкода традиционно используется внешний ActiveX-объект — компонента 1CBarCode.dll. В макете этикетки создается рисунок типа «Объект», который при формировании печатной формы должен инициализироваться как элемент управления «1С:Печать штрихкодов».
Когда платформа обращается к свойству Объект рисунка, она ожидает получить доступ к интерфейсу этой компоненты. Если компонента не зарегистрирована, имеет другую разрядность или блокируется системой безопасности платформы, свойство Объект возвращает Неопределено или пустой COM-объект. Следовательно, обращение к его свойству ТипКода вызывает закономерную ошибку, так как у неопределенного объекта такое поле отсутствует.
Как показывает практика и опыт участников форумов, одной из главных причин деградации функционала печати является переход на платформу версии 8.3.16.1148 и выше. Разберем, что именно изменилось в ядре 1С:
Решение: Проверенным способом является откат на стабильную версию платформы ветки 8.3.15 (например, 8.3.15.1830). Как подтвердил автор темы, после установки этой версии проблема исчезает без изменения кода обработки.
Проанализируем ситуацию с разрядностью. Компонента 1CBarCode.dll является 32-битной (x86). Если вы устанавливаете 64-битную версию платформы 1С:Предприятие (x86-64), она по умолчанию не сможет загрузить 32-битную библиотеку ActiveX в свой адресный процесс.
Рассмотрим порядок действий для проверки:
Решение: На рабочих местах, где требуется печать этикеток, необходимо устанавливать 32-битный толстый клиент платформы, даже если сама операционная система Windows 64-битная. 32-битная платформа прекрасно работает в режиме эмуляции WOW64 и корректно взаимодействует с 1CBarCode.
Иногда компонента физически присутствует на диске, но не зарегистрирована в реестре Windows. Это часто случается при «тихом» обновлении или простом копировании папки с базой. Выясним, как правильно зарегистрировать библиотеку.
Выполним следующие шаги:
1CBarCode.dll (обычно он находится в папке установленной платформы или в системных папках 1С).
regsvr32 "C:\PathToComponent\1CBarCode.dll"
Если регистрация прошла успешно, появится сообщение «DllRegisterServer в ... успешно». После этого перезапустите 1С и проверьте печать.
Платформа 1С при первом обращении к компоненте пытается инициализировать ее настройки в реестре. Если у пользователя Windows ограничены права, процесс прерывается, и объект ТипКода становится недоступен.
Рекомендация: Попробуйте один раз запустить 1С:Предприятие от имени администратора, открыть обработку печати этикеток и сформировать штрихкод. После успешной инициализации последующие запуски можно выполнять под обычным пользователем.
Чтобы избежать «вылета» системы с ошибкой, мы рекомендуем добавить в код обработки проверку на наличие установленной компоненты. Рассмотрим пример того, как это можно реализовать программно:
Попытка
ТестовыйОбъект = Новый COMОбъект("V83.BarcodeInput.1");
Исключение
Сообщить("Компонента 1С:Печать штрихкодов не установлена на данном компьютере!");
Возврат;
КонецПопытки;
// Если проверка прошла, можно обращаться к макету
ОбластьМакета = Макет.ПолучитьОбласть("Этикетка");
РисунокШтрихкод = ОбластьМакета.Рисунки.штрих;
Если РисунокШтрихкод.Объект <> Неопределено Тогда
РисунокШтрихкод.Объект.ТипКода = 4; // EAN13
РисунокШтрихкод.Объект.Сообщение = "4601234567890";
КонецЕсли;
Использование метода Новый COMОбъект позволяет нам заранее понять, видит ли операционная система нужную библиотеку, и вывести пользователю понятное предупреждение вместо программного сбоя.
Проанализировав все возможные факторы, мы можем составить краткий алгоритм действий при возникновении ошибки Поле объекта не обнаружено (ТипКода):
regsvr32 1CBarCode.dll.Соблюдение этих шагов позволит восстановить стабильную работу склада и торговых точек без необходимости глубокой переработки типовой конфигурации 1С:Управление торговлей 10.3.