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