Имя: Пароль:
1C
1С v8
Соединение двух таблиц
0 Одичавший Одинэсник
 
31.03.24
15:02
Добрый день.

Есть задача. УНФ для Казахстана.
Документ "Маршрутный лист". В тч документа заполняются ссылки на 2 других документа, "ЗаказПокупателя" и "РасходнаяНакладная".

Вопрос состоит в том, как данные из этих документов соединить друг с другом?

Мне нужно через маршрутный лист взять данные с тч обоих документов и собрать в одну таблицу.
По отдельности я это сделал, теперь ищу способ, как правильно соединить.
Понимаю, что как-то по ссылке маршрутного листа, но не понимаю, как именно.



ВЫБРАТЬ
    МаршрутныйЛистЗаказы.Ссылка КАК Ссылка,
    МаршрутныйЛистЗаказы.НомерСтроки КАК НомерСтроки,
    МаршрутныйЛистЗаказы.Заказ КАК Заказ,
    МаршрутныйЛистЗаказы.РасходнаяНакладная КАК РасходнаяНакладная,
    МаршрутныйЛистЗаказы.Доставлен КАК Доставлен
ПОМЕСТИТЬ втТЧМЛ
ИЗ
    Документ.МаршрутныйЛист.Заказы КАК МаршрутныйЛистЗаказы
ГДЕ
    МаршрутныйЛистЗаказы.Ссылка = &Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    РасходнаяНакладнаяЗапасы.Ссылка КАК Ссылка,
    СУММА(РасходнаяНакладнаяЗапасы.Сумма) КАК Сумма,
    СУММА(РасходнаяНакладнаяЗапасы.Вес) КАК Вес
ИЗ
    Документ.РасходнаяНакладная.Запасы КАК РасходнаяНакладнаяЗапасы
ГДЕ
    РасходнаяНакладнаяЗапасы.Ссылка В
            (ВЫБРАТЬ
                втТЧМЛ.РасходнаяНакладная
            ИЗ
                втТЧМЛ)

СГРУППИРОВАТЬ ПО
    РасходнаяНакладнаяЗапасы.Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ЗаказПокупателяОбмен.Ссылка КАК Ссылка,
    СУММА(ЗаказПокупателяОбмен.Сумма) КАК Обмен
ИЗ
    Документ.ЗаказПокупателя.Обмен КАК ЗаказПокупателяОбмен
ГДЕ
    ЗаказПокупателяОбмен.Ссылка В
            (ВЫБРАТЬ
                втТЧМЛ.Заказ
            ИЗ
                втТЧМЛ)

СГРУППИРОВАТЬ ПО
    ЗаказПокупателяОбмен.Ссылка

1 vicof
 
31.03.24
15:13
ВНУТРЕННИМ СОЕДИНЕНИЕМ 1 и 2, и 1 и 3 таблиц по ссылке
2 Одичавший Одинэсник
 
31.03.24
15:38
Получился вот такой монстр. Не уверен, то ли это самое, что говорил  (1)



ВЫБРАТЬ
    МаршрутныйЛистЗаказы.Ссылка КАК Ссылка,
    МаршрутныйЛистЗаказы.НомерСтроки КАК НомерСтроки,
    МаршрутныйЛистЗаказы.Заказ КАК Заказ,
    МаршрутныйЛистЗаказы.РасходнаяНакладная КАК РасходнаяНакладная,
    МаршрутныйЛистЗаказы.Доставлен КАК Доставлен
ПОМЕСТИТЬ втТЧМЛ
ИЗ
    Документ.МаршрутныйЛист.Заказы КАК МаршрутныйЛистЗаказы
ГДЕ
    МаршрутныйЛистЗаказы.Ссылка = &Ссылка
;

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

СГРУППИРОВАТЬ ПО
    РасходнаяНакладнаяЗапасы.Ссылка,
    втТЧМЛ.Заказ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ЗаказПокупателяОбмен.Ссылка КАК Ссылка,
    СУММА(ЗаказПокупателяОбмен.Сумма) КАК Обмен,
    втТЧМЛ.Заказ КАК Заказ
ПОМЕСТИТЬ втЗаказ
ИЗ
    втТЧМЛ КАК втТЧМЛ
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя.Обмен КАК ЗаказПокупателяОбмен
        ПО втТЧМЛ.Заказ = ЗаказПокупателяОбмен.Ссылка
ГДЕ
    ЗаказПокупателяОбмен.Ссылка В
            (ВЫБРАТЬ
                втТЧМЛ.Заказ
            ИЗ
                втТЧМЛ)

СГРУППИРОВАТЬ ПО
    ЗаказПокупателяОбмен.Ссылка,
    втТЧМЛ.Заказ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    втРасходная.Ссылка КАК Ссылка,
    втРасходная.Сумма КАК Сумма,
    втРасходная.Вес КАК Вес,
    втРасходная.Заказ КАК Заказ,
    втЗаказ.Ссылка КАК Ссылка1,
    втЗаказ.Обмен КАК Обмен,
    втЗаказ.Заказ КАК Заказ1
