Почему при формировании штрихкода в 1С возникает ошибка «Тип не определен (AddIn.BarcodeSymbolicName.Barcode)» и как ее исправить?

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

При организации печати этикеток, ценников или формировании печатных форм документов разработчики нередко сталкиваются с ситуацией, когда на рабочей базе или одном из серверов кластера генерация штрихкода дает сбой. При вызове конструктора нового объекта или типовых функций БСП возникает исключительная ситуация: «Тип не определен (AddIn.BarcodeSymbolicName.Barcode)». При этом на тестовом стенде или соседнем сервере со схожей конфигурацией операционной системы код отрабатывает штатно. Разберем детально, почему возникает эта ошибка, как быстро восстановить работоспособность системы и какие альтернативные подходы можно применить.

Посмотрим на пример кода, который вызывает исключение:

ПодключаемыйМодуль = Новый("AddIn.BarcodeSymbolicName.Barcode");

Либо аналогичный вызов через типовые механизмы Библиотеки стандартных подсистем (БСП):


ВнешняяКомпонента = ГенерацияШтрихКода.ПодключитьКомпонентуГенерацииИзображенияШтрихкода();

Выясним причину такого поведения платформы. Метод Новый с передачей имени типа в строковом виде пытается создать экземпляр ранее подключенного объекта. Если вызов функции подключения внешней компоненты вернул Ложь (или библиотека вообще не была загружена в память процесса), платформа не знает указанного типа данных и аварийно завершает выполнение с ошибкой «Тип не определен».

Решение 1. Очистка кэша сервера 1С:Предприятие

Как показывает практика, наиболее распространенная причина расхождения в поведении одинаковых серверов — повреждение или неактуальное состояние кэшированных данных платформы. При автоматическом обновлении конфигурации или повторной инициализации внешних компонент серверный процесс rphost.exe может обращаться к устаревшим или поврежденным временным файлам метаданных.

Разберем по шагам регламент правильной очистки серверного кэша:

  1. Предупредим пользователей и завершим активные сеансы работы в информационной базе.
  2. Остановим службу агента сервера 1С:Предприятие (1C:Enterprise 8.3 Server Agent) через консоль управления службами services.msc или командную строку.
  3. Перейдем в каталог данных кластера серверов (по умолчанию для Windows это C:\Program Files\1cv8\srvinfo или C:\Program Files (x86)\1cv8\srvinfo).
  4. Найдем каталог нужного кластера (вида reg_1541) и внутри него папки баз данных (по уникальным GUID идентификаторам). Очистим в них подкаталоги временных данных кэша, не затрагивая конфигурационные файлы кластера (1CV8Clst.lst, 1CV8Clt.lst).
  5. Очистим временные папки профиля пользователя ОС, под которым запущена служба сервера 1С (папки %TEMP%, AppData\Local\Temp пользователя usr1cv8).
  6. Запустим службу агента сервера 1С и проверим формирование штрихкода.

Решение 2. Проверка разрядности платформы и библиотеки (32/64 бит)

Проанализируем технические особенности загрузки динамических библиотек. 64-битный рабочий процесс сервера 1С (rphost.exe) фундаментально не может загрузить 32-битные динамические библиотеки (DLL) в свое адресное пространство. Старые инсталляторы пакета «1С:Печать штрихкодов» часто содержали исключительно 32-битные COM-компоненты.

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

  1. Определим разрядность процесса сервера 1С через «Диспетчер задач» Windows на проблемной машине.
  2. Если используется типовой макет БСП, убедимся, что конфигурация обновлена до актуальной версии, где макет содержит Native-компоненты под все архитектуры: Windows x86, Windows x64, Linux.
  3. Если используется прямое подключение внешней компоненты, проверим разрядность файла с расширением .dll. Для 64-битного сервера требуется соответствующая x64 сборка библиотеки.

Решение 3. Установка библиотек Microsoft Visual C++ Redistributable

Для корректного вызова LoadLibrary операционной системой скомпилированные библиотеки штрихкодирования требуют наличия в среде Windows системных библиотек времени выполнения. Если на новом или обновленном сервере отсутствуют необходимые пакеты, Windows блокирует запуск DLL без вывода явного предупреждения в журнал 1С.

Рассмотрим, как это исправить:

  1. Загрузим и установим на сервере распространяемые пакеты Microsoft Visual C++ Redistributable актуальных версий.
  2. Обязательно установим обе редакции пакета: x64 и x86, так как часть сервисов может требовать 32-битное окружение, в то время как основной процесс работает в 64-битном режиме.
  3. Перезагрузим сервер для применения изменений в системных путях поиска библиотек.

Решение 4. Диагностика прав учетной записи службы 1С

При вызове процедур инициализации компонент штрихкодирования БСП извлекает бинарные данные из общего макета и сохраняет их во временную директорию на диске сервера. Если служба сервера запущена под ограниченной системной учетной записью (например, usr1cv8), у нее могут отсутствовать права на запись или запуск исполняемых модулей.

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

  1. Откроем свойства каталога временных файлов C:\Windows\Temp и пользовательского каталога AppData\Local\Temp учетной записи службы.
  2. Убедимся, что учетной записи предоставлены полные права («Полный доступ») на чтение, запись и исполнение файлов в этих каталогах.
  3. Проверим политики безопасности операционной системы (AppLocker, Software Restriction Policies), а также исключения антивирусного ПО, чтобы исключить блокировку запуска динамических библиотек из временных директорий.

Решение 5. Безопасное подключение внешней компоненты в коде

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


Попытка
    Подключено = ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкодов", "Barcode", ТипВнешнейКомпоненты.Native);
    Если Подключено Тогда
        ПодключаемыйМодуль = Новый("AddIn.Barcode.Barcode");
    Иначе
        ВызватьИсключение "Не удалось загрузить внешнюю компоненту в память процесса.";
    КонецЕсли;
Исключение
    ЗаписьЖурналаРегистрации("ГенерацияШтрихкода", УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
    ВызватьИсключение "Ошибка инициализации подсистемы штрихкодирования: " + КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;

Такой подход позволяет зафиксировать точную причину сбоя в Журнале регистрации и не позволяет коду пытаться вызывать конструктор Новый для несуществующего типа.

Альтернативные способы формирования штрихкодов без внешних компонент

Если серверное окружение жестко ограничено политиками безопасности, либо в гетерогенной среде (Windows и Linux) возникают постоянные проблемы с совместимостью бинарных библиотек, рассмотрим альтернативные методы формирования кодов:

  1. Программные алгоритмы на чистом встроенном языке 1С: двумерные (QR-код, DataMatrix) и одномерные (Code 128, EAN-13) коды можно рассчитывать средствами языка 1С с прямой отрисовкой в виде векторного формата SVG или выводом линий прямо в ячейки табличного документа. Этот метод на 100% платформонезависим и не требует внешних библиотек.
  2. Специализированные шрифты штрихкодов (Barcode Fonts): установка шрифтов типа Code 128 или EAN-13 на сервер и клиенты. В коде 1С исходная строка дополняется стартовыми, стоповыми и контрольными знаками, после чего ячейке макета назначается соответствующий шрифт.
  3. Использование внешних HTTP-микросервисов: передача строки штрихкода во внутренний сервис генерации изображений через HTTP-запрос с получением двоичных данных картинки (PNG/BMP), что полностью исключает риски сбоев серверных процессов 1С.
← На главную