вторник, 17 января 2017 г.

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

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

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

ТаблицаПервоначальныхДанных = Новый ТаблицаЗначений;
СписокGUID = Новый СписокЗначений;
ТаблицаСвязи = Новый ТаблицаЗначений;
ТаблицаСвязи.Колонки.Добавить("ТехОбъект", Новый ОписаниеТипов("СправочникСсылка.ТехнологическиеОбъекты"));
ТаблицаСвязи.Колонки.Добавить("GUID", Новый ОписаниеТипов("Строка"));
СтруктураДанных = Новый Структура("ТаблицаСвязи", ТаблицаСвязи);

//Первоначальное получение данных
НастройкиКомпоновки = КомпоновщикНастроек.ПолучитьНастройки();
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновки, ДанныеРасшифровки,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));

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

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

//Настройка таблицы связей тех. объектов и их GUID
Для Каждого Строка Из ТаблицаПервоначальныхДанных Цикл
НоваяСтрока = ТаблицаСвязи.Добавить();
НоваяСтрока.ТехОбъект = Строка.ТехОбъект;
НоваяСтрока.GUID = НоваяСтрока.ТехОбъект.УникальныйИдентификатор();
СписокGUID.Добавить(НоваяСтрока.GUID);
КонецЦикла;

//Вывод дополненного отчета
НастройкиКомпоновки.ПараметрыДанных.УстановитьЗначениеПараметра("СписокGUID", СписокGUID);

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

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

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

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


Пример отчета (Скачать)

Программное формирование СКД (управляемая форма, установка параметров и вывод)


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

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

Настройки = КомпоновщикНастроек.Настройки;

УстановитьПараметрСКД(Настройки, "Блок0", Справочники.ПроектыСвойства.НайтиПоКоду("0"));
УстановитьПараметрСКД(Настройки, "Блок1", Справочники.ПроектыСвойства.НайтиПоКоду("1"));
УстановитьПараметрСКД(Настройки, "Блок2", Справочники.ПроектыСвойства.НайтиПоКоду("2"));
УстановитьПараметрСКД(Настройки, "Блок2ПК", Справочники.ПроектыСвойства.НайтиПоКоду("2ПК"));
УстановитьПараметрСКД(Настройки, "Здание0UZU", Справочники.ПроектыСвойства.НайтиПоКоду("0UZU"));
УстановитьПараметрСКД(Настройки, "Период", ТекущаяДата());

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

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

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

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

Процедура УстановитьПараметрСКД(Настройки, ИмяПараметра, Значение)

Параметр = Настройки.ПараметрыДанных.Элементы.Найти(ИмяПараметра);
Если Параметр <> Неопределено Тогда
Параметр.Значение = Значение;
Параметр.Использование = Истина;
КонецЕсли;

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

Установка отбора при открытии формы

Процедура УстановитьОтборПоУмолчанию()

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

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

Процедура УстановитьОтбор(ИмяОтбора, Значение)

ЭлементыОтбора = КомпоновщикНастроек.Настройки.Отбор.Элементы;
Для Каждого ЭлементОтбора Из ЭлементыОтбора Цикл
Если ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяОтбора) Тогда
ЭлементОтбора.ПравоеЗначение = Значение;
КонецЕсли;
КонецЦикла;

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

Пример отчета (Скачать)