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

Администрирование · 10 мин

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

Что означает «перечитать» в 1С: обновление данных объекта из базы, команда F5, метод Прочитать(), перечитывание движений документа. Разбор сценариев и ошибок.

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

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

Ниже разобраны все основные ситуации, где возникает необходимость перечитать данные, что при этом происходит технически, какие риски существуют и как проверить результат.

Что технически происходит при перечитывании

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

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

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

Перечитать в пользовательском режиме: формы и списки

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

  • клавиша F5 — обновляет данные текущей формы (списка или объекта);
  • команда «Ещё → Перечитать» в форме объекта — заново считывает именно этот документ или элемент справочника.

В динамических списках (журналы документов, списки справочников) обновление показывает новые записи, изменённые реквизиты и пометки удаления, сделанные другими пользователями. В форме объекта перечитывание подтягивает изменения конкретного элемента — например, если бухгалтер в соседнем офисе исправил сумму в том же счёте.

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

Сообщение «Объект изменён. Перечитать?»

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

Что выбрать в диалоге

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

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

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

Как выбрать действие при конфликте версий

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

Перечитать в коде: метод Прочитать()

Для разработчиков и при работе с обработками «перечитать» означает вызов метода Прочитать() у объекта встроенного языка. Метод заново загружает данные из базы в объектную переменную:

ДокОбъект = ДокументСсылка.ПолучитьОбъект();

// ... какие-то действия, объект мог быть изменён другим сеансом

ДокОбъект.Прочитать(); // перечитываем актуальную версию из базы

Типичные сценарии, когда это необходимо:

  • длительная обработка, во время которой объект мог измениться — перед записью объект перечитывают, чтобы не затереть чужие изменения;
  • проверка актуального состояния объекта после действий других сеансов или фоновых заданий;
  • откат нежелательных изменений в объекте: если данные объекта в памяти испорчены, но ещё не записаны, Прочитать() вернёт его к состоянию в базе.
bsl
Если ДокОбъект.Модифицированность() Тогда
    ДокОбъект.Прочитать(); // отменяем изменения в памяти
КонецЕсли;

Важно: у формы объекта есть собственный метод Прочитать() (доступен как метод управляемой формы), который перечитывает данные в форму. Это программный аналог кнопки «Перечитать» в интерфейсе — он тоже сбрасывает несохранённые изменения в форме и вызывает событие «ПриЧтенииНаСервере».

Перечитать движения и данные регистров

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

Для наборов записей регистров метод Прочитать() загружает актуальные записи из базы в набор. Это используется в обработках свёртки, исправления движений и при ручной корректировке регистров: сначала набор перечитывается, затем изменяется и записывается с замещением.

Перечитывание при обменах и фоновых заданиях

При обменах данными (с сайтом, между базами 1С, с ЕГАИС и другими системами) фраза «перечитать данные» часто означает повторную загрузку уже полученного пакета. Это делается, когда при первой загрузке произошла ошибка, данные загрузились частично или настройки сопоставления были изменены.

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

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

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

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

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

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

Данные в форме после перечитывания
Норма

Отображаются значения, которые видят другие пользователи

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

Данные не изменились, хотя известно, что объект правили — возможно, изменения не были записаны

Модифицированность формы
Норма

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

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

Форма всё ещё показывает несохранённые изменения — перечитывание не выполнено

Отсутствие конфликтов при записи
Норма

Объект записывается без сообщения о смене версии

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

Сообщение о конфликте появляется снова — объект продолжает изменяться извне

Когда перечитывать не нужно

Не стоит перечитывать данные «на всякий случай» при каждом сомнении. Если вы единственный пользователь базы, никакие обмены не настроены и конфликтов версий не возникает, данные в форме и так актуальны. Лишние обращения к базе в клиент-серверном режиме создают нагрузку, а в коде — замедляют обработки.

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

Итог

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

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

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

Что произойдёт с моими несохранёнными данными при перечитывании?

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

Чем «перечитать» отличается от «перепровести» документ?

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

Почему после F5 в списке не появился новый документ коллеги?

Возможные причины: коллега создал документ, но не записал его; в списке установлен отбор, под который документ не попадает; у вас нет прав на просмотр этого вида документов. Проверьте отборы списка и права доступа.

Что делать, если сообщение «Объект изменён» появляется постоянно?

Скорее всего, объект регулярно изменяется фоновым заданием или обменом данными. Откройте журнал регистрации, найдите, какой сеанс изменяет объект, и скорректируйте расписание или логику этого процесса.

Можно ли перечитать сразу несколько документов?

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

Опасно ли перечитывать данные в рабочей базе?

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