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