Система компоновки данных (СКД) » История » Версия 4
« Предыдущее -
Версия 4/19
(Разница(diff)) -
Следующее » -
Текущая версия
Всеволод Дорофеев, 01.02.2017 18:03
Система компоновки данных (СКД)¶
Программное выполнение СКД с выводом в таблицу значений¶
&НаСервере Процедура ПеренестиНоменклатуруСервере() ОбъектНаСервере = РеквизитФормыВЗначение("Объект"); СхемаНоменклатуры = ОбъектНаСервере.ПолучитьМакет("СКД"); //СКД. Программная установка параметров в управляемой форме отчета ПараметрДанных = КомпоновщикНаФорме.Настройки.ПараметрыДанных.Элементы.Найти("ГруппаНоменклатуры"); ПараметрДанных.Использование = Истина; ПараметрДанных.Значение = Объект.ПапкаАрхив; КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаНоменклатуры, КомпоновщикНаФорме.ПолучитьНастройки(),,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,,, Истина); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; ТЗНоменклатура = Новый ТаблицаЗначений; ПроцессорВывода.УстановитьОбъект(ТЗНоменклатура); ПроцессорВывода.Вывести(ПроцессорКомпоновки); ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); Для каждого СтрокаТЗ из ТЗНоменклатура Цикл ОбработкаОбъект.ПеренестиНоменклатурнуюПозициюВПапкуНаСервере(СтрокаТЗ); КонецЦикла; КонецПроцедуры
ШАБЛОНЫ ДЛЯ ИСПОЛЬЗОВАНИЯ СКД¶
//**************************************************************************** // ШАБЛОНЫ ДЛЯ ИСПОЛЬЗОВАНИЯ СКД // {{ //**************************************************************************** // Заполняет переданный объект на основани СКД // // Параметры // // СКД – собствеено настройки СКД // // ОбъектДляЗагрузки – объект в который выгружаются данные, таблица значений, дерево значений, табличный документ // // ИсполняемыеНастройки – Пользовательские настройки СКД если не указаны будут использованы настроки СКД по умолчанию // // СтруктураПараметров - Структура – Передаваемые для СКД параметры // // ДеревоЗначений = Новый ДеревоЗначений; // // ПРИМЕР ВЫЗОВА // СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); // СтруктураПараметров = Новый Структура("ДатаОтчета", НашаДата); // ПолучитьДанныеНаОснованииСКД(СхемаКомпоновкиДанных, ДеревоЗначений, СхемаКомпоновкиДанных.НастройкиПоУмолчанию, СтруктураПараметров); // &НаСервере Процедура ПолучитьДанныеНаОснованииСКД(СКД, ОбъектДляЗагрузки, ИсполняемыеНастройки = Неопределено, СтруктураПараметров = Неопределено, РасшифровкаСКД = Неопределено, МакетКомпоновки = Неопределено, ВнешниеНаборыДанных = Неопределено) Экспорт КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; //Если ТипЗнч(ОбъектДляЗагрузки) = Тип("ПолеТабличногоДокумента") ИЛИ ТипЗнч(ОбъектДляЗагрузки) = Тип("ТабличныйДокумент") Тогда Если ТипЗнч(ОбъектДляЗагрузки) = Тип("ТабличныйДокумент") Тогда ТипГенератора = Тип("ГенераторМакетаКомпоновкиДанных"); Иначе ТипГенератора = Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"); КонецЕсли; Если ИсполняемыеНастройки = Неопределено Тогда ИсполняемыеНастройки = СКД.НастройкиПоУмолчанию; КонецЕсли; Если СтруктураПараметров <> Неопределено Тогда КоллекцияЗначенийПараметров = ИсполняемыеНастройки.ПараметрыДанных.Элементы; Для каждого Параметр Из СтруктураПараметров Цикл НайденноеЗначениеПараметра = КоллекцияЗначенийПараметров.Найти(Параметр.Ключ); Если НайденноеЗначениеПараметра <> Неопределено Тогда НайденноеЗначениеПараметра.Использование = Истина; НайденноеЗначениеПараметра.Значение = Параметр.Значение; КонецЕсли; КонецЦикла; КонецЕсли; МакетКомпоновкиСКД = КомпоновщикМакета.Выполнить(СКД, ИсполняемыеНастройки, РасшифровкаСКД, МакетКомпоновки, ТипГенератора); ПроцессорКомпановки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпановки.Инициализировать(МакетКомпоновкиСКД, ВнешниеНаборыДанных, РасшифровкаСКД); //Если ТипЗнч(ОбъектДляЗагрузки) = Тип("ПолеТабличногоДокумента") ИЛИ ТипЗнч(ОбъектДляЗагрузки) = Тип("ТабличныйДокумент") Тогда Если ТипЗнч(ОбъектДляЗагрузки) = Тип("ТабличныйДокумент") Тогда ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ОбъектДляЗагрузки); Иначе ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; ПроцессорВывода.УстановитьОбъект(ОбъектДляЗагрузки); КонецЕсли; ПроцессорВывода.ОтображатьПроцентВывода = Истина; ПроцессорВывода.Вывести(ПроцессорКомпановки, Истина); КонецПроцедуры // ПолучитьДанныеНаОснованииСКД() //**************************************************************************** // }} //****************************************************************************
Смена схемы СКД¶
Функция СохранитьПараметры(ИменаПараметров) Параметры = КомпоновщикНастроек.Настройки.ПараметрыДанных; МассивСИменами = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(ИменаПараметров,","); СтруктураДляПараметров = Новый Структура; Для Каждого ИмяПараметра Из МассивСИменами Цикл Параметр = Параметры.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных(ИмяПараметра)); Если Параметр <> Неопределено Тогда СтруктураДляПараметров.Вставить(ИмяПараметра, Параметр.Значение); КонецЕсли; КонецЦикла; Возврат СтруктураДляПараметров; КонецФункции Процедура ЗагрузитьПараметры(СтруктураСПараметрами) Параметры = КомпоновщикНастроек.Настройки.ПараметрыДанных; Для Каждого ТекущийПараметр Из СтруктураСПараметрами Цикл Параметр = Параметры.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных(ТекущийПараметр.Ключ)); Если Параметр <> Неопределено Тогда Параметр.Значение = ТекущийПараметр.Значение; Параметр.Использование = Истина; КонецЕсли; КонецЦикла; КонецПроцедуры Процедура СменитьСхему() СтруктураСНастройками = СохранитьПараметры("Параметр1,Параметр2,Параметр3"); СхемаКомпоновкиДанных = ПолучитьМакет("ЗдесьИмяНужнойВамСхемы"); Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию; КомпоновщикНастроек.ЗагрузитьНастройки(Настройки); ЗагрузитьПараметры(СтруктураСНастройками); КонецПроцедуры