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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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