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

1. ilnar4888 21.05.20 09:16 Сейчас в теме
Делаю внешнюю печатную форму для ЗУП 3.1.(управляемое приложение). Настройку и регистрацию печатной формы сделал на модуле объекта, всё работает исправно. Пришла задача заполнять реквизиты печатной формы до его открытия, соответственно создал форму и подтянул к нему реквизиты.
Пробовал через вызов ВызовКлиентскогоМетода, но там далее недоступен сам документ из которого буду вызывать эту внешнюю печатную форму. То есть из модуля объекта не могу открыть форму, а если переключить работу на клиент то там не вижу сам документ. Как правильно построить архитектуру.
По теме из базы знаний
Найденные решения
6. ilnar4888 21.05.20 16:18 Сейчас в теме
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. AndKovalchuk 195 21.05.20 09:29 Сейчас в теме
(1) Возможно, сделать не внешнюю печатную форму, а внешнюю команду, которая будет открывать внешнюю обработку и там уже сделать кнопку печать.
3. dhurricane 21.05.20 09:33 Сейчас в теме
(1) У меня сохранился шаблон, возможно он Вам поможет:
//////////////////////////////////////////////////////////
//                    МОДУЛЬ ОБРАБОТКИ                  //
//////////////////////////////////////////////////////////

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
	
#Область ПрограммныйИнтерфейс

Функция СведенияОВнешнейОбработке() Экспорт
	
	ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.3.1.73");
	ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
	ПараметрыРегистрации.Версия = "1.0";
	
	ПараметрыРегистрации.Назначение.Добавить("Документ.РеализацияТоваровУслуг");
	
	НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
	НоваяКоманда.Представление = НСтр("ru = 'Демо: накладная (внешняя печатная форма с диалогом)'");
	НоваяКоманда.Идентификатор = "ДемоНакладнаяСДиалогом";
	НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
	НоваяКоманда.Модификатор = "ПечатьMXL";
	
	Возврат ПараметрыРегистрации;
	
КонецФункции

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
	
	ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "ДемоНакладнаяСДиалогом");
	Если ПечатнаяФорма <> Неопределено Тогда
		ПечатнаяФорма.ТабличныйДокумент = СформироватьДемоНакладная(МассивОбъектов, ОбъектыПечати);
		ПечатнаяФорма.СинонимМакета = НСтр("ru = 'Демо: накладная'");
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

Функция СформироватьДемоНакладная(МассивОбъектов, ОбъектыПечати)
	
	ТабличныйДокумент = Новый ТабличныйДокумент;
	ТабличныйДокумент.КлючПараметровПечати = "ПараметрыПечати_РеализацияТоваровУслуг_ДемоНакладная";
	
	Макет = ПолучитьМакет("ПФ_MXL_ДемоНакладная");
	
	ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
	ОбластьШапка     = Макет.ПолучитьОбласть("Шапка");
	ОбластьСтрока    = Макет.ПолучитьОбласть("Строка");
	ОбластьПодвал    = Макет.ПолучитьОбласть("Подвал");
	
	Запрос = Новый Запрос();
	Запрос.Текст =
	"ВЫБРАТЬ
	|	ДанныеШапки.Ссылка КАК Ссылка,
	|	.....................
	|ИЗ
	|	Документ.РеализацияТоваровУслуг КАК ДанныеШапки
	|ГДЕ
	|	ДанныеШапки.Ссылка В(&МассивОбъектов)
	|
	|УПОРЯДОЧИТЬ ПО
	|	Ссылка
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	ДанныеТаблицы.Ссылка КАК Ссылка,
	|	ДанныеТаблицы.НомерСтроки КАК НомерСтроки,
	|	.....................
	|ИЗ
	|	Документ.РеализацияТоваровУслуг.Товары КАК ДанныеТаблицы
	|ГДЕ
	|	ДанныеТаблицы.Ссылка В(&МассивОбъектов)
	|ИТОГИ ПО
	|	Ссылка";
	
	Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
	
	Запрос.УстановитьПараметр("Параметр1", ЭтотОбъект.ПолеВвода1);
	Запрос.УстановитьПараметр("Параметр2", ЭтотОбъект.ПолеВвода2);
	
	РезультатыЗапроса   = Запрос.ВыполнитьПакет();	
	ДанныеПечати        = РезультатыЗапроса[0].Выбрать();
	ВыборкаПоДокументам = РезультатыЗапроса[1].Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
	
	ПервыйДокумент = Истина;
	
	Пока ДанныеПечати.Следующий() Цикл
		
		Если Не ВыборкаПоДокументам.НайтиСледующий(ДанныеПечати.Ссылка, "Ссылка") Тогда
			Продолжить;
		КонецЕсли; 
		
		Если Не ПервыйДокумент Тогда
			ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
		КонецЕсли;
		ПервыйДокумент = Ложь;
		
		НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
		
		// Заголовок.
		
		ОбластьЗаголовок.Параметры.Заполнить(ДанныеПечати);
		ТабличныйДокумент.Вывести(ОбластьЗаголовок);
		
		// Шапка таблицы.
		
		ТабличныйДокумент.Вывести(ОбластьШапка);
		
		// Строки таблицы
		
		ДетальныеЗаписи = ВыборкаПоДокументам.Выбрать();
		
		Пока ДетальныеЗаписи.Следующий() Цикл
			
			ОбластьСтрока.Параметры.Заполнить(ДетальныеЗаписи);
			
			СтрокаСПодвалом = Новый Массив;
			СтрокаСПодвалом.Добавить(ОбластьСтрока);
			СтрокаСПодвалом.Добавить(ОбластьПодвал);
			
			Если Не ОбщегоНазначения.ПроверитьВыводТабличногоДокумента(ТабличныйДокумент, СтрокаСПодвалом) Тогда
				ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
				ТабличныйДокумент.Вывести(ОбластьШапка);
			КонецЕсли; 
			
			ТабличныйДокумент.Вывести(ОбластьСтрока);
			
		КонецЦикла; 
		
		// Подвал.
		
		ОбластьПодвал.Параметры.Заполнить(ВыборкаПоДокументам);
		ТабличныйДокумент.Вывести(ОбластьПодвал);
		
		УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, 
			НомерСтрокиНачало, ОбъектыПечати, ДанныеПечати.Ссылка);
	КонецЦикла;
	
	Возврат ТабличныйДокумент;
	
