К статье
Практический материал

Быстрый старт · 10 мин

Что такое «перечитать данные» в 1С и когда это нужно

Что означает «перечитать данные» в 1С, когда нужно обновлять объект, как это сделать кнопкой, клавишей или кодом и какие риски есть при несохранённых изменениях.

«Перечитать данные» в 1С — это операция повторной загрузки объекта из информационной базы в открытую форму. Когда вы открываете документ, элемент справочника или запись регистра, программа показывает снимок данных на момент открытия. Если после этого кто-то (или что-то) изменил объект в базе, форма об этом не узнает автоматически — чтобы увидеть актуальное состояние, объект нужно перечитать.

Операция встречается в двух контекстах. Первый — пользовательский: кнопка «Ещё → Перечитать» в форме объекта или обновление списка клавишей F5. Второй — программный: метод Прочитать() встроенного языка, который загружает объект из базы в память. Оба варианта решают одну задачу — синхронизировать то, что вы видите, с тем, что реально хранится в базе.

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

Зачем нужно перечитывать данные

1С работает в многопользовательском режиме: одновременно с базой могут работать десятки сотрудников, фоновые задания, обмены с другими системами. Открытая у вас форма — это не «живое окно» в базу, а копия данных, сделанная в момент открытия. Пока вы заполняете документ, бухгалтер мог провести его иначе, а менеджер — изменить контрагента.

Типичные ситуации, когда требуется перечитать объект:

  • появилось сообщение «Данные были изменены другим пользователем» при попытке записи;
  • вы знаете, что коллега или обмен данными только что обновил объект, и хотите увидеть изменения;
  • фоновое задание заполнило документ, а форма открыта с устаревшими данными;
  • после отмены проведения или внешней обработки нужно вернуть форму к состоянию базы.

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

Как перечитать объект в пользовательском режиме

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

Для динамических списков (журналы документов, списки справочников) действует другая механика: там данные обновляются клавишей F5 или командой «Обновить» в меню «Ещё». Это не перечитывание конкретного объекта, а повторное выполнение запроса списка — состав строк и значения колонок приводятся в соответствие с базой.

Как перечитать объект в форме
  1. 1
    Откройте нужный документ или элемент справочника.
  2. 2
    Если вносили правки, решите: записать объект или отказаться от изменений.
  3. 3
    Откройте меню «Ещё» в командной панели формы.
  4. 4
    Выберите команду «Перечитать».
  5. 5
    При появлении вопроса о потере изменений подтвердите действие.
  6. 6
    Проверьте, что форма показывает актуальные данные из базы.

Некоторые конфигурации выводят команду обновления прямо на панель списка в виде круглой стрелки. Функционально это то же самое, что F5.

Программное перечитывание: метод Прочитать()

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

bsl
ДокументОбъект = ДокументСсылка.ПолучитьОбъект();
ДокументОбъект.Прочитать(); // загружаем актуальную версию из базы
// теперь можно безопасно изменять и записывать
ДокументОбъект.Комментарий = "Обновлено обработкой";
ДокументОбъект.Записать();

Типовой сценарий — обработка конфликта версий. Если между получением объекта и записью кто-то успел его изменить, метод Записать() выдаст ошибку «Конфликт блокировок» или запись пройдёт поверх чужих правок. Правильная последовательность: перечитать объект, заново применить свои изменения, затем записать.

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

Что происходит с несохранёнными изменениями

Главный риск перечитывания — потеря введённых, но не записанных данных. Форма объекта хранит ваши правки в памяти до нажатия «Записать» или «Провести». Команда «Перечитать» полностью заменяет содержимое формы версией из базы, где ваших правок ещё нет. Откатить это действие нельзя: команда «Отменить» (Ctrl+Z) в этом случае не сработает.

Поэтому при появлении сообщения о конфликте «Данные были изменены другим пользователем» не спешите перечитывать. Сначала оцените свои изменения: если они ценные, скопируйте важные значения (например, текст комментария или табличную часть) во временное место, перечитайте объект и внесите правки заново поверх актуальной версии.

Перечитывание и блокировки: как связаны

При открытии формы объекта 1С в клиент-серверном режиме может установить управляемую блокировку данных, чтобы другие пользователи не изменили объект, пока вы с ним работаете. Если блокировку удержать не удалось (объект уже занят), при записи возникнет конфликт. Перечитывание в этой схеме — способ выйти из конфликта: вы принимаете чужую версию как основу и вносите свои правки поверх неё.

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

Маршрут решения

Как выбрать действие

Появилось сообщение, что данные изменены другим пользователем, а ваших правок малоПеречитайте объект и внесите правки заново поверх актуальной версии
Ваших несохранённых правок много и они важныСкопируйте значения во временное место, перечитайте объект, затем перенесите правки обратно
Список показывает устаревшие строки после работы коллегНажмите F5 или «Ещё → Обновить» — перечитывать отдельный объект не требуется
Ошибка конфликта версий возникает в коде обработкиДобавьте Прочитать() перед повторной записью и примените изменения заново

Типичные ошибки и как их избежать

Большинство проблем при перечитывании связаны не с самой командой, а с неверным пониманием момента её применения. Ниже — самые частые ошибки.

Типичные ошибки
01
Перечитывание формы с несохранёнными данными без предварительного копирования — правки теряются безвозвратно.
02
Попытка «обновить» объект закрытием и повторным открытием вместо команды «Перечитать» — дольше, а эффект тот же, плюс снова вопрос о сохранении.
03
Вызов Прочитать() после внесения изменений в объект в коде — изменения затираются данными из базы, запись сохраняет старую версию.
04
Ожидание, что F5 в списке обновит открытую рядом форму объекта — форма и список независимы, объект нужно перечитывать отдельно.
05
Игнорирование сообщения о конфликте и повторная запись без перечитывания — чужие изменения перезаписываются.

Ещё одна ошибка — путать перечитывание с перепроведением. Перечитать документ — значит загрузить его данные; перепровести — заново сформировать движения по регистрам. Это разные операции: перечитывание не меняет данные в базе вообще.

Как проверить, что перечитывание сработало

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

Контрольные точки

Как проверить результат

Значения реквизитов в форме
Норма

Совпадают с данными, которые видит другой пользователь или отчёт

Тревожный признак

Форма показывает прежние значения — перечитывание не выполнялось

Запись объекта после перечитывания
Норма

Запись проходит без сообщения о конфликте версий

Тревожный признак

Снова ошибка «данные изменены» — объект меняется параллельным процессом, найдите источник

Содержимое табличных частей
Норма

Строки соответствуют последней сохранённой версии из базы

Тревожный признак

Видны ваши старые несохранённые строки — объект не был перечитан

Если конфликт повторяется систематически, ищите причину: фоновое задание, обмен данными или обработку, которая изменяет объект параллельно с пользователями. Перечитывание здесь — лишь симптоматическое средство.

Итог

Что важно запомнить

Перечитать данные — загрузить актуальную версию объекта из базы в форму или в память программы. Команда есть в меню «Ещё», для списков работает F5, в коде — метод Прочитать(). Перед перечитыванием сохраните или скопируйте свои правки: несохранённые изменения теряются безвозвратно.

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

Чем «Перечитать» отличается от «Записать»?

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

Есть ли горячая клавиша для перечитывания объекта?

Для формы объекта универсального сочетания в типовых конфигурациях обычно нет — используется меню «Ещё → Перечитать». Клавиша F5 обновляет динамические списки, а не открытую форму объекта.

Можно ли отменить перечитывание и вернуть несохранённые данные?

Нет. После перечитывания форма полностью заменяется версией из базы, и прежнее содержимое не восстанавливается. Поэтому программа и спрашивает подтверждение, если в форме есть изменения.

Почему при записи появляется сообщение «Данные были изменены другим пользователем»?

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

Нужно ли перечитывать объект, если я только что его открыл?

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

Перечитывание влияет на проведение документа?

Нет. Перечитывание только загружает данные в форму и не меняет ни сам документ, ни его движения. Проведение и отмена проведения — отдельные операции записи.