1с скд условное оформление не работает
Войдите как ученик, чтобы получить доступ к материалам школы
Система компоновки данных 1С 8.3 для начинающих: меняем оформление
Автор уроков и преподаватель школы: Владимир Милькин
Ставим цель
- Сделать копию отчёта с прошлого урока
- Изменить его имя на "Урок4.erf"
- Внести изменения в копию отчёта (сегодня разбираем примеры с условным оформлением)
Делаем копию отчёта с прошлого урока
Делаем копию отчёта с прошлого урока:
Переименовываем копию в "Урок4.erf":
Открываем базу "Гастроном" в конфигуратор:
Открываем отчёт "Урок4.erf":
В форме отчёта меняем имя на "Урок4" и открываем схему компоновки данных:
Давайте вспомним, как выглядит отчёт прошлого урока в режиме пользователя:
Сокращаем длину дробной части
Первая проблема, которую нам предстоит решить, это вывод слишком большого количества цифр после запятой (177,666666. ).
Причиной этого послужило деление при нахождении среднего. Чтобы устранить этот недостаток укажем в настройках поля "СредняяКалорийность" формат вывода чисел, подразумевающий только 2 числа в дробной части.
Для этого переходим на закладку "Настройки", там выделяем пункт "Отчет", далее в самом низу выделяем закладку "Условное оформление" и нажимаем зелёный плюсик, чтобы добавить новую запись:
В появившейся записи настраиваем поле "Оформляемые поля", чтобы указать к каким именно полям мы будем применять условное оформление:
В открывшемся диалоге нажимаем зелёный плюсик, чтобы добавить поле:
Добавляем поле "СредняяКалорийность" (именно в нём выводится слишком много чисел в дробной части), получилось вот так:
Теперь переходим к настройке поля "Оформление":
Наша задача задать правильный числовой формат:
Указываем значение точности равное двум:
Получилось вот так:
Итоговая запись условного оформления выглядит так:
Сохраняем отчёт и открываем (конфигуратор закрывать не нужно) в режиме пользователя:
Отлично, теперь дробная часть округляется до 2 чисел.
Выводим итоги жирным шрифтом
Теперь было бы здорово, чтобы итоговые значения вкуса, калорийности и средней калорийности выводились жирным шрифтом.
Это также легко сделать при помощи условного оформления.
Переходим на закладку "Настройки", далее выделяем пункт "Цвет" (потому что мы делаем настройку оформления, которая будет относится только к группировке цвет), далее переходим на закладку "Условное оформление" и снова нажимаем зелёный плюсик:
В новой записи настраиваем пункт "Оформляемые поля" (кнопка многоточие) и выбираем поля "Вкус", "Калорийность" и "СредняяКалорийность":
Переходим к настройке поля "Оформление":
Здесь находим пункт "Шрифт" и также открываем его по кнопке многоточие:
Начертание шрифта настраиваем вот так:
Нажимаем "Ок" и ещё раз "Ок":
Получилось вот так:
Сохраняем отчёт и формируем в режиме пользователя:
Отлично, но не совсем. Хочется, чтобы жирным выводились только значения итогов напротив цветов, а у нас условное оформление применилось ещё и к заголовкам полей и к общим итогам. Исправим это.
Для этого возвращаемся к записи условного оформления, которую мы только что создали и настраиваем поле "Область использования":
Снимаем галки напротив "В общем итоге" и "В заголовке полей":
Снова сохраняем отчёт и формируем в режиме пользователя:
Выводим жирным шрифтом общие итоги
А теперь давайте добьёмся, чтобы вся общая строка итогов (включая слово "Итого") выводилась жирным шрифтом.
Для этого переходим на закладку "Настройки", выделяем пункт "Отчет" (применяем настройки в целом к отчёту), далее переходим на закладку "Условное оформление" и добавляем ещё одну запись (зелёная кнопка плюс):
В новой записи не указывать "Оформляемые поля", что означает, что мы хотим применить оформление ко всем полям, а вместо этого настраиваем оформление:
Наконец, правильно настраиваем "Область использования" нашей записи:
Оставляем единственный пункт - "В общем итоге":
Получилось вот так:
Сохраняем отчёт и формируем в режиме пользователя:
Мы добились своего
Разукрашиваем фон заголовка полей и общие итоги
А что, если нам разукрасить фон заголовка полей и итоговой строки в зелёный цвет? А текст в белый?
Я покажу как легко это делается.
Вновь переходим на закладку "Настройки", выделяем пункт "Отчет", далее переходим на закладку "Условное оформление" и жмём зелёный плюсик, чтобы добавить ещё одну запись:
Сразу настраиваем "Область использования новой записи (оставляем только "В общем итоге" и "В заголовке полей"):
Далее переходим к полю "Оформление" новой записи, настраиваем цвет фона и цвет текста как на картинке ниже:
Получилось вот так:
Сохраняем отчёт и формируем в режиме пользователя:
Добавляем заголовок
Ну и в качестве завершающего приёма этого урока установим заголовок отчёта (мы это уже делали в прошлых уроках).
Для этого переходим на закладку "Настройки", выделяем пункт "Отчет", далее переходим на закладку "Другие настройки" и там настраиваем пункты "Выводить заголовок" и "Заголовок" вот так:
Сохраняем отчёт и формируем в режиме пользователя:
Войдите на сайт как ученик
Для учеников
Прибегайте к изучению эталонного варианта только после самостоятельного выполнения всех шагов.
На вопросы учеников — отвечаю по почте, но прежде загляните в ЧАВО (ссылка) .
Вопрос возник по СКД, при создании условного оформления, настраивается отбор, по которому закрашивается строка, но, если поле которое участвует в отборе (по которому закрашивается строка) мы не выводим в отчете (но оно присутсвует в запросе и в списке полей СКД), то закрашивание не работает. Такой проблемы в отчетах с Построителем не было там Условное оформление применялось, даже если поле не выводилось в отчет, сталкивался ктонибудь с такой ситуацией и как решили проблему?
(1) что мешает в СКД в роли указанного поля установить галку "Обязательное"?
тогда оптимизатор не будет его выбрасывать
(6) Это самое очевидное решение, но не работает. (Платформа 8.3.13.1513, конфигурация УТ11.4.6.188)
Вариант (3) то же не заработал.
Может есть еще какое то решение?
Это происходит из-за "оптимизатора", который работает при обработке макета. А он выкидывает из запроса поля, которые не будут выводиться. Таким образом для решения этой проблемы приходится все же выводить дополнительные поля в отчет (пряча их с помощью задания оформления - ширина столбца, цвет шрифта и т.п.).
Решить вопрос с условным оформление по невыводимому полю можно элегантнее. Нужно добавить новую группировку и в нее поместить поле, которое участвует в отборе и которое не нужно выводить, напротив поля оставить галочку-признак вывода, а напротив группировки снять. В этом случае условное оформление отработает а отчет останется в нужном виде
(3) что-то так тоже не получилось..но работает как Вы написали, только когда напротив поля снять галочку, а у группировки оставить..
С сопоставлением перечислений почему-то условное оформление не взлетело. Пришлось через параметры протаскивать числовые значения и от их значений раскрашивать.
Чортов оптимизатор СКД. Ну указал же "Обязательное" но все равно не работает. Что деалать не понятно.
Столкнулся с подобной же проблемой. Как оказалось, мало сделать поле обязательным к выводу, нужно также данное поле перенести в ресурсы СКД.
Т.е. если оформляем какое-то поле по скрытому полю нужно
1) это поле объявить ресурсом
2) это поле сделать обязательным к выводу
(10) Скажу больше. Делать поле обязательным нет необходимости, оптимизатор СКД не "выкидывает" поля, используемые в условном оформлении из запроса. Даже как-то обидно за СКД: чуть что, так сразу оптимизатор виноват.
Чтобы условное оформление сработало, поле, участвующее в условии, должно быть вычислимым. Если это обычное поле, то оно будет вычислимым либо в детальных записях, либо в группировках по этому полю. Если поле условия ресурс - оно вычислимо везде, кроме искусственно заданных ограничений на закладке выражений ресурсов.
Попробуйте свое поле (не ресурс), по которому настроено условное оформление, включить в выбранные поля на уровне отчета. Если этого поля нет в группировках, а среди группировок нет детальных записей, то и выбранное поле Вы не увидите. Соответственно и условное оформление рассчитать нет возможности.
А если поле из условного оформления - ресурс, в выбранные поля мы его без проблем можем включить, стало быть и условное оформление будет работать.
Делаю условное оформление (в конфигураторе, НЕ программно):
Использование = "Истина"
Оформление = "Видимость = Ложь"
Условие = "Объект.Реквизит1 Равно 'Перечисление.Перечисление1.Значение10'"
Оформляемые поля = "Элемент2"
Вопрос: почему не срабатывает УО, когда выбираю "Значение10" в поле "Элемент1"?
forbuk; Necytij; Рамзес; igee12; KirinaAS; Mechanik21; freeek; AKZARD; Rustavelli; klinval; CeHbKA; + 11 – Ответить
forbuk; Necytij; Рамзес; igee12; KirinaAS; Mechanik21; freeek; AKZARD; Rustavelli; klinval; CeHbKA; + 11 – Ответить
(3) Поручик, Спасибо, я так и предположил, но до последнего надеялся. Странно тока, почему тогда в списке выбора поля доступны все поля?
(3) Поручик, а я и не туда, долблюсь долблюсь, а оно не пашет, все как с табличными полями ранее делал для поля не табличного и тут засада))
значит по старинке нужно делать))
Условия задачи.
Есть два реквизита во внешней обработке:
- ПолеДоступностьюКоторогоНужноУправлять - Любой тип
- ПолеКотороеРулитДоступностьюДругогоПоля - Булево
Оба реквизита кинуты на форму.
Тыкая галочку у реквизита ПолеКотороеРулитДоступностьюДругогоПоля, ничего не происходит с полем ПолеДоступностьюКоторогоНужноУправлять, а хотелось бы чтобы оно меняло доступность.
Что тут может быть не так?
(12) spacecraft, условное никак у меня не получилось оно не отрабатывает, я предположил что это связано с тем когда форма создается, нет тех данных которые я указываю для сравнения.
(13) EMelihoff, так это же не так, условное форматирование задается на сервере, в контексте сервера значения есть в реквизитах (вернее доступны на сервере), да это и не важно, при описании условного оформления мы явно указываем какой реквизит нужно всегда сравнивать с неким заранее заданным значением и если сравнение проходит, то должно что-то происходить в оформлении, в частности мне нужно чтобы менялась Доступность поля в зависимости от значений другого поля
картина непонятная мне на самом деле, почему не пашет условное оформление, наверное мат часть плохо знаю
из формы документа РегламентнаяОперация БП 3.0.41
и тут же на тебе
(14) Brawler, у меня не работало, я сделал как написал, если ето-то даст ответ почему, буду признателен!
(1) doom2good, попробуйте программно, может увидите в чём косяк, я тоже делал УО и не получалось, сделал програмно, понял что в данном контектсе у меня не все данные и УО их не видит
(1) doom2good,
Учитесь читать справку, даже во встроенной есть
23. ОтметкаНезаполненного(MarkIncomplete) - отмечать ячейку как незаполненную - тип значения Булево;
24. Видимость(Visible) - Булево. Используется только для поля, расположенного в таблице (колонки);
25. Доступность(Enabled) - Булево. Используется только для поля, расположенного в таблице (колонки);
26. ТолькоПросмотр(ReadOnly) - Булево. Используется только для поля, расположенного в таблице (колонки);
27. Отображать(Show) - Булево. Использует только для поля, расположенного в таблице (колонки).
Большинство тех, кто работал с СКД и созданием отчетов на СКД знает об условном оформлении не по наслышке. Изменить шрифт поля, цвет ячейки или представление в зависимости от значения в другом поле это уже вполне обыденная вещь.
Но вот с условным оформлением управляемых формы мы встречаемся реже. Хотя это не менее мощный, функциональный и нужный механизм.
Что же он из себя представляет. А все то же самое. По какому-либо условию мы можем настроить представления или свойства полей табличных элементов формы и они будут изменяться прямо налету.
Я говорю о полях динамических списков и табличных полей. Здесь из кода мы можем обратиться к отдельной колонке и установить свойства сразу для всей колонки, а вот установить свойства отдельного поля не можем.
Важно. Многие с этим сталкиваются и тратят впустую время. Условное оформление не работает для обычных полей формы (не табличных).
Где это может быть использовано помимо раскраски полей. Ну классический пример это представление видов в табличной части. Для бухгалтерии стандартно их может быть три. И обычно они выстраиваются в одном поле одно под другим. Поскольку в каждой строке может быть свой счет, то и состав аналитик может отличаться. И вообще если в каждой строке выводить по 3 аналитики, то это занимает очень много места. А зачем это делать если нам допустим где-то достаточно одного субконто, где-то двух.
Настройка свойствами формы
Рассмотрим на примере нами созданной табличной части в обработке.
Создадим обработку, куда добавим табличную часть с тремя реквизитами Субконто, а так же добавим реквизит КоличествоСубконто, которое будет указывать на количество субконто в строке.
Настройка условного оформления формы находится в свойствах формы на закладке Оформление.
Теперь наша задача указать программе, что при значении в строке поля КоличествоСубконто 1 должно отображаться только Субконто1, при значении 2: Субконото1 и Субконто2, при значении 3: Субконто1, Субконто2, Субконто3.
Для этого служит форма настройки условного оформления.
В колонке Оформляемые поля укажем поля Субконто1, Субконто2, Субконто3. Поскольку для каждого поля будет разное оформление, то заведем 3 строки.
Укажем, что оформлять будем свойство видимость.
А так же настроим условие при котором видимость будет выключаться.
Смотрим что получилось в предприятии. Добавим при этом строки в табличную часть и расставив значения количество субконто.
Как видно в разных строках отображается разное количество полей.
Настройка кодом
Помимо настройки с помощью свойств данную настройку можно произвести с помощью программного кода.
Если вы используете конфигурацию, построенную на , выглядеть это будет так (это относится ко всем типовым ):
ЭлементУО = УсловноеОформление.Элементы.Добавить();
КомпоновкаДанныхКлиентСервер.ДобавитьОформляемоеПоле(ЭлементУО.Поля, "ТабличнаяЧастьСубконто2");
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ЭлементУО.Отбор,
"ТабличнаяЧастьКоличествоСубконто", ВидСравненияКомпоновкиДанных.Меньше, 2);
В случае, если БСП не используется код будет немного длиннее. Просто приведу типовые процедуры из того же БСП.
Функция ДобавитьОформляемоеПоле(КоллекцияОформляемыхПолей, ИмяПоля) Экспорт
ПолеЭлемента = КоллекцияОформляемыхПолей.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ИмяПоля);
Функция ДобавитьЭлементКомпоновки(ОбластьДобавления,
Знач ИмяПоля,
Знач ВидСравнения,
Знач ПравоеЗначение = Неопределено,
Знач Представление = Неопределено,
Знач Использование = Неопределено,
знач РежимОтображения = Неопределено,
знач ИдентификаторПользовательскойНастройки = Неопределено) Экспорт
Элемент = ОбластьДобавления.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Элемент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяПоля);
Элемент.ВидСравнения = ВидСравнения;
Если РежимОтображения = Неопределено Тогда
Элемент.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
Иначе
Элемент.РежимОтображения = РежимОтображения;
КонецЕсли;
Если ПравоеЗначение <> Неопределено Тогда
Элемент.ПравоеЗначение = ПравоеЗначение;
КонецЕсли;
Если Представление <> Неопределено Тогда
Элемент.Представление = Представление;
КонецЕсли;
Если Использование <> Неопределено Тогда
Элемент.Использование = Использование;
КонецЕсли;
// Важно: установка идентификатора должна выполняться
// в конце настройки элемента, иначе он будет скопирован
// в пользовательские настройки частично заполненным.
Если ИдентификаторПользовательскойНастройки <> Неопределено Тогда
Элемент.ИдентификаторПользовательскойНастройки = ИдентификаторПользовательскойНастройки;
ИначеЕсли Элемент.РежимОтображения <> РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный Тогда
Элемент.ИдентификаторПользовательскойНастройки = ИмяПоля;
КонецЕсли;
В данной публикации рассмотрим пример раскрашивания строк просроченных документов в журнале документов (динамическом списке) от текущей даты и текущего времени.
Наша задача – раскрасить розовым цветом строку, если Контрольный срок меньше Текущей даты с учетом того, что текущая дата постоянно меняется. То есть текущую дату надо считывать динамически, а не определять при первом открытии.
Использовать обработчик ожидания;
Программно настроить условное оформление динамического списка
Допустим, у нас есть документ «Умный заказ» с реквизитом «КонтрольныйСрок» и типом «Дата» (состав даты «Дата и время»):
И журнал документов «УмныйЗаказ» с графой «КонтрольныйСрок», соответствующей этому реквизиту:
Наша задача – раскрасить розовым цветом строку, если Контрольный срок меньше Текущей даты с учетом того, что текущая дата постоянно изменяется.
Создадим управляемую форму:
Теперь при создании на сервере мы вызовем процедуру раскрашивания строк «ОбновленияОтображенияПросрочкиНаСервере». И будем вызывать эту процедуру с заданной периодичностью.
У нас есть некоторая форма списка, например, элементов плана вида характеристик "ПраваПользователей" в конфигурации "Управление производственным предприятием" версии 1.3.
Форма, как Вы видите, управляемая. нам нужно оформить список таким образом, чтобы все строки групп элементов выделялись зеленым цветом. Приступим!
Пример
Оформление элементов управляемых форм выполняется с помощью условного оформления формы:
Для решения нашей задачи добавим элемент условного оформления со следующими настройками:
При последующем открытии формы строки групп плана видов характеристик должны быть выделены зеленым цветом. Но. этого не происходит!
Дело в том, что список элементов и групп плана видов характеристик отображается на форме с помощью объекта формы с типом "Динамический список". Динамические списки использут возможности системы компоновки данных, включая отборы и условное оформление. Последнее как-раз и определяет конечное оформление списка, игнорируя настройки условного оформления самой формы. Добавим аналогичные настройки условного оформления для динамического списка.
Единственное отличие - в список оформляемых полей нужно добавить все видимые поля списка, на которые должно распостраняться условное оформление.
Вывод
Часто слышал, что условное оформление на управляемых формах не всегда работает. В итоге выяснялось, что просто настройки делалишь для формы, а не для динамического списка.
Надеюсь статья кому-нибудь да сэкономит время при решении проблем с условным оформлением.
Почему может не работать условное оформление на управляемой форме
У нас есть некоторая форма списка, например, элементов плана вида характеристик "ПраваПользователей" в конфигурации "Управление производственным предприятием" версии 1.3.
Форма, как Вы видите, управляемая. нам нужно оформить список таким образом, чтобы все строки групп элементов выделялись зеленым цветом. Приступим!
Пример
Оформление элементов управляемых форм выполняется с помощью условного оформления формы:
Для решения нашей задачи добавим элемент условного оформления со следующими настройками:
При последующем открытии формы строки групп плана видов характеристик должны быть выделены зеленым цветом. Но. этого не происходит!
Дело в том, что список элементов и групп плана видов характеристик отображается на форме с помощью объекта формы с типом "Динамический список". Динамические списки использут возможности системы компоновки данных, включая отборы и условное оформление. Последнее как-раз и определяет конечное оформление списка, игнорируя настройки условного оформления самой формы. Добавим аналогичные настройки условного оформления для динамического списка.
Единственное отличие - в список оформляемых полей нужно добавить все видимые поля списка, на которые должно распостраняться условное оформление.
Вывод
Часто слышал, что условное оформление на управляемых формах не всегда работает. В итоге выяснялось, что просто настройки делалишь для формы, а не для динамического списка.
Надеюсь статья кому-нибудь да сэкономит время при решении проблем с условным оформлением.
Читайте также: