Удаление документа с предварительной очисткой регистров Ключевые слова: удаление,набор записей,регистр,очистка
Пришлось поизощряться, в результате чего родилась функция обФизическиГарантированноУдалитьДокумент, которая сначала гарантированно (Обменданными.Загрузка=истина) очищает набор записей, а затем удаляет объект.
Функция обСоздатьМенеджерРегистраПоМетаданным(МД) Экспорт
Если Метаданные.регистрыСведений.Индекс(МД)<>-1 Тогда
Возврат РегистрыСведений[МД.Имя];
КонецЕсли;
Если Метаданные.РегистрыНакопления.Индекс(МД)<>-1 Тогда
Возврат РегистрыНакопления[МД.Имя];
КонецЕсли;
Если Метаданные.РегистрыБухгалтерии.Индекс(МД)<>-1 Тогда
Возврат РегистрыБухгалтерии[МД.Имя];
КонецЕсли;
Если Метаданные.РегистрыРасчета.Индекс(МД)<>-1 Тогда
Возврат РегистрыРасчета[МД.Имя];
КонецЕсли;
Возврат Неопределено;
КонецФункции
Функция обФизическиГарантированноУдалитьДвиженияДокумента(Ссылка)Экспорт
МД=Метаданные.НайтиПоТипу(ТипЗнч(Ссылка));
Для Каждого МДРег из МД.Движения Цикл
МенеджерРегистра=обСоздатьМенеджерРегистраПоМетаданным(МДРег);
НЗ=МенеджерРегистра.СоздатьНаборЗаписей();
НЗ.Отбор.Регистратор.Значение=Ссылка;
НЗ.Отбор.Регистратор.Использование=Истина;
НЗ.ОбменДанными.Загрузка=истина;
НЗ.Записать(истина);
КонецЦикла;
КонецФункции
Функция обФизическиГарантированноУдалитьДокумент(Ссылка) Экспорт
обФизическиГарантированноУдалитьДвиженияДокумента(Ссылка);
Об=Ссылка.ПолучитьОбъект();
Об.ОбменДанными.Загрузка=истина;
Об.Удалить();
КонецФункции
А где здесь очистка регистров?
Может надо еще пару строк написать?
НЗ.Прочитать();
НЗ.Очистить();
А почему не получилось использовать свойство Объекта Движения? Тогда можно было бы сразу обратиться к коллекции движений документа |