Имя: Пароль:
1C
 
выдает ошибку не сформирован табличный документ
0 userqwerty
 
20.11.19
10:34
Всем привет! помогите разобраться пожалуйста, выдает ошибку, когда пытаюсь открыть внешнюю ПФ в Документе
пишет {ОбщийМодуль.ДополнительныеОтчетыИОбработки.Модуль(236)}: В обработчике печати не был сформирован табличный документ для: ПФНовый
            ВызватьИсключение(ТекстСообщенияОбОшибке);



Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати = Неопределено, ПараметрыВывода = Неопределено) Экспорт
    ПараметрыПечати = Новый Структура;
    ПараметрыПечати.Вставить("ДополнитьКомплектВнешнимиПечатнымиФормами",Истина);
    
    СтруктураТипов = ОбщегоНазначенияУТ.СоответствиеМассивовПоТипамОбъектов(МассивОбъектов);
    
      //Макет = ЭтотОбъект.ПолучитьМакет("ПФ_MXL_РасходнаяНакладная");
    
    
    
    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ОтчетКомиссионера") Тогда
        
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
            КоллекцияПечатныхФорм,
            "ОтчетКомиссионера",
            НСтр("ru='Отчет комиссионера';uk='Звіт комісіонера'"),
            СформироватьПечатнуюФормуОтчетПоКомиссии(СтруктураТипов, ОбъектыПечати, ПараметрыПечати, ПараметрыВывода),
            ,
            ,
            ,
            Истина // ЭтоМногоязычнаяПечатнаяФорма
        );
        
    КонецЕсли;
    
    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ОтчетКомиссионераСписание") Тогда
        
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
            КоллекцияПечатныхФорм,
            "ОтчетКомиссионераСписание",
            НСтр("ru='Отчет комиссионера';uk='Звіт комісіонера'"),
            СформироватьПечатнуюФормуОтчетПоКомиссииСписание(СтруктураТипов, ОбъектыПечати, ПараметрыПечати, ПараметрыВывода),
            ,
            ,
            ,
            Истина // ЭтоМногоязычнаяПечатнаяФорма
        );
        
    КонецЕсли;
    
    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "М4") Тогда
        
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
            КоллекцияПечатныхФорм,
            "М4",
            НСтр("ru='Приходный ордер (М-4)';uk='Прибутковий ордер (М-4)'"),
            СформироватьПечатнуюФормуМ4(СтруктураТипов, ОбъектыПечати, ПараметрыПечати));
        
    КонецЕсли;
    
    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "РасходнаяНакладная") Тогда
        
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
            КоллекцияПечатныхФорм,
            "РасходнаяНакладная",
            НСтр("ru='Расходная накладная';uk='Видаткова накладна'"),
            СформироватьПечатнуюФормуРасходнаяНакладная(СтруктураТипов, ОбъектыПечати, ПараметрыПечати, ПараметрыВывода),
            ,
            ,
            ,
            Истина // ЭтоМногоязычнаяПечатнаяФорма
        );
        
    КонецЕсли;
    
    ФормированиеПечатныхФорм.ЗаполнитьПараметрыОтправки(ПараметрыВывода.ПараметрыОтправки, СтруктураТипов, КоллекцияПечатныхФорм);
    
КонецПроцедуры



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

        НомерТипаДокумента = НомерТипаДокумента + 1;
        Если НомерТипаДокумента > 1 Тогда
            ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
        КонецЕсли;
        
        МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(СтруктураОбъектов.Ключ);
        
        ДанныеДляПечати = МенеджерОбъекта.ПолучитьДанныеДляПечатнойФормыОтчетПоКомиссии(ПараметрыПечати, СтруктураОбъектов.Значение);
        
        ЗаполнитьТабличныйДокументОтчетПоКомиссииОПродажах(
            ТабличныйДокумент,
            ДанныеДляПечати,
            ОбъектыПечати,
            ПараметрыВывода
        );    
            
    КонецЦикла;
    
    Возврат ТабличныйДокумент;

КонецФункции

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

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

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

