В продолжение статьи Выгрузка результата СКД в таблицу значений рассмотрим, как установить отбор для созданной нами СКД, а также сохранять и восстанавливать настройки отбора и периода.
Для сохранения будут использоваться стандартные процедуры, которые применяются в отчетах в толстом клиенте (регистр сведений "Сохраненные настройки").
1) Для начала добавим в обработку реквизит "НастройкаОтбора" - тип "Строка", неограниченной длины. В этом реквизите и будет храниться наш отбор. Сохранять отбор будем с помощью функции сохранения значений ЗначениеВСтрокуВнутр(), а восстанавливать - ЗначениеИзСтрокиВнутр().
Функция РезультатКомпоновкиВТЗ(СКД, КомпоновщикНастроек) Экспорт
НастройкиКомпоновщика = КомпоновщикНастроек.Настройки;
ПараметрыНастройки = НастройкиКомпоновщика.ПараметрыДанных;
// устанавливаем параметры отчета
ЗначениеПараметра = ПараметрыНастройки.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("НачалоПериода"));
ЗначениеПараметра.Значение = НачалоПериода;
ЗначениеПараметра = ПараметрыНастройки.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("КонецПериода"));
ЗначениеПараметра.Значение = КонецДня(КонецПериода);
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СКД, НастройкиКомпоновщика,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных);
ТаблицаРезультат = Новый ТаблицаЗначений;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ПроцессорВывода.УстановитьОбъект(ТаблицаРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
Возврат ТаблицаРезультат;
КонецФункции
6) После запуска обработки можно установить параметры: начало и конец периода, а также определить отбор. Потом сохранить настройку. При последующей работе можно вернуться к этой настройке нажав кнопку восстановления настроек. Как это сделать показано на скриншоте.
Пример обработки можно скачать ЗДЕСЬ.
Для сохранения будут использоваться стандартные процедуры, которые применяются в отчетах в толстом клиенте (регистр сведений "Сохраненные настройки").
1) Для начала добавим в обработку реквизит "НастройкаОтбора" - тип "Строка", неограниченной длины. В этом реквизите и будет храниться наш отбор. Сохранять отбор будем с помощью функции сохранения значений ЗначениеВСтрокуВнутр(), а восстанавливать - ЗначениеИзСтрокиВнутр().
2) Теперь добавим реквизит формы "КомпоновщикНастроек" - тип "КомпоновщикНастроекКомпоновкиДанных".
3) Откроем форму выберем пункт меню "Форма" - "Вставить элемент управления..." и добавим табличную часть "НастройкаОтбора" вместе с командной панелью.
4) Откроем свойства табличной части и в поле "Данные" выберем тип "КомпоновщикНастроек.Настройки.Отбор". Табличная часть примет вид как на рисунке ниже.
5) Теперь напишем код, который будет использоваться для сохранения/восстановления отбора.
На панели формы создадим две кнопки "Сохранить" и "Восстановить настройки", а в модуле формы определим такой код:
Перем СКД;
Перем мТекущаяНастройка;
Процедура КнопкаВыполнитьНажатие(Кнопка)
Продажи.Загрузить(РезультатКомпоновкиВТЗ(СКД, КомпоновщикНастроек));
КонецПроцедуры
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
ЗагрузитьНастройкуОтбора();
КонецПроцедуры
Процедура ЗагрузитьНастройкуОтбора()
СохраненнаяНастройка = ?(ЗначениеЗаполнено(НастройкаОтбора),ЗначениеИзСтрокиВнутр(НастройкаОтбора),Неопределено);
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СКД));
Настройки = ?(НЕ СохраненнаяНастройка = Неопределено,СохраненнаяНастройка, СКД.НастройкиПоУмолчанию);
КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
КонецПроцедуры
// Процедура восстановления сохраненных настроек
//
Процедура ВосстановитьНастройки() Экспорт
Перем СохраненнаяНастройка;
СтруктураНастройки = Новый Структура;
СтруктураНастройки.Вставить("Пользователь", глЗначениеПеременной("глТекущийПользователь"));
СтруктураНастройки.Вставить("ИмяОбъекта", Строка(ЭтотОбъект));
СтруктураНастройки.Вставить("НаименованиеНастройки", ?(мТекущаяНастройка = Неопределено, Неопределено, мТекущаяНастройка.НаименованиеНастройки));
Результат = УниверсальныеМеханизмы.ВосстановлениеНастроек(СтруктураНастройки);
Если Результат <> Неопределено Тогда
мТекущаяНастройка = Результат;
ВосстановитьНастройкиИзСтруктуры(Результат.СохраненнаяНастройка);
Иначе
мТекущаяНастройка = СтруктураНастройки;
КонецЕсли;
КонецПроцедуры // ВосстановитьНастройки()
// Процедура сохранения настроек
//
Процедура СохранитьНастройки() Экспорт
Перем СохраненнаяНастройка;
СформироватьСтруктуруДляСохраненияНастроек(СохраненнаяНастройка);
СтруктураНастройки = Новый Структура;
СтруктураНастройки.Вставить("Пользователь", глЗначениеПеременной("глТекущийПользователь"));
СтруктураНастройки.Вставить("ИмяОбъекта", Строка(ЭтотОбъект));
СтруктураНастройки.Вставить("НаименованиеНастройки", ?(мТекущаяНастройка = Неопределено, Неопределено, мТекущаяНастройка.НаименованиеНастройки));
СтруктураНастройки.Вставить("СохраненнаяНастройка", СохраненнаяНастройка);
СтруктураНастройки.Вставить("ИспользоватьПриОткрытии", Ложь);
СтруктураНастройки.Вставить("СохранятьАвтоматически", Ложь);
Результат = УниверсальныеМеханизмы.СохранениеНастроек(СтруктураНастройки);
Если Результат <> Неопределено Тогда
мТекущаяНастройка = Результат;
Иначе
мТекущаяНастройка = СтруктураНастройки;
КонецЕсли;
КонецПроцедуры // СохранитьНастройки()
// Процедура восстановления значений реквизитов
//
Процедура ВосстановитьНастройкиИзСтруктуры(СтруктураСНастройками) Экспорт
//Перем ТаблицаПоказателейОтчета;
Если ТипЗнч(СтруктураСНастройками) <> Тип("Структура") Тогда
Возврат;
КонецЕсли;
ЗаполнитьЗначенияСвойств(ЭтотОбъект, СтруктураСНастройками);
ЗагрузитьНастройкуОтбора();
КонецПроцедуры // ВосстановитьНастройкиИзСтруктуры()
// Процедура сохранения значений реквизитов
//
Процедура СформироватьСтруктуруДляСохраненияНастроек(СтруктураСНастройками) Экспорт
Если ТипЗнч(СтруктураСНастройками) <> Тип("Структура") Тогда
СтруктураСНастройками = Новый Структура;
КонецЕсли;
СтруктураСНастройками.Вставить("НастройкаОтбора", ЗначениеВСтрокуВнутр(КомпоновщикНастроек.Настройки));
СтруктураСНастройками.Вставить("НачалоПериода", НачалоПериода);
СтруктураСНастройками.Вставить("КонецПериода", КонецПериода);
КонецПроцедуры // СформироватьСтруктуруДляСохраненияНастроек()
Процедура ДействияФормыСохранитьНастройки(Кнопка)
СохранитьНастройки();
КонецПроцедуры
Процедура ДействияФормыВосстановитьНастройки(Кнопка)
ВосстановитьНастройки();
ЗагрузитьНастройкуОтбора();
КонецПроцедуры
СКД = ПолучитьМакет("ПродажиЗаПериод");
Перем мТекущаяНастройка;
Процедура КнопкаВыполнитьНажатие(Кнопка)
Продажи.Загрузить(РезультатКомпоновкиВТЗ(СКД, КомпоновщикНастроек));
КонецПроцедуры
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
ЗагрузитьНастройкуОтбора();
КонецПроцедуры
Процедура ЗагрузитьНастройкуОтбора()
СохраненнаяНастройка = ?(ЗначениеЗаполнено(НастройкаОтбора),ЗначениеИзСтрокиВнутр(НастройкаОтбора),Неопределено);
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СКД));
Настройки = ?(НЕ СохраненнаяНастройка = Неопределено,СохраненнаяНастройка, СКД.НастройкиПоУмолчанию);
КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
КонецПроцедуры
// Процедура восстановления сохраненных настроек
//
Процедура ВосстановитьНастройки() Экспорт
Перем СохраненнаяНастройка;
СтруктураНастройки = Новый Структура;
СтруктураНастройки.Вставить("Пользователь", глЗначениеПеременной("глТекущийПользователь"));
СтруктураНастройки.Вставить("ИмяОбъекта", Строка(ЭтотОбъект));
СтруктураНастройки.Вставить("НаименованиеНастройки", ?(мТекущаяНастройка = Неопределено, Неопределено, мТекущаяНастройка.НаименованиеНастройки));
Результат = УниверсальныеМеханизмы.ВосстановлениеНастроек(СтруктураНастройки);
Если Результат <> Неопределено Тогда
мТекущаяНастройка = Результат;
ВосстановитьНастройкиИзСтруктуры(Результат.СохраненнаяНастройка);
Иначе
мТекущаяНастройка = СтруктураНастройки;
КонецЕсли;
КонецПроцедуры // ВосстановитьНастройки()
// Процедура сохранения настроек
//
Процедура СохранитьНастройки() Экспорт
Перем СохраненнаяНастройка;
СформироватьСтруктуруДляСохраненияНастроек(СохраненнаяНастройка);
СтруктураНастройки = Новый Структура;
СтруктураНастройки.Вставить("Пользователь", глЗначениеПеременной("глТекущийПользователь"));
СтруктураНастройки.Вставить("ИмяОбъекта", Строка(ЭтотОбъект));
СтруктураНастройки.Вставить("НаименованиеНастройки", ?(мТекущаяНастройка = Неопределено, Неопределено, мТекущаяНастройка.НаименованиеНастройки));
СтруктураНастройки.Вставить("СохраненнаяНастройка", СохраненнаяНастройка);
СтруктураНастройки.Вставить("ИспользоватьПриОткрытии", Ложь);
СтруктураНастройки.Вставить("СохранятьАвтоматически", Ложь);
Результат = УниверсальныеМеханизмы.СохранениеНастроек(СтруктураНастройки);
Если Результат <> Неопределено Тогда
мТекущаяНастройка = Результат;
Иначе
мТекущаяНастройка = СтруктураНастройки;
КонецЕсли;
КонецПроцедуры // СохранитьНастройки()
// Процедура восстановления значений реквизитов
//
Процедура ВосстановитьНастройкиИзСтруктуры(СтруктураСНастройками) Экспорт
//Перем ТаблицаПоказателейОтчета;
Если ТипЗнч(СтруктураСНастройками) <> Тип("Структура") Тогда
Возврат;
КонецЕсли;
ЗаполнитьЗначенияСвойств(ЭтотОбъект, СтруктураСНастройками);
ЗагрузитьНастройкуОтбора();
КонецПроцедуры // ВосстановитьНастройкиИзСтруктуры()
// Процедура сохранения значений реквизитов
//
Процедура СформироватьСтруктуруДляСохраненияНастроек(СтруктураСНастройками) Экспорт
Если ТипЗнч(СтруктураСНастройками) <> Тип("Структура") Тогда
СтруктураСНастройками = Новый Структура;
КонецЕсли;
СтруктураСНастройками.Вставить("НастройкаОтбора", ЗначениеВСтрокуВнутр(КомпоновщикНастроек.Настройки));
СтруктураСНастройками.Вставить("НачалоПериода", НачалоПериода);
СтруктураСНастройками.Вставить("КонецПериода", КонецПериода);
КонецПроцедуры // СформироватьСтруктуруДляСохраненияНастроек()
Процедура ДействияФормыСохранитьНастройки(Кнопка)
СохранитьНастройки();
КонецПроцедуры
Процедура ДействияФормыВосстановитьНастройки(Кнопка)
ВосстановитьНастройки();
ЗагрузитьНастройкуОтбора();
КонецПроцедуры
СКД = ПолучитьМакет("ПродажиЗаПериод");
В модуле объекта:
Функция РезультатКомпоновкиВТЗ(СКД, КомпоновщикНастроек) Экспорт
НастройкиКомпоновщика = КомпоновщикНастроек.Настройки;
ПараметрыНастройки = НастройкиКомпоновщика.ПараметрыДанных;
// устанавливаем параметры отчета
ЗначениеПараметра = ПараметрыНастройки.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("НачалоПериода"));
ЗначениеПараметра.Значение = НачалоПериода;
ЗначениеПараметра = ПараметрыНастройки.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("КонецПериода"));
ЗначениеПараметра.Значение = КонецДня(КонецПериода);
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СКД, НастройкиКомпоновщика,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных);
ТаблицаРезультат = Новый ТаблицаЗначений;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ПроцессорВывода.УстановитьОбъект(ТаблицаРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
Возврат ТаблицаРезультат;
КонецФункции
6) После запуска обработки можно установить параметры: начало и конец периода, а также определить отбор. Потом сохранить настройку. При последующей работе можно вернуться к этой настройке нажав кнопку восстановления настроек. Как это сделать показано на скриншоте.
Пример обработки можно скачать ЗДЕСЬ.
Я хочу поделиться свидетельством о том, как г-н Бенджамин помог мне с займом в 2 000 000,00 долларов США для финансирования моего проекта по выращиванию марихуаны, я очень благодарен и пообещал поделиться этой законной финансирующей компанией с любым, кто ищет способ расширить свой бизнес-проект. .финансирующая компания. Любой, кто ищет финансовую поддержку, должен связаться с ними по адресу lfdsloans@outlook.com. Г-н Бенджамин также работает в WhatsApp + 1-989-394-3740, чтобы облегчить задачу любому заявителю.
ОтветитьУдалить