Передача параметров/значений во внешнюю печатную форму для конфигураций на БСП (1С:Предприятие 8.2/8.3)

Передача параметров/значений во внешнюю печатную форму для конфигураций на БСП (1С:Предприятие 8.2/8.3)

В некоторых случаях перед печатью документа требуется вручную указать какие-либо значения или параметры и передать в процедуру Печать() обработки. Для конфигураций линии УТ 10.3, БП 2.0 есть возможность передачи параметров, а также возможность без особых ухищрений вызвать форму обработки перед печатью с последующим выводом результата печати в штатное окно. В конфигурациях на основе Библиотеки стандартных процедур (Управление торговлей 11, Розница 2, УНФ, Бухгалтерия предприятия 3 и прочие) предусмотрены способы вызова команды печати в виде "ОткрытиеФормы" или "ВызовКлиентскогоМетода", но в этом случае вывод сформированного табличного документа необходимо реализовывать самостоятельно.

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

В качестве примера выбрана печать простой накладной для УТ 11.0.9.15 - УТ 11.3 с возможностью печати со скидками или без них.

Создадим внешнюю обработку с основной формой "Форма" и реквизитом, например, "ПечататьСкидки", значение которого требуется передать в процедуру Печать() модуля обработки.

На вкладке "Параметры" укажем ключевые параметры "ДополнительнаяОбработкаСсылка" тип "СправочникСсылка.ДополнительныеОтчетыИОбработки", "ИдентификаторКоманды" тип "Строка", "ИмяФормы" тип "Строка", "ОбъектыНазначения" тип "Произвольный" (см. скриншот). Эти параметры передаются в обработку из конфигурации, а именно из диалога выбора внешних печатных форм, ключевыми в нашем случае они сделаны для упрощения обработки.

Далее определяем команду для печати или вывода печатной формы, навешиваем кнопку на форму.

Присваиваем команде обработчик действия ( код следует поместить в модуль формы )

&НаСервереБезКонтекста Функция ЕстьОбщийМодуль ( НазваниеМодуля ) Возврат Метаданные . ОбщиеМодули . Найти ( НазваниеМодуля ) <> Неопределено; КонецФункции

&НаСервереБезКонтекста Функция ПолучитьВерсиюБСП () Возврат СтандартныеПодсистемыСервер . ВерсияБиблиотеки (); КонецФункции

&НаКлиенте Процедура ВыполнитьОткрытиеПечатнойФормы ( Команда )

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

Отказ = Ложь; //Проверка на релиз БСП для универсальности. //Если необходимо печатать из непроведённых документов, удалите этот фрагмент ВерсияБСП = ПолучитьВерсиюБСП (); Если СравнитьВерсии ( ВерсияБСП , "2.2.3" ) >= 0 Тогда Выполнить( "СписокДокументов = ВыполняемаяКоманда.ОбъектыНазначения; |НепроведенныеДокументы = ОбщегоНазначенияВызовСервера.ПроверитьПроведенностьДокументов(СписокДокументов); |Если СтандартнаяОбработка И НепроведенныеДокументы.Количество() > 0 Тогда Отказ = Истина; КонецЕсли; |" ); Иначе Выполнить( "Если СтандартнаяОбработка И Не УправлениеПечатьюКлиент.ПроверитьДокументыПроведены(ВыполняемаяКоманда.ОбъектыНазначения) Тогда Отказ = Истина; КонецЕсли;" ); КонецЕсли;

Если Не Отказ Тогда

//Определение и заполнение штатных параметров для общей формы ПечатьДокументов ПараметрыОткрытия = Новый Структура ( "ИсточникДанных, ПараметрыИсточника" ); ПараметрыОткрытия . ИсточникДанных = ВыполняемаяКоманда . ДополнительнаяОбработкаСсылка ; ПараметрыОткрытия . ПараметрыИсточника = Новый Структура ( "ИдентификаторКоманды, ОбъектыНазначения" ); ПараметрыОткрытия . ПараметрыИсточника . ИдентификаторКоманды = ВыполняемаяКоманда . ИдентификаторКоманды ;

