Построитель условного оформления
1. Назначение
Проект является реализацией паттерна проектирования Построитель (Builder), для программного создания элементов условного оформления. Его использование позволяет сократить объем кода и повысить его понимание. Например фрагмент процедуры УстановитьУсловноеОформление из общей формы ФормаНастроекОтчета
// Отборы.
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыЗаголовок.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЗаголовокПереопределен");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
//
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыИспользование.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ВыводитьФлажок");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь);
//
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыУсловие.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыЗначение.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПредставлениеЗначения.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыИндексКартинкиДоступа.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыЗаголовок.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоРаздел");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
при использовании построителя можно переписать как
// Отборы.
ПостроительУО = МОД_ОбщегоНазначения.НовыйПостроительУсловногоОформления(УсловноеОформление);
ПостроительУО.Добавить()
.Поля(Элементы.ОтборыЗаголовок.Имя)
.ОтборЗначение("Отборы.ЗаголовокПереопределен", Ложь)
.Оформление("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
ПостроительУО.Добавить()
.Поля(Элементы.ОтборыИспользование.Имя)
.ОтборЗначение("Отборы.ВыводитьФлажок", Ложь)
.Оформление("Видимость", Ложь)
.Оформление("Отображать", Ложь);
ПостроительУО.Добавить()
.Поля("Условие,Значение,ПредставлениеЗначенияИндексКартинкиДоступа,Заголовок", "Отборы")
.ОтборЗначение("Отборы.ЭтоРаздел", Истина)
.Оформление("ТолькоПросмотр", Истина);
2. Описание программного интерфейса
2.1. Добавить() - добавление нового элемента условного оформления. Допускается (хотя и не рекомендуется) создавать несколько элементов условного оформления за один вызов, например:
МОД_ОбщегоНазначения.НовыйПостроительУсловногоОформления(УсловноеОформление)
.Добавить()
.Оформление(...)
...
.Добавить()
...
2.2. Оформление(ИмяПараметра, Значение) - Установка параметра оформления
2.3. ОтборЗначение(ПолеПуть, Значение) - Добавление отбора по значению
2.4. Отбор(ПолеПуть, ВидСравнения, ПравоеЗначение = Неопределено) - Добавление произвольного отбора
2.5. ГруппаОтборов(ТипГруппы) - Добавление группы элементов отбора. Каждое определение группы должно завершаться вызовом КонецГруппы()
МОД_ОбщегоНазначения.НовыйПостроительУсловногоОформления(УсловноеОформление).Добавить()
.ГруппаОтборов("ИЛИ")
.ОтборЗначение(...)
.Отбор(...)
.КонецГруппы()
2.6. Поля(ИменаПоля, ПрефиксИмениРодитель) - Добавление оформляемых полей Если в качестве второго параметра передана элемент типа ГруппаФормы или ТаблицаФормы, система добавил в оформление поля, подчиненные текущему, при этом в поле ИменаПолей необходимо передать "*"
2.7. Условие(ЗначениеУсловия) - Начало условного выполнения. Каждое определение условия должно завершаться вызовом КонецУсловия() Позволяет добавить необязательные части условного оформления без разрыва его определения, например
МОД_ОбщегоНазначения.НовыйПостроительУсловногоОформления(УсловноеОформление).Добавить()
.Поля("Поле1")
.Условие(ДобавлятьПоле2)
.Поля("Поле2")
.КонецУсловия()
2.8. УстановитьСвойство(Имя, Значение) - позволяет установить значение свойства результата последнего вызова. Например:
МОД_ОбщегоНазначения.НовыйПостроительУсловногоОформления(УсловноеОформление).Добавить()
.УстановитьСвойство("Представление", "Добавленные")
.Отбор("Поле1", Значение1)
.УстановитьСвойство("Использование", Ложь)
2.9. ТекущийРезультат() - Результат последнего действия условного оформления Например в добавленную группу элементов отбора необходимо скопировать отборы
ПостроительУО = МОД_ОбщегоНазначения.НовыйПостроительУсловногоОформления(УсловноеОформление).Добавить()
.ГруппаОтборов("И");
СкопироватьНастройки(Настройки.Отбор, ПостроительУО.ТекущийРезультат());
2.10. ТекущийЭлемент() - Последний добавленный элемент условного оформления
3. Пример
Пример использования построителя можно посмотреть в форме документе "Документ" проекта