ВПФ для УПД

1. Az18011993 16.03.20 11:07 Сейчас в теме
Добрый день!
Пишу ВПФ для УПД БП 3.0
В коде не выводится вторая печатная форма, переходит на условие об ошибке, в чем может быть проблема? Первый макет выводится.
Процедура Печать(МассивОбъектов,КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
	ПараметрыПечати = Новый Структура();
	
	ЕстьСчетаФактурыВыданные = Ложь;
	ЕстьСчетаФактурыПолученные = Ложь;
	
	Для каждого Объект Из МассивОбъектов Цикл
		Если ТипЗнч(Объект) = Тип("ДокументСсылка.СчетФактураВыданный") Тогда
			ЕстьСчетаФактурыВыданные = Истина;
			Прервать;
		ИначеЕсли ТипЗнч(Объект) = Тип("ДокументСсылка.СчетФактураПолученный") Тогда
			ЕстьСчетаФактурыПолученные = Истина;
			Прервать;
		КонецЕсли;
		
	КонецЦикла;
	Если ЕстьСчетаФактурыВыданные И УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ПФ_MXL_УПД") Тогда
		
		УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ПФ_MXL_УПД", "ПФ_MXL_УПД",
			ПечатьУниверсальныхПередаточныхДокументов(МассивОбъектов, ОбъектыПечати, 
			Документы.СчетФактураВыданный.ТекстЗапросаПечатьСчетовФактур(Истина, Истина, Ложь),,, ПараметрыПечати),,
			"ПФ_MXL_УПД");
			
	КонецЕсли;

//	Если ЕстьСчетаФактурыПолученные И УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "УПДСтатус1") Тогда
//		
//		УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "УПДСтатус1", "УПД (статус 1)",
//			УчетНДС.ПечатьУниверсальныхПередаточныхДокументов(МассивОбъектов, ОбъектыПечати, 
//			Документы.СчетФактураПолученный.ТекстЗапросаПечатьСчетовФактур(Истина, Ложь),,, ПараметрыПечати),,
//			"Обработка.ПечатьУПД.ПФ_MXL_УниверсальныйПередаточныйДокумент");
//			
//	КонецЕсли;
//		
	Если ЕстьСчетаФактурыВыданные И УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ПФ_MXL_УПД981") Тогда
		
		УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ПФ_MXL_УПД981", "ПФ_MXL_УПД981",
			ПечатьУниверсальныхПередаточныхДокументов981(МассивОбъектов, ОбъектыПечати, 
			Документы.СчетФактураВыданный.ТекстЗапросаПечатьСчетовФактур(Истина, Истина, Истина),,, ПараметрыПечати),,
			"ПФ_MXL_УПД981");
			
	КонецЕсли;
//		
//	Если ЕстьСчетаФактурыПолученные И УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "УПДСтатус1_981") Тогда
//		
//		УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "УПДСтатус1_981", "УПД (статус 1)",
//			УчетНДС.ПечатьУниверсальныхПередаточныхДокументов981(МассивОбъектов, ОбъектыПечати, 
//			Документы.СчетФактураПолученный.ТекстЗапросаПечатьСчетовФактур(Истина, Истина),,, ПараметрыПечати),,
//			"Обработка.ПечатьУПД.ПФ_MXL_УниверсальныйПередаточныйДокумент981");
//			
//	КонецЕсли;
//	
	Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ПФ_MXL_УПД") Тогда
		ТекстЗапросаПечатьУниверсальныхПередаточныхДокументов = "";
		Для каждого Объект Из МассивОбъектов Цикл
			Если ТипЗнч(Объект) <> Тип("ДокументСсылка.СчетФактураВыданный")
			   И ТипЗнч(Объект) <> Тип("ДокументСсылка.СчетФактураПолученный") Тогда
				ТекстЗапросаПечатьУниверсальныхПередаточныхДокументов = 
					Документы[Объект.Метаданные().Имя].ТекстЗапросаПечатьУниверсальныхПередаточныхДокументов(Ложь);
				Прервать;
			КонецЕсли;
		КонецЦикла;
		
		Если НЕ ПустаяСтрока(ТекстЗапросаПечатьУниверсальныхПередаточныхДокументов) Тогда
			УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ПФ_MXL_УПД", "ПФ_MXL_УПД",
					ПечатьУниверсальныхПередаточныхДокументов(МассивОбъектов, ОбъектыПечати, 
					ТекстЗапросаПечатьУниверсальныхПередаточныхДокументов, Истина,, ПараметрыПечати),,
					"ПФ_MXL_УПД");
		КонецЕсли;
	КонецЕсли;

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

	
	
	ОбщегоНазначенияБП.ЗаполнитьДополнительныеПараметрыПечати(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);	
	
КонецПроцедуры

Функция ПечатьУниверсальныхПередаточныхДокументов(МассивОбъектов, ОбъектыПечати, ТекстЗапросаДокументам, ТолькоПередаточныйДокумент = Ложь, ТабДокумент = Неопределено, ПараметрыПечати) Экспорт
	
	Если ТабДокумент = Неопределено Тогда
		ТабДокумент = Новый ТабличныйДокумент;
	Иначе
		ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
	КонецЕсли;
	
	ТабДокумент.АвтоМасштаб        = Истина;
	ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
	ТабДокумент.ЭкземпляровНаСтранице = 1;
	
	ТабДокумент.КлючПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_УниверсальныйПередаточныйДокумент";
	
	УстановкаМинимальныхПолейДляПечати(ТабДокумент);
	
	Макет = ПолучитьМакет("ПФ_MXL_УПД");
		
	
	Возврат ТабличныйДокументУПД(
	Макет, МассивОбъектов, ОбъектыПечати, ТабДокумент, ТекстЗапросаДокументам, ТолькоПередаточныйДокумент, ПараметрыПечати);
	
КонецФункции
Функция ПечатьУниверсальныхПередаточныхДокументов981(МассивОбъектов, ОбъектыПечати, ТекстЗапросаДокументам, ТолькоПередаточныйДокумент = Ложь, ТабДокумент = Неопределено, ПараметрыПечати) Экспорт
	
	Если ТабДокумент = Неопределено Тогда
		ТабДокумент = Новый ТабличныйДокумент;
	Иначе
		ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
	КонецЕсли;
	
	ТабДокумент.АвтоМасштаб        = Истина;
	ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
	ТабДокумент.ЭкземпляровНаСтранице = 1;
	
	ТабДокумент.КлючПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_УниверсальныйПередаточныйДокумент_981";
	
	УстановкаМинимальныхПолейДляПечати(ТабДокумент);
	
	Макет = ПолучитьМакет("ПФ_MXL_УПД981");

	
	Возврат ТабличныйДокументУПД(
		Макет, МассивОбъектов, ОбъектыПечати, ТабДокумент, ТекстЗапросаДокументам, ТолькоПередаточныйДокумент, ПараметрыПечати);
		
КонецФункции

