Информационный поток
Задания вакансии материалы разработки сообщения форума
Рубрики статей и материалов
Яндекс-директ

Вывод внешних печатных форм в комплект печатных документов

  • Добавить свою публикацию
  • для этого требуется регистрация

Задача - вывести печатную форму в комплект печатных документов. Все происходило на базе Управление торговлей, редакция 11 (11.3.4.67) . Печатная форма для документа "Реализация товаров и услуг" созданная на основании типовой, добавлен всего один реквизит. Печатная форма называется "Расходная накладная с доставкой"

 

По такому алгоритму она формировалась

 

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    
        
    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "РасходнаяНакладнаяСДоставкой") Тогда
	    // Формируем табличный документ и добавляем его в коллекцию печатных форм.

	    УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,
	    "РасходнаяНакладнаяСДоставкой",
	    "Расходная накладная с адресом доставки",
	    СформироватьПечатнуюФорму(МассивОбъектов[0], ОбъектыПечати),
	    ,
	    "Расходная накладная с адресом доставки");
    КонецЕсли;
    
    ОбщегоНазначенияБП.ЗаполнитьДополнительныеПараметрыПечати(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);

    
    //УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "РасходнаяНакладнаяСДоставкой", "Расходная накладная с адресом доставки", СформироватьПечатнуюФорму(МассивОбъектов[0], ОбъектыПечати));
    
КонецПроцедуры // Печать()

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

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

    ПерваяСтрока = Истина;
    СтрокаУпаковок = "";
    СтрокаКоличесткаУпаковок = "";
    СтрокаЕдиницИзмерений = "";
    СтрокаКоличества = "";
                        
    Для Каждого ТекущаяСтрока Из СсылкаНаДокумент.Товары Цикл
        СтруктураДанныхНомерСтроки = Новый Структура("НомерСтроки", СчетСтрок);
        ОбластьНачалоСтроки.Параметры.Заполнить(СтруктураДанныхНомерСтроки);
        СчетСтрок = СчетСтрок + 1;
        ТабличныйДокумент.Вывести(ОбластьНачалоСтроки);
        
        Если ВыводитьКоды Тогда
            СтруктураДанныхКоды = Новый Структура("ЗначениеКода", ТекущаяСтрока[КолонкаКодов]);
            ОбластьКолонкаКодов.Параметры.Заполнить(СтруктураДанныхКоды);
            ТабличныйДокумент.Присоединить(ОбластьКолонкаКодов);
        КонецЕсли;
        
        Если (СсылкаНаДокумент.ВернутьМногооборотнуюТару) и (СсылкаНаДокумент.Номенклатура.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.МногооборотнаяТара) Тогда
            ЭтоВозвратнаяТара = ИСТИНА;
        Иначе
            ЭтоВозвратнаяТара = ЛОЖЬ;
        КонецЕсли;
        
        ДополнительныеПараметрыПолученияНаименованияДляПечати = НоменклатураКлиентСервер.ДополнительныеПараметрыПредставлениеНоменклатурыДляПечати();
        ДополнительныеПараметрыПолученияНаименованияДляПечати.ВозвратнаяТара = ЭтоВозвратнаяТара;
        
        Товар = НоменклатураКлиентСервер.ПредставлениеНоменклатурыДляПечати(
        ТекущаяСтрока.Номенклатура.НаименованиеПолное,
        ТекущаяСтрока.Характеристика.НаименованиеПолное,
        ,
        ТекущаяСтрока.Серия.Наименование,
        ДополнительныеПараметрыПолученияНаименованияДляПечати);
        
        СтруктураДанныхТовар = Новый Структура("Товар", Товар);
        ОбластьКолонкаТоваров.Параметры.Заполнить(СтруктураДанныхТовар);
        
        ТабличныйДокумент.Присоединить(ОбластьКолонкаТоваров);
        
        Если ИспользоватьУпаковки Тогда                                     
            ОбластьКолонкаУпаковок.Параметры.Заполнить(ТекущаяСтрока);
            Если ТекущаяСтрока.Упаковка = Справочники.УпаковкиЕдиницыИзмерения.ПустаяСсылка() Тогда
                ОбластьКолонкаУпаковок.Параметры.ПредставлениеЕдининицыИзмеренияУпаковки = ТекущаяСтрока.Номенклатура.ЕдиницаИзмерения;
            КонецЕсли;
            ТабличныйДокумент.Присоединить(ОбластьКолонкаУпаковок);
        КонецЕсли;
        
        ОбластьКолонкаКоличества.Параметры.Заполнить(ТекущаяСтрока);
        ОбластьКолонкаКоличества.Параметры.ПредставлениеБазовойЕдиницыИзмерения = ТекущаяСтрока.Номенклатура.ЕдиницаИзмерения;
        ТабличныйДокумент.Присоединить(ОбластьКолонкаКоличества);
        
        ТоварССериейЭкземпляром = Ложь;
    КонецЦикла;

    Область = МакетОбработки.ПолучитьОбласть("ПодвалТаблицы|НачалоСтроки");
    ТабличныйДокумент.Вывести(Область);
    Если ВыводитьКоды Тогда
        Область = МакетОбработки.ПолучитьОбласть("ПодвалТаблицы|КолонкаКодов");
        ТабличныйДокумент.Присоединить(Область);
    КонецЕсли;
    Область = МакетОбработки.ПолучитьОбласть("ПодвалТаблицы|КолонкаТоваров");
    ТабличныйДокумент.Присоединить(Область);
    Если ИспользоватьУпаковки Тогда
        Область = МакетОбработки.ПолучитьОбласть("ПодвалТаблицы|КолонкиУпаковок");
        ТабличныйДокумент.Присоединить(Область);
    КонецЕсли;
    Область = МакетОбработки.ПолучитьОбласть("ПодвалТаблицы|КолонкиКоличества");
    ТабличныйДокумент.Присоединить(Область);
    
    Область = МакетОбработки.ПолучитьОбласть("Подписи");
    ТекстИтоговойСтроки = НСтр("ru = 'Всего наименований %ВсегоНаименований%'");
    ТекстИтоговойСтроки = СтрЗаменить(ТекстИтоговойСтроки,"%ВсегоНаименований%", СчетСтрок-1);
    СтруктураДанныхИтоговаяСтрока = Новый Структура;
    СтруктураДанныхЗаголовок.Вставить("ИтоговаяСтрока", ТекстИтоговойСтроки);
    Область.Параметры.Заполнить(СтруктураДанныхЗаголовок);
    ТабличныйДокумент.Вывести(Область);
                
    ТабличныйДокумент.АвтоМасштаб = Истина;

    Возврат ТабличныйДокумент;    
    
КонецФункции

 

Если выводить отдельно данную печатную форму, то все работает корректно, даже при печати комплекта. Но вот в паре с другой печатной формой, данная ВПФ не выводилась на печать.

После анализа процедуры печати комплекта документов, выяснилось. Что в каждый табличный документ, для печатных форм, которые выводятся, добавлялась новая область, которая называлась, как синоним объекта печати - параметра передаваемого в функции.

 Функция СформироватьПечатнуюФорму(СсылкаНаДокумент, ОбъектыПечати)

 

Для добавления такой области в нашу печатную форму, достаточно использовать вот такую процедуру.

 

УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, 1, ОбъектыПечати, СсылкаНаДокумент);

После добавления данного кода в функцию получения табличного документа, данная ВПФ успешно распечаталась при печати комплекта документов.

 

p.s Надеюсь данная статья будет полезна.

 
0
≡ к списку статей