суббота, 21 декабря 2013 г.

Сохранение/восстановление отборов СКД в регистр "Сохраненные настройки"

В продолжение статьи Выгрузка результата СКД в таблицу значений рассмотрим, как установить отбор для созданной нами СКД, а также сохранять и восстанавливать настройки отбора и периода.
Для сохранения будут использоваться стандартные процедуры, которые применяются в отчетах в толстом клиенте (регистр сведений "Сохраненные настройки").
1) Для начала добавим в обработку реквизит "НастройкаОтбора" - тип "Строка", неограниченной длины. В этом реквизите и будет храниться наш отбор. Сохранять отбор будем с помощью функции сохранения значений ЗначениеВСтрокуВнутр(), а восстанавливать - ЗначениеИзСтрокиВнутр().

2) Теперь добавим реквизит формы "КомпоновщикНастроек" - тип "КомпоновщикНастроекКомпоновкиДанных".
3) Откроем форму выберем пункт меню "Форма" - "Вставить элемент управления..." и добавим табличную часть "НастройкаОтбора" вместе с командной панелью.
4) Откроем свойства табличной части и в поле "Данные" выберем тип "КомпоновщикНастроек.Настройки.Отбор". Табличная часть примет вид как на рисунке ниже.
5) Теперь напишем код, который будет использоваться для сохранения/восстановления отбора.
На панели формы создадим две кнопки "Сохранить" и "Восстановить настройки", а в модуле формы определим такой код:

Перем СКД;
Перем
мТекущаяНастройка;

Процедура
КнопкаВыполнитьНажатие(Кнопка)

   
Продажи.Загрузить(РезультатКомпоновкиВТЗ(СКД, КомпоновщикНастроек));

КонецПроцедуры

Процедура
ПередОткрытием(Отказ, СтандартнаяОбработка)

   
ЗагрузитьНастройкуОтбора();

КонецПроцедуры

Процедура
ЗагрузитьНастройкуОтбора()

   
СохраненнаяНастройка = ?(ЗначениеЗаполнено(НастройкаОтбора),ЗначениеИзСтрокиВнутр(НастройкаОтбора),Неопределено);

   
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СКД));
   
Настройки = ?(НЕ СохраненнаяНастройка = Неопределено,СохраненнаяНастройка, СКД.НастройкиПоУмолчанию);
   
КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);

КонецПроцедуры

// Процедура восстановления сохраненных настроек
//
Процедура ВосстановитьНастройки() Экспорт

    Перем
СохраненнаяНастройка;

   
СтруктураНастройки = Новый Структура;
   
СтруктураНастройки.Вставить("Пользователь", глЗначениеПеременной("глТекущийПользователь"));
   
СтруктураНастройки.Вставить("ИмяОбъекта", Строка(ЭтотОбъект));
   
СтруктураНастройки.Вставить("НаименованиеНастройки", ?(мТекущаяНастройка = Неопределено, Неопределено, мТекущаяНастройка.НаименованиеНастройки));

   
Результат = УниверсальныеМеханизмы.ВосстановлениеНастроек(СтруктураНастройки);

    Если
Результат <> Неопределено Тогда

       
мТекущаяНастройка = Результат;
       
ВосстановитьНастройкиИзСтруктуры(Результат.СохраненнаяНастройка);

    Иначе

       
мТекущаяНастройка = СтруктураНастройки;

    КонецЕсли;

КонецПроцедуры
// ВосстановитьНастройки()

// Процедура сохранения настроек
//
Процедура СохранитьНастройки() Экспорт

    Перем
СохраненнаяНастройка;

   
СформироватьСтруктуруДляСохраненияНастроек(СохраненнаяНастройка);

   
СтруктураНастройки = Новый Структура;
   
СтруктураНастройки.Вставить("Пользователь", глЗначениеПеременной("глТекущийПользователь"));
   
СтруктураНастройки.Вставить("ИмяОбъекта", Строка(ЭтотОбъект));
   
СтруктураНастройки.Вставить("НаименованиеНастройки", ?(мТекущаяНастройка = Неопределено, Неопределено, мТекущаяНастройка.НаименованиеНастройки));
   
СтруктураНастройки.Вставить("СохраненнаяНастройка", СохраненнаяНастройка);
   
