Что обновлять, зависит от того, что именно устарело: данные объекта на форме, только их отображение, динамический список или данные в других открытых формах. Сначала три базовых приёма, затем остальные рабочие способы и шпаргалка, когда какой брать.
Три базовых приёма
Перечитать данные формы объекта из базы:
|
1 |
ЭтаФорма.Прочитать(); |
Обновить динамический список на форме:
|
1 |
Элементы.Список.Обновить(); |
Перерисовать элементы формы по текущим данным:
|
1 |
ЭтаФорма.ОбновитьОтображениеДанных(); |
Данные объекта на форме
Прочитать() перечитывает объект из базы в форму. Метод есть только у формы объекта: справочника, документа и других объектов, которые хранятся в базе. На форме обработки или отчёта его нет, и вызов закончится ошибкой «Метод объекта не обнаружен». Это ожидаемо: перечитывать там нечего.
Записать(), затем Прочитать(). Сначала записать данные формы, потом подтянуть из базы то, что поменялось в обход формы, например серверной процедурой:
|
1 2 3 |
Записать(); // изменения объекта в базе Прочитать(); |
ЗначениеВРеквизитФормы и ЗначениеВДанныеФормы. Если объект уже изменён в памяти на сервере, его можно сразу положить в реквизиты формы, без перечитывания из базы:
|
1 2 3 4 5 6 |
&НаСервере Процедура ЗаполнитьНаСервере() ДокументОбъект = РеквизитФормыВЗначение("Объект"); // изменения объекта ЗначениеВРеквизитФормы(ДокументОбъект, "Объект"); КонецПроцедуры |
Закрыть и открыть форму заново. Самый грубый сброс, на случай когда форма уже в непонятном состоянии и мягкие способы не помогают:
|
1 2 3 |
Ссылка = Объект.Ссылка; Закрыть(); ПоказатьЗначение(, Ссылка); |
Вместо ПоказатьЗначение можно использовать ОткрытьФорму, если нужно передать параметры.
Только отображение
Эти способы не меняют данные, а только перерисовывают элементы по тому, что уже лежит в реквизитах формы.
ОбновитьОтображениеДанных() перерисовывает все элементы формы. Если передать элемент или группу, обновится только он:
|
1 |
ОбновитьОтображениеДанных(Элементы.Товары); |
Переприсвоить реквизит. Иногда платформе достаточно увидеть, что значение «изменилось», чтобы перерисовать элемент. Для табличной части то же самое даёт повторное заполнение:
|
1 |
Объект.Контрагент = Объект.Контрагент; |
Динамический список
Основной способ — Обновить() у элемента списка. Если меняете отбор или параметры списка, после этого тоже вызовите Обновить():
|
1 2 |
Список.Параметры.УстановитьЗначениеПараметра("Организация", Организация); Элементы.Список.Обновить(); |
Если на форме несколько связанных списков, обновлять нужно каждый.
Оповещения между формами
Когда объект изменила другая форма или фоновое задание, текущая форма об этом не знает. Тут оповещения часто единственный правильный путь.
ОповеститьОбИзменении сообщает, что объект или все объекты типа изменились. Открытые списки и другие формы подхватят изменения сами:
|
1 2 |
// один объект ОповеститьОбИзменении(Ссылка); |
|
1 2 |
// все объекты типа ОповеститьОбИзменении(Тип("ДокументСсылка.ЗаказКлиента")); |
В комментариях к этой статье как раз писали, что когда в табличной части стоит ссылка, у которой поменяли наименование, часто помогает только это.
Оповестить — свой канал между формами. Отправитель передаёт имя события, параметр и источник:
|
1 |
Оповестить("ЗаписьТоваров", Параметр, ЭтаФорма); |
На форме-получателе событие ловится в обработчике ОбработкаОповещения:
|
1 2 3 4 5 6 |
&НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Если ИмяСобытия = "ЗаписьТоваров" Тогда Элементы.Список.Обновить(); КонецЕсли; КонецПроцедуры |
В конфигурациях на БСП есть свои обёртки над этими методами, поэтому перед тем как писать своё, стоит поискать готовое в общих модулях.
Интерфейс целиком
ОбновитьИнтерфейс() обновляет командный интерфейс: разделы, панели, функциональные опции. К данным формы объекта или списка он почти не относится, поэтому для обновления формы его вызывать бесполезно.
|
1 |
ОбновитьИнтерфейс(); |
Шпаргалка
| Ситуация | Что делать |
|---|---|
| Объект изменила другая форма или фоновое задание | ОповеститьОбИзменении, а на своей форме при необходимости Прочитать() |
| Данные на форме устарели относительно базы | Прочитать() |
| Реквизиты уже новые, а на экране старое | ОбновитьОтображениеДанных() |
| Нужно обновить динамический список | Элементы.Список.Обновить() |
| Ничего не помогло | Закрыть форму и открыть заново |
Статья обновлена 8 октября 2026 года.
ни одно не помогло
Полная фигня
Подтверждаю, полная фигня.
Зависит от того, что и откуда вы хотите обновить.
Спасибо, помогло
«ЭтаФорма.Прочитать()» всё отлично работает
ЭтаФорма.Прочитать() {(1)}: Метод объекта не обнаружен (Прочитать)
Спасибо! Очень помогло в разработке)\
Работает на 8.3.18.1289, УФ, ERP
Отлично — коротко и ясно. Все методы нормально работают в тех ситуациях, для которых они предназначены.
у меня в УНФ только вот так заработало, видимо слишком много изменений в разных процедурах обновлялось
//Сохраним изменения
ЭтаФорма.Записать();
ПоказатьЗначение(,Объект.Ссылка);
Супер! Супер! Супер! Спасибо! Надо было в обработке заполнения поменять открытый объект и потом перечитать его форму
Супер, спасибо!
Супер, спасибо!
Помогло
Динамический список обновился. Спасибо
Ппц, разрабы 1с совсем не знают что такое абстракция. РукаЛицо
Расскажите, пожалуйста.
Благодарю. Обновлял с «ОбновитьОтображениеДанных», про «Прочитать» — вылетело из головы. Это помогло.
Помогло, спасибо
ОповеститьОбИзменении()
Спасибо, работает
Да, например ОповеститьОбИзменении(стр.Номенклатура.Ссылка) это единственный рабочий способ, в табличной части на форме, заставить правильно отобразиться ссылку(если например поменяли наименование) при программном изменении этой ссылки стр.Номенклатура.ПолучитьОбъект().Наименование=»новое имя»
Спасибо! Очень помогло!!!