ИЗ
    втРасходная КАК втРасходная
        ПОЛНОЕ СОЕДИНЕНИЕ втЗаказ КАК втЗаказ
        ПО втРасходная.Заказ = втЗаказ.Заказ

3 Волшебник
 
31.03.24
18:33
(2) Если монстр, значит неправильно. Программный код должен быть красивым как песня!
4 Одичавший Одинэсник
 
31.03.24
20:58
(3) А если мне медведь на ухо наступил, норм?
5 Волшебник
 
31.03.24
21:02
(4) Всякое бывает...

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

А иначе зачем он нужен? Его тогда придётся смыть в утиль и написать новый. И так много раз...
6 Одичавший Одинэсник
 
31.03.24
21:16
(5) Ну я написал как сумел. Хочется конечно красиво, но пока получается как-то так. Я ещё там наделал всякого теперь, вообще страшно показывать.

Единственное, вопрос в том, правильно ли я соединяю таблицы, либо намудрил лишнего?
7 Волшебник
 
31.03.24
21:17
(6) Намудрили. Неправильно
8 Волшебник
 
31.03.24
21:20
Надо делать запросы к регистрам, а не к документам
9 Одичавший Одинэсник
 
31.03.24
21:20
(7) Хах. Я так и думал. А как сделать, чтобы правильно? Мне код не нужен, просто в нескольких словах алгоритм, когда что с чем соединять/выбирать?
10 Одичавший Одинэсник
 
31.03.24
21:21
(8) Не, у меня задача именно к документам. Там в заказе есть новая тч, которая не записывается в регистр. Данные напрямую оттуда берутся
11 Волшебник
 
31.03.24
21:28
(10) Вашему архитектору медведь на ухо наступил
12 Одичавший Одинэсник
 
31.03.24
21:31
(11) Возможно. Но сейчас вопрос именно в запросе, правильно ли я его составил (исключая то, что из док-та, а не из регистра забираю данные)
13 Волшебник
 
31.03.24
21:32
(12) А Вы его запускали? Результат Вас устраивает?
14 Одичавший Одинэсник
 
31.03.24
21:33
(13) Да, запускал, результат устроил. Но ведь запросы можно по разному делать. Вот и хочется, узнать, насколько кривым получился мой, и можно ли его улучшить
15 Одичавший Одинэсник
 
31.03.24
21:34
Красоту то никто не отменял, даже в таком запросе)
16 Волшебник
 
31.03.24
21:36
(14) Оставьте пока так. Живите теперь с ним
17 Смотрящий
 
31.03.24
21:37
Неоптимально но работать будет
18 Одичавший Одинэсник
 
31.03.24
21:37
(16) Ахахах) Понял)
Я правда там ещё наворотил сверху на него, но уже показывать не буду, стыдно) Главное, что работает)

Спасибо)
19 Одичавший Одинэсник
 
31.03.24
21:38
(17) Ну вроде и работает, просто хотел, чтобы было как-то грамотнее, что ли. Ну и научиться может чему заодно)
20 Смотрящий
 
31.03.24
21:48
(19)

Второй/третий запрос
Там где суммы пропиши ЕСТЬNULL
Выкинуть втТЧМЛ.Заказ КАК Заказ
Выкинуть ГДЕ
СГРУППИРОВАТЬ ПО оставить только ссылку

Четвертый запрос соединяй левым соединением вт
21 Одичавший Одинэсник
 
31.03.24
21:52
(20) Группировка мне нужна по заданию, мне нужно ссуммировать обмен, сумму, вес.
Остальное сейчас сделаю, спасибо!
22 Одичавший Одинэсник
 
31.03.24
21:59
Получилось вот так:


ВЫБРАТЬ
    МаршрутныйЛистЗаказы.Ссылка КАК Ссылка,
    МаршрутныйЛистЗаказы.НомерСтроки КАК НомерСтроки,
    МаршрутныйЛистЗаказы.Заказ КАК Заказ,
    МаршрутныйЛистЗаказы.РасходнаяНакладная КАК РасходнаяНакладная,
    МаршрутныйЛистЗаказы.Доставлен КАК Доставлен
ПОМЕСТИТЬ втТЧМЛ
ИЗ
    Документ.МаршрутныйЛист.Заказы КАК МаршрутныйЛистЗаказы
ГДЕ
    МаршрутныйЛистЗаказы.Ссылка = &Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    РасходнаяНакладнаяЗапасы.Ссылка КАК Ссылка,
    ЕСТЬNULL(СУММА(РасходнаяНакладнаяЗапасы.Сумма), 0) КАК Сумма,
    ЕСТЬNULL(СУММА(РасходнаяНакладнаяЗапасы.Вес), 0) КАК Вес,
    втТЧМЛ.Заказ КАК Заказ
ПОМЕСТИТЬ втРасходная
ИЗ
    втТЧМЛ КАК втТЧМЛ
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная.Запасы КАК РасходнаяНакладнаяЗапасы
        ПО (втТЧМЛ.РасходнаяНакладная = РасходнаяНакладнаяЗапасы.Ссылка)

