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