При работе с актуальными релизами конфигурации «Управление торговлей 10.3» (включая печать счетов и УПД с QR кодом — для этого есть обработка добавления QR-кодов на печатные формы) на современной платформе 1С:Предприятие 8.3 (особенно при использовании 64-битных версий клиента) пользователи и разработчики часто сталкиваются с проблемой: старый инсталлятор компоненты печати штрихкодов, который раньше был доступен на сайте поддержки, больше не актуален или не работает. В данной статье мы подробно разберем, где взять актуальную библиотеку, как ее правильно извлечь из конфигурации и как обеспечить ее работоспособность в современных условиях.
Ранее компонента 1CBarCode распространялась в виде отдельного дистрибутива (ActiveX). Однако в современных реалиях стратегия 1С изменилась. Теперь актуальные версии библиотек печати штрихкодов включены непосредственно в состав конфигураций, использующих БПО (Библиотеку подключаемого оборудования), например, для заказа поставщику со штрихкодом. Даже в такой классической конфигурации, как УТ 10.3, эта компонента встроена в виде общего макета.
Рассмотрим пошагово процесс поиска и извлечения компоненты из вашей базы данных (чтобы создать счет на оплату с QR кодом):
КомпонентаПечатиШтрихкодов. Именно в нем 1С хранит универсальный бинарный файл, содержащий версии компоненты для разных операционных систем и архитектур..zip. Сохраним его на диск.После распаковки этого архива мы увидим набор файлов. Проанализируем их содержимое. Если наша задача — работа на 64-битной версии Windows с 64-битным клиентом 1С, нам потребуется файл с соответствующим названием, например, BarcodeLibNativeWin64_10_0_2_4.dll. Индексы в конце могут отличаться в зависимости от версии вашей конфигурации (например, 10.0.6.х).
Это критически важный момент для понимания стабильной работы системы. Разберем, почему старый метод регистрации через regsvr32 больше не является предпочтительным:
Технология ActiveX (COM): Это старая библиотека 1CBarCode.dll. Она требует обязательной регистрации в реестре Windows под правами администратора. Главный ее минус — она 32-битная. Если вы установите 64-битную платформу 1С:Предприятие, этот объект просто не сможет быть создан в памяти процесса, так как 64-битный процесс не может загружать 32-битные DLL.
Технология Native API: Современные версии компоненты используют Native-технологию. Такие библиотеки (как те, что мы извлекли из макета) не требуют регистрации в реестре системы. Платформа 1С умеет загружать их динамически «на лету» прямо из макета или из временной папки профиля пользователя. Именно Native-компоненты поддерживают архитектуру x64.
Проанализируем пример кода, который позволяет правильно инициализировать компоненту без привязки к ее регистрации в Windows. Это особенно полезно, когда у пользователей ограничены права на запись в системный реестр или программные папки. Основной метод, который мы будем использовать — ПодключитьВнешнююКомпоненту.
Рассмотрим фрагмент кода, который можно использовать в модуле печати ценников или этикеток:
// Попытка подключения компоненты из общего макета конфигурации
Подключено = ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкодов", "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native);
Если Подключено Тогда
// Создание объекта внешней компоненты
Компонента_Barcode = Новый("AddIn.КартинкаШтрихкода.Barcode");
Иначе
// Если подключение не удалось, выводим сообщение или используем альтернативный метод
Сообщить("Не удалось загрузить компоненту печати штрихкодов!");
Возврат Неопределено;
КонецЕсли;
Если НЕ Компонента_Barcode.ГрафикаУстановлена Тогда
// Если по каким-то причинам графическая подсистема компоненты не инициализирована
Возврат Неопределено;
Иначе
// Установка параметров отображения (шрифты, размеры)
Если Компонента_Barcode.НайтиШрифт("Tahoma") Тогда
Компонента_Barcode.Шрифт = "Tahoma";
Иначе
// Перебор доступных в системе шрифтов, если Tahoma не найден
Для Сч = 0 По Компонента_Barcode.КоличествоШрифтов - 1 Цикл
ТекущийШрифтШК = Компонента_Barcode.ШрифтПоИндексу(Сч);
Если ТекущийШрифтШК <> Неопределено Тогда
Компонента_Barcode.Шрифт = ТекущийШрифтШК;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Компонента_Barcode.РазмерШрифта = 14;
Возврат Компонента_Barcode;
КонецЕсли;
В данном примере мы используем параметр ТипВнешнейКомпоненты.Native. Это говорит платформе, что нужно искать внутри архива макета библиотеку, соответствующую текущей разрядности запущенного клиента 1С. Если вы работаете в x86 клиенте, платформа возьмет 32-битную DLL, если в x64 — 64-битную.
Выясним причину, по которой штрихкод может не печататься, даже если компонента успешно подключена. Часто проблема кроется в шрифтах. Компонента 1С формирует картинку штрихкода (объект Картинка), и для прорисовки цифр под полосками ей требуются системные шрифты (например, Arial или Tahoma). Если код выполняется на стороне сервера, убедитесь, что необходимые шрифты установлены на сервере. Если на клиенте — проверьте наличие шрифтов в Windows.
Еще один важный момент — права доступа к папке профиля пользователя. При вызове ПодключитьВнешнююКомпоненту из макета, платформа 1С распаковывает DLL во временный каталог (обычно это %AppData%\Roaming\1C\1cv8\ExtCompDir). Проверьте, что антивирусное ПО или политики безопасности не блокируют выполнение DLL-файлов из этого каталога.
Если по каким-то причинам использование Native-компоненты невозможно (например, на очень старых версиях платформы или специфических ОС), рассмотрим альтернативный вариант — шрифты штрихкода. Существуют специальные шрифты (например, EAN13.ttf, Code39.ttf), которые превращают обычную текстовую строку в штрихкод. В этом случае вам не нужны никакие DLL, достаточно установить шрифт в Windows и выбрать его в свойствах ячейки табличного документа 1С. Однако помните, что для формирования контрольного символа EAN-13 вам все равно потребуется небольшая функция на языке 1С, чтобы преобразовать цифры в специальную последовательность символов шрифта.
Подводя итог, отметим: для УТ 10.3 на современных платформах 8.3 использование Native-версии из общего макета является самым надежным и «чистым» способом, избавляющим от необходимости ручной регистрации библиотек в системе.