КонецФункции

#КонецОбласти
	
#КонецЕсли

//////////////////////////////////////////////////////////
//                    МОДУЛЬ ФОРМЫ                      //
//////////////////////////////////////////////////////////


#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	ИдентификаторКоманды = Параметры.ИдентификаторКоманды;
	ОбъектыНазначения.ЗагрузитьЗначения(Параметры.ОбъектыНазначения);
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура КомандаОК(Команда)
	
	КоллекцияПечатныхФорм = УправлениеПечатьюКлиент.НоваяКоллекцияПечатныхФорм(ИдентификаторКоманды);
	ОбъектыПечати = Новый СписокЗначений;
	
	ПечатьНаСервере(КоллекцияПечатныхФорм, ОбъектыПечати);
	
	УправлениеПечатьюКлиент.ПечатьДокументов(КоллекцияПечатныхФорм, ОбъектыПечати, ЭтотОбъект.ВладелецФормы);
	
	Закрыть();
	
КонецПроцедуры

&НаКлиенте
Процедура КомандаОтмена(Команда)
	
	Закрыть();
	
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

&НаСервере
Процедура ПечатьНаСервере(КоллекцияПечатныхФорм, ОбъектыПечати)
	
	// Преобразование массива структур в таблицу значений.
	ПечатныеФормы = Новый ТаблицаЗначений;
	Для Каждого ИмяКолонки Из УправлениеПечатьюКлиентСервер.ИменаПолейКоллекцииПечатныхФорм() Цикл
		ПечатныеФормы.Колонки.Добавить(ИмяКолонки);
	КонецЦикла;
	Для Индекс = 0 По КоллекцияПечатныхФорм.ВГраница() Цикл
		ЗаполнитьЗначенияСвойств(ПечатныеФормы.Добавить(), КоллекцияПечатныхФорм[Индекс])
	КонецЦикла;  
	
	// Непосредственная печать.
	ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
	ОбработкаОбъект.Печать(
		ОбъектыНазначения.ВыгрузитьЗначения(), 
		ПечатныеФормы, 
		ОбъектыПечати, 
		Новый Структура);
		
	// Обратное преобразование таблицы значений в массив структур.
	Для Индекс = 0 По КоллекцияПечатныхФорм.ВГраница() Цикл
		ЗаполнитьЗначенияСвойств(КоллекцияПечатныхФорм[Индекс], ПечатныеФормы[Индекс])
	КонецЦикла; 
	
КонецПроцедуры

#КонецОбласти
Показать
Прикрепленные файлы:
ПечатнаяФормаСДиалогом.epf
ilnar4888; AndKovalchuk; +2 Ответить
4. solodovnikov.84 11 21.05.20 09:42 Сейчас в теме
(1)А не проще сделать обычную печатную форму,которая бы выводилась бы по кнопке "Печать"?
5. ilnar4888 21.05.20 09:55 Сейчас в теме
(4) Нельзя так делать, это не по фен-шую)
6. ilnar4888 21.05.20 16:18 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот