Вот, твой запрос должен выглядеть так:
SELECT
Данные.Номенклатура as [Номенклатура $Справочник.Номенклатура],
Данные.Склад as [Склад $Справочник.Склады],
right(Данные.Позиция, 9) as [Документ $Документ],
Данные.Вид as Документ_вид,
Данные.НОст,
Данные.Приход,
Данные.Расход
from (
SELECT
ОстаткиТМЦОстатки.Номенклатура,
ОстаткиТМЦОстатки.Склад,
null as Позиция,
null as Вид,
ОстаткиТМЦОстатки.КоличествоОстаток as НОст,
0 as Приход,
0 as Расход
FROM $РегистрОстатки.ОстаткиТМЦ(:ВыбДатаН,
,
(Склад IN (SELECT val FROM #СпСкладов)) AND (Номенклатура IN (SELECT val FROM #спНом)),
(Номенклатура, Склад), Количество
) AS ОстаткиТМЦОстатки
union all
SELECT
ОстаткиТМЦОбороты.Номенклатура,
ОстаткиТМЦОбороты.Склад,
ОстаткиТМЦОбороты.ПозицияДокумента,
ОстаткиТМЦОбороты.ВидДокумента,
0,
ОстаткиТМЦОбороты.КоличествоПриход,
ОстаткиТМЦОбороты.КоличествоРасход
FROM $РегистрОбороты.ОстаткиТМЦ(:ВыбДатаН,:ВыбДатаК~, Документ,
,
(Склад IN (SELECT val FROM #СпСкладов)) AND (Номенклатура IN (SELECT val FROM #спНом)),
(Номенклатура, Склад), Количество
) AS ОстаткиТМЦОбороты
) as Данные
order by Данные.Номенклатура, Данные.Склад, Данные.Позиция
Описание результата:
Записи, у которых Документ пустой - есть записи остатков, в них надо читать поле НОст;
Записи, у которых Документ не пустой - есть записи оборотов, в них надо читать поля Приход, Расход;
По одной комбинации измерений (Номенклатура/Склад), порядок следования записей такой:
1)запись об остатке, может отсутствовать, если остаток был =0;
2)все записи по оборотам в порядке позиций документов (по хронологии), могут отсутствовать если оборотов небыло.
Конечный и текущий (по документу) остаток вычисляем в модуле при переборе результата.
PS: to FAQ recomended