Довольно часто при попытке вывода на печать этикеток со штрихкодами в старых конфигурациях, таких как 1С:Управление торговлей 10.3, мы сталкиваемся с ошибкой инициализации внешней компоненты.
Проанализируем ситуацию: в программном коде обработки происходит вызов создания COM-объекта через Новый COMОбъект("V8.Barcod.1") или V8.1CBarcod.1, после чего система прерывает выполнение и выдает исключение «Компонента 1С:Печать штрихкодов не установлена на данном компьютере!». Даже если вы установили компоненту из официального дистрибутива и попытались зарегистрировать ее системной утилитой, ошибка может не исчезнуть.
Разберем основные причины этой неполадки и посмотрим на способы ее эффективного решения.
Если вы используете 64-битную версию Windows, а компонента 1CBarCod.dll является 32-битной (что характерно для устаревших ActiveX-элементов), стандартный запуск утилиты регистрации приведет к записи данных в неверные ветки системного реестра. Windows отчитается об успешном завершении процесса, но платформа 1С эту компоненту не увидит.
Рассмотрим по шагам правильный алгоритм переустановки компоненты:
1CBarCode.exe) строго от имени Администратора. Для этого кликните по файлу правой кнопкой мыши и выберите соответствующий пункт меню.C:\Windows\SysWOW64\regsvr32.exe "Полный_Путь_К_Файлу\1CBarCod.dll". Это принудительно зарегистрирует 32-битную динамическую библиотеку в 64-битной среде.Функция предотвращения выполнения данных (DEP) в операционных системах Windows может расценивать работу старых элементов управления ActiveX как потенциальную угрозу и блокировать их. Чтобы исключить этот фактор, добавим исполняемый файл клиентского приложения 1С (обычно это 1cv8.exe) в список исключений функции DEP. Сделать это можно в дополнительных параметрах быстродействия системы Windows.
Технология ActiveX устарела и регулярно вызывает проблемы совместимости с современными клиентами платформы 1С. Разберем более надежный подход — использование современной компоненты «1С:Печать штрихкодов (Native)».
Компоненты формата Native API не требуют регистрации в реестре Windows через утилиту regsvr32, они поставляются в макетах конфигурации в различных форматах, подходящих как для 32-, так и для 64-битных архитектур (в том числе для Linux).
Посмотрим на пример кода функции, которая выполняет подключение Native-компоненты и ее первоначальную настройку для формирования изображения штрихкода. Вы можете использовать этот код для адаптации вашей обработки:
// Функция выполняет подключение внешней компоненты и ее первоначальную настройку.
// Возвращаемое значение: НЕОПРЕДЕЛЕНО - компоненту не удалось загрузить.
Функция ПодключитьВнешнююКомпонентуПечатиШтрихкода() Экспорт
ПодключениеВыполнено = ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкодов", "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native);
// Создадим объект внешней компоненты.
Если ПодключениеВыполнено Тогда
ВнешняяКомпонента = Новый("AddIn.КартинкаШтрихкода.Barcode");
Иначе
Возврат Неопределено;
КонецЕсли;
// Если нет возможности рисовать.
Если НЕ ВнешняяКомпонента.ГрафикаУстановлена Тогда
// То картинку сформировать не сможем.
Возврат Неопределено;
Иначе
// Установим основные параметры компоненты.
// Если в системе установлен шрифт Tahoma.
Если ВнешняяКомпонента.НайтиШрифт("Tahoma") Тогда
// Выбираем его как шрифт для формирования картинки.
ВнешняяКомпонента.Шрифт = "Tahoma";
Иначе
// Шрифт Tahoma в системе отсутствует.
// Обойдем все доступные компоненте шрифты.
Для Сч = 0 По ВнешняяКомпонента.КоличествоШрифтов - 1 Цикл
// Получим очередной шрифт, доступный компоненте.
ТекущийШрифт = ВнешняяКомпонента.ШрифтПоИндексу(Сч);
// Если шрифт доступен
Если ТекущийШрифт <> Неопределено Тогда
// Он и будет шрифтом для формирования текста под штрихкодом.
ВнешняяКомпонента.Шрифт = ТекущийШрифт;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
// Установим размер шрифта
ВнешняяКомпонента.РазмерШрифта = 12;
Возврат ВнешняяКомпонента;
КонецЕсли;
КонецФункции
В этом примере мы подключаем компоненту из общего макета, создаем объект типа AddIn.КартинкаШтрихкода.Barcode и выполняем перебор доступных системных шрифтов (ища в первую очередь Tahoma) для корректного отображения цифровой или буквенной подписи к самому коду. Замена старого COM-объекта на новую технологию Native гарантированно избавит вас от конфликтов с правами доступа и проблемами системного реестра ОС.