Процедура ЗаполнитьРеквизитыПодвалаОтчетПоКомисии(ДанныеПечати, ВыборкаПоДокументам, Макет, ТабличныйДокумент, КодЯзыкаПечать)
    
    ОбластьМакета = Макет.ПолучитьОбласть("Подвал");
    
    СтруктураПараметров = Новый Структура;
    СтруктураПараметров.Вставить("СуммаКомитентаВсего", ВыборкаПоДокументам.СуммаКомитента);
    СтруктураПараметров.Вставить("СуммаПродажиВсего", ВыборкаПоДокументам.СуммаПродажи);
    СтруктураПараметров.Вставить("СуммаВознагражденияВсего", ВыборкаПоДокументам.СуммаВознаграждения);
    
    Если ВыборкаПоДокументам.СуммаПродажи < 0 Тогда
        ТекстИтоговаяСтрока = НСтр("ru='Всего возвращено наименований ';uk= 'Всього повернуто найменувань '", КодЯзыкаПечать);
    Иначе
        ТекстИтоговаяСтрока = НСтр("ru='Всего продано наименований ';uk= 'Всього продано найменувань '", КодЯзыкаПечать);
    КонецЕсли;
    
    СтруктураПараметров.Вставить("ИтоговаяСтрока", ТекстИтоговаяСтрока + " "
        + ВыборкаПоДокументам.Выбрать().Количество()
        + ", " + НСтр("ru=', на сумму ';uk= ', на суму '", КодЯзыкаПечать) + " "
        + ФормированиеПечатныхФорм.ФорматСумм(ВыборкаПоДокументам.СуммаПродажи, ДанныеПечати.Валюта));
    
    СтруктураПараметров.Вставить("СуммаПрописью", РаботаСКурсамиВалют.СформироватьСуммуПрописью(
        ВыборкаПоДокументам.СуммаПродажи,
        ДанныеПечати.Валюта,
        ,
        КодЯзыкаПечать
        )    
    );
    
    Если ДанныеПечати.СуммаВознаграждения <> 0 Тогда
        СтруктураПараметров.Вставить("СуммаВознаграждения", НСтр("ru='Сумма комиссионного вознаграждения составила';uk= 'Сума комісійної винагороди склала'", КодЯзыкаПечать) + " "
            + ?(ДанныеПечати.СуммаВознаграждения < 0, НСтр("ru='минус';uk= 'мінус'", КодЯзыкаПечать) + " ", "")
            + РаботаСКурсамиВалют.СформироватьСуммуПрописью(ДанныеПечати.СуммаВознаграждения, ДанныеПечати.Валюта, , КодЯзыкаПечать));
            
    КонецЕсли;
    
    
    ОбластьМакета.Параметры.Заполнить(СтруктураПараметров);
    
    ТабличныйДокумент.Вывести(ОбластьМакета);
    
    Если ЗначениеЗаполнено(ДанныеПечати.МестоСоставленияДокумента) Тогда
        ОбластьМакета = Макет.ПолучитьОбласть("МестоСоставления");
        СтруктураПараметров.Вставить("МестоСоставления", СокрЛП(ДанныеПечати.МестоСоставленияДокумента));
        ОбластьМакета.Параметры.Заполнить(СтруктураПараметров);
        ТабличныйДокумент.Вывести(ОбластьМакета);
    КонецЕсли;

    ДанныеДляФормированияПодписей = Новый Структура("ПредставительОрганизации, ПредставительОрганизацииДолжность, ПредставительКонтрагента, ПредставительОрганизацииПолучателя, ПредставительОрганизацииПолучателяДолжность");
    Если ДанныеПечати.ЭтоОтчетКомиссионера Тогда
        ОбластьМакета = Макет.ПолучитьОбласть("ПодписиОтчетКомиссионера");
        ДанныеДляФормированияПодписей.ПредставительОрганизации                    = ДанныеПечати.ПредставительКомитента;
        ДанныеДляФормированияПодписей.ПредставительОрганизацииДолжность           = ДанныеПечати.ПредставительКомитентаДолжность;
        ДанныеДляФормированияПодписей.ПредставительКонтрагента                    = ДанныеПечати.ПредставительКомиссионераСтрокой;
        ДанныеДляФормированияПодписей.ПредставительОрганизацииПолучателяДолжность = ДанныеПечати.ПредставительКомиссионераДолжность;
        ДанныеДляФормированияПодписей.ПредставительОрганизацииПолучателя          = ДанныеПечати.ПредставительКомиссионера;
    Иначе
        ОбластьМакета = Макет.ПолучитьОбласть("ПодписиОтчетКомитенту");
        ДанныеДляФормированияПодписей.ПредставительОрганизации                    = ДанныеПечати.ПредставительКомиссионера;
        ДанныеДляФормированияПодписей.ПредставительОрганизацииДолжность           = ДанныеПечати.ПредставительКомиссионераДолжность;
        ДанныеДляФормированияПодписей.ПредставительКонтрагента                    = ДанныеПечати.ПредставительКомитентаСтрокой;
        ДанныеДляФормированияПодписей.ПредставительОрганизацииПолучателяДолжность = ДанныеПечати.ПредставительКомитентаДолжность;
        ДанныеДляФормированияПодписей.ПредставительОрганизацииПолучателя          = ДанныеПечати.ПредставительКомитента;
    КонецЕсли;
    
    ОбластьМакета.Параметры.Заполнить(ФормированиеПечатныхФорм.СведенияОбОтветсвенныхЛицах(ДанныеДляФормированияПодписей, КодЯзыкаПечать));
    ТабличныйДокумент.Вывести(ОбластьМакета);
    
    
