Задача - вывести печатную форму в комплект печатных документов. Все происходило на базе Управление торговлей, редакция 11 (11.3.4.67) . Печатная форма для документа "Реализация товаров и услуг" созданная на основании типовой, добавлен всего один реквизит. Печатная форма называется "Расходная накладная с доставкой"
По такому алгоритму она формировалась
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "РасходнаяНакладнаяСДоставкой") Тогда // Формируем табличный документ и добавляем его в коллекцию печатных форм. УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "РасходнаяНакладнаяСДоставкой", "Расходная накладная с адресом доставки", СформироватьПечатнуюФорму(МассивОбъектов[0], ОбъектыПечати), , "Расходная накладная с адресом доставки"); КонецЕсли; ОбщегоНазначенияБП.ЗаполнитьДополнительныеПараметрыПечати(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода); //УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "РасходнаяНакладнаяСДоставкой", "Расходная накладная с адресом доставки", СформироватьПечатнуюФорму(МассивОбъектов[0], ОбъектыПечати)); КонецПроцедуры // Печать() Функция СформироватьПечатнуюФорму(СсылкаНаДокумент, ОбъектыПечати) ТабличныйДокумент = Новый ТабличныйДокумент; ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_РасходнаяНакладнаяСДоставкой"; КолонкаКодов = ФормированиеПечатныхФорм.ИмяДополнительнойКолонки(); ВыводитьКоды = ЗначениеЗаполнено(КолонкаКодов); ИспользоватьУпаковки = ПолучитьФункциональнуюОпцию("ИспользоватьУпаковкиНоменклатуры"); МакетОбработки = ПолучитьМакет("РасходнаяНакладнаяСДоставкой"); ШиринаОтсутствующихОбластей = 0; Если НЕ ВыводитьКоды Тогда ШиринаОтсутствующихОбластей = МакетОбработки.Область("КолонкаКодов").ШиринаКолонки; КонецЕсли; Если Не ИспользоватьУпаковки Тогда ШиринаОтсутствующихОбластей = ШиринаОтсутствующихОбластей + МакетОбработки.Область("КолонкаКоличестваУпаковок").ШиринаКолонки; ШиринаОтсутствующихОбластей = ШиринаОтсутствующихОбластей + МакетОбработки.Область("КолонкаПредставленияУпаковок").ШиринаКолонки; КонецЕсли; // Раздвинуть колонку "КолонкаТоваров" на ширину отсутствующих областей МакетОбработки.Область("КолонкаТоваров").ШиринаКолонки = МакетОбработки.Область("КолонкаТоваров").ШиринаКолонки + ШиринаОтсутствующихОбластей; РеквизитыДокумента = Новый Структура("Номер, Дата, Префикс, Представление"); ЗаполнитьЗначенияСвойств(РеквизитыДокумента, СсылкаНаДокумент); //заполняем шапку Область = МакетОбработки.ПолучитьОбласть("Заголовок"); СтруктураДанныхЗаголовок = Новый Структура; СтруктураДанныхЗаголовок.Вставить("ТекстЗаголовка", НСтр("ru='Расходная накладная'")); ШтрихкодированиеПечатныхФорм.ВывестиШтрихкодВТабличныйДокумент(ТабличныйДокумент, МакетОбработки, Область, СсылкаНаДокумент); Область.Параметры.Заполнить(СтруктураДанныхЗаголовок); ТабличныйДокумент.Вывести(Область); Область = МакетОбработки.ПолучитьОбласть("Шапка"); СтруктураДанныхШапка = Новый Структура; СтруктураДанныхШапка.Вставить("ПредставлениеРаспоряжения", ОбщегоНазначенияУТКлиентСервер.СформироватьЗаголовокДокумента(РеквизитыДокумента, НСтр("ru='Реализация товаров'"))); СтруктураДанныхШапка.Вставить("ПредставлениеСклада", СсылкаНаДокумент.Склад); СтруктураДанныхШапка.Вставить("Склад", СсылкаНаДокумент.Склад); Область.Параметры.Заполнить(СтруктураДанныхШапка); ТабличныйДокумент.Вывести(Область); Область = МакетОбработки.ПолучитьОбласть("Поставщик"); СтруктураДанныхПоставщик = Новый Структура; СтруктураДанныхПоставщик.Вставить("ПредставлениеОрганизации", ФормированиеПечатныхФорм.ОписаниеОрганизации(ФормированиеПечатныхФорм.СведенияОЮрФизЛице(СсылкаНаДокумент.Организация, СсылкаНаДокумент.Дата), "ПолноеНаименование")); СтруктураДанныхПоставщик.Вставить("Организация", СсылкаНаДокумент.Организация); Область.Параметры.Заполнить(СтруктураДанныхПоставщик); ТабличныйДокумент.Вывести(Область); Область = МакетОбработки.ПолучитьОбласть("Покупатель"); СтруктураДанныхПокупатель = Новый Структура; СтруктураДанныхПоставщик.Вставить("ПредставлениеПартнера", ФормированиеПечатныхФорм.ОписаниеОрганизации(ФормированиеПечатныхФорм.СведенияОЮрФизЛице(СсылкаНаДокумент.Контрагент, СсылкаНаДокумент.Дата), "ПолноеНаименование")); СтруктураДанныхПоставщик.Вставить("Контрагент", СсылкаНаДокумент.Контрагент); Область.Параметры.Заполнить(СтруктураДанныхПоставщик); ТабличныйДокумент.Вывести(Область); Область = МакетОбработки.ПолучитьОбласть("Адрес"); СтруктураДанныхАдрес = Новый Структура; СтруктураДанныхАдрес.Вставить("АдресДоставки",СсылкаНаДокумент.АдресДоставки); Область.Параметры.Заполнить(СтруктураДанныхАдрес); ТабличныйДокумент.Вывести(Область); Область = МакетОбработки.ПолучитьОбласть("ШапкаТаблицы|НачалоСтроки"); ТабличныйДокумент.Вывести(Область); Если ВыводитьКоды Тогда Область = МакетОбработки.ПолучитьОбласть("ШапкаТаблицы|КолонкаКодов"); СтруктураДанныхКоды = Новый Структура("ИмяКолонкиКодов", КолонкаКодов); Область.Параметры.Заполнить(СтруктураДанныхКоды); ТабличныйДокумент.Присоединить(Область); КонецЕсли; Область = МакетОбработки.ПолучитьОбласть("ШапкаТаблицы|КолонкаТоваров"); ТабличныйДокумент.Присоединить(Область); Если ИспользоватьУпаковки Тогда Область = МакетОбработки.ПолучитьОбласть("ШапкаТаблицы|КолонкиУпаковок"); ТабличныйДокумент.Присоединить(Область); КонецЕсли; Область = МакетОбработки.ПолучитьОбласть("ШапкаТаблицы|КолонкиКоличества"); ТабличныйДокумент.Присоединить(Область); ОбластьНачалоСтроки = МакетОбработки.ПолучитьОбласть("СтрокаТаблицы|НачалоСтроки"); ОбластьКолонкаКодов = МакетОбработки.ПолучитьОбласть("СтрокаТаблицы|КолонкаКодов"); ОбластьКолонкаТоваров = МакетОбработки.ПолучитьОбласть("СтрокаТаблицы|КолонкаТоваров"); ОбластьКолонкаУпаковок = МакетОбработки.ПолучитьОбласть("СтрокаТаблицы|КолонкиУпаковок"); ОбластьКолонкаКоличества = МакетОбработки.ПолучитьОбласть("СтрокаТаблицы|КолонкиКоличества"); СчетСтрок = 1; ПерваяСтрока = Истина; СтрокаУпаковок = ""; СтрокаКоличесткаУпаковок = ""; СтрокаЕдиницИзмерений = ""; СтрокаКоличества = ""; Для Каждого ТекущаяСтрока Из СсылкаНаДокумент.Товары Цикл СтруктураДанныхНомерСтроки = Новый Структура("НомерСтроки", СчетСтрок); ОбластьНачалоСтроки.Параметры.Заполнить(СтруктураДанныхНомерСтроки); СчетСтрок = СчетСтрок + 1; ТабличныйДокумент.Вывести(ОбластьНачалоСтроки); Если ВыводитьКоды Тогда СтруктураДанныхКоды = Новый Структура("ЗначениеКода", ТекущаяСтрока[КолонкаКодов]); ОбластьКолонкаКодов.Параметры.Заполнить(СтруктураДанныхКоды); ТабличныйДокумент.Присоединить(ОбластьКолонкаКодов); КонецЕсли; Если (СсылкаНаДокумент.ВернутьМногооборотнуюТару) и (СсылкаНаДокумент.Номенклатура.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.МногооборотнаяТара) Тогда ЭтоВозвратнаяТара = ИСТИНА; Иначе ЭтоВозвратнаяТара = ЛОЖЬ; КонецЕсли; ДополнительныеПараметрыПолученияНаименованияДляПечати = НоменклатураКлиентСервер.ДополнительныеПараметрыПредставлениеНоменклатурыДляПечати(); ДополнительныеПараметрыПолученияНаименованияДляПечати.ВозвратнаяТара = ЭтоВозвратнаяТара; Товар = НоменклатураКлиентСервер.ПредставлениеНоменклатурыДляПечати( ТекущаяСтрока.Номенклатура.НаименованиеПолное, ТекущаяСтрока.Характеристика.НаименованиеПолное, , ТекущаяСтрока.Серия.Наименование, ДополнительныеПараметрыПолученияНаименованияДляПечати); СтруктураДанныхТовар = Новый Структура("Товар", Товар); ОбластьКолонкаТоваров.Параметры.Заполнить(СтруктураДанныхТовар); ТабличныйДокумент.Присоединить(ОбластьКолонкаТоваров); Если ИспользоватьУпаковки Тогда ОбластьКолонкаУпаковок.Параметры.Заполнить(ТекущаяСтрока); Если ТекущаяСтрока.Упаковка = Справочники.УпаковкиЕдиницыИзмерения.ПустаяСсылка() Тогда ОбластьКолонкаУпаковок.Параметры.ПредставлениеЕдининицыИзмеренияУпаковки = ТекущаяСтрока.Номенклатура.ЕдиницаИзмерения; КонецЕсли; ТабличныйДокумент.Присоединить(ОбластьКолонкаУпаковок); КонецЕсли; ОбластьКолонкаКоличества.Параметры.Заполнить(ТекущаяСтрока); ОбластьКолонкаКоличества.Параметры.ПредставлениеБазовойЕдиницыИзмерения = ТекущаяСтрока.Номенклатура.ЕдиницаИзмерения; ТабличныйДокумент.Присоединить(ОбластьКолонкаКоличества); ТоварССериейЭкземпляром = Ложь; КонецЦикла; Область = МакетОбработки.ПолучитьОбласть("ПодвалТаблицы|НачалоСтроки"); ТабличныйДокумент.Вывести(Область); Если ВыводитьКоды Тогда Область = МакетОбработки.ПолучитьОбласть("ПодвалТаблицы|КолонкаКодов"); ТабличныйДокумент.Присоединить(Область); КонецЕсли; Область = МакетОбработки.ПолучитьОбласть("ПодвалТаблицы|КолонкаТоваров"); ТабличныйДокумент.Присоединить(Область); Если ИспользоватьУпаковки Тогда Область = МакетОбработки.ПолучитьОбласть("ПодвалТаблицы|КолонкиУпаковок"); ТабличныйДокумент.Присоединить(Область); КонецЕсли; Область = МакетОбработки.ПолучитьОбласть("ПодвалТаблицы|КолонкиКоличества"); ТабличныйДокумент.Присоединить(Область); Область = МакетОбработки.ПолучитьОбласть("Подписи"); ТекстИтоговойСтроки = НСтр("ru = 'Всего наименований %ВсегоНаименований%'"); ТекстИтоговойСтроки = СтрЗаменить(ТекстИтоговойСтроки,"%ВсегоНаименований%", СчетСтрок-1); СтруктураДанныхИтоговаяСтрока = Новый Структура; СтруктураДанныхЗаголовок.Вставить("ИтоговаяСтрока", ТекстИтоговойСтроки); Область.Параметры.Заполнить(СтруктураДанныхЗаголовок); ТабличныйДокумент.Вывести(Область); ТабличныйДокумент.АвтоМасштаб = Истина; Возврат ТабличныйДокумент; КонецФункции
Если выводить отдельно данную печатную форму, то все работает корректно, даже при печати комплекта. Но вот в паре с другой печатной формой, данная ВПФ не выводилась на печать.
После анализа процедуры печати комплекта документов, выяснилось. Что в каждый табличный документ, для печатных форм, которые выводятся, добавлялась новая область, которая называлась, как синоним объекта печати - параметра передаваемого в функции.
Функция СформироватьПечатнуюФорму(СсылкаНаДокумент, ОбъектыПечати)
Для добавления такой области в нашу печатную форму, достаточно использовать вот такую процедуру.
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, 1, ОбъектыПечати, СсылкаНаДокумент);
После добавления данного кода в функцию получения табличного документа, данная ВПФ успешно распечаталась при печати комплекта документов.
p.s Надеюсь данная статья будет полезна.