Отдельные печатные формы для каждой строки в документе

1. MindParadox 10.11.20 12:22 Сейчас в теме
Может кто подскажет, как решить данную ситуацию:
В документе "Заявки" есть строки, в которых указаны контрагенты и данные по заявке (сроки, наименование товара и прочее).
Задача - по каждой заявке (т.е. для каждого контрагента) нужно распечатать договор.

Создал ВПФ (по типовым настройкам). Распечатывается один договор для последней строки. Даже, если выделить любую строку, распечатывается только договор по последней строке.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
5. tolyan_ekb 105 10.11.20 13:11 Сейчас в теме
(1) в цикле идет перебор нужных строк и каждый раз выводится на печать макет. так?
6. FatPanzer 10.11.20 13:15 Сейчас в теме
(5) Подозреваю, что только формируется в цикле с созданием нового табличного документа, а выводится только один раз по окончании цикла.
2. FatPanzer 10.11.20 12:28 Сейчас в теме
3. oleg-x 27 10.11.20 13:03 Сейчас в теме
(2) видимо там должна была быть ссылка :-)
(1) Печатается ровно так, как написали код. Я подозреваю, просто затираются предыдущие данные, но без примеров вывода сказать нечего.
Fox-trot; +1 Ответить
4. FatPanzer 10.11.20 13:05 Сейчас в теме
(3)
видимо там должна была быть ссылка :-)
Нет, просто первые 20 минут пост автора состоял только из одной первой строчки... Ну я и решил помочь )))
7. MindParadox 10.11.20 13:22 Сейчас в теме
Код такой....только начал формировать печатную фрму. Остановился, т.к. формируется только одна печатная форма. Ошибка, наверно, в этой процедуре .... Взял шаблон процедуры из ранее сделанной печатной формы.

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

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

Показать
8. oleg-x 27 10.11.20 13:32 Сейчас в теме
(7) По данному коду вообще не видно, что обходите табличную часть и выводите по каждой строке. Это просто печать целого документа.
9. MindParadox 10.11.20 15:04 Сейчас в теме
(8) Я не такой опытный программист 1С. Табличную часть пока не обходил. Вывести все строки в общую печатную форму понятно. Циклом обходим строки и сразу размещаем на форме.

Но, не могу представить, как выводить в отдельную печатную форму информацию каждой строки. В моем случае (для каждой строки свой договор), получается - собрали инфу с одной строки, разместили на форме и форму как-то зафиксировали. Потом в цикле открывается новый макет для следующей строки...и как определить следующую строку...
10. oleg-x 27 10.11.20 15:09 Сейчас в теме
(9) Схематически это так:

ТабДок = Новый ТабличныйДокумент;
Для каждого стр из ДокументСсылка.ТабличнаяЧасть Цикл
    //Здесь формируешь свою печатную форму по строке
    //стр = строка таблицы
    ТабДок.Вывести(СформированнаяПечатнаяФорма); //Здесь фиксируешь печатную форму
    ТабДок.ВывестиГоризонтальныйРазделительСтраниц(); 
КонецЦикла;


То есть формируешь печатную форму обходя циклом табличную часть.
11. MindParadox 10.11.20 17:01 Сейчас в теме
(9) Наверно, в этом что-то есть... Но, к сожалению, уровень моих знаний не позволяет мне это понять...
У меня текстовый документ, формат odt. В шаблоне ВПФ есть регистрирующие процедуры/функции:
СведенияОВнешнейОбработки,
ПолучитьТаблицуКоманд,
ДобавитьКоманду.
И основные:
Печать,
ПолучитьДанныеПечати,
ПолучитьДанныеДокументов,
ПолучитьДанныеОбъекта,
ПолучитьОписаниеОбластейМакетаОфисногоДокумента.

И как предложенное (или в какой процедуре/функции) применить?
12. oleg-x 27 10.11.20 17:13 Сейчас в теме
(11) Если пытаетесь применить то что есть, возможно у Вас ничего и не получится. Я не знаю как там все формируется, но зачастую переделать что то невозможно, а надо самому писать код.
Если нет опыта кодинга, то скорее всего не получится сделать, так как в данном случае использовать готовые процедуры, которые формируют по всему документу не получится, нужно писать свои, которые будут обходить документ по строчно и выводить данные в результирующий документ.

Скорее всего для Вас есть три решения задачи:
1) Как то разобраться самому, прослушав курс лекций программирования.
2) Выложить обработку сюда и возможно, кто то поправит как надо. Шансы увеличатся, если предложить в качестве вознаграждения СМ, хотя бы парочку.
3) Обратится к специалисту, который либо сделает за Вас, либо совместно с ним (это дороже), но зато объяснит, что и как.
13. MindParadox 10.11.20 17:25 Сейчас в теме
(12) Возьметесь? Вариант 3.
14. oleg-x 27 10.11.20 18:03 Сейчас в теме
15. MindParadox 10.11.20 18:46 Сейчас в теме
(14) Не работает отправка сообщений. Написал в техподдержку. Сказали, как решат - сообщат. Сразу напишу.
Оставьте свое сообщение

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