К статье
Практический материал

Администрирование · 9 мин

Как обновить форму в 1С на тонком клиенте

Способы обновить форму в 1С на тонком клиенте: команда Обновить, метод ОбновитьОтображениеДанных, программное обновление списков и решение типовых проблем.

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

Обновить форму можно несколькими способами: встроенной командой интерфейса, клавишей F5, программными методами или повторным открытием формы. Выбор зависит от того, работаете вы как пользователь или дорабатываете конфигурацию как разработчик, а также от типа формы — список, документ или управляемая форма.

Ниже разобраны все рабочие способы обновления формы на тонком клиенте, ограничения каждого из них и типичные ситуации, когда обновление «не срабатывает».

Как обновить форму клавишей F5 и командой интерфейса

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

Альтернатива — кнопка «Ещё» в командной панели формы. В формах списков там есть пункт «Обновить», который делает то же самое, что F5. В некоторых формах также доступна команда «Перечитать» — она отличается тем, что заново считывает объект из базы, отменяя несохранённые изменения в текущей форме.

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

Обновление формы списка: динамические и обычные списки

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

Для пользователя достаточно F5. Если новые записи не появляются даже после обновления, проверьте установленные отборы и период: отбор по дате или по организации может скрывать свежие документы. Также проверьте сортировку — новая запись могла попасть не в начало списка.

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

Новый документ не виден в спискеСписок не обновлён или стоит отбор

Нажмите F5, затем проверьте отбор по периоду и организации

Данные объекта устарелиФорма открыта до изменений в базе

Перечитайте объект или закройте и откройте форму заново

Обновление не помогаетКэш клиента или блокировка

Перезапустите сеанс, проверьте блокировки и права доступа

Программное обновление формы для разработчика

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

Для динамического списка на форме есть более точечный способ — метод Обновить() таблицы формы: Элементы.Список.Обновить();. Он обновляет только конкретный список, не затрагивая остальные элементы формы, что быстрее и безопаснее.

Типовой пример обработчика, обновляющего список после записи объекта:

&НаКлиенте

Процедура ПослеЗаписиДокумента(Результат, ДопПараметры) Экспорт

Элементы.Список.Обновить();

КонецПроцедуры

1c
&НаКлиенте
Процедура КомандаОбновить(Команда)
    Элементы.Список.Обновить(); // обновить динамический список
    ОбновитьОтображениеДанных(); // обновить отображение формы
КонецПроцедуры

Механизм оповещений: ОповеститьОбИзменении и ОбработкаОповещения

Когда одна форма меняет данные, а другая должна отреагировать, используется механизм оповещений. Метод ОповеститьОбИзменении(Ссылка) уведомляет платформу, что объект изменён, и все открытые формы, отображающие этот объект или содержащие его в списках, получат стандартное событие и обновятся.

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

&НаКлиенте

Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)

Если ИмяСобытия = "ЗаписанДокументРеализация" Тогда

Элементы.Список.Обновить();

КонецЕсли;

КонецПроцедуры

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

Автоматическое обновление формы по таймеру

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

Внутри вызываемой процедуры выполняется обновление списка или перечитывание данных. Ставьте разумный интервал — не чаще одного раза в 15–30 секунд для рабочих списков: слишком частые обращения к серверу создают лишнюю нагрузку, особенно при больших таблицах и сложных запросах динамического списка.

Не забудьте отключить обработчик при закрытии формы через ОтключитьОбработчикОжидания(), иначе процедура продолжит вызываться и может обращаться к уже недоступным элементам формы, вызывая ошибки в журнале.

Типичные ошибки
01
Слишком маленький интервал автообновления — форма постоянно обращается к серверу, интерфейс подтормаживает у всех пользователей
02
Обновление всей формы вместо конкретного списка — лишние серверные вызовы и мерцание интерфейса
03
Попытка обновить данные на сервере изменением реквизитов без вызова ОбновитьОтображениеДанных — пользователь не видит изменений
04
Не отключённый обработчик ожидания после закрытия формы — ошибки в фоне и утечка ресурсов

Когда обновление не помогает: кэш, блокировки и перезапуск

Если после F5 и программного обновления форма по-прежнему показывает устаревшие данные, проблема обычно глубже. Первый кандидат — кэш тонкого клиента. Помогает очистка кэша: закройте сеанс и удалите содержимое папок кэша в каталоге профиля пользователя (обычно в AppData\Roaming\1C\1cv8 — папки с длинными буквенно-цифровыми именами), либо запустите клиент с параметром /ClearCache.

Вторая причина — блокировки. Если объект заблокирован другим пользователем или фоновым процессом, форма может отображать данные на момент открытия транзакции. Проверьте активные сеансы в консоли кластера или через «Администрирование → Активные пользователи» в файловой базе.

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

Контрольные точки

Как проверить результат

Список после F5
Норма

Новые документы видны, итоги актуальны

Тревожный признак

Записи не появляются — проверьте отборы и период

Форма объекта после перечитывания
Норма

Реквизиты соответствуют данным в базе

Тревожный признак

Данные старые — закройте и откройте форму заново

После очистки кэша
Норма

Форма открывается корректно, данные свежие

Тревожный признак

Проблема сохраняется — проверяйте блокировки и права

Часто задаваемые вопросы

Чем «Обновить» отличается от «Перечитать» в форме документа?

«Обновить» (F5) подтягивает свежие данные в список, не затрагивая открытый объект. «Перечитать» заново считывает сам объект из базы и отменяет все несохранённые правки в текущей форме. Если вы редактировали документ, сначала запишите его.

Почему новый документ коллеги не виден в моём списке?

Динамический список не обновляется автоматически при изменениях других пользователей. Нажмите F5. Если документ не появился — проверьте отбор по периоду, организации и ответственному, а также сортировку списка.

Как обновить форму из кода после записи объекта?

Используйте Элементы.Список.Обновить() для динамического списка или ОповеститьОбИзменении(Ссылка) — тогда платформа сама уведомит все открытые формы, отображающие этот объект, и они обновятся стандартным образом.

Можно ли сделать автообновление списка каждые 5 секунд?

Технически можно через ПодключитьОбработчикОжидания, но не рекомендуется: каждый вызов — это запрос к серверу, и при нескольких пользователях нагрузка заметно вырастет. Практичный минимум — 15–30 секунд, а для тяжёлых списков — ещё реже.

F5 не помогает, данные всё равно старые. Что делать?

Закройте и откройте форму заново. Если не помогло — очистите кэш тонкого клиента (папки кэша в профиле пользователя или запуск с /ClearCache). Далее проверяйте блокировки объекта другими сеансами и права доступа к данным.

Работает ли ОповеститьОбИзменении между разными пользователями?

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

Итог

Что важно запомнить

Пользователю достаточно F5 или команды «Ещё → Обновить»; «Перечитать» используйте осторожно — она сбрасывает несохранённые изменения. Разработчику доступны Элементы.Список.Обновить(), ОбновитьОтображениеДанных() и ОповеститьОбИзменении(). Если обновление не помогает — проверяйте отборы, кэш клиента, блокировки и права.