644 документа
← К списку

В режиме "Конфигуратор"

страница

В режиме «Конфигуратор»

Чтобы решить поставленную задачу, откроем форму списка документа ОказаниеУслуги, которую мы создали ранее. В редакторе формы создадим реквизиты формы ПрограммныйОтбор типа Булево и два реквизита произвольного типа — ПолеОтбора и ЗначениеОтбора. Эти реквизиты будут хранить информацию о программном отборе в форме списка.

Затем создадим обработчик события формы ПриСозданииНаСервере и заполним его следующим образом (листинг 27.8).

Листинг 27.8. Обработчик события формы «ПриСозданииНаСервере»

&НаСервере

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

 

Если Параметры.Отбор.Свойство("Мастер") Тогда

ПрограммныйОтбор = Истина;

ПолеОтбора = Новый ПолеКомпоновкиДанных("Мастер");

Параметры.Отбор.Свойство("Мастер",ЗначениеОтбора);

 

КонецЕсли

 

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

При создании формы списка с помощью коллекции параметров формы мы проверяем, был ли установлен отбор по полю Мастер. Если такой отбор установлен, то мы устанавливаем признак того, что форма была открыта с программным отбором, реквизит ПолеОтбора устанавливаем как поле компоновки данных с именем Мастер, а в реквизит ЗначениеОтбора помещаем соответствующее значение отбора из коллекции параметров формы.

Далее создадим обработчик события формы ПриОткрытии и заполним его следующим образом (листинг 27.9).

Листинг 27.9. Обработчик события формы «ПриОткрытии»

&НаКлиенте

Процедура ПриОткрытии(Отказ)

 

Если ПрограммныйОтбор = Истина Тогда

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

Для Каждого ЭлементНастроек Из ПрограммныеНастройки.Отбор.Элементы Цикл

Если ЭлементНастроек.ЛевоеЗначение = ПолеОтбора Тогда

ПрограммныеНастройки.Отбор.Элементы.Удалить(ЭлементНастроек);

 

КонецЕсли;

 

КонецЦикла;

 

Настройки = Список.КомпоновщикНастроек.Настройки;

 

ЭлементОтбора = Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));

ЭлементОтбора.ЛевоеЗначение = ПолеОтбора;

ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;

ЭлементОтбора.ПравоеЗначение = ЗначениеОтбора;

 

Список.КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);

 

КонецЕсли;

 

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

Код обработчика выполняется в случае, если форма была открыта с программным отбором.

Сначала обходится коллекция элементов отбора фиксированных настроек компоновщика настроек динамического списка. Если в коллекции присутствует элемент отбора, в котором ЛевоеЗначение равно значению реквизита ПолеОтбора (т. е. установлен программный отбор по полю Мастер), то этот элемент удаляется.

Затем этот же отбор добавляется в коллекцию настроек динамического списка КомпоновщикНастроек.Настройки.Отбор, и измененные настройки загружаются в компоновщик настроек.

Теперь осталось только удалить созданный элемент отбора при закрытии формы списка документа ОказаниеУслуги.

Для этого создадим обработчик события формы ПередЗакрытием и заполним его следующим образом (листинг 27.10).

Листинг 27.10. Обработчик события формы «ПередЗакрытием»

&НаКлиенте

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

 

Если ПрограммныйОтбор = Истина Тогда

Настройки = Список.КомпоновщикНастроек.Настройки;

Для Каждого ЭлементНастроек Из Настройки.Отбор.Элементы Цикл

Если ЭлементНастроек.ЛевоеЗначение = ПолеОтбора Тогда

Настройки.Отбор.Элементы.Удалить(ЭлементНастроек);

 

КонецЕсли;

 

КонецЦикла;

 

Список.КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);

 

КонецЕсли;

 

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

Код обработчика выполняется в случае, если форма была открыта с программным отбором.

Коллекция элементов отбора настроек компоновщика настроек динамического списка КомпоновщикНастроек.Настройки.Отбор обходится в цикле. Если в коллекции присутствует элемент отбора, в котором ЛевоеЗначение равно значению реквизита ПолеОтбора, то этот элемент удаляется. Затем измененные настройки загружаются в компоновщик настроек.