Skip to content

shcherbakov-vadim/condappear-builder

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Построитель условного оформления

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. Пример

Пример использования построителя можно посмотреть в форме документе "Документ" проекта

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published