Книга знаний

1С:Предприятие

Удаление документа с предварительной очисткой регистров

В одной конфигурации столкнулся с тем, что документ не удалялся физически - стоял запрет на удаление в модуле регистра сведений. Статья посвящена решению проблемы.Автор статьи: Гений 1С | Редакторы: space17
Последняя редакция №8 от 04.09.06 | История
URL: http://kb.mista.ru/article.php?id=357

Ключевые слова: удаление,набор записей,регистр,очистка


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


Функция обФизическиГарантированноУдалитьДвиженияДокумента(Ссылка)Экспорт
    МД=Метаданные.НайтиПоТипу(ТипЗнч(Ссылка));
    Для Каждого МДРег из МД.Движения Цикл
        МенеджерРегистра=обСоздатьМенеджерРегистраПоМетаданным(МДРег);
        НЗ=МенеджерРегистра.СоздатьНаборЗаписей();
        НЗ.Отбор.Регистратор.Значение=Ссылка;
        НЗ.Отбор.Регистратор.Использование=Истина;
        НЗ.ОбменДанными.Загрузка=истина;
        НЗ.Записать(истина);
    КонецЦикла;
    
КонецФункции

Функция обФизическиГарантированноУдалитьДокумент(Ссылка) Экспорт
    обФизическиГарантированноУдалитьДвиженияДокумента(Ссылка);
    Об=Ссылка.ПолучитьОбъект();
    Об.ОбменДанными.Загрузка=истина;
    Об.Удалить();
КонецФункции



А где здесь очистка регистров?
Может надо еще пару строк написать?


НЗ.Прочитать();
НЗ.Очистить();


Нет, регистр чистится именно через Записать без Прочитать, Очистить не нужно, НЗ и так пустой.

А почему не получилось использовать свойство Объекта Движения? Тогда можно было бы сразу обратиться к коллекции движений документа

Гм, можно попробовать, наверное так проще, не знаю.
Тогда код будет примерно таким (не отлаживал):
Функция обФизическиГарантированноУдалитьДвиженияДокумента(Ссылка)Экспорт
    Объект=Ссылка.ПолучитьОбъект();
    Для Каждого НЗ из Объект.Движения Цикл
        НЗ.Записать(истина); //Очистка всех движений
        НЗ.ОбменДанными.Загрузка=истина;
    КонецЦикла;
КонецФункции



Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика