Разработка и Конфигурация · 11 мин
Как обновить форму в 1С 8: все способы и типичные проблемы
Как обновить форму в 1С 8: команда «Обновить» в интерфейсе, F5, обновление списков и динамических данных, изменение форм в конфигураторе и типичные ошибки.
Запрос «обновить форму» в 1С 8 может означать три разные задачи: принудительно перечитать данные открытой формы в режиме предприятия, обновить список документов или справочников после изменений и пересоздать форму объекта в конфигураторе после доработки конфигурации. Действия в каждом случае различаются, и путаница между ними — частая причина «не работающих» обновлений.
В режиме предприятия форма обычно обновляется автоматически, но не всегда: динамические списки, данные на формах документов и вычисляемые поля могут показывать устаревшие значения, пока пользователь не выполнит обновление вручную. В конфигураторе же «обновить форму» чаще всего значит синхронизировать реквизиты формы с изменёнными реквизитами объекта метаданных.
Дальше разобраны все сценарии: от простого нажатия F5 до программного обновления через встроенный язык и пересоздания формы в конфигураторе, а также проверка результата и типичные ошибки.
Что значит «обновить форму» в разных контекстах
Прежде чем действовать, определите, какая именно задача стоит. От этого зависит инструмент: пользовательские команды, программные методы или конфигуратор.
- Обновить данные на открытой форме — перечитать объект из базы или обновить отображение, если данные изменил другой пользователь или фоновое задание.
- Обновить список — перезапросить динамический список документов, справочников или записей регистра.
- Обновить форму после изменения конфигурации — привести форму в соответствие с новой структурой объекта в конфигураторе.
- Программно обновить форму — вызвать обновление из кода, например после обработки данных.
Обновление формы в режиме предприятия
Самый простой случай — вы работаете в программе и видите устаревшие данные. Платформа предоставляет несколько штатных способов обновления.
Клавиша F5 и команда «Обновить»
Нажмите F5 на открытой форме списка — динамический список перезапросит данные из базы. Альтернатива — кнопка «Ещё → Обновить» в командной панели формы либо пиктограмма обновления (круговые стрелки) в списках документов и справочников.
Для формы объекта (открытый документ, элемент справочника) F5 работает иначе: платформа перечитывает объект из базы. Если у вас есть несохранённые изменения, программа спросит, что с ними делать — при подтверждении несохранённые правки будут потеряны.
Автоматическое обновление списков
Во многих конфигурациях списки обновляются автоматически при записи объектов, но не мгновенно и не всегда: если данные изменил другой пользователь или регламентное задание, список может показывать старые значения до ручного обновления. Это нормальное поведение платформы, а не ошибка.
- 1Откройте нужный список или форму объекта
- 2Нажмите F5 или «Ещё → Обновить»
- 3Для формы объекта при вопросе о несохранённых данных сначала решите, сохранять ли изменения
- 4Проверьте, что в списке появилась ожидаемая запись или изменилось значение
- 5Если данные не обновились — проверьте отборы и период списка
Программное обновление формы из встроенного языка
Разработчику часто нужно обновить форму из кода: после программной записи объекта, обработки табличной части или выполнения фоновой операции. Для этого есть несколько методов с разным назначением.
Основные методы
ЭтотОбъект.Прочитать()— перечитывает объект из базы данных и обновляет данные формы. Все несохранённые изменения теряются.ЭтотОбъект.ОбновитьОтображениеДанных()— обновляет только отображение элементов без перечитывания данных из базы. Подходит после программного изменения реквизитов формы.Элементы.Список.Обновить()— обновляет конкретный динамический список на форме.ОповеститьОбИзменении(Ссылка)— уведомляет платформу о изменении объекта; все открытые формы, показывающие этот объект, обновятся автоматически.
Пример обновления списка после программной записи документа:
&НаКлиенте
Процедура ПослеЗаписиДокумента(ДокументСсылка)
ОповеститьОбИзменении(ДокументСсылка);
Элементы.Список.Обновить();
КонецПроцедуры
Метод ОбновитьОтображениеДанных() можно вызывать с параметром — конкретным элементом формы, если нужно обновить только его. Это быстрее, чем обновление всей формы, что заметно на тяжёлых формах с большими табличными частями.
&НаКлиенте
Процедура ОбновитьДанные()
ЭтотОбъект.Прочитать(); // перечитать объект из базы
Элементы.Список.Обновить(); // обновить динамический список
КонецПроцедурыОбновление формы в конфигураторе после изменения объекта
Частая ситуация у разработчика: в объект метаданных (документ, справочник) добавлены новые реквизиты, а на форме они не появились. Форма не обновляется автоматически — её нужно синхронизировать вручную.
Добавление новых реквизитов на существующую форму
- Откройте конфигуратор, найдите объект и откройте его основную форму (или создайте новую через конструктор).
- В редакторе формы перейдите на вкладку «Реквизиты» (правая панель).
- Разверните реквизит «Объект» — в нём появятся новые поля объекта метаданных.
- Перетащите нужный реквизит из панели реквизитов в дерево элементов формы (левая панель) в нужное место — например, в группу или на вкладку.
- Сохраните форму и обновите конфигурацию базы данных (F7), если менялась структура данных.
Когда проще пересоздать форму
Если форма сильно устарела относительно объекта или была случайно испорчена, иногда быстрее удалить её и создать заново конструктором форм: правой кнопкой по объекту → «Формы» → добавить форму нужного типа. Учтите: весь программный код модуля формы и ручные настройки элементов при этом будут потеряны, поэтому перед удалением сохраните текст модуля.
Обновление формы при доработке типовой конфигурации
Изменение форм типовых конфигураций (1С:Бухгалтерия, 1С:Управление торговлей и других) имеет особенности. Прямая правка типовой формы усложняет последующие обновления конфигурации: при сравнении и объединении доработанная форма будет конфликтовать с формой поставщика.
Современная практика — использовать расширения конфигурации. В расширении форма заимствуется из основной конфигурации и дорабатывается отдельно: добавляются элементы, реквизиты и обработчики. При обновлении типовой конфигурации расширение продолжает работать, а риск конфликтов значительно ниже.
Способы доработки формы
Подходит для собственных конфигураций или снятых с поддержки. Минус: конфликты при обновлении типовых релизов.
Рекомендуемый способ для типовых решений. Изменения хранятся отдельно, обновление конфигурации проще. Ограничение: не все изменения форм доступны в расширениях на старых версиях платформы.
Добавление элементов кодом без изменения формы. Гибко, но усложняет сопровождение и отладку.
Почему форма не обновляется: диагностика
Если обновление не даёт результата, причина обычно одна из перечисленных ниже. Проверяйте их последовательно.
- В списке установлен отбор или период. Запись существует, но отфильтрована. Сбросьте отбор и проверьте период отображения документов.
- Изменения не записаны в базу. Другой пользователь мог не записать объект, либо транзакция отменена. Проверьте наличие записи через поиск.
- Обновляется не та форма. Открыто несколько окон — обновление выполняется в активной форме.
- Данные выводятся из кэша или отложенной обработки. После обновления конфигурации часть данных заполняется отложенными обработчиками — до их завершения формы могут показывать неполные данные.
- Новые реквизиты не добавлены на форму в конфигураторе. Реквизит объекта существует, но элемент формы не создан — значение просто негде отображать.
Как проверить результат
Новая или изменённая запись видна, значения актуальны
Записи нет — проверьте отбор, период и факт записи объекта
Поля показывают данные из базы
Поля пустые или старые — объект не записан или читается не та ссылка
Реквизит виден в панели реквизитов и в дереве элементов
Реквизита нет в панели — он не добавлен в объект метаданных или форма не та
Типичные ошибки при обновлении форм
Частые вопросы
Чем отличается F5 от «Ещё → Обновить»?
По сути это одно действие — повторное получение данных для активной формы. F5 работает быстрее, но в некоторых формах горячая клавиша может быть переопределена конфигурацией; команда в меню «Ещё» присутствует всегда, если её не убрали разработчики.
Как обновить форму другого пользователя?
Напрямую — никак: платформа не даёт принудительно обновить чужой сеанс. Используйте механизм оповещений: при записи объекта вызывайте ОповеститьОбИзменении(), тогда открытые формы этого объекта у других пользователей обновятся автоматически при следующем взаимодействии с сервером.
Почему после обновления конфигурации форма выглядит по-старому?
Возможные причины: конфигурация базы данных не обновлена (нужно F7 в конфигураторе), пользователь работает в старом сеансе — нужно перезапустить сеанс, либо изменения внесены в расширение, которое отключено или не применено.
Как обновить только одну таблицу на форме, а не всю форму?
Для динамического списка вызовите Элементы.ИмяСписка.Обновить(). Для табличной части объекта достаточно изменить данные — отображение обновится само; если нет, вызовите ОбновитьОтображениеДанных(Элементы.ИмяТаблицы).
Можно ли настроить автообновление списка по таймеру?
Да, через ПодключитьОбработчикОжидания() на клиенте с вызовом Элементы.Список.Обновить() с заданным интервалом. Не ставьте интервал меньше 30–60 секунд: частые запросы динамического списка создают лишнюю нагрузку на сервер.
Что делать, если после доработки форма не открывается с ошибкой?
Откройте форму в конфигураторе и проверьте: нет ли в модуле обращений к удалённым реквизитам, все ли элементы, к которым обращается код, существуют в дереве элементов. Если причина не находится, восстановите форму из копии и внесите изменения заново поэтапно, проверяя открытие после каждого шага.
Что важно запомнить
В режиме предприятия форму обновляют через F5 или «Ещё → Обновить», списки — отдельной командой обновления. Из кода используют Прочитать(), ОбновитьОтображениеДанных(), Элементы.Список.Обновить() и ОповеститьОбИзменении(). В конфигураторе новые реквизиты объекта перетаскивают на форму вручную, а типовые формы безопаснее дорабатывать через расширения.