Имя: Пароль:
1C
1С v8
Выбор значений из двух таблиц по условию
0 alexsergeevatmista
 
27.11.25
16:29
Есть две таблицы - левая и правая, в обеих есть одинаковые колонки "период, партнер, номенклатура, цена", но в левой ещё есть регистратор. Строки совпадают по первым трём полям, кроме цены. Выбираю всё из левой и хочу сделать так, чтобы для совпадающих строк (по первым трём полям) цена бралась из правой таблицы, иначе из левой. Как этого добиться?

Пытался через естьnull или отрицание условий в соединении, но не получается.

Вот запрос, который есть сейчас. Естественно, всё берёт из левой и совпадающие из правой.

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

СГРУППИРОВАТЬ ПО
    ВТ_МаксЦеныБезУчетаУпаковок.ПериодМесяц,
    ВТ_МаксЦеныБезУчетаУпаковок.Партнер,
    ВТ_МаксЦеныБезУчетаУпаковок.Номенклатура,
    ВТ_МаксЦеныБезУчетаУпаковок.Цена,
    ВТ_МаксЦеныБезУчетаУпаковок.Регистратор,
    ВЫБОР
        КОГДА ВТ_МаксЦеныБезУчетаУпаковок.ПериодМесяц = ВТ_ЧислителиНоменклатуры.ПериодМесяц
                И ВТ_МаксЦеныБезУчетаУпаковок.Партнер = ВТ_ЧислителиНоменклатуры.Партнер
                И ВТ_МаксЦеныБезУчетаУпаковок.Номенклатура = ВТ_ЧислителиНоменклатуры.Номенклатура
            ТОГДА ВТ_ЧислителиНоменклатуры.Цена
        ИНАЧЕ ВТ_МаксЦеныБезУчетаУпаковок.Цена
    КОНЕЦ
;
1 zenik
 
27.11.25
16:40
ВЫБОР
        КОГДА ВТ_ЧислителиНоменклатуры.Цена IS NOT NULL ТОГДА
ВТ_ЧислителиНоменклатуры.Цена
        ИНАЧЕ ВТ_МаксЦеныБезУчетаУпаковок.Цена
    КОНЕЦ КАК Цена
2 RomanYS
 
27.11.25
17:26
(1) А почему не просто
ЕСТЬNULL(ВТ_ЧислителиНоменклатуры.Цена, ВТ_МаксЦеныБезУчетаУпаковок.Цена) ?
3 RomanYS
 
27.11.25
17:35
(0) Что значит "не получается"?
естьnull должен решать твою задачу.
"или отрицание условий в соединении" а это бред какой-то
4 Бычье сердце
 
27.11.25
17:40
(0)
Перебором ТЗ)))
Программист всегда исправляет последнюю ошибку.