Как внедрить дополнительную форму выбора перед формированием печатной формы во внешней обработке?

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

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

Архитектурный подход к решению задачи

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

Шаг 1: Подготовка процесса формирования печатной формы

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

Разберем пример реализации вызова формы на клиенте:


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

Шаг 2: Обработка возврата из формы (ПечатьЗавершение)

После закрытия формы выбора управление переходит в процедуру ПечатьЗавершение. Здесь мы анализируем переданный результат. Если пользователь нажал кнопку «Печать», мы должны сформировать структуру параметров для стандартной ОбщаяФорма.ПечатьДокументов.

Рассмотрим логику обработки результата:


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

Почему возникают ошибки типа «Печатная форма недоступна»?

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

Рекомендуем придерживаться следующих правил:

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

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

← На главную