КонецПроцедуры

Процедура ЗаполнитьТабличныйДокументОтчетПоКомиссииОПродажах(ТабличныйДокумент, ДанныеДляПечати, ОбъектыПечати, ПараметрыВывода)     
    
    КодЯзыкаПечать = ПараметрыВывода.КодЯзыкаДляМногоязычныхПечатныхФорм;    
    
    
    Макет = УправлениеПечатью.МакетПечатнойФормы("Обработка.ПечатьОбщихФорм.ПФ_MXL_ОтчетПоКомиссии", КодЯзыкаПечать);
    
    КолонкаКодов = ФормированиеПечатныхФорм.ИмяДополнительнойКолонки();
    
    ДанныеПечати          = ДанныеДляПечати.РезультатПоШапке.Выбрать();
    ВыборкаПоДокументам = ДанныеДляПечати.РезультатПоТабличнойЧасти.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    
    ПервыйДокумент = Истина;
    Пока ДанныеПечати.Следующий() Цикл
    
        Если Не ПервыйДокумент Тогда
            ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
        КонецЕсли;
        
        ПервыйДокумент = Ложь;
        НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
        
        ВыборкаПоДокументам.Сбросить();
        
        СтруктураПоиска = Новый Структура("Ссылка", ДанныеПечати.Ссылка);
        Если ВыборкаПоДокументам.НайтиСледующий(СтруктураПоиска) Тогда
            
            Если ДанныеПечати.ЭтоОтчетКомиссионера Тогда
                Заголовок = НСтр("ru='Отчет комиссионера о продажах';uk= 'Звіт комісіонера про продажі'", КодЯзыкаПечать);
            Иначе
                Заголовок = НСтр("ru='Отчет комитенту о продажах';uk= 'Звіт комітенту про продажі'", КодЯзыкаПечать);
            КонецЕсли;
        
            // Выводим общие реквизиты шапки
            ЗаполнитьРеквизитыШапкиОтчетПоКомиссии(
                ДанныеПечати,
                Заголовок,
                Макет,
                ТабличныйДокумент,
                КодЯзыкаПечать
            );
            
            СтруктураПараметров = Новый Структура;
            
            // Выводим заголовок таблицы
            Если ЗначениеЗаполнено(КолонкаКодов) Тогда
                ЗаголовокТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицыСКодами");
                СтруктураПараметров.Вставить("ИмяКолонкиКодов", КолонкаКодов);
            Иначе
                ЗаголовокТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
            КонецЕсли;
            СтруктураПараметров.Вставить("Валюта", ДанныеПечати.Валюта);
            ЗаголовокТаблицы.Параметры.Заполнить(СтруктураПараметров);
            ЗаполнитьЗначенияСвойств(ЗаголовокТаблицы.Параметры, ФормированиеПечатныхФорм.СформироватьЗаголовкиДляСуммовыхПоказателей(ДанныеПечати, КодЯзыкаПечать, Истина));
            ТабличныйДокумент.Вывести(ЗаголовокТаблицы);
            
            // Выводим многострочную часть документа
            Если ЗначениеЗаполнено(КолонкаКодов) Тогда
                ОбластьМакета = Макет.ПолучитьОбласть("СтрокаСКодами");
            Иначе
                ОбластьМакета = Макет.ПолучитьОбласть("Строка");
            КонецЕсли;
                
            НомерСтроки = 0;
            
            СтрокаТовары = ВыборкаПоДокументам.Выбрать();
            Пока СтрокаТовары.Следующий() Цикл
                НомерСтроки = НомерСтроки + 1;
                
                ОбластьМакета.Параметры.Заполнить(СтрокаТовары);
                
                СтруктураПараметров = Новый Структура;
                
                Если ЗначениеЗаполнено(КолонкаКодов) Тогда
                    СтруктураПараметров.Вставить("Артикул", СтрокаТовары[КолонкаКодов]);
                КонецЕсли;
                
                СтруктураПараметров.Вставить("НомерСтроки", НомерСтроки);
                СтруктураПараметров.Вставить("ТоварНаименование", НоменклатураКлиентСервер.ПредставлениеНоменклатурыДляПечати(
                    СтрокаТовары.ТоварНаименование,
                    СтрокаТовары.Характеристика));
                СтруктураПараметров.Вставить("ЦенаКомитента", ?(СтрокаТовары.Количество = 0, 0, Окр(СтрокаТовары.СуммаКомитента / СтрокаТовары.Количество, 2, 1)));
                СтруктураПараметров.Вставить("ЦенаПродажи", ?(СтрокаТовары.Количество = 0, 0, Окр(СтрокаТовары.СуммаПродажи / СтрокаТовары.Количество, 2, 1)));
                
                ОбластьМакета.Параметры.Заполнить(СтруктураПараметров);
                ТабличныйДокумент.Вывести(ОбластьМакета);
            КонецЦикла;
            
            ЗаполнитьРеквизитыПодвалаОтчетПоКомисии(
                ДанныеПечати,
                ВыборкаПоДокументам,
                Макет,
                ТабличныйДокумент,
                КодЯзыкаПечать
            );
            
            УправлениеПечатью.ЗадатьОбластьПечатиДокумента(
                ТабличныйДокумент,
                НомерСтрокиНачало,
                ОбъектыПечати,
                ДанныеПечати.Ссылка);
            
        КонецЕсли;
    
    КонецЦикла;

