Команда «Перечитать» в формах 1С 8.3: зачем она нужна и чем отличается от «Обновить»

· 9 мин

Содержание

«Перечитать» в 1С — это команда формы документа или элемента справочника, которая заново загружает объект из информационной базы и выбрасывает всё, что вы изменили в открытой форме, но не записали. Найти её можно в командной панели формы объекта: Ещё → Перечитать. Команда есть во всех типовых конфигурациях на 8.3 — Бухгалтерии 3.0, ЗУП 3.1, УТ 11, потому что её даёт сама платформа, а не конкретная программа.

Проще говоря, перечитать — значит показать в форме ту версию документа, которая сейчас лежит в базе. Это нужно, когда документ поменял кто-то другой, когда вы запутались в правках и хотите вернуться к записанному варианту, или когда программа отказывается записывать объект из-за конфликта версий.

Что происходит при нажатии «Перечитать»

Когда вы открываете документ, платформа копирует его данные из базы в форму. Дальше вы работаете с этой копией. Пока вы не нажали «Записать» или «Провести», база о ваших правках ничего не знает.

Команда «Перечитать» делает три вещи:

  • 📥 заново читает объект из базы — шапку, табличные части, реквизиты;
  • 🗑️ отбрасывает несохранённые изменения в форме;
  • 🔄 перерисовывает форму по свежим данным, включая доступность полей и подписи, которые зависят от значений.

Если в форме есть несохранённые правки, программа сначала спросит подтверждение. Ответите «Да» — правки пропадут без возможности вернуть. Отменить перечитывание нельзя: «Ctrl+Z» здесь не поможет.

У нового, ни разу не записанного документа команда неактивна. Читать из базы пока нечего — объекта там ещё нет.

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

Что именно обновится, а что нет

ОбновитсяНе обновится
Реквизиты шапки и табличных частейСписки в других открытых окнах
Пометка удаления и признак проведенияОтчёты, сформированные ранее
Номер и дата, если их поменяли в базеНастройки программы, закэшированные в сеансе
Поля, которые программа считает при чтенииИзменения конфигурации после обновления

Пять ситуаций, когда документ нужно перечитать

Команду редко нажимают «на всякий случай». Обычно за ней стоит конкретный повод.

1. Документ изменил другой пользователь

Вы открыли реализацию утром и оставили окно на экране. Днём коллега поменял в ней цену и перепровёл. В вашей форме всё ещё старая цена. Перечитайте документ — увидите актуальную версию.

2. Данные поменяла обработка или обмен

Групповое изменение реквизитов, загрузка из банка, обмен с другой базой или регламентное задание меняют объекты в базе напрямую. Открытая форма этих изменений не видит. Перечитывание подтягивает их.

3. Вы запутались в правках

Поменяли контрагента, удалили три строки из табличной части, пересчитали суммы — и поняли, что всё испортили. Закрывать форму без записи и открывать заново долго. «Перечитать» возвращает записанный вариант за одно нажатие.

4. Запись отклонена из-за конфликта версий

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

5. Документ провели из списка

Вы открыли документ, а потом в списке выделили его и нажали «Провести» (или это сделал коллега). Форма показывает документ как непроведённый. Перечитайте её, чтобы увидеть правильный статус и не провести документ повторно с устаревшими данными.

Что случилось с открытым документом?

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

Эти действия путают, потому что все они «освежают» картинку. Но работают они на разных уровнях.

ДействиеГде находитсяЧто делаетНесохранённые правки
ПеречитатьФорма документа или элемента, меню «Ещё»Загружает один объект из базы зановоТеряются, с подтверждением
ОбновитьФорма списка (журнал документов, справочник)Перезапрашивает строки спискаПравок в списке нет
Закрыть и открыть формуЛюбая формаСоздаёт форму с нуля, со всеми настройкамиПрограмма предложит записать
Перезапуск программыВесь сеансНовый сеанс, свежая конфигурация и кэшНужно записать всё заранее

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

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

