Форма 1С не обновилась после изменений на сервере

· 10 мин

Содержание

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

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

Почему форма берётся из кэша, а не с сервера

1С:Предприятие 8.3 хранит на клиенте локальную копию метаданных: формы, макеты, скомпилированные модули. Это нужно для скорости — при каждом открытии формы платформа не тянет описание с сервера заново, а берёт из кэша.

Кэш лежит в профиле пользователя Windows, в двух каталогах:

  • %LOCALAPPDATA%\1C\1cv8\ — основной кэш конфигурации и метаданных;
  • %APPDATA%\1C\1cv8\ — настройки, временные файлы сеанса.

Внутри — подкаталоги с именами-идентификаторами (GUID), по одному на каждую информационную базу. Пока в кэше лежит прежнее описание формы, клиент показывает его, даже если на сервере уже новая версия.

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

  • 📌 конфигурация базы данных на сервере не обновлена — выгрузили cf в хранилище или в основную конфигурацию, но не нажали «Обновить конфигурацию базы данных»;
  • 📌 сеанс пользователя не переподключался — при динамическом обновлении клиент узнаёт о новой версии только при следующем обращении к серверу.

Форма — часть конфигурации базы данных. Пока вы не применили изменения к ней (а не просто к основной конфигурации в Конфигураторе), для пользователей ничего не поменяется.

Проверяем через журнал регистрации, обновилась ли конфигурация

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

В режиме 1С:Предприятие (интерфейс «Такси»):

  1. Откройте раздел НСИ и администрирование (в типовых конфигурациях он же Администрирование).
  2. Найдите команду Журнал регистрации.
  3. В отборе по полю Событие выберите значения, связанные с изменением конфигурации.

В Конфигураторе путь короче: меню Администрирование → Журнал регистрации.

Что искать:

  • запись об обновлении конфигурации базы данных с датой и временем — если её нет, изменения к базе не применялись;
  • события входа и выхода нужного пользователя — чтобы понять, переподключался ли он после обновления.

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

Права доступа и RLS: когда форма та же, но выглядит иначе

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

Видимость элементов формы, доступность реквизитов и вариант открытия зависят от ролей пользователя и функциональных опций. Два частых случая:

  • роль изменилась, а сеанс старый. Новые права и ограничения на уровне записей (RLS, Record Level Security) применяются к сеансу при входе. Пока пользователь не перезайдёт, он работает со старым набором прав.
  • элемент скрыт по праву или функциональной опции. Если на реквизит или команду нет права на просмотр, платформа убирает их с формы. Разработчик в своём сеансе (с полными правами) видит форму целиком, пользователь — урезанную.

Как проверить:

  1. В Конфигураторе откройте Администрирование → Пользователи, посмотрите назначенные роли.
  2. Сверьте, какие права и RLS-ограничения даёт роль на нужный объект.
  3. Попросите пользователя выйти и зайти заново — это самый быстрый способ применить изменённые права.

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

Принудительная очистка кэша клиента

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

Способ 1. Запуск с параметром /ClearCache. Самый аккуратный вариант — платформа чистит кэш сама при старте.

"C:\Program Files\1cv8\<номер_версии>\bin\1cv8.exe" ENTERPRISE /ClearCache

Путь к 1cv8.exe зависит от версии платформы; проще создать ярлык и добавить /ClearCache в поле «Объект».

Способ 2. Удаление каталога кэша вручную. Когда параметр не помог:

  1. Закройте все окна 1С у пользователя.
  2. Откройте %LOCALAPPDATA%\1C\1cv8\.
  3. Удалите подкаталог нужной базы (его GUID можно сопоставить по дате изменения — он менялся при последнем запуске).
  4. При сомнениях удалите все подкаталоги в 1cv8\ — платформа пересоздаст их при следующем запуске.

Если не уверены, какой GUID соответствует базе, безопаснее закрыть 1С полностью и удалить содержимое каталога целиком. Настройки пользователя (положение окон, отборы) хранятся отдельно, большинство из них в базе.

Способ 3. Через меню запуска. В окне запуска 1С выделите базу, нажмите Изменить и в дополнительных параметрах запуска добавьте /ClearCache. После одного чистого входа параметр можно убрать.

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

Обновление конфигурации базы данных на сервере

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

Порядок в клиент-серверном варианте:

  1. Запустите Конфигуратор, подключённый к серверной базе.
  2. Загрузите изменения (из хранилища — Конфигурация → Хранилище → Обновить конфигурацию; из файла — Конфигурация → Загрузить конфигурацию из файла).
  3. Выполните Конфигурация → Обновить конфигурацию базы данных (F7).

Платформа предложит один из режимов:

  • динамическое обновление — доступно, когда менялись только формы, модули, макеты (без изменения структуры таблиц). Пользователям не нужно выходить сразу: клиент подхватит новую версию при следующем обращении к серверу.
  • обновление со структурными изменениями — если правились реквизиты, таблицы, измерения регистров. Здесь нужен монопольный доступ: все сеансы должны быть завершены.

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

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

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

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

Завершить сеансы можно двумя способами:

  • через консоль администрирования серверов 1С (оснастка MMC): раскройте кластер → Сеансы, в контекстном меню — удаление сеанса;
  • через утилиту rac из командной строки.

Если оснастка администрирования не открывается или не видит кластер, частая причина — не зарегистрирована библиотека radmin.dll из каталога bin соответствующей версии платформы. Регистрируется она командой regsvr32 с полным путём к файлу (запуск от администратора).

Команды rac, в которых можно быть уверенным:

rac cluster list
rac session list --cluster=<идентификатор_кластера>
rac session terminate --session=<идентификатор_сеанса> --cluster=<идентификатор_кластера>

Остальные параметры смотрите в rac help — не подбирайте ключи наугад.

Форма из расширения конфигурации

Часто форму меняют не в основной конфигурации, а в расширении (механизм появился в платформе 8.3.6). Тогда «старая форма» у пользователя — это ещё и вопрос, применилось ли расширение.

Расширения подключаются в разделе Администрирование типовой конфигурации (команда с упоминанием расширений в названии) или через Конфигуратор: Конфигурация → Расширения конфигурации. Два момента, на которых обычно спотыкаются:

  • загрузка файла расширения .cfe и обновление конфигурации базы данных — разные шаги. После загрузки .cfe нужно так же применить изменения к базе данных (F7 в Конфигураторе);
  • у расширения есть флажок безопасного режима и признак активности. Отключённое расширение свои формы не показывает.

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

После обновления расширения кэш клиента чистится так же, как после обновления основной конфигурации: перезапуск сеанса или /ClearCache.

Особенности тонкого и веб-клиента

Путь к обновлению формы отличается в зависимости от клиента.

Тонкий клиент (отдельное приложение). Кэш — в том же %LOCALAPPDATA%\1C\1cv8\, что и у толстого. Чистится теми же способами: параметр /ClearCache или удаление каталога. Перезапуск приложения обязателен.

Веб-клиент (браузер). Локального каталога 1С здесь нет — метаданные кэширует браузер. Если форма не обновилась:

  1. Обновите страницу с полной перезагрузкой — Ctrl + F5 (или Ctrl + Shift + R).
  2. Не помогло — очистите кэш браузера за последний час.
  3. В крайнем случае откройте базу в режиме инкогнито: там кэш чистый.

На стороне сервера для веб-клиента всё то же самое: пока конфигурация базы данных не обновлена, никакая перезагрузка страницы новую форму не покажет.

Для публикации на веб-сервере после обновления конфигурации обычно ничего переопубликовывать не нужно — публикация ссылается на базу, а не хранит копию форм. Переопубликация нужна, только если менялись настройки самой публикации (например, состав доступных сервисов).

Как раздать обновлённую форму всем пользователям сразу

Ходить по рабочим местам и чистить кэш вручную — не вариант для десятков пользователей. Есть способы массового обновления.

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

Если нужно гарантированно сбросить кэш у всех (например, после сбоя), добавьте /ClearCache в параметры запуска:

  • в ярлыках на рабочих столах — через групповую политику домена (GPO) или скрипт развёртывания;
  • в общем файле списка баз — параметр прописывается в настройках базы один раз для всех, кто берёт список с общего ресурса.

Для терминального сервера (RDS) и RemoteApp логика та же: кэш лежит в профиле каждого пользователя на сервере, параметр /ClearCache в опубликованном приложении сбросит его при запуске. Если 1С опубликована как RemoteApp, параметр добавляется в строку запуска опубликованного приложения — отдельно чистить профили не нужно.

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

Форма не обновилась — порядок проверки
Выполнено: 0 / 6

Частые вопросы

Нужно ли выгонять всех пользователей, чтобы обновить одну форму?
Нет, если правилась только форма — такое изменение проходит динамически, без монопольного доступа. Монополия нужна только при структурных изменениях (новые реквизиты, таблицы, измерения регистров).
Я нажал «Обновить конфигурацию базы данных», но пользователь всё равно видит старую форму. Почему?
Скорее всего, его сеанс не переподключался. При динамическом обновлении клиент подхватывает новую версию при следующем обращении к серверу — попросите пользователя выйти и зайти заново.
Удаление каталога кэша в `1cv8` не навредит данным?
Нет. В этом каталоге лежит локальная копия метаданных и временные файлы, а не данные учёта. Платформа пересоздаст его при следующем запуске. Главное — чистить при полностью закрытой 1С.
Форма обновилась, но у пользователя не хватает полей, которые видит разработчик. Это кэш?
Нет, это права. Элементы без права на просмотр платформа убирает с формы. Сверьте роли пользователя и попросите его перезайти, чтобы применились изменённые права и RLS.
Для веб-клиента помогает `/ClearCache`?
Нет, этот параметр — для тонкого и толстого клиента. В браузере кэш сбрасывается полной перезагрузкой страницы (Ctrl + F5) или очисткой кэша браузера.