В начало

Колонка отчета в формате JSON

 

            Нужно в отчет добавить колонку в формате JSON.

           

 

Рис. Пример работы с форматом JSON

 

В обычный СКД-отчет колонку добавить мне не удалось, поэтому действовать будем через процессор вывода. Основная процедура в модуле объекта отчета это «ПриКомпоновкеРезультата», а функция  «ГрафикПлатежейВJSON» служит для преобразования табличной части документа в форматную строку JSON.

На закладке «Наборы данных» создаем набор данных, который будем заполнять вручную.

Рис. Схема компоновки данных, вкладка «Наборы данных»

 

            Далее приведена закладка «Параметры».

Рис. Закладка «Параметры»

 

Листинг. Содержимое модуля объекта отчета

Функция ГрафикПлатежейВJSON(Знач СсылкаНаГП)

           

            Масс = Новый Массив;

           

            Для Каждого Эл Из СсылкаНаГП Цикл

 

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

                        Струк.Вставить("date", Формат(Эл.Дата, "ДФ=dd.MM.yyyy"));

                       

                        Если ЗначениеЗаполнено(Эл.Сумма) Тогда

                                   Струк.Вставить("schedule_plan", Формат(Эл.Сумма, "ЧДЦ=2"));

                        Иначе

                                   Струк.Вставить("schedule_plan", "");

                        КонецЕсли;   

                       

                        Если ЗначениеЗаполнено(Эл.НадоОплатитьПоГрафику) Тогда

                                   Струк.Вставить("schedule_fact", Формат(Эл.НадоОплатитьПоГрафику, "ЧДЦ=2"));

                        Иначе                                                                         

                                   Струк.Вставить("schedule_fact", "");

                        КонецЕсли;   

                       

                        Если ЗначениеЗаполнено(Эл.Оплачено) Тогда

                                   Струк.Вставить("payed", Формат(Эл.Оплачено, "ЧДЦ=2"));     

                        Иначе

                                   Струк.Вставить("payed", "");

                        КонецЕсли;   

                       

                        Масс.Добавить(Струк);

           

            КонецЦикла;

           

            ЗаписьJSON = Новый ЗаписьJSON;

            ЗаписьJSON.УстановитьСтроку();

            ЗаписатьJSON(ЗаписьJSON, Масс);

           

            //Возврат ЗаписьJSON.Закрыть();  

            //Удаляем символы переноса и возврата каретки для компактности

            Возврат СтрЗаменить(ЗаписьJSON.Закрыть(),  Символы.ВК + Символы.ПС, "");

КонецФункции//ГрафикПлатежейВJSON

 

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

 

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

           

            ДатаЗаключенияНачало = Дата(1,1,1);

            ДатаЗаключенияОкончание = Дата(1,1,1);

           

            ТЗРезультат  = Новый ТаблицаЗначений;  

           

            СоздатьКолонкиТЗ(ТЗРезультат);

                       

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

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

           

            ПараметрКомпоновкиДанныхДатаЗаключенияНачало = Новый ПараметрКомпоновкиДанных("ДатаЗаключенияНачало");

            ПараметрКомпоновкиДанныхДатаЗаключенияОкончание = Новый ПараметрКомпоновкиДанных("ДатаЗаключенияОкончание");

           

            Для Каждого СтрЭлемент из КомпоновщикНастроек.ПользовательскиеНастройки.Элементы Цикл 

                        Если СтрЭлемент.Использование = Истина Тогда

                                   Если СтрЭлемент.Параметр = ПараметрКомпоновкиДанныхДатаЗаключенияНачало Тогда

                                               ДатаЗаключенияНачало = СтрЭлемент.Значение.Дата; 

                                   ИначеЕсли СтрЭлемент.Параметр = ПараметрКомпоновкиДанныхДатаЗаключенияОкончание Тогда

                                               ДатаЗаключенияОкончание = СтрЭлемент.Значение.Дата;

                                   КонецЕсли;   

                        КонецЕсли;

           

            КонецЦикла;  

           

           

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

           

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                              |     F1_СоглашениеОРассрочкеПлатежа.п50 КАК СуммаПервоначальногоВзноса

                              |ИЗ

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

                              |ГДЕ

                              |     F1_СоглашениеОРассрочкеПлатежа.ПометкаУдаления = ЛОЖЬ

                              |     И F1_СоглашениеОРассрочкеПлатежа.Дата >= &ДатаЗаключенияНачало

                              |     И F1_СоглашениеОРассрочкеПлатежа.Дата <= &ДатаЗаключенияОкончание";     

           

           

            МойЗапрос.УстановитьПараметр("ДатаЗаключенияНачало", ДатаЗаключенияНачало);

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

           

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

           

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

                        Возврат;

            КонецЕсли;    

                       

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

            Выгрузка.Колонки.Добавить("ГрафикПлатежей");

           

            Для Каждого Эл Из Выгрузка Цикл

                         Эл.ГрафикПлатежей = ГрафикПлатежейВJSON(Эл.Ссылка.ГрафикПлатежей);

            КонецЦикла;

           

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

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

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

           

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

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

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

           

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

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

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

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

           

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

 

 

            Запускаем режим отладки и тестируем отчет.

Рис. Колонка «График платежей» в формате JSON

 

            Видим, что колонка выводится в формате, указанном в ТЗ.