Список в 1С не показывает свежие данные: все способы освежить его
Содержание
Чтобы обновить список в 1С 8.3, нажмите F5 в открытой форме списка или выберите Ещё → Обновить. Платформа заново прочитает данные из базы, и в списке появятся элементы, которые добавили или изменили другие пользователи, обработки и обмены.
Если после F5 нужной строки всё равно нет, дело уже не в обновлении, а в отборе, настройках списка или в самих данных. Проверьте строку поиска, период журнала и группу справочника: чаще всего запись просто скрыта условием формы.
Когда список в 1С нужно обновлять
Форма списка в 1С 8.3 построена на динамическом списке. Он не держит в памяти всю таблицу: платформа читает данные порциями, когда вы листаете. Свои изменения вы видите сразу, а чужие — только после обновления.
Типичные ситуации, когда без обновления не обойтись:
- 👥 коллега провёл документ или завёл контрагента, а у вас список открыт с утра;
- 🔄 прошёл обмен с другой базой (с УТ, с сайтом, с банком) и загрузил новые объекты;
- ⚙️ отработала обработка или регламентное задание, которое записало данные на сервере;
- 🧩 вы изменили объект из своей внешней обработки, а форма списка этого «не узнала»;
- 🗂 после загрузки из файла (Excel, XML) список выглядит так, будто ничего не произошло.
Есть и обратный случай. Вы удалили объект, а в списке висит строка <Объект не найден>. Это тоже лечится обновлением: строка ссылалась на запись, которой больше нет.
Обновление списка ничего не записывает в базу. Это безопасная операция: её можно делать сколько угодно раз, сеансы других пользователей она не затрагивает.
Обновить список вручную: клавиши и команды
Ручных способов три. Все работают в интерфейсе «Такси» на платформе 8.3.2x одинаково для справочников, журналов документов и регистров.
| Способ | Как вызвать | Когда удобно |
|---|---|---|
| Клавиша | F5 в активной форме списка | Самый быстрый, работает почти везде |
| Меню формы | Ещё → Обновить | Если клавиатура перехвачена другой программой |
| Переоткрыть форму | Закрыть вкладку и открыть раздел заново | Если форма «зависла» или сломались настройки |
Порядок действий:
- Щёлкните мышью по таблице списка, чтобы фокус был именно на ней, а не на поле поиска.
- Нажмите
F5. - Если строка не появилась, проверьте поиск и отборы и период журнала.
Если в форме есть кнопка с круговой стрелкой, это та же команда «Обновить». В некоторых формах её выносят на командную панель, в других она прячется в меню «Ещё».
Почему после F5 строки всё равно нет
Динамический список честно показывает то, что лежит в базе с учётом всех условий формы. Поэтому сначала проверьте условия:
- 🔍 в строке поиска остался текст от прошлого раза;
- 📌 установлен отбор — по организации, складу, периоду, ответственному;
- 🗃 справочник иерархический, и вы стоите в другой группе;
- 🗑 объект помечен на удаление, а показ помеченных выключен;
- 📅 у журнала документов задан период, и новый документ в него не попал.
Самый частый случай — период в журнале документов. Документ создали «задним числом» или «завтрашним», а журнал показывает только текущий месяц.
Обновление списка из кода формы
Разработчику обновлять список программно приходится постоянно. Например, после того как команда на форме создала документы на сервере. Пользователь ждёт увидеть их сразу, без F5.
Метод Обновить() у элемента формы
На клиенте у таблицы формы, связанной с динамическим списком, есть метод Обновить():
&НаКлиенте
Процедура СоздатьДокументы(Команда)
СоздатьДокументыНаСервере();
Элементы.Список.Обновить();
КонецПроцедуры
&НаСервере
Процедура СоздатьДокументыНаСервере()
// создание и запись документов
КонецПроцедуры
Здесь Список — имя элемента таблицы на форме. Если вы переименовали элемент, подставьте своё имя.
ОповеститьОбИзменении — когда форма списка чужая
Метод Обновить() работает только в той форме, где написан код. Если объекты меняет внешняя обработка, а открыты обычные формы списков конфигурации, используйте глобальный метод ОповеститьОбИзменении(). Он сообщает всем открытым динамическим спискам клиентского сеанса, что данные такого типа изменились.
&НаКлиенте
Процедура ВыполнитьОбработку(Команда)
ИзменитьНоменклатуруНаСервере();
// обновит все открытые списки справочника «Номенклатура»
ОповеститьОбИзменении(Тип("СправочникСсылка.Номенклатура"));
КонецПроцедуры
Можно передать и конкретную ссылку: ОповеститьОбИзменении(Ссылка). Тогда списки перечитают строку именно этого объекта.
Оповещение работает только в пределах одного клиентского сеанса. Другим пользователям оно не долетит — им нужен F5 или автообновление.
Оповестить и ОбработкаОповещения
Для своих форм удобен второй механизм. Форма, где произошло изменение, вызывает Оповестить("ИмяСобытия"). Форма со списком ловит событие в обработчике ОбработкаОповещения и обновляет таблицу:
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "ЗагруженыЦены" Тогда
Элементы.Список.Обновить();
КонецЕсли;
КонецПроцедуры
Список выбора поля — это другой список
Иногда «обновить список» означает список значений в выпадающем поле. Он не связан с базой, его заполняют кодом. Обновление — это очистка и повторное заполнение:
&НаКлиенте
Процедура ЗаполнитьВарианты()
Элементы.Вариант.СписокВыбора.Очистить();
Элементы.Вариант.СписокВыбора.Добавить("Опт");
Элементы.Вариант.СписокВыбора.Добавить("Розница");
КонецПроцедуры
Массовое обновление данных в справочниках и документах
Второй смысл запроса — не «перечитать» список, а изменить в нём много записей сразу. Например, проставить новую ставку НДС всей номенклатуре группы или сменить ответственного у сотни контрагентов.
Групповое изменение из формы списка
В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) это делается без программиста:
- Откройте список, например
Справочники → Товары и услуги → Номенклатурав Бухгалтерии. - Выделите строки:
Ctrl+ щелчок по нужным илиCtrl+Aдля всех видимых. - В меню
Ещёвыберите команду «Изменить выделенные». - В открывшейся обработке отметьте реквизит, задайте новое значение и нажмите «Изменить реквизиты».
Та же обработка доступна отдельно: Администрирование → Обслуживание → Корректировка данных → Групповое изменение реквизитов. Там можно выбрать вид объектов и задать отбор без открытия списка.
Перед массовым изменением сделайте резервную копию базы — откатить сотни правок кнопкой «Отменить» нельзя.
Изменение через запрос и запись объектов
Запросом в 1С данные только читают — команды UPDATE в языке запросов нет. Схема такая: запрос отбирает ссылки, а код получает объект и записывает его.
&НаСервере
Процедура ЗаменитьСтавкуНДС(Группа, НоваяСтавка)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Ссылка В ИЕРАРХИИ(&Группа)
| И НЕ Номенклатура.ЭтоГруппа";
Запрос.УстановитьПараметр("Группа", Группа);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Объект = Выборка.Ссылка.ПолучитьОбъект();
Объект.СтавкаНДС = НоваяСтавка;
Объект.Записать();
КонецЦикла;
КонецПроцедуры
Имя реквизита СтавкаНДС здесь условное: проверьте точное имя в вашей конфигурации. После такой процедуры вызовите на клиенте ОповеститьОбИзменении(Тип("СправочникСсылка.Номенклатура")), чтобы открытые списки показали результат.
Свойство ОбменДанными.Загрузка = Истина ускоряет запись, но отключает проверки и подписки на события. Для рабочей базы это риск получить объекты в несогласованном состоянии. Используйте его только когда точно понимаете, какие обработчики пропускаете.
Обновление регистров сведений и накопления
С регистрами правило другое: способ обновления зависит от того, подчинён ли регистр регистратору.
| Регистр | Как обновить данные | Через что |
|---|---|---|
| Сведений, независимый | Правка записей в форме списка или кодом через набор записей | Форма регистра, обработка |
| Сведений, подчинён регистратору | Перепроведение документа-регистратора | Документ |
| Накопления | Только перепроведение документов | Документ или групповое перепроведение |
| Итоги регистров | Пересчёт итогов | «Управление итогами» или Конфигуратор |
Независимый регистр сведений
Такой регистр (например, курсы валют или цены, если они хранятся без регистратора) правят набором записей:
&НаСервере
Процедура ОбновитьЗапись(Период, Валюта, Курс)
Набор = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
Набор.Отбор.Период.Установить(Период);
Набор.Отбор.Валюта.Установить(Валюта);
Запись = Набор.Добавить();
Запись.Период = Период;
Запись.Валюта = Валюта;
Запись.Курс = Курс;
Набор.Записать(); // заменит записи по отбору
КонецПроцедуры
Метод Записать() без параметров заменяет все записи, попавшие под отбор. Если отбор не установить, набор перезапишет весь регистр — проверьте код на копии базы.
Регистры накопления
Движения регистров накопления руками не правят. Источник правды — документ. Если остатки «поехали», перепроведите документы за период. В типовых конфигурациях есть обработка группового перепроведения: найдите её поиском по слову «перепроведение» в меню Все функции → Обработки (в новых релизах платформы этот пункт называется «Функции для технического специалиста»).
Если команда «Все функции» не видна, включите её: главное меню (кнопка с тремя полосками) → Сервис → Параметры → флажок отображения команды.
Пересчёт итогов
Когда документы в порядке, а отчёты по остаткам показывают странные цифры, помогает пересчёт итогов:
- 🧮 в режиме 1С:Предприятие:
Все функции → Стандартные → Управление итогами, вкладка с пересчётом; - 🛠 в Конфигураторе:
Администрирование → Тестирование и исправление, флажок «Пересчёт итогов».
Пересчёт итогов на большой базе нагружает сервер. Запускайте его вечером. Тестирование и исправление требует монопольного доступа: предупредите пользователей — их сеансы придётся завершить.
Автоматическое обновление списков
Нажимать F5 весь день неудобно, если вы, например, диспетчер и следите за входящими заказами.
Свойство «Автообновление» динамического списка
В Конфигураторе откройте форму списка, выделите элемент таблицы и в палитре свойств найдите флажок «Автообновление» и поле «Период автообновления» (в секундах). Тот же эффект в коде:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Элементы.Список.Автообновление = Истина;
Элементы.Список.ПериодАвтообновления = 60;
КонецПроцедуры
Для типовой конфигурации на поддержке так лучше не делать: правка формы снимет объект с поддержки или потребует расширения. Внесите изменение через расширение конфигурации — оно переживёт обновление релиза.
Обработчик ожидания
Если нужно не просто перечитать таблицу, а что-то посчитать перед этим, подключите обработчик ожидания:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ПодключитьОбработчикОжидания("ОбновитьСписокПоТаймеру", 120, Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьСписокПоТаймеру()
Элементы.Список.Обновить();
КонецПроцедуры
Третий параметр Ложь означает, что обработчик повторяется, а не срабатывает один раз.
Не ставьте интервал в несколько секунд на списке с тысячами строк и сложным запросом. Каждое обновление — запрос к базе, а открытых форм у вас может быть пятьдесят.
Регламентные задания
Если данные в список попадают из внешних источников, автоматизируйте саму загрузку: обмены и загрузку курсов настраивают по расписанию. Список задач с расписанием смотрите в Администрирование → Обслуживание → Регламентные и фоновые задания. Тогда автообновление формы просто покажет то, что задание уже записало.
Когда обновление не помогает: ошибки и как их снять
Про /ClearCache: параметр добавляют в строку запуска информационной базы в окне выбора баз (кнопка «Изменить», дополнительные параметры запуска). Сеансы других пользователей он не трогает, очищается только кэш на вашем компьютере.
Если поиск по ключевому слову в списке нашёл элемент, а пролистыванием вы его не видите, почти всегда виновата сортировка. Например, список отсортирован по дате изменения, и новый элемент ушёл в самый конец.