В начало

Выгрузка показателей в JSON для обмена

 

Листинг. Общий модуль для регламентного задания

 

Процедура ВыгрузитьДанныеВФайл(Текст, ИмяФайла)

              

               ТекстовыйФайл = Новый ТекстовыйДокумент;

               ТекстовыйФайл.УстановитьТекст(текст);

               ТекстовыйФайл.записать(константы.KPI_КаталогДляОбмена.Получить() + "\" + ИмяФайла);

 

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

 

Функция ЗаписатьРезультатВJSON(ПараметрыЗаписиJSON,НачДата,КонДата,Показатель,КодПоказателя,МассивЗначений)

              

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

               ЗаписьJSON.ПроверятьСтруктуру = Ложь;

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

              

              

               ЗаписьJSON.ЗаписатьНачалоОбъекта();

               ЗаписьJSON.ЗаписатьИмяСвойства("Показатель");

               ЗаписьJSON.ЗаписатьЗначение(Показатель);  

               ЗаписьJSON.ЗаписатьИмяСвойства("КодПоказателя");

               ЗаписьJSON.ЗаписатьЗначение(КодПоказателя); 

               ЗаписьJSON.ЗаписатьИмяСвойства("ДатаНачала");

               ЗаписьJSON.ЗаписатьЗначение(Формат(НачДата,"ДФ=ггггММдд"));

               ЗаписьJSON.ЗаписатьИмяСвойства("ДатаОкончания");

               ЗаписьJSON.ЗаписатьЗначение(Формат(КонДата,"ДФ=ггггММдд"));         

               ЗаписьJSON.ЗаписатьИмяСвойства("Данные");

               ЗаписатьJSON(ЗаписьJSON,МассивЗначений);

               ЗаписьJSON.ЗаписатьКонецОбъекта();

              

               Текст = ЗаписьJSON.Закрыть();

               Возврат Текст;

              

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

 

Процедура ВыгрузитьДанные(ИмяФайла, Показатель,КодПоказателя, тз, НачДата, КонДата)   

              

               ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Windows, Символы.Таб);  

               

               тз.колонки.добавить("КодПользователя");

               для каждого текстрока из тз цикл 

 

               Если Текстрока.пользователь = null или Текстрока.пользователь = неопределено или Текстрока.пользователь = "" тогда

               продолжить;

               иначе

 

                  текстрока.кодПользователя = текстрока.пользователь.код;

               

               конецесли;

              

               конеццикла; 

 

               тз.свернуть("пользователь, КодПользователя", "Количество");

               если тз.количество()>0 тогда

               МассивЗначений = Новый Массив;

               для каждого текстрока из тз  Цикл   

               если текстрока.пользователь = "" или текстрока.пользователь = неопределено или текстрока.пользователь = null тогда

               продолжить;

               конецесли;

              

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

               стр.Вставить("ФИОСотрудника", СокрЛП(текстрока.пользователь));

               стр.Вставить("КодСотрудника", СокрЛП(текстрока.КодПользователя));

               стр.Вставить("Показатель" ,   СокрЛП(показатель));

               стр.Вставить("Количество"   , текстрока.Количество/2);

               МассивЗначений.Добавить(Стр);

               стр = неопределено;

               КонецЦикла;

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

               Текст = ЗаписатьРезультатВJSON(ПараметрыЗаписиJSON,НачДата,КонДата, Показатель,КодПоказателя, МассивЗначений);

               ВыгрузитьДанныеВФайл(Текст, ИмяФайла);           

               конецесли;

              

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

 

Процедура ПолучитьДанныеНаОснованииСКД(СКД, ОбъектДляЗагрузки, ИсполняемыеНастройки = Неопределено, СтруктураПараметров = Неопределено, РасшифровкаСКД = Неопределено, МакетКомпоновки = Неопределено, ВнешниеНаборыДанных = Неопределено) Экспорт   

              

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

              

               ТипГенератора = Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений");

               Если ИсполняемыеНастройки = Неопределено Тогда

               ИсполняемыеНастройки = СКД.НастройкиПоУмолчанию;

               КонецЕсли;

               Если СтруктураПараметров <> Неопределено Тогда

               КоллекцияЗначенийПараметров = ИсполняемыеНастройки.ПараметрыДанных.Элементы;

               Для каждого Параметр Из СтруктураПараметров Цикл

               НайденноеЗначениеПараметра = КоллекцияЗначенийПараметров.Найти(Параметр.Ключ);

               Если НайденноеЗначениеПараметра <> Неопределено Тогда

               НайденноеЗначениеПараметра.Использование = Истина;

               НайденноеЗначениеПараметра.Значение = Параметр.Значение;

               КонецЕсли;

               КонецЦикла;

               КонецЕсли;

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

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

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

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

               ПроцессорВывода.УстановитьОбъект(ОбъектДляЗагрузки);

               ПроцессорВывода.ОтображатьПроцентВывода = Истина;

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

              

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

 

Процедура ПолучитьДанныеПоказателя (НачДата, КонДата, ИмяПоказателя,КодПоказателя, ИмяОтчета) 

              

               ДатаВыгрузки = Формат(ТекущаяДата(), "ДЛФ=Д" );

               показатель   = ИмяПоказателя;   

               ИмяФайла     = Показатель + "_" +ДатаВыгрузки+ ".txt";

               ДеревоЗначений    = Новый ТаблицаЗначений;    

               СтруктураПараметров       = Новый Структура("ДатаНачала", НачДата); 

               СтруктураПараметров.Вставить("ДатаОкончания", КонДата);

               ПолучитьДанныеНаОснованииСКД(СхемаКомпоновкиДанных, ДеревоЗначений, СхемаКомпоновкиДанных.НастройкиПоУмолчанию, СтруктураПараметров);

               ВыгрузитьДанные(ИмяФайла, Показатель, КодПоказателя, ДеревоЗначений, НачДата, КонДата);

              

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

 

Функция  ПолучитьПоказатели()

               

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

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

               "ВЫБРАТЬ

               |        KPI_НастройкаПоказателейДляВыгрузки.ИмяПоказателя КАК ИмяПоказателя,

               |        KPI_НастройкаПоказателейДляВыгрузки.ИмяОтчета КАК ИмяОтчета,

               |        KPI_НастройкаПоказателейДляВыгрузки.ИмяДляВыгрузки КАК ИмяДляВыгрузки,

               |        KPI_НастройкаПоказателейДляВыгрузки.КодКПЭ КАК КодКПЭ

               |ИЗ

               |        РегистрСведений.KPI_НастройкаПоказателейДляВыгрузки КАК KPI_НастройкаПоказателейДляВыгрузки

               |ГДЕ

               |        KPI_НастройкаПоказателейДляВыгрузки.АктивностьКПЭ";

              

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

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

              

               Возврат Выборка;

              

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

 

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

           

Показатели  = ПолучитьПоказатели();

Пока Показатели.Следующий() Цикл

            ИмяПоказателя = Показатели.ИмяДляВыгрузки;

            ИмяОтчета  = Показатели.ИмяОтчета; 

            КодПоказателя = Показатели.КодКПЭ;

            ПолучитьДанныеПоказателя(НачДата,КонДата, ИмяПоказателя, КодПоказателя, ИмяОтчета);

КонецЦикла;

           

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

 

Процедура ДляРегламентногоЗадания() экспорт

 

            НачДата = НачалоМесяца(НачалоМесяца(ТекущаяДата())-1);

            КонДата = КонецМесяца(НачДата); 

            Сформировать(НачДата, КонДата);

           

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