как решить проблему дублирования ячеек при соединении в запросе

1. irbis13 19.03.15 10:55 Сейчас в теме
Только учусь, поэтому не пинайте сильно.

Клиентом была поставлена задача, сделать отчет, который выводил бы взаиморасчеты с контрагентами исходя из периода событий (часть договоров предусматривает отсрочку платежа по 14 дней, часть по 30 и т.д.).



Но появилась 1 проблема, которую я не знаю как решить. Если запрос находит по первой таблице контрагента и в нем было 3 движения(3 регистратора), то при соединении к нему 2 таблици, которая находит по этому контрагенту только одно движение в указанный период(1 регистратор), в соединенной таблице в колонке регистратор2 создаються 3 идентичные строки. Я не могу придумать, что бы при соединении создавался 1 элемент и 2 null.

Понимаю что проблема для Вас элементарная, но я не вижу выхода.

мой запрос который вставляю в скд

 ВЫБРАТЬ
	ВЫБОР
		КОГДА ЕСТЬNULL(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОборо­ты1.Контрагент, 0) <> 0
			ТОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОборо­ты1.Контрагент
		ИНАЧЕ ВложенныйЗапрос.Контрагент
	КОНЕЦ КАК контрагент,
	ВЫБОР
		КОГДА ЕСТЬNULL(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОборо­ты1.ДоговорКонтрагента.Номер, 0) <> 0
			ТОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОборо­ты1.ДоговорКонтрагента.Номер
		ИНАЧЕ ВложенныйЗапрос.ДоговорКонтрагентаНомер
	КОНЕЦ КАК ДоговорКонтрагентаНомер,
	ВЫБОР
		КОГДА ЕСТЬNULL(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОборо­ты1.Контрагент.ОсновнойМенеджерПокупателя, 0) <> 0
			ТОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОборо­ты1.Контрагент.ОсновнойМенеджерПокупателя
		ИНАЧЕ ВложенныйЗапрос.ОсновнойМенеджерПокупателя
	КОНЕЦ КАК ОсновнойМенеджерПокупателя,
	ВложенныйЗапрос.ДокументРасчетовСКонтрагентом КАК Регистратор14дней,
	ВложенныйЗапрос.СуммаВзаиморасчетовКонечныйОстаток КАК Остаток14дней,
	ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОборо­ты1.Сделка,
	ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОборо­ты1.ДокументРасчетовСКонтрагентом КАК Регистратор15_30дней,
	ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОборо­ты1.СуммаВзаиморасчетовКонечныйОстаток КАК Остаток15_30дней
ИЗ
	РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.ОстаткиИОбороты(
			,
			&ДатаКон,
			,
			ДвиженияИГраницыПериода,
			ДокументРасчетовСКонтрагентом.Дата <= ДОБАВИТЬКДАТЕ(&ДатаКон, ДЕНЬ, -15)
				И ДокументРасчетовСКонтрагентом.Дата >= ДОБАВИТЬКДАТЕ(&ДатаКон, ДЕНЬ, -30)) КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОборо­ты1
		ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОборо­ты.Контрагент КАК Контрагент,
			ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОборо­ты.ДоговорКонтрагента.Номер КАК ДоговорКонтрагентаНомер,
			ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОборо­ты.Контрагент.ОсновнойМенеджерПокупателя КАК ОсновнойМенеджерПокупателя,
			ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОборо­ты.ДокументРасчетовСКонтрагентом КАК ДокументРасчетовСКонтрагентом,
			ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОборо­ты.СуммаВзаиморасчетовКонечныйОстаток КАК СуммаВзаиморасчетовКонечныйОстаток
		ИЗ
			РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.ОстаткиИОбороты(
					,
					&ДатаКон,
					,
					,
					ДокументРасчетовСКонтрагентом.Дата <= &ДатаКон
						И ДокументРасчетовСКонтрагентом.Дата >= ДОБАВИТЬКДАТЕ(&ДатаКон, ДЕНЬ, -14)) КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОборо­ты) КАК ВложенныйЗапрос
		ПО ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОборо­ты1.Контрагент = ВложенныйЗапрос.Контрагент
Показать



Заранее спс.
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Xershi 1489 19.03.15 10:59 Сейчас в теме
(1) irbis13, представление в виде дерева с выводом итога в нужной последовательности + обход результат запроса по группировкам.

Если конечно я вас правильно понял.
3. PetroP 19.03.15 11:32 Сейчас в теме
(1) irbis13, сделать на СКД не хотите?
4. 32ops 192 19.03.15 12:19 Сейчас в теме
По мне так тут не нужно соединение, нужны два поля остатков, одно остаток с просрочкой до 15 дней, другое от 15 до 30.
Сами поля вычисляются выбором:
Выбор когда ДокументРасчетовСКонтрагентом.Дата <= ДОБАВИТЬКДАТЕ(&ДатаКон, ДЕНЬ, -15)
И ДокументРасчетовСКонтрагентом.Дата >= ДОБАВИТЬКДАТЕ(&ДатаКон, ДЕНЬ, -30) Тогда ВложенныйЗапрос.СуммаВзаиморасчетовКонечныйОстаток Иначе 0 конец
5. irbis13 19.03.15 12:32 Сейчас в теме
32ops
я думал над этим, скажите, не будет ли ошибкой что в разные поля система будет тянуть одни и те же данные ?

ведь в первой колонке будет -
Тогда ВложенныйЗапрос.СуммаВзаиморасчетовКонечныйОстаток Иначе 0 конец
и во второй -
Тогда ВложенныйЗапрос.СуммаВзаиморасчетовКонечныйОстаток Иначе 0 конец
а фактически все будет идти с одной и той же таблици, то есть данные будут одинаковы.
6. 32ops 192 19.03.15 12:46 Сейчас в теме
С точки зрения запроса без разницы, главное чтобы логически правильно для отчета было.
Оставьте свое сообщение

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