Команда «Перечитать» в формах 1С 8.3: зачем она нужна и чем отличается от «Обновить»
Содержание
«Перечитать» в 1С — это команда формы документа или элемента справочника, которая заново загружает объект из информационной базы и выбрасывает всё, что вы изменили в открытой форме, но не записали. Найти её можно в командной панели формы объекта: Ещё → Перечитать. Команда есть во всех типовых конфигурациях на 8.3 — Бухгалтерии 3.0, ЗУП 3.1, УТ 11, потому что её даёт сама платформа, а не конкретная программа.
Проще говоря, перечитать — значит показать в форме ту версию документа, которая сейчас лежит в базе. Это нужно, когда документ поменял кто-то другой, когда вы запутались в правках и хотите вернуться к записанному варианту, или когда программа отказывается записывать объект из-за конфликта версий.
Что происходит при нажатии «Перечитать»
Когда вы открываете документ, платформа копирует его данные из базы в форму. Дальше вы работаете с этой копией. Пока вы не нажали «Записать» или «Провести», база о ваших правках ничего не знает.
Команда «Перечитать» делает три вещи:
- 📥 заново читает объект из базы — шапку, табличные части, реквизиты;
- 🗑️ отбрасывает несохранённые изменения в форме;
- 🔄 перерисовывает форму по свежим данным, включая доступность полей и подписи, которые зависят от значений.
Если в форме есть несохранённые правки, программа сначала спросит подтверждение. Ответите «Да» — правки пропадут без возможности вернуть. Отменить перечитывание нельзя: «Ctrl+Z» здесь не поможет.
У нового, ни разу не записанного документа команда неактивна. Читать из базы пока нечего — объекта там ещё нет.
Перечитывание не закрывает форму и не меняет ничего в базе. Это безопасная операция для данных: она затрагивает только то, что вы видите на экране.
Что именно обновится, а что нет
| Обновится | Не обновится |
|---|---|
| Реквизиты шапки и табличных частей | Списки в других открытых окнах |
| Пометка удаления и признак проведения | Отчёты, сформированные ранее |
| Номер и дата, если их поменяли в базе | Настройки программы, закэшированные в сеансе |
| Поля, которые программа считает при чтении | Изменения конфигурации после обновления |
Пять ситуаций, когда документ нужно перечитать
Команду редко нажимают «на всякий случай». Обычно за ней стоит конкретный повод.
1. Документ изменил другой пользователь
Вы открыли реализацию утром и оставили окно на экране. Днём коллега поменял в ней цену и перепровёл. В вашей форме всё ещё старая цена. Перечитайте документ — увидите актуальную версию.
2. Данные поменяла обработка или обмен
Групповое изменение реквизитов, загрузка из банка, обмен с другой базой или регламентное задание меняют объекты в базе напрямую. Открытая форма этих изменений не видит. Перечитывание подтягивает их.
3. Вы запутались в правках
Поменяли контрагента, удалили три строки из табличной части, пересчитали суммы — и поняли, что всё испортили. Закрывать форму без записи и открывать заново долго. «Перечитать» возвращает записанный вариант за одно нажатие.
4. Запись отклонена из-за конфликта версий
Программа отказалась записывать документ и сообщила, что объект был изменён или удалён другим пользователем. Это значит, что версия в базе новее вашей копии. Без перечитывания такой документ не записать.
5. Документ провели из списка
Вы открыли документ, а потом в списке выделили его и нажали «Провести» (или это сделал коллега). Форма показывает документ как непроведённый. Перечитайте её, чтобы увидеть правильный статус и не провести документ повторно с устаревшими данными.
Ещё → Перечитать и подтвердите. Несохранённые правки пропадут, в форме окажется версия из базы.Чем «Перечитать» отличается от «Обновить» и повторного открытия
Эти действия путают, потому что все они «освежают» картинку. Но работают они на разных уровнях.
| Действие | Где находится | Что делает | Несохранённые правки |
|---|---|---|---|
| Перечитать | Форма документа или элемента, меню «Ещё» | Загружает один объект из базы заново | Теряются, с подтверждением |
| Обновить | Форма списка (журнал документов, справочник) | Перезапрашивает строки списка | Правок в списке нет |
| Закрыть и открыть форму | Любая форма | Создаёт форму с нуля, со всеми настройками | Программа предложит записать |
| Перезапуск программы | Весь сеанс | Новый сеанс, свежая конфигурация и кэш | Нужно записать всё заранее |
Главное различие: «Обновить» работает со списком, «Перечитать» — с одним объектом. Обновлённый журнал документов не меняет уже открытую форму документа, и наоборот.
Повторное открытие формы делает больше, чем перечитывание. Форма создаётся заново, программа выполняет всю логику подготовки: заполняет служебные поля, применяет настройки пользователя. Если после перечитывания форма выглядит странно — например, не пересчитались подсказки, — закройте её и откройте снова.
Если вы ждёте, что изменения коллеги сами появятся в журнале документов, — не появятся. Список обновляется автоматически только после записи в вашем же сеансе. Изменения из других сеансов видны после команды «Обновить».
Конфликт версий и блокировка: где перечитывание помогает
Чаще всего про «Перечитать» вспоминают, когда документ не записывается. Платформа защищает объекты от одновременной правки двумя способами.
Блокировка при редактировании. Как только вы начали менять документ в форме, платформа блокирует его для других сеансов. Коллега, открывший тот же документ, при попытке что-то изменить получит сообщение, что объект заблокирован. Перечитывание здесь не нужно: дождитесь, пока первый пользователь запишет документ или закроет форму.
Проверка версии при записи. У каждого объекта в базе есть версия данных. Она меняется при каждой записи. Когда вы нажимаете «Записать», платформа сравнивает версию из вашей формы с версией в базе. Не совпали — запись отклоняется.
Типичный сценарий второго случая:
- Вы открыли документ, но ничего не меняли — блокировки нет.
- Обработка или обмен записали этот документ в фоне.
- Вы внесли правку и нажали «Записать».
- Платформа видит, что версия в базе новее, и отказывает.
Решение — перечитать документ и внести правку заново. Если правок много, сначала сохраните их вне формы: выпишите значения или скопируйте табличную часть через буфер в Excel.
Как узнать, кто изменил документ
Перед тем как вносить правку заново, полезно понять, что именно поменялось и кем. Для этого есть журнал регистрации. В Бухгалтерии 3.0 и ЗУП 3.1 он открывается через Администрирование → Обслуживание → Журнал регистрации.
- Установите отбор по интервалу времени — например, последний час.
- В отборе по данным укажите сам документ.
- Посмотрите события записи: в них видно пользователя, компьютер и время.
Если документ записывал не человек, а обмен или регламентное задание, это тоже будет видно в колонке пользователя или приложения. Так проще договориться с коллегой или найти обработку, которая перезаписывает ваши документы.
Не пытайтесь «продавить» запись, создав копию документа и проведя её вместо исходного. Получится задвоение движений: и выручка, и списание товаров попадут в учёт дважды. Если копию уже провели — отмените её проведение и пометьте на удаление.
Чего перечитывание не исправит
Команда работает только с данными одного объекта. Есть проблемы, где её нажимают зря.
- ❌ Новые реквизиты после обновления конфигурации. Структура формы загружается при старте сеанса. Нужен перезапуск программы.
- ❌ Устаревшие настройки и константы. Типовые конфигурации кэшируют часть настроек на время сеанса. Поменяли учётную политику или функциональность — перезапустите программу, если поведение форм не изменилось.
- ❌ Неправильные остатки в отчёте. Отчёт — это снимок на момент формирования. Нажмите «Сформировать» ещё раз.
- ❌ Кривые проводки. Перечитывание не перепроводит документ. Если движения неверны, исправьте данные и проведите документ заново.
- ❌ Зависшая форма. Если форма не отвечает, команда до неё не дойдёт. Тут помогает только ожидание или завершение сеанса.
Как перечитать данные программно
Разработчику перечитывание нужно, когда объект меняется на сервере в обход формы: фоновым заданием, обработкой, вызовом другого модуля. Есть несколько инструментов, и путать их не стоит.
Перечитать форму объекта
У формы с основным реквизитом-объектом есть метод Прочитать(). Он делает то же, что стандартная команда, но без вопроса пользователю. Поэтому проверку несохранённых правок пишут сами:
&НаКлиенте
Процедура ОбновитьИзБазы(Команда)
Если Модифицированность Тогда
Оповещение = Новый ОписаниеОповещения("ОбновитьИзБазыЗавершение", ЭтотОбъект);
ПоказатьВопрос(Оповещение, "Несохранённые изменения будут потеряны. Продолжить?",
РежимДиалогаВопрос.ДаНет);
Иначе
Прочитать();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьИзБазыЗавершение(Ответ, ДополнительныеПараметры) Экспорт
Если Ответ = КодВозвратаДиалога.Да Тогда
Прочитать();
КонецЕсли;
КонецПроцедуры
При перечитывании платформа снова вызывает обработчик формы ПриЧтенииНаСервере. А вот ПриСозданииНаСервере повторно не выполняется. Если в нём заполняются поля, зависящие от данных объекта, вынесите эту логику в отдельную процедуру и вызывайте её из обоих обработчиков. Иначе после перечитывания часть формы останется со старыми значениями.
Перечитать объект на сервере
У объектов справочников и документов есть свой метод Прочитать(). Он загружает в уже полученный объект свежие данные из базы:
&НаСервере
Процедура ПересчитатьИОбновитьФорму()
ДокОбъект = РеквизитФормыВЗначение("Объект");
// ... здесь объект меняется в базе другим модулем ...
ДокОбъект.Прочитать();
ЗначениеВРеквизитФормы(ДокОбъект, "Объект");
Модифицированность = Ложь;
КонецПроцедуры
Это пригодится в длинной обработке: вы получили объект, вызвали код, который записал его по-своему, и хотите продолжить работу с актуальной версией, а не со своей устаревшей копией.
Обновить списки
Динамический список перечитывают методом элемента формы:
Элементы.Список.Обновить();
Если объект записан программно с сервера, открытые списки об этом не узнают. Сообщите им с клиента:
ОповеститьОбИзменении(ДокументСсылка);
Все открытые списки, где отображается этот документ, обновятся сами. Для журналов, которые должны показывать чужие изменения без участия пользователя, у таблицы динамического списка можно включить автообновление и задать период в секундах. Слишком короткий период нагружает сервер: на большой базе ставьте не меньше 60 секунд.
| Задача | Инструмент |
|---|---|
| Сбросить правки в форме объекта | метод формы Прочитать() |
| Получить свежую версию объекта на сервере | метод объекта Прочитать() |
| Обновить один список в своей форме | Элементы.Список.Обновить() |
| Обновить все открытые списки после записи | ОповеститьОбИзменении(Ссылка) |
| Сбросить кэш повторно используемых модулей | ОбновитьПовторноИспользуемыеЗначения() |
Частые ошибки при перечитывании
- ⚠️ Перечитали, не сохранив свои правки. Табличная часть на 200 строк пропала, восстановить её нечем. Если правки нужны — сначала выгрузите табличную часть в Excel через буфер обмена или выпишите значения, а потом перечитывайте.
- ⚠️ Перечитали форму, а ждали изменений в журнале. Журнал документов живёт отдельно. Его обновляют своей командой.
- ⚠️ Вызвали
Прочитать()в коде без проверкиМодифицированность. Пользователь теряет правки молча, без вопроса. Для команды, которую нажимает человек, проверка обязательна. - ⚠️ Перечитывают каждые пять минут «для надёжности». Если документы постоянно расходятся с базой, ищите причину: обмен, регламентное задание или двух сотрудников, которые ведут один и тот же участок.