КонецПроцедуры

Процедура ЗаполнитьРеквизитыПодвалаОтчетПоКомиссииОСписании(ДанныеПечати, ВыборкаПоДокументам, Макет, ТабличныйДокумент, КодЯзыкаПечать)
    
    ОбластьМакета = Макет.ПолучитьОбласть("Подвал");
    
    СтруктураПараметров = Новый Структура;
    СтруктураПараметров.Вставить("СуммаВсего", ВыборкаПоДокументам.Сумма);
    СтруктураПараметров.Вставить("ИтоговаяСтрока", НСтр("ru='Всего списано наименований';uk= 'Всього списано найменувань'", КодЯзыкаПечать) + " "
        + ВыборкаПоДокументам.Выбрать().Количество()
        + ?(ВыборкаПоДокументам.Сумма <> 0, ", " + НСтр("ru='на сумму';uk= 'на суму'", КодЯзыкаПечать) + " ", "")
        + ?(ВыборкаПоДокументам.Сумма <> 0, ФормированиеПечатныхФорм.ФорматСумм(ВыборкаПоДокументам.Сумма, ДанныеПечати.Валюта), ""));
    СтруктураПараметров.Вставить("СуммаПрописью", РаботаСКурсамиВалют.СформироватьСуммуПрописью(
        ВыборкаПоДокументам.Сумма,
        ДанныеПечати.Валюта,
        ,
        КодЯзыкаПечать
        )
    );
        
    
    ОбластьМакета.Параметры.Заполнить(СтруктураПараметров);
    ТабличныйДокумент.Вывести(ОбластьМакета);
    
    Если ЗначениеЗаполнено(ДанныеПечати.МестоСоставленияДокумента) Тогда
        ОбластьМакета = Макет.ПолучитьОбласть("МестоСоставления");
        СтруктураПараметров.Вставить("МестоСоставления", СокрЛП(ДанныеПечати.МестоСоставленияДокумента));
        ОбластьМакета.Параметры.Заполнить(СтруктураПараметров);
        ТабличныйДокумент.Вывести(ОбластьМакета);
    КонецЕсли;

    ДанныеДляФормированияПодписей = Новый Структура("ПредставительОрганизации, ПредставительОрганизацииДолжность, ПредставительКонтрагента, ПредставительОрганизацииПолучателя, ПредставительОрганизацииПолучателяДолжность");
    Если ДанныеПечати.ЭтоОтчетКомиссионера Тогда
        ОбластьМакета = Макет.ПолучитьОбласть("ПодписиОтчетКомиссионера");
        ДанныеДляФормированияПодписей.ПредставительОрганизации                    = ДанныеПечати.ПредставительКомитента;
        ДанныеДляФормированияПодписей.ПредставительОрганизацииДолжность           = ДанныеПечати.ПредставительКомитентаДолжность;
        ДанныеДляФормированияПодписей.ПредставительКонтрагента                    = ДанныеПечати.ПредставительКомиссионераСтрокой;
        ДанныеДляФормированияПодписей.ПредставительОрганизацииПолучателяДолжность = ДанныеПечати.ПредставительКомиссионераДолжность;
        ДанныеДляФормированияПодписей.ПредставительОрганизацииПолучателя          = ДанныеПечати.ПредставительКомиссионера;
    Иначе
        ОбластьМакета = Макет.ПолучитьОбласть("ПодписиОтчетКомитенту");
        ДанныеДляФормированияПодписей.ПредставительОрганизации                    = ДанныеПечати.ПредставительКомиссионера;
        ДанныеДляФормированияПодписей.ПредставительОрганизацииДолжность           = ДанныеПечати.ПредставительКомиссионераДолжность;
        ДанныеДляФормированияПодписей.ПредставительКонтрагента                    = ДанныеПечати.ПредставительКомитентаСтрокой;
        ДанныеДляФормированияПодписей.ПредставительОрганизацииПолучателяДолжность = ДанныеПечати.ПредставительКомитентаДолжность;
        ДанныеДляФормированияПодписей.ПредставительОрганизацииПолучателя          = ДанныеПечати.ПредставительКомитента;
    КонецЕсли;
    
    ОбластьМакета.Параметры.Заполнить(ФормированиеПечатныхФорм.СведенияОбОтветсвенныхЛицах(ДанныеДляФормированияПодписей, КодЯзыкаПечать));
    ТабличныйДокумент.Вывести(ОбластьМакета);
        
