В начало

Отчет "Должники без соглашения"

 

 

Листинг. Модуль объекта отчета

Функция УсловияДляСтроковогаТипа(Знач вхОтбор)

           

            ЛЗ = Строка(вхОтбор.ЛевоеЗначение);//Для сравнения по шаблонам

            ВС = Строка(вхОтбор.ВидСравнения);

            ПЗ = вхОтбор.ПравоеЗначение;//Параметры вставлять или так или с "%" в тексте запроса

                                                 

            Если ВС = "Содержит" Тогда

                        Возврат  " ПОДОБНО ""%" +  ПЗ + "%""";

            ИначеЕсли ВС = "Не содержит" Тогда

                        Возврат " НЕ ПОДОБНО ""%" + ПЗ + "%""";

            ИначеЕсли ВС = "Начинается с" Тогда

                        Возврат " ПОДОБНО """ + ПЗ + "%""";                  

            ИначеЕсли ВС = "Не начинается с" Тогда

                        Возврат " НЕ ПОДОБНО """ + ПЗ + "%""";

            ИначеЕсли ВС = "Соответствует шаблону" Тогда

                        Возврат " ПОДОБНО &" + ЛЗ;

            ИначеЕсли ВС = "Не соответствует шаблону" Тогда

                        Возврат " НЕ ПОДОБНО &" + ЛЗ;

            ИначеЕсли ВС = "Заполнено" Тогда

                        Возврат " <>""""";

            ИначеЕсли ВС = "Не заполнено" Тогда

                        Возврат " = """"";

            Иначе

                        Возврат Неопределено;

            КонецЕсли;   

                       

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

 

