При работе с торговыми решениями на базе платформы 1С:Предприятие 8.3 (например, «Штрих-М: Торговое предприятие 7») программисты часто сталкиваются с неприятной ситуацией: штатные печатные формы работают корректно, а внешние печатные формы выдают сообщение «Ошибка подключения внешней компоненты печати штрихкода!». Ситуация осложняется тем, что после одной такой ошибки штрихкоды перестают печататься даже в типовых формах до полной перезагрузки сеанса. Проанализируем причины этого поведения и разберем способы решения задачи.
Разберем ситуацию, когда первый же вызов внешней формы блокирует работу всей подсистемы печати штрихкодов. Рассмотрим механизм работы модулей с повторным использованием значений (кэширование). В конфигурациях, подобных «Штрих-М», функция подключения компоненты часто вызывается из таких модулей для оптимизации производительности. Проанализируем цепочку событий: для этого подойдёт печать штрихкодов в печатных формах 1С.
1CBarCodePrinting.ocx или аналогичный Native API объект).Ложь) записывается в кэш сеанса.Именно поэтому единственным выходом на текущем этапе кажется перезапуск 1С. Однако наша задача — устранить первопричину сбоя в самой внешней обработке.
Основной причиной блокировки внешних компонент является безопасный режим исполнения программного кода. Посмотрим, почему это критично. Платформа 1С:Предприятие ограничивает выполнение потенциально опасных операций в безопасном режиме, к которым относятся:
Если внешняя печатная форма добавлена в справочник «Дополнительные отчеты и обработки» с включенным флагом «Безопасный режим», метод ПодключитьВнешнююКомпоненту() вернет ошибку доступа, что приведет к сбою всей подсистемы печати штрихкодов в данном сеансе — задача решается через автоматическое добавление QR-кодов в 1С без изменения макетов.
Самый быстрый способ исправить ситуацию — изменить настройки регистрации внешней обработки. Разберем по шагам, как это сделать в пользовательском режиме:
После этого внешняя форма будет выполняться с полными правами модуля менеджера, и компонента штрихкода подключится без проблем — для этого подойдёт создание печатных форм с QR-кодами в 1С.
Если требования безопасности не позволяют полностью отключить безопасный режим (например, при работе в облачных сервисах или распределенных базах), мы можем явно запросить разрешение на использование внешней компоненты. Для этого проанализируем функцию СведенияОВнешнейОбработке(), которая должна присутствовать в модуле объекта внешней обработки.
Рассмотрим пример кода, где мы добавляем запрос на использование внешней компоненты через механизмы БСП (Библиотеки Стандартных Подсистем):
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
// ... стандартное заполнение параметров ...
Разрешения = Новый Массив;
// Добавляем разрешение на использование внешней компоненты печати штрихкодов
ИмяКомпоненты = "ОбщийМакет.КомпонентаПечатиШтрихкодов"; // Укажите актуальное имя
Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеВнешнейКомпоненты(ИмяКомпоненты));
ПараметрыРегистрации.Вставить("Разрешения", Разрешения);
Возврат ПараметрыРегистрации;
КонецФункции
В этом случае при регистрации или обновлении обработки в справочнике система предложит администратору разрешить конкретные опасные действия, сохраняя при этом общую изоляцию кода.
Если изменение безопасного режима не помогло, проанализируем системные ограничения, характерные для «Штрих-М: Торговое предприятие 7» и платформы 8.3:
1CBarCode), она не загрузится. В этом случае необходимо либо переходить на 32-битный клиент, либо использовать современную компоненту Native API, поддерживающую обе архитектуры.Таким образом, мы выяснили, что «прилипающая» ошибка подключения внешней компоненты чаще всего вызвана сочетанием механизмов безопасности платформы 1С и кэширования результатов в программном коде конфигурации. Соблюдение правил регистрации внешних обработок и корректное описание разрешений позволяют полностью устранить данную проблему.