Функция ТабличныйДокументУПД(Макет, МассивОбъектов, ОбъектыПечати, ТабДокумент, ТекстЗапросаДокументам, ТолькоПередаточныйДокумент, ПараметрыПечати)
	
	// Исключим из массива документы на чтение которых у пользователя нет прав
	УправлениеДоступомБП.УдалитьНедоступныеЭлементыИзМассива(МассивОбъектов);
	
	УстановитьПривилегированныйРежим(Истина);
	
	Если МассивОбъектов.Количество() = 0 Тогда
		ДанныеУниверсальныхПередаточныхДокументов = НовыйТаблицаСчетовФактур();
	ИначеЕсли ТолькоПередаточныйДокумент Тогда
		ДанныеУниверсальныхПередаточныхДокументов = ПолучитьДанныеДляПечатиУниверсальногоПередаточногоДокумента(
		МассивОбъектов, ТекстЗапросаДокументам);
	Иначе
		ДанныеУниверсальныхПередаточныхДокументов = ПолучитьДанныеДляПечатиСчетаФактуры1137(
		МассивОбъектов, ТекстЗапросаДокументам, Истина);
	КонецЕсли;
	
	ПервыйДокумент = Истина;
	
	СтрокиПечати = Новый СписокЗначений;
	
	Для Каждого ВыборкаУПД ИЗ ДанныеУниверсальныхПередаточныхДокументов Цикл
		
		ОбъектыПечати.Добавить(ВыборкаУПД.Ссылка);
		
		Если ЗначениеЗаполнено(ВыборкаУПД.Дата)
			И ВыборкаУПД.Дата < '20130101'
			И ТипЗнч(ВыборкаУПД.СчетФактура) <> Тип("ДокументСсылка.СчетФактураПолученный") Тогда
			Продолжить;
		КонецЕсли;
		
		ТаблицаДокумента = ВыборкаУПД.ТаблицаДокумента;
		Если ТаблицаДокумента = Неопределено Тогда
			Продолжить;
		КонецЕсли;
		
		Если НЕ ПервыйДокумент Тогда
			ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
		КонецЕсли;
		ПервыйДокумент = Ложь;
		
		// Запомним номер строки, с которой начали выводить текущий документ.
		НомерСтрокиНачало = ТабДокумент.ВысотаТаблицы + 1;
		
		ВывестиСчетФактуруВТабличныйДокумент(ТабДокумент, Макет, ВыборкаУПД, Истина);
		
		// Вывод подвала накладной
		ОбластьМакета = Макет.ПолучитьОбласть("ПодвалНакладной");
		ОбластьМакета.Параметры.Заполнить(ВыборкаУПД.ДанныеШапки);
		ТабДокумент.Вывести(ОбластьМакета);
		
		// В табличном документе зададим имя области, в которую был выведен объект.
		// Нужно для возможности печати покомплектно.
		УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабДокумент,
		НомерСтрокиНачало,СтрокиПечати, СтрШаблон("%1#%2", ВыборкаУПД.Ссылка.УникальныйИдентификатор(), Строка(ВыборкаУПД.НомерСтроки)));
		
		ЭлементСписка               = ОбъектыПечати.НайтиПоЗначению(ВыборкаУПД.Ссылка);
		ЭлементСписка.Представление = СтрокиПечати[СтрокиПечати.Количество()-1].Представление;
		
		УправлениеПечатьюБП.ДополнитьДокументПодписьюИПечатью(ТабДокумент, ВыборкаУПД, ОбъектыПечати, ПараметрыПечати);
		
	КонецЦикла;
	
	Если МассивОбъектов.Количество() = 1 И ПервыйДокумент Тогда
		СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
		НСтр("ru='Для %1 универсальный передаточный документ не применяется'"), Строка(МассивОбъектов[0]));
		ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке);
	КонецЕсли;
	
	Возврат ТабДокумент;
	
КонецФункции

Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. mushdaj 16.03.20 11:13 Сейчас в теме
это условие убрать
УправлениеПечатью.НужноПечататьМакет


эту процедуру не использовать, сделать свою:
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию
3. Az18011993 16.03.20 11:31 Сейчас в теме
(2)А почему типовую нельзя использовать?
5. mushdaj 16.03.20 11:40 Сейчас в теме
(3) потому что она выводит только макеты которые передали в сведениях об обработке

ОписаниеПечатнойФормы = КоллекцияПечатныхФорм.Найти(ВРег(ИмяМакета), "ИмяВРЕГ");
6. Az18011993 16.03.20 11:52 Сейчас в теме
(5)Я никогда не писал функцию для вывода макета в таб документ,обычно использовал типовую. Не можете показать пример?
4. Az18011993 16.03.20 11:37 Сейчас в теме
(2)Ведь первый макет же у меня выводится)Я просто не могу понять почему у меня не выводится второй,который я объявляю в функции печать УПД981?
7. Az18011993 16.03.20 12:11 Сейчас в теме
Можно же как то добавить два и более макета?
8. mushdaj 16.03.20 13:05 Сейчас в теме
(7) попробуйте вот такую функцию использовать, правда не во всех случаях она сгодится

Процедура ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, ИмяМакета, СинонимМакета, ТабличныйДокумент,
	Картинка = Неопределено, ПолныйПутьКМакету = "", ИмяФайлаПечатнойФормы = Неопределено) Экспорт
	
	ОписаниеПечатнойФормы = КоллекцияПечатныхФорм[0]; //всегда пишем в первую форму т.к. прописан автоматический выбор формы
	Если ОписаниеПечатнойФормы <> Неопределено Тогда
		ОписаниеПечатнойФормы.ТабличныйДокумент = ТабличныйДокумент;
		ОписаниеПечатнойФормы.СинонимМакета = СинонимМакета;
		ОписаниеПечатнойФормы.Картинка = Картинка;
		ОписаниеПечатнойФормы.ПолныйПутьКМакету = ПолныйПутьКМакету;
		ОписаниеПечатнойФормы.ИмяФайлаПечатнойФормы = ИмяФайлаПечатнойФормы;
	КонецЕсли;
	
КонецПроцедуры
Показать
9. progr-2008 118 15.01.21 22:17 Сейчас в теме
Конструктором ВПФ лучше.
Оставьте свое сообщение

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