Функция УсловияДляЧисловогоТипа(Знач вхОтбор)

           

            ЛЗ = Строка(вхОтбор.ЛевоеЗначение);

            ВС = Строка(вхОтбор.ВидСравнения);

           

            Если ВС = "Равно" Тогда

                        Возврат  " = &" + ЛЗ;

            ИначеЕсли ВС = "Не равно" Тогда

                        Возврат " <> &" + ЛЗ;

            ИначеЕсли ВС = "Больше" Тогда

                        Возврат " > &" + ЛЗ;            

            ИначеЕсли ВС = "Больше или равно" Тогда

                        Возврат " >= &" + ЛЗ;

            ИначеЕсли ВС = "Меньше" Тогда

                        Возврат " < &" + ЛЗ;

            ИначеЕсли ВС = "Меньше или равно" Тогда

                        Возврат " <= &" + ЛЗ;

            ИначеЕсли ВС = "В списке" Тогда

                        Возврат " В (&" + ЛЗ + ")";

            ИначеЕсли ВС = "Не в списке" Тогда

                        Возврат "НЕ " + ЛЗ + " В (&" + ЛЗ + ")";

            ИначеЕсли ВС = "Заполнено" Тогда

                        Возврат " <> 0";

            ИначеЕсли ВС = "Не заполнено" Тогда

                        Возврат " = 0";          

            Иначе

                        Возврат Неопределено;

            КонецЕсли;   

                       

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

 

 

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)

           

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

                       

            СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");  

            Настройки = КомпоновщикНастроек.ПолучитьНастройки();    

           

            исГород =Ложь;

            исТелефон = Ложь; 

            исПочта = Ложь;

            исУК = Ложь;

            исДолгСУчетомОплатыТекущегоМесяцаМин = Ложь;

            исДолгСУчетомОплатыТекущегоМесяцаМакс = Ложь;

            исМесяцевДолгаОт = Ложь;

            исМесяцевДолгаДо = Ложь;

           

            Для Каждого Эл Из Настройки.Отбор.Элементы Цикл 

                        Если Эл.Использование Тогда

                                  

                                   Если Строка(Эл.ЛевоеЗначение) = "Город" И

                                                Строка(Эл.ВидСравнения) = "Равно" Тогда

                                               исГород = Истина;

                                               пзГород = Эл.ПравоеЗначение;

                                   КонецЕсли;

                                  

                                   Если Строка(Эл.ЛевоеЗначение) = "Телефон" Тогда

                                               усТелефон = УсловияДляСтроковогаТипа(Эл);

                                               исТелефон = Истина;                     

                                               пзТелефон = Эл.ПравоеЗначение;

                                   КонецЕсли;

 

                                   Если Строка(Эл.ЛевоеЗначение) = "Почта" Тогда

                                               усПочта = УсловияДляСтроковогаТипа(Эл);

                                               исПочта = Истина;                      

                                               пзПочта = Эл.ПравоеЗначение;

                                   КонецЕсли;

 

                                   Если Строка(Эл.ЛевоеЗначение) = "УК" И

                                                Строка(Эл.ВидСравнения) = "Равно" Тогда

                                               исУК = Истина;

                                               пзУК = Эл.ПравоеЗначение;

                                   КонецЕсли;

                                  

                                   Если Строка(Эл.ЛевоеЗначение) = "ДолгСУчетомОплатыТекущегоМесяцаМин" Тогда

                                               усДолгСУчетомОплатыТекущегоМесяцаМин = УсловияДляЧисловогоТипа(Эл);

                                               исДолгСУчетомОплатыТекущегоМесяцаМин = Истина;

                                               пзДолгСУчетомОплатыТекущегоМесяцаМин = Эл.ПравоеЗначение;

                                   КонецЕсли;

 

                                   Если Строка(Эл.ЛевоеЗначение) = "ДолгСУчетомОплатыТекущегоМесяцаМакс" Тогда 

                                               усДолгСУчетомОплатыТекущегоМесяцаМакс = УсловияДляЧисловогоТипа(Эл);

                                               исДолгСУчетомОплатыТекущегоМесяцаМакс = Истина;

                                               пзДолгСУчетомОплатыТекущегоМесяцаМакс = Эл.ПравоеЗначение;

                                   КонецЕсли;

 

                                   Если Строка(Эл.ЛевоеЗначение) = "МесяцевДолгаОт" Тогда

                                               усМесяцевДолгаОт = УсловияДляЧисловогоТипа(Эл);

                                               исМесяцевДолгаОт = Истина;

                                               пзМесяцевДолгаОт = Эл.ПравоеЗначение;

                                   КонецЕсли;

 

                                   Если Строка(Эл.ЛевоеЗначение) = "МесяцевДолгаДо" Тогда

                                               усМесяцевДолгаДо = УсловияДляЧисловогоТипа(Эл);

                                               исМесяцевДолгаДо = Истина;

                                               пзМесяцевДолгаДо = Эл.ПравоеЗначение;

                                   КонецЕсли;

                                  

                        КонецЕсли;   

            КонецЦикла;

           

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

           

            МойЗапрос.Текст = "ВЫБРАТЬ

                              |     Партнеры.УК_ЛицевойСчетЕИРЦ КАК ЛС,

                              |     Партнеры.Ссылка КАК Ссылка,

                              |     F1_СоглашениеОРассрочкеПлатежа.Должник КАК Должник,

                              |     Партнеры.ДолгСУчетомОплатыТекущегоМесяца КАК ДолгСУчетомОплатыТекущегоМесяца,

                              |     Партнеры.ДолгСУчетомОплатыТекущегоМесяца КАК ДолгСУчетомОплатыТекущегоМесяцаМин,

                              |     Партнеры.ДолгСУчетомОплатыТекущегоМесяца КАК ДолгСУчетомОплатыТекущегоМесяцаМакс,

                              |     Партнеры.F1_ТелефонСтрока КАК Телефон,

                              |     Партнеры.УК_Почта КАК Почта,

                              |     Партнеры.F1_Город КАК Город,

                              |     Партнеры.F1_УправляющаяКомпания КАК УК,

                              |     Партнеры.F1_МесяцевДолга КАК МесяцевДолга,

                                                             |         Партнеры.F1_МесяцевДолга КАК МесяцевДолгаОт,

                                                             |         Партнеры.F1_МесяцевДолга КАК МесяцевДолгаДо

                              |ИЗ

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

                              |                 ЛЕВОЕ СОЕДИНЕНИЕ Документ.F1_СоглашениеОРассрочкеПлатежа КАК F1_СоглашениеОРассрочкеПлатежа

                              |                 ПО (F1_СоглашениеОРассрочкеПлатежа.Должник = Партнеры.Ссылка)

                              |ГДЕ

                              |     F1_СоглашениеОРассрочкеПлатежа.Должник ЕСТЬ NULL

                              |     И 1 = 1

                              |     И 2 = 2

                              |     И 3 = 3

                              |     И 4 = 4

                              |     И 5 = 5

                              |     И 6 = 6

                              |     И 7 = 7

                              |     И 8 = 8";                           

           

            //Дополнительные поля с "Мин" и "Макс" нужны для идентификации в отборах

           

            //Добавляем условия в запрос и задаем параметры

            Если исГород Тогда

                        МойЗапрос.Текст = СтрЗаменить(МойЗапрос.Текст, "1 = 1", "Партнеры.F1_Город В (&Город)");

                        МойЗапрос.УстановитьПараметр("Город", пзГород);

            КонецЕсли;

 

            Если исТелефон Тогда

                        МойЗапрос.Текст = СтрЗаменить(МойЗапрос.Текст, "2 = 2", "Партнеры.F1_ТелефонСтрока" + усТелефон);

                        МойЗапрос.УстановитьПараметр("Телефон", пзТелефон);

            КонецЕсли;

 

            Если исПочта Тогда

                        МойЗапрос.Текст = СтрЗаменить(МойЗапрос.Текст, "3 = 3", "Партнеры.УК_Почта" + усПочта);

                        МойЗапрос.УстановитьПараметр("Почта", пзПочта);

            КонецЕсли;

 

            Если исУК Тогда

                        МойЗапрос.Текст = СтрЗаменить(МойЗапрос.Текст, "4 = 4", "Партнеры.F1_УправляющаяКомпания = &УК");

                        МойЗапрос.УстановитьПараметр("УК", пзУК);

            КонецЕсли;

 

            Если исДолгСучетомОплатыТекущегоМесяцаМин Тогда

                        МойЗапрос.Текст = СтрЗаменить(МойЗапрос.Текст, "5 = 5", "Партнеры.ДолгСУчетомОплатыТекущегоМесяца" + усДолгСучетомОплатыТекущегоМесяцаМин);

                        МойЗапрос.УстановитьПараметр("ДолгСучетомОплатыТекущегоМесяцаМин", пзДолгСучетомОплатыТекущегоМесяцаМин);

            КонецЕсли;

 

            Если исДолгСучетомОплатыТекущегоМесяцаМакс Тогда

                        МойЗапрос.Текст = СтрЗаменить(МойЗапрос.Текст, "6 = 6", "Партнеры.ДолгСУчетомОплатыТекущегоМесяца" + усДолгСУчетомОплатыТекущегоМесяцаМакс);

                        МойЗапрос.УстановитьПараметр("ДолгСучетомОплатыТекущегоМесяцаМакс", пзДолгСучетомОплатыТекущегоМесяцаМакс);

            КонецЕсли;

 

            Если исМесяцевДолгаОт Тогда

                        МойЗапрос.Текст = СтрЗаменить(МойЗапрос.Текст, "7 = 7", "Партнеры.F1_МесяцевДолга" + усМесяцевДолгаОт);

                        МойЗапрос.УстановитьПараметр("МесяцевДолгаОт", пзМесяцевДолгаОт);

            КонецЕсли;

 

            Если исМесяцевДолгаДо Тогда

                        МойЗапрос.Текст = СтрЗаменить(МойЗапрос.Текст, "8 = 8", "Партнеры.F1_МесяцевДолга" + усМесяцевДолгаДо);

                        МойЗапрос.УстановитьПараметр("МесяцевДолгаДо", пзМесяцевДолгаДо);

            КонецЕсли;

                       

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

           

            Если Результат.Пустой() Тогда

                        Возврат;

            КонецЕсли;    

                       

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

            //Из ТЗ выгружаем колонку с ссылками и засовываем ее в строку

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

                       

            ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;

            КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);    

           

            ВнешнийНаборДанных = Новый Структура("НаборДанных2", Выгрузка);

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

            ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешнийНаборДанных, ДанныеРасшифровки);     

           

            ДокументРезультат.Очистить();

            ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;

            ПроцессорВывода.УстановитьДокумент(ДокументРезультат);

            ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);

           

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

 

 

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

&НаСервере

Функция ПолучитьВыгрузкуНаСервере()

           

            Если ЗначениеЗаполнено(Отчет.ВыгрузкаДляБота) Тогда        

                        Возврат ЗначениеИзСтрокиВнутр(Отчет.ВыгрузкаДляБота);

            Иначе

                        Возврат Неопределено;

            КонецЕсли;   

           

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

 

&НаКлиенте

Процедура СоздатьЗаданиеДляБота(Команда)

 

            МассивСсылок = ПолучитьВыгрузкуНаСервере();    

           

            Если НЕ ЗначениеЗаполнено(МассивСсылок) Тогда

                        Сообщить("Сначала нужно сформировать отчет");

                        Возврат;

            КонецЕсли;   

           

            Парам1 = Новый Структура("МассивСсылок", МассивСсылок);

           

            ОткрытьФорму("Справочник.Партнеры.Форма.ФормаВводаПараметровБота", Парам1, ЭтаФорма);

           

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

 

Рис. Отчет в пользовательском режиме