В практике разработчика 1С иногда встречается загадочная и крайне неприятная проблема, получившая в профессиональных кругах название «ошибка Vanish». Она проявляется в том, что интерфейс программы внезапно окрашивается в ярко-розовые или фиолетовые тона, а пользователи начинают получать сообщения об ошибке (поможет система мониторинга ошибок в журнале регистрации 1С): «Ошибка отображения типов: Отображение лексического значения '{' в значение типа 'Цвет'». Рассмотрим подробнее природу этого явления, проанализируем причины его возникновения и разберем по шагам проверенные методы борьбы с ним.
Прежде всего, выясним причину сбоя. Данная ошибка официально признана разработчиками платформы 1С (ошибки 10214376 и 10222047). Проблема кроется в механизме XDTO-сериализации при передаче данных между сервером приложений и тонким клиентом. Когда сервер пытается передать информацию о цвете, заданном через ЦветаСтиля, происходит программный сбой в памяти рабочего процесса. Вместо корректной структуры цвета передается технический символ {, который клиент не может распознать.
Что касается специфического цвета интерфейса, то в платформе 1С цвет Fuchsia (255, 0, 255) является резервным. Если система понимает, что объект должен иметь какой-то цвет, но не может прочитать значение из метаданных или стиля из-за повреждения кэша, она автоматически заменяет его на этот ярко-розовый «маркер». Это визуальный сигнал о том, что ресурсы стилей не были корректно загружены в память рабочего процесса.
Проанализируем самый эффективный способ — смена цветового стиля оформления интерфейса через расширение. Он заключается в принудительном указании основного стиля в расширении конфигурации. Посмотрим, как это реализовать:
Не определено).Как показывает практика, после этих действий и последующего перезапуска службы сервера 1С ошибка перестает возникать, так как платформа начинает более стабильно обращаться к таблице стилей через контекст расширения.
Если ошибка локализована в конкретной форме (например, в заказе клиента или динамическом списке), разберем метод программного «перехвата» цвета. Проблема часто возникает, когда реквизиту формы присваивается значение из ЦветаСтиля. Рассмотрим пример кода, который помогает обойти ошибку в процедуре ПриСозданииНаСервере:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Стандартная обработка формы
// Если у вас есть реквизиты, использующие системные цвета,
// попробуйте переопределить их явно или очистить перед передачей на клиент
Если ЭтаФорма.Элементы.Найти("ДекорацияСтатус") <> Неопределено Тогда
ЭтаФорма.Элементы.ДекорацияСтатус.ЦветТекста = WebЦвета.Черный;
КонецЕсли;
// В некоторых случаях помогает обнуление реквизитов типа "Цвет",
// которые не критичны для отображения
ЦветГиперссылки = Неопределено;
КонецПроцедуры
Проанализируем ситуацию: если мы программно задаем цвет, используя WebЦвета или Абсолютные цвета (RGB), платформа передает их как простые числа. Это полностью исключает обращение к проблемному механизму сериализации ссылок на стили.
Чаще всего «ошибка Vanish» проявляется в динамических списках. Используя конструктор оформления списков формы, важно помнить: в условном оформлении лучше заменять «Цвета стиля» на «Абсолютные цвета».
Рассмотрим порядок действий:
ЦветДистанционнойРаботы укажем RGB(240, 255, 240)).Этот метод считается наиболее «фундаментальным», особенно если применить декомпиляцию условного оформления для получения кода, так как он устраняет зависимость от кэша стилей.
Если программные методы не помогают, рассмотрим системные аспекты. Ошибка часто связана с «засорением» кэша рабочих процессов rphost. Выясним, что можно сделать на уровне системного администрирования:
1C:Enterprise 8.3 Server Agent, перейти в каталог srvinfo и удалить содержимое папок reg_1541 (кроме файлов конфигурации кластера).No Managed Code. Это минимизирует влияние среды .NET на процессы сериализации XDTO.Важный момент: если ошибка возникает внезапно, а возможности править код нет, временным решением является простой перезапуск рабочих процессов в консоли сервера 1С или перезапуск всей службы агента. Это сбрасывает текущий битый кэш и возвращает цвета в нормальное состояние на некоторое время.
Мы проанализировали сложную техническую проблему, связанную с некорректным отображением типов в 1С. Подведем итоги нашего исследования:
RGB в коде модулей форм.Применяя эти методы, мы сможем обеспечить стабильную работу пользователей и избежать неприятных визуальных дефектов в интерфейсе конфигураций на базе 1С:ERP и других современных систем.