Почему не работает компонента 1С:Печать штрихкодов на 64-битном клиенте и как это исправить?

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

При переносе информационной базы на новый сервер или обновлении платформы 1С:Предприятие 8.3 пользователи часто сталкиваются с ошибкой: «Не установлена Компонента 1С:Печать штрихкодов». При этом сама компонента установлена и зарегистрирована в операционной системе, а на старом сервере или на других рабочих местах печать документов со штрихкодами работает корректно. Проанализируем, почему возникает эта ошибка и какие существуют проверенные варианты её устранения.

Выясним техническую причину сбоя. Классическая библиотека печати штрихкодов от фирмы «1С» (файл 1CBarCod.dll, программный идентификатор COM V8.Barcod.1) представляет собой 32-разрядный (x86) in-process ActiveX/COM-элемент управления. Разрядность клиентского приложения 1С напрямую влияет на возможность загрузки внешних библиотек:

  1. 64-разрядный процесс (1cv8c.exe или 1cv8.exe x64) физически не может загрузить 32-битную динамическую библиотеку DLL в своё адресное пространство.
  2. Попытка зарегистрировать 32-битную библиотеку через суррогатный 64-битный COM-процесс (dllhost.exe) позволяет создать COM-объект в памяти, но не решает задачу отображения. В конфигурациях макет печатной формы использует объект РисунокТабличногоДокумента с типом элемента управления ActiveX. Суррогатный процесс не может отрисовать визуальный интерфейс внутри 64-битного графического окна клиента 1С, что приводит к системным исключениям при обращении к свойствам объекта.

Разберем подробнее практические способы решения данной проблемы.

Способ 1. Принудительный запуск 32-разрядной версии клиента 1С

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

  1. Установим на клиентский компьютер или терминальный сервер 32-разрядный дистрибутив клиента 1С:Предприятие 8.3 (x86) той же версии, что и сервер 1С.
  2. Откроем окно запуска списка информационных баз 1С.
  3. Выделим нужную базу, нажмем кнопку «Изменить» и перейдем на последнюю страницу настроек.
  4. В поле «Разрядность» переключим значение с «Авто» или «64 (x64)» на «32 (x86)».
  5. Если используется прямой запуск через ярлык или командную строку, укажем явный путь к исполняемому файлу из каталога Program Files (x86)\1cv8\номер_версии\bin\1cv8.exe.

При работе в 32-разрядном клиенте библиотека 1CBarCod.dll загружается штатно, и формирование штрихкодов выполняется без ошибок.

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

Фирма «1С» разработала современную внешнюю компоненту генерации штрихкодов по технологии Native API. В отличие от устаревшего ActiveX-элемента, Native-компонента поставляется с библиотеками под разные архитектуры: Windows x86, Windows x64 и Linux. Главное архитектурное отличие — компонента не внедряется в макет как элемент управления, а формирует двоичные данные картинки (BMP или PNG), которые вставляются в табличный документ как обычное изображение.

Посмотрим на типовой алгоритм подключения Native-компоненты на встроенном языке 1С:


// Подключение компоненты из макета конфигурации или общего макета
Если ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкодов", "BarcodeNative", ТипВнешнейКомпоненты.Native) Тогда
    ГенераторШтрихкода = Новый("AddIn.BarcodeNative.Barcode");
    
    // Настройка параметров формирования штрихкода
    ГенераторШтрихкода.ТипКода = 4; // Например, EAN-13
    ГенераторШтрихкода.Текст = "4601234567890";
    ГенераторШтрихкода.ОтображатьТекст = Истина;
    ГенераторШтрихкода.Ширина = 300;
    ГенераторШтрихкода.Высота = 150;
    
    // Получение двоичных данных картинки штрихкода
    ДвоичныеДанныеКартинки = ГенераторШтрихкода.СформироватьШтрихкод();
    
    Если ДвоичныеДанныеКартинки <> Неопределено Тогда
        РисунокШтрихкода = Макет.Рисунки.Найти("Штрихкод");
        РисунокШтрихкода.Картинка = Новый Картинка(ДвоичныеДанныеКартинки);
    КонецЕсли;
КонецЕсли;

Этот способ универсален, не зависит от разрядности клиента и сервера 1С и поддерживается во всех актуальных конфигурациях на базе Библиотеки стандартных подсистем (БСП) и Библиотеки подключаемого оборудования (БПО).

Способ 3. Использование специализированных шрифтов (TrueType Fonts)

Рассмотрим альтернативное решение, не требующее использования сторонних бинарных компонент — печать штрихкодов с помощью специальных шрифтов (Code 128, EAN-13, EAN-8). В этом случае штрихкод формируется как текстовая строка, отображаемая определенным шрифтом.

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

Посмотрим на пример подготовки строки для шрифта Code 128:


// Пример вывода штрихкода в ячейку с установленным шрифтом Code 128
ОбластьМакета = Макет.ПолучитьОбласть("СтрокаШтрихкода");
ОбластьМакета.Параметры.Штрихкод = ПреобразоватьВФорматCode128("123456789012");
ТабличныйДокумент.Вывести(ОбластьМакета);

Шрифтовой подход полностью снимает проблемы с разрядностью операционной системы и версии платформы 1С:Предприятие, обеспечивая высокую скорость формирования отчетов и печатных форм.

← На главную