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

Разработка и Конфигурация · 11 мин

Как обновить форму в 1С 8: все способы и типичные проблемы

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

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

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

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

Что значит «обновить форму» в разных контекстах

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

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

Обновление формы в режиме предприятия

Самый простой случай — вы работаете в программе и видите устаревшие данные. Платформа предоставляет несколько штатных способов обновления.

Клавиша F5 и команда «Обновить»

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

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

Автоматическое обновление списков

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

Порядок действий в режиме предприятия
  1. 1
    Откройте нужный список или форму объекта
  2. 2
    Нажмите F5 или «Ещё → Обновить»
  3. 3
    Для формы объекта при вопросе о несохранённых данных сначала решите, сохранять ли изменения
  4. 4
    Проверьте, что в списке появилась ожидаемая запись или изменилось значение
  5. 5
    Если данные не обновились — проверьте отборы и период списка

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

Разработчику часто нужно обновить форму из кода: после программной записи объекта, обработки табличной части или выполнения фоновой операции. Для этого есть несколько методов с разным назначением.

Основные методы

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

Пример обновления списка после программной записи документа:

&НаКлиенте

Процедура ПослеЗаписиДокумента(ДокументСсылка)

ОповеститьОбИзменении(ДокументСсылка);

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

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

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

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

Обновление формы в конфигураторе после изменения объекта

Частая ситуация у разработчика: в объект метаданных (документ, справочник) добавлены новые реквизиты, а на форме они не появились. Форма не обновляется автоматически — её нужно синхронизировать вручную.

Добавление новых реквизитов на существующую форму

  1. Откройте конфигуратор, найдите объект и откройте его основную форму (или создайте новую через конструктор).
  2. В редакторе формы перейдите на вкладку «Реквизиты» (правая панель).
  3. Разверните реквизит «Объект» — в нём появятся новые поля объекта метаданных.
  4. Перетащите нужный реквизит из панели реквизитов в дерево элементов формы (левая панель) в нужное место — например, в группу или на вкладку.
  5. Сохраните форму и обновите конфигурацию базы данных (F7), если менялась структура данных.

Когда проще пересоздать форму

Если форма сильно устарела относительно объекта или была случайно испорчена, иногда быстрее удалить её и создать заново конструктором форм: правой кнопкой по объекту → «Формы» → добавить форму нужного типа. Учтите: весь программный код модуля формы и ручные настройки элементов при этом будут потеряны, поэтому перед удалением сохраните текст модуля.

Обновление формы при доработке типовой конфигурации

Изменение форм типовых конфигураций (1С:Бухгалтерия, 1С:Управление торговлей и других) имеет особенности. Прямая правка типовой формы усложняет последующие обновления конфигурации: при сравнении и объединении доработанная форма будет конфликтовать с формой поставщика.

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

Способы доработки формы

Прямое изменение типовой формы

Подходит для собственных конфигураций или снятых с поддержки. Минус: конфликты при обновлении типовых релизов.

Расширение конфигурации

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

Программное создание элементов в ПриСозданииНаСервере

Добавление элементов кодом без изменения формы. Гибко, но усложняет сопровождение и отладку.

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

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

  • В списке установлен отбор или период. Запись существует, но отфильтрована. Сбросьте отбор и проверьте период отображения документов.
  • Изменения не записаны в базу. Другой пользователь мог не записать объект, либо транзакция отменена. Проверьте наличие записи через поиск.
  • Обновляется не та форма. Открыто несколько окон — обновление выполняется в активной форме.
  • Данные выводятся из кэша или отложенной обработки. После обновления конфигурации часть данных заполняется отложенными обработчиками — до их завершения формы могут показывать неполные данные.
  • Новые реквизиты не добавлены на форму в конфигураторе. Реквизит объекта существует, но элемент формы не создан — значение просто негде отображать.
Контрольные точки

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

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

Новая или изменённая запись видна, значения актуальны

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

Записи нет — проверьте отбор, период и факт записи объекта

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

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

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

Поля пустые или старые — объект не записан или читается не та ссылка

Форма в конфигураторе после добавления реквизита
Норма

Реквизит виден в панели реквизитов и в дереве элементов

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

Реквизита нет в панели — он не добавлен в объект метаданных или форма не та

Типичные ошибки при обновлении форм

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

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

Чем отличается F5 от «Ещё → Обновить»?

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

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

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

Почему после обновления конфигурации форма выглядит по-старому?

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

Как обновить только одну таблицу на форме, а не всю форму?

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

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

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

Что делать, если после доработки форма не открывается с ошибкой?

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

Итог

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

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