База SQL. Версия 1С++ >= 2.0.3.1 Есть простой запрос:
select
БигСел.Товар [Товар $Справочник.Товары],
БигСел.Докум [Док $Документ],
БигСел.Ост [Ост $число],
БигСел.Рез [Рез $число],
БигСел.СумБаз [СумБаз $число],
БигСел.СумВал [СумВал $число]
from
(select
РегОст.измТовар Товар,
null Докум,
РегОст.ресКоличествоОстаток Ост,
РегРез.ресКоличествоОстаток Рез,
0 СумБаз,
0 СумВал
from $РегистрОстатки.Товары(:ДатаН,,измТовар in
(select $ДокС.табТовар
from $ДокументСтроки.Перемещение ДокС
where ДокС.iddoc = :ТД and $ДокС.табКоличество<>0
) and измСклад = :Скл, (измТовар, измСклад),ресКоличество) РегОст
left join $РегистрОстатки.РезервыТоваров(:ДатаН,,измТовар in
(select $ДокС.табТовар
from $ДокументСтроки.Перемещение ДокС
where ДокС.iddoc = :ТД and $ДокС.табКоличество<>0
) and измСклад = :Скл, (измТовар, измСклад),ресКоличество) РегРез on РегРез.измТовар = РегОст.измТовар and РегРез.измСклад = РегОст.измСклад
union all
select
РегОст.измТовар,
РегОст.измДокумент,
РегОст.ресКоличествоОстаток,
0,
РегОст.ресСуммаБазОстаток,
РегОст.ресСуммаВалОстаток
from $РегистрОстатки.Товары(:ДатаН,, измТовар in
(select $ДокС.табТовар
from $ДокументСтроки.Перемещение ДокС
where ДокС.iddoc = :ТД and $ДокС.табКоличество<>0
) and измСклад = :Скл,(измТовар,измДокумент),(ресКоличество, ресСуммаБаз, ресСуммаВал)) РегОст
where РегОст.ресКоличествоОстаток>0
) БигСел
Запрос.УстановитьТекстовыйПараметр("ДатаН", MW.ПолучитьДатуВремяИдДок(СформироватьПозициюДокумента(ТекущийДокумент())));
Запрос.УстановитьТекстовыйПараметр("Скл", загСклад);
Запрос.УстановитьТекстовыйПараметр("ТД", ТекущийДокумент());
ТЗн = Запрос.ВыполнитьИнструкцию(ТЗ);
ТЗн.Выгрузить(ТЗн1);
Все чудно, НО...
Если сделать
ТЗн.ВыбратьСтроки()
Пока Тзн.ПолучитьСтроку() = 1 Цикл
Сообщить(Тзн.Док)
КонецЦикла
, то все выводится правильно.
ТЗн1.ВыбратьСтроки()
Пока Тзн1.ПолучитьСтроку() = 1 Цикл
Сообщить(Тзн1.Док)
КонецЦикла
,появляется какой-то левый документ.
В отладчике во втором цикле написано следующее:
+Тзн1.Док - (строка с непр. документом)
Хотя в ост. строках с документами пишется так:
+Тзн1.Док - "ВводОстатков"
Поэтому, получается, что ТЗн.Выгрузить(ТЗн1); писать НЕЛЬЗЯ!!!!!
Приходится вручную созд. ТаблицуЗначений и делать проверку типа:
ТЗн.ВыбратьСтроки()
Пока Тзн.ПолучитьСтроку() = 1 Цикл
Тзн1.НоваяСтрока();
Если ПустаяСтрока(Строка(Тзн.Док)) = 0 Тогда
Тзн1.Док = Тзн.Док
КонецЕсли
КонецЦикла
Блин, извиняюсь, что путанно, но я в непонятках. Что делать? Переписывать куски получения
результатов из запроса или у меня руки кривые?