СтруктураНастройки.Вставить("ИспользоватьПриОткрытии", Ложь);
   
СтруктураНастройки.Вставить("СохранятьАвтоматически", Ложь);

   
Результат = УниверсальныеМеханизмы.СохранениеНастроек(СтруктураНастройки);

    Если
Результат <> Неопределено Тогда
       
мТекущаяНастройка = Результат;
    Иначе
       
мТекущаяНастройка = СтруктураНастройки;
    КонецЕсли;

КонецПроцедуры
// СохранитьНастройки()

// Процедура восстановления значений реквизитов
//
Процедура ВосстановитьНастройкиИзСтруктуры(СтруктураСНастройками) Экспорт

   
//Перем ТаблицаПоказателейОтчета;

   
Если ТипЗнч(СтруктураСНастройками) <> Тип("Структура") Тогда
        Возврат;
    КонецЕсли;

   
ЗаполнитьЗначенияСвойств(ЭтотОбъект, СтруктураСНастройками);
   
ЗагрузитьНастройкуОтбора();

КонецПроцедуры
// ВосстановитьНастройкиИзСтруктуры()

// Процедура сохранения значений реквизитов
//
Процедура СформироватьСтруктуруДляСохраненияНастроек(СтруктураСНастройками) Экспорт

    Если
ТипЗнч(СтруктураСНастройками) <> Тип("Структура") Тогда
       
СтруктураСНастройками = Новый Структура;
    КонецЕсли;

   
СтруктураСНастройками.Вставить("НастройкаОтбора", ЗначениеВСтрокуВнутр(КомпоновщикНастроек.Настройки));
   
СтруктураСНастройками.Вставить("НачалоПериода", НачалоПериода);
   
СтруктураСНастройками.Вставить("КонецПериода", КонецПериода);

КонецПроцедуры
// СформироватьСтруктуруДляСохраненияНастроек()

Процедура ДействияФормыСохранитьНастройки(Кнопка)

   
СохранитьНастройки();

КонецПроцедуры

Процедура
ДействияФормыВосстановитьНастройки(Кнопка)

   
ВосстановитьНастройки();
   
ЗагрузитьНастройкуОтбора();

КонецПроцедуры

СКД = ПолучитьМакет("ПродажиЗаПериод");

В модуле объекта:

Функция РезультатКомпоновкиВТЗ(СКД, КомпоновщикНастроек) Экспорт

   
НастройкиКомпоновщика = КомпоновщикНастроек.Настройки;
   
ПараметрыНастройки = НастройкиКомпоновщика.ПараметрыДанных;

   
// устанавливаем параметры отчета
   
ЗначениеПараметра = ПараметрыНастройки.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("НачалоПериода"));
   
ЗначениеПараметра.Значение = НачалоПериода;

   
ЗначениеПараметра = ПараметрыНастройки.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("КонецПериода"));
   
ЗначениеПараметра.Значение = КонецДня(КонецПериода);

   
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
   
МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СКД, НастройкиКомпоновщика,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));

   
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
   
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных);

   
ТаблицаРезультат = Новый ТаблицаЗначений;
   
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;

   
ПроцессорВывода.УстановитьОбъект(ТаблицаРезультат);
   
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);

    Возврат
ТаблицаРезультат;

КонецФункции

6) После запуска обработки можно установить параметры: начало и конец периода, а также определить отбор. Потом сохранить настройку. При последующей работе можно вернуться к этой настройке нажав кнопку восстановления настроек. Как это сделать показано на скриншоте.
Пример обработки можно скачать ЗДЕСЬ.


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

1 комментарий :

  1. Я хочу поделиться свидетельством о том, как г-н Бенджамин помог мне с займом в 2 000 000,00 долларов США для финансирования моего проекта по выращиванию марихуаны, я очень благодарен и пообещал поделиться этой законной финансирующей компанией с любым, кто ищет способ расширить свой бизнес-проект. .финансирующая компания. Любой, кто ищет финансовую поддержку, должен связаться с ними по адресу lfdsloans@outlook.com. Г-н Бенджамин также работает в WhatsApp + 1-989-394-3740, чтобы облегчить задачу любому заявителю.

    ОтветитьУдалить