1С СКД. Программное создание СКД.
В этой статье мы рассмотрим пример программного создания схемы компоновки данных 1С (далее — СКД). Сложно придумать задачу, в которой полное программное создание СКД будет оправдано, но использованные приемы и методы помогут понять программную структуру СКД и дадут понимание каким образом программно модифицировать ранее созданные и сохраненные в базе 1С или внешнем отчете или даже типовые СКД, что дает очень широкий спектр применения.
Создание объекта СКД.
НовыйСКД = Новый СхемаКомпоновкиДанных();
Создание Источника. Нужно создать обязательный локальный.
Источник = НовыйСКД.ИсточникиДанных.Добавить(); Источник.Имя = "ИсточникДанных1"; Источник.СтрокаСоединения = ""; Источник.ТипИсточникаДанных = "Local";
Создание набора данных запроса
НаборДанных = НовыйСКД.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")); НаборДанных.Имя = "НаборДанных1"; НаборДанных.Запрос = ТекстЗапроса; НаборДанных.ИсточникДанных = "ИсточникДанных1"; НаборДанных.АвтоЗаполнениеДоступныхПолей = Истина;
Заполнение полей этого набора данных. По заполнению соответствует группе «Поля» набора данных в графическом интерфейсе СКД. Доступны такие же поля. Имена соответствующих полей в графическом и программном интерфейсе немного отличаются, но при вводе “ДобавленноеПоле.” подсказка покажет перечень доступных полей и в них можно узнать поля из графического интерфейса. Это относится ко всем переменным созданным через “.Добавить()”.
ДобавленноеПоле = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных")); ДобавленноеПоле.Заголовок = "Ссылка"; ДобавленноеПоле.ПутьКДанным = "Ссылка"; ДобавленноеПоле.Поле = "Ссылка"; ДобавленноеПоле.ТипЗначения = Новый ОписаниеТипов("СправочникСсылка.Водители"); //ДобавленноеПоле.Оформление - здесь можем задать оформление для поля
ДобавленноеПоле = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных")); ДобавленноеПоле.Заголовок = "ДатаВодУдостверения"; ДобавленноеПоле.ПутьКДанным = "ДатаВодУдостверения"; ДобавленноеПоле.Поле = "ДатаВодУдостверения"; ДобавленноеПоле.ТипЗначения = Новый ОписаниеТипов("Дата",,,,,ПараметрыДаты);
Создание набора данных объекта. Таблицы значений объектов должны быть переданы при инициализации ПроцессорКомпоновкиДанных во втором параметре структурой, где ключом будет ИмяОбъекта, а значением сама ТЗ.
НаборДанных2 = НовыйСКД.НаборыДанных.Добавить(Тип("НаборДанныхОбъектСхемыКомпоновкиДанных")); НаборДанных2.Имя = "НаборДанных2"; НаборДанных2.ИмяОбъекта = "ВнешнаяТЗ"; НаборДанных2.ИсточникДанных = "ИсточникДанных1";
Заполнение полей этого набора данных.
ДобавленноеПоле = НаборДанных2.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных")); ДобавленноеПоле.Заголовок = "Дата"; ДобавленноеПоле.ПутьКДанным = "Дата"; ДобавленноеПоле.Поле = "Дата"; ДобавленноеПоле.ТипЗначения = Новый ОписаниеТипов("Дата",,,,,ПараметрыДаты);
Создание набора данных объединения
НаборДанных = НовыйСКД.НаборыДанных.Добавить(Тип("НаборДанныхОбъединениеСхемыКомпоновкиДанных")); НаборДанных.Имя = "НаборДанных1";
так же как у других наборов заполняются “Поля”, а в реквизит “Элементы” добавляются подчиненные наборы данных.
Создание связи наборов данных. По заполнению соответствует вкладке «Связи наборов данных» СКД.
НоваяСвязь = НовыйСкд.СвязиНаборовДанных.Добавить(); НоваяСвязь.НаборДанныхИсточник = "НаборДанных1"; НоваяСвязь.НаборДанныхПриемник = "НаборДанных2"; НоваяСвязь.ВыражениеИсточник = "ДатаВодУдостверения"; НоваяСвязь.ВыражениеПриемник = "Дата";
Добавление вычисляемого поля. По заполнению соответствует вкладке «Вычисляемые поля» СКД.
НовоеВычисляемоеПоле = НовыйСкд.ВычисляемыеПоля.Добавить(); НовоеВычисляемоеПоле.Заголовок = "Осталось"; НовоеВычисляемоеПоле.ПутьКДанным = "Осталось"; НовоеВычисляемоеПоле.Выражение = "РАЗНОСТЬДАТ(ДатаВодУдостверения,Дата,ДЕНЬ)";
Добавление ресурса. По заполнению соответствует вкладке «Ресурсы» СКД.
НовыйРесурс = НовыйСКД.ПоляИтога.Добавить(); НовыйРесурс.ПутьКДанным = "Осталось"; НовыйРесурс.Выражение = "СУММА(Осталось)"; //НовыйРесурс.Группировки - это массив куда добавляем строки Группировок по которые рассчитывается ресурс если нужно
Добавление параметра. По заполнению соответствует вкладке “Параметры” СКД.
СтрПараметр = НовыйСКД.ВариантыНастроек[0].Настройки.ПараметрыДанных.Элементы.Добавить(); СтрПараметр.Параметр = Новый ПараметрКомпоновкиДанных("ИмяПараметра"); СтрПараметр.Значение = 11; СтрПараметр.Использование = Истина;
Заполнение настроек. По заполнению соответствует вкладке “Настройки” СКД.
Сначала выбранное поле добавляется в Выбранные поля отчета.
ВыбранноеПоле = НовыйСКД.ВариантыНастроек[0].Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); ВыбранноеПоле.Использование = Истина; ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("Ссылка");
Затем заполняется структура отчета. Для вывода полного плоского списка в отчет добавляем одну структуру Группировка компоновки данных.
Структура = НовыйСКД.ВариантыНастроек[0].Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); Структура.Использование = Истина; Структура.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных")); Структура.Порядок.Элементы.Добавить(Тип("АвтоЭлементПорядкаКомпоновкиДанных"));
Если нужна таблица то она создается следующим образом:
Таблица = НовыйСКД.ВариантыНастроек[0].Настройки.Структура.Добавить(Тип("ТаблицаКомпоновкиДанных")); Таблица.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных")); СтрокаТаблицы = Таблица.Строки.Добавить(); СтрокаТаблицы.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных")); СтрокаТаблицы.Порядок.Элементы.Добавить(Тип("АвтоЭлементПорядкаКомпоновкиДанных")); ПолеГруппировки = Новый ПолеКомпоновкиДанных("Ссылка"); ГруппировкаСтроки = СтрокаТаблицы.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")); ГруппировкаСтроки.Поле = ПолеГруппировки; ГруппировкаСтроки.Использование = Истина; ГруппировкаСтроки.ТипГруппировки = ТипГруппировкиКомпоновкиДанных.Элементы;
Если нужна группировка ресурсов по колонкам — код аналогичный, только заполняем
КолонкаТаблицы = Таблица.Колонки.Добавить();
Дополнительно хочу пояснить: если нам нужно добавить конкретное поле в выбор — то используем тип “ВыбранноеПолеКомпоновкиДанных” и заполняем данные по нему, чтобы добавить все поля “АвтоВыбранноеПолеКомпоновкиДанных”.
На этом программное создание схемы компоновки данных завершено. Теперь мы можем проводить с ней дальнейшие манипуляции или, к примеру, вывести ее в табличный документ следующим кодом:
Настройки = НовыйСКД.НастройкиПоУмолчанию; ДанныеРасшифровкиСКД = Новый ДанныеРасшифровкиКомпоновкиДанных; КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(НовыйСКД,Настройки, ДанныеРасшифровкиСКД); ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ,ДанныеРасшифровкиСКД); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ТабДок); ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
Comments
So empty here ... leave a comment!