Администрирование · 10 мин
Ошибка 1С «Операция не может быть выполнена, так как данные объекта модифицированы»: причины и решение
Разбираем ошибку 1С «операция не может быть выполнена, так как данные объекта модифицированы»: причины, пошаговое исправление, профилактика и советы для разработчиков.
Ошибка «Операция не может быть выполнена, так как данные объекта модифицированы» — одна из самых частых ситуаций при работе в 1С. Она возникает, когда пользователь пытается записать документ, элемент справочника или другой объект, а платформа обнаруживает: версия объекта в базе данных уже отличается от той, что была прочитана при открытии формы. Проще говоря, пока вы редактировали объект, его успел изменить кто-то другой — другой пользователь, фоновое задание, обмен данными или вы сами во втором окне.
Механизм называется оптимистической блокировкой: платформа не запрещает открывать один объект нескольким пользователям, но при записи сравнивает версию данных. Если версии не совпадают, запись отклоняется, чтобы изменения одного пользователя не затёрли изменения другого. Это защитное поведение, а не сбой программы.
В большинстве случаев проблема решается за минуту без привлечения программиста: достаточно понять, кто или что изменило объект, и корректно перечитать данные. Ниже разобраны типичные причины, порядок действий для пользователя и администратора, а также варианты устранения на уровне кода.
Что означает ошибка и как работает контроль версий в 1С
Каждый объект в базе 1С (документ, элемент справочника, запись регистра сведений) имеет внутренний признак версии. Когда вы открываете форму, платформа запоминает текущую версию. При записи она сравнивает запомненную версию с актуальной в базе. Совпали — запись проходит. Не совпали — вы получаете сообщение о модифицированных данных.
Такой подход называется оптимистической блокировкой и отличается от пессимистической, когда объект блокируется сразу при открытии. Оптимистическая модель позволяет десяткам пользователей одновременно открывать одни и те же карточки и документы, не мешая друг другу, — конфликт обнаруживается только в момент записи.
Важно понимать: ошибка не удаляет данные и не повреждает базу. Ваши несохранённые изменения существуют только в открытой форме, а в базе хранится более свежая версия объекта, записанная кем-то другим. Конфликт нужно разрешить вручную — платформа не умеет объединять две версии автоматически.
Типичные причины появления ошибки
Прежде чем исправлять ситуацию, полезно определить источник конфликта. От этого зависит, будет ли ошибка разовой или начнёт повторяться систематически.
- Второй пользователь. Коллега открыл тот же документ или карточку контрагента и записал его раньше вас. Самая частая причина в многопользовательских базах.
- Вы сами во втором окне. Объект открыт в двух окнах или в двух сеансах (например, на компьютере и в терминале), изменения внесены в одном из них.
- Фоновые и регламентные задания. Автоматическое проведение документов, пересчёт итогов, загрузка курсов валют или цен изменяет объекты без участия пользователя.
- Обмен данными. Синхронизация с другой базой, сайтом, мобильным приложением или загрузка из файла обновляет объекты в фоне.
- Проведение связанных документов. Запись одного документа программно изменяет другой (например, заказ при проведении реализации), и открытая форма заказа устаревает.
- Ошибки в доработках. Подписки на события, расширения или внешние обработки, которые записывают объект повторно внутри транзакции.
Перечитайте объект и повторите ввод — проблема не повторится
Проверьте расписание регламентных заданий и настройки синхронизации
Проверьте подписки на события и обработчики записи
Быстрое решение для пользователя
Если вы обычный пользователь и столкнулись с сообщением впервые, действуйте по простой схеме. Главная цель — не потерять свои правки и не затереть чужие.
- 1Не закрывайте форму сразу: выпишите или сфотографируйте внесённые вами изменения (табличные части, комментарии, суммы)
- 2Закройте форму без сохранения — нажмите «Нет» в диалоге сохранения
- 3Откройте объект заново из списка — вы увидите актуальную версию с чужими изменениями
- 4Сравните актуальные данные со своими записями и внесите свои правки повторно
- 5Запишите объект. Если ошибка появилась снова — выясните, кто ещё работает с этим объектом
Если изменений много (большая табличная часть), не спешите закрывать форму. В некоторых конфигурациях можно скопировать строки таблицы в буфер обмена через контекстное меню или вывести таблицу в табличный документ. После перечитывания объекта данные удастся вставить обратно.
После повторной записи убедитесь, что документ провёлся и движения сформировались корректно. Если объект был изменён коллегой, уточните у него смысл правок — возможно, вы редактировали одно и то же по разным основаниям, и нужно договориться о порядке работы.
Диагностика для администратора: кто изменил объект
Когда ошибка повторяется регулярно, нужно найти источник параллельных изменений. Основной инструмент — журнал регистрации: откройте его с отбором по конкретному объекту (например, по номеру документа) и посмотрите, какие сеансы и фоновые задания записывали его в проблемный период.
Полезные места для проверки:
- Активные пользователи (Администрирование → Пользователи → Активные пользователи) — кто сейчас в базе и мог редактировать объект.
- Регламентные и фоновые задания — какие задания выполняются, их расписание и историю ошибок. Задание, запускающееся каждые несколько минут, способно постоянно «перебивать» ручное редактирование.
- Планы обмена — узлы синхронизации, время последней загрузки, очереди сообщений обмена.
- История изменений объекта — если в конфигурации включено версионирование объектов, можно увидеть, кто и что именно менял.
Как выбрать действие
Решение на уровне кода для разработчика
Если ошибка воспроизводится в конкретной операции и связана с доработками, причина почти всегда в том, что объект записывается дважды в рамках одной логики: сначала программно, затем из формы (или наоборот). Типовой сценарий — подписка «ПриЗаписи», которая изменяет и повторно записывает тот же объект, либо расширение, модифицирующее связанный документ, открытый у пользователя.
Основные приёмы устранения:
- Использовать
Объект.Прочитать()перед программной модификацией, чтобы работать с актуальной версией. - Избегать повторной записи объекта в подписках на события; изменения вносить в параметр-источник до записи, а не после.
- При необходимости жёсткого контроля применять управляемые блокировки данных (
БлокировкаДанных) вместо оптимистической модели. - В форме при конфликте вызывать перечитывание:
ЭтотОбъект.Прочитать()или стандартную команду «Перечитать», предупредив пользователя о потере несохранённых правок.
// Актуализировать объект перед изменением
ОбъектДанных = СсылкаНаДокумент.ПолучитьОбъект();
ОбъектДанных.Прочитать();
ОбъектДанных.Комментарий = "Скорректировано";
ОбъектДанных.Записать();При отладке удобно временно включить в журнале регистрации детальный отбор по событию записи данных и воспроизвести ошибку: станет видно, какой сеанс или обработчик записал объект между открытием формы и попыткой сохранения.
Профилактика: как снизить частоту конфликтов
Полностью исключить ситуацию нельзя — это штатный механизм платформы. Но частоту столкновений реально снизить организационными и техническими мерами.
- Разграничьте зоны ответственности: пусть разные менеджеры работают с разными сегментами документов и контрагентов.
- Перенесите тяжёлые регламентные задания и обмены на нерабочее время или увеличьте интервал между запусками.
- Обучите пользователей правилу: открыл объект — внёс правки — записал. Долго держать форму открытой «на всякий случай» не стоит.
- Включите версионирование объектов для ключевых видов документов — это упростит разбор конфликтов.
- Проверьте доработки: одна ошибочная подписка на событие способна генерировать десятки конфликтов в день.
Частые вопросы
Можно ли настроить 1С так, чтобы ошибка вообще не появлялась?
Нет, и это осознанное решение платформы: контроль версий защищает данные от потери. Можно лишь снизить частоту конфликтов организационными мерами или перевести отдельные операции на управляемые блокировки в коде — тогда второй пользователь получит сообщение о блокировке ещё при попытке записи.
Что произойдёт, если оба пользователя нажмут «Записать» одновременно?
Запишется тот, чья транзакция завершится первой. Второй получит сообщение о модифицированных данных и должен будет перечитать объект и внести правки заново. Обе версии одновременно сохраниться не могут.
Ошибка появляется в файловой базе, где работает один человек. Почему?
Значит, объект изменяется программно: фоновое задание, обмен данными, подписка на событие или та же форма, открытая во втором окне. Проверьте список запущенных окон и журнал регистрации — источник найдётся.
Теряются ли введённые данные при этой ошибке?
Данные из базы не теряются — там хранится более свежая версия. Пропадут только ваши несохранённые правки в открытой форме, если закрыть её без сохранения. Поэтому перед перечитыванием зафиксируйте свои изменения отдельно.
Чем это отличается от ошибки «Конфликт блокировок при выполнении транзакции»?
«Данные объекта модифицированы» — оптимистическая блокировка: конфликт версий обнаружен при записи. «Конфликт блокировок» — пессимистическая или управляемая блокировка: объект уже захвачен другой транзакцией. Причины похожи, но диагностика второй ошибки требует анализа блокировок СУБД.
Поможет ли перезапуск сервера 1С или чистка кэша?
Нет. Ошибка не связана с кэшем или состоянием сервера — это результат реального изменения объекта в базе. Перезапуск может лишь временно прервать фоновое задание, но после его очередного запуска конфликты вернутся.
Что важно запомнить
Ошибка «данные объекта модифицированы» — штатная защита 1С от потери данных при параллельной работе. Пользователю достаточно перечитать объект и повторить ввод; администратору — найти источник параллельных изменений через журнал регистрации; разработчику — устранить двойную запись объекта в доработках.