Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Объединение запросов
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
Leva
Здравствуйте, Уважаемые!

Помогите пожалуйста, как объединить два результата запросов в один.
Есть задача в которой нужно выводить отчет по движению товара за определенный период, а рядом с каждым товаром вывести отчет по его движению в прошлом году за тот же период.
Отчеты сделал, но как их теперь объединить по товару, чтобы был вид:
Артикул|Наименование|...............01.01.11-01.02.11..................|.....................01.01.12-01.02.12 .................... |
..................................| Нач. остаток |Приход|Расход|Кон. остаток| Нач. остаток |Приход|Расход|Кон. остаток|
5_kopeek
Можно использовать ТЗ для группирования результата, а можно при переборе значений первого запроса получать результаты из второго методом Получить(), позиционируясь на товаре первого запроса.
Примерно второй вариант выглядит так:
    Запрос1 = СоздатьОбъект("Запрос");
    ТекстЗапроса1 =
    "//{{ЗАПРОС(Запрос1)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |Товар = Регистр.ОстаткиТоваров.Товар;
    |ОстатокТовара = Регистр.ОстаткиТоваров.ОстатокТовара;
    |Функция НачОстТовара = НачОст(ОстатокТовара);
    ...
    |Группировка Товар;
    |"//}}ЗАПРОС
;
    Если Запрос1.Выполнить(ТекстЗапроса1) = 0 Тогда
        Возврат;
    КонецЕсли;
    
    Дата1=ДобавитьМесяц(ВыбНачПериода,-12);
    Дата2=ДобавитьМесяц(ВыбКонПериода,-12);
    
    Запрос2 = СоздатьОбъект("Запрос");
              ТекстЗапроса2 =
    "//{{ЗАПРОС(Запрос2)
    |Период с Дата1 по Дата2;
    |Товар = Регистр.ОстаткиТоваров.Товар;
    |ОстатокТовара = Регистр.ОстаткиТоваров.ОстатокТовара;
    |ФлагУчета=Регистр.ОстаткиТоваров.ФлагУчета;
    |Функция НачОстТовара = НачОст(ОстатокТовара);
    ...
    |Группировка Товар Все;
    |"//}}ЗАПРОС
;

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

    Таб = СоздатьОбъект("Таблица");

    Пока Запрос1.Группировка(1) = 1 Цикл
        Таб.ВывестиСекцию("Товар|Запрос1");
        Запрос2.Получить(Запрос1.Товар);
        Таб.ПрисоединитьСекцию("Товар|Запрос2");
    КонецЦикла;


Добавлю. Если нужно выводить и те товары, которые в текущем периоде не имели остатков/оборотов, а в прошлогоднем имели, то в первом запросе также необходимо для группировки указать ключевое слово Все. Чтобы избежать вывода строк с товарами, которые не имели итогов ни в каком периоде, можно добавить условие при формировании таблицы.
Ardi
ВЫБРАТЬ
    ЕСТЬNULL(ЗадолженностьЗаТООстаткиИОбороты.Квартира, ЗадолженностьЗаТООстаткиИОбороты1.Квартира) КАК Поле1,
    ЗадолженностьЗаТООстаткиИОбороты.ДолгНачальныйОстаток,
    ЗадолженностьЗаТООстаткиИОбороты.ДолгПриход,
    ЗадолженностьЗаТООстаткиИОбороты.ДолгРасход,
    ЗадолженностьЗаТООстаткиИОбороты.ДолгКонечныйОстаток,
    ЗадолженностьЗаТООстаткиИОбороты1.ДолгНачальныйОстаток КАК ДолгНачальныйОстаток1,
    ЗадолженностьЗаТООстаткиИОбороты1.ДолгПриход КАК ДолгПриход1,
    ЗадолженностьЗаТООстаткиИОбороты1.ДолгРасход КАК ДолгРасход1,
    ЗадолженностьЗаТООстаткиИОбороты1.ДолгКонечныйОстаток КАК ДолгКонечныйОстаток1
ИЗ
    РегистрНакопления.ЗадолженностьЗаТО.ОстаткиИОбороты(&НачТек, &КонТек, , , ) КАК ЗадолженностьЗаТООстаткиИОбороты1
        ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗадолженностьЗаТО.ОстаткиИОбороты(&НачПред, &КонПред, , , ) КАК ЗадолженностьЗаТООстаткиИОбороты
        ПО (ЗадолженностьЗаТООстаткиИОбороты.Квартира = ЗадолженностьЗаТООстаткиИОбороты1.Квартира)
5_kopeek
Ardi, 7.7 wink.gif
sava1
Ardi - запрос-то левый
И таблица не та, и периодичность не указана

По таблице - пардон
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.