8.х в обработчике печати не был сформирован табличный документ для

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем iLona90, 9 ноя 2015.

  1. TopicStarter Overlay
    iLona90
    Offline

    iLona90 Опытный в 1С

    Регистрация:
    9 ноя 2015
    Сообщения:
    131
    Симпатии:
    2
    Баллы:
    29
    Код:
    Функция ПечатьМ15(МассивОбъектов, ОбъектыПечати)
       
        Перем ПодразделениеОтветственныхЛиц;
       
        УстановитьПривилегированныйРежим(Истина);
       
        ВалютаРегламентированногоУчета = ОбщегоНазначенияБПВызовСервераПовтИсп.ПолучитьВалютуРегламентированногоУчета();
       
        ТабличныйДокумент = Новый ТабличныйДокумент;
        ТабличныйДокумент.АвтоМасштаб            = Истина;
        ТабличныйДокумент.ПолеСверху            = 10;
        ТабличныйДокумент.ПолеСнизу                = 10;
        ТабличныйДокумент.ПолеСправа            = 0;
        ТабличныйДокумент.ОриентацияСтраницы    = ОриентацияСтраницы.Ландшафт;
        ТабличныйДокумент.ИмяПараметровПечати    = "ПАРАМЕТРЫ_ПЕЧАТИ_РеализацияТоваровУслуг_М15";
       
        СисИнфо = Новый СистемнаяИнформация;
        Если ПустаяСтрока(СисИнфо.ИнформацияПрограммыПросмотра) Тогда
            ТабличныйДокумент.ПолеСлева            = 0;
        Иначе
            ТабличныйДокумент.ПолеСлева            = 10;
        КонецЕсли;
       
        Макет = УправлениеПечатью.МакетПечатнойФормы("ПФ_MXL_М15");
       
        Запрос = Новый Запрос();
        Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
        Запрос.УстановитьПараметр("ДополнительнаяКолонкаПечатныхФормДокументов", Константы.ДополнительнаяКолонкаПечатныхФормДокументов.Получить());
        Запрос.УстановитьПараметр("ВалютаРегламентированногоУчета", ВалютаРегламентированногоУчета);
        Запрос.Текст = ПолучитьТекстЗапросаДляФормированияПечатнойФормыМ15();
       
        ВыборкаШапки = Запрос.Выполнить().Выбрать();
       
        ПервыйДокумент = Истина;
       
        ОписаниеТиповЧисло15_2 = ОбщегоНазначения.ОписаниеТипаЧисло(15, 2);
        ОписаниеТиповЧисло15_3 = ОбщегоНазначения.ОписаниеТипаЧисло(15, 3);
       
        ВыборкаСтрок = Новый ТаблицаЗначений;
       
        ВыборкаСтрок.Колонки.Добавить("Номенклатура");
        ВыборкаСтрок.Колонки.Добавить("ТоварНаименование");
        ВыборкаСтрок.Колонки.Добавить("НоменклатурныйНомер");
        ВыборкаСтрок.Колонки.Добавить("СчетУчетаКод");
        ВыборкаСтрок.Колонки.Добавить("ПереданныеСчетУчетаКод");
        ВыборкаСтрок.Колонки.Добавить("СчетРасходовКод");
        ВыборкаСтрок.Колонки.Добавить("Количество", ОписаниеТиповЧисло15_3);
        ВыборкаСтрок.Колонки.Добавить("ЕдиницаИзмеренияНаименование");
        ВыборкаСтрок.Колонки.Добавить("ЕдиницаИзмеренияКод");
        ВыборкаСтрок.Колонки.Добавить("Цена");
        ВыборкаСтрок.Колонки.Добавить("СуммаВключаетНДС");
        ВыборкаСтрок.Колонки.Добавить("Сумма",                         ОписаниеТиповЧисло15_2);
        ВыборкаСтрок.Колонки.Добавить("СуммаНДС",                     ОписаниеТиповЧисло15_2);
        ВыборкаСтрок.Колонки.Добавить("СуммаВВалютеДокумента",         ОписаниеТиповЧисло15_2);
        ВыборкаСтрок.Колонки.Добавить("СуммаНДСВВалютеДокумента",     ОписаниеТиповЧисло15_2);
        ВыборкаСтрок.Колонки.Добавить("СтавкаНДС");
        ВыборкаСтрок.Колонки.Добавить("СуммаБезНДСВВалютеДокумента",ОписаниеТиповЧисло15_2);
        ВыборкаСтрок.Колонки.Добавить("КоррСчет");
        ВыборкаСтрок.Колонки.Добавить("КоррКод");
        ВыборкаСтрок.Колонки.Добавить("СуммаСНДС",                     ОписаниеТиповЧисло15_2);
        ВыборкаСтрок.Колонки.Добавить("ID");
        ВыборкаСтрок.Колонки.Добавить("СуммаБезНДС",                 ОписаниеТиповЧисло15_2);
        ВыборкаСтрок.Колонки.Добавить("СуммаРублевая",                 ОписаниеТиповЧисло15_2);
        ВыборкаСтрок.Колонки.Добавить("ЭтоКомиссия",                   Новый ОписаниеТипов("Булево"));
        ВыборкаСтрок.Колонки.Добавить("ВсегоРуб",                     ОписаниеТиповЧисло15_2);
        ВыборкаСтрок.Колонки.Добавить("НДСРуб",                     ОписаниеТиповЧисло15_2);
        ВыборкаСтрок.Колонки.Добавить("СуммаБезНДСРуб",             ОписаниеТиповЧисло15_2);
       
        Пока ВыборкаШапки.СледующийПоЗначениюПоля("Ссылка") Цикл
           
            Если НЕ ПервыйДокумент Тогда
                ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
            КонецЕсли;
           
            ПервыйДокумент = Ложь;
            // Запомним номер строки, с которой начали выводить текущий документ.
            НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
           
            ВыборкаСтрок       = ПодготовитьТаблицуДокументаДляПечати(ВыборкаШапки, ВыборкаСтрок, Истина, Ложь);
           
            // Получаем области макета для вывода в табличный документ
            Шапка            = Макет.ПолучитьОбласть("Шапка");
            ЗаголовокТаблицы = Макет.ПолучитьОбласть("ЗаголовокТаблицы");
            СтрокаТаблицы    = Макет.ПолучитьОбласть("Строка");
            Подвал           = Макет.ПолучитьОбласть("Подвал");   
           
            // Выведем шапку документа
            Шапка.Параметры.Заполнить(ВыборкаШапки);
           
            СведенияОбОрганизации = БухгалтерскийУчетПереопределяемый.СведенияОЮрФизЛице(ВыборкаШапки.ЮрФизЛицо, ВыборкаШапки.ДатаСоставления, ВыборкаШапки.БанковскийСчет);
            СведенияОКонтрагенте  = БухгалтерскийУчетПереопределяемый.СведенияОЮрФизЛице(ВыборкаШапки.Контрагент, ВыборкаШапки.ДатаСоставления);
           
            Шапка.Параметры.ПредставлениеОрганизации = ОбщегоНазначенияБПВызовСервера.ОписаниеОрганизации(СведенияОбОрганизации);
            Шапка.Параметры.ОрганизацияПоОКПО        = СведенияОбОрганизации.КодПоОКПО;
            Шапка.Параметры.НомерДокумента           = ПрефиксацияОбъектовКлиентСервер.ПолучитьНомерНаПечать(ВыборкаШапки.Номер, Истина, Ложь);
            Шапка.Параметры.КонтрагентНаименование   = ОбщегоНазначенияБПВызовСервера.ОписаниеОрганизации(СведенияОКонтрагенте, "НаименованиеДляПечатныхФорм,");
            Шапка.Параметры.Основание                = "Договор " + СокрЛП(ВыборкаШапки.ДоговорНаименование);
           
            ТабличныйДокумент.Вывести(Шапка);
           
            Для каждого СтрокаВыборки Из ВыборкаСтрок Цикл
               
                СуммаНДС    = ?(ЗначениеЗаполнено(СтрокаВыборки.СуммаНДС), СтрокаВыборки.СуммаНДС, 0);
                Количество  = ?(ЗначениеЗаполнено(СтрокаВыборки.Количество), СтрокаВыборки.Количество, 0);
                СуммаСНДС   = (?(ЗначениеЗаполнено(СтрокаВыборки.Сумма), СтрокаВыборки.Сумма, 0) + ?(ВыборкаШапки.СуммаВключаетНДС, 0, ?(ЗначениеЗаполнено(СтрокаВыборки.СуммаНДС), СтрокаВыборки.СуммаНДС, 0)));
                СуммаБезНДС = СуммаСНДС - СуммаНДС;
               
                СтрокаВыборки.КоррСчет          = ?((ВыборкаШапки.ДоговорВид = Перечисления.ВидыДоговоровКонтрагентов.СКомиссионером ИЛИ ВыборкаШапки.ВидОперации = Перечисления.ВидыОперацийРеализацияТоваров.ОтгрузкаБезПереходаПраваСобственности), СтрокаВыборки.ПереданныеСчетУчетаКод, СтрокаВыборки.СчетРасходовКод);
                СтрокаВыборки.КоррКод           = СтрокаВыборки.НоменклатурныйНомер;
                СтрокаВыборки.ТоварНаименование = СокрЛП(СтрокаВыборки.ТоварНаименование);
                СтрокаВыборки.СуммаСНДС         = СуммаСНДС;
                СтрокаВыборки.СуммаБезНДС       = СуммаБезНДС;
                СтрокаВыборки.Цена              = СуммаБезНДС / ?(Количество = 0, 1, Количество);
               
            КонецЦикла;
           
            // Заполним подвал документа
           
            Подвал.Параметры.Заполнить(ВыборкаШапки);
           
            ПодразделениеОтветственныхЛиц = ВыборкаШапки.ПодразделениеОрганизации;
           
            ПредставлениеПоставщика = ОбщегоНазначенияБПВызовСервера.ОписаниеОрганизации(СведенияОбОрганизации, "НаименованиеДляПечатныхФорм");
            ОтветственныеЛицаОрганизации = ОтветственныеЛицаБП.ОтветственныеЛица(ВыборкаШапки.Организация, ВыборкаШапки.ДатаДокумента, ВыборкаШапки.ПодразделениеОрганизации);
           
            Если ЗначениеЗаполнено(ВыборкаШапки.Руководитель) Тогда
                Если ВыборкаШапки.Руководитель = ОтветственныеЛицаОрганизации.Руководитель Тогда
                    Подвал.Параметры.ФИОРуководителя = ОтветственныеЛицаОрганизации.РуководительПредставление;
                    Подвал.Параметры.ДолжностьРуководителя = "" + ОтветственныеЛицаОрганизации.РуководительДолжностьПредставление;
                Иначе
                    ДанныеОтветственногоЛица = ОтветственныеЛицаБП.РеквизитыПодписиУполномоченногоЛица(ВыборкаШапки.Организация, ВыборкаШапки.Руководитель, ВыборкаШапки.ЗаРуководителяНаОсновании, ВыборкаШапки.ДатаДокумента);
                    ЗаместительПоПриказу = "" + ДанныеОтветственногоЛица.ФИО.Представление;
                    Если ЗначениеЗаполнено(ВыборкаШапки.ЗаРуководителяНаОсновании) Тогда
                        ЗаместительПоПриказу = ЗаместительПоПриказу + ", " + ДанныеОтветственногоЛица.ОснованиеПраваПодписиПредставление;
                    КонецЕсли;
                    Подвал.Параметры.ФИОРуководителя = ЗаместительПоПриказу;
                    Если ЗначениеЗаполнено(ДанныеОтветственногоЛица.Должность) Тогда
                        Подвал.Параметры.ДолжностьРуководителя = "" + ДанныеОтветственногоЛица.ДолжностьПредставление;
                    КонецЕсли;
                КонецЕсли;
            Иначе
                Подвал.Параметры.ФИОРуководителя = ОтветственныеЛицаОрганизации.РуководительПредставление;
                Подвал.Параметры.ДолжностьРуководителя = "" + ОтветственныеЛицаОрганизации.РуководительДолжностьПредставление;
            КонецЕсли;
           
            Если ЗначениеЗаполнено(ВыборкаШапки.ГлавныйБухгалтер) И ВыборкаШапки.ГлавныйБухгалтер <> ОтветственныеЛицаОрганизации.ГлавныйБухгалтер Тогда
                ДанныеОтветственногоЛица = ОтветственныеЛицаБП.РеквизитыПодписиУполномоченногоЛица(ВыборкаШапки.Организация, ВыборкаШапки.ГлавныйБухгалтер, ВыборкаШапки.ЗаГлавногоБухгалтераНаОсновании, ВыборкаШапки.ДатаДокумента);
                ЗаместительПоПриказу = "" + ДанныеОтветственногоЛица.ФИО.Представление;
                Если ЗначениеЗаполнено(ВыборкаШапки.ЗаГлавногоБухгалтераНаОсновании) Тогда
                    ЗаместительПоПриказу = ЗаместительПоПриказу + ", " + ДанныеОтветственногоЛица.ОснованиеПраваПодписиПредставление;
                КонецЕсли;
                Подвал.Параметры.ФИОГлавБухгалтера     = ЗаместительПоПриказу;
                Если ЗначениеЗаполнено(ДанныеОтветственногоЛица.Должность) Тогда
                    Подвал.Параметры.ДолжностьГлавБух = "" + ДанныеОтветственногоЛица.ДолжностьПредставление;
                КонецЕсли;
            Иначе
                Подвал.Параметры.ФИОГлавБухгалтера     = ОтветственныеЛицаОрганизации.ГлавныйБухгалтерПредставление;
                Подвал.Параметры.ДолжностьГлавБух      = ОтветственныеЛицаОрганизации.ГлавныйБухгалтерДолжностьПредставление;
            КонецЕсли;
           
            Если ЗначениеЗаполнено(ВыборкаШапки.ОтпускПроизвел) Тогда
                ДанныеФизЛица = ОбщегоНазначенияБПВызовСервера.ДанныеФизЛица(ВыборкаШапки.Организация,ВыборкаШапки.ОтпускПроизвел,ВыборкаШапки.ДатаДокумента);
                Подвал.Параметры.ДолжностьКладовщика = ДанныеФизЛица.Должность;
                Подвал.Параметры.ФИОКладовщика = ДанныеФизЛица.Представление;
            КонецЕсли;
           
            ИтогНДС      = ВыборкаСтрок.Итог("СуммаНДС");
           
            Подвал.Параметры.КоличествоПорядковыхНомеровЗаписейПрописью = ЧислоПрописью(ВыборкаСтрок.Количество(), ,",,,с,,,,,0");
            Подвал.Параметры.СуммаПрописью                              = ОбщегоНазначенияБПВызовСервера.СформироватьСуммуПрописью(ВыборкаСтрок.Итог("СуммаСНДС"), ВалютаРегламентированногоУчета);
            Подвал.Параметры.ИтогНДС                                    = ?(ЗначениеЗаполнено(ИтогНДС), Формат(Цел(ИтогНДС), "ЧДЦ=0") + " руб. " + Формат((ИтогНДС - Цел(ИтогНДС)) * 100, "ЧЦ=2; ЧВН=") + " коп. ", "______ руб. ______ коп.");
           
            // Инициализируем счетчик страниц
            НомерСтраницы = 1;
           
            // Выведем заголовок табличной части
            ТабличныйДокумент.Вывести(ЗаголовокТаблицы);
           
            // Выведем выборку строк
            Для каждого СтрокаВыборки Из ВыборкаСтрок Цикл
               
                СтрокаТаблицы.Параметры.Заполнить(СтрокаВыборки);
               
                СтрокаСПодвалом = Новый Массив;
                СтрокаСПодвалом.Добавить(СтрокаТаблицы);
                //СтрокаСПодвалом.Добавить(ПодвалТаблицы);
               
                // Если обрабатываемая строка - последняя, будем проверять, помещается ли подвал документа
                Если ВыборкаСтрок.Индекс(СтрокаВыборки) = ВыборкаСтрок.Количество() - 1 Тогда
                    СтрокаСПодвалом.Добавить(Подвал);
                КонецЕсли;
               
                Если НЕ ОбщегоНазначенияБПВызовСервера.ПроверитьВыводТабличногоДокумента(ТабличныйДокумент, СтрокаСПодвалом) Тогда
                    //ТабличныйДокумент.Вывести(ПодвалТаблицы);
                    ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
                    НомерСтраницы = НомерСтраницы + 1;
                    ЗаголовокТаблицы.Параметры.НомерСтраницы = "Страница " + НомерСтраницы;
                    ТабличныйДокумент.Вывести(ЗаголовокТаблицы);
                КонецЕсли;
               
                ТабличныйДокумент.Вывести(СтрокаТаблицы);
               
            КонецЦикла;
           
            // Выведем все подвалы
           
            ТабличныйДокумент.Вывести(Подвал);
           
            // В табличном документе зададим имя области, в которую был
            // выведен объект. Нужно для возможности печати покомплектно.
            УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент,
            НомерСтрокиНачало, ОбъектыПечати, ВыборкаШапки.Ссылка);
           
        КонецЦикла;
       
        Возврат ТабличныйДокумент;
       
    КонецФункции
    
    
    
    я так поняла, в этой функции мы выводим макет.
    в строчке Макет = УправлениеПечатью.МакетПечатнойФормы("ПФ_MXL_М15"); мы задаём выбор макета? просто в исходном коде(так скажем) было написано "ОбщийМакет.ПФ_MXL_M15" как-то так) из уроков я увидела, что когда мы добавляем в свой модуль, данный макет, то путь переписывается. т.е. обращается в корень модуля)
  2. bajiepka
    Offline

    bajiepka Опытный в 1С

    Регистрация:
    26 сен 2014
    Сообщения:
    322
    Симпатии:
    22
    Баллы:
    29
    может просто пройтись отладчиком по впф?
    --- Объединение сообщений, 10 ноя 2015 ---
    Макет = УправлениеПечатью.МакетПечатнойФормы("ПФ_MXL_М15") поменяй на функцию Макет = ПолучитьМакет(). Сам макет тогда подтянется из доступных в впф. Быстрее и понятнее.
  3. Yuriy_Alexandrovich
    Offline

    Yuriy_Alexandrovich Профессионал в 1С Команда форума

    Регистрация:
    15 сен 2011
    Сообщения:
    1.275
    Симпатии:
    76
    Баллы:
    54
    Доброго всем, в процедуре :
    Код:
    Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода)
    
    в "КоллекцияПечатныхФорм" (тип таблица значений) нужно найти свою печатную форму,
    и в соответствующее поле поместить результирующий табличный документ :
    Код:
    МассивСтрокСПечатнымиФормами = КоллекцияПечатныхФорм.НайтиСтроки(Новй Структура("ИмяМакета",<Уникальный идентификатор команды, в функции "СведенияОВнешнейОбработке">));
    Если МассивСтрокСПечатнымиФормами.Количество() > 0 Тогда
         СтрокаСПечатнойФормой = МассивСтрокСПечатнымиФормами.Получить(0);
         СтрокаСПечатнойФормой.ТабличныйДокумент = <Табличный документ получаемый в результате выполнения процедур печатной формы>;
    КонецЕсли;
    
    --- Объединение сообщений, 10 ноя 2015 ---
    Возможно это еще не все :)
  4. TopicStarter Overlay
    iLona90
    Offline

    iLona90 Опытный в 1С

    Регистрация:
    9 ноя 2015
    Сообщения:
    131
    Симпатии:
    2
    Баллы:
    29
    простите но я не совсем поняла...
    я всё проверила. с именами всё хорошо:(
    --- Объединение сообщений, 10 ноя 2015 ---
    отладчик у меня вроде бы всё пропускает. я имею ввиду пишет синтаксических ошибок не обнаружено.
  5. bajiepka
    Offline

    bajiepka Опытный в 1С

    Регистрация:
    26 сен 2014
    Сообщения:
    322
    Симпатии:
    22
    Баллы:
    29
    табличный документ формируется?
  6. Yuriy_Alexandrovich
    Offline

    Yuriy_Alexandrovich Профессионал в 1С Команда форума

    Регистрация:
    15 сен 2011
    Сообщения:
    1.275
    Симпатии:
    76
    Баллы:
    54
    Код :
    Код:
    Макет = УправлениеПечатью.МакетПечатнойФормы("ПФ_MXL_М15")
    
    пойдет искать макет в регистре сведений "ПользовательскиеМакетыПечати" или постарается найти в общих макетах, в объектах конфигурации.
    Вы же хотите подсунуть макет из внешней обработки, для этого его нужно получить методом ПолучитьМакет() :
    Код:
    Макет = ЭтотОбъект.ПолучитьМакет("ПФ_MXL_М15");
    --- Объединение сообщений, 10 ноя 2015 ---
    Проверил на демо базе :
    upload_2015-11-10_15-10-3.png
    работает :)
    --- Объединение сообщений, 10 ноя 2015 ---
    ЧУП "МАВ" - так мило :)
    Последнее редактирование: 10 ноя 2015
    iLona90 нравится это.
  7. TopicStarter Overlay
    iLona90
    Offline

    iLona90 Опытный в 1С

    Регистрация:
    9 ноя 2015
    Сообщения:
    131
    Симпатии:
    2
    Баллы:
    29
    вы просто бог) рабоотает!)) -Kiss--Kiss--Kiss- спасибо всем кто помогал;)

Поделиться этой страницей