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

Быстрый старт · 10 мин

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

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

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

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

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

Когда вообще нужно переоткрывать форму

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

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

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

Достаточно перечитать объект или переоткрыть форму

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

Закрыть форму и открыть заново; при повторении — смотреть журнал ошибок

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

Уточнить, кто держит блокировку, и дождаться её снятия

Нужно открыть ту же форму с новыми параметрамиНапример, отчёт с другим периодом

Использовать ОткрытьФорму с параметрами или новую копию формы

Способ 1. Закрыть и открыть форму заново

Самый надёжный пользовательский приём. Закройте форму крестиком на вкладке или клавишей Esc (если форма не модифицирована), затем откройте объект снова: из списка документов, справочника, журнала или через главное меню раздела. Новая форма будет создана с нуля и загрузит актуальные данные.

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

Для отчётов и обработок переоткрытие особенно полезно: настройки сбрасываются к сохранённым или стандартным, и исчезают «залипшие» состояния после ошибок формирования.

Способ 2. Обновить данные без закрытия формы

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

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

Важно различать: перечитывание объекта отменяет ваши незаписанные изменения, а обновление списка — нет, оно лишь подтягивает свежие строки.

Способ 3. Программное переоткрытие формы

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

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

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

bsl
&НаКлиенте
Процедура ПереоткрытьФорму(Команда)
	ПараметрыФормы = Новый Структура("Ключ", Объект.Ссылка);
	ОткрытьФорму(ИмяФормыОбъекта, ПараметрыФормы);
	Закрыть();
КонецПроцедуры

&НаСервере
Процедура ПеречитатьОбъект()
	Прочитать(); // перечитывает объект из базы в текущей форме
КонецПроцедуры

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

Способ 4. Переоткрытие отчётов и внешних обработок

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

Внешняя обработка (файл .epf) после изменения файла на диске не обновляется в открытом окне автоматически. Нужно закрыть форму обработки и снова открыть файл через «Файл → Открыть». В режиме тонкого клиента файл перечитывается с диска при каждом открытии, поэтому переоткрытие всегда подхватывает новую версию.

Сравнение вариантов

Закрыть и открыть заново

Универсально и безопасно; теряются несохранённые данные и контекст формы

Перечитать объект (F5 / Перечитать)

Быстро, форма остаётся открытой; отменяет незаписанные изменения объекта

ОткрытьФорму из кода

Гибко, можно передать новые параметры; требует прав разработчика и аккуратной работы с контекстом

ОповеститьОбИзменении

Обновляет все открытые формы объекта; работает только если формы корректно обрабатывают оповещение

Частые ошибки и ограничения

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

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

Разработчики часто ошибаются, вызывая Закрыть() до ОткрытьФорму: после закрытия формы её модуль прекращает выполнение, и новая форма не откроется. Правильный порядок — сначала открыть новую, потом закрыть текущую.

Типичные ошибки
01
Закрытие формы с несохранёнными изменениями — данные теряются без возможности восстановления
02
Ожидание, что F5 обновит форму документа — F5 обновляет только динамические списки
03
Вызов Закрыть() перед ОткрытьФорму в коде — выполнение модуля прерывается, новая форма не открывается
04
Переоткрытие при блокировке другим пользователем — проблема не решается, объект остаётся недоступным для редактирования
05
Многократное открытие одной обработки вместо перечитывания — накапливаются лишние вкладки и растёт нагрузка на клиент

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

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

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

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

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

Данные в форме после переоткрытия
Норма

Совпадают с данными в списке и у других пользователей

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

Остались старыми — проверяйте кэш клиента или перезапустите сеанс

Новая форма, открытая из кода
Норма

Открылась с нужным объектом и параметрами

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

Пустая форма — не передан параметр Ключ

Доступность редактирования
Норма

Поля активны, кнопка «Записать» доступна

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

Режим «только просмотр» — объект заблокирован другим сеансом

FAQ: частые вопросы о переоткрытии форм 1С

Можно ли переоткрыть форму, не теряя введённые данные?

Да, если сначала записать объект кнопкой «Записать» или сочетанием Ctrl+S. После записи данные сохранены в базе, и переоткрытие формы ничего не потеряет. Альтернатива без закрытия — команда «Перечитать», но она как раз отменяет незаписанные изменения, поэтому записывать нужно в любом случае.

Почему после переоткрытия форма всё равно показывает старые данные?

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

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

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

Чем отличается «Перечитать» от закрытия и повторного открытия?

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

Как переоткрыть внешнюю обработку после изменения файла?

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

Почему в коде после Закрыть() не открывается новая форма?

Метод Закрыть() завершает работу формы, и выполнение её модуля прекращается — код после вызова не выполняется. Меняйте порядок: сначала ОткрытьФорму с нужными параметрами, затем Закрыть() для текущей формы.

Итог

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

В большинстве случаев переоткрытие формы 1С — это закрытие и повторное открытие из списка, при этом данные перечитываются из базы. Если нужно только обновить содержимое, используйте «Перечитать» для объекта или F5 для списка. Разработчику доступны ОткрытьФорму, Прочитать и ОповеститьОбИзменении. Всегда записывайте объект перед закрытием и помните: блокировку другим пользователем переоткрытие не снимает.