1С СКД. Программный запуск отчета с открытием и настройкой.
Одна из задач автоматизации — ускорение работы пользователя, что во многом достигается путем сокращения повторяющихся рутинных действий. У многих пользователей есть постоянные отчеты, для открытия которых они находят команду в меню, вводят отборы и параметры в открывшейся форме, нажимают «сформировать». В таких случаях разработчик 1С может создать команды программного запуска отчета с открытием и настройкой, что позволит сразу получить готовый отчет, а механизм системы компоновки данных, называемый в сокращении СКД, представляет ему для этого обширный инструментарий. В этой статье мы познакомимся с несколькими методами программного запуска отчета с открытием и различной настройкой, из которых каждый сможет выбрать наиболее подходящий.
Contents
- 1 Открытие формы отчета с помощью ПолучитьФорму и расширения формы отчета.
- 2 Открытие формы отчета с помощью ОткрытьФорму и расширения формы отчета.
- 3 Программный вывод СКД в табличный документ и таблицу значений.
- 4 Возможности настройки Схемы Компоновки Данных и Компоновщика Настроек СКД при программном формировании.
- 5 Резюме
Открытие формы отчета с помощью ПолучитьФорму и расширения формы отчета.
Сначала получаем форму.
Если отчет хранится в базе тогда выполняем на клиенте код:
Форма = ПолучитьФорму("Отчет.<Отчет>.Форма");
Иначе
Отчет = ВнешниеОтчеты.Создать("ПутьКОтчету"); Форма = Отчет.ПолучитьФорму("ИмяФормы");
Если нужен не «вариант по умолчанию»
Форма.УстановитьТекущийВариант("<КлючВарианта>");
Далее получаем настройки:
Настройки = ПолучитьНастройки(Форма.Отчет.КомпоновщикНастроек);
Через серверный вызов получаем настройки и если нужно заполняем параметры Компоновщика в отдельной процедуре.
&НаСервереБезКонтекста Функция ПолучитьНастройки(КомпоновщикНастроек) Настройки = КомпоновщикНастроек.ПолучитьНастройки(); Возврат Настройки; КонецФункции
Загружаем измененные настройки в компоновщик
Форма.Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
Формируем отчет
Форма.СкомпоноватьРезультат();
Открываем форму
Форма.Открыть();
Открытие формы отчета с помощью ОткрытьФорму и расширения формы отчета.
Код выполняется на клиенте, сначала мы формируем структуру с необходимыми параметрами формы, а потом вызываем процедуру открытия. Часто используемые параметры в данном случае это:
- СформироватьПриОткрытии — нужен чтобы отчет открылся сразу сформированным.
- Отбор — Устанавливает отбор на результат СКД.
- КлючВарианта — Имя варианта настроек для отчетов с несколькими вариантами.
Пример:
УсловияОтбора = Новый Структура("<ИмяПоля>",<ЗначениеОтбора>); ПараметрыФормы = Новый Структура("Отбор, СформироватьПриОткрытии,КлючВарианта", УсловияОтбора, Истина, <КлючВарианта>); ОткрытьФорму("Отчет.<Отчет>.Форма", ПараметрыФормы);
Программный вывод СКД в табличный документ и таблицу значений.
Сначала получаем схему компоновки данных. Схема может быть получена из разных источников: общий макет, макет прикладного объекта, такого как справочник или отчет, макет из внешней обработки.
Код выполняется на сервере.
Получение локального макета
СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
Получение макета произвольного отчета
СхемаКомпоновкиДанных = Отчеты.<Отчет>.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
Получение макета во внешней обработке
Обработка = РеквизитФормыВЗначение("Объект"); СхемаКомпоновкиДанных = Обработка.ПолучитьМакет(<ИмяМакета>);
Получение макета из внешней обработки или отчета
Обработка = ВнешниеОбработки.Создать("ПутьКОбработке"); СхемаКомпоновкиДанных = Обработка.ПолучитьМакет("ИмяМакета");
или
Отчет = ВнешниеОтчеты.Создать("ПутьКОтчету"); СхемаКомпоновкиДанных = Отчет.ПолучитьМакет("ИмяМакета");
Далее мы получаем настройки. Настройки СКД могут быть взяты из разных источников. Мы можем их получить из самой СКД:
Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
Мы можем создать новый компоновщик настроек на основе схемы и получить настройки из него.
КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных; КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию); Настройки = КомпоновщикНастроек.ПолучитьНастройки();
Мы можем получить настройки с отдельного компоновщика настроек, добавленного на произвольную форму.
//В процедуре формы ПриСозданииНаСервере() URLСхемы = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных, Новый УникальныйИдентификатор()); ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(URLСхемы); КомпоновщикНастроекРеквизитФормы.Инициализировать(ИсточникНастроек); КомпоновщикНастроекРеквизитФормы.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
И когда будем формировать
Настройки = КомпоновщикНастроекРеквизитФормы.ПолучитьНастройки();
Далее программно заполняем параметры Компоновщика. Об этом подробно в разделе 4 .
Объявляем создаем необходимые объекты:
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
Создаем макет компоновки с помощью компоновщика макета:
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки, ДанныеРасшифровки);
Если результат выполнения СКД нужно вывести в таблицу значений то соответствующий тип генератора нужно указать в параметрах:
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки, , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
Инициализируем процессор компоновки данных
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ,ДанныеРасшифровки);
Создаем процессор вывода:
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(<ТабличныйДокументВывода>);
Для вывода в таблицу значений используется другой процессор вывода:
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; ПроцессорВывода.УстановитьОбъект(<ТаблицаЗначенийВывода>);
Запускаем процесс вывода:
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
Теперь мы можем проводить нужные операции с полученными данными.
Если вывод в таблицу значений завершился ошибкой “Не поддерживается вывод таблиц и диаграмм в универсальную коллекцию значений” значит настройки СКД не подходят для такой выгрузки, и нужно их изменить, об этом ниже.
Возможности настройки Схемы Компоновки Данных и Компоновщика Настроек СКД при программном формировании.
При программном формировании СКД как в пункте 2 у нас есть огромное количество возможностей по управлению отчетом. Опишем самые часто используемые из них.
После того, как присвоено значение переменной СхемаКомпоновкиДанных — через нее мы можем получить доступ к формирующим запросам схемы через свойство коллекцию НаборыДанных. Элемент набора данных имеет интересующее нас свойство Запрос. Это текстовый параметр, содержащий в себе запрос. С помощью функций редактирования текста, его можно изменить, например, добавить отбор по недоступному через КомпоновщикНастроек полю.
СхемаКомпоновкиДанных.НаборыДанных[0].Запрос = СхемаКомпоновкиДанных.НаборыДанных[0].Запрос + " ГДЕ Не Водители.ПометкаУдаления";
Или если с добавлением нового параметра
СхемаКомпоновкиДанных.НаборыДанных[0].Запрос = СхемаКомпоновкиДанных.НаборыДанных[0].Запрос + " ГДЕ Не Водители.ПометкаУдаления = &Пометка";
Также при получении настроек можно выбрать не «настройки по умолчанию», а один из вариантов настроек.
Настройки = СхемаКомпоновкиДанных.ВариантыНастроек[0].Настройки;
Переменная Настройки содержит в себе всю палитру настроек которая доступна в редакторе СКД в разделе “Настройки”. Наиболее часто из них программно редактируются отборы, параметры и структура, в случае когда отчет с табличной структурой надо вывести в таблицу значений. Рассмотрим их подробнее.
Параметры
Все параметры создаются при создании исходного отчета, исключение если параметр был добавлен при редактировании запроса. Значение существующего параметра устанавливается следующим образом:
Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("<ИмяПараметра>",<ЗначениеПараметра>);
Добавление параметра делается следующим образом
СтрПараметр = Настройки.ПараметрыДанных.Элементы.Добавить(); СтрПараметр.Параметр = Новый ПараметрКомпоновкиДанных("<ИмяПараметра>"); СтрПараметр.Значение = <ЗначениеПараметра>; СтрПараметр.Использование = Истина;
Отбор
У отборов нет специальных функций по установке значений. Поэтому нужно перебирать коллекцию циклом.
ПолеПоиска = Новый ПолеКомпоновкиДанных("<ИмяПоля>"); Найден = Ложь; Для Каждого Элемент Из Настройки.Отбор.Элементы Цикл Если Элемент.ЛевоеЗначение = ПолеПоиска Тогда Элемент.ПравоеЗначение = <ЗначениеОтбора>; Элемент.Использование = Истина; Найден = Истина; Прервать; КонецЕсли; КонецЦикла; Если Не Найден Тогда Если Настройки.Отбор.ДоступныеПоляОтбора.Элементы.Найти("<ИмяПоля>") <> Неопределено Тогда НовыйОтбор = Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); НовыйОтбор.ЛевоеЗначение = ПолеПоиска; НовыйОтбор.ПравоеЗначение = <ЗначениеОтбора>; НовыйОтбор.Использование = Истина; КонецЕсли; КонецЕсли;
Этот код установит значение для отбора, а если такого отбора нет в настройках, то добавит. В случае если точно известно, есть или нет такой отбор — то код можно упростить.
Структура
Для адаптации отчета к выводу в таблицу значений нужно очистить структуру группировок отчета и создать поле группировки “Детальные записи”.
Настройки.Структура.Очистить(); СтрГруппировка = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); СтрГруппировка.Использование = Истина; СтрГруппировка.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных")); СтрГруппировка.Порядок.Элементы.Добавить(Тип("АвтоЭлементПорядкаКомпоновкиДанных"));
Резюме
Система компоновки данных была создана для ускорения разработки отчетов и упрощения работы пользователей. Программные изменения помогают усилить этот эффект. Программист может создать выгрузки и по сути свои отчеты на основании типовых отчетов. К примеру, выгрузка заработной платы в управленческую базу. Структура базы может сильно изменена, но поля в отчете “Расчетная ведомость Т-51” будут называться так же, и сам отчет вряд ли переименуется. Да и если что-то переименуется — выгрузку исправить будет очень просто.
Программист может упростить работу пользователя по вводу параметров и отборов если есть некоторая закономерность в них, но они всё таки не фиксированы. К примеру, сравнительный отчет по продажам за этот месяц этого года и аналогичные месяца трех предыдущих годов.
Приведенные примеры кода были протестированы на платформе 1С:Предприятие 8.3 (8.3.13.1690).
Comments
So empty here ... leave a comment!