При очистке информационной базы или удалении ненужной организации в отраслевых решениях (например, в «Бухгалтерии сельскохозяйственного предприятия») пользователи и администраторы часто сталкиваются с ошибкой записи. При попытке интерактивно пометить документ на удаление платформа выдает сообщение: «Не удалось записать... Документ более не используется в конфигурации, изменения запрещены». В результате невозможно ни пометить документ, ни удалить связанную организацию через стандартную обработку «Удаление помеченных объектов».
Разберем подробнее причины возникновения этой ошибки и детально рассмотрим способы ее обхода и корректного удаления данных.
Проанализируем механику работы отраслевых конфигураций 1С. В процессе развития программы разработчики заменяют устаревшие отраслевые документы типовыми аналогами. Сами объекты метаданных (например, Реализация с/х продукции) остаются в структуре конфигурации для сохранения истории учета, но объявляются устаревшими (deprecated).
Чтобы исключить случайный ввод новых данных или редактирование старых периодов, разработчики встраивают жесткий программный запрет в процедуру ПередЗаписью модуля объекта или в соответствующую подписку на событие. Ошибка возникает из-за следующих факторов:
ПометкаУдаления.ОбменДанными.Загрузка, из-за чего блокируются любые программные и пакетные изменения.Посмотрим на стандартный механизм пакетной обработки данных. Если в коде проверки разработчики оставили стандартное исключение для режима обмена данными, мы можем пометить документы на удаление с помощью встроенной обработки «Групповое изменение реквизитов».
Выполним следующие действия по шагам:
Если режим ОбменДанными.Загрузка заблокирован жестким кодом в закрытом модуле, метод Записать() вызовет исключение при любой попытке модификации. В такой ситуации применим программное удаление объекта методом Удалить().
Вызов метода Удалить() стирает запись непосредственно из таблиц базы данных, минуя обработчики ПередЗаписью и ПриЗаписи. Для этого используется внешняя обработка со следующим кодом:
Выборка = Документы.РеализацияСельхозпродукции.Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.Организация = УдаляемаяОрганизация Тогда
ДокументОбъект = Выборка.ПолучитьОбъект();
Попытка
ДокументОбъект.Удалить();
Исключение
Сообщить("Ошибка удаления документа " + Выборка.Ссылка + ": " + ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
КонецЦикла;
Важно: метод Удалить() следует вызывать только после предварительной очистки движений документа по регистрам, иначе в базе останутся «зависшие» записи без регистратора.
Перед физическим удалением документа необходимо убедиться, что он не формирует активных проводок и движений в регистрах накопления и бухгалтерии. Очистим движения программно через запись пустого набора записей с установленным свойством ОбменДанными.Загрузка = Истина:
// Очистка проводок в регистре бухгалтерии
НаборБух = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
НаборБух.Отбор.Регистратор.Установить(ДокументСсылка);
НаборБух.ОбменДанными.Загрузка = Истина;
НаборБух.Записать();
// Очистка движений регистра накопления
НаборНакопления = РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей();
НаборНакопления.Отбор.Регистратор.Установить(ДокументСсылка);
НаборНакопления.ОбменДанными.Загрузка = Истина;
НаборНакопления.Записать();
После полной очистки всех наборов записей документ можно безопасно удалить из базы данных методом Удалить().
Если история хозяйственных операций в устаревших документах должна остаться в базе, но саму организацию требуется удалить из справочника Организации, решим задачу через перенос ссылок.
Для этого воспользуемся обработкой «Поиск и удаление дублей» или внешней обработкой «Поиск и замена значений»:
Организации технический служебный элемент (например, «Архивная организация»).Для комплексного удаления юридического лица со всей цепочкой связанных документов (включая подчиненные справочники, договоры, регистры сведений и документов) можно воспользоваться готовой обработкой «Удаление данных по организации». Такие обработки выполняют поиск всех зависимостей, очищают регистры и физически удаляют данные в обход стандартных блокировок формы.
Рекомендация по безопасности: любые операции по прямому удалению данных или массовой замене ссылок обязательно выполняйте на резервной копии информационной базы.