helpf.pro
Регистрация

v8: Как соединить два запроса для приведения к нужному виду

avo32
16.12.2013 16:22Прочитано: 4712
1С:Предприятие 8.1, конфигурация "Управление торговлей". Подскажите, пожалуйста. Стоит задача: получить таблицу долгов контрагентов с отдельными колонками по долгу за тару. Написал такой запрос:

Код 1C v 8.х
 ВЫБРАТЬ
Контрагенты.Ссылка,
ЕСТЬNULL(ВзаиморасчетыСКонтрагентамиОстатки.СуммаВзаиморасчетовОстаток, 0) КАК Поле1
ПОМЕСТИТЬ ОбщийДолг
ИЗ
Справочник.Контрагенты КАК Контрагенты
левое СОЕДИНЕНИЕ РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки(&ДатаСреза, ) КАК ВзаиморасчетыСКонтрагентамиОстатки
ПО Контрагенты.ОсновнойДоговорКонтрагента = ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента
ГДЕ
Контрагенты.Ссылка В(&Ссылка)
;
/////////////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Контрагенты.Ссылка,
ТоварыПереданныеОстатки.Номенклатура,
ЕСТЬNULL(ТоварыПереданныеОстатки.СуммаВзаиморасчетовОстаток, 0) КАК СуммаЗаТару
ПОМЕСТИТЬ ДолгЗаТару
ИЗ
Справочник.Контрагенты КАК Контрагенты
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыПереданные.Остатки(&ДатаСреза, Номенклатура В (&Номенклатура)) КАК ТоварыПереданныеОстатки
ПО Контрагенты.Ссылка = ТоварыПереданныеОстатки.ДоговорКонтрагента.Владелец
ГДЕ
Контрагенты.Ссылка В(&Ссылка)


В таблицу ОбщийДолг попадают все необходимые контрагенты и сумма долга, во второй таблице ДолгЗаТару контрагенты и их долги за конкретный вид тары. Нужно объединить таблицы так чтобы получить результирующую таблицу вида:
контрагент, общий долг, долг за тару1, долг за тару2, долг за тару3.
Спасибо большое.
Изменено 16.12.13 20:56:56
Yandex
Возможно, вас также заинтересует
Реклама на портале
DJ_Serega
16.12.2013 16:39Ответ № 1
А сейчас как выводит?
avo32
16.12.2013 16:45Ответ № 2
Сейчас выводит в первой таблице:
контагент1, долг
контагент2, долг
контагент3, долг
...
во второй таблице:
контрагент1, "",0
контрагент2, тара1,100
контрагент2, тара2,10
нужно вторую развернуть и присоединить к первой
avo32
16.12.2013 20:56Ответ № 3
Можно переделать второй запрос вот таким образом:
Код 1C v 8.х
 
/////////////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Долг.Ссылка,
Долг.Поле1 КАК ДолгВсего,
ЕСТЬNULL(ТоварыПереданныеОстатки.СуммаВзаиморасчетовОстаток, 0) КАК СуммаЗаТару
ИЗ
ОбщийДолг КАК Долг
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыПереданные.Остатки(&ДатаСреза, Номенклатура = &Тара1) КАК ТоварыПереданныеОстатки
ПО Долг.Ссылка = ТоварыПереданныеОстатки.ДоговорКонтрагента.Владелец


Но так добавляется только конкретный вид тары, а четыре раза подряд получать остатки по регистру накопления не очень хочется )
Jonsony
17.12.2013 09:00Ответ № 4
ключевое слово "ОБЪЕДИНИТЬ", в 8-ке объединяет два запроса
avo32
17.12.2013 11:32Ответ № 5
Через "ОБЪЕДИНИТЬ" у меня не получилось привести результирующую таблицу к необходимому виду. Наиболее подходящий вид таблицы получил таким запросом:

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

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


Дальше выгружу в ТЗ и сверну ("Ссылка, ДолгВсего","СуммаЗаТару1, СуммаЗаТару2, СуммаЗаТару3, СуммаЗаТару4")
avo32
17.12.2013 13:34Ответ № 6
Который раз ищу подсказки у знающих людей, а в результате сам нахожу более - менее подходящее решение и делюсь с окружающими *06
Jonsony
17.12.2013 14:06Ответ № 7
(6) avo32, значит прогрессируешь, и не забывай - правильно заданный вопрос содержит более 50% ответа.

PS
вечером домой доберусь - кину код примера из книги где объединяют запросы

книга - вот эта
http://eduscan.net/shop/books/7105835
Изменено 17.12.13 14:13:03
avo32
17.12.2013 15:33Ответ № 8
(7) Jonsony, буду очень благодарен. Ну, а расти над собой, это вообще смысл жизни )
Jonsony
21.12.2013 21:36Ответ № 9
сорри, работа

вот тут (на этом сайте описано)
https://help1c.com/faq/view/765.html

и вот ещё
http://zapros-1c-8.ru/9-yazik-zaprosov-1c-8/15-U_nion
Подсказка: Вы получили ответ на свой вопрос - закройте вопрос!
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.