СГРУППИРОВАТЬ ПО
    РасходнаяНакладнаяЗапасы.Ссылка,
    втТЧМЛ.Заказ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ЗаказПокупателяОбмен.Ссылка КАК Ссылка,
    ЕСТЬNULL(СУММА(ЗаказПокупателяОбмен.Сумма), 0) КАК Обмен,
    втТЧМЛ.Заказ КАК Заказ
ПОМЕСТИТЬ втЗаказ
ИЗ
    втТЧМЛ КАК втТЧМЛ
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя.Обмен КАК ЗаказПокупателяОбмен
        ПО (втТЧМЛ.Заказ = ЗаказПокупателяОбмен.Ссылка)

СГРУППИРОВАТЬ ПО
    ЗаказПокупателяОбмен.Ссылка,
    втТЧМЛ.Заказ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    втРасходная.Ссылка КАК Ссылка,
    втРасходная.Сумма КАК Сумма,
    втЗаказ.Обмен КАК Обмен,
    втРасходная.Вес КАК Вес
ИЗ
    втРасходная КАК втРасходная
        ЛЕВОЕ СОЕДИНЕНИЕ втЗаказ КАК втЗаказ
        ПО (втРасходная.Заказ = втЗаказ.Заказ)


Если я уберу втТЧМЛ.Заказ КАК Заказ тогда мне связь не по чему делать же в четвертом запросе
23 Одичавший Одинэсник
 
31.03.24
21:59
(20) Неправильно прочитал про СГРУППИРОВАТЬ, подумал что тоже выкинуть надо типо. Поэтому написал выше про группировку
24 Смотрящий
 
31.03.24
22:11
ВЫБРАТЬ
    МаршрутныйЛистЗаказы.Ссылка КАК Ссылка,
    МаршрутныйЛистЗаказы.НомерСтроки КАК НомерСтроки,
    МаршрутныйЛистЗаказы.Заказ КАК Заказ,
    МаршрутныйЛистЗаказы.РасходнаяНакладная КАК РасходнаяНакладная,
    МаршрутныйЛистЗаказы.Доставлен КАК Доставлен
ПОМЕСТИТЬ втТЧМЛ
ИЗ
    Документ.МаршрутныйЛист.Заказы КАК МаршрутныйЛистЗаказы
ГДЕ
    МаршрутныйЛистЗаказы.Ссылка = &Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    РасходнаяНакладнаяЗапасы.Ссылка КАК Ссылка,
    СУММА(ЕСТЬNULL(РасходнаяНакладнаяЗапасы.Сумма, 0)) КАК Сумма,
    СУММА(ЕСТЬNULL(РасходнаяНакладнаяЗапасы.Вес, 0)) КАК Вес
ПОМЕСТИТЬ втРасходная
ИЗ
    втТЧМЛ КАК втТЧМЛ
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная.Запасы КАК РасходнаяНакладнаяЗапасы
        ПО втТЧМЛ.РасходнаяНакладная = РасходнаяНакладнаяЗапасы.Ссылка

СГРУППИРОВАТЬ ПО
    РасходнаяНакладнаяЗапасы.Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ЗаказПокупателяОбмен.Ссылка КАК Ссылка,
    СУММА(ЕСТЬNULL(ЗаказПокупателяОбмен.Сумма, 0)) КАК Обмен
ПОМЕСТИТЬ втЗаказ
ИЗ
    втТЧМЛ КАК втТЧМЛ
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя.Обмен КАК ЗаказПокупателяОбмен
        ПО втТЧМЛ.Заказ = ЗаказПокупателяОбмен.Ссылка

СГРУППИРОВАТЬ ПО
    ЗаказПокупателяОбмен.Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    втТЧМЛ.Ссылка КАК Ссылка,
    втТЧМЛ.НомерСтроки КАК НомерСтроки,
    втТЧМЛ.Заказ КАК Заказ,
    втТЧМЛ.РасходнаяНакладная КАК РасходнаяНакладная,
    втТЧМЛ.Доставлен КАК Доставлен,
    ЕСТЬNULL(втРасходная.Сумма, 0),
    ЕСТЬNULL(втРасходная.Вес, 0),
    ЕСТЬNULL(втЗаказ.Объем, 0)
ИЗ
    втТЧМЛ КАК втТЧМЛ

    ЛЕВОЕ СОЕДИНЕНИЕ втРасходная КАК втРасходная
    ПО втТЧМЛ.РасходнаяНакладная = втРасходная.Ссылка

    ЛЕВОЕ СОЕДИНЕНИЕ втЗаказ КАК втЗаказ
    ПО втТЧМЛ.Заказ = втЗаказ.Ссылка
25 Одичавший Одинэсник
 
31.03.24
22:17
(24) Спасибо! Особенно забавно, как я с ЕСТЬNULL лажанул))

Буду разбирать этот пример. Для меня он сложноватый.