КонецПроцедуры

Процедура ЗаполнитьТабличныйДокументОтчетПоКомиссииОСписании(ТабличныйДокумент, ДанныеДляПечати, ОбъектыПечати, ПараметрыВывода)
    
    КодЯзыкаПечать = ПараметрыВывода.КодЯзыкаДляМногоязычныхПечатныхФорм;    
    
    Макет = УправлениеПечатью.МакетПечатнойФормы("Обработка.ПечатьОбщихФорм.ПФ_MXL_ОтчетПоКомиссииОСписании", КодЯзыкаПечать);    
    
    КолонкаКодов = ФормированиеПечатныхФорм.ИмяДополнительнойКолонки();

    ДанныеПечати          = ДанныеДляПечати.РезультатПоШапке.Выбрать();
    ВыборкаПоДокументам = ДанныеДляПечати.РезультатПоТабличнойЧасти.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    
    ПервыйДокумент = Истина;
    Пока ДанныеПечати.Следующий() Цикл
    
        Если Не ПервыйДокумент Тогда
            ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
        КонецЕсли;
        
        ПервыйДокумент = Ложь;
        НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
        
        СтруктураПоиска = Новый Структура("Ссылка", ДанныеПечати.Ссылка);
        Если ВыборкаПоДокументам.НайтиСледующий(СтруктураПоиска) Тогда
            
            Если ДанныеПечати.ЭтоОтчетКомиссионера Тогда
                Заголовок = НСтр("ru='Отчет комиссионера о списании';uk= 'Звіт комісіонера про списання'", КодЯзыкаПечать);
            Иначе
                Заголовок = НСтр("ru='Отчет комитенту о списании';uk= 'Звіт комітенту про списання'", КодЯзыкаПечать);
            КонецЕсли;
        
            // Выводим общие реквизиты шапки
            ЗаполнитьРеквизитыШапкиОтчетПоКомиссии(
                ДанныеПечати,
                Заголовок,
                Макет,
                ТабличныйДокумент,
                КодЯзыкаПечать
            );
            
            СтруктураПараметров = Новый Структура;
            
            // Выводим заголовок таблицы
            Если ЗначениеЗаполнено(КолонкаКодов) Тогда
                ЗаголовокТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицыСКодами");
                СтруктураПараметров.Вставить("ИмяКолонкиКодов", КолонкаКодов);
            Иначе
                ЗаголовокТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
            КонецЕсли;
            СтруктураПараметров.Вставить("Валюта", ДанныеПечати.Валюта);
            ЗаголовокТаблицы.Параметры.Заполнить(СтруктураПараметров);
            ЗаполнитьЗначенияСвойств(ЗаголовокТаблицы.Параметры, ФормированиеПечатныхФорм.СформироватьЗаголовкиДляСуммовыхПоказателей(ДанныеПечати, КодЯзыкаПечать));
            ТабличныйДокумент.Вывести(ЗаголовокТаблицы);
            
            // Выводим многострочную часть документа
            Если ЗначениеЗаполнено(КолонкаКодов) Тогда
                ОбластьМакета = Макет.ПолучитьОбласть("СтрокаСКодами");
            Иначе
                ОбластьМакета = Макет.ПолучитьОбласть("Строка");
            КонецЕсли;
                
            НомерСтроки = 0;
            
            СтрокаТовары = ВыборкаПоДокументам.Выбрать();
            Пока СтрокаТовары.Следующий() Цикл
                
                НомерСтроки = НомерСтроки + 1;
                
                ОбластьМакета.Параметры.Заполнить(СтрокаТовары);
                
                СтруктураПараметров = Новый Структура;
                
                Если ЗначениеЗаполнено(КолонкаКодов) Тогда
                    СтруктураПараметров.Вставить("Артикул", СтрокаТовары[КолонкаКодов]);
                КонецЕсли;
                
                СтруктураПараметров.Вставить("НомерСтроки", НомерСтроки);
                СтруктураПараметров.Вставить("ТоварНаименование", НоменклатураКлиентСервер.ПредставлениеНоменклатурыДляПечати(
                    СтрокаТовары.ТоварНаименование,
                    СтрокаТовары.Характеристика));
                СтруктураПараметров.Вставить("Цена", ?(СтрокаТовары.Количество = 0, 0, Окр(СтрокаТовары.Сумма / СтрокаТовары.Количество, 2, 1)));
                
                ОбластьМакета.Параметры.Заполнить(СтруктураПараметров);
                ТабличныйДокумент.Вывести(ОбластьМакета);
                
            КонецЦикла;
            
            ЗаполнитьРеквизитыПодвалаОтчетПоКомиссииОСписании(
                ДанныеПечати,
                ВыборкаПоДокументам,
                Макет,
                ТабличныйДокумент,
                КодЯзыкаПечать
            );
            
            УправлениеПечатью.ЗадатьОбластьПечатиДокумента(
                ТабличныйДокумент,
                НомерСтрокиНачало,
                ОбъектыПечати,
                ДанныеПечати.Ссылка);
            
        КонецЕсли;
    
    КонецЦикла;
    
