Как исправить ошибку «Поле объекта не обнаружено (symbology)» в 1С при формировании квитанций

Программист Сфера услуг, туризм и социальный сектор
← На главную

При переносе старых конфигураций 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 в новой операционной системе.

Шаг 1. Устранение конфликта разрядности

Рассмотрим важнейший аспект, который изменился со времен Windows XP. Современные операционные системы Windows 10 чаще всего являются 64-битными (x64), в то время как старые компоненты штрихкодирования 1С — 32-битные (x86).

Для корректной работы необходимо соблюдение двух условий:

  1. Версия платформы 1С: Если вы запускаете 64-битный клиент 1С (x86_64), он принципиально не сможет работать с 32-битным ActiveX-компонентом. Для работы старых отчетов с QR-кодами обязательно используйте 32-битный клиент 1С:Предприятие, даже если сама Windows 64-битная.
  2. Путь регистрации: В 64-битных системах 32-битные библиотеки должны располагаться в системной папке C:\Windows\SysWOW64, а не в System32.

Шаг 2. Правильная регистрация компонента в реестре

Выясним, как правильно зарегистрировать библиотеку. Если вы просто скопировали файл Barcode.ocx в папку C:\Windows, этого недостаточно. Проанализируем правильный алгоритм действий:

  1. Скопируйте файл Barcode.ocx (или 1CBarCode.dll) в папку C:\Windows\SysWOW64.
  2. Запустите командную строку (cmd) обязательно от имени администратора.
  3. Выполните команду регистрации, используя специальную версию утилиты regsvr32 для 32-битных компонент:

C:\Windows\SysWOW64\regsvr32.exe C:\Windows\SysWOW64\Barcode.ocx

Если регистрация прошла успешно, вы увидите сообщение «DllRegisterServer в ... успешно завершено». Если же возникла ошибка, это может означать отсутствие необходимых системных библиотек.

Шаг 3. Установка необходимых компонентов Runtime

Старые версии 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-компонента.

Шаг 4. Проверка прав доступа и UAC

Разберем влияние системы контроля учетных записей (UAC) в Windows 10. Иногда 1С не может обратиться к зарегистрированному компоненту из-за ограничений прав. Попробуйте выполнить следующие действия:

Шаг 5. Альтернативное решение (изменение кода)

Если манипуляции с регистрацией библиотек не помогают или вы хотите избавиться от зависимости от внешних файлов, рассмотрим вариант изменения программного кода. Начиная с платформы 8.3.6, 1С умеет выводить QR-коды встроенными средствами без использования сторонних OCX-файлов.

Для этого в макете отчета необходимо заменить объект типа «Рисунок (ActiveX)» на обычный объект типа «Рисунок» с установленным свойством «Тип штрихкода». В коде это будет выглядеть примерно так:


// Пример замены работы с внешним компонентом на типовой функционал платформы
ОбластьМакета = Макет.ПолучитьОбласть("ОбластьQRКода");
Рисунок = ОбластьМакета.Рисунки.QRКод;
Рисунок.ТипШтрихкода = ТипШтрихкода.QR;
Рисунок.ТекстКода = "Данные_для_платежа";

Такой подход навсегда решит проблему «Поле объекта не обнаружено», так как платформа будет генерировать код самостоятельно, не обращаясь к внешним библиотекам, которые требуют регистрации в Windows. В качестве примера реализации подобного механизма в конфигурациях на обычных формах можно использовать внешнюю печатную форму с генерацией QR-кода.

Резюме по исправлению

Подведем итог. Чтобы устранить ошибку рисОСХ.объект.symbology = 58, пройдите по шагам:

  1. Убедитесь, что вы используете 32-битную версию платформы 1С.
  2. Поместите Barcode.ocx в C:\Windows\SysWOW64.
  3. Зарегистрируйте библиотеку через C:\Windows\SysWOW64\regsvr32.exe.
  4. Установите старые пакеты Visual C++ x86.
  5. Если проблема сохраняется, рассмотрите возможность перехода на типовой механизм печати штрихкодов 1С, доступный в платформе 8.3.
← На главную