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!

Добавить комментарий

Sidebar