Имя: Пароль:
1C
1С v8
создание внешней печатной формы на основе Типовой из ЗУП 3.1
0 Dapuk
 
10.06.19
09:13
Добрый день, уважаемые коллеги!
Документ "Увольнение списком", пф "Приказ об увольнении". Раньше писал внешние пф на основе типовой, а сейчас какая то хрень, не могу догнать как это все работает.
В модуле объекта и в модуле менеджера документа есть процедура "Печать", но в ней нет желаемого, т.е. УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(...), команда печати добавляется программно.

КомандаПечати = КомандыПечати.Добавить();
        КомандаПечати.Обработчик = "ЗарплатаКадрыКлиент.ВыполнитьКомандуПечати";
        КомандаПечати.МенеджерПечати = "Отчет.ПечатнаяФормаТ8а";
        КомандаПечати.Идентификатор = "ПФ_MXL_Т8а";
        КомандаПечати.Представление = НСтр("ru = 'Приказ об увольнении (Т-8а)'");
        КомандаПечати.Порядок = 10;
        КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;

Дальше проходим по нашему отчету, т.е. Отчет.ПечатнаяФормаТ8а и прохожу в Модуль Менеджера, процедура Печать.

ЗарплатаКадрыОтчеты.ВывестиВКоллекциюПечатнуюФорму("Отчет.ПечатнаяФормаТ8а",
        МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);

Проходим в общий модуль, там вот это.

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

Вопрос, как доработать наш отчет? Отчет "ПечатнаяФормаТ8а" формируется через СКД. Есть у кого нибудь опыт преобразования ВывестиВКоллекциюПечатнуюФорму в УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(...)?
1 ildary
 
10.06.19
10:00
(0) советую попробовать добавлять отчеты через расширение - теперь это рекомендуемый 1С-ом способ и оказалось, что не такой трудоемкий.
2 Фрэнки
 
10.06.19
10:08
Какая конкретная цель?

Отчет "ПечатнаяФормаТ8а" формируется через СКД - этот пример одного из отчетов ЗУП, которые слеплен по технологии последних БСП

Сейчас действительно возникла ситуация в ЗУП, что печатные формы, тем более , когда можно перехватить результирующий табличный документ, проще сделать в расширении, чем прежними способами.
3 Dapuk
 
10.06.19
12:57
(1) (2) спасибо за наводку! как раз уже реализовал в расширении и увидел ваши сообщения)))) данная реализация подтверждена. все легко и просто
4 mihaWS
 
27.06.19
05:49
(3) А подскажите, пожалуйста, подробнее про реализацию через расширение? Тоже все пф кадровых приказов раньше делал через внешние. А теперь с этим ВывестиВКоллекциюПечатнуюФорму непонятно как это реализовать через внешние пф.