helpf.pro
Регистрация
 +27 
Распечатать

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

КонецПроцедуры
Разместил:   Версии: |  Дата:   Прочитано: 57186
 +27 
Распечатать
Возможно, вас также заинтересует
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 52
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ
Cообщение: "Не удалось удалить чеки ККМ!" 2
Пользователь с правами Администратор ККМ проводит Закрытие кассовой смены (Z). Выходит сообщение: " Не удалось удалить чеки ККМ!" ФР печатает Z -отчет, но Отчет о рознчничных продажах не формируется. Необходимо дать роли Администратор ККМ прав
Восстановление партионного учета в УТ 1
Проблема следующая: при выполнении стандартной обработки " проведение по партиям" , непонятно почему, но граница актуальности партионного учета не сдвигается, хотя при перепроведении документов никаких ошибок не возникает. Оказывается: дата гр
Временный расчет регистров 0
Временный расчет регистров требуется, если нужно выбрать итоги или движения на определенную дату. По умолчанию итоги регистров выдаются на Точку актуальности. Формулировка 1С - Метод ВременныйРасчет устанавливает флаг участия регистра во временном р
Выбрать все движения регистра по датам 0
Рег1 = СоздатьОбъект(" Регистр.Взаиморасчеты" ); Если Режим = " Подробно" Тогда Рег1.УстановитьФильтр(Клиент); Рег1.ВыбратьДвижения(ДатаНачало, ); Пока Рег1.ПолучитьДвижение() 0 Цикл Док = Рег1.ТекущийДокумент(); Дв_Баз_Сум = Рег1.СуммаБа
Посмотреть все результаты поиска похожих
Комментарии
fixin
29.05.2024 17:12Комментарий: 3
fixin

В итоге вот так получилось:

Код 1C v 8.3
 

Процедура УдалитьДвиженияДокумента(ДокументОбъект) Экспорт
Для Каждого НЗ ИЗ ДокументОбъект.Движения Цикл
НЗ.Прочитать();
Если НЗ.Количество() > 0 Тогда
НЗ.Очистить();
НЗ.Записать();
КонецЕсли;
КонецЦикла;
КонецПроцедуры
fixin
11.05.2022 22:04Комментарий: 2
fixin

Получение вида регистра не очень красивое. На английской платформе выдаст кукиш, переписать бы универсально. И наборы записей тоже записывать в режиме ОбменДанными.Загрузка = истина. Лучше этот параметр передавать в параметр (записывать в режиме обмена или нет).

И никаких сообщить об ошибках в функции быть не должно.

decom2007
30.12.2021 10:54Комментарий: 1
decom2007
Код 1C v 8.3
 Для Каждого Движение ИЗ ДокОбъект.Движения Цикл   
Код 1C v 8.3
 Движение.Прочитать(); //Надо добавить   
Код 1C v 8.3
 Если Движение.Количество() > 0 Тогда   
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.