Имя: Пароль:
1C
1C 7.7
v7: Вывод данных из двух запросов
0 _Alex1984
 
06.04.16
07:13
Добрый день!
Подскажите пожалуйста, как мне вывести данные в таблицу из двух документов запросом.

_________________________________________________________________________________________________
Агент                    |         Количество, кг|    Сумма, руб.    |Всего с НДС, руб.|Реализация(Количество)
ИВАНОВ ИВАН ИВАНОВИЧ    |    122.550       |    15524.24    |15547.85         | ??????
________________________|_____________________|_________________|_________________|_______________

Есть такой код, который выводит данные в таблицу запросом из документа Поступление Товаров, а как мне плюс к этому запросу добавить другой запрос который будет брать данные из Документа Реализация Продукции и выводить в столбец рядом. Т.е. в таблице отображается информация сколько вернулось товара (Количество, Сумма, ...), а еще нужна информация сколько было реализовано этим агентом товара? Надеюсь понятно объяснил). Заранее спасибо за ответ!

//*******************************************
// Процедура генерации запроса ВозвратМенеджерКонтрагент.
//
Процедура ВозвратМенеджерКонтрагент()    
    Перем Запрос, ТекстЗапроса, Таб;
    ПодготовитьУсловия();
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(ВозвратМенеджерКонтрагент)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |Договор = Документ.ПоступлениеТоваров.Договор.Владелец;
    |ВидДоговора = Документ.ПоступлениеТоваров.Договор.ВидДоговора;
    |Количество = Документ.ПоступлениеТоваров.Количество;
    |ЕдиницаИзмерения = Документ.ПоступлениеТоваров.ЕдиницаИзмерения;
    |Сумма = Документ.ПоступлениеТоваров.Сумма;
    |Всего = Документ.ПоступлениеТоваров.Всего;
    |ПричинаВозврата = Документ.ПоступлениеТоваров.ПричинаВозврата;
    |Агент = Документ.ПоступлениеТоваров.Договор.Владелец.Агент;
    |Товар = Документ.ПоступлениеТоваров.Товар;
    |ТоварНоменкл = Документ.ПоступлениеТоваров.Товар;";
    Если флГрНоменклатуру=1 Тогда
        ТекстЗапроса=ТекстЗапроса+"
        |ВозврПродукция = Документ.ПоступлениеТоваров.ВозврПродукция.Родитель;
        |";
    Иначе
        ТекстЗапроса=ТекстЗапроса+"
        |ВозврПродукция = Документ.ПоступлениеТоваров.ВозврПродукция;
        |";
    КонецЕсли;

    ТекстЗапроса=ТекстЗапроса+"
    |Функция ФСумма = Сумма(Сумма);
    |Функция ВсегоСумма = Сумма(Всего);
    |Функция КоличествоСумма = Сумма(глПолучитьБазовоеКоличество(Количество,ЕдиницаИзмерения));
    |Группировка Агент без групп;
    |Группировка Договор без групп;
    |Группировка Товар без групп;
    |Группировка ПричинаВозврата без групп;
    |Группировка ВозврПродукция без групп;"+УслЗапроса;

    ;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;

    // Подготовка к заполнению выходных форм данными запроса
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("ВозвратМенеджерКонтрагент");
    // Заполнение полей "Заголовок"
    Таб.ВывестиСекцию("Заголовок");
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    Пока Запрос.Группировка(1) = 1 Цикл
        // Заполнение полей Агент
        Таб.ВывестиСекцию("Агент");
        Пока Запрос.Группировка(2) = 1 Цикл
            // Заполнение полей Договор
            Таб.ВывестиСекцию("Договор");
            Пока Запрос.Группировка(3) = 1 Цикл
                // Заполнение полей Товар
                Таб.ВывестиСекцию("Товар");
                Пока Запрос.Группировка(4) = 1 Цикл
                    // Заполнение полей ПричинаВозврата
                    Таб.ВывестиСекцию("ПричинаВозврата");
                    Пока Запрос.Группировка(5) = 1 Цикл
                    
                        Таб.ВывестиСекцию("ВозврПродукция");
                    КонецЦикла;
                КонецЦикла;
            КонецЦикла;
        КонецЦикла;
    КонецЦикла;
    // Заполнение полей "Итого"
    Таб.ВывестиСекцию("Итого");
    // Вывод заполненной формы
    Таб.ТолькоПросмотр(1);
    Таб.Показать("ВозвратМенеджерКонтрагент", "");
КонецПроцедуры  

//*******************************************

Мне нужно, добавить к этой таблице столбец в котором будет информация браться из Документа РеализацияПродукции
Типа вот так:

    "//{{ЗАПРОС(НовыйЗапрос)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |Контрагент = Документ.РеализацияПродукции.Контрагент;
    |Количество = Документ.РеализацияПродукции.Количество;
    |Функция КоличестСумма = Сумма(Количество);
    |Группировка Контрагент;
    |"//}}ЗАПРОС
1 gSha
 
06.04.16
07:19
вообще даже в 7 ке не очень правильно брать данные из документов - все же лучше из регистров.
потом представь что ты умножаешь две таблицы поступлений и реализаций и прикинь что на выходе получится и как это выводить..
поэтому обычно данные собирались в таблицу значений и уже оттуда выводились в таких случаях.
2 gSha
 
06.04.16
07:21
вообще в 7 ке есть метод позиционирования внутри запроса .. так же можешь в нужный момент в цикле первого запроса гулять по второму - что там со скоростью будет не помню.
3 VladZ
 
06.04.16
07:28
Через запятую

|Контрагент = Документ.ПоступлениеТоваров.Договор.Владелец, Документ.РеализацияПродукции.Контрагент;

|КоличествоПоступление = Документ.ПоступлениеТоваров.Количество;
|КоличествоРеализация = Документ.РеализацияПродукции.Количество;

и т.д.
4 varelchik
 
06.04.16
09:47
можешь сделать по аналогии как я выбираю контрагента из Расходных и Приходных:
    |select
    |t.idd IDD,
    |sum(t.стоимость)/sum(t.остаток)*"+Курс+" Цена
    |from(
    |select
    |$Товары.IDD IDD,
    |COALESCE($РасходнаяНакладная.Контрагент,$ПриходнаяНакладная.Контрагент) Контрагент,
    |$Рег.Стоимость Стоимость,
    |$Рег.ОстатокТовара Остаток
    |from $Регистр.ПартииТоваров Рег (nolock)
    |inner join _1sjourn j (nolock) on j.iddoc=Рег.iddoc
    |inner join $Справочник.Номенклатура Товары (nolock) on Товары.id=$Рег.Товар
    |left join $Документ.РасходнаяНакладная РасходнаяНакладная (nolock) on РасходнаяНакладная.iddoc=Рег.iddoc
    |left join $Документ.ПриходнаяНакладная ПриходнаяНакладная(nolock) on ПриходнаяНакладная.iddoc=Рег.iddoc
    |inner join _1sjourn j1 (nolock) on j1.iddoc=right($Рег.ПрихДокумент,9)
    |WHERE
    |j.date_time_iddoc BETWEEN :НачДата AND :КонДата~
    |and
    |Рег.debkred=1
    |and
    |j.iddocdef in($ВидДокумента.РасходнаяНакладная,$ВидДокумента.ПриходнаяНакладная)
5 _Alex1984
 
06.04.16
10:46
Спасибо за советы.
Пробовал способ VladZ, но результатов не принес. Возможно будет работать в сочетании со способом gSha позиционирование.
6 Злопчинский
 
06.04.16
12:02
(0) не надо изобретать, юзай в тис "Отчет по продажам"
ты там что, задания припоступлении на работу решаешь? или велосипед изобретаешь?
7 Mikeware
 
06.04.16
12:11
(5) можешь еще попробовать писать через строчку. Или сменить шрифт в конфигураторе...
2 + 2 = 3.9999999999999999999999999999999...