Имя: Пароль:
1C
1С v8
Внешняя обработка печатной формы
🠗 (Serg_1960 25.05.2021 08:52)
0 woody310798
 
25.05.21
08:46
Функция СведенияОВнешнейОбработке() Экспорт
    
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
    
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
    ПараметрыРегистрации.Версия = "1.0";
    ПараметрыРегистрации.Назначение.Добавить("Документ.РеализацияТоваровУслуг");    
    ПараметрыРегистрации.Наименование = СинонимПечатнойФормы();    
    ПараметрыРегистрации.БезопасныйРежим = Истина;
    ПараметрыРегистрации.Информация = НСтр("ru = 'Печатная форма ""Печать32"" (""Печать32"" на русском языке).'");
    
    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление = СинонимПечатнойФормы();
    НоваяКоманда.Идентификатор = ИмяПечатнойФормы();
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
    НоваяКоманда.ПоказыватьОповещение = Истина;
    НоваяКоманда.Модификатор = "ПечатьMXL";
        
    Возврат ПараметрыРегистрации;
    
КонецФункции


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


Функция СинонимПечатнойФормы()
    
    Возврат НСтр("ru = 'З-2 (накладная на отпуск запасов)'");
    
КонецФункции
        
       
Функция ИмяПечатнойФормы()
    
    Возврат "ПечатьЗ2";
    
КонецФункции

