Есть обработка по движению товара (в модуле формы элемента справочника):
|Период с НачДата по КонДата;
|Товар = Регистр.Остатки.Товар;
|Партия = Регистр.Остатки.Партия;
|Склад = Регистр.Остатки.Склад;
|ТекДок = Регистр.Остатки.ТекущийДокумент;
|Остаток = Регистр.Остатки.Остаток;
|Функция ОстатокНачОст = НачОст(Остаток);
|Функция ОстатокПриход = Приход(Остаток);
|Функция ОстатокРасход = Расход(Остаток);
|Функция ОстатокКонОст = КонОст(Остаток);
|Группировка ТекДок;
|Условие(Товар = ВыбТовар);
|";
Если ВыбСклад.Выбран()=1 Тогда
ТекстЗапроса=ТекстЗапроса+"Условие(Склад = ВыбСклад);"
КонецЕсли;
Переписываю его на прямой запрос с использованием виртуальной таблицы:
|SELECT
| Рег.Партия [Партия $Справочник.Партии],
| Рег.ПозицияДокумента [ТекДок $Документ],
| Рег.ВидДокумента ТекДок_вид,
| CAST(LEFT(Рег.ПозицияДокумента, 8) as datetime) ДатаДок,
| Рег.ОстатокНачальныйОстаток Нач,
| Рег.ОстатокПриход Прих,
| Рег.ОстатокРасход Расх,
| Рег.ОстатокКонечныйОстаток Кон
|FROM
| $РегистрОстаткиОбороты.Остатки(:НачДата, :КонДата~, Документ ,
| ,
| ,
| Товар = :ВыбТовар "+?(ВыбСклад.Выбран()=1,"AND Склад = :ВыбСклад","")+",
| (Партия) , (Остаток)) Рег
|";
2 вопроса:
1.Такая конструкция на маленьком периоде работает значительно медленнее штатного запроса. На большом - примерно так же, может чуть быстрее. Как можно улучшить?
2.В результирующей ТЗ на форме нужно показывать отправителя и получателя из документа, который делал движение. С типизацией ТекДок всё понятно, но как выдернуть эти реквизиты из дока (чтобы выгружать запрос сразу на форму, а не вытаскивать их в переборе)? ТекДок может быть любым документом, реально ли как-нибудь сделать JOIN чтобы извлечь нужные реквизиты?