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