Функция ПечатьЗ2(МассивОбъектов, ОбъектыПечати) Экспорт
    
    УстановитьПривилегированныйРежим(Истина);
    
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
    
    Запрос.Текст =
    "ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |    РеализацияТоваровУслуг.Номер,
    |    РеализацияТоваровУслуг.Дата,
    |    РеализацияТоваровУслуг.ДоговорКонтрагента КАК ДоговорКонтрагента,
    |    РеализацияТоваровУслуг.Контрагент КАК Контрагент,
    |    РеализацияТоваровУслуг.Организация,
    |    РеализацияТоваровУслуг.СтруктурноеПодразделение,
    |    РеализацияТоваровУслуг.Склад КАК Склад,
    |    РеализацияТоваровУслуг.СуммаДокумента,
    |    РеализацияТоваровУслуг.ВалютаДокумента,
    |    РеализацияТоваровУслуг.УчитыватьНДС,
    |    РеализацияТоваровУслуг.СуммаВключаетНДС,
    |    РеализацияТоваровУслуг.УчитыватьАкциз,
    |    РеализацияТоваровУслуг.СуммаВключаетАкциз,
    |    РеализацияТоваровУслуг.Грузополучатель,
    |    РеализацияТоваровУслуг.УдалитьДоверенность,
    |    РеализацияТоваровУслуг.ДоверенностьЛицо,
    |    РеализацияТоваровУслуг.Ссылка,
    |    РеализацияТоваровУслуг.МоментВремени,
    |    ВЫБОР
    |        КОГДА РеализацияТоваровУслуг.Ответственный.ФизЛицо <> ЗНАЧЕНИЕ(Справочник.ФизическиеЛица.ПустаяСсылка)
    |            ТОГДА РеализацияТоваровУслуг.Ответственный.ФизЛицо
    |        ИНАЧЕ РеализацияТоваровУслуг.Ответственный
    |    КОНЕЦ КАК Ответственный,
    |    РеализацияТоваровУслуг.ДоверенностьВыдана,
    |    РеализацияТоваровУслуг.ДоверенностьДата,
    |    РеализацияТоваровУслуг.ДоверенностьНомер
    |ПОМЕСТИТЬ ВТ_ДанныеДокумента
    |ИЗ
    |    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    |ГДЕ
    |    РеализацияТоваровУслуг.Ссылка В(&МассивОбъектов)
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    МАКСИМУМ(ОтветственныеЛица.Период) КАК Период,
    |    ОтветственныеЛица.СтруктурнаяЕдиница КАК Склад,
    |    ВТ_ДанныеДокумента.Ссылка
    |ПОМЕСТИТЬ ВТ_ПериодыОтвЛиц
    |ИЗ
    |    РегистрСведений.ОтветственныеЛица КАК ОтветственныеЛица
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ДанныеДокумента КАК ВТ_ДанныеДокумента
    |        ПО ОтветственныеЛица.СтруктурнаяЕдиница = ВТ_ДанныеДокумента.Склад
    |            И ОтветственныеЛица.Период <= ВТ_ДанныеДокумента.Дата
    |
    |СГРУППИРОВАТЬ ПО
    |    ОтветственныеЛица.СтруктурнаяЕдиница,
    |    ВТ_ДанныеДокумента.Ссылка
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ВТ_ПериодыОтвЛиц.Ссылка,
    |    ВТ_ПериодыОтвЛиц.Склад,
    |    ОтветственныеЛица.ФизическоеЛицо
    |ПОМЕСТИТЬ ВТ_МОЛ
    |ИЗ
    |    ВТ_ПериодыОтвЛиц КАК ВТ_ПериодыОтвЛиц
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ОтветственныеЛица КАК ОтветственныеЛица
    |        ПО ВТ_ПериодыОтвЛиц.Период = ОтветственныеЛица.Период
    |            И ВТ_ПериодыОтвЛиц.Склад = ОтветственныеЛица.СтруктурнаяЕдиница
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ВТ_ДанныеДокумента.Номер,
    |    ВТ_ДанныеДокумента.Дата,
    |    ВТ_ДанныеДокумента.Дата КАК ДатаДокумента,
    |    ВТ_ДанныеДокумента.ДоговорКонтрагента КАК Основание,
    |    ВТ_ДанныеДокумента.Контрагент,
    |    ВТ_ДанныеДокумента.Организация,
    |    ВТ_ДанныеДокумента.СтруктурноеПодразделение,
    |    ВТ_ДанныеДокумента.Склад,
    |    ВТ_ДанныеДокумента.СуммаДокумента,
    |    ВТ_ДанныеДокумента.ВалютаДокумента,
    |    ВТ_ДанныеДокумента.УчитыватьНДС,
    |    ВТ_ДанныеДокумента.СуммаВключаетНДС,
    |    ВТ_ДанныеДокумента.УчитыватьАкциз,
    |    ВТ_ДанныеДокумента.СуммаВключаетАкциз,
    |    ВТ_ДанныеДокумента.Грузополучатель,
    |    ВТ_ДанныеДокумента.УдалитьДоверенность,
    |    ВТ_ДанныеДокумента.ДоверенностьЛицо КАК ДоверенностьЛицо,
    |    ВТ_ДанныеДокумента.Ссылка,
    |    ВТ_МОЛ.ФизическоеЛицо КАК ОтпустилМОЛ,
    |    ВТ_ДанныеДокумента.Ответственный,
    |    ВТ_ДанныеДокумента.ДоверенностьВыдана,
    |    ВТ_ДанныеДокумента.ДоверенностьДата,
    |    ВТ_ДанныеДокумента.ДоверенностьНомер
    |ИЗ
    |    ВТ_ДанныеДокумента КАК ВТ_ДанныеДокумента
    |        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_МОЛ КАК ВТ_МОЛ
    |        ПО ВТ_ДанныеДокумента.Ссылка = ВТ_МОЛ.Ссылка
    |
    |УПОРЯДОЧИТЬ ПО
    |    ВТ_ДанныеДокумента.МоментВремени";
        
    ДанныеДокументов = Запрос.Выполнить().Выбрать();

    Запрос.Текст =
    "ВЫБРАТЬ
    |    РеализацияТоваровУслугТовары.Ссылка КАК Ссылка,
    |    МИНИМУМ(РеализацияТоваровУслугТовары.НомерСтроки) КАК НомерСтроки,
    |    РеализацияТоваровУслугТовары.Номенклатура,
    |    ВЫБОР
    |        КОГДА НЕ РеализацияТоваровУслугТовары.Номенклатура.НаименованиеПолное ПОДОБНО """"
    |            ТОГДА ВЫРАЗИТЬ(РеализацияТоваровУслугТовары.Номенклатура.НаименованиеПолное КАК СТРОКА(1000))
    |        ИНАЧЕ РеализацияТоваровУслугТовары.Номенклатура.Наименование
    |    КОНЕЦ КАК ТоварПредставление,
    |    РеализацияТоваровУслугТовары.ЕдиницаИзмерения.Наименование КАК ЕдиницаИзмеренияНаименование,
    |    РеализацияТоваровУслугТовары.Номенклатура.Код КАК ТоварКод,
    |    СУММА(РеализацияТоваровУслугТовары.Количество) КАК Количество,
    |    РеализацияТоваровУслугТовары.Цена,
    |    СУММА(РеализацияТоваровУслугТовары.Сумма) КАК Сумма,
    |    СУММА(РеализацияТоваровУслугТовары.СуммаНДС) КАК СуммаНДС,
    |    СУММА(РеализацияТоваровУслугТовары.СуммаАкциза) КАК СуммаАкциза
    |ИЗ
    |    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    |ГДЕ
    |    РеализацияТоваровУслугТовары.Ссылка В(&МассивОбъектов)
    |
    |СГРУППИРОВАТЬ ПО
    |    РеализацияТоваровУслугТовары.Номенклатура,
    |    РеализацияТоваровУслугТовары.ЕдиницаИзмерения.Наименование,
    |    РеализацияТоваровУслугТовары.Номенклатура.Код,
    |    РеализацияТоваровУслугТовары.Цена,
    |    РеализацияТоваровУслугТовары.Ссылка,
    |    ВЫБОР
    |        КОГДА НЕ РеализацияТоваровУслугТовары.Номенклатура.НаименованиеПолное ПОДОБНО """"
    |            ТОГДА ВЫРАЗИТЬ(РеализацияТоваровУслугТовары.Номенклатура.НаименованиеПолное КАК СТРОКА(1000))
    |        ИНАЧЕ РеализацияТоваровУслугТовары.Номенклатура.Наименование
    |    КОНЕЦ
    |
    |УПОРЯДОЧИТЬ ПО
    |    НомерСтроки
    |ИТОГИ
    |    СУММА(Сумма),
    |    СУММА(СуммаНДС),
    |    СУММА(СуммаАкциза)
    |ПО
    |    Ссылка";
    
    ВыборкаСтрокТоварыИтоги = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
    
    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.КлючПараметровПечати = "РеализацияТоваровУслуг_З2";
        
    Пока ДанныеДокументов.Следующий() Цикл
        
    Макет = ЭтотОбъект.ПолучитьМакет("Накладная");

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

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

        // Выводим заголовок таблицы
        Если УчитыватьАкциз_ Тогда
            ЗаголовокТаблицы = Макет.ПолучитьОбласть("ЗаголовокТаблицыАкциз");
        Иначе
            ЗаголовокТаблицы = Макет.ПолучитьОбласть("ЗаголовокТаблицы");
        КонецЕсли;
        ЗаголовокТаблицы.Параметры.Валюта = ДанныеДокументов.ВалютаДокумента;
        ТабДокумент.Вывести(ЗаголовокТаблицы);

        ИтогоКоличество = 0;
        // Выводим многострочную часть документа
        Если УчитыватьАкциз_ Тогда
            ОбластьСтрокаТаблицы = Макет.ПолучитьОбласть("СтрокаТаблицыАкциз");
        Иначе
            ОбластьСтрокаТаблицы = Макет.ПолучитьОбласть("СтрокаТаблицы");
        КонецЕсли;
        
        НомерСтроки = 1;
        
        ВыборкаСтрокТоварыИтоги.Сбросить();
        
        Если ВыборкаСтрокТоварыИтоги.НайтиСледующий(ДанныеДокументов.Ссылка) Тогда
            ВыборкаСтрокТовары = ВыборкаСтрокТоварыИтоги.Выбрать();
        Иначе
            ВыборкаСтрокТовары = Неопределено;
        КонецЕсли;
        
        Если ВыборкаСтрокТовары <> Неопределено Тогда
            Пока ВыборкаСтрокТовары.Следующий() Цикл

                Количество = ВыборкаСтрокТовары.Количество;
                
                Если Не ОбщегоНазначения.ПроверитьВыводТабличногоДокумента(ТабДокумент, ОбластьСтрокаТаблицы) Тогда
                    ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
                    ТабДокумент.Вывести(ЗаголовокТаблицы);
                КонецЕсли;    

                ОбластьСтрокаТаблицы.Параметры.Заполнить(ВыборкаСтрокТовары);
                ОбластьСтрокаТаблицы.Параметры.НомерПП              = НомерСтроки;
                ОбластьСтрокаТаблицы.Параметры.ТоварНаименование  = СокрЛП(ВыборкаСтрокТовары.ТоварПредставление);
                
                СуммаСНДС = ?(ПрибавлятьНДС, ВыборкаСтрокТовары.Сумма + ВыборкаСтрокТовары.СуммаНДС, ВыборкаСтрокТовары.Сумма);
                Если УчитыватьАкциз_ И ПрибавлятьАкциз Тогда
                    СуммаСНДС = СуммаСНДС + ВыборкаСтрокТовары.СуммаАкциза;
                КонецЕсли;
                ОбластьСтрокаТаблицы.Параметры.СуммаСНДС = СуммаСНДС;
                
                ИтогоКоличество = ИтогоКоличество + Количество;
                
                ТабДокумент.Вывести(ОбластьСтрокаТаблицы);

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

Почему не работает ?
1 Mankubus
 
25.05.21
08:47
переформулируйте вопрос.
что именно не работает?
2 ДенисЧ
 
25.05.21
08:49
Многабуков, ниасилил всио прачетать...
3 END
 
25.05.21
08:49
4 Serg_1960
 
модератор
25.05.21
09:00
(0) Более чётко сформулируйте возникшую проблему.
5 savaB
 
25.05.21
09:06
Процедура ПечатьЗ2(МассивОбъектов, -->> Процедура Печать(МассивОбъектов,
6 mikecool
 
25.05.21
09:44
не работает потому, что не совпадает идентификатор в описании ПФ и ИД, который используется в коде
7 mikecool
 
25.05.21
09:44
+6 в результате - пусто