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