Имя: Пароль:
1C
 
V8: список значений в запрос в качестве параметра
0 andrewrocker
 
05.06.17
20:56
Коллеги, не могу сообразить как забросить в параметр список значений. Не могу понять, почему в конце выдается "ничего". Такое чувство, что я передаю в запрос список номенклатуры неправильно.

    //сформируем массив номенклатуры для запроса
    СписокНоменклатуры = Новый СписокЗначений;
    СписокНоменклатуры = Товары.ВыгрузитьКолонку("Номенклатура");

    Запрос = Новый Запрос;
    Запрос.Текст =  "ВЫБРАТЬ
                    |    ЦеныНоменклатуры.Период,
                    |    ЦеныНоменклатуры.Регистратор,
                    |    ЦеныНоменклатуры.НомерСтроки,
                    |    ЦеныНоменклатуры.Активность,
                    |    ЦеныНоменклатуры.ТипЦен,
                    |    ЦеныНоменклатуры.Номенклатура,
                    |    ЦеныНоменклатуры.ХарактеристикаНоменклатуры,
                    |    ЦеныНоменклатуры.Валюта,
                    |    ЦеныНоменклатуры.Цена КАК Цена,
                    |    ЦеныНоменклатуры.ЕдиницаИзмерения,
                    |    ЦеныНоменклатуры.ПроцентСкидкиНаценки,
                    |    ЦеныНоменклатуры.СпособРасчетаЦены
                    |ИЗ
                    |    РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
                    |ГДЕ
                    |    ЦеныНоменклатуры.Период = &Период
                    |    И ЦеныНоменклатуры.ТипЦен = &ТипЦен
                    |    И ЦеныНоменклатуры.Номенклатура В(&СписокНоменклатуры)";
    Запрос.УстановитьПараметр("СписокНоменклатуры",СписокНоменклатуры);
    Запрос.УстановитьПараметр("Период",ДокументОбъект.Дата);
    Запрос.УстановитьПараметр("ТипЦен",УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновнаяЦенаЗакупки"));
    ЗакупочныеЦеныНоменклатуры = Запрос.Выполнить().Выбрать();
    
    Пока ЗакупочныеЦеныНоменклатуры.Следующий() цикл
        Сообщить(ЗакупочныеЦеныНоменклатуры.Номенклатура);
        Сообщить(ЗакупочныеЦеныНоменклатуры.Цена);
    КонецЦикла;
1 h-sp
 
05.06.17
21:17
(0) вроде нормально там.

вот с периодом ты лоханулся

ЦеныНоменклатуры.Период = &Период

уверен, что у тебя дата документа будет равна дате прайса?
2 andrewrocker
 
05.06.17
21:23
(1) похоже да. Утром поправлю. Ночью уже не волоку похоже
3 Franchiser
 
гуру
05.06.17
23:56
ВыгрузитьКолонку()  возвращает не СписокЗначений.  Зачем ты объявляешь тип?
4 andrewrocker
 
06.06.17
03:08
(3) там на каком-то этапе был глюк с массивом. Поэтому объявляю, как мне кажется, самый понятный тип для запроса, и выгружаю в него данные.
5 PaulBC
 
06.06.17
03:29
Этим: СписокНоменклатуры = Товары.ВыгрузитьКолонку("Номенклатура"); ты все равно переопределяешь его в массив.
Используй ЗагрузитьЗначения, если хочется именно список, хотя и не вижу в этом смысла.
А проблема скорей всего не в списке. Ты про виртуальные таблицы вообще слышал? СрезПоследних, например..
6 andrewrocker
 
06.06.17
08:59
Виртуальные таблицы это очень большое колдовство. Я слышал, но мой мозг пока не хочет вникать
7 andrewrocker
 
06.06.17
09:01
ЗагрузитьЗначения не получается, не понимаю синтаксис, куда его ставить.
8 Buster007
 
06.06.17
09:15
убери условие ЦеныНоменклатуры.Период = &Период и посмотри результат
9 Лефмихалыч
 
06.06.17
09:29
(0) в конце выдается ни чего потому, что у тебя в колонке "Номенклатура" не номенклатура
10 Лефмихалыч
 
06.06.17
09:31
+(9) или основной тип цен не указан
или на дату ДокументОбъект.Дата нет записей.

перенеси отбор по периоду в параметр виртуальной таблицы
11 h-sp
 
06.06.17
09:40
(10) уже поняли вроде

ЦеныНоменклатуры.Период   не равно   &Период
12 KishMish
 
06.06.17
09:42
(0) период - это дата со временем. В документе время не нулевое. В это регистре сведений время нулевое.
Поэтому Запрос.УстановитьПараметр("Период",НачалоДня(ДокументОбъект.Дата));

Или в запросе используй НАЧАЛОПЕРИОДА
13 catena
 
06.06.17
09:46
(12)Точно. И радуйся, если цены устанавливали вчера.
14 НЕА123
 
06.06.17
09:48
в (6) ТС сам себе ответил. считаю, что ветку можно закрывать.