Сохранить отбор построителя 1с
Работа построителя отчета и построителя запроса с произвольным источником данных
При разработке отчетов иногда возникает необходимость вывести отчет, данные для которого не могут быть получены с помощью языка запросов. Такая ситуация может возникнуть, например, если для расчета данных используется некий сложный алгоритм, или же данные, для вывода отчет получаются не из информационной базы, а, например из внешнего файла. Построитель отчета предоставляет возможность вывода отчета из произвольного источника данных.
В качестве источника данных для вывода отчета могут быть использованы:
- ТаблицаЗначений,
- РезультатЗапроса,
- ОбластьЯчеекТабличногоДокумента,
- Табличная часть,
- РегистрНакопленияНаборЗаписей ,
- РегистрСведенийНаборЗаписей,
- РегистрБухгалтерииНаборЗаписей,
- РегистрРасчетаНаборЗаписей.
Для того чтобы построитель отчета выводил отчет для произвольного источника данных, достаточно установить описание источника данных в свойство построителя ИсточникДанных . Свойство построителя отчета ИсточникДанных может содержать значение типа ОписаниеИсточникаДанных . Объект ОписаниеИсточникаДанных содержит сам источник данных, а также содержит описание колонок источника данных. Каждое описание колонки источника данных содержит:
- Имя - содержит имя колонки в источнике данных,
- ПутьКДанным - содержит описание зависимости колонок друг от друга. Колонка, чей путь к данным получен через точку от пути к данным другого поля, считается реквизитом другой колонки. Если поле содержит через точку слово Представление, то данное поле считается представлением для колонки, от пути к данным которого получается представление. Примеры. Если колонка "Номенклатура" имеет путь к данным "Номенклатура", а колонка "Код" имеет путь к данным "Номенклатура.Код", то данная колонка будет считаться реквизитом колонки "Номенклатура". Колонка с путем к данным "Номенклатура.Представление" будет считаться представлением для колонки "Номенклатура",
- Поле - признак того, что данная колонка может быть использована в качестве поля отчета,
- Порядок - признак того, что по данной колонке возможно упорядочивание,
- Отбор - признак того, что на данную колонку возможно накладывать отбор,
- Измерение - признак того, что данная колонка может быть использовано как группировка отчета,
- Итог - строка, содержащая выражение для расчета итога. Для построителя отчета выражение данной строки соответствует выражению для вычисления итога, используемому в языке запросов,
При установке источника данных объекту ОписаниеИсточникаДанных , описания колонок создаются и заполняются автоматически.
Объект ОписаниеИсточникаДанных имеет конструктор, в качестве параметра которого может быть передан источник данных, для которого создается описание, при этом свойство ИсточникДанных будет заполнено переданным источником данных, описания колонок будут заполнены информацией о колонках из источника данных.
Пример установки источника данных построителю отчета:
ПостроительОтчета.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТаблицаЗначенийРезультат);
Дальнейшая работа с построителем отчета не отличается от работы с построителем отчета в режиме работы с запросом: построитель отчета предоставляет свою полную функциональность, за исключением вывода иерархических итогов. Кроме того, при работе с произвольным источником данных, у построителя отчета нельзя получить запрос, который будет использован для получения данных из информационной базы.
Работа построителя запроса с произвольным источником данных идентична работе с произвольным источником построителя отчета.
Пример использования построителя отчета с произвольным источником данных можно найти в универсальной обработке "Консоль анализа журнала регистрации".
Constantus --> ConstantusИмеется некая свободная форма "Групповое создание документов", которая по неким отборам по номенклатуре отбирает нужную номенклатуру и создает несколько документов
на форме расположен "КомпоновщикНастроек" с типом "КомпоновщикНастроекКомпоновкиДанных" с путем к данным "КомпоновщикНастроек.Настройки.Отбор"
Возможно ли сохранить этот отбор в создаваемых документах?
Чтобы потом при повторном открытии этой формы отбора получить параметры отбора из этого созданного документа?
fly --> flyно база расти будет
fly @ Сегодня, 14:25 ,
Хранилище настроек
Отчет имеются свойства метаданных Хранилище вариантов и Хранилище настроек
При необходимости сохранять в настройках компоновки данных или пользовательских настройках компоновки данных некоторую дополнительную информацию можно воспользоваться свойствами ДополнительныеСвойства объектов НастройкиКомпоновкиДанных и ПользовательскиеНастройкиКомпоновкиДанных. Свойство ДополнительныеСвойства представляет собой объект типа Структура.
ХранилищеНастроек:
ОбработкаСохранения – содержит реализацию метода Сохранить().
ОбработкаЗагрузки – содержит реализацию метода Загрузить().
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования (Linus Torvalds).
суббота, 21 декабря 2013 г.
Сохранение/восстановление отборов СКД в регистр "Сохраненные настройки"
В продолжение статьи Выгрузка результата СКД в таблицу значений рассмотрим, как установить отбор для созданной нами СКД, а также сохранять и восстанавливать настройки отбора и периода.Для сохранения будут использоваться стандартные процедуры, которые применяются в отчетах в толстом клиенте (регистр сведений "Сохраненные настройки").
1) Для начала добавим в обработку реквизит "НастройкаОтбора" - тип "Строка", неограниченной длины. В этом реквизите и будет храниться наш отбор. Сохранять отбор будем с помощью функции сохранения значений ЗначениеВСтрокуВнутр(), а восстанавливать - ЗначениеИзСтрокиВнутр().
Перем СКД ;
Перем мТекущаяНастройка ;
Процедура КнопкаВыполнитьНажатие ( Кнопка )
Продажи . Загрузить ( РезультатКомпоновкиВТЗ ( СКД , КомпоновщикНастроек ));
Процедура ПередОткрытием ( Отказ , СтандартнаяОбработка )
СохраненнаяНастройка = ?( ЗначениеЗаполнено ( НастройкаОтбора ), ЗначениеИзСтрокиВнутр ( НастройкаОтбора ),Неопределено);
КомпоновщикНастроек . Инициализировать (Новый ИсточникДоступныхНастроекКомпоновкиДанных ( СКД ));
Настройки = ?(НЕ СохраненнаяНастройка = Неопределено, СохраненнаяНастройка , СКД . НастройкиПоУмолчанию );
КомпоновщикНастроек . ЗагрузитьНастройки ( Настройки );
// Процедура восстановления сохраненных настроек
//
Процедура ВосстановитьНастройки () Экспорт
СтруктураНастройки = Новый Структура ;
СтруктураНастройки . Вставить ( "Пользователь" , глЗначениеПеременной ( "глТекущийПользователь" ));
СтруктураНастройки . Вставить ( "ИмяОбъекта" , Строка ( ЭтотОбъект ));
СтруктураНастройки . Вставить ( "НаименованиеНастройки" , ?( мТекущаяНастройка = Неопределено, Неопределено, мТекущаяНастройка . НаименованиеНастройки ));
Результат = УниверсальныеМеханизмы . ВосстановлениеНастроек ( СтруктураНастройки );
Если Результат <> Неопределено Тогда
мТекущаяНастройка = Результат ;
ВосстановитьНастройкиИзСтруктуры ( Результат . СохраненнаяНастройка );
// Процедура сохранения настроек
//
Процедура СохранитьНастройки () Экспорт
СтруктураНастройки = Новый Структура ;
СтруктураНастройки . Вставить ( "Пользователь" , глЗначениеПеременной ( "глТекущийПользователь" ));
СтруктураНастройки . Вставить ( "ИмяОбъекта" , Строка ( ЭтотОбъект ));
СтруктураНастройки . Вставить ( "НаименованиеНастройки" , ?( мТекущаяНастройка = Неопределено, Неопределено, мТекущаяНастройка . НаименованиеНастройки ));
СтруктураНастройки . Вставить ( "СохраненнаяНастройка" , СохраненнаяНастройка );
СтруктураНастройки . Вставить ( "ИспользоватьПриОткрытии" , Ложь);
СтруктураНастройки . Вставить ( "СохранятьАвтоматически" , Ложь);
Результат = УниверсальныеМеханизмы . СохранениеНастроек ( СтруктураНастройки );
Если Результат <> Неопределено Тогда
мТекущаяНастройка = Результат ;
Иначе
мТекущаяНастройка = СтруктураНастройки ;
КонецЕсли;
// Процедура восстановления значений реквизитов
//
Процедура ВосстановитьНастройкиИзСтруктуры ( СтруктураСНастройками ) Экспорт
Если ТипЗнч ( СтруктураСНастройками ) <> Тип ( "Структура" ) Тогда
Возврат;
КонецЕсли;
ЗаполнитьЗначенияСвойств ( ЭтотОбъект , СтруктураСНастройками );
ЗагрузитьНастройкуОтбора ();
// Процедура сохранения значений реквизитов
//
Процедура СформироватьСтруктуруДляСохраненияНастроек ( СтруктураСНастройками ) Экспорт
Если ТипЗнч ( СтруктураСНастройками ) <> Тип ( "Структура" ) Тогда
СтруктураСНастройками = Новый Структура ;
КонецЕсли;
СтруктураСНастройками . Вставить ( "НастройкаОтбора" , ЗначениеВСтрокуВнутр ( КомпоновщикНастроек . Настройки ));
СтруктураСНастройками . Вставить ( "НачалоПериода" , НачалоПериода );
СтруктураСНастройками . Вставить ( "КонецПериода" , КонецПериода );
Процедура ДействияФормыСохранитьНастройки ( Кнопка )
Процедура ДействияФормыВосстановитьНастройки ( Кнопка )
СКД = ПолучитьМакет ( "ПродажиЗаПериод" );
Функция РезультатКомпоновкиВТЗ ( СКД , КомпоновщикНастроек ) Экспорт
НастройкиКомпоновщика = КомпоновщикНастроек . Настройки ;
ПараметрыНастройки = НастройкиКомпоновщика . ПараметрыДанных ;
// устанавливаем параметры отчета
ЗначениеПараметра = ПараметрыНастройки . НайтиЗначениеПараметра (Новый ПараметрКомпоновкиДанных ( "НачалоПериода" ));
ЗначениеПараметра . Значение = НачалоПериода ;
ЗначениеПараметра = ПараметрыНастройки . НайтиЗначениеПараметра (Новый ПараметрКомпоновкиДанных ( "КонецПериода" ));
ЗначениеПараметра . Значение = КонецДня ( КонецПериода );
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных ;
МакетКомпоновкиДанных = КомпоновщикМакета . Выполнить ( СКД , НастройкиКомпоновщика . Тип ( "ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений" ));
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных ;
ПроцессорКомпоновкиДанных . Инициализировать ( МакетКомпоновкиДанных );
ТаблицаРезультат = Новый ТаблицаЗначений ;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений ;
ПроцессорВывода . УстановитьОбъект ( ТаблицаРезультат );
ПроцессорВывода . Вывести ( ПроцессорКомпоновкиДанных );
6) После запуска обработки можно установить параметры: начало и конец периода, а также определить отбор. Потом сохранить настройку. При последующей работе можно вернуться к этой настройке нажав кнопку восстановления настроек. Как это сделать показано на скриншоте.
Пример обработки можно скачать ЗДЕСЬ.
Читайте также: