Почему слетают стили оформления элементов управления при динамическом обновлении в 1С:Предприятие 8.3?

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

Каждый разработчик 1С рано или поздно сталкивается с загадочным поведением платформы после выполнения динамического обновления (также известного в сообществе как «демоническое»). Одной из самых неприятных визуальных проблем является внезапное искажение внешнего вида элементов форм. Вместо привычных аккуратных рамок со скругленными углами пользователи видят грубые, толстые черные прямоугольники в стиле Windows Classic (в обычных формах, например, в УПП) или даже ярко-розовые (пурпурные) заливки окон и групп (в управляемых формах, таких как ERP, КА или УТ).

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

Выясняем причину: механизм сбоя десериализации стилей

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

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

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

Способ 1. Принудительное назначение стиля в Конфигураторе

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

Давайте разберем этот процесс по шагам:

  1. Откройте проблемную форму в Конфигураторе.
  2. Выделите все элементы управления на форме, нажав сочетание клавиш Ctrl + A (или выделите только те поля ввода, у которых проявился дефект с черными рамками).
  3. Откройте палитру свойств выделенных элементов (клавиша F4).
  4. Найдите свойство Цвет рамки (для обычных форм).
  5. Вместо системного значения Авто принудительно выберите из выпадающего списка предопределенный элемент стиля — Рамка (или задайте явно системный цвет РамкаТекущегоЭлементаУправления).
  6. Сохраните форму и обновите конфигурацию базы данных (на этот раз желательно монопольно).

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

Для гарантированного устранения этой проблемы на уровне кода (например, при динамическом создании элементов на форме) мы можем использовать следующий программный код:


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

Способ 2. Сброс и очистка серверного кэша метаданных

Если искажение стилей («траурные» рамки или розовый фон) приняло массовый характер и наблюдается у многих пользователей на разных формах, проблема кроется глубоко в серверном кэше службы rphost. Локальная очистка папок AppData на компьютерах пользователей в этом случае не поможет, так как битые метаданные раздает сам сервер приложений.

Рассмотрим алгоритм полной очистки серверного кэша:

Шаг 1. Перерегистрация информационной базы в консоли администрирования

Это самый быстрый и безопасный способ заставить сервер 1С полностью пересобрать кэш сессий для конкретной базы без остановки всей службы сервера приложений (что критично для крупных предприятий).

  1. Откройте утилиту Администрирование серверов 1С:Предприятия.
  2. Найдите в дереве серверов вашу информационную базу.
  3. Запишите (или скопируйте в блокнот) все параметры подключения базы: имя сервера СУБД, имя базы данных на сервере СУБД, имя пользователя и пароль.
  4. Нажмите правой кнопкой мыши по имени базы и выберите команду Удалить.
  5. ВАЖНО: В появившемся диалоговом окне подтверждения удаления обязательно выберите вариант Оставить базу данных без изменений! Ни в коем случае не выбирайте «Уничтожить базу данных СУБД», иначе вы безвозвратно удалите физическую базу данных с SQL-сервера.
  6. Сразу же нажмите правой кнопкой мыши на ветку Информационные базы и выберите Создать -> Информационная база.
  7. Создайте базу с точно таким же именем и введите ранее сохраненные параметры подключения к SQL-серверу. Поставьте флаг Разрешить запуск регламентных заданий в соответствии с вашими регламентами.

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

Шаг 2. Физическое удаление файлов серверного кэша

Если перерегистрация базы не помогла, выполним тотальную физическую очистку кэша службы сервера 1С. Для этого потребуется кратковременная остановка службы:

  1. Попросите всех пользователей завершить работу в базах данных данного сервера приложений.
  2. Откройте оснастку управления службами Windows (команда services.msc в строке выполнения).
  3. Найдите службу Агент сервера 1С:Предприятия 8.3 (или 1C:Enterprise 8.3 Server Agent) и остановите её.
  4. Перейдите в каталог хранения служебных файлов сервера. По умолчанию это путь: C:\Program Files\1cv8\srvinfo\ (или C:\Program Files (x86)\1cv8\srvinfo\).
  5. Зайдите в папку вашего кластера (обычно она называется reg_1541).
  6. Внутри вы увидите папки с длинными буквенно-цифровыми именами (UID информационных баз), например: 1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d.
  7. Внутри этих папок найдите и удалите папки с именами snccntry и config (именно в них хранятся скомпилированные схемы форм, модулей и стилей). Не удаляйте файлы журналов регистрации, если они хранятся в этих же директориях.
  8. Вернитесь в оснастку служб и запустите службу Агент сервера 1С:Предприятия 8.3.

Золотые правила профилактики: как избежать проблемы в будущем

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

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

← На главную