Отдельные печатные формы для каждой строки в документе
Может кто подскажет, как решить данную ситуацию:
В документе "Заявки" есть строки, в которых указаны контрагенты и данные по заявке (сроки, наименование товара и прочее).
Задача - по каждой заявке (т.е. для каждого контрагента) нужно распечатать договор.
Создал ВПФ (по типовым настройкам). Распечатывается один договор для последней строки. Даже, если выделить любую строку, распечатывается только договор по последней строке.
В документе "Заявки" есть строки, в которых указаны контрагенты и данные по заявке (сроки, наименование товара и прочее).
Задача - по каждой заявке (т.е. для каждого контрагента) нужно распечатать договор.
Создал ВПФ (по типовым настройкам). Распечатывается один договор для последней строки. Даже, если выделить любую строку, распечатывается только договор по последней строке.
По теме из базы знаний
- Внешняя печатная форма Счета и Акта для документа "Оказание услуг" БП 3.0
- Дополнительное соглашение: Приказ об индексации заработка к документу Измениение плановых начислений для ЗУП 3.0
- Полезный код для программистов 1С (часть 3). Подготовка печатных форм + подсистема Управление печатью (БСП)
- Конструктор печатных форм (PrintWizard). Часть 1: Печатные формы. А что, собственно, не так?
- Infostart PrintWizard - создание и редактирование печатных форм в 1С 8.3
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Код такой....только начал формировать печатную фрму. Остановился, т.к. формируется только одна печатная форма. Ошибка, наверно, в этой процедуре .... Взял шаблон процедуры из ранее сделанной печатной формы.
Процедура Печать(ИдентификаторКоманды, ОбъектыНазначения) экспорт
ПараметрКоманды = ОбъектыНазначения;
// Используется для получения макета.
ИмяМакета = ИдентификаторКоманды;
ТипМакета = "ODT"; //Варианты: "DOC", "ODT"
// Получаем всю необходимую информацию из модуля менеджера
// объекта: данные объекта, описание секций, данные макетов.
МакетИДанныеОбъекта = ЭтаФорма.ПолучитьДанныеПечати(ПараметрКоманды,ИмяМакета,ТипМакета);
Для Каждого ДокументСсылка Из ОбъектыНазначения Цикл
ТипМакета = МакетИДанныеОбъекта.Макеты.ТипыМакетов[ИмяМакета];
ДвоичныеДанныеМакетов = МакетИДанныеОбъекта.Макеты.ДвоичныеДанныеМакетов;
Области = МакетИДанныеОбъекта.Макеты.ОписаниеОбластей;
ДанныеОбъекта = МакетИДанныеОбъекта.Данные[ДокументСсылка][ИмяМакета];
Макет = УправлениеПечатьюКлиент.ИнициализироватьМакетОфисногоДокумента(ДвоичныеДанныеМакетов[ИмяМакета], ТипМакета, ИмяМакета);
Если Макет = Неопределено Тогда
Продолжить;
КонецЕсли;
ЗакрытьОкноПечатнойФормы = Ложь;
Попытка
ПечатнаяФорма = УправлениеПечатьюКлиент.ИнициализироватьПечатнуюФорму(ТипМакета, Макет.НастройкиСтраницыМакета, Макет);
Если ПечатнаяФорма = Неопределено Тогда
УправлениеПечатьюКлиент.ОчиститьСсылки(Макет);
Продолжить;
КонецЕсли;
// Здесь должен быть код получения областей из макета,
// их вывода и заполнения в печатной форме.
//// Вывод колонтитулов документа.
//Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["ВерхнийКолонтитул"]);
//УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта);
//Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["НижнийКолонтитул"]);
//УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта);
//Вывод верхней части документа - обычная область с параметрами.
Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["Заголовок"]);
УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь);
//Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["Текст"]);
//УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь);
//Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["СтрокаТаб"]);
//УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь);
//// Вывод коллекции данных из информационной базы в виде таблицы.
//Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["ШапкаТаблицыТоварыТекст"]);
//УправлениеПечатьюКлиент.ПрисоединитьОбласть(ПечатнаяФорма, Область, Ложь);
//Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["ШапкаТаблицыТовары"]);
//УправлениеПечатьюКлиент.ПрисоединитьОбласть(ПечатнаяФорма, Область, Ложь);
//Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["СтрокаТаблицаТовары"]);
//УправлениеПечатьюКлиент.ПрисоединитьИЗаполнитьКоллекцию(ПечатнаяФорма, Область, ДанныеОбъекта.Товары);
//Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["ПодвалТаблицаТовары"]);
//УправлениеПечатьюКлиент.ПрисоединитьОбласть(ПечатнаяФорма, Область, Ложь);
//
//
//// Вывод коллекции данных из информационной базы в виде нумерованного списка
//Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["СтрокаТаб"]);
//УправлениеПечатьюКлиент.ПрисоединитьОбласть(ПечатнаяФорма, Область, Ложь);
//Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["ТоварыНоменклатура"]);
//УправлениеПечатьюКлиент.ПрисоединитьИЗаполнитьКоллекцию(ПечатнаяФорма, Область, ДанныеОбъекта.Товары);
//
//// Вывод коллекции данных из информационной базы в виде списка
//Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["ШапкаТоварыВсего"]);
//УправлениеПечатьюКлиент.ПрисоединитьОбласть(ПечатнаяФорма, Область, Ложь);
//Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["ТоварыВсего"]);
//УправлениеПечатьюКлиент.ПрисоединитьИЗаполнитьКоллекцию(ПечатнаяФорма, Область, ДанныеОбъекта.Товары); /////1
//Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["ТоварыСписок"]);
//УправлениеПечатьюКлиент.ПрисоединитьИЗаполнитьКоллекцию(ПечатнаяФорма, Область,ДанныеОбъекта.Товары);
// Вывод нижней части документа - обычная область с параметрами.
//Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Области[ИмяМакета]["Подвал"]);
//УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь);
УправлениеПечатьюКлиент.ПоказатьДокумент(ПечатнаяФорма);
Исключение
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
УправлениеПечатьюКлиент.ОчиститьСсылки(ПечатнаяФорма);
УправлениеПечатьюКлиент.ОчиститьСсылки(Макет);
Возврат;
КонецПопытки;
УправлениеПечатьюКлиент.ОчиститьСсылки(ПечатнаяФорма, Ложь);
УправлениеПечатьюКлиент.ОчиститьСсылки(Макет);
КонецЦикла;
КонецПроцедуры
Показать
(8) Я не такой опытный программист 1С. Табличную часть пока не обходил. Вывести все строки в общую печатную форму понятно. Циклом обходим строки и сразу размещаем на форме.
Но, не могу представить, как выводить в отдельную печатную форму информацию каждой строки. В моем случае (для каждой строки свой договор), получается - собрали инфу с одной строки, разместили на форме и форму как-то зафиксировали. Потом в цикле открывается новый макет для следующей строки...и как определить следующую строку...
Но, не могу представить, как выводить в отдельную печатную форму информацию каждой строки. В моем случае (для каждой строки свой договор), получается - собрали инфу с одной строки, разместили на форме и форму как-то зафиксировали. Потом в цикле открывается новый макет для следующей строки...и как определить следующую строку...
(9) Схематически это так:
То есть формируешь печатную форму обходя циклом табличную часть.
ТабДок = Новый ТабличныйДокумент;
Для каждого стр из ДокументСсылка.ТабличнаяЧасть Цикл
//Здесь формируешь свою печатную форму по строке
//стр = строка таблицы
ТабДок.Вывести(СформированнаяПечатнаяФорма); //Здесь фиксируешь печатную форму
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
КонецЦикла;
То есть формируешь печатную форму обходя циклом табличную часть.
(9) Наверно, в этом что-то есть... Но, к сожалению, уровень моих знаний не позволяет мне это понять...
У меня текстовый документ, формат odt. В шаблоне ВПФ есть регистрирующие процедуры/функции:
СведенияОВнешнейОбработки,
ПолучитьТаблицуКоманд,
ДобавитьКоманду.
И основные:
Печать,
ПолучитьДанныеПечати,
ПолучитьДанныеДокументов,
ПолучитьДанныеОбъекта,
ПолучитьОписаниеОбластейМакетаОфисногоДокумента.
И как предложенное (или в какой процедуре/функции) применить?
У меня текстовый документ, формат odt. В шаблоне ВПФ есть регистрирующие процедуры/функции:
СведенияОВнешнейОбработки,
ПолучитьТаблицуКоманд,
ДобавитьКоманду.
И основные:
Печать,
ПолучитьДанныеПечати,
ПолучитьДанныеДокументов,
ПолучитьДанныеОбъекта,
ПолучитьОписаниеОбластейМакетаОфисногоДокумента.
И как предложенное (или в какой процедуре/функции) применить?
(11) Если пытаетесь применить то что есть, возможно у Вас ничего и не получится. Я не знаю как там все формируется, но зачастую переделать что то невозможно, а надо самому писать код.
Если нет опыта кодинга, то скорее всего не получится сделать, так как в данном случае использовать готовые процедуры, которые формируют по всему документу не получится, нужно писать свои, которые будут обходить документ по строчно и выводить данные в результирующий документ.
Скорее всего для Вас есть три решения задачи:
1) Как то разобраться самому, прослушав курс лекций программирования.
2) Выложить обработку сюда и возможно, кто то поправит как надо. Шансы увеличатся, если предложить в качестве вознаграждения СМ, хотя бы парочку.
3) Обратится к специалисту, который либо сделает за Вас, либо совместно с ним (это дороже), но зато объяснит, что и как.
Если нет опыта кодинга, то скорее всего не получится сделать, так как в данном случае использовать готовые процедуры, которые формируют по всему документу не получится, нужно писать свои, которые будут обходить документ по строчно и выводить данные в результирующий документ.
Скорее всего для Вас есть три решения задачи:
1) Как то разобраться самому, прослушав курс лекций программирования.
2) Выложить обработку сюда и возможно, кто то поправит как надо. Шансы увеличатся, если предложить в качестве вознаграждения СМ, хотя бы парочку.
3) Обратится к специалисту, который либо сделает за Вас, либо совместно с ним (это дороже), но зато объяснит, что и как.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот