Подсветка строк в списках и таблицах 1С 8.3 по условию
Содержание
Выделить цветом строку в 1С 8.3 можно через условное оформление: вы задаёте условие («сумма больше 100 000», «документ не проведён», «срок прошёл») и внешний вид — цвет фона, цвет текста, шрифт. Платформа сама красит те строки, которые под условие попали. Руками красить каждую строку не нужно, и цвет пропадает вместе с условием.
Условное оформление есть у управляемых форм: списков, форм документов, табличных частей. Настроить его можно двумя путями: разработчик делает это в конфигураторе, а пользователь с нужными правами — прямо в программе, не трогая конфигурацию. Оба варианта ниже, плюс код, если условие нужно считать.
Как работает условное оформление
У оформления три части. Если понимать их назначение, настройка перестаёт быть угадайкой.
- Условие (отбор). Когда правило срабатывает. Например, поле
ПроведенравноЛожь. - Оформление. Что меняется: цвет фона, цвет текста, шрифт, иногда видимость и доступность.
- Поля. К каким колонкам применить. Пусто — оформляется вся строка таблицы целиком. Указана одна колонка — красится только она.
Правил в списке может быть много. Они применяются сверху вниз, и если два правила красят одну ячейку, побеждает то, что ниже. Поэтому общие правила ставьте выше, частные исключения — ниже.
Условное оформление не меняет данные. Это только отображение на экране: в печатную форму и в выгрузку в Excel цвет из формы не попадает.
Ещё одно ограничение: оформление действует на том, что есть в источнике данных формы. Если поля нет в списке, условие по нему не составить. Для динамического списка недостающее поле добавляют в запрос списка, об этом ниже.
Подсветка строки в конфигураторе: пошагово
Так делает разработчик или внедренец, у которого открыта конфигурация. Пример: в списке документов нужно покрасить непроведённые строки в светло-серый цвет.
Шаг 1. Откройте форму и таблицу
В конфигураторе откройте нужную форму, например форму списка документа. Выделите в редакторе элемент-таблицу (в списке это обычно Список). В палитре свойств найдите свойство Условное оформление и откройте его.
Шаг 2. Добавьте элемент оформления
Нажмите кнопку добавления, появится новое правило. У каждого правила есть флажок использования: сняли галочку — правило временно выключено, но не удалено. Удобно, когда проверяете, какое именно правило портит картинку.
Шаг 3. Задайте условие
Откройте поле отбора правила и добавьте условие: выберите поле Проведен, вид сравнения Равно, значение Ложь. Для текстовых полей доступны сравнения «содержит», «начинается с», «заполнено», для дат — «больше», «меньше», «в интервале».
Шаг 4. Выберите оформление
В блоке оформления отметьте нужные параметры: цвет фона — светло-серый, цвет текста — тёмно-серый. Шрифт тоже можно менять: курсив подойдёт для «черновых» строк, полужирный — для важных.
Шаг 5. Укажите поля
Оставьте список полей пустым, если красить нужно всю строку. Чтобы выделить только сумму или только статус, добавьте именно эти колонки.
Шаг 6. Проверьте
Запустите 1С:Предприятие в режиме отладки (или обновите конфигурацию базы, если работаете в копии) и откройте список. Непроведённые документы должны стать серыми.
Правки конфигурации вносите в копии базы или в расширении, а не в рабочей базе. Типовую конфигурацию на поддержке лучше не менять: при обновлении правило придётся переносить заново. Для типовых решений удобнее расширение.
Как выделить строку в режиме 1С:Предприятие
Менять конфигурацию не обязательно. В большинстве списков и форм подсветку пользователь настраивает сам, без конфигуратора.
- Откройте нужный список или документ.
- В командной панели нажмите
Ещёи выберитеИзменить форму. - В окне настройки формы найдите таблицу и откройте условное оформление, дальше всё как в конфигураторе: условие, цвет, поля.
- Сохраните настройку.
Эта настройка относится к форме и сохраняется для вас как пользователя, остальные коллеги её не увидят. Права на изменение формы есть не у всех: если команды нет, её отключил администратор.
Для отчётов путь другой. Откройте отчёт, выберите команду изменения варианта отчёта и перейдите на закладку условного оформления. Там строится то же самое правило: условие плюс цвет. Закладка может называться чуть по-разному в разных конфигурациях, ищите по слову «оформление».
| Где красим | Кто настраивает | Что нужно |
|---|---|---|
| Форма в конфигураторе | Разработчик | Доступ к конфигурации |
| Форма в программе | Пользователь | Право менять форму |
| Отчёт | Пользователь | Право менять вариант отчёта |
| Из кода | Программист | Знание языка 1С |
Сложные условия: И, ИЛИ, вложенные группы
Одного сравнения часто мало. Нужно покрасить просроченные долги больше 50 000 или любые долги больше 500 000. Для этого в отборе используют группы.
- Группа «И» — строка должна подойти под все условия внутри.
- Группа «ИЛИ» — достаточно любого одного.
- Группа «НЕ» — строка подходит, если условия внутри не выполняются.
Группы вкладываются друг в друга. Для примера выше: группа «ИЛИ», а в ней две подгруппы «И» — «срок прошёл и сумма больше 50 000» и просто «сумма больше 500 000».
Несколько практических приёмов.
- Пустые значения. Условие «поле не заполнено» надёжнее, чем сравнение с пустой строкой или нулевой датой.
- Даты. «Меньше текущей даты» не требует кода. В отборе ищите вид сравнения с датой, не вбивайте дату руками, иначе правило устареет через месяц.
- Составные ключи. Если одно условие строится на двух полях («остаток меньше минимального»), в отборе сравните одно поле с другим: в правой части условия можно выбрать не значение, а другое поле источника.
- Несколько цветов. Для светофора («просрочено» красный, «скоро срок» жёлтый, «в порядке» зелёный) делайте три отдельных правила с непересекающимися условиями, так проще искать ошибки.
Динамическое оформление: правила, которые считает код
Если условие нельзя описать отбором, например нужна дата, вычисленная при открытии, или цвет берётся из настроек, правило добавляют кодом. Обычно это делают в обработчике ПриСозданииНаСервере формы.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Правило = Список.УсловноеОформление.Элементы.Добавить();
// К каким полям применять: пусто = вся строка
// Правило.Поля.Элементы.Добавить().Поле = Новый ПолеКомпоновкиДанных("Номер");
// Условие: дата документа меньше начала текущего месяца
Условие = Правило.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Условие.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Дата");
Условие.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
Условие.ПравоеЗначение = НачалоМесяца(ТекущаяДатаСеанса());
Условие.Использование = Истина;
// Оформление
Правило.Оформление.УстановитьЗначениеПараметра("ЦветТекста", Новый Цвет(128, 128, 128));
Правило.Использование = Истина;
КонецПроцедуры
Здесь Список — имя динамического списка формы, а Дата — поле его запроса. Для табличной части документа вместо Список берут условное оформление самой формы (ЭтаФорма.УсловноеОформление), а поле пишут с именем таблицы, например Товары.Цена. Проверьте имена в редакторе формы: они должны совпасть буква в букву.
Что важно знать про такой способ.
- Значение условия вычисляется один раз, когда выполняется код. Правило с
НачалоМесяца(ТекущаяДатаСеанса())не обновится, пока форму не откроют заново. - Для смены цвета по ходу работы очищайте правила и создавайте заново:
Список.УсловноеОформление.Элементы.Очистить(). Но так вы сотрёте и пользовательские правила, будьте осторожны. - Цвет можно задавать явно,
Новый Цвет(255, 220, 220), либо цветом стиля. Цвет стиля меняется вместе с темой оформления, и текст не потеряется на тёмном фоне. - Условие по своему реквизиту формы в динамическом списке напрямую не получится. Сначала передайте значение в параметр запроса списка либо в правило, как в примере.
Подсвечивайте контрастно, но мягко. Насыщенный красный фон с чёрным текстом на длинном списке выматывает глаза, а цвет, который читается только на вашем мониторе, на другом может пропасть.
Картинки в строках и дополнительные колонки
Цвет не единственный способ пометить строку. Когда признаков много, цветом их не разведёшь: красное значит и «просрочено», и «ошибка», и «отклонено».
Рядом с цветом работают две вещи.
- Картинка в колонке. В списках можно показать пиктограмму состояния слева от строки, например значок проведённого или помеченного на удаление документа. У таблицы формы есть свойства, отвечающие за картинку строки. В динамических списках картинку дают через поле запроса с номером картинки из коллекции.
- Вспомогательная колонка. Добавьте в запрос списка вычисляемое поле («Просрочен на дней», «Статус оплаты») и выведите колонкой. Дальше по этому полю удобно строить условие: оно уже посчитано, и сложная логика сидит в запросе, а не в отборе оформления.
Второй путь надёжнее для сложных случаев. Если поле считается в запросе, то условное оформление сводится к простому сравнению: Статус = "Просрочен". Правило читается за секунду, а менять логику придётся в одном месте.
Колонку, нужную только для оформления, можно сделать невидимой: условие по ней продолжит работать, а на экране её не будет. Для этого поле должно оставаться в составе источника, а не удаляться из формы.
Готовые примеры для типовых задач
Несколько условий, которые просят чаще всего. Поля подставьте свои, названия в вашей конфигурации могут отличаться.
| Задача | Поле | Сравнение | Значение | Оформление |
|---|---|---|---|---|
| Непроведённые документы | Проведен | Равно | Ложь | серый текст |
| Помеченные на удаление | ПометкаУдаления | Равно | Истина | зачёркнутый шрифт, серый |
| Просроченный срок оплаты | СрокОплаты | Меньше | текущая дата | красный текст |
| Крупные суммы | Сумма | Больше | 100 000 | полужирный шрифт |
| Пустой ответственный | Ответственный | Не заполнено | — | жёлтый фон |
Из этой таблицы видно, что на практике хватает пяти-шести правил. Если вы насчитали двадцать, остановитесь и подумайте, не лучше ли вынести статус в отдельное поле: пёстрый список читается хуже белого.
Отдельный совет для длинных списков. Красьте только то, на что человек должен среагировать: просрочку, ошибку, незавершённое. «Нормальные» строки пусть остаются без цвета. Тогда подсвеченная строка бросается в глаза сама, а список не превращается в ёлку.
Почему цвет не появляется
Если правило есть, а строки остаются белыми, причина почти всегда в одном из пунктов ниже.
F5) или переоткройте форму. Динамический список перечитывается не на каждое нажатие.Ещё две ловушки, которые не очевидны с первого взгляда. Первая: условие сравнивает значение с типом, отличным от типа поля. Например, число с текстом "100" не сработает никогда. Вторая: дата в условии с временем. Если поле хранит дату со временем, равенство с датой «на начало дня» выполнится только для документов, созданных ровно в полночь. Используйте сравнения «больше или равно» и «меньше».