Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Запрос к регистру остатков и регистру сведений для получения цен

Запрос к регистру остатков и регистру сведений для получения цен
Я
   brenli
 
23.08.20 - 16:47
Всем добра.
Написал запрос для получения остатков из регистра остатков и цен из регистра сведений.
Запрос к регистру сведений хочется сделать максимально грамотно, а именно получить цены только по переданным значениям.

Можно ли пакет запроса передать в проверку условия вхождения номенклатуры?

Так тоже не получается, так как первый запрос из за пакетного режима возвращает одну строку Количество

    МенеджерВТ = Новый МенеджерВременныхТаблиц;
    Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
        |    ВЫРАЗИТЬ(ТоварыНаСкладахОстатки.КоличествоОстаток КАК ЧИСЛО(15,3)) КАК Количество
        |ПОМЕСТИТЬ
        |    ЗапросОстатки
        |ИЗ
        |    РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаВыбор, Склад= &СкладВыбор) КАК ТоварыНаСкладахОстатки";
    
    Запрос.УстановитьПараметр("ДатаВыбор", Новый Граница (НачалоДня(Объект.ДатаО), ВидГраницы.Включая));
    Запрос.УстановитьПараметр("СкладВыбор", Объект.Склад);
    
    РезультатЗапроса = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Номенклатура");
        
    Запрос2 = Новый Запрос;
    Запрос2.МенеджерВременныхТаблиц = МенеджерВТ;
    Запрос2.Текст =
        "ВЫБРАТЬ
        |    ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
        //|    ЦеныНоменклатуры.ВидЦены КАК ВидЦены,
        |    ЦеныНоменклатуры.Цена КАК Цена,
        |    ЗапросОстатки.Количество КАК Количество
        |ИЗ
        |    ЗапросОстатки КАК ЗапросОстатки
        |ЛЕВОЕ СОЕДИНЕНИЕ    
        |    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаВыбор, Номенклатура В (&Остатки)) КАК ЦеныНоменклатуры
        |ПО
        |    ЗапросОстатки.Номенклатура = ЦеныНоменклатуры.Номенклатура";
    
    Запрос2.УстановитьПараметр("ДатаВыбор", Новый Граница (НачалоДня(Объект.ДатаО), ВидГраницы.Включая));
    Запрос2.УстановитьПараметр("Остатки", РезультатЗапроса);
    РезультатЗапроса2 = Запрос2.Выполнить().Выгрузить();

Полюбому делать 3 запроса? Первый для получения остатков и помещения в виртуальную таблицу, второй для получения списка номенклатуры, третий для получения цен и объединения,
или 2 запроса... в которых 1й и 3й совмещен и отдельно получается список номенклатуры?
   brenli
 
1 - 23.08.20 - 17:05
Все решил 2 запросами

    МенеджерВТ = Новый МенеджерВременныхТаблиц;
    Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
        |    ВЫРАЗИТЬ(ТоварыНаСкладахОстатки.КоличествоОстаток КАК ЧИСЛО(15,3)) КАК Количество
        |ПОМЕСТИТЬ
        |    ЗапросОстатки
        |ИЗ
        |    РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаВыбор, Склад= &СкладВыбор) КАК ТоварыНаСкладахОстатки";
    
    Запрос.УстановитьПараметр("ДатаВыбор", Новый Граница (НачалоДня(Объект.ДатаО), ВидГраницы.Включая));
    Запрос.УстановитьПараметр("СкладВыбор", Объект.Склад);
    
    РезультатЗапроса = Запрос.Выполнить();
        
    Запрос2 = Новый Запрос;
    Запрос2.МенеджерВременныхТаблиц = МенеджерВТ;
    Запрос2.Текст = 
        "ВЫБРАТЬ
        |    ЗапросОстатки.Номенклатура КАК Номенклатура,
    //    |    ЦеныНоменклатуры.ВидЦены КАК ВидЦены,

        |    ЦеныНоменклатуры.Цена КАК Цена,
        |    ЗапросОстатки.Количество КАК Количество
        |ИЗ
        |    ЗапросОстатки КАК ЗапросОстатки
        |ЛЕВОЕ СОЕДИНЕНИЕ    
        |    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаВыбор, Номенклатура В (
        |             ВЫБРАТЬ
        |                ЗапросОстатки.Номенклатура КАК Номенклатура
        |            ИЗ
        |                ЗапросОстатки) И  ВидЦены = &ВидЦены) КАК ЦеныНоменклатуры
        |
        |ПО
        |    ЗапросОстатки.Номенклатура = ЦеныНоменклатуры.Номенклатура";
    
    Запрос2.УстановитьПараметр("ДатаВыбор", Новый Граница (НачалоДня(Объект.ДатаО), ВидГраницы.Включая));
    Запрос2.УстановитьПараметр("ВидЦены", Объект.ВидЦены);
    РезультатЗапроса2 = Запрос2.Выполнить().Выгрузить();
   МимохожийОднако
 
2 - 23.08.20 - 19:49
для подобных случаев придумали пакетные запросы
   Kassern
 
3 - 24.08.20 - 11:42
А что мешало сделать так?
ВЫБРАТЬ
    ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
    ТоварыНаСкладахОстатки.ВНаличииОстаток КАК ВНаличииОстаток
ПОМЕСТИТЬ Остатки
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    Остатки.Номенклатура КАК Номенклатура,
    Остатки.ВНаличииОстаток КАК ВНаличииОстаток,
    ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена
ИЗ
    Остатки КАК Остатки
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаВыбор, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних
        ПО Остатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.