Как вывести внешнюю печатную форму в общий список меню Печать

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

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

Разбор механизма регистрации внешней печатной формы

Основным «паспортом» любой внешней обработки в 1С является функция СведенияОВнешнейОбработке, расположенная в модуле объекта. Именно она сообщает системе, к каким документам прикрепляется форма и как она должна отображаться. Проанализируем стандартную структуру этой функции на примере, который часто используется в конфигурациях уровня «Управление торговлей» или «CRM».


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

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

Рассмотрим подробнее ключевые поля. Поле Вид со значением ПечатнаяФорма указывает системе, что данная обработка должна попасть в подсистему печати. Поле Назначение определяет список документов. Но самое интересное происходит в колонке Модификатор. В современных версиях БСП использование значения ПечатьMXL помогает системе понять, что это стандартный табличный документ, который можно выводить в общем списке.

Почему форма всё равно попадает в Дополнительные печатные формы?

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

Чтобы обойти это ограничение, проанализируем настройки в пользовательском режиме:

  1. Перейдите в раздел Администрирование — Печатные формы, отчеты и обработки.
  2. Откройте список Дополнительные отчеты и обработки.
  3. Найдите вашу печатную форму и откройте её карточку.
  4. Обратите внимание на настройки размещения. В некоторых версиях программ есть флажки В списках и В формах объектов. Однако, просто установка этих флажков не всегда выносит кнопку из подменю.

Использование механизма Заменяемые печатные формы

Если вам нужно, чтобы внешняя форма была на виду, можно воспользоваться штатной возможностью замены. Рассмотрим этот вариант подробнее. В справочнике Дополнительные отчеты и обработки для печатных форм предусмотрена колонка (или отдельная таблица в зависимости от версии), которая называется Заменяемые печатные формы.

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

Программный метод через Расширение конфигурации

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

В большинстве современных конфигураций список команд печати формируется в модуле менеджера документа в процедуре ДобавитьКомандыПечати(КомандыПечати). Мы можем перехватить эту процедуру в расширении.

Посмотрим на пример кода в расширении для модуля менеджера документа:


&После("ДобавитьКомандыПечати")
Процедура Расш1_ДобавитьКомандыПечати(КомандыПечати)
    // Добавляем свою команду программно
    КомандаПечати = КомандыПечати.Добавить();
    КомандаПечати.Менеджер = "ОбщийМодуль.УправлениеПечатью"; // Или ссылка на вашу обработку
    КомандаПечати.Идентификатор = "МояВнешняяФорма";
    КомандаПечати.Представление = НСтр("ru = 'Моя супер-форма'");
    КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
    КомандаПечати.Порядок = 1; // Указываем приоритет в списке
КонецПроцедуры

Этот метод гарантированно выведет кнопку в корень меню Печать, так как для системы эта команда станет частью «родного» списка документа. При этом саму логику печати вы можете по-прежнему оставить во внешней обработке, вызывая её метод из расширения.

Очистка кэша настроек печати

Иногда после внесения изменений в код СведенияОВнешнейОбработке или перезагрузки обработки в справочник, изменения не видны. Проанализируем причину: 1С сохраняет пользовательские настройки видимости кнопок в регистре сведений Настройки печати объектов.

Чтобы сбросить эти настройки, выполните следующие шаги:

  1. Зайдите в программу под полными правами.
  2. Откройте Функции для технического специалиста (ранее — Все функции).
  3. Найдите регистр сведений НастройкиПечатиОбъектов.
  4. Удалите записи, связанные с вашим документом и пользователем. При следующем открытии формы документа система пересоберет меню заново, учитывая все актуальные изменения во внешних обработках.

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

← На главную