Как изменить цвет элементов формы в 1С, которые не принимают пользовательский стиль?

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

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

Анализируем иерархию оформления в 1С

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

Порядок приоритетности настроек (от высшего к низшему):

  1. Условное оформление формы или динамического списка: Если здесь задан цвет, он перекроет всё остальное.
  2. Свойства конкретного элемента в конфигураторе: Если у поля ввода в палитре свойств вручную выбран цвет (отличный от значения Авто), стиль конфигурации будет проигнорирован.
  3. Программная установка свойств: Код в модуле формы, изменяющий Элементы.ИмяПоля.ЦветФона.
  4. Системное поведение платформы: Например, подсветка незаполненных обязательных полей.
  5. Объект «Стиль»: Общие настройки для всей конфигурации.

Выясняем причину появления «персиковых» прямоугольников

Рассмотрим наиболее частую причину появления специфических оттенков в интерфейсе «Такси». Как правило, три-четыре ярких элемента среди серого интерфейса — это поля с включенным свойством Автоотметка незаполненного. Платформа 1С выделяет такие поля системным цветом, чтобы пользователь видел, что данные не введены.

Чтобы убедиться в этом, проанализируем настройки проблемных полей в конфигураторе. Если свойство АвтоотметкаНезаполненного установлено в значение Истина, платформа будет принудительно окрашивать фон в «персиковый» цвет (в стиле Такси) независимо от настроек стиля. Чтобы изменить это поведение, мы можем пойти двумя путями:

  1. Отключить автоотметку и реализовать проверку заполнения программно в событии ПередЗаписью, самостоятельно устанавливая нужный цвет фона при ошибке.
  2. Попытаться переопределить системный цвет в стиле, если версия платформы позволяет редактировать параметр Цвет фона незаполненного поля.

Проверяем условное оформление и свойства элементов

Если дело не в автоотметке, нам необходимо проверить наличие Условного оформления. Рассмотрим по шагам, как это сделать:

  1. Откроем форму в конфигураторе.
  2. Перейдем на закладку «Условное оформление» (в нижней части окна свойств формы).
  3. Проверим, нет ли там правил, которые применяются ко всей форме или к конкретным полям. Даже если флажок цвета установлен, а значение кажется «пустым», платформа может интерпретировать это как указание использовать стандартную палитру вместо стиля.

Также проанализируем свойства элементов непосредственно в дереве элементов формы. Выделим проблемное поле и заглянем в палитру свойств. Все свойства, выделенные жирным шрифтом, были изменены вручную. Если свойства ЦветФона, ЦветТекста или ЦветРамки изменены, нажмите правую кнопку мыши и выберите «Установить стандартное значение» (или верните в состояние Авто).

Программный поиск «непослушных» элементов

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


&НаСервере
Процедура НайтиЦветныеЭлементы(ГруппаЭлементов)
    Для Каждого Элемент Из ГруппаЭлементов Цикл
        // Проверяем, является ли элемент полем или группой
        Если ТипЗнч(Элемент) = Тип("ГруппаФормы") Тогда
            НайтиЦветныеЭлементы(Элемент.ПодчиненныеЭлементы);
        ИначеЕсли ТипЗнч(Элемент) = Тип("ПолеФормы") Тогда
            // Выводим информацию о цвете фона, если он задан явно
            Если Элемент.ЦветФона <> Новый Цвет() Тогда
                Сообщить("Элемент: " + Элемент.Имя + " имеет нестандартный цвет фона!");
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Этот код поможет нам быстро составить список объектов, которые имеют индивидуальные настройки оформления, перекрывающие общий стиль конфигурации.

Особенности работы с платформой 8.3.25 и «Интерфейсом 8.5»

Проанализируем ситуацию с учетом развития платформы. Начиная с последних версий 8.3.25 и выше, 1С внедряет «Новый дизайн» (интерфейс 8.5), который существенно меняет логику отрисовки. В этом режиме многие старые механизмы настройки стилей могут работать некорректно или игнорироваться вовсе.

Что важно знать о режиме 8.5:

Метод «Ядовитого цвета» для отладки

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

В объекте Стиль выберите подозрительное свойство (например, Цвет фона группы) и установите для него заведомо яркий, «ядовитый» цвет (например, ярко-зеленый или фиолетовый). Сохранитесь и запустите предприятие. Если ваш проблемный элемент стал зеленым — поздравляем, вы нашли ту самую настройку в стиле, которую нужно отредактировать под серый цвет. Если цвет элемента не изменился — продолжаем искать другое свойство или проверяем Условное оформление.

Основные свойства в стиле, на которые стоит обратить внимание:

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

← На главную