Если вы ждёте, что изменения коллеги сами появятся в журнале документов, — не появятся. Список обновляется автоматически только после записи в вашем же сеансе. Изменения из других сеансов видны после команды «Обновить».

Конфликт версий и блокировка: где перечитывание помогает

Чаще всего про «Перечитать» вспоминают, когда документ не записывается. Платформа защищает объекты от одновременной правки двумя способами.

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

Проверка версии при записи. У каждого объекта в базе есть версия данных. Она меняется при каждой записи. Когда вы нажимаете «Записать», платформа сравнивает версию из вашей формы с версией в базе. Не совпали — запись отклоняется.

Типичный сценарий второго случая:

  1. Вы открыли документ, но ничего не меняли — блокировки нет.
  2. Обработка или обмен записали этот документ в фоне.
  3. Вы внесли правку и нажали «Записать».
  4. Платформа видит, что версия в базе новее, и отказывает.

Решение — перечитать документ и внести правку заново. Если правок много, сначала сохраните их вне формы: выпишите значения или скопируйте табличную часть через буфер в Excel.

Как узнать, кто изменил документ

Перед тем как вносить правку заново, полезно понять, что именно поменялось и кем. Для этого есть журнал регистрации. В Бухгалтерии 3.0 и ЗУП 3.1 он открывается через Администрирование → Обслуживание → Журнал регистрации.

  1. Установите отбор по интервалу времени — например, последний час.
  2. В отборе по данным укажите сам документ.
  3. Посмотрите события записи: в них видно пользователя, компьютер и время.

Если документ записывал не человек, а обмен или регламентное задание, это тоже будет видно в колонке пользователя или приложения. Так проще договориться с коллегой или найти обработку, которая перезаписывает ваши документы.

Не пытайтесь «продавить» запись, создав копию документа и проведя её вместо исходного. Получится задвоение движений: и выручка, и списание товаров попадут в учёт дважды. Если копию уже провели — отмените её проведение и пометьте на удаление.

Чего перечитывание не исправит

Команда работает только с данными одного объекта. Есть проблемы, где её нажимают зря.

  • ❌ Новые реквизиты после обновления конфигурации. Структура формы загружается при старте сеанса. Нужен перезапуск программы.
  • ❌ Устаревшие настройки и константы. Типовые конфигурации кэшируют часть настроек на время сеанса. Поменяли учётную политику или функциональность — перезапустите программу, если поведение форм не изменилось.
  • ❌ Неправильные остатки в отчёте. Отчёт — это снимок на момент формирования. Нажмите «Сформировать» ещё раз.
  • ❌ Кривые проводки. Перечитывание не перепроводит документ. Если движения неверны, исправьте данные и проведите документ заново.
  • ❌ Зависшая форма. Если форма не отвечает, команда до неё не дойдёт. Тут помогает только ожидание или завершение сеанса.

Как перечитать данные программно

Разработчику перечитывание нужно, когда объект меняется на сервере в обход формы: фоновым заданием, обработкой, вызовом другого модуля. Есть несколько инструментов, и путать их не стоит.

Перечитать форму объекта

У формы с основным реквизитом-объектом есть метод Прочитать(). Он делает то же, что стандартная команда, но без вопроса пользователю. Поэтому проверку несохранённых правок пишут сами:

&НаКлиенте
Процедура ОбновитьИзБазы(Команда)
	Если Модифицированность Тогда
		Оповещение = Новый ОписаниеОповещения("ОбновитьИзБазыЗавершение", ЭтотОбъект);
		ПоказатьВопрос(Оповещение, "Несохранённые изменения будут потеряны. Продолжить?",
			РежимДиалогаВопрос.ДаНет);
	Иначе
		Прочитать();
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьИзБазыЗавершение(Ответ, ДополнительныеПараметры) Экспорт
	Если Ответ = КодВозвратаДиалога.Да Тогда
		Прочитать();
	КонецЕсли;
КонецПроцедуры

При перечитывании платформа снова вызывает обработчик формы ПриЧтенииНаСервере. А вот ПриСозданииНаСервере повторно не выполняется. Если в нём заполняются поля, зависящие от данных объекта, вынесите эту логику в отдельную процедуру и вызывайте её из обоих обработчиков. Иначе после перечитывания часть формы останется со старыми значениями.

Перечитать объект на сервере

У объектов справочников и документов есть свой метод Прочитать(). Он загружает в уже полученный объект свежие данные из базы:

&НаСервере
Процедура ПересчитатьИОбновитьФорму()
	ДокОбъект = РеквизитФормыВЗначение("Объект");
	// ... здесь объект меняется в базе другим модулем ...
	ДокОбъект.Прочитать();
	ЗначениеВРеквизитФормы(ДокОбъект, "Объект");
	Модифицированность = Ложь;
КонецПроцедуры

Это пригодится в длинной обработке: вы получили объект, вызвали код, который записал его по-своему, и хотите продолжить работу с актуальной версией, а не со своей устаревшей копией.

Обновить списки

Динамический список перечитывают методом элемента формы:

Элементы.Список.Обновить();

Если объект записан программно с сервера, открытые списки об этом не узнают. Сообщите им с клиента:

ОповеститьОбИзменении(ДокументСсылка);

Все открытые списки, где отображается этот документ, обновятся сами. Для журналов, которые должны показывать чужие изменения без участия пользователя, у таблицы динамического списка можно включить автообновление и задать период в секундах. Слишком короткий период нагружает сервер: на большой базе ставьте не меньше 60 секунд.

ЗадачаИнструмент
Сбросить правки в форме объектаметод формы Прочитать()
Получить свежую версию объекта на сервереметод объекта Прочитать()
Обновить один список в своей формеЭлементы.Список.Обновить()
Обновить все открытые списки после записиОповеститьОбИзменении(Ссылка)
Сбросить кэш повторно используемых модулейОбновитьПовторноИспользуемыеЗначения()

Частые ошибки при перечитывании

  • ⚠️ Перечитали, не сохранив свои правки. Табличная часть на 200 строк пропала, восстановить её нечем. Если правки нужны — сначала выгрузите табличную часть в Excel через буфер обмена или выпишите значения, а потом перечитывайте.
  • ⚠️ Перечитали форму, а ждали изменений в журнале. Журнал документов живёт отдельно. Его обновляют своей командой.
  • ⚠️ Вызвали Прочитать() в коде без проверки Модифицированность. Пользователь теряет правки молча, без вопроса. Для команды, которую нажимает человек, проверка обязательна.
  • ⚠️ Перечитывают каждые пять минут «для надёжности». Если документы постоянно расходятся с базой, ищите причину: обмен, регламентное задание или двух сотрудников, которые ведут один и тот же участок.

Частые вопросы

Можно ли вернуть данные после перечитывания?
Нет. Несохранённые правки существуют только в форме, и перечитывание их стирает. Если в программе включено версионирование объектов, можно посмотреть прошлые записанные версии, но не те, что вы так и не записали.
Почему команды «Перечитать» нет в меню «Ещё»?
Скорее всего, открыт новый документ, который ещё не записан, или форма списка, а не объекта. Ещё вариант — разработчик скрыл команду в доработанной форме. Тогда закройте форму без записи и откройте снова.
Перечитывание снимает проведение документа?
Нет. Команда только показывает состояние из базы. Если документ проведён, после перечитывания он останется проведённым.
Нужно ли перечитывать документ после записи в своей же форме?
Нет. После записи или проведения форма сама получает актуальную версию из базы. Перечитывание нужно, только если объект менял кто-то ещё.
Работает ли «Перечитать» в веб-клиенте и в облаке?
Да. Это стандартная команда платформы, она одинаково ведёт себя в тонком клиенте, веб-клиенте и при работе через 1С:Фреш.