Обновление формы и списка в 1С 8.3: клавиши, команды, код и автообновление
Содержание
Чтобы обновить страницу в 1С 8.3, встаньте в список и нажмите клавишу Ctrl+Shift+R. Тот же результат даёт команда Ещё → Обновить в командной панели формы. Программа заново прочитает данные из базы и покажет документы и элементы, которые за это время создали или изменили другие пользователи.
Это поведение платформы, а не конкретной программы. Поэтому способ одинаково работает в 1С:Бухгалтерии 3.0, ЗУП 3.1, УТ 11 и других конфигурациях на интерфейсе «Такси». Отличаются только формы, которые не обновляются этой командой: отчёты, открытый документ и командный интерфейс. Для каждого случая ниже свой приём.
Что именно «обновляется» в 1С и почему данные бывают устаревшими
В 1С нет «страницы» в браузерном смысле. Есть открытые формы, и каждая держит свою копию данных:
- 📋 Форма списка (журнал документов , справочник) показывает динамический список. Он подчитывает строки из базы порциями при прокрутке, но уже показанные строки сам не перечитывает.
- 📄 Форма объекта (открытый документ или карточка) загружает объект один раз при открытии. Если коллега в это время провёл тот же документ, вы этого не увидите.
- 📊 Отчёт строится по нажатию кнопки
Сформировать. Готовый результат — это снимок данных на момент формирования. - 🧭 Командный интерфейс (разделы, панель навигации , меню) собирается при запуске сеанса с учётом прав и функциональных опций.
Отсюда типичная ситуация: бухгалтер держит журнал реализаций открытым с утра, менеджер в обед создаёт десять документов, а в журнале их нет. Данные в базе есть, устарела только картинка на экране.
| Что открыто | Как обновить вручную | Что произойдёт |
|---|---|---|
| Список документов, справочник, регистр | Ctrl+Shift+R или Ещё → Обновить | Строки перечитаются из базы |
| Открытый документ или карточка | Ещё → Перечитать | Форма загрузит объект заново, несохранённые правки пропадут |
| Отчёт, ОСВ, анализ счёта | Кнопка Сформировать | Отчёт построится по текущим данным |
| Разделы и меню | Перезапуск сеанса | Подтянутся новые права и настройки |
Как обновить страницу в 1С клавишей и через меню
Список документов или справочник
- Щёлкните по любой строке списка, чтобы фокус был в таблице, а не в поле поиска.
- Нажмите
Ctrl+Shift+R. - Список перечитается, курсор останется на той же строке, если она не удалена.
Если клавиши не срабатывают, откройте меню Ещё в командной панели списка и выберите Обновить. Справа от команды в этом меню видна назначенная ей комбинация клавиш. Так удобно проверять сочетания и для других команд.
Отбор, сортировка и поиск при обновлении сохраняются. Если после Ctrl+Shift+R нужного документа всё равно нет, сначала проверьте строку поиска и установленный отбор по организации или периоду.
Открытый документ: «Перечитать»
Команда Обновить в форме документа обычно не нужна. Для открытого объекта есть Ещё → Перечитать. Она загружает документ из базы заново: актуальные суммы, статус проведения, изменения коллег.
«Перечитать» отбрасывает ваши несохранённые изменения. Если вы правили табличную часть и не записали документ, правки исчезнут без возврата.
Пригодится, когда при записи 1С сообщает, что объект уже изменён другим пользователем. Порядок такой: скопируйте себе нужные правки, выполните Перечитать, внесите их заново и запишите документ.
Отчёт
Отчёты не следят за базой. Чтобы получить свежие цифры, нажмите Сформировать ещё раз. Сохранённый вариант отчёта при этом не меняется, перестраивается только результат.
Привычка нажимать F5
Многие по опыту работы в браузере жмут F5. В тонком клиенте опирайтесь на Ctrl+Shift+R: именно эту комбинацию платформа назначает команде «Обновить». В веб-клиенте F5 перехватывает браузер и перезагружает всю вкладку, об этом ниже.
Обновление формы из кода на встроенном языке
Разработчику нужно, чтобы форма обновлялась сама: после записи документа из обработки, после фонового расчёта, после изменения связанных данных. Ниже приёмы, которые работают в управляемых формах.
Обновить конкретный динамический список
Если список лежит на вашей же форме, вызовите метод элемента таблицы:
&НаКлиенте
Процедура ОбновитьСписокДокументов()
Элементы.Список.Обновить();
КонецПроцедуры
Здесь Список — имя элемента формы с динамическим списком. Метод вызывается на клиенте.
Сообщить всем открытым спискам об изменении
Когда вы записали объект программно, другие открытые формы о нём не знают. Глобальный метод ОповеститьОбИзменении() заставляет обновиться все динамические списки, где есть этот объект или этот тип:
&НаКлиенте
Процедура ПослеЗаписиДокумента(Ссылка)
// обновить списки, где показан этот документ
ОповеститьОбИзменении(Ссылка);
// или все списки документов этого вида
ОповеститьОбИзменении(Тип("ДокументСсылка.РеализацияТоваровУслуг"));
КонецПроцедуры
Интерактивная запись через форму документа делает это сама. Вызов нужен, когда запись идёт из кода, например из обработки или серверной процедуры.
Оповещение между формами
Если обновить надо не список, а произвольную форму (итоги на рабочем столе, реквизиты карточки), используйте пару Оповестить() и ОбработкаОповещения:
// в форме, где произошло изменение
&НаКлиенте
Процедура ПослеРасчета()
Оповестить("ПересчетВыполнен", Неопределено, ЭтотОбъект);
КонецПроцедуры
// в форме, которая должна обновиться
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "ПересчетВыполнен" Тогда
ОбновитьДанныеНаСервере();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбновитьДанныеНаСервере()
// заново заполнить реквизиты формы из базы
КонецПроцедуры
Перечитать объект в форме из кода
В форме объекта метод формы Прочитать() делает то же, что команда «Перечитать»: загружает объект из базы. Предупреждение то же самое: несохранённые данные теряются, поэтому перед вызовом проверьте свойство формы Модифицированность.
Обновить командный интерфейс
После программного изменения функциональных опций или констант, от которых зависит видимость разделов, вызовите глобальный метод ОбновитьИнтерфейс(). Он перестраивает командный интерфейс текущего сеанса без перезапуска.
Консоль запросов и внешние обработки: почему результат «застывает»
Консоль запросов и любая внешняя обработка — такие же формы. Результат запроса в табличном поле консоли — это снимок на момент нажатия Выполнить. Чтобы увидеть изменения, выполните запрос повторно. Никакого «живого» результата там нет.
С внешними обработками есть частая ловушка. Обработка массово меняет документы, например перезаполняет статью затрат. Обработка отработала, а в открытом журнале документов всё по-старому. Причина в том, что обработка писала объекты из кода и не оповестила списки.
Что делать:
- 👤 Пользователю — нажать
Ctrl+Shift+Rв журнале после завершения обработки. - 🛠️ Автору обработки — после цикла записи вызвать на клиенте
ОповеститьОбИзменении()с типом изменённых документов. Один вызов на тип, а не на каждый документ.
Если обработка меняет данные в фоне на сервере, клиент узнаёт о завершении только тогда, когда проверит состояние задания. Оповещение ставьте в процедуру, которая обрабатывает это завершение.
Обновление в разных конфигурациях: где команда работает иначе
Механизм обновления общий для платформы. Разница в том, какие формы конфигурация строит не на динамическом списке.
- 🏠 Начальная страница и рабочие столы. В БП 3.0, ЗУП 3.1 и УТ 11 на начальной странице бывают формы с итогами, задачами, напоминаниями. Часть из них заполняется при открытии. Если цифры устарели, закройте и снова откройте такую форму или перезапустите сеанс.
- 📊 Отчёты-панели (оборотно-сальдовая ведомость, анализ субконто, отчёты по зарплате). Обновляются только кнопкой
Сформировать. КлавишаCtrl+Shift+Rих не пересчитывает. - 📑 Формы со списками внутри документа. Табличная часть документа — это данные самого объекта, а не динамический список. Её обновляет только «Перечитать» или повторное открытие документа.
- 🗂️ Старые конфигурации на обычных формах, запущенные в толстом клиенте. Внешний вид команд другой, но идея та же: обновление списка и перечитывание объекта — две разные команды.
Обновить страницу в веб-клиенте и мобильном приложении 1С
Веб-клиент в браузере
Здесь легко спутать две вещи:
| Действие | Что обновляет | Последствия |
|---|---|---|
Ctrl+Shift+R или Ещё → Обновить внутри списка | Только этот список | Безопасно, сеанс продолжается |
F5 или кнопка обновления браузера | Всю вкладку целиком | Сеанс 1С перезапускается, открытые формы закрываются, несохранённые данные теряются |
Ctrl+F5 в браузере | Вкладку с повторной загрузкой файлов | То же, плюс браузер заново скачает скрипты веб-клиента |
Браузерное обновление нужно в одном случае: после обновления конфигурации или платформы на сервере, когда интерфейс ведёт себя странно, а формы выглядят по-старому. Тогда сначала запишите все документы, затем нажмите Ctrl+F5.
Если браузер спрашивает «Покинуть страницу?», значит, у вас открыты несохранённые формы. Откажитесь, запишите документы и только потом обновляйте вкладку.
Мобильное приложение
В мобильном клиенте 1С списки тоже динамические. Команда обновления находится в меню формы, рядом с другими командами списка. Если данные не приходят совсем, проверьте подключение к интернету: мобильный клиент работает с базой через сеть, и при обрыве связи форма показывает то, что успела загрузить.
Автономные мобильные приложения на платформе 1С хранят данные у себя и обмениваются с основной базой по расписанию. В них «обновить страницу» мало: новые документы появятся после синхронизации.
Автообновление: списки, регламентные и фоновые задания
Автообновление динамического списка
Для журналов, которые должны быть «живыми» (очередь заказов, лента входящих документов ЭДО), в свойствах элемента таблицы формы с динамическим списком задают автообновление и его период в секундах. В конфигураторе это делается на палитре свойств элемента, в расширении — так же, без снятия конфигурации с поддержки.
Слишком короткий период нагружает сервер: каждый открытый список каждые N секунд выполняет запрос. Для журнала с тысячами строк и сорока пользователями разумнее период в 60–120 секунд, чем 5.
Обработчик ожидания
Когда обновить нужно не список, а произвольные данные формы, используйте обработчик ожидания:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// вызывать ОбновитьИтоги каждые 60 секунд
ПодключитьОбработчикОжидания("ОбновитьИтоги", 60);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьИтоги() Экспорт
ОбновитьИтогиНаСервере();
КонецПроцедуры
&НаСервере
Процедура ОбновитьИтогиНаСервере()
// запрос к базе и заполнение реквизитов формы
КонецПроцедуры
При закрытии формы обработчик отключится сам. Если нужно остановить его раньше, вызовите ОтключитьОбработчикОжидания("ОбновитьИтоги").
Данные от регламентных и фоновых заданий
Регламентное задание (загрузка курсов валют, получение документов ЭДО, обмен с сайтом) пишет в базу на сервере. Открытые у пользователей списки об этом не узнают. Варианты:
- Пользователь обновляет список вручную через
Ctrl+Shift+R. - На форме включено автообновление списка.
- Форма периодически проверяет данные обработчиком ожидания.
В файловой базе регламентные задания выполняются, только пока база открыта хотя бы у одного пользователя. Если задание «не обновляет данные», проверьте сначала, что оно вообще запускалось, а не пытайтесь обновить список.
Когда обновление не помогает и что проверить
Обновили, а нужного нет. Пройдитесь по причинам по порядку, от простой к сложной:
Запуск с очисткой кэша: в окне выбора базы нажмите Изменить, на последнем шаге в поле дополнительных параметров запуска впишите /ClearCache. После проблемного запуска ключ лучше убрать, иначе каждый старт будет дольше.