HelpF.pro

Как удалить движения документа программно?

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

При попытке отмены проведения выполнялись проверки на условия оплаты по заказу и документ ни как не отменял проведения

Ну не может типовым способом, заставим не типовым: Через запрос делаем выбору необходимых нам документов и в обработке результата пишем:

Код 1C v 8.3
 Для Каждого СтрокаРезультата Из РезультатТаблица Цикл
   //алгоритм обработки строки результата - начало
ДокОбъект = СтрокаРезультата.Ссылка.ПолучитьОбъект();
Для Каждого Движение ИЗ ДокОбъект.Движения Цикл

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

ДокОбъект.Проведен = Ложь;
//ДокОбъект.ОбменДанными.Загрузка = Истина;
ДокОбъект.Записать(режимзаписидокумента.запись);

   //алгоритм обработки строки результата - конец
КонецЦикла;

Готовая функция для использования в своих обработках или общем модуле:

Код 1C v 8.3
 Процедура УдалитьДвиженияДокумента(Документ)

    ДокОбъект = Документ.ПолучитьОбъект();

    Для Каждого Движение ИЗ ДокОбъект.Движения Цикл

        Если Движение.Количество() > 0 Тогда
            Точка = Найти(Строка(Движение), ".");
            ВидРегистра = Лев(Строка(Движение), Точка - 13);
            РегистрИмя = СокрП(Сред(Строка(Движение), Точка + 1));

            Если ВидРегистра = "РегистрНакопления" Тогда
                НаборЗаписей = РегистрыНакопления[РегистрИмя].СоздатьНаборЗаписей();            
            ИначеЕсли ВидРегистра = "РегистрБухгалтерии" Тогда
                НаборЗаписей = РегистрыБухгалтерии[РегистрИмя].СоздатьНаборЗаписей();    
            ИначеЕсли ВидРегистра = "РегистрСведений" Тогда
                НаборЗаписей = РегистрыСведений[РегистрИмя].СоздатьНаборЗаписей();    
            ИначеЕсли ВидРегистра = "РегистрРасчета" Тогда
                НаборЗаписей = РегистрыРасчета[РегистрИмя].СоздатьНаборЗаписей();    
            КонецЕсли;

            НаборЗаписей.Отбор.Регистратор.Установить(ДокОбъект.Ссылка);            

        Иначе
            НаборЗаписей = Движение;
        КонецЕсли;

        Попытка
            НаборЗаписей.Записать();
        Исключение
            Сообщить(ОписаниеОшибки());
        КонецПопытки;
    КонецЦикла;

КонецПроцедуры

Опубликовано на сайте: https://HelpF.pro
Прямая ссылка: https://HelpF.pro/faq/view/1890.html