Как удалить организацию и устаревшие документы при ошибке «Документ более не используется в конфигурации, изменения запрещены»?

Программист 1С v8.3 (Управляемые формы) Бухгалтерский учет Промышленность, строительство и АПК
← На главную

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

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

Почему возникает данная ошибка

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

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

  1. В коде проверки не предусмотрено исключение для изменения реквизита ПометкаУдаления.
  2. Разработчик не добавил проверку свойства ОбменДанными.Загрузка, из-за чего блокируются любые программные и пакетные изменения.
  3. Модуль с проверкой может быть защищен авторским правом или закрыт от редактирования, что не позволяет просто отключить проверку в конфигураторе.

Способ 1. Использование группового изменения с режимом загрузки данных

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

Выполним следующие действия по шагам:

  1. Перейдем в раздел Администрирование — Обслуживание — Корректировка данных — Групповое изменение реквизитов.
  2. Выберем целевой устаревший документ.
  3. Нажмем кнопку Дополнительные параметры (или перейдем в меню специальных настроек).
  4. Установим флаг Загружать с отключенными проверками (ОбменДанными.Загрузка = Истина).
  5. В списке реквизитов найдем Пометка удаления, установим значение Да и выполним изменение.

Способ 2. Программное физическое удаление объекта через метод Удалить()

Если режим ОбменДанными.Загрузка заблокирован жестким кодом в закрытом модуле, метод Записать() вызовет исключение при любой попытке модификации. В такой ситуации применим программное удаление объекта методом Удалить().

Вызов метода Удалить() стирает запись непосредственно из таблиц базы данных, минуя обработчики ПередЗаписью и ПриЗаписи. Для этого используется внешняя обработка со следующим кодом:


Выборка = Документы.РеализацияСельхозпродукции.Выбрать();
Пока Выборка.Следующий() Цикл
    Если Выборка.Организация = УдаляемаяОрганизация Тогда
        ДокументОбъект = Выборка.ПолучитьОбъект();
        Попытка
            ДокументОбъект.Удалить();
        Исключение
            Сообщить("Ошибка удаления документа " + Выборка.Ссылка + ": " + ОписаниеОшибки());
        КонецПопытки;
    КонецЕсли;
КонецЦикла;

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

Способ 3. Предварительная очистка движений по регистрам

Перед физическим удалением документа необходимо убедиться, что он не формирует активных проводок и движений в регистрах накопления и бухгалтерии. Очистим движения программно через запись пустого набора записей с установленным свойством ОбменДанными.Загрузка = Истина:


// Очистка проводок в регистре бухгалтерии
НаборБух = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
НаборБух.Отбор.Регистратор.Установить(ДокументСсылка);
НаборБух.ОбменДанными.Загрузка = Истина;
НаборБух.Записать();

// Очистка движений регистра накопления
НаборНакопления = РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей();
НаборНакопления.Отбор.Регистратор.Установить(ДокументСсылка);
НаборНакопления.ОбменДанными.Загрузка = Истина;
НаборНакопления.Записать();

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

Способ 4. Замена ссылок на организацию без удаления документов

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

Для этого воспользуемся обработкой «Поиск и удаление дублей» или внешней обработкой «Поиск и замена значений»:

  1. Создадим в справочнике Организации технический служебный элемент (например, «Архивная организация»).
  2. Выполним поиск всех ссылок на удаляемую организацию.
  3. Произведем замену ссылок в устаревших документах на архивный элемент.
  4. После освобождения всех ссылок выполним стандартное удаление требуемой организации.

Способ 5. Использование специализированных обработок очистки

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

Рекомендация по безопасности: любые операции по прямому удалению данных или массовой замене ссылок обязательно выполняйте на резервной копии информационной базы.

← На главную