При разработке внешних печатных форм (ВПФ) для конфигураций на базе Библиотеки стандартных подсистем (БСП), таких как 1С:Бухгалтерия предприятия 3.0, часто возникает ситуация: кнопка печати успешно появляется внутри документа, но отсутствует в форме списка. Это ограничивает возможности пользователя, лишая его функции групповой печати (печати "пачкой"). В данной статье мы подробно разберем, как обеспечить появление команды в списке и как правильно обработать массив выбранных документов.
Для начала проанализируем, как БСП управляет выводом кнопок. В современных типовых конфигурациях меню "Печать" формируется динамически при создании формы. Программа обращается к справочнику Дополнительные отчеты и обработки, ищет подходящие формы для текущего типа объекта и выводит их. Если форма списка является типовой, в ней уже прописаны все необходимые механизмы взаимодействия с БСП.
Рассмотрим, какие условия должны быть соблюдены в модуле объекта вашей внешней печатной формы, чтобы она стала доступна в списке.
Первым делом проверим функцию СведенияОВнешнейОбработке. Именно здесь мы указываем платформе, для каких объектов предназначена печатная форма и как её следует вызывать. Выясним, на что нужно обратить внимание:
Документ.РеализацияТоваровУслуг).ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода() или ТипКомандыВызовКлиентскогоМетода().Посмотрим на пример заполнения таблицы команд:
Команда = ТаблицаКоманд.Добавить();
Команда.Представление = "Моя печатная форма (групповая)";
Команда.Идентификатор = "ОсновныеПараметрыПечати";
Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
Команда.ПоказыватьОповещение = Истина;
Команда.Модификатор = "ПечатьMXL"; // Важно для корректной интеграции
Если мы хотим, чтобы пользователь мог выделить несколько строк в списке и распечатать их одним нажатием, процедура Печать в модуле объекта должна быть готова к приему массива ссылок. Рассмотрим типичную структуру такой процедуры:
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
// Проверяем наличие нашей команды в коллекции
ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "ОсновныеПараметрыПечати");
Если ПечатнаяФорма <> Неопределено Тогда
// МассивОбъектов содержит ссылки на все выделенные документы в списке
ПечатнаяФорма.ТабличныйДокумент = СформироватьПечатнуюФорму(МассивОбъектов, ОбъектыПечати);
ПечатнаяФорма.СинонимМакета = "Моя печатная форма";
КонецЕсли;
КонецПроцедуры
Внутри функции СформироватьПечатнуюФорму крайне важно обходить МассивОбъектов в цикле. Если код написан в расчете только на один документ, групповая печать работать не будет или выдаст ошибку при попытке распечатать более одного объекта.
Если ваша конфигурация типовая на 100%, кнопки в списках должны появляться автоматически. Однако, если форма списка была изменена или вы создаете свою форму, проанализируем наличие в ней следующих вызовов БСП:
ПриСозданииНаСервере должен присутствовать вызов: ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);ПриЧтенииНаСервере (или аналогичных): ПодключаемыеКоманды.ОбновитьКоманды(ЭтотОбъект);ПодключаемыеКоманды_Печать).Как правило, в типовых решениях (БП 3.0, УТ 11) эти вызовы уже есть, и проблема кроется в другом.
Одной из самых частых причин отсутствия кнопки в списке является механизм кэширования команд в БСП. Разберем по шагам, что нужно сделать после внесения изменений в код ВПФ:
.epf.Важный нюанс: Платформа 1С часто кэширует состав команд открытых форм. Как отметил автор исходной темы, иногда достаточно просто закрыть и заново открыть форму списка документов, чтобы изменения вступили в силу. Если это не помогло, попробуйте полностью перезапустить сеанс пользователя.
Если программных ошибок нет, но кнопка всё равно отсутствует, выясним причину в настройках интерфейса. В управляемых формах пользователь может самостоятельно скрывать пункты меню. Проверьте:
Используя данный системный подход, вы сможете гарантированно вывести любую внешнюю печатную форму в список документов, обеспечив пользователям удобство массовой обработки данных.