Книга знаний

1С:Предприятие / Объекты конфигурации / Документы

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

Автор статьи: alexmind
Последняя редакция №1 от 16.07.08
URL: http://kb.mista.ru/article.php?id=683

Ключевые слова: универсальный,сторно



//Может кому пригодится
//Универслаьный документ сторно, делает rollback по всем регистрам с обратным знаком на указаную
//дату
//Реквизиты:
//Основание -документ для которого делается сторно
//УпрПериод -Булево указывает на период движения по упр. регистрам
//Модуль объекта

Процедура ОбработкаПроведения(Отказ, РежимПроведения)

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

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

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