//infostart.ru/upload/iblock/17a/Рис1.pngСтыковка элементов управляемой формы и пользовательских настроек СКД.
Стандартно в формах отчета управляемого приложения для отображения и редактирования пользовательских настроек применяется таблица формы. Однако такому способу не хватает эргономических качеств а, иногда и функциональности. Предлагаемый набор модулей позволяет использовать для ведения данных пользовательских настроек СКД обыкновенные элементы управляемой формы. При этом предпринята попытка максимально упростить настройку этих элементов формы.
Для реализации этих возможностей разработано 3 расширения элементов формы. Возможное их использование представлено в скриншотах на рис. 1.
Расширение элемента тип 1 служит для простой привязки поля ввода, уже привязанного к какому либо реквизиту формы, к параметру данных или элементу отбора СКД, имеющему скалярный тип сравнения (равно, не равно).
Расширение элемента тип 2 для ввода параметров данных НачалоПериода и КонецПериода. При инициализации само создает требуемые реквизиты, поля ввода а так же команду и кнопку для открытия формы выбора периода и помещает эти элементы формы в указанный контейнер.
Расширение элемента тип 3 служит для ввода пользовательского отбора с видом значения, использующим список значений (в списке, не в списке, в группе из списка и т.д.). Автоматически создаются требуемые реквизиты и элементы формы.
Все расширения используют механизм сохранения пользовательских настроек, т.е. при открытии формы отчета, где они инициализированы, в элементы будут загружены значения сохраненных пользовательских настроек.
Система содержит три общих модуля СКДУП (Сервер,КлиентСервер и Клиент). Так же для работы расширения элемента тип 2 требуется общая форма для выбора периода. Эта форма должна принимать при открытии два параметра формы НачалоПериода и КонецПериода, а так же возвращать структуру с ключами НачалоПериода и КонецПериода (или Неопределено, если периода не изменялся). Для тестирования в демонстрационную конфигурацию добавлена общая форма НастройкаПериодаОтчета из 1СБухгалтерии.
Для настройки работы при обработке события ПриСозданииНаСервере формы отчета для каждого элемента расширения надо вызвать процедуру общего модуля СКДУПСервер.ИнициализироватьЭлементУправленияТипN (N = 1 или 2 или 3) в зависимости от требуемого типа расширения. Все описания параметров этих процедур и их значения по умолчанию приведены в комментариях к соответствующим процедурам модуля СКДУПСервер.
Пример инициализации из Демонстрационной БД (см. на скриншотах рис.2).
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// ***********************************************************************
// Инициализация связи элементов формы и пользовательских настроек СКД
// ***********************************************************************
СКДУПСервер.ИнициализироватьЭлементУправленияТип1(ЭтаФорма,"Организация");
СКДУПСервер.ИнициализироватьЭлементУправленияТип2(ЭтаФорма,Элементы.ГруппаНастройкаПериода);
СКДУПСервер.ИнициализироватьЭлементУправленияТип3(ЭтаФорма,"Склад",Элементы.ОтборПоСкладам,"Организация","Владелец");
СКДУПСервер.ИнициализироватьЭлементУправленияТип3(ЭтаФорма,"Номенклатура",Элементы.ОтборНоменклатуры);
// ***********************************************************************
// ***********************************************************************
КонецПроцедуры
Далее нужно скопировать в модуль формы отчета текст
// ***********************************************************************
// Вспомогательные Процедуры СКДУП
// ***********************************************************************
&НаСервере
Процедура СКДУП_ПередЗагрузкойПользовательскихНастроекНаСервере(Настройки)
СКДУПСервер.ПередЗагрузкойПользовательскихНастроекНаСервере(ЭтаФорма,Настройки);
КонецПроцедуры
&НаКлиенте
Процедура СКДУП_ПриОткрытии(Отказ)
СКДУПКлиент.ПриОткрытии(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура СКДУП_ПриИзменении(Элемент)
СКДУПКлиент.ПриИзменении(ЭтаФорма,Элемент);
КонецПроцедуры
&НаКлиенте
Процедура СКДУП_Команда(Команда)
СКДУПКлиент.ВыполнитьКоманду(ЭтаФорма,Команда);
КонецПроцедуры
&НаКлиенте
Процедура СКДУП_НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СКДУПКлиент.НачалоВыбора(ЭтаФорма,Элемент, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
// ***********************************************************************
// ***********************************************************************
(см. на скриншотах рис.3).
Этот текст всегда один и тот же. Его можно скопировать из Демонстрационной БД, или занести его в шаблоны текстов и в дальнейшем вставлять его одним кликом. Никаких привязок процедур к событиям элементов формы делать не надо.
И это все, что надо сделать для начала работы расширений элементов формы.