1С 8.3 Как программно обновить данные управляемой формы объекта или формы списка

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

Три базовых приёма

Перечитать данные формы объекта из базы:

Обновить динамический список на форме:

Перерисовать элементы формы по текущим данным:

Данные объекта на форме

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

Записать(), затем Прочитать(). Сначала записать данные формы, потом подтянуть из базы то, что поменялось в обход формы, например серверной процедурой:

ЗначениеВРеквизитФормы и ЗначениеВДанныеФормы. Если объект уже изменён в памяти на сервере, его можно сразу положить в реквизиты формы, без перечитывания из базы:

Закрыть и открыть форму заново. Самый грубый сброс, на случай когда форма уже в непонятном состоянии и мягкие способы не помогают:

Вместо ПоказатьЗначение можно использовать ОткрытьФорму, если нужно передать параметры.

Только отображение

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

ОбновитьОтображениеДанных() перерисовывает все элементы формы. Если передать элемент или группу, обновится только он:

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

Динамический список

Основной способ — Обновить() у элемента списка. Если меняете отбор или параметры списка, после этого тоже вызовите Обновить():

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

Оповещения между формами

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

ОповеститьОбИзменении сообщает, что объект или все объекты типа изменились. Открытые списки и другие формы подхватят изменения сами:

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

Оповестить — свой канал между формами. Отправитель передаёт имя события, параметр и источник:

На форме-получателе событие ловится в обработчике ОбработкаОповещения:

В конфигурациях на БСП есть свои обёртки над этими методами, поэтому перед тем как писать своё, стоит поискать готовое в общих модулях.

Интерфейс целиком

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

Шпаргалка

СитуацияЧто делать
Объект изменила другая форма или фоновое заданиеОповеститьОбИзменении, а на своей форме при необходимости Прочитать()
Данные на форме устарели относительно базыПрочитать()
Реквизиты уже новые, а на экране староеОбновитьОтображениеДанных()
Нужно обновить динамический списокЭлементы.Список.Обновить()
Ничего не помоглоЗакрыть форму и открыть заново

Статья обновлена 8 октября 2026 года.

Реклама

24 комментария к “1С 8.3 Как программно обновить данные управляемой формы объекта или формы списка”

  1. Отлично — коротко и ясно. Все методы нормально работают в тех ситуациях, для которых они предназначены.

    Ответить
  2. у меня в УНФ только вот так заработало, видимо слишком много изменений в разных процедурах обновлялось

    //Сохраним изменения
    ЭтаФорма.Записать();
    ПоказатьЗначение(,Объект.Ссылка);

    Ответить
  3. Супер! Супер! Супер! Спасибо! Надо было в обработке заполнения поменять открытый объект и потом перечитать его форму

    Ответить
  4. Благодарю. Обновлял с «ОбновитьОтображениеДанных», про «Прочитать» — вылетело из головы. Это помогло.

    Ответить
  5. Да, например ОповеститьОбИзменении(стр.Номенклатура.Ссылка) это единственный рабочий способ, в табличной части на форме, заставить правильно отобразиться ссылку(если например поменяли наименование) при программном изменении этой ссылки стр.Номенклатура.ПолучитьОбъект().Наименование=»новое имя»

    Ответить

Оставьте комментарий