Задача перенести типовую печатную форму "Акт сверки взаимных расчетов " во внешние печатные формы. В последних релизах Комплексной автоматизации 2 перед печатью "Акт сверки взаимных расчетов" выпадает форма с настройками печати.
Для того чтобы открывалась форма нужно в процедуру СведенияОВнешнейОбработке() в модуле обработки добавить команду.
Использование у команды можно назначить трех типов:
- ВызовСерверногоМетода (Вызывается процедура Печать() в модуле обработки)
- ВызовКлиентскогоМетода (Вызывается процедура Печать() в основной форме обработки)
- ОткрытиеФормы (Открывается основная форма обработки и в ее параметр передается "ОбъектыНазначения")
Для выполнения задачи можно воспользоваться типом ВызовКлиентскогоМетода или ОткрытиеФормы. Я воспользуюсь ВызовКлиентскогоМетода, по мне так проще отлаживать обработку.
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");
МассивНазначений = Новый Массив;
МассивНазначений.Добавить("Документ.СверкаВзаиморасчетов");
ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
ПараметрыРегистрации.Вставить("Наименование", "Акт сверки взаиморасчетов (вн)");
ПараметрыРегистрации.Вставить("Версия", "1.0");
ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
ПараметрыРегистрации.Вставить("Информация", "Акт сверки взаиморасчетов (вн)");
//Команды
ТаблицаКоманд = Новый ТаблицаЗначений;
ТаблицаКоманд.Колонки.Добавить("Представление");
ТаблицаКоманд.Колонки.Добавить("Идентификатор");
ТаблицаКоманд.Колонки.Добавить("Использование");
ТаблицаКоманд.Колонки.Добавить("ПоказыватьОповещение");
ТаблицаКоманд.Колонки.Добавить("Модификатор");
НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = "Акт сверки взаиморасчетов (вн)";
НоваяКоманда.Идентификатор = "Акт сверки взаиморасчетов (вн)";
НоваяКоманда.Идентификатор = "вн_АктСверкиВзаиморасчетов";
НоваяКоманда.Использование = "ВызовКлиентскогоМетода";
НоваяКоманда.ПоказыватьОповещение = Истина;
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
Возврат ПараметрыРегистрации;
КонецФункции
В обработку добавлю две формы. Форму с настройкой и пустую форму.
На пустую форму добавлю поле выбора документа "СверкаВзаиморасчетов" и кнопку для тестирования печати без добавления формы в дополнительные печатные формы.
Эта форма при обычной печати не будет открываться. Она будет открываться, когда обработку открываю на прямую файл->открыть.
В модуле две процедуры Печать(), которая как раз и будет вызваться механизмом БСП. И процедура кнопки "Тест".
Добавляю объекты печати в параметры и открываю форму с настройками.
&НаКлиенте
Процедура Печать(ИдентификаторКоманды, МассивОбъектов) Экспорт
Праметры1 = Новый Структура;
Праметры1.Вставить("ИдентификаторКоманды", ИдентификаторКоманды);
Праметры1.Вставить("МассивОбъектов", МассивОбъектов);
ОткрытьФорму("ВнешняяОбработка.АктСверкиВзаиморасчетов_вн.Форма.НастройкаПечати",Праметры1);
КонецПроцедуры
&НаКлиенте
Процедура тест(Команда)
Праметры1 = Новый Структура;
Праметры1.Вставить("ИдентификаторКоманды", "");
МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить(акт);
Праметры1.Вставить("МассивОбъектов", МассивОбъектов);
ОткрытьФорму("ВнешняяОбработка.АктСверкиВзаиморасчетов_вн.Форма.НастройкаПечати",Праметры1);
КонецПроцедуры
форму с настройками копирую из типовой конфигурации.
При создании на сервере загружаю МассивОбъектов в переменную с типом СписокЗначений.
В кнопку печать добавили вызов процедуру формы ПечатьНаКлиенте()
Вызываю процедуру ПечатьНаСервере() из которой вызываю Процедуру Печать() в модуле обработки, в которую передаю "Массив с объектами печати".
В модуль обработки переношу все, что связано с печатью "акта сверки" из модуля менеджера документа "СверкаВзаиморасчетов".
Процедура ПечатьНаСервере возвращает ТабличныйДокумент, который я вывожу в типовой форме ПечатьДокументов (механизм БСП).
&НаКлиенте
Процедура ПечатьНаКлиенте()
ТабДок = ПечатьНаСервере();
КоллекцияПечатныхФорм = УправлениеПечатьюКлиент.НоваяКоллекцияПечатныхФорм("ПФ_MXL_АктСверкиВзаимныхРасчетов");
КоллекцияПечатныхФорм[0].ТабличныйДокумент = ТабДок;
КоллекцияПечатныхФорм[0].Экземпляров=1;
КоллекцияПечатныхФорм[0].СинонимМакета = "Акт сверки взаиморасчетов";
УправлениеПечатьюКлиент.ПечатьДокументов(КоллекцияПечатныхФорм,Неопределено,ЭтаФорма);
КонецПроцедуры
&НаСервере
Функция ПечатьНаСервере()
ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
Возврат ОбработкаОбъект.Печать(СписокОб.ВыгрузитьЗначения(), Новый СписокЗначений);
КонецФункции
Тестировал:
1С:Комплексная автоматизация 2 (2.4.9.98)
Платформа 1С:Предприятие 8.3 (8.3.15.1747)