Открытие внешней обработки

1. A1nur1ch 03.10.23 16:10 Сейчас в теме
Добрый день, не ругайтесь пожалуйста, но я новичок и дали задание, чтобы изучить внешние обработки. Мне дали готовую обработку и по ней нужно сделать другую, макет я уже накидал, форму для доп информации сделал. Надо сейчас перейти в макет с переносом данных. Получается печатная форма открывается со справочника "Партнеры". В договоре уже надо описывать данные партнеров. Долго сижу уже, но информацию найти не могу. Я с примера переделал и осталось доделать только как раз таки переход в макет и получить данные со справочника, чтобы вставить их в макет. Код предоставлю далье в коментах
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. A1nur1ch 03.10.23 16:12 Сейчас в теме
Это код в форме, где пишутся доп данные



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

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

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

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

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

&НаСервере
Функция ПечатьПродолжитьНаСервере()
	
	СтркутураДанных = Новый Структура;
	СтркутураДанных.Вставить("ДатаФактическогоПодписания", ДатаФактическогоПодписания);
	СтркутураДанных.Вставить("СрокПоставки", СрокПоставки);
	СтркутураДанных.Вставить("ОтсрочкаПлатежа", ОтсрочкаПлатежа);
	СтркутураДанных.Вставить("ДействуетНаОсновании", ДействуетНаОсновании);
	СтркутураДанных.Вставить("СпособДоставки", Элементы.СпособДоставки.ВыделенныйТекст);
	
	
	Возврат СтркутураДанных; 
	
КонецФункции 

&НаКлиенте
Процедура ПодписантФИООкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	ПодписантФИО = Текст;
	МассивСтрокТекст = СтрЗаменить(Текст, "  ", " ");
	МассивСтрокТекст = СтрРазделить(Текст, " ", Ложь);
	Фам = "";
	Имя = "";
	Отч = "";
	
	Для Раз = 0 По МассивСтрокТекст.ВГраница() Цикл
	
		Если Раз = 0 Тогда
			Фам = МассивСтрокТекст.Получить(Раз);	
		ИначеЕсли Раз = 1 Тогда
			Имя = МассивСтрокТекст.Получить(Раз);	
		ИначеЕсли Раз = 2 Тогда
			Отч = МассивСтрокТекст.Получить(Раз);	
		КонецЕсли;	
	
	КонецЦикла;
	
	ПодписантПодписьТекст = "";
	
	Если НЕ ПустаяСтрока(Фам) Тогда
		ПодписантПодписьТекст = Фам;
	    Если НЕ ПустаяСтрока(Имя) Тогда
			ПодписантПодписьТекст = ПодписантПодписьТекст+ ". "+Лев(Имя, 1)+".";
		    Если НЕ ПустаяСтрока(Отч) Тогда
				ПодписантПодписьТекст = ПодписантПодписьТекст+ " "+Лев(Отч, 1)+".";
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	
	ПодписантПодпись = ПодписантПодписьТекст;
	
КонецПроцедуры
Показать
3. A1nur1ch 03.10.23 16:13 Сейчас в теме
А вот и код с обработчика


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

#Область СведенияВПФ
Функция СведенияОВнешнейОбработке() Экспорт     
	
	ПараметрыРегистрации = Новый Структура;
	МассивНазначений = Новый Массив;
	МассивНазначений.Добавить("Справочник.Партнеры"); //Указываем документ к которому делаем внешнюю печ. форму
	ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма"); //может быть - ПечатнаяФорма, ЗаполнениеОбъекта, ДополнительныйОтчет, СозданиеСвязанныхОбъектов... 
	ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
	ПараметрыРегистрации.Вставить("Наименование", "Договор-Поставки (Внешняя)"); //имя под которым обработка будет зарегестрирована в справочнике внешних обработок
	ПараметрыРегистрации.Вставить("БезопасныйРежим", ЛОЖЬ);
	ПараметрыРегистрации.Вставить("Версия", "1.0"); 
	ПараметрыРегистрации.Вставить("Информация", "Изготовлено wpg"); 
	ТаблицаКоманд = ПолучитьТаблицуКоманд();
	//ДобавитьКоманду(ТаблицаКоманд, "Счет на оплату с договором (Внешняя)", "ДоговорПоПоставкам", "ВызовСерверногоМетода", Истина, "ПечатьMXL");
	ДобавитьКоманду(ТаблицаКоманд, "Договор-Поставки (Внешняя)", "ДоговорПоПоставкам", "ОткрытиеФормы", Истина, "ПечатьMXL");
	ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);

	Возврат ПараметрыРегистрации;

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

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
	НоваяКоманда = ТаблицаКоманд.Добавить();
	НоваяКоманда.Представление = Представление; 
	НоваяКоманда.Идентификатор = Идентификатор;
	НоваяКоманда.Использование = Использование;
	НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
	НоваяКоманда.Модификатор = Модификатор;
	
КонецПроцедуры
#КонецОбласти

#Область СлужебныеПроцедурыИФункции
#Область Печать
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода, ПараметрыПечати = Неопределено) Экспорт
//Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
	
	Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ДоговорПоПоставкам") Тогда
		СтруктураТипов = ОбщегоНазначенияУТ.СоответствиеМассивовПоТипамОбъектов(МассивОбъектов);
		УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
			КоллекцияПечатныхФорм,
			"ДоговорПоПоставкам",
			НСтр("ru='Договор по поставкам'"),
			СформироватьПечатнуюФормуСчетНаОплату(СтруктураТипов, ОбъектыПечати, ПараметрыПечати));
	КонецЕсли;
	
	//ФормированиеПечатныхФорм.ЗаполнитьПараметрыОтправки(ПараметрыВывода.ПараметрыОтправки, МассивОбъектов, КоллекцияПечатныхФорм);
	
КонецПроцедуры
#КонецОбласти
#Область СчетНаОплату
Функция СформироватьПечатнуюФормуСчетНаОплату(СтруктураТипов, ОбъектыПечати, ПараметрыПечати) Экспорт
	
	ТабличныйДокумент = Новый ТабличныйДокумент;
	ТабличныйДокумент.АвтоМасштаб = Истина;
	ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ДОГОВОРАПОПЕЧАТИ";
	
	НомерТипаДокумента = 0;
	
	УстановитьПривилегированныйРежим(Истина);
	
	Для Каждого СтруктураОбъектов Из СтруктураТипов Цикл
		
		НомерТипаДокумента = НомерТипаДокумента + 1;
		Если НомерТипаДокумента > 1 Тогда
			ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
		КонецЕсли;
		
		МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(СтруктураОбъектов.Ключ);
		ДанныеДляПечати = МенеджерОбъекта.ПолучитьДанныеДляПечатнойФормыСчетаНаОплату(ПараметрыПечати, СтруктураОбъектов.Значение);
		
		ЗаполнитьТабличныйДокументДоговорПоПоставке(ТабличныйДокумент, ДанныеДляПечати, ОбъектыПечати, ПараметрыПечати);
		
	КонецЦикла;
	
	УстановитьПривилегированныйРежим(Ложь);
	
	Возврат ТабличныйДокумент;
	
КонецФункции
Процедура ЗаполнитьТабличныйДокументДоговорПоПоставке(ТабличныйДокумент, ДанныеДляПечати, ОбъектыПечати, ПараметрыПечати)
		
КонецПроцедуры
Показать
4. A1nur1ch 03.10.23 16:56 Сейчас в теме
(3)Извиняюсь, код с модуля объекта*
Оставьте свое сообщение

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