КонецПроцедуры


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

КонецФункции

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

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

Процедура ЗаполнитьТабличныйДокументМ4(ТабличныйДокумент, ДанныеДляПечати, ОбъектыПечати)
    
    ВалютаРегламентированногоУчета = Константы.ВалютаРегламентированногоУчета.Получить();
    
    ДанныеПечати          = ДанныеДляПечати.РезультатПоШапке.Выбрать();
    ВыборкаПоДокументам = ДанныеДляПечати.РезультатПоТабличнойЧасти.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    
    Макет = УправлениеПечатью.МакетПечатнойФормы("Обработка.ПечатьОбщихФорм.ПФ_MXL_UK_М4", "ru");
    
    ПервыйДокумент = Истина;
    
    Пока ДанныеПечати.Следующий() Цикл
        
        СтруктураПоиска = Новый Структура("Ссылка", ДанныеПечати.Ссылка);
        Если НЕ ВыборкаПоДокументам.НайтиСледующий(СтруктураПоиска) Тогда
            Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
                НСтр("ru='В документе %1 отсутствуют товары. Печать приходного ордера не требуется';uk='У документі %1 відсутні товари. Друк прибуткового ордера не потрібний'"),
                ДанныеПечати.Ссылка);
                
            ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
                Текст,
                ДанныеПечати.Ссылка);
            Продолжить;
        КонецЕсли;
        
        НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
        
        ВыборкаПоСкладам = ВыборкаПоДокументам.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
        
        Пока ВыборкаПоСкладам.Следующий() Цикл
            
            Если Не ПервыйДокумент Тогда
                ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
            КонецЕсли;
            
            ПервыйДокумент = Ложь;
            
            ЗаполнитьРеквизитыШапкиМ4(ДанныеПечати, ВыборкаПоСкладам, Макет, ТабличныйДокумент);
            
            // Выводим заголовок таблицы
            ОбластьЗаголовокТаблицы = Макет.ПолучитьОбласть("ЗаголовокТаблицы");
            ТабличныйДокумент.Вывести(ОбластьЗаголовокТаблицы);
            
            НомерСтраницы = 1;
            
            // Создаем массив для проверки вывода
            МассивВыводимыхОбластей = Новый Массив;
            
            // Выводим многострочную часть докмента
            ОбластьМакета           = Макет.ПолучитьОбласть("Строка");
            ОбластьШапкаСтрок       = Макет.ПолучитьОбласть("ШапкаСтрок");
            ОбластьПодвалСтрок      = Макет.ПолучитьОбласть("ПодвалСтрок");
            ОбластьПодвала          = Макет.ПолучитьОбласть("Подвал");
            
            ЗаполнитьРеквизитыПодвалаМ4(ОбластьПодвала, ДанныеПечати);
            
            СтрокаТовары = ВыборкаПоСкладам.Выбрать();
            КоличествоСтрок = СтрокаТовары.Количество();
            НомерСтроки = 0;
            Пока СтрокаТовары.Следующий() Цикл
                
                ОбластьМакета.Параметры.Заполнить(СтрокаТовары);
                
                НомерСтроки = НомерСтроки + 1;
                
                СтруктураПараметров = Новый Структура;
                СтруктураПараметров.Вставить("ТоварНаименование", НоменклатураКлиентСервер.ПредставлениеНоменклатурыДляПечати(
                    СтрокаТовары.ТоварНаименование,
                    СтрокаТовары.Характеристика,
                    ,
                    ,
                    ,
                    СтрокаТовары.ЭтоВозвратнаяТара,
                    "uk"
                    )
                );
                    
                ОбластьМакета.Параметры.Заполнить(СтруктураПараметров);
                
                Если ДанныеПечати.Валюта <> ВалютаРегламентированногоУчета Тогда
                    // Для внешнеэкономических документов(в валюте) регламентированная себестоимость(гривневая) должна расчитываться с учетом курсов полученных
                    // авансов. Т.к. в конфигурации отсутствует полнофункциональный расчет регламентированной себестоимости, то рекомендуется указывать суммовые
                    // показатели вручную, после определения корректной регламентированной себестоимости (напр. в "Бухгалтерия для Украины",
                    // см. комментарий к проводкам "Корректировка суммы зачета аванса по курсам авансов")
                    ОбластьМакета.Параметры.Цена = "";
                    ОбластьМакета.Параметры.СуммаСНДС = "";                    
                КонецЕсли;
                
                МассивВыводимыхОбластей.Оч
