Дубли при соединении таблиц в запросе

1. usershmuser 02.09.24 17:10 Сейчас в теме
Всех с днем знаний!
Помогите разобраться в языке запросов.
Написал запрос
ВЫБРАТЬ
	РеализацияТоваровУслуг.РасшЛом_ДокКомплектации КАК РасшЛом_ДокКомплектации,
	КомплектацияНоменклатурыКомплектующие.Номенклатура КАК Номенклатура,
	КомплектацияНоменклатурыКомплектующие.Количество КАК Количество,
	ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура1,
	ПоступлениеТоваровУслугТовары.Количество КАК Количество1
ИЗ
Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.КомплектацияНоменклатуры.Комплектующие КАК КомплектацияНоменклатурыКомплектующие
		ПО (РеализацияТоваровУслуг.РасшЛом_ДокКомплектации = КомплектацияНоменклатурыКомплектующие.Ссылка)
		ПОЛНОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
		ПО (КомплектацияНоменклатурыКомплектующие.Номенклатура = ПоступлениеТоваровУслугТовары.Номенклатура)
			И (РеализацияТоваровУслуг.ДокПост = ПоступлениеТоваровУслугТовары.Ссылка)
ГДЕ
	РеализацияТоваровУслуг.Проведен = ИСТИНА	

УПОРЯДОЧИТЬ ПО
	РасшЛом_ДокКомплектации,
	Номенклатура
Показать


Делаю запрос для сравнения двух таблиц, по мануалам подходит полное соединение.
Если в документе есть дубль номенклатуры (а они бывают постоянно, разные характеристики и тех процесс), то получаются дубли в результате, либо перекрестное соединение.
Как от этого избавиться, либо заменить дубли на NULL например?
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
6. lone_mayson 52 02.09.24 17:36 Сейчас в теме
Может, надо сгруппировать сначала комплектующие?

ВЫБРАТЬ
    РеализацияТоваровУслуг.РасшЛом_ДокКомплектации КАК РасшЛом_ДокКомплектации,
    РеализацияТоваровУслуг.ДокПост КАК ДокПост,
    КомплектацияНоменклатурыКомплектующие.Номенклатура КАК Номенклатура,
    СУММА(КомплектацияНоменклатурыКомплектующие.Количество) КАК Количество
ПОМЕСТИТЬ ВтКомплектующие
ИЗ
	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.КомплектацияНоменклатуры.Комплектующие КАК КомплектацияНоменклатурыКомплектующие
    ПО (РеализацияТоваровУслуг.РасшЛом_ДокКомплектации = КомплектацияНоменклатурыКомплектующие.Ссылка)
СГУППИРОВАТЬ ПО
	РеализацияТоваровУслуг.РасшЛом_ДокКомплектации,
	РеализацияТоваровУслуг.ДокПост,
    КомплектацияНоменклатурыКомплектующие.Номенклатура
ГДЕ
    РеализацияТоваровУслуг.Проведен	
;
    
ВЫБРАТЬ
    ВтКомплектующие.РасшЛом_ДокКомплектации КАК РасшЛом_ДокКомплектации,
    ВтКомплектующие.Номенклатура КАК Номенклатура,
    ВтКомплектующие.Количество КАК Количество,
    ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура1,
    ПоступлениеТоваровУслугТовары.Количество КАК Количество1
ИЗ
	ВтКомплектующие КАК ВтКомплектующие
        ПОЛНОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
        ПО (ВтКомплектующие.Номенклатура = ПоступлениеТоваровУслугТовары.Номенклатура)
            И (ВтКомплектующие.ДокПост = ПоступлениеТоваровУслугТовары.Ссылка)
            
УПОРЯДОЧИТЬ ПО
    РасшЛом_ДокКомплектации,
    Номенклатура
Показать


upd1: (5) А, так понял, что слева должны быть все строки.
upd2: Как вариант, наверно, можно сделать итоги, если уж прям все строки комплектующих нужны:
типа ИТОГИ ПО РеализацияТоваровУслуг.ДокПост, ПоступлениеТоваровУслугТовары.Номенклатура (РеализацияТоваровУслуг.ДокПост вынести в выборку).
Визуально понятней будет, что комплектующие относятся к одному товару поступления.
usershmuser; electr1chka; +2 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. SlavaKron 02.09.24 17:24 Сейчас в теме
(1)
разные характеристики и тех процесс
Добавить условие связи по этим реквизитам, очевидно.
7. starjevschik 02.09.24 18:23 Сейчас в теме
(1)
Помогите разобраться в языке запросов

