Имя: Пароль:
1C
1С v8
Запрос с параметрами. Получается пустой результат
0 SaV_Tmn
 
09.05.16
21:46
Доброго времени суток.
передаю в запрос в качестве параметра ТЗ (номенклатура,ХарактеристикаНоменкоатуры).
если в этой ТЗ заполнена только первая колонка, то результат запроса не пустой, если заполнены оба столбца, то результат запроса почему то пуст.
Вот код:
Запрос.Текст = "ВЫБРАТЬ
                        |    ЦеныАТТСрезПоследних.Номенклатура,
                        |    ЦеныАТТСрезПоследних.Цена,
                        |    ЦеныАТТСрезПоследних.ХарактеристикаНоменклатуры
                        |ИЗ
                        |    РегистрСведений.ЦеныАТТ.СрезПоследних(
                        |            &ДатаДок,
                        |            Склад = &ВыбСклад
                        |                И (Номенклатура,ХарактеристикаНоменклатуры) В (&СписокНоменклатуры))
                        |                     КАК ЦеныАТТСрезПоследних";
                        СписокНоменклатуры = новый ТаблицаЗначений;
                        СписокНоменклатуры.Колонки.Добавить("Номенклатура",Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
                        СписокНоменклатуры.Колонки.Добавить("ХарактеристикаНоменклатуры",Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры"));
                        Для Н=1 По Товары.Количество() Цикл
                            СписокНоменклатуры.Добавить();
                        КонецЦикла;
                        СписокНоменклатуры.ЗагрузитьКолонку(Товары.ВыгрузитьКолонку("Номенклатура"),"Номенклатура");
                        СписокНоменклатуры.ЗагрузитьКолонку(Товары.ВыгрузитьКолонку("ХарактеристикаНоменклатуры"),"ХарактеристикаНоменклатуры");
                        Запрос.УстановитьПараметр("ВыбСклад",СкладПолучатель);
                        Запрос.УстановитьПараметр("ДатаДок",КонецДня(Дата));
                        Запрос.УстановитьПараметр("СписокНоменклатуры",СписокНоменклатуры);
                        ТабЗапроса = Запрос.Выполнить().Выгрузить();

Может кто подскажет, где я накосячил ? :)
1 RomanYS
 
09.05.16
21:49
ТЗ нужно сначала загрузить во временную таблицу
2 Fram
 
10.05.16
00:34
(0) а как вот эта конструкция работает?
(Номенклатура,ХарактеристикаНоменклатуры) В (&СписокНоменклатуры)
3 Fram
 
10.05.16
00:35
вот так работает?
((Номенклатура) В (&СписокНоменклатуры) ИЛИ (ХарактеристикаНоменклатуры) В (&СписокНоменклатуры))
4 AneJIbcuH
 
10.05.16
08:25
Пиши так, так правильней:

Выбрать
   ТЗ.Номенклатура,
   ТЗ.ХарактеристикаНоменклатуры
Поместить ВТ_ТЗ
ИЗ
&СписокНоменклатуры Как ТЗ;  

ВЫБРАТЬ
|    ЦеныАТТСрезПоследних.Номенклатура,
                        |    ЦеныАТТСрезПоследних.Цена,
                        |    ЦеныАТТСрезПоследних.ХарактеристикаНоменклатуры
                        |ИЗ
                        |    РегистрСведений.ЦеныАТТ.СрезПоследних(
                        |            &ДатаДок,
                        |            Склад = &ВыбСклад
                        |                И (Номенклатура,ХарактеристикаНоменклатуры) В (ВЫБРАТЬ ТЗ.Номенклатура, ТЗ.ХарактеристикаНоменклатуры ИЗ ВТ_ТЗ Как ТЗ))
                        |                     КАК ЦеныАТТСрезПоследних";
5 SaV_Tmn
 
10.05.16
13:33
(1) Буду читать по временным таблицам, я думал должно и так работать :)

(3) Мне надо чтобы это конструкция работала как И, но похоже она работает как то непонятно :) возможно как ИЛИ

(4) Я так понимаю это как раз и есть использование временных таблиц, вот только не могу никак догнать как это в коде в чистом виде должно быть, если не затруднит подскажите :) я только учусь 1ску ломать :-D
6 SaV_Tmn
 
10.05.16
13:42
(4) Сделал так как Вы написали, вроде как все хорошо, но ситуация повторяется, то есть если номенклатуры без характеристик то результат запроса не пустой,
А если есть и номенклатура и характеристика то результат запроса пуст :(

Запрос = Новый Запрос;
        Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
        Запрос.Текст = "Выбрать
            |ТЗ.Номенклатура,
            |ТЗ.ХарактеристикаНоменклатуры
            |Поместить ВТ_ТЗ
            |ИЗ
            |&СписокНоменклатуры Как ТЗ;  
               |
            |ВЫБРАТЬ
            |    ЦеныАТТСрезПоследних.Номенклатура,
            |    ЦеныАТТСрезПоследних.Цена,
            |    ЦеныАТТСрезПоследних.ХарактеристикаНоменклатуры
            |ИЗ
            |    РегистрСведений.ЦеныАТТ.СрезПоследних(
            |            &ДатаДок,
            |            Склад = &ВыбСклад
            |                И (Номенклатура,ХарактеристикаНоменклатуры) В (ВЫБРАТЬ ТЗ.Номенклатура, ТЗ.ХарактеристикаНоменклатуры ИЗ ВТ_ТЗ Как ТЗ))
            |                     КАК ЦеныАТТСрезПоследних";
        СписокНоменклатуры = новый ТаблицаЗначений;
        СписокНоменклатуры.Колонки.Добавить("Номенклатура",Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
        СписокНоменклатуры.Колонки.Добавить("ХарактеристикаНоменклатуры",Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры"));
        Для Н=1 По Товары.Количество() Цикл
            СписокНоменклатуры.Добавить();
        КонецЦикла;
        СписокНоменклатуры.ЗагрузитьКолонку(Товары.ВыгрузитьКолонку("Номенклатура"),"Номенклатура");
        СписокНоменклатуры.ЗагрузитьКолонку(Товары.ВыгрузитьКолонку("ХарактеристикаНоменклатуры"),"ХарактеристикаНоменклатуры");
        Запрос.УстановитьПараметр("ВыбСклад",СкладПолучатель);
        Запрос.УстановитьПараметр("ДатаДок",КонецДня(Дата));
        Запрос.УстановитьПараметр("СписокНоменклатуры",СписокНоменклатуры);
        ТабЗапроса = Запрос.Выполнить().Выгрузить();
7 SaV_Tmn
 
11.05.16
08:42
Все понял где собака была зарыта. Всем спасибо :) просто в регистре не оказалось такого сочетания номенклатура + характеристика :) Всем спасибо за помощь :)