В многоязычных конфигурациях 1С иногда возникает ситуация, когда условное оформление, настроенное через свойства формы и зависящее от значения перечисления, корректно работает для пользователей с основным языком интерфейса, но перестает срабатывать для тех, кто выбрал другой язык. Возникает подозрение, что платформа привязывает условие не к самому значению перечисления, а к его текстовому синониму для основного языка. Давайте разберемся, так ли это, и как обеспечить стабильную работу оформления для всех пользователей.
Ключевой момент, который нужно понять — условное оформление опирается на внутреннее, уникальное значение элемента перечисления, а не на его текстовое представление (синоним). Проанализируем этот механизм по шагам.
СтатусЗаказа Равно "В работе", вы видите синоним "В работе" на своем текущем языке.Перечисления.СтатусыЗаказов.ВРаботе. Эта ссылка является уникальной и не зависит от языка.Перечисления.СтатусыЗаказов.ВРаботе. Механизм условного оформления сравнивает это значение со ссылкой, сохраненной в настройке. Поскольку они совпадают, оформление корректно применяется.Таким образом, утверждение, что интерактивное условное оформление "перестает работать" при смене языка, в общем случае неверно. Платформа спроектирована так, чтобы корректно обрабатывать такие ситуации. Если же проблема все-таки наблюдается, ее причины могут быть иными.
Несмотря на то, что стандартный механизм должен работать, на практике могут возникать сбои. Рассмотрим наиболее вероятные причины.
1. Ошибка в конкретном релизе платформы
Это одна из самых частых причин необъяснимого поведения системы. Как показала практика автора вопроса на форуме, проблема исчезла после обновления платформы ("При смене — всё заработало"). Это прямо указывает на наличие ошибки (бага) в определённой версии, которая была исправлена в последующих релизах.
Решение: Если вы столкнулись с подобной проблемой, первым делом проверьте актуальность версии платформы 1С:Предприятие и, по возможности, обновитесь до последнего стабильного релиза.
2. Конфликт с пользовательскими настройками
Условное оформление может настраиваться не только глобально в конфигураторе, но и каждым пользователем индивидуально в режиме "Предприятие" (через "Ещё" -> "Настроить список..."). Эти пользовательские настройки имеют более высокий приоритет и могут переопределять или конфликтовать с общими настройками, заданными разработчиком.
Решение: Попросите пользователя, у которого не работает оформление, сбросить настройки формы. Это можно сделать через меню "Ещё" -> "Изменить форму" -> "Ещё" -> "Установить стандартные настройки". Если после этого оформление заработает, значит, причина была в его личных настройках.
3. Проблемы с кэшем
Иногда некорректное отображение интерфейса, включая условное оформление, может быть связано с локальным кэшем конфигурации. Очистка кэша заставляет платформу заново прочитать все настройки и может устранить проблему.
Решение: Удалите информационную базу из списка и добавьте ее заново, указав тот же путь. Либо вручную очистите папки с кэшем в профиле пользователя (обычно в %AppData%\1C\1cv8).
Даже если интерактивная настройка работает, в сложных и многоязычных конфигурациях наиболее надежным, управляемым и прозрачным способом является программная настройка условного оформления. Этот подход дает полный контроль над логикой и исключает любые двусмысленности.
Преимущества программной настройки:
Перечисления.СтатусыДокументов.Черновик, что гарантирует корректную работу независимо от языка и других факторов.Настройка обычно выполняется в серверной процедуре формы ПриСозданииНаСервере. Рассмотрим на примере, как раскрасить строки в списке документов в зависимости от статуса.
Посмотрим на пример:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Получаем коллекцию условного оформления формы
УсловноеОформление = ЭтаФорма.УсловноеОформление;
// 1. Настройка для статуса "Черновик"
// Создаем новый элемент условного оформления
ЭлементОформления_Черновик = УсловноеОформление.Элементы.Добавить();
// Задаем само оформление (например, серый цвет текста)
ЭлементОформления_Черновик.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Серый);
// Задаем условие (отбор)
ЭлементОтбора_Черновик = ЭлементОформления_Черновик.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора_Черновик.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Статус"); // Поле, по которому проверяем условие
ЭлементОтбора_Черновик.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора_Черновик.ПравоеЗначение = Перечисления.СтатусыДокументов.Черновик; // Прямое указание на значение!
ЭлементОтбора_Черновик.Использование = Истина;
// Указываем, какие поля нужно оформить (если не указать, оформится вся строка)
// ЭлементОформления_Черновик.Поля.Элементы.Добавить().Поле = Новый ПолеКомпоновкиДанных("Номер");
// 2. Настройка для статуса "К выполнению"
ЭлементОформления_КВыполнению = УсловноеОформление.Элементы.Добавить();
// Задаем оформление (например, синий цвет фона)
ЭлементОформления_КВыполнению.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.СветлоГолубой);
// Задаем условие
ЭлементОтбора_КВыполнению = ЭлементОформления_КВыполнению.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора_КВыполнению.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Статус");
ЭлементОтбора_КВыполнению.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора_КВыполнению.ПравоеЗначение = Перечисления.СтатусыДокументов.КВыполнению;
ЭлементОтбора_КВыполнению.Использование = Истина;
КонецПроцедуры
Как мы видим, в качестве правого значения для сравнения (ПравоеЗначение) используется прямая ссылка на значение перечисления. Такой код будет работать абсолютно одинаково для пользователей с любым языком интерфейса, так как он оперирует не синонимами, а внутренними объектами системы.