Дублирование строк в результате запроса. Как объединить?

1. bajen 1 19.12.24 07:21 Сейчас в теме
УТ 10.3.73.3
Нужно получить информацию о заказа покупателя и оплатам, возвратам и отгрузкам по ним

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

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	тОстаткиЗаказов.ЗаказПокупателя КАК ЗаказПокупателя,
	тОстаткиЗаказов.ПриходДСБезНал КАК ПриходДСБезНал,
	тОстаткиЗаказов.ПриходДСНал КАК ПриходДСНал,
	тОстаткиЗаказов.ВозвратДСБезНал КАК ВозвратДСБезНал,
	тОстаткиЗаказов.ВозвратДСНал КАК ВозвратДСНал,
	тОстаткиЗаказов.РеализацияСумма,
	тОстаткиЗаказов.ВозвратТоваров
ИЗ
	тОстаткиЗаказов КАК тОстаткиЗаказов

СГРУППИРОВАТЬ ПО
	тОстаткиЗаказов.ЗаказПокупателя,
	тОстаткиЗаказов.ПриходДСБезНал,
	тОстаткиЗаказов.ПриходДСНал,
	тОстаткиЗаказов.ВозвратДСБезНал,
	тОстаткиЗаказов.ВозвратДСНал,
	тОстаткиЗаказов.РеализацияСумма,
	тОстаткиЗаказов.ВозвратТоваров
Показать



В результате строки с заказами дублируются в зависимости от количества дополнительных документов по нему
Как сделать что бы было один заказ - одна строка?
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
6. user2107191 19.12.24 08:06 Сейчас в теме
Для этого придумали объединение, а не соединение.
А за соединение виртуальных таблиц - гнать надо этими ссамыми тряпками до самой Абазы.
NicolasCage; bajen; nomad_irk; +3 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
7. nomad_irk 80 19.12.24 08:22 Сейчас в теме
(1) решение "в лоб":
ВЫБРАТЬ
    тОстаткиЗаказов.ЗаказПокупателя КАК ЗаказПокупателя,
    СУММА(тОстаткиЗаказов.ПриходДСБезНал) КАК ПриходДСБезНал,
    СУММА(тОстаткиЗаказов.ПриходДСНал) КАК ПриходДСНал,
    СУММА(тОстаткиЗаказов.ВозвратДСБезНал) КАК ВозвратДСБезНал,
    СУММА(тОстаткиЗаказов.ВозвратДСНал) КАК ВозвратДСНал,
    тОстаткиЗаказов.РеализацияСумма,
    тОстаткиЗаказов.ВозвратТоваров
ИЗ
    тОстаткиЗаказов КАК тОстаткиЗаказов

СГРУППИРОВАТЬ ПО
    тОстаткиЗаказов.ЗаказПокупателя,
    тОстаткиЗаказов.РеализацияСумма,
    тОстаткиЗаказов.ВозвратТоваров
Показать


Правильное решение - в (6).
2. gddonline 19.12.24 07:27 Сейчас в теме
Он так отображается потому что Групировка по числовым полям идет, уберите ее, и должно нормально все стать.
3. bajen 1 19.12.24 07:28 Сейчас в теме
(2) Не помагло, дублей стало еще больше
4. gddonline 19.12.24 07:34 Сейчас в теме
(3)
ВЫБРАТЬ
    тОстаткиЗаказов.ЗаказПокупателя КАК ЗаказПокупателя,
    Сумма(тОстаткиЗаказов.ПриходДСБезНал) КАК ПриходДСБезНал,
    Сумма(тОстаткиЗаказов.ПриходДСНал) КАК ПриходДСНал,
    Сумма(тОстаткиЗаказов.ВозвратДСБезНал КАК ВозвратДСБезНал),
    Сумма(тОстаткиЗаказов.ВозвратДСНал) КАК ВозвратДСНал,
    Сумма(тОстаткиЗаказов.РеализацияСумма),
    тОстаткиЗаказов.ВозвратТоваров
ИЗ
    тОстаткиЗаказов КАК тОстаткиЗаказов

СГРУППИРОВАТЬ ПО
    тОстаткиЗаказов.ЗаказПокупателя,
    тОстаткиЗаказов.ВозвратТоваров
Показать


