Как избежать ошибки «версия объекта неактуальна» при закрытии месяца и групповом перепроведении в 1С?

Системный администратор 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет
← На главную

Рассмотрим весьма распространенную ситуацию, с которой сталкиваются пользователи и администраторы конфигурации 1С:Бухгалтерия предприятия 3.0 (и других решений на платформе 1С:Предприятие 8.3). Один пользователь открыл важный документ и неспешно редактирует его в течение половины рабочего дня. В этот же момент другой сотрудник (например, заместитель главного бухгалтера) запускает процедуру ЗакрытиеМесяца или регламентное групповое перепроведение документов.

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

Природа ошибки: Механизм оптимистической блокировки

Проанализируем техническую сторону вопроса. То, что мы описали выше — это классическое срабатывание механизма платформы, который называется «Оптимистическая блокировка».

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

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

Разница между «открыл» и «редактирует»: Пессимистическая блокировка

Посмотрим на важный нюанс платформы 1С. Почему вообще регламентная процедура смогла перепровести документ, если он был открыт у пользователя? Здесь кроется разница между простым просмотром и фактическим редактированием.

  1. Если пользователь просто открыл документ и смотрит в него, система накладывает только оптимистическую блокировку. Документ свободен для фоновых процессов и других пользователей.
  2. Но как только пользователь начинает менять данные (например, вводит букву, выбирает новый договор, меняет цифру в табличной части) — форма переходит в статус Модифицированность = Истина. В этот момент платформа накладывает жесткую (пессимистическую) блокировку базы данных.

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

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

Как решить проблему цивилизованными методами?

Организационные меры в духе «отгонять палкой от компьютера всех, когда идет закрытие месяца» работают плохо. Рассмотрим штатные инструменты 1С:Предприятие 8.3, которые позволяют решить эту проблему системно.

1. Использование обработки «Блокировка работы пользователей»

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

  1. Зайдите в раздел Администрирование.
  2. Откройте пункт Поддержка и обслуживание.
  3. Воспользуйтесь штатной обработкой Блокировка работы пользователей.

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

2. Настройка даты запрета редактирования

Еще один полезный инструмент, который упоминался в обсуждении — это ДатаЗапретаРедактирования. Если вы закрыли прошлый период (например, месяц), сразу же устанавливайте дату запрета по пользователям или в целом по организации. Это защитит закрытый период от шаловливых ручек. Даже если кто-то откроет старый документ, платформа не позволит его модифицировать, тем самым исключив риск случайного повреждения учета.

3. Защита от потери данных: Механизм автосохранения

Если худшее уже случилось и пользователь получил ошибку о неактуальной версии, его труд не обязательно потерян безвозвратно. В современных релизах платформы 1С 8.3 реализована функция автосохранения несохраненных данных (работает с кэшем). При повторном открытии того же самого документа программа обнаружит наличие несохраненной версии и предложит восстановить данные. Рекомендуем обучить пользователей обращать внимание на это системное сообщение.

4. Включение версионирования объектов

Чтобы иметь возможность разобраться в любой конфликтной ситуации, включите механизм истории изменений.

  1. Перейдите в раздел Администрирование -> Общие настройки.
  2. Отметьте флажок Хранить историю изменений (Версионирование объектов).
  3. Настройте правила хранения для критичных видов документов (например, "При записи").

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

Применяя эти простые инструменты администратора, вы сможете навсегда исключить потерю данных и нервов ваших пользователей при проведении тяжелых регламентных операций в 1С!

← На главную