В начало

Задолженности и лицевые счета

 

            Внешний отчет «Задолженности и лицевые счета». Отчет содержит реквизиты: «ДатаОтчета», «Город» и «ПоставащикУслугУКРСО», которые нужны для ввода параметров запроса.

Рис. Структура внешней обработки «Задолженности и лицевые счета»

 

            Также необходимо на закладке «Команды» добавить команду «СформироватьОтчет», перетащив которую в левую часть с элементами, создаем одноименную кнопку.

Рис. Форма внешней обработки

 

            Кроме этого, надо создать макет отчета, для дальнейшего заполнения результатами запроса. Макет содержит 5 колонок и 4 области.

Рис. Макет внешней обработки

 

            Далее приведены процедуры, расположенные в модуле формы внешней обработки.

 

Листинг. Модуль формы обработки

&НаСервере

Процедура ВывестиОтчет(ТабДок) Экспорт

            ТабДок.АвтоМасштаб = Истина;

            ТабДок.ОриентацияСтраницы         = ОриентацияСтраницы.Ландшафт;

            ТабДок.ИмяПараметровПечати       = "ПАРАМЕТРЫ_ПЕЧАТИ_ЗадолженностиИКоличествоЛС";

            Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("ЗадолженностиИКоличествоЛС");

                          

            Запрос = Новый Запрос();

            Запрос.Текст =

            "ВЫБРАТЬ

            |          КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Партнеры.Ссылка) КАК КоличествоЛСДо1Года,

            |          СУММА(Партнеры.F1_Долг) КАК ЗадолженностьДо1Года

            |ПОМЕСТИТЬ втДо1Года

            |ИЗ

            |          Справочник.Партнеры КАК Партнеры

            |                     ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УК_ПоставщикиУслуг КАК УК_ПоставщикиУслуг

            |                     ПО Партнеры.F1_УправляющаяКомпания = УК_ПоставщикиУслуг.Ссылка

            |ГДЕ

            |          Партнеры.F1_ДатаПоследнейОплаты > ДОБАВИТЬКДАТЕ(&ДатаОтчета, ГОД, -1)

            |          И Партнеры.F1_ДатаПоследнейОплаты <= &ДатаОтчета

            |          И Партнеры.F1_Город = &Город

            |          И УК_ПоставщикиУслуг.Ссылка = &ПоставщикУслуг

            |;

            |

            |////////////////////////////////////////////////////////////////////////////////

            |ВЫБРАТЬ

            |          КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Партнеры.Ссылка) КАК КоличествоЛСот1ГодаДо3,

            |          СУММА(Партнеры.F1_Долг) КАК ЗадолженностгОт1ГодаДо3лет

            |ПОМЕСТИТЬ втОт1ГодаДо3Лет

            |ИЗ

            |          Справочник.Партнеры КАК Партнеры

            |                     ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УК_ПоставщикиУслуг КАК УК_ПоставщикиУслуг

            |                     ПО Партнеры.F1_УправляющаяКомпания = УК_ПоставщикиУслуг.Ссылка

            |ГДЕ

            |          Партнеры.F1_ДатаПоследнейОплаты > ДОБАВИТЬКДАТЕ(&ДатаОтчета, ГОД, -3)

            |          И Партнеры.F1_ДатаПоследнейОплаты <= ДОБАВИТЬКДАТЕ(&ДатаОтчета, ГОД, -1)

            |          И Партнеры.F1_Город = &Город

            |          И УК_ПоставщикиУслуг.Ссылка = &ПоставщикУслуг

            |;

            |

            |////////////////////////////////////////////////////////////////////////////////

            |ВЫБРАТЬ

            |          КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Партнеры.Ссылка) КАК КоличествоЛСсвыше3Лет,

            |          СУММА(Партнеры.F1_Долг) КАК ЗадолженностьСвыше3Лет

            |ПОМЕСТИТЬ Свыше3лет

            |ИЗ

            |          Справочник.Партнеры КАК Партнеры

            |                     ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УК_ПоставщикиУслуг КАК УК_ПоставщикиУслуг

            |                     ПО Партнеры.F1_УправляющаяКомпания = УК_ПоставщикиУслуг.Ссылка

            |ГДЕ

            |          Партнеры.F1_ДатаПоследнейОплаты <= ДОБАВИТЬКДАТЕ(&ДатаОтчета, ГОД, -3)

            |          И Партнеры.F1_Город = &Город

            |          И УК_ПоставщикиУслуг.Ссылка = &ПоставщикУслуг

            |;

            |

            |////////////////////////////////////////////////////////////////////////////////

            |ВЫБРАТЬ

            |          втДо1Года.КоличествоЛСДо1Года КАК КоличествоЛСДо1Года,

            |          втОт1ГодаДо3Лет.КоличествоЛСот1ГодаДо3 КАК КоличествоЛСот1ГодаДо3лет,

            |          Свыше3лет.КоличествоЛСсвыше3Лет КАК КоличествоЛСсвыше3Лет,

            |          ЕСТЬNULL(втДо1Года.ЗадолженностьДо1Года, 0) КАК ЗадолженностьДо1Года,

            |          ЕСТЬNULL(втОт1ГодаДо3Лет.ЗадолженностгОт1ГодаДо3лет, 0) КАК ЗадолженностьОт1ГодаДо3лет,

            |          ЕСТЬNULL(Свыше3лет.ЗадолженностьСвыше3Лет, 0) КАК ЗадолженностьСвыше3Лет

            |ИЗ

            |          втДо1Года КАК втДо1Года,

            |          втОт1ГодаДо3Лет КАК втОт1ГодаДо3Лет,

            |          Свыше3лет КАК Свыше3лет";

 

            Запрос.УстановитьПараметр("ДатаОтчета", Объект.ДатаОтчета);

            Запрос.УстановитьПараметр("Город", Объект.Город);

            Запрос.УстановитьПараметр("ПоставщикУслуг", Объект.ПоставщикУслугУКРСО);

 

            Результат = Запрос.Выполнить();

            Выборка = Результат.Выбрать();

                                  

            Если Выборка.Следующий() Тогда

                        //=========================

                        // Область "Шапка"

                        //==========================               

                        ОбластьШапка = Макет.ПолучитьОбласть("Шапка");        

                       

                        ТабДок.Вывести(ОбластьШапка);

                       

                        //==================================

                        // Область "Величина задолженности"

                        //==================================                                  

                        ОбластьВЗ = Макет.ПолучитьОбласть("ВеличинаЗадолженности"); 

                        ОбластьВЗ.Параметры.ЗадолженностьДо1Года = Выборка.ЗадолженностьДо1Года;

                        ОбластьВЗ.Параметры.ЗадолженностьОт1годаДо3Лет = Выборка.ЗадолженностьОт1годаДо3Лет;

                        ОбластьВЗ.Параметры.ЗадолженностьСвыше3лет = Выборка.ЗадолженностьСвыше3лет;

                        ОбластьВЗ.Параметры.ЗадолженностьИтого = Выборка.ЗадолженностьДо1Года + Выборка.ЗадолженностьОт1годаДо3Лет + Выборка.ЗадолженностьСвыше3лет;                     

                       

                        ТабДок.Вывести(ОбластьВЗ);

                       

                        //==================================

                        // Область "КоличествоЛС"

                        //==================================                                  

                        ОбластьКоличЛС = Макет.ПолучитьОбласть("КоличествоЛС"); 

                        ОбластьКоличЛС.Параметры.КоличествоЛСДо1Года = Выборка.КоличествоЛСДо1Года;

                        ОбластьКоличЛС.Параметры.КоличествоЛСОт1годаДо3Лет = Выборка.КоличествоЛСОт1годаДо3Лет;

                        ОбластьКоличЛС.Параметры.КоличествоЛССвыше3лет = Выборка.КоличествоЛССвыше3лет;

                        ОбластьКоличЛС.Параметры.КоличествоЛСИтого = Выборка.КоличествоЛСДо1Года + Выборка.КоличествоЛСОт1годаДо3Лет + Выборка.КоличествоЛССвыше3лет;                       

                       

                        ТабДок.Вывести(ОбластьКоличЛС);            

                       

                        //==================================

                        // Область "ЗадолженностьНа1ЛС"

                        //==================================                                  

                        ЗадНа1ЛС = Макет.ПолучитьОбласть("ЗадолженностьНа1ЛС");                    

                        Если Выборка.КоличествоЛСДо1Года <> 0 Тогда

                                   ЗадНа1ЛС.Параметры.ЗадНа1СЛДо1Года = Формат(Выборка.ЗадолженностьДо1Года / Выборка.КоличествоЛСДо1Года, "ЧЦ=10; ЧДЦ=2");

                        Иначе

                                   ЗадНа1ЛС.Параметры.ЗадНа1СЛДо1Года = "";

                        КонецЕсли;    

                       

                        Если Выборка.КоличествоЛСОт1годаДо3Лет <> 0 Тогда

                                   ЗадНа1ЛС.Параметры.ЗадНа1ЛСОт1годаДо3Лет = Формат(Выборка.ЗадолженностьОт1годаДо3Лет / Выборка.КоличествоЛСОт1годаДо3Лет, "ЧЦ=10; ЧДЦ=2");

                        Иначе                                        

                                   ЗадНа1ЛС.Параметры.ЗадНа1ЛСОт1годаДо3Лет = "";

                        КонецЕсли;

                       

                        Если Выборка.КоличествоЛССвыше3лет <> 0 Тогда

                                   ЗадНа1ЛС.Параметры.ЗадНа1ЛССвыше3лет = Формат(Выборка.ЗадолженностьСвыше3лет / Выборка.КоличествоЛССвыше3лет, "ЧЦ=10; ЧДЦ=2");     

                        Иначе

                                   ЗадНа1ЛС.Параметры.ЗадНа1ЛССвыше3лет = "";

                        КонецЕсли;    

                       

                        Если (Выборка.КоличествоЛСДо1Года + Выборка.КоличествоЛСОт1годаДо3Лет + Выборка.КоличествоЛССвыше3лет)>0 Тогда

                                   ЗадНа1ЛС.Параметры.ЗадНа1ЛСИтого = Формат((Выборка.ЗадолженностьДо1Года + Выборка.ЗадолженностьОт1годаДо3Лет + Выборка.ЗадолженностьСвыше3лет) /

                                   (Выборка.КоличествоЛСДо1Года + Выборка.КоличествоЛСОт1годаДо3Лет + Выборка.КоличествоЛССвыше3лет), "ЧЦ=10; ЧДЦ=2");                        

                        Иначе                                

                                   ЗадНа1ЛС.Параметры.ЗадНа1ЛСИтого = "";

                        КонецЕсли;                                                                                         

                       

                        ТабДок.Вывести(ЗадНа1ЛС);           

                       

            КонецЕсли;                                                                                      

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

 

