Имя: Пароль:
1C
 
1с Сравнение двух таблиц
0 illiona
 
naïve
28.03.22
08:40
ВЫБРАТЬ
             Т1.Номенклатура,
             Т1.Характеристика,
             Т1.Количество
ИЗ
             &Таблица1 как  Т1
                            ЛЕВОЕ СОЕДИНЕНИЕ Таблица2 КАК Т2
                            ПО Т1.Номенклатура = Т2.Номенклатура
                               И Т1.Характеристика = Т2.Характеристика
ГДЕ
             Т2.Количество ЕСТЬ NULL

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

ВЫБРАТЬ
             Т2.Номенклатура,
             Т2.Характеристика,
             Т2.Количество
ИЗ
             &Таблица2 как  Т2
                            ЛЕВОЕ СОЕДИНЕНИЕ Таблица1 КАК Т1
                            ПО Т2.Номенклатура = Т1.Номенклатура
                               И Т2.Характеристика = Т1.Характеристика
ГДЕ
             Т1.Количество ЕСТЬ NULL

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

ВЫБРАТЬ
             Т1.Номенклатура,
             Т1.Характеристика,
             Т1.Количество - Т2. Количество
ИЗ
             &Таблица1 как  Т1
                            ВНУТРЕННЕЕ СОЕДИНЕНИЕ Таблица2 КАК Т2
                            ПО Т1.Номенклатура = Т2.Номенклатура
                               И Т1.Характеристика = Т2.Характеристика


Надо сравнить две таблица
Ошибка Содержимое объекта данных может быть выбрано только во временную таблицу
1 XLife
 
28.03.22
08:41
из таблицы значений данные надо предварительно выбирать во временные таблицы, а потом всё остальное...
2 Вафель
 
28.03.22
08:42
Сначала во временную, потом уже селекты
3 illiona
 
naïve
28.03.22
10:18
ВЫБРАТЬ
    Таблица1.Номенклатура КАК Номенклатура,
    Таблица1.Серия КАК Серия,
    Таблица1.Количество КАК Количество
ПОМЕСТИТЬ ВнутренняяТаблицаАвтомобилей
ИЗ
    &Таблица1 КАК Таблица1
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Таблица2.Номенклатура КАК Номенклатура,
    Таблица2.Серия КАК Серия,
    Таблица2.Количество КАК Количество
ПОМЕСТИТЬ ВнутренняяТаблицаАвтомобилей2
ИЗ
    &Таблица2 КАК Таблица2
;

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

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

ВЫБРАТЬ
    Т2.Номенклатура,
    Т2.Серия,
    Т2.Количество
ИЗ
    ВнутренняяТаблицаАвтомобилей2 КАК Т2
        ЛЕВОЕ СОЕДИНЕНИЕ ВнутренняяТаблицаАвтомобилей КАК Т1
        ПО Т2.Номенклатура = Т1.Номенклатура
            И Т2.Серия = Т1.Серия
ГДЕ
    Т1.Количество ЕСТЬ NULL

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

ВЫБРАТЬ
    Т1.Номенклатура,
    Т1.Серия,
    Т1.Количество - Т2.Количество
ИЗ
    ВнутренняяТаблицаАвтомобилей КАК Т1
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВнутренняяТаблицаАвтомобилей2 КАК Т2
        ПО Т1.Номенклатура = Т2.Номенклатура
            И Т1.Серия = Т2.Серия


Получилось, но оставляет строку если в первой и второй таблице она совпадает.
4 illiona
 
naïve
28.03.22
10:18
а должен запрос только различия выводить
5 XLife
 
28.03.22
10:21
полное соединение с условиями на 'есть null'?
6 acht
 
28.03.22
10:25
ВЫБРАТЬ
    Различия.Номенклатура КАК Номенклатура,
    Различия.Серия КАК Серия,
    Различия.Количество КАК Количество
ИЗ (    
    ВЫБРАТЬ
        Т.Номенклатура КАК Номенклатура,
        Т.Серия КАК Серия,
        Т.Количество КАК Количество,
        1 КАК Флаг
    ИЗ
        ВнутренняяТаблицаАвтомобилей КАК Т
    ОБЪЕДИНИТЬ ВСЕ
    ВЫБРАТЬ
        Т.Номенклатура КАК Номенклатура,
        Т.Серия КАК Серия,
        Т.Количество КАК Количество,
        -1 КАК Флаг
    ИЗ
        ВнутренняяТаблицаАвтомобилей КАК Т
) КАК Различия
СГРУППИРОВАТЬ ПО
    Различия.Номенклатура,
    Различия.Серия,
    Различия.Количество
ИМЕЮЩИЕ
    СУММА(Флаг) <> 0
7 acht
 
28.03.22
10:25
Не проверял
8 acht
 
28.03.22
10:26
После объединения там ВнутренняяТаблицаАвтомобилей2 КАК Т, конечно
9 DmVl76
 
28.03.22
10:37
(6) Будет выдавать только отсутствующие в одной из таблиц позиции, если разное количество, то не попадет

ВЫБРАТЬ
    Различия.Номенклатура КАК Номенклатура,
    Различия.Серия КАК Серия,
    СУММА(Различия.Количество КАК Количество)
ИЗ (
ВЫБРАТЬ
        Т.Номенклатура КАК Номенклатура,
        Т.Серия КАК Серия,
        Т.Количество КАК Количество,
        
    ИЗ
        ВнутренняяТаблицаАвтомобилей КАК Т
    ОБЪЕДИНИТЬ ВСЕ
    ВЫБРАТЬ
        Т1.Номенклатура КАК Номенклатура,
        Т1.Серия КАК Серия,
        -Т1.Количество КАК Количество,
        
    ИЗ
        ВнутренняяТаблицаАвтомобилей2 КАК Т1
) КАК Различия
СГРУППИРОВАТЬ ПО
    Различия.Номенклатура,
    Различия.Серия
ИМЕЮЩИЕ
    СУММА(Количество) <> 0

Если нужно количество в каждой таблице, соединяем в конце с первоначальными
10 illiona
 
naïve
28.03.22
10:40
Не могу понять где поставить есть null
11 DmVl76
 
28.03.22
10:40
(9) Ошибся, там группировка по количеству тоже идет, попадать будет, но потом разбирать не очень удобно будет

Номенклатура1 Серия1 10 1
Номенклатура1 Серия1  8 -1
12 DmVl76
 
28.03.22
10:42
(10) Условие какое-нужно отличающиеся по количеству позиции или только встречающиеся в одной из таблиц? Если первое - то (6) или (9)
13 illiona
 
naïve
28.03.22
10:44
(11) у меня почему-то вообще не работает
Ожидается выражение ")"
СУММА(Различия.Количество <<?>>КАК Количество)
14 illiona
 
naïve
28.03.22
10:46
условие может встречаться в первой и не быть во второй, также и в обратную сторону, может по количеству быть разное
15 DmVl76
 
28.03.22
10:48
СУММА(Различия.Количество) КАК Количество и запятые убрать после Количество в подзапросе
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан