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