После обновления типовой конфигурации 1С:Бухгалтерия предприятия до релиза 3.0.142.56 многие специалисты столкнулись с неприятной ситуацией: внешние печатные формы (ВПФ), которые годами работали стабильно, просто перестали открываться. При этом при попытке запуска через меню «Печать» программа не выдает никаких ошибок — она просто игнорирует действие пользователя. Примечательно, что если открыть ту же самую обработку через «Файл — Открыть», она продолжает функционировать в режиме отладки.
В этой статье мы подробно разберем причины такого поведения системы, проанализируем изменения в Библиотеке стандартных подсистем (БСП) и рассмотрим пошаговые инструкции по восстановлению работоспособности ваших печатных форм.
Проанализируем ситуацию. Основная причина кроется в обновлении механизмов безопасности и логики вызова внешних обработок в новых версиях БСП. В релизе 3.0.142.56 произошли изменения в том, как система интерпретирует параметры, возвращаемые функцией СведенияОВнешнейОбработке. В частности, усилился контроль за безопасным режимом и типами команд печати.
Рассмотрим стандартный код регистрации, который часто использовался в более ранних версиях:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.2");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма;
ПараметрыРегистрации.Версия = "3.0.1";
ПараметрыРегистрации.БезопасныйРежим = Истина;
Разрешение = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеПривилегированногоРежима();
ПараметрыРегистрации.Разрешения.Добавить(Разрешение);
ПараметрыРегистрации.Назначение.Добавить("Документ.РеализацияТоваровУслуг");
КомандаПечати = ПараметрыРегистрации.Команды.Добавить();
КомандаПечати.Идентификатор = "СчетЗаказКомплект";
КомандаПечати.Представление = "Счет на оплату (по приказу)";
КомандаПечати.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы;
КомандаПечати.Модификатор = "ПечатьMXL";
Возврат ПараметрыРегистрации;
КонецФункции
Проблема здесь заключается в сочетании использования ТипКомандыОткрытиеФормы и строгих правил БезопасныйРежим = Истина. В новых версиях конфигурации механизм печати ожидает строгого следования протоколам передачи табличного документа, и если форма просто «открывается», но не возвращает результат в стандартное окно печати, вызов блокируется.
Это самый эффективный и быстрый способ вернуть ВПФ к жизни. Мы перенаправим выполнение команды с простого открытия формы на вызов серверного метода, который является стандартным для современных версий БСП.
Выполним следующие шаги в модуле объекта внешней печатной формы:
СведенияОВнешнейОбработке.КомандаПечати.Использование. Вместо ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы установим ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода.Посмотрим на исправленный фрагмент кода:
// Изменяем тип команды
КомандаПечати.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода;
// Если форма все равно не запускается, пробуем отключить разрешения
// Разрешение = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеПривилегированногоРежима();
// ПараметрыРегистрации.Разрешения.Добавить(Разрешение);
Важно: При использовании ВызовСерверногоМетода основная логика формирования печатной формы должна находиться в процедуре Печать() модуля объекта обработки. Убедитесь, что эта процедура описана правильно и принимает необходимые параметры (МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода).
Разберем еще один нюанс. В коде регистрации часто встречается строка ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.2"). Указание версии "2.2.2.2" заставляет систему формировать структуру параметров старого образца.
Проанализируем ситуацию: если версия БСП в конфигурации значительно новее (а в 3.0.142.56 это именно так), старая структура может не содержать полей, необходимых для корректной работы механизмов безопасности.
Попробуем изменить инициализацию структуры:
// Вместо этого:
// ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.2");
// Используем вызов без параметров, чтобы получить актуальную структуру:
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
Это позволит системе автоматически подготовить набор полей, соответствующих текущей версии конфигурации, что часто снимает проблемы с «молчаливым» игнорированием запуска.
Если ваша печатная форма обращается к файловой системе, внешним компонентам или выполняет сложные запросы к метаданным, параметр ПараметрыРегистрации.БезопасныйРежим = Истина может стать непреодолимым препятствием в новых релизах. В версии 3.0.142.56 контроль за выполнением кода в безопасном режиме стал более жестким.
Рассмотрим вариант решения проблемы через изменение режима безопасности:
ПараметрыРегистрации.БезопасныйРежим = Ложь;.Внимание! Отключение безопасного режима следует делать только для проверенных обработок, так как это дает коду ВПФ полные права в системе.
Иногда после обновления конфигурации 1С «запоминает» старые настройки регистрации внешних форм в своих внутренних кэшах. Даже если вы изменили код обработки, система может продолжать пытаться запустить её по старому алгоритму.
Выполним процедуру полной перерегистрации:
Не забудем проверить техническую составляющую. Релиз БП 3.0.142.56 предъявляет определенные требования к платформе 1С:Предприятие. Несмотря на то, что версия 8.3.22.2239 считается стабильной, в ней были замечены специфические баги, связанные с отображением команд печати при использовании модификатора ПечатьMXL.
Проверим наличие установленных патчей (исправлений) в базе:
Подводя итог, можно сказать, что в большинстве случаев проблема решается переходом на ТипКомандыВызовСерверногоМетода и актуализацией вызова функции СведенияОВнешнейОбработке. Эти изменения делают вашу печатную форму совместимой с новыми стандартами безопасности 1С.