При переносе информационной базы на новый сервер или обновлении платформы 1С:Предприятие 8.3 пользователи часто сталкиваются с ошибкой: «Не установлена Компонента 1С:Печать штрихкодов». При этом сама компонента установлена и зарегистрирована в операционной системе, а на старом сервере или на других рабочих местах печать документов со штрихкодами работает корректно. Проанализируем, почему возникает эта ошибка и какие существуют проверенные варианты её устранения.
Выясним техническую причину сбоя. Классическая библиотека печати штрихкодов от фирмы «1С» (файл 1CBarCod.dll, программный идентификатор COM V8.Barcod.1) представляет собой 32-разрядный (x86) in-process ActiveX/COM-элемент управления. Разрядность клиентского приложения 1С напрямую влияет на возможность загрузки внешних библиотек:
1cv8c.exe или 1cv8.exe x64) физически не может загрузить 32-битную динамическую библиотеку DLL в своё адресное пространство.dllhost.exe) позволяет создать COM-объект в памяти, но не решает задачу отображения. В конфигурациях макет печатной формы использует объект РисунокТабличногоДокумента с типом элемента управления ActiveX. Суррогатный процесс не может отрисовать визуальный интерфейс внутри 64-битного графического окна клиента 1С, что приводит к системным исключениям при обращении к свойствам объекта.Разберем подробнее практические способы решения данной проблемы.
Это самый быстрый и надежный способ восстановить работу печати штрихкодов без вмешательства в программный код конфигурации и макеты печатных форм. Если на сервере или рабочей станции установлена 64-битная платформа, по умолчанию стартер запускает клиент соответствующей разрядности. Переключим запуск базы на 32-битную платформу:
1С:Предприятие 8.3 (x86) той же версии, что и сервер 1С.Program Files (x86)\1cv8\номер_версии\bin\1cv8.exe.При работе в 32-разрядном клиенте библиотека 1CBarCod.dll загружается штатно, и формирование штрихкодов выполняется без ошибок.
Фирма «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С и поддерживается во всех актуальных конфигурациях на базе Библиотеки стандартных подсистем (БСП) и Библиотеки подключаемого оборудования (БПО).
Рассмотрим альтернативное решение, не требующее использования сторонних бинарных компонент — печать штрихкодов с помощью специальных шрифтов (Code 128, EAN-13, EAN-8). В этом случае штрихкод формируется как текстовая строка, отображаемая определенным шрифтом.
Code128.ttf) в каталог шрифтов операционной системы на клиентах и сервере.Посмотрим на пример подготовки строки для шрифта Code 128:
// Пример вывода штрихкода в ячейку с установленным шрифтом Code 128
ОбластьМакета = Макет.ПолучитьОбласть("СтрокаШтрихкода");
ОбластьМакета.Параметры.Штрихкод = ПреобразоватьВФорматCode128("123456789012");
ТабличныйДокумент.Вывести(ОбластьМакета);
Шрифтовой подход полностью снимает проблемы с разрядностью операционной системы и версии платформы 1С:Предприятие, обеспечивая высокую скорость формирования отчетов и печатных форм.