Почему внешняя печатная форма не отображается в меню Печать и как это исправить

Программист 1С v8.3 (Управляемые формы) Сфера услуг, туризм и социальный сектор
← На главную

При разработке и подключении внешних печатных форм (ВПФ) в конфигурациях, использующих Библиотеку стандартных подсистем (БСП), программисты часто сталкиваются с двумя основными проблемами: документ отсутствует в списке «Размещение» при регистрации обработки или же после успешной регистрации кнопка печати так и не появляется в форме документа. Разберем пошагово, как обеспечить корректное отображение вашей печатной формы, проанализируем необходимые настройки метаданных и программный код в модулях.

Шаг 1. Правильное заполнение функции СведенияОВнешнейОбработке

Первым делом проанализируем код регистрации внешней обработки. Система БСП ожидает строго определенную структуру данных. Если вы ошибетесь в названии колонок таблицы команд или неверно укажете назначение, форма не будет «подцеплена» к объекту. Рассмотрим эталонный пример формирования структуры параметров регистрации.

В модуле объекта внешней печатной формы обязательно должна присутствовать экспортная функция СведенияОВнешнейОбработке(). Разберем пример ее наполнения:


Функция СведенияОВнешнейОбработке() Экспорт
    
    ПараметрыРегистрации = Новый Структура;
    МассивНазначений = Новый Массив;
    // Указываем полное имя документа, к которому привязываем форму
    МассивНазначений.Добавить("Документ.ЧленствоПакетУслуг"); 
    
    ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма"); 
    ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
    ПараметрыРегистрации.Вставить("Наименование", "Печать договора (внешняя)");
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
    ПараметрыРегистрации.Вставить("Версия", "1.1");
    ПараметрыРегистрации.Вставить("Информация", "Дополнительная печатная форма для договора");
    
    // Создаем таблицу команд
    ТаблицаКоманд = ПолучитьТаблицуКоманд();
    
    // Добавляем команду в таблицу
    НоваяКоманда = ТаблицаКоманд.Добавить();
    НоваяКоманда.Представление = "Печать договора с клиентом";
    НоваяКоманда.Идентификатор = "ДоговорСКлиентом"; // Имя команды для обработки в Печать()
    НоваяКоманда.Использование = "ВызовСерверногоМетода"; // Или ВызовКлиентскогоМетода
    НоваяКоманда.ПоказыватьОповещение = Истина;
    НоваяКоманда.Модификатор = "ПечатьMXL"; 
    
    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
    
    Возврат ПараметрыРегистрации;
    
КонецФункции

Функция ПолучитьТаблицуКоманд()
    Команды = Новый ТаблицаЗначений;
    Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
    Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
    Возврат Команды;
КонецФункции

Важный нюанс: Обратите внимание на поле Модификатор. Для стандартного вывода в табличный документ (MXL) значение "ПечатьMXL" является общепринятым, однако в некоторых кастомных конфигурациях (например, "1С:Фитнес-клуб") подсистема печати может ожидать пустую строку или специфический идентификатор.

Шаг 2. Настройка определяемых типов в Конфигураторе

Если при попытке регистрации ВПФ в справочнике «Дополнительные отчеты и обработки» во вкладке «Размещение» вы не видите своего документа, значит, он не включен в соответствующие метаданные системы. БСП использует определяемые типы для фильтрации объектов, которые могут иметь дополнительные команды.

Рассмотрим, какие определяемые типы необходимо проверить в Конфигураторе:

  1. ОбъектСДополнительнымиКомандами — это ключевой тип. Добавьте ваш документ (например, ДокументСсылка.ЧленствоПакетУслуг) в состав этого типа. Это позволит системе «увидеть» документ при выборе мест размещения.
  2. ОбъектСПечатнымиФормами — необходим для включения документа в общую экосистему печати БСП.
  3. ВладелецДополнительныхОтчетовИОбработок — проверьте этот тип, если документ не отображается в общих списках настроек.

Без включения объекта в ОбъектСДополнительнымиКомандами никакие манипуляции с программным кодом внутри внешней обработки не помогут — документ просто не появится в списке выбора в интерфейсе «1С:Предприятие».

Шаг 3. Подготовка модуля менеджера документа

Проанализируем ситуацию: ВПФ успешно зарегистрирована, размещение указано, но в форме документа кнопка «Печать» пуста или не содержит вашей команды. Для конфигураций на БСП необходимо, чтобы документ «заявил» о своей способности печатать. Выясним, как это реализовано технически.

В модуле менеджера вашего документа должна существовать экспортная процедура ДобавитьКомандыПечати. Даже если документ не имеет встроенных печатных форм, эта процедура должна быть объявлена, чтобы подсистема печати могла внедрить в нее внешние команды. Рассмотрим пример:


// В модуле менеджера документа
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
    
    // Здесь могут быть описаны штатные команды печати
    // Команда = КомандыПечати.Добавить();
    // ...
    
КонецПроцедуры

Также проверьте общий модуль УправлениеПечатьюПереопределяемый. В процедуре ПриОпределенииОбъектовСКомандамиПечати должен быть указан ваш документ. В современных версиях БСП это часто происходит автоматически через состав определяемых типов, но в старых редакциях или сильно кастомизированных решениях (таких как КОРП или Фитнес-клуб) это может потребоваться прописать вручную.

Шаг 4. Внедрение подключаемых команд в форму документа

Если документ самописный, то кнопка «Печать» на форме не появится «магическим» образом сама по себе. Выясним, какие вызовы должны быть в модуле формы документа. Рассмотрим стандартную схему интеграции подсистемы «Подключаемые команды».

В модуле формы документа в процедуре ПриСозданииНаСервере необходимо вызвать инициализацию команд:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Инициализация подключаемых команд (в т.ч. Печать)
    ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
    
КонецПроцедуры

А на стороне клиента должен быть обработчик, который перехватывает нажатие на динамически созданные кнопки:


&НаКлиенте
Процедура ПодключаемыеКомандыВыполнитьКоманду(Команда)
    ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
КонецПроцедуры

Без этих вызовов программный интерфейс формы просто не знает, что нужно отрисовать подменю «Печать» и заполнить его командами из справочника дополнительных обработок.

Шаг 5. Кэширование и права доступа

Проанализируем еще одну возможную причину: вы все настроили верно, но изменений нет. В 1С активно используется кэширование метаданных и настроек БСП. Посмотрим, что можно предпринять:

Таким образом, решение проблемы всегда комплексно: Регистрация (код ВПФ) + Метаданные (определяемые типы) + Модуль менеджера (интерфейс печати) + Модуль формы (отрисовка меню). Пройдя по этому чек-листу, вы гарантированно добьетесь появления вашей внешней печатной формы в нужном месте интерфейса.

← На главную