четверг, 15 марта 2018 г.

Примеры Условного оформления (программно)

Примеры Условного Оформления форм:

Пример1:

&НаСервере
Процедура УстановитьОформлениеФормыНаСервере()

ИменаСлужебныхПрефиксов  = НазначитьПрефиксИменСлужебныхЗначений(); 
ПрефиксИмениИнтервал = ИменаСлужебныхПрефиксов.Интервал;
ПрефиксИмениРучИзмЦены = ИменаСлужебныхПрефиксов.РучноеИзменениеЦены;

УсловноеОформление.Элементы.Очистить();

//
ЭлементОформления = УсловноеОформление.Элементы.Добавить();
ЭлементОформления.Представление = "СозданПрограммно";
//Отбор
ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен.ЭтоГруппа");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Истина;

//Оформление
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый  Шрифт(WindowsШрифты.ШрифтДиалоговИМеню,,11,Истина,,,));

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

//
ЭлементОформления = УсловноеОформление.Элементы.Добавить();
ЭлементОформления.Представление = "СозданПрограммно";
//Отбор
ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен.ЭтоГруппа");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Ложь;

ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен.БазоваяЦена");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = 0;

//Оформление
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.Розовый);
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Текст", "<не задана>");
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Серый);

//Поле оформления
ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("ДеревоЦенБазоваяЦена");


//оформление программно созданных колонок "Интервалы"
Для Каждого СтрокаИнтервала Из Интервалы Цикл 

ИдентификаторИнтервала = СтрокаИнтервала.ИдентификаторИнтервала;
ИмяПоля_РИзмЦены = СтрЗаменить(ИдентификаторИнтервала, ПрефиксИмениИнтервал, ПрефиксИмениРучИзмЦены);

//
ЭлементОформления = УсловноеОформление.Элементы.Добавить();

//
ЭлементОформления.Представление = "СозданПрограммно";

//Отбор
ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен."+ИмяПоля_РИзмЦены);
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Истина;

//Оформление
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.Бежевый);
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Синий);

//Поле оформления
ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
ПолеОформления.Поле = Новый ПолеКомпоновкиДанных(ИдентификаторИнтервала);


//
ЭлементОформления = УсловноеОформление.Элементы.Добавить();

//
ЭлементОформления.Представление = "СозданПрограммно";

//Отбор
ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен."+ИдентификаторИнтервала);
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = 0;

ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЦен.ЭтоГруппа");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Ложь;

//Оформление
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.Розовый);
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Текст", "<не задана>");
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Серый);

//Поле оформления
ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
ПолеОформления.Поле = Новый ПолеКомпоновкиДанных(ИдентификаторИнтервала);

КонецЦикла;

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

Пример2:
С использованием общей процедуры.

&НаСервере
Процедура УстановитьУсловноеОформление()

ерпОбщегоНазначенияСервер.УстановитьУсловноеОформление(ЭтаФорма, КомпоновщикНастроекТаблицаТовары, "ТаблицаТовары", "ТаблицаТовары");

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

Где, ерпОбщегоНазначенияСервер.УстановитьУсловноеОформление


Процедура СкопироватьПоляУсловногоОформления(ЭлементУсловногоОформления, ЭлементКомпоновщика, ИмяТаблицыОформления, ПрефиксИмениЭлементовФормы="")
    ЭлементыПоля = ЭлементКомпоновщика.Поля.Элементы;
    Если ЭлементыПоля.Количество() = 0 Тогда
        ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
        ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(ИмяТаблицыОформления);
        ОформляемоеПоле.Использование = Истина;
    Иначе
        Для каждого ЭлементПоля Из ЭлементыПоля Цикл
            ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
            ЗаполнитьЗначенияСвойств(ОформляемоеПоле, ЭлементПоля);
            ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(ПрефиксИмениЭлементовФормы+Строка(ЭлементПоля.Поле));
        КонецЦикла;
    КонецЕсли;
КонецПроцедуры // СкопироватьПоляУсловногоОформления()

Процедура СкопироватьОтборУсловногоОформления(ЭлементУсловногоОформления, ЭлементКомпоновщика, ИмяТаблицыОформления)

    Для каждого ЭлементОтбора Из ЭлементКомпоновщика.Элементы Цикл
        Если ТипЗнч(ЭлементОтбора) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда
            ГруппаОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
            ЗаполнитьЗначенияСвойств(ГруппаОтбора, ЭлементОтбора);
            СкопироватьОтборУсловногоОформления(ЭлементУсловногоОформления, ЭлементОтбора, ИмяТаблицыОформления);
        Иначе
            НовыйЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
            ЗаполнитьЗначенияСвойств(НовыйЭлементОтбора, ЭлементОтбора);
            НовыйЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяТаблицыОформления+"." + Строка(ЭлементОтбора.ЛевоеЗначение));
        КонецЕсли;
    КонецЦикла;

КонецПроцедуры // СкопироватьОтборУсловногоОформления()

Процедура СкопироватьЭлементОформления(ЭлементУсловногоОформления, ЭлементКомпоновщика)

    ЭлементыОформления = ЭлементКомпоновщика.Оформление.Элементы;

    Для каждого ЭлементОформления Из ЭлементыОформления Цикл
        Если ЭлементОформления.Использование Тогда
            ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра(ЭлементОформления.Параметр, ЭлементОформления.Значение);
        КонецЕсли;
    КонецЦикла;

КонецПроцедуры // СкопироватьЭлементОформления()

Процедура УстановитьУсловноеОформление(Форма, КомпоновщикНастроек, ИмяТаблицыОформления, ПрефиксИмениЭлементовФормы="") Экспорт
Форма.УсловноеОформление.Элементы.Очистить();
УсловноеОформлениеКомпоновщика = КомпоновщикНастроек.Настройки.УсловноеОформление;

    Для каждого ЭлементУФ Из УсловноеОформлениеКомпоновщика.Элементы Цикл

        ЭлементУсловногоОформления = Форма.УсловноеОформление.Элементы.Добавить();
        ЭлементУсловногоОформления.Использование = ЭлементУФ.Использование;

        // Заполняем поля к которым будет применятся условное оформление
        СкопироватьПоляУсловногоОформления(ЭлементУсловногоОформления, ЭлементУФ, ИмяТаблицыОформления, ПрефиксИмениЭлементовФормы);

        // Заполняем отбор для условного офрмления
        СкопироватьОтборУсловногоОформления(ЭлементУсловногоОформления, ЭлементУФ.Отбор, ИмяТаблицыОформления);

        // Заполняем элементы условного офрмления
        СкопироватьЭлементОформления(ЭлементУсловногоОформления, ЭлементУФ);

    КонецЦикла;
КонецПроцедуры


2 комментария:

  1. Работает, помогло, спасибо!

    ОтветитьУдалить
  2. А как вывести в параметре "Текст" значение из другой колонки табличного поля?

    ОтветитьУдалить