&НаКлиенте

Процедура ПечатныеФормыПриИзменении(Элемент)

            ТабДок = Новый ТабличныйДокумент;

           

                        ВывестиОтчет(ТабДок);

                         

            ТабДок.ОтображатьСетку = Ложь;

            ТабДок.Защита = Ложь;

            ТабДок.ТолькоПросмотр = Ложь;

            ТабДок.ОтображатьЗаголовки = Ложь;

            ТабДок.Показать();   

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

              

&НаСервере

Процедура СформироватьОтчетНаСервере(ТабДок)

            ВывестиОтчет(ТабДок);

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

 

&НаКлиенте

Процедура СформироватьОтчет(Команда)

            ТабДок = Новый ТабличныйДокумент;

 

            СформироватьОтчетНаСервере(ТабДок);

           

            ТабДок.ОтображатьСетку = Ложь;

            ТабДок.Защита = Ложь;

            ТабДок.ТолькоПросмотр = Ложь;

            ТабДок.ОтображатьЗаголовки = Ложь;

            ТабДок.Показать();

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

 

&НаСервере

Функция ПоставщикиУслугТолькоРСО()

            Запрос = Новый Запрос;

            Запрос.Текст =

            "ВЫБРАТЬ

            |          УК_ПоставщикиУслуг.Ссылка КАК Ссылка

            |ИЗ

            |          Справочник.УК_ПоставщикиУслуг КАК УК_ПоставщикиУслуг

            |ГДЕ

            |          УК_ПоставщикиУслуг.ВидДеятельности = &ВидДеятельности";

           

            Запрос.УстановитьПараметр("ВидДеятельности", Перечисления.УК_ВидыДеятельностиПоставщиков.РСО);

            Результат = Запрос.Выполнить();

            Выгрузка = Результат.Выгрузить().ВыгрузитьКолонку("Ссылка");

            СЗ = Новый СписокЗначений;

            СЗ.ЗагрузитьЗначения(Выгрузка);

 

            Возврат СЗ;   

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

                       

&НаКлиенте

Процедура ПоставщикУслугНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

            СтандартнаяОбработка = Ложь;

           

            ПФ = Новый Структура;

            НК = Новый НастройкиКомпоновкиДанных;

           

            Отбор = НК.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));

            Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка");

            Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;

            Отбор.ПравоеЗначение = ПоставщикиУслугТолькоРСО();//Значения из запроса

            Отбор.Использование = Истина;

            Отбор.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;

           

            ПФ.Вставить("ФиксированныеНастройки", НК);

           

            ОткрытьФорму("Справочник.УК_ПоставщикиУслуг.ФормаВыбора", ПФ, Элемент);                       

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

 

            Запустим режим отладки и протестируем формирование отчета, реализованного в виде внешней обработки.

Рис. Форма внешней обработки в пользовательском режиме

 

            Далее приведен сформированный отчет.

Рис. Сформированный отчет

 

            Таким образом, был сформирован отчет, без использования СКД.