путем советов и поиска по форуму и документации пришел к такому:
создал отчет в котором имитировал получение таблицы партий штатными методами и прямыми запросами
первая процедура:
Процедура Сформировать2()
НачалоВремени = _GetPerformanceCounter();
рег = СоздатьОбъект("Регистр.ПартииТоваров");
Рег.ВременныйРасчет();
РассчитатьРегистрыПо(выбдок);
тз = СоздатьОбъект("таблицаЗначений");
Рег.УстановитьЗначениеФильтра("Товар", выбТовар, 1);
Рег.УстановитьЗначениеФильтра("Фирма", Константа.ОсновнаяФирма, 1);
рег.выгрузитьИтоги(тз,1,1);
КонецВремени = _GetPerformanceCounter() - НачалоВремени;
Сообщить(""+КонецВремени/1000+" сек.");
тз.выбратьстроку();
КонецПроцедуры
и прямой запрос
Запрос=СоздатьОбъект("ЗапросSQL"); фЭтоSQL=Запрос.фЭтоSQL;
Запрос.УстановитьТекстовыйПараметр("ДатаОстатков", Дата(ДатаГод(НачМесяца(ДатаКонца)-1), ДатаМесяц(НачМесяца(ДатаКонца)-1), 1));
Запрос.УстановитьТекстовыйПараметр("ДатаНачала", НачМесяца(ДатаКонца)); //Дата начала остатков
Запрос.УстановитьТекстовыйПараметр("ДатаКонца", ДатаКонца);
Запрос.ДобавитьУсловие("Tmp", "Фирма", "",Константа.ОсновнаяФирма, "Фирма", "", "", "");
Запрос.ДобавитьУсловие("Tmp", "Номенклатура", "", выбТовар, "Номенклатура", "", "", "");
Запрос.ДобавитьУсловие("Tmp", "Склад", "", Константа.ОсновнойСклад, "Склад", "", "", "");
Запрос.ДобавитьУсловие("J", "IDDOC", "", выбдок.ТекущийДокумент(), "Док", "", "<>", "");
стрИмяФайлаЖурнала=Запрос.ПолучитьИмяЖурнала();
ТекстЗапроса="
|SELECT
| Tmp.Фирма as [Фирма $Справочник.Фирмы],
| Tmp.Номенклатура as [Номенклатура $Справочник.Номенклатура],
//| Tmp.Склад as [Склад $Справочник.МестаХранения],
| Tmp.Партия as [Партия $Документ],
|
| Tmp.Количество as Количество
|FROM (
| SELECT
| $регПартииНаличие_Итоги.Фирма as Фирма,
| $регПартииНаличие_Итоги.Товар as Номенклатура,
//| $регПартииНаличие_Итоги.Склад as Склад,
| $регПартииНаличие_Итоги.ПрихДокумент as Партия,
|
| $регПартииНаличие_Итоги.ОстатокТовара as Количество
| FROM
| $РегистрИтоги.ПартииТоваров as регПартииНаличие_Итоги
| WHERE
| регПартииНаличие_Итоги.PERIOD = :ДатаОстатков~~
|
| UNION ALL
|
| SELECT
| $регПартииНаличие_Движение.Фирма as Фирма,
| $регПартииНаличие_Движение.Товар as Номенклатура,
//| $регПартииНаличие_Движение.Склад as Склад,
| $регПартииНаличие_Движение.ПрихДокумент as Партия,
|
| as Количество
| FROM
| $Регистр.ПартииТоваров as регПартииНаличие_Движение
| INNER
| JOIN "+стрИмяФайлаЖурнала+" as J ON регПартииНаличие_Движение.IDDOC=J.IDDOC
| WHERE
| J.DATE BETWEEN :ДатаНачала~~ AND :ДатаКонца~~ AND J.$ФлагРегистра.ПартииТоваров=1 AND %J.Док
|) as Tmp
| WHERE %Tmp.Номенклатура AND %Tmp.Фирма
|;";
Запрос.Текст=ТекстЗапроса;
тзЗапрос=Запрос.Выполнить(0, 0);
тзЗапрос.Свернуть("Фирма,Склад,Партия", "Количество");
КонецВремени = _GetPerformanceCounter() - НачалоВремени;
Сообщить(""+КонецВремени/1000+" сек.");
тзЗапрос.выбратьстроку();
разница в скорости около 9 раз (прямой запрос быстрее)
но столкнулся с тем что нужно как то расчитывать регистр ПО документ.