язык SQL (а в запросах 1с практически он и есть с некоторыми странностями) это штука такая, что про нее пишут учебники на сотни страниц. Как можно "помочь разобраться" в таком непростом предмете в формате форума? Тут нужен хороший курс с хорошим преподом. После прохождения курса, если будут появляться некоторые небольшие вопросы, можно и в форуме спросить...
8. usershmuser 03.09.24 08:37 Сейчас в теме
(5) Да, именно так.

(6) И слева, и справа должны быть все строки. Сгруппировать можно по номенклатуре и доп признаку (не критично), пробовал без виртуальной таблицы, но дубли начинают группироваться тоже. Уже задумался о виртуальной таблице.

(7)
хороший курс

Нужно начинать с малого, записался на профессионала с 1.10. Самообучение не так эффективно как кажется
10. starjevschik 03.09.24 09:09 Сейчас в теме
(8)
записался на профессионала

курсы 1с не учат запросам. Парадоксально, но факт. Покажут, где кнопка конструктора запросов, но это же не обучение SQL.Курсы 1с вообще нужны только франчам, для программера это пустая трата ресурсов ой этого я не говорил
12. usershmuser 03.09.24 09:30 Сейчас в теме
(11)
надо значит надо

По такому принципу и работаю))) я во франче не работаю, а работу программистом (даже калымы) желательно подтверждать чем то, как говориться "без бумажки ты букашка". Вобщем нужно как то развиваться с документальным подтверждением)))

(10) SQL на буржуйском, плохо воспринимаю, с 1с попроще. Как подопрет (как сейчас), буду развиваться.
Главное - выполнение поставленных задач.
2. electr1chka 02.09.24 17:22 Сейчас в теме
Если нужно только избавиться от дублей, то просто используйте группировку.

А какая картина должна получиться?
4. usershmuser 02.09.24 17:30 Сейчас в теме
(2)
А какая картина должна получиться?

То, что на скрине: АКБ не слит - слева должно быть 2 позиции с разным количеством, справа 1 позиция с количеством. Ровно так, как в документах (с дублями, если они есть)
5. electr1chka 02.09.24 17:35 Сейчас в теме
(4) По описанию должно выглядеть так...
Прикрепленные файлы:
6. lone_mayson 52 02.09.24 17:36 Сейчас в теме
Может, надо сгруппировать сначала комплектующие?

ВЫБРАТЬ
    РеализацияТоваровУслуг.РасшЛом_ДокКомплектации КАК РасшЛом_ДокКомплектации,
    РеализацияТоваровУслуг.ДокПост КАК ДокПост,
    КомплектацияНоменклатурыКомплектующие.Номенклатура КАК Номенклатура,
    СУММА(КомплектацияНоменклатурыКомплектующие.Количество) КАК Количество
ПОМЕСТИТЬ ВтКомплектующие
ИЗ
	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.КомплектацияНоменклатуры.Комплектующие КАК КомплектацияНоменклатурыКомплектующие
    ПО (РеализацияТоваровУслуг.РасшЛом_ДокКомплектации = КомплектацияНоменклатурыКомплектующие.Ссылка)
СГУППИРОВАТЬ ПО
	РеализацияТоваровУслуг.РасшЛом_ДокКомплектации,
	РеализацияТоваровУслуг.ДокПост,
    КомплектацияНоменклатурыКомплектующие.Номенклатура
ГДЕ
    РеализацияТоваровУслуг.Проведен	
;
    
ВЫБРАТЬ
    ВтКомплектующие.РасшЛом_ДокКомплектации КАК РасшЛом_ДокКомплектации,
    ВтКомплектующие.Номенклатура КАК Номенклатура,
    ВтКомплектующие.Количество КАК Количество,
    ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура1,
    ПоступлениеТоваровУслугТовары.Количество КАК Количество1
ИЗ
	ВтКомплектующие КАК ВтКомплектующие
        ПОЛНОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
        ПО (ВтКомплектующие.Номенклатура = ПоступлениеТоваровУслугТовары.Номенклатура)
            И (ВтКомплектующие.ДокПост = ПоступлениеТоваровУслугТовары.Ссылка)
            
УПОРЯДОЧИТЬ ПО
    РасшЛом_ДокКомплектации,
    Номенклатура
Показать


