→ 1с условное оформление формы. Почему может не работать условное оформление на управляемой форме

1с условное оформление формы. Почему может не работать условное оформление на управляемой форме

У нас есть некоторая форма списка, например, элементов плана вида характеристик "ПраваПользователей" в конфигурации "Управление производственным предприятием" версии 1.3.

Форма, как Вы видите, управляемая. нам нужно оформить список таким образом, чтобы все строки групп элементов выделялись зеленым цветом. Приступим!

Пример

Оформление элементов управляемых форм выполняется с помощью условного оформления формы:

Для решения нашей задачи добавим элемент условного оформления со следующими настройками:


При последующем открытии формы строки групп плана видов характеристик должны быть выделены зеленым цветом. Но...этого не происходит!


Дело в том, что список элементов и групп плана видов характеристик отображается на форме с помощью объекта формы с типом "Динамический список". Динамические списки использут возможности системы компоновки данных, включая отборы и условное оформление. Последнее как-раз и определяет конечное оформление списка, игнорируя настройки условного оформления самой формы. Добавим аналогичные настройки условного оформления для динамического списка.


Единственное отличие - в список оформляемых полей нужно добавить все видимые поля списка, на которые должно распостраняться условное оформление.

Вывод

Часто слышал, что условное оформление на управляемых формах не всегда работает. В итоге выяснялось, что просто настройки делалишь для формы, а не для динамического списка.

Надеюсь статья кому-нибудь да сэкономит время при решении проблем с условным оформлением.

Условное оформление управляемых форм.

Большинство тех, кто работал с СКД и созданием отчетов на СКД знает об условном оформлении не по наслышке. Изменить шрифт поля, цвет ячейки или представление в зависимости от значения в другом поле это уже вполне обыденная вещь.

Но вот с условным оформлением управляемых формы мы встречаемся реже. Хотя это не менее мощный, функциональный и нужный механизм.
Что же он из себя представляет. А все то же самое. По какому-либо условию мы можем настроить представления или свойства полей табличных элементов формы и они будут изменяться прямо налету.

Я говорю о полях динамических списков и табличных полей. Здесь из кода мы можем обратиться к отдельной колонке и установить свойства сразу для всей колонки, а вот установить свойства отдельного поля не можем.

Цитировать

Важно!!! Многие с этим сталкиваются и тратят впустую время. Условное оформление не работает для обычных полей формы (не табличных).

Где это может быть использовано помимо раскраски полей. Ну классический пример это представление видов в табличной части. Для бухгалтерии стандартно их может быть три. И обычно они выстраиваются в одном поле одно под другим. Поскольку в каждой строке может быть свой счет, то и состав аналитик может отличаться. И вообще если в каждой строке выводить по 3 аналитики, то это занимает очень много места. А зачем это делать если нам допустим где-то достаточно одного субконто, где-то двух.

Настройка свойствами формы

Рассмотрим на примере нами созданной табличной части в обработке.

Создадим обработку, куда добавим табличную часть с тремя реквизитами Субконто, а так же добавим реквизит КоличествоСубконто, которое будет указывать на количество субконто в строке.

Настройка условного оформления формы находится в свойствах формы на закладке Оформление.

Теперь наша задача указать программе, что при значении в строке поля КоличествоСубконто 1 должно отображаться только Субконто1, при значении 2: Субконото1 и Субконто2, при значении 3: Субконто1, Субконто2, Субконто3.

Для этого служит форма настройки условного оформления.

В колонке Оформляемые поля укажем поля Субконто1, Субконто2, Субконто3. Поскольку для каждого поля будет разное оформление, то заведем 3 строки.

Укажем, что оформлять будем свойство видимость.

А так же настроим условие при котором видимость будет выключаться.

Смотрим что получилось в предприятии. Добавим при этом строки в табличную часть и расставив значения количество субконто.

Как видно в разных строках отображается разное количество полей.

Настройка кодом

Помимо настройки с помощью свойств данную настройку можно произвести с помощью программного кода.
Если вы используете конфигурацию, построенную на , выглядеть это будет так (это относится ко всем типовым ):

ЭлементУО = УсловноеОформление.Элементы.Добавить();
КомпоновкаДанныхКлиентСервер.ДобавитьОформляемоеПоле(ЭлементУО.Поля, "ТабличнаяЧастьСубконто2");

ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ЭлементУО.Отбор,
"ТабличнаяЧастьКоличествоСубконто", ВидСравненияКомпоновкиДанных.Меньше, 2);

ЭлементУО.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);


В случае, если БСП не используется код будет немного длиннее. Просто приведу типовые процедуры из того же БСП.

Функция ДобавитьОформляемоеПоле(КоллекцияОформляемыхПолей, ИмяПоля) Экспорт

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

Возврат ПолеЭлемента;

КонецФункции


Функция ДобавитьЭлементКомпоновки(ОбластьДобавления,
Знач ИмяПоля,
Знач ВидСравнения,
Знач ПравоеЗначение = Неопределено,
Знач Представление = Неопределено,
Знач Использование = Неопределено,
знач РежимОтображения = Неопределено,
знач ИдентификаторПользовательскойНастройки = Неопределено) Экспорт

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

Если РежимОтображения = Неопределено Тогда
Элемент.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
Иначе
Элемент.РежимОтображения = РежимОтображения;
КонецЕсли;

Если ПравоеЗначение <> Неопределено Тогда
Элемент.ПравоеЗначение = ПравоеЗначение;
КонецЕсли;

Если Представление <> Неопределено Тогда
Элемент.Представление = Представление;
КонецЕсли;

Если Использование <> Неопределено Тогда
Элемент.Использование = Использование;
КонецЕсли;

// Важно: установка идентификатора должна выполняться
// в конце настройки элемента, иначе он будет скопирован
// в пользовательские настройки частично заполненным.
Если ИдентификаторПользовательскойНастройки <> Неопределено Тогда
Элемент.ИдентификаторПользовательскойНастройки = ИдентификаторПользовательскойНастройки;
ИначеЕсли Элемент.РежимОтображения <> РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный Тогда
Элемент.ИдентификаторПользовательскойНастройки = ИмяПоля;
КонецЕсли;

Возврат Элемент;

В данной публикации рассмотрим пример раскрашивания строк просроченных документов в журнале документов (динамическом списке) от текущей даты и текущего времени.

Наша задача – раскрасить розовым цветом строку, если Контрольный срок меньше Текущей даты с учетом того, что текущая дата постоянно меняется. То есть текущую дату надо считывать динамически, а не определять при первом открытии.

Мы узнаем, как в управляемой форме:

Использовать обработчик ожидания;

Программно настроить условное оформление динамического списка

Допустим, у нас есть документ «Умный заказ» с реквизитом «КонтрольныйСрок» и типом «Дата» (состав даты «Дата и время»):

И журнал документов «УмныйЗаказ» с графой «КонтрольныйСрок», соответствующей этому реквизиту:

Наша задача – раскрасить розовым цветом строку, если Контрольный срок меньше Текущей даты с учетом того, что текущая дата постоянно изменяется.

Создадим управляемую форму:

Теперь при создании на сервере мы вызовем процедуру раскрашивания строк «ОбновленияОтображенияПросрочкиНаСервере». И будем вызывать эту процедуру с заданной периодичностью.

 

 

Это интересно: