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