Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 мар 2024, 03:26

Объединение 2 запросов в 1 по номенклатуре

Автор Руслан Ханов, 11 янв 2016, 19:30

0 Пользователей и 1 гость просматривают эту тему.

Руслан Ханов

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

        КонецЦикла;
    КонецЕсли;

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

    КонецЕсли;


Если можно с кодом пожалуйста,заранее благодарен

cska-fanat-kz

Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

vitasw

ну, или так:
"ВЫБРАТЬ
| ЗаказыНаПроизводство.ЗаказНаПроизводство,
| СУММА(ВЫБОР
| КОГДА ЗаказыНаПроизводство.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
| ТОГДА ЗаказыНаПроизводство.Количество
| ИНАЧЕ 0
| КОНЕЦ) КАК КоличествоПриход,
| СУММА(ВЫБОР
| КОГДА ЗаказыНаПроизводство.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
| ТОГДА ЗаказыНаПроизводство.Количество
| ИНАЧЕ 0
| КОНЕЦ) КАК КоличествоРасход
|ИЗ
| РегистрНакопления.ЗаказыНаПроизводство КАК ЗаказыНаПроизводство
|
|СГРУППИРОВАТЬ ПО
| ЗаказыНаПроизводство.ЗаказНаПроизводство"

LexaK

а по чему не хотите использовать (не можете?) виртуальную таблицу Обороты? запрос гораздо проще выглядит (и по уверениям 1С быстрее :D)
судя по всему вид вашего регистра накопления ЗаказыНаПроизводство  - Остатки.
такой запрос должен работать

    Запрос = Новый  Запрос;
    Запрос.Текст = "
        |ВЫБРАТЬ
        |    //Рег.ЗаказНаПроизводство, //это поле по идее не нужно, в вашем цикле не используется
        |    Рег.Номенклатура,
        |    Рег.КоличествоПриход,
        |    Рег.КоличествоРасход
        |ИЗ
        |    РегистрНакопления.ЗаказыНаПроизводство.Обороты(,,,ЗаказНаПроизводство = &Заказ) КАК Рег
        |";

        Запрос.УстановитьПараметр("Заказ",ЗаказНаПроизводство);
        Таблица = Запрос.Выполнить().Выбрать();
       
        //Если Таблица.Количество()> 0 Тогда  - можно не проверять количество,
        //так как ниже идет выборка Следующий, если запрос не вернет данных, у вас цикл по любому не отработает
        Пока Таблица.Следующий() Цикл
            НоваяСтрока = ТабличноеПоле1.Добавить();
            НоваяСтрока.Номенклатура  = Таблица.Номенклатура;
            НоваяСтрока.ВЗаказе       = Таблица.КоличествоПриход;
            НоваяСтрока.ВыпущеноЦехом = Таблица.КоличествоРасход;
        КонецЦикла;



понятное дело, у меня вашей базы нет, проверить запрос не могу, поэтому могут быть ошибки, попробуйте его сами.
если помогло нажмите: Спасибо!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск