Как раскрасить строку в ТаблицеЗначений на управляемой форме и что делать при вылетах Конфигуратора

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Работа с управляемыми формами в платформе 1С 8.3 предоставляет мощный механизм — Условное оформление. Однако на практике разработчики часто сталкиваются с неприятными ситуациями: от банального непонимания, почему настройки не применяются, до критических ошибок, приводящих к закрытию Конфигуратора. В этой статье мы подробно разберем, как правильно реализовать раскраску строк, почему возникают ошибки и как настроить оформление программно, если визуальный редактор отказывается работать.

Выясним причину вылета Конфигуратора

Ситуация, когда при попытке изменить условие отбора в окне «Условное оформление» программа экстренно завершает работу, не является редкостью. Давайте проанализируем, почему это происходит. Чаще всего проблема кроется не в логике ваших действий, а в техническом состоянии информационной базы или кэша.

Во-первых, рассмотрим влияние кэша конфигуратора. В процессе разработки 1С сохраняет множество временных файлов. Если в них происходит сбой, визуальный редактор может начать вести себя неадекватно. Для решения проблемы попробуйте полностью очистить кэш пользователя. Во-вторых, проанализируем ситуацию с динамическими обновлениями. Если вы часто используете «демоническое» (динамическое) обновление, структура метаданных может накопиться с ошибками. В таком случае рекомендуется выполнить процедуру «Тестирование и исправление» через меню «Администрирование» в Конфигураторе.

В-третьих, обратим внимание на имена реквизитов. Проверьте, нет ли в именах колонок вашей таблицы значений спецсимволов или невидимых знаков. Иногда копирование названий из внешних источников приводит к попаданию в имя латинских букв, визуально похожих на кириллические, что вызывает сбой парсера в окне настройки условий.

Разберем проблему «Красного креста» на реквизитах

Часто при настройке отбора разработчик видит красный крест на выбранном поле. Это верный признак того, что платформа «потеряла» связь с данными. Рассмотрим, почему это происходит, даже если реквизит был только что добавлен:

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

Программное создание Условного оформления

Если визуальный интерфейс Конфигуратора продолжает вылетать или ваша задача требует гибкости (например, цвета задаются динамически), лучшим решением будет программная настройка оформления. Мы рекомендуем выполнять это в серверной процедуре ПриСозданииНаСервере. Рассмотрим этот процесс по шагам.

Проанализируем ситуацию: у нас есть таблица ТЗ_Данные, и в ней колонка Статус (тип Строка). Мы хотим красить строки в зависимости от текстового значения.


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    // 1. Создаем новый элемент условного оформления
    ЭлементОформления = УсловноеОформление.Элементы.Добавить();

    // 2. Определяем, что именно мы будем оформлять (какой цвет менять)
    ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebColors.LightGreen);

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

    // 4. Указываем поля, которые будут окрашены
    // Если нужно покрасить всю строку, добавляем все колонки таблицы
    ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
    ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("ТЗ_Данные");
    ПолеОформления.Использование = Истина;

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

Этот метод гораздо надежнее визуальной настройки, так как код не зависит от багов интерфейса Конфигуратора и легко переносится между формами.

Особенности использования строковых реквизитов для раскраски

Давайте выясним важный нюанс: платформа 1С не может автоматически преобразовать строку со значением "Красный" в реальный цвет WebColors.Red. Условное оформление работает по принципу фиксированных правил. Если у вас в реквизите Цвет типа Строка может быть 10 разных названий цветов, вам придется создать 10 отдельных элементов условного оформления (либо в конфигураторе, либо в цикле программно).

Рассмотрим пример, когда мы программно обходим список возможных значений и создаем правила оформления:


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

Подведем итоги и закрепим рекомендации

Чтобы успешно раскрашивать строки в таблицах на управляемых формах, придерживайтесь следующих правил:

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

← На главную