При переносе старых конфигураций 1С, таких как «Инфокрафт: ЖКХ. Учет в ТСЖ и ЖСК», с операционной системы Windows XP на современные версии (Windows 10 или 11), пользователи и программисты часто сталкиваются с критической ошибкой при печати квитанций. Текст ошибки обычно выглядит следующим образом:
{Отчет.икКвитанции.МодульОбъекта(1288)}: Поле объекта не обнаружено (symbology)
рисОСХ.объект.symbology = 58;
В этой статье мы подробно разберем причины возникновения данной проблемы, выясним, за что отвечает свойство symbology, и рассмотрим пошаговый алгоритм восстановления работоспособности формирования QR-кодов.
Проанализируем ситуацию: ошибка возникает в строке кода, которая обращается к объекту рисОСХ. Этот объект представляет собой внешний ActiveX-компонент (обычно это 1C:BarCode или его аналоги), размещенный на макете отчета. Свойство symbology определяет тип кодировки штрихкода. Значение 58 специфично для формирования именно QR-кода.
Когда 1С выдает ошибку «Поле объекта не обнаружено», это означает, что платформа смогла создать графический контейнер на форме или в макете, но не смогла инициализировать программный интерфейс (API) самой библиотеки. Проще говоря, 1С «видит» картинку, но «не видит» функционал, который внутри этой картинки должен рисовать штрихкод. Основная причина — некорректная регистрация библиотеки Barcode.ocx или 1CBarCode.dll в новой операционной системе.
Рассмотрим важнейший аспект, который изменился со времен Windows XP. Современные операционные системы Windows 10 чаще всего являются 64-битными (x64), в то время как старые компоненты штрихкодирования 1С — 32-битные (x86).
Для корректной работы необходимо соблюдение двух условий:
C:\Windows\SysWOW64, а не в System32.Выясним, как правильно зарегистрировать библиотеку. Если вы просто скопировали файл Barcode.ocx в папку C:\Windows, этого недостаточно. Проанализируем правильный алгоритм действий:
Barcode.ocx (или 1CBarCode.dll) в папку C:\Windows\SysWOW64.regsvr32 для 32-битных компонент:
C:\Windows\SysWOW64\regsvr32.exe C:\Windows\SysWOW64\Barcode.ocx
Если регистрация прошла успешно, вы увидите сообщение «DllRegisterServer в ... успешно завершено». Если же возникла ошибка, это может означать отсутствие необходимых системных библиотек.
Старые версии 1C:BarCode часто зависят от пакетов Microsoft Visual C++ Redistributable (обычно версий 2005 или 2008). В Windows XP они входили в состав многих обновлений, но в «чистой» Windows 10 их может не быть. Без этих библиотек компонент Barcode.ocx зарегистрируется, но при обращении к нему из кода 1С (к полю symbology) будет происходить сбой, так как объект не сможет инициализироваться.
Мы рекомендуем установить пакеты Microsoft Visual C++ 2005, 2008, 2010 и 2012 разрядности x86. Именно 32-битные версии библиотек среды выполнения нужны для работы ActiveX-компонента.
Разберем влияние системы контроля учетных записей (UAC) в Windows 10. Иногда 1С не может обратиться к зарегистрированному компоненту из-за ограничений прав. Попробуйте выполнить следующие действия:
HKEY_CLASSES_ROOT.symbology = 58 требуется версия 1C:BarCode не ниже 8.0.15.2. Более старые версии просто «не знают», что такое 58, и не имеют такого поля.Если манипуляции с регистрацией библиотек не помогают или вы хотите избавиться от зависимости от внешних файлов, рассмотрим вариант изменения программного кода. Начиная с платформы 8.3.6, 1С умеет выводить QR-коды встроенными средствами без использования сторонних OCX-файлов.
Для этого в макете отчета необходимо заменить объект типа «Рисунок (ActiveX)» на обычный объект типа «Рисунок» с установленным свойством «Тип штрихкода». В коде это будет выглядеть примерно так:
// Пример замены работы с внешним компонентом на типовой функционал платформы
ОбластьМакета = Макет.ПолучитьОбласть("ОбластьQRКода");
Рисунок = ОбластьМакета.Рисунки.QRКод;
Рисунок.ТипШтрихкода = ТипШтрихкода.QR;
Рисунок.ТекстКода = "Данные_для_платежа";
Такой подход навсегда решит проблему «Поле объекта не обнаружено», так как платформа будет генерировать код самостоятельно, не обращаясь к внешним библиотекам, которые требуют регистрации в Windows. В качестве примера реализации подобного механизма в конфигурациях на обычных формах можно использовать внешнюю печатную форму с генерацией QR-кода.
Подведем итог. Чтобы устранить ошибку рисОСХ.объект.symbology = 58, пройдите по шагам:
Barcode.ocx в C:\Windows\SysWOW64.C:\Windows\SysWOW64\regsvr32.exe.