так сделали?
5. bajen 1 19.12.24 08:02 Сейчас в теме
(4)
ВЫБРАТЬ
тОстаткиЗаказов.ЗаказПокупателя КАК ЗаказПокупателя,
Сумма(тОстаткиЗаказов.ПриходДСБезНал) КАК ПриходДСБезНал,
Сумма(тОстаткиЗаказов.ПриходДСНал) КАК ПриходДСНал,
Сумма(тОстаткиЗаказов.ВозвратДСБезНал КАК ВозвратДСБезНал),
Сумма(тОстаткиЗаказов.ВозвратДСНал) КАК ВозвратДСНал,
Сумма(тОстаткиЗаказов.РеализацияСумма),
тОстаткиЗаказов.ВозвратТоваров
ИЗ
тОстаткиЗаказов КАК тОстаткиЗаказов

СГРУППИРОВАТЬ ПО
тОстаткиЗаказов.ЗаказПокупателя,
тОстаткиЗаказов.ВозвратТоваров
Показать


Так в одну строчку, но суммы задвоились
6. user2107191 19.12.24 08:06 Сейчас в теме
Для этого придумали объединение, а не соединение.
А за соединение виртуальных таблиц - гнать надо этими ссамыми тряпками до самой Абазы.
NicolasCage; bajen; nomad_irk; +3 Ответить
10. NicolasCage 19.12.24 11:31 Сейчас в теме
(6) Могли бы вы подробнее объяснить этот момент: почему для виртуальных таблиц нужно делать объединение?
11. user2107191 19.12.24 12:07 Сейчас в теме
(10) Я разве такое говорил? Я всего лишь сказал, что не надо делать соединения с виртуальными таблицами.

Но если интересно, то вот: https://its.1c.ru/db/metod8dev/content/5842/hdoc
NicolasCage; +1 Ответить
12. NicolasCage 19.12.24 15:40 Сейчас в теме
8. bajen 1 19.12.24 09:08 Сейчас в теме
ВЫБРАТЬ РАЗРЕШЕННЫЕ
	ЗаказыПокупателейОстаткиИОбороты.ЗаказПокупателя КАК ЗаказПокупателя,
	0 КАК ПриходДСБезНал,
	0 КАК ПриходДСНал,
	0 КАК ВозвратДСБезНал,
	0 КАК ВозвратДСНал,
	ВЫБОР
		КОГДА ЗаказыПокупателейОстаткиИОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
			ТОГДА ЗаказыПокупателейОстаткиИОбороты.СуммаВзаиморасчетовРасход
		ИНАЧЕ 0
	КОНЕЦ КАК РеализацияСумма,
	ВЫБОР
		КОГДА ЗаказыПокупателейОстаткиИОбороты.Регистратор ССЫЛКА Документ.ВозвратТоваровОтПокупателя
			ТОГДА ЗаказыПокупателейОстаткиИОбороты.СуммаВзаиморасчетовРасход
		ИНАЧЕ 0
	КОНЕЦ КАК ВозвратТоваров
ПОМЕСТИТЬ тОстаткиЗаказов
ИЗ
	РегистрНакопления.ЗаказыПокупателей.ОстаткиИОбороты(, , Регистратор, , ЗаказПокупателя ССЫЛКА Документ.ЗаказПокупателя) КАК ЗаказыПокупателейОстаткиИОбороты

ОБЪЕДИНИТЬ ВСЕ

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

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	тОстаткиЗаказов.ЗаказПокупателя КАК ЗаказПокупателя,
	СУММА(тОстаткиЗаказов.ПриходДСБезНал) КАК ПриходДСБезНал,
	СУММА(тОстаткиЗаказов.ПриходДСНал) КАК ПриходДСНал,
	СУММА(тОстаткиЗаказов.ВозвратДСБезНал) КАК ВозвратДСБезНал,
	СУММА(тОстаткиЗаказов.ВозвратДСНал) КАК ВозвратДСНал,
	СУММА(тОстаткиЗаказов.РеализацияСумма) КАК РеализацияСумма,
	СУММА(тОстаткиЗаказов.ВозвратТоваров) КАК  ВозвратТоваров
ИЗ
	тОстаткиЗаказов КАК тОстаткиЗаказов

СГРУППИРОВАТЬ ПО
	тОстаткиЗаказов.ЗаказПокупателя,
	тОстаткиЗаказов.ВозвратТоваров
Показать


Вот такой вариант вроде заработал
9. user2107191 19.12.24 09:16 Сейчас в теме
(8) Да, именно так.
Я бы еще и от использования временной таблицы отказался в пользу вложенного запроса.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот