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

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

Как обновить окно в 1С: способы обновления формы и данных

Как обновить окно в 1С: обновление формы через F5, команду «Обновить», программные методы ОбновитьОтображениеДанных и Прочитать. Разбор типичных ситуаций и ошибок.

Фраза «обновить окно в 1С» означает разные действия в зависимости от ситуации: пользователю нужно увидеть свежие данные в открытой форме, разработчику — программно перечитать объект или перерисовать элементы интерфейса, а администратору — обновить отображение списка после изменений других пользователей. 1С не всегда обновляет содержимое окон автоматически, поэтому данные в открытой форме могут устареть, пока вы работаете с ней.

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

Что именно нужно обновить: определяем ситуацию

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

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

Маршрут решения

Как выбрать действие

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

Обновление окна штатными средствами интерфейса

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

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

Обновление рабочего стола и начальной страницы

Динамические списки на начальной странице (например, «Мои задачи» или текущие документы) обновляются по таймеру, который задаётся в настройках, либо вручную. Если свежие данные не появляются, откройте нужный список по ссылке и обновите его отдельно через F5.

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

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

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

  • F5 — обновить текущий список без сброса настроек отбора.
  • «Ещё → Обновить» — то же действие через меню.
  • «Ещё → Установить стандартные настройки» — сброс отборов, если данные «пропали» после обновления.

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

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

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

bsl
// Перерисовать элементы формы после изменения реквизитов
ЭтаФорма.ОбновитьОтображениеДанных();

// Перечитать объект из базы (несохранённые изменения пропадут)
ЭтаФорма.Прочитать();

// Обновить динамический список на форме
Элементы.Список.Обновить();

Частая потребность — обновить форму автоматически после какого-то действия: записи документа, закрытия подчинённой формы, завершения фонового задания. Для этого используют обработчики событий формы: ПослеЗаписи, ОбработкаОповещения, ОбработкаВыбора.

Обновление связанных форм через оповещения

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

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

bsl
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
    Если ИмяСобытия = "Запись_Номенклатура" Тогда
        Элементы.Список.Обновить();
    КонецЕсли;
КонецПроцедуры

Обновление отчётов и печатных форм

Отчёты на СКД не обновляются автоматически после изменения данных: сформированный результат — это снимок на момент формирования. Чтобы увидеть актуальные цифры, нажмите «Сформировать» повторно. Если отчёт открыт как окно предпросмотра печатной формы, его нужно закрыть и сформировать заново из документа — обновить такое окно клавишей F5 нельзя.

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

Типичные ошибки
01
Вызов ОбновитьОтображениеДанных() вместо Прочитать() — экран перерисуется, но устаревшие данные останутся
02
Перечитывание объекта до записи — теряются все введённые в форму изменения
03
Обновление списка в цикле или при каждом событии — лишние запросы к базе и «подвисание» формы
04
Ожидание автообновления отчёта СКД — результат не меняется без повторного формирования
05
Сброс отборов при обновлении через стандартные настройки — пользователь теряет рабочий фильтр

Если окно не обновляется или «зависло»

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

Для файловых баз и тонкого клиента помогает очистка кэша: каталог кэша находится в профиле пользователя (%APPDATA%\1C\1cv8), его можно удалить при закрытой программе — платформа создаст кэш заново. В клиент-серверном варианте «залипшие» данные иногда связаны с блокировками: проверьте список активных сеансов в консоли кластера.

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

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

Данные в списке после F5
Норма

Свежие записи видны, время изменений актуально

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

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

Форма объекта после «Перечитать»
Норма

Поля показывают данные, которые видны в базе

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

Значения прежние — объект не был записан другой стороной

Программное обновление списка
Норма

Список перечитывается без ошибок и мерцания

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

Форма подвисает — обновление вызывается слишком часто

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

Почему F5 не обновляет данные в открытом документе?

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

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

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

Можно ли настроить автообновление списка по таймеру?

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

Как обновить окно из внешней обработки?

Из внешней обработки доступны те же методы формы: ОбновитьОтображениеДанных() для перерисовки, Элементы.ИмяСписка.Обновить() для списка. Чтобы обновить другие открытые окна, используйте Оповестить() с уникальным именем события, а в целевых формах — обработчик ОбработкаОповещения.

Окно обновляется, но показывает неверные итоги. Что делать?

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

Итог

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

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