upd1: (5) А, так понял, что слева должны быть все строки.
upd2: Как вариант, наверно, можно сделать итоги, если уж прям все строки комплектующих нужны:
типа ИТОГИ ПО РеализацияТоваровУслуг.ДокПост, ПоступлениеТоваровУслугТовары.Номенклатура (РеализацияТоваровУслуг.ДокПост вынести в выборку).
Визуально понятней будет, что комплектующие относятся к одному товару поступления.
usershmuser; electr1chka; +2 Ответить
9. usershmuser 03.09.24 09:07 Сейчас в теме
(6) Вектор направления с виртуальными таблицами принят. Попробовал твой код, немного подкорректировав он работает. В конкретном примере, что на скрине, с АКБ все красиво, а вот с алюминием дубль слева появляется, но тут необходимо вводить вторую виртуальную таблицу. Спасибо!
11. lone_mayson 52 03.09.24 09:15 Сейчас в теме
В качестве лирики
Я вообще не помню, чтобы в моё время какие-то курсы были. Пришёл во франч — через 2 недели проф. Потом через разумное время — специалист. Помогали, разумеется с подготовкой. К клиентам поначалу ездить тот ещё квест был: знаешь не знаешь — не волнует, надо значит надо.
13. usershmuser 03.09.24 10:02 Сейчас в теме
Еще раз спасибо lone_mayson!
ВЫБРАТЬ
    РеализацияТоваровУслуг.ДокПост КАК ДокПост,
    ПоступлениеТоваровУслугТовары.Ссылка КАК Ссылка,
    ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура1,
    СУММА(ПоступлениеТоваровУслугТовары.Количество) КАК Количество1
ПОМЕСТИТЬ ВтПоступления
ИЗ
   Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
   ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
   ПО РеализацияТоваровУслуг.ДокПост = ПоступлениеТоваровУслугТовары.Ссылка
ГДЕ
   РеализацияТоваровУслуг.Проведен  
   
СГРУППИРОВАТЬ ПО
	РеализацияТоваровУслуг.ДокПост,
	ПоступлениеТоваровУслугТовары.Ссылка,
    ПоступлениеТоваровУслугТовары.Номенклатура
   ;   
   ////////////////////////////////////////////////////////////­/////////////
   
ВЫБРАТЬ
    РеализацияТоваровУслуг.РасшЛом_ДокКомплектации КАК РасшЛом_ДокКомплектации,
    РеализацияТоваровУслуг.ДокПост КАК ДокПост,
    КомплектацияНоменклатурыКомплектующие.Номенклатура КАК Номенклатура,
    СУММА(КомплектацияНоменклатурыКомплектующие.Количество) КАК Количество
ПОМЕСТИТЬ ВтКомплектующие
ИЗ
    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.КомплектацияНоменклатуры.Комплектующие КАК КомплектацияНоменклатурыКомплектующие
    ПО (РеализацияТоваровУслуг.РасшЛом_ДокКомплектации = КомплектацияНоменклатурыКомплектующие.Ссылка)

ГДЕ
    РеализацияТоваровУслуг.Проведен

    
СГРУППИРОВАТЬ ПО
    РеализацияТоваровУслуг.РасшЛом_ДокКомплектации,
    РеализацияТоваровУслуг.ДокПост,
    КомплектацияНоменклатурыКомплектующие.Номенклатура
;
////////////////////////////////////////////////////////////­/////////////////////////////////////
    
ВЫБРАТЬ
    ВтКомплектующие.РасшЛом_ДокКомплектации КАК РасшЛом_ДокКомплектации,
    ВтКомплектующие.Номенклатура КАК Номенклатура,
    ВтКомплектующие.Количество КАК Количество,
    ВтПоступления.Номенклатура1 КАК Номенклатура1,
    ВтПоступления.Количество1 КАК Количество1
ИЗ
    ВтКомплектующие КАК ВтКомплектующие
        ПОЛНОЕ СОЕДИНЕНИЕ ВтПоступления КАК ВтПоступления
        ПО (ВтКомплектующие.Номенклатура = ВтПоступления.Номенклатура1)
            И (ВтКомплектующие.ДокПост = ВтПоступления.Ссылка)

УПОРЯДОЧИТЬ ПО
    РасшЛом_ДокКомплектации,
    Номенклатура
Показать


Доделал, все работает как нужно, механика понятна, осталось навести марафет
Оставьте свое сообщение

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