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