//Здесь передаём наши значения в модуль обработки. //Структура для передачи параметров или значений в процедуру Печать обработки //В процедуре печати она будет доступна в качестве первого элемента массива МассивОбъектовНазначения ДополнительныеПараметры = Новый Структура (); //Значения для передачи ДополнительныеПараметры . Вставить ( "ПечататьСкидки" , ЭтаФорма . ПечататьСкидки );

//Еще какие-то значения //ДополнительныеПараметры.Вставить("РеквизитФормы1", РеквизитФормы1); //ДополнительныеПараметры.Вставить("РеквизитФормы2", РеквизитФормы2);

//В массиве ОбъектыНазначения будут содержаться ссылки на вызвавший форму объект (документ, справочник) // и наши значения из реквизитов формы или обработки ОбъектыНазначения = Новый СписокЗначений ; ОбъектыНазначения . Добавить ( ДополнительныеПараметры );

//Ссылки на вызвавшие форму объекты Для каждого ОбъектНазначения Из ВыполняемаяКоманда . ОбъектыНазначения Цикл ОбъектыНазначения . Добавить ( ОбъектНазначения ); КонецЦикла; //Для каждого ОбъектНазначения Из ПараметрыОткрытия . ПараметрыИсточника . ОбъектыНазначения = ОбъектыНазначения ;

//Вывод сформированного табличного документа в штатную форму. ОткрытьФорму ( "ОбщаяФорма.ПечатьДокументов" , ПараметрыОткрытия ); КонецЕсли; ЭтаФорма . Закрыть ();

В модуле обработки создаём экспортную процедуру Печать(), с параметрами согласно стандартам БСП для печати с использованием серверной процедуры примерно такого вида

// Экспортная процедура печати, вызываемая из основной программы // // Параметры: // ВХОДЯЩИЕ: // МассивОбъектовНазначения - Массив - список объектов ссылочного типа для печати документа // Как правило, содержит один элемент с ссылкой на вызвавший форму объект (документ, справочник) // // ИСХОДЯЩИЕ: // КоллекцияПечатныхФорм - ТаблицаЗначений - таблица сформированных табличных документов. // Как правило, содержит одну строку с именем текущей печатной формы // ОбъектыПечати - СписокЗначений - список объектов печати. // ПараметрыВывода - Структура - Параметры сформированных табличных документов. Содержит поля: // ДоступнаПечатьПоКомплектно - булево - по умолчанию Ложь // ПолучательЭлектронногоПисьма // ОтправительЭлектронногоПисьма // Процедура Печать ( МассивОбъектовНазначения , КоллекцияПечатныхФорм , ОбъектыПечати , ПараметрыВывода ) Экспорт

ПараметрыВывода . ДоступнаПечатьПоКомплектно = Истина;

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

//Присваиваем значение по умолчанию нашему параметру, переданному из формы ПечататьСкидки = Истина;

//Смотрим, что содержится в первом элементе массива МассивОбъектовНазначения //Если это структура, значит есть дополнительные параметры, почти как в прежних конфигурациях Если ТипЗнч ( МассивОбъектовНазначения [ 0 ]) = Тип ( "Структура" ) Тогда ДополнительныеПараметры = МассивОбъектовНазначения [ 0 ]; Если ДополнительныеПараметры . Свойство ( "ПечататьСкидки" ) Тогда ПечататьСкидки = ДополнительныеПараметры . ПечататьСкидки ; КонецЕсли; //А теперь структуру из массива объектов можно удалить, больше она там не нужна МассивОбъектовНазначения . Удалить ( 0 ); КонецЕсли;

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

Реализация функции СформироватьПечатнуюФормуНакладная() зависит от конкретной задачи и здесь не рассматривается.

В экспортной функции СведенияОВнешнейОбработке() необходимо указать использование команды печати "ОткрытиеФормы" с модификатором "ПечатьMXL".

Подробнее смотрите статью Внешние обработки и отчеты 1С:Предприятие 8.2 или прилагаемый пример обработки.

//Определяем команды для печати формы

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

Если всё сделано правильно, после регистрации внешней печатной формы в справочнике "ДополнительныеОбработки" она будет доступна из формы списка или документа в меню "Дополнительные печатные формы". После выбора из списка ВПФ на экране появится форма обработки.

📎📎📎📎📎📎📎📎📎📎