1 userqwerty
 
20.11.19
10:36
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати = Неопределено, ПараметрыВывода = Неопределено) Экспорт
    ПараметрыПечати = Новый Структура;
    ПараметрыПечати.Вставить("ДополнитьКомплектВнешнимиПечатнымиФормами",Истина);
    
    СтруктураТипов = ОбщегоНазначенияУТ.СоответствиеМассивовПоТипамОбъектов(МассивОбъектов);
    
      //Макет = ЭтотОбъект.ПолучитьМакет("ПФ_MXL_РасходнаяНакладная");
    
    
    
    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ОтчетКомиссионера") Тогда
        
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
            КоллекцияПечатныхФорм,
            "ОтчетКомиссионера",
            НСтр("ru='Отчет комиссионера';uk='Звіт комісіонера'"),
            СформироватьПечатнуюФормуОтчетПоКомиссии(СтруктураТипов, ОбъектыПечати, ПараметрыПечати, ПараметрыВывода),
            ,
            ,
            ,
            Истина // ЭтоМногоязычнаяПечатнаяФорма
        );
        
    КонецЕсли;
    
    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ОтчетКомиссионераСписание") Тогда
        
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
            КоллекцияПечатныхФорм,
            "ОтчетКомиссионераСписание",
            НСтр("ru='Отчет комиссионера';uk='Звіт комісіонера'"),
            СформироватьПечатнуюФормуОтчетПоКомиссииСписание(СтруктураТипов, ОбъектыПечати, ПараметрыПечати, ПараметрыВывода),
            ,
            ,
            ,
            Истина // ЭтоМногоязычнаяПечатнаяФорма
        );
        
    КонецЕсли;
    
    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "М4") Тогда
        
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
            КоллекцияПечатныхФорм,
            "М4",
            НСтр("ru='Приходный ордер (М-4)';uk='Прибутковий ордер (М-4)'"),
            СформироватьПечатнуюФормуМ4(СтруктураТипов, ОбъектыПечати, ПараметрыПечати));
        
    КонецЕсли;
    
    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "РасходнаяНакладная") Тогда
        
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
            КоллекцияПечатныхФорм,
            "РасходнаяНакладная",
            НСтр("ru='Расходная накладная';uk='Видаткова накладна'"),
            СформироватьПечатнуюФормуРасходнаяНакладная(СтруктураТипов, ОбъектыПечати, ПараметрыПечати, ПараметрыВывода),
            ,
            ,
            ,
            Истина // ЭтоМногоязычнаяПечатнаяФорма
        );
        
    КонецЕсли;
    
    ФормированиеПечатныхФорм.ЗаполнитьПараметрыОтправки(ПараметрыВывода.ПараметрыОтправки, СтруктураТипов, КоллекцияПечатныхФорм);
    
КонецПроцедуры



Функция СведенияОВнешнейОбработке() Экспорт
        
    
    
    
    ПараметрыРегистрации = Новый Структура;
    МассивНазначений = Новый Массив;
    //МассивНазначений.Добавить("Документ.ЗаказПоставщику");
    МассивНазначений.Добавить("Документ.РеализацияТоваровУслуг");

    МассивНазначений.Добавить("Документ.РеализацияТоваровУслуг");
    ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма"); //возможны варианты - ЗаполнениеОбъекта, ДополнительныйОтчет, СозданиеСвязанныхОбъектов,
    ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
    ПараметрыРегистрации.Вставить("Наименование", "ПФНовый"); //имя под kt обработка зарегистрирована будет в справочнике внешних обработок
    ПараметрыРегистрации.Вставить("Версия", "1.0");
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
    ПараметрыРегистрации.Вставить("Информация", "ПФНовый");
    
    //команды
    ТаблицаКоманд = Новый ТаблицаЗначений;
    ТаблицаКоманд.Колонки.Добавить("Представление"); //как будет выглядеть описание печ.формы для пользователя
    ТаблицаКоманд.Колонки.Добавить("Идентификатор"); //имя нашего макета
    ТаблицаКоманд.Колонки.Добавить("Использование"); //ВызовСерверногоМетода
    ТаблицаКоманд.Колонки.Добавить("ПоказыватьОповещение",Новый ОписаниеТипов("Булево")); //Истина
    ТаблицаКоманд.Колонки.Добавить("Модификатор"); //ПечатьМХL
    
    //ДобавитьКоманду(ТаблицаКоманд, "Акт о списании с Розничными ценами", "ПФ_MXL_РасходнаяНакладная", "ВызовСерверногоМетода", Истина, "ПечатьMXL");
    //УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ПФНовый");    

    
    НоваяКоманда = ТаблицаКоманд.Добавить();
    НоваяКоманда.Представление = "ПФНовый";
    НоваяКоманда.Идентификатор = "ПФНовый"; //Внешняя печатная форма  должан одинаково назваться как в модуле
    НоваяКоманда.Использование = "ВызовСерверногоМетода"; //здесь можно прописать использование как серверного так и клиентского, отличие в том, что серверный метод будет обращаться к экспортной процедуре из модуля объекта, клиентский - к экспортной процедуре из модуля формы объекта
    НоваяКоманда.ПоказыватьОповещение =//  Команды.Колонки.Добавить("ПоказыватьОповещение", );;
    НоваяКоманда.Модификатор = "ПечатьMXL";
    
    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
    
    Возврат ПараметрыРегистрации;
    
КонецФункции
2 dka80
 
20.11.19
10:36
Табличный документ возвращается пустой или неопределено.

На будущее: кто будет читать весь твой код?
3 dka80
 
20.11.19
10:38
Еще может быть неправильно зарегистрирована печатная форма: идентификатор не соответствует параметрам функции НужноПечататьМакет
4 userqwerty
 
20.11.19
10:41
(2) а как это проверить?
5 mistеr
 
20.11.19
10:55
(4) Отладчиком.
6 userqwerty
 
20.11.19
11:28
(5) внешнюю ПФ нельзя отладить.
7 Mankubus
 
20.11.19
12:09
(6) можно
8 Mankubus
 
20.11.19
12:10
9 pechkin
 
20.11.19
12:18
вот пример печ формы с формой отладки
https://github.com/acsent80/ExtForms-grdok/tree/master/src/Печатные формы/ЗаказКлиентаЗаявка
Закон Брукера: Даже маленькая практика стоит большой теории.