Имя: Пароль:
1C
1С v8
Объединение двух таблиц по значениям одной колонки
0 grum01
 
10.01.20
05:48
Всех с прошедшими!
Не могу осилить, как объединить несколько таблиц, полученных из запросов, по одинаковым значениям колонки. Например, есть у меня две одинаковых таблицы по две колонки: дата и количество. Количество строк может отличаться. Надо из них сделать одну общую с колонками: дата, количество1, количество2. Чтобы данные по количеству вывелись в нужных строках.
1 seevkik
 
10.01.20
05:52
Объединить и сгруппировать?
2 grum01
 
10.01.20
05:56
(1) они физически из разных запросов; одним запросом получить нельзя.
Надо вывести в отчет количество по каждой дате.
3 grum01
 
10.01.20
05:57
Вернее так: данные получаются в одном запросе но в разных виртуальных таблицах. Как потом вывести их, распределив количество по датам?
4 seevkik
 
10.01.20
06:02
(3) Что по вашему "виртуальная таблица"?
5 GreenSCI
 
10.01.20
06:02
Пакетный запрос не предлагать?
6 grum01
 
10.01.20
06:04
(5) предлагать. все варианты рассматриваю
7 seevkik
 
10.01.20
06:05
Предлагаю пакетный запрос.
8 grum01
 
10.01.20
06:12
(7) Отлично.
Возможно будет понятнее так:
-----------------------------------------------
ВЫБРАТЬ
    НАЧАЛОПЕРИОДА(vl_МониторОбработкиЗаказов.ВремяСборки, ЧАС) КАК Час,
    vl_МониторОбработкиЗаказов.Вес
ПОМЕСТИТЬ тзЗаказыНаСборке
ИЗ
    РегистрСведений.vl_МониторОбработкиЗаказов КАК vl_МониторОбработкиЗаказов
ГДЕ
    vl_МониторОбработкиЗаказов.ВремяСборки >= &НачалоПериода
    И vl_МониторОбработкиЗаказов.ВремяСборки <= &КонецПериода

СГРУППИРОВАТЬ ПО
    НАЧАЛОПЕРИОДА(vl_МониторОбработкиЗаказов.ВремяСборки, ЧАС),
    vl_МониторОбработкиЗаказов.Вес
;

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

СГРУППИРОВАТЬ ПО
    НАЧАЛОПЕРИОДА(vl_МониторОбработкиЗаказов.ВремяУпаковки, ЧАС),
    vl_МониторОбработкиЗаказов.Вес
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    тзЗаказыНаСборке.Час КАК ЧасСбр,
    тзЗаказыНаУпаковке.Час КАК ЧасУпк,
    СУММА(тзЗаказыНаСборке.Вес) КАК Вес,
    СУММА(тзЗаказыНаУпаковке.Вес) КАК Вес1
ИЗ
    тзЗаказыНаСборке КАК тзЗаказыНаСборке,
    тзЗаказыНаУпаковке КАК тзЗаказыНаУпаковке

СГРУППИРОВАТЬ ПО
    тзЗаказыНаСборке.Час,
    тзЗаказыНаУпаковке.Час
-----------------------------------------------

как в результатирующем запросе объединить данные по часам в одну строку?
9 seevkik
 
10.01.20
06:16
(8) Не поверишь, объединить)
10 DrZombi
 
гуру
10.01.20
06:17
(0) Начни писать запрос, мы посм... поможем :)
11 grum01
 
10.01.20
06:26
(9) как?
12 grum01
 
10.01.20
06:27
(10) обхохочешься
13 Umga2002
 
10.01.20
06:46
Соединения в конструкторе укажи....
14 DrZombi
 
гуру
10.01.20
06:47
(8) Два запроса 1 и 2-ой через "Объединить Все". После еще можно сгруппировать, перенеся твой два запроса во внутренний запрос :)

Третий твой запрос лишний.
15 catena
 
10.01.20
06:47
(11)С помощью "ОБЪЕДИНИТЬ".
16 seevkik
 
10.01.20
06:49
(15) Я говорил, что не поверит
17 grum01
 
10.01.20
07:10
А если третья таблица такая же добавляется? Весь алгоритм рушится?
18 grum01
 
10.01.20
07:16
(15) хоть объединяй, хоть соединяй левое-правое-полное: количество строк в итоговой таблице ограничивается количеством строк в первой таблице. Таким образом, если в первой таблице 2 строки, а во второй 5, то выводятся только 2.
19 runoff_runoff
 
10.01.20
07:19
объединить все
20 Пузан
 
10.01.20
07:24
ОБЪЕДИНИТЬ ВСЕ

А потом

СГРУППИРОВАТЬ ПО
21 Chameleon1980
 
10.01.20
07:44
(18) уже проверил?
22 Мимохожий Однако
 
10.01.20
07:49
(18) Не стесняйся. Снимай покров со своего кода.
23 catena
 
10.01.20
07:52
(18)Ну ведь вы же врете. Не стыдно?
24 grum01
 
10.01.20
07:58
Проверяю. Кажется нашел "заковыку" в виде одинаковых имен колонок.
Там просто запрос гораздо сложнее, чем я приводил. Меняю ручками.
25 grum01
 
10.01.20
08:16
Не, ребята. Не получается через объединение.
Вот честный код:
ВЫБРАТЬ
    ВЫБОР
        КОГДА vl_МониторОбработкиЗаказов.Склад = ЗНАЧЕНИЕ(Перечисление.vl_ТипыСкладов.Желтый)
            ТОГДА vl_МониторОбработкиЗаказов.Вес
        ИНАЧЕ 0
    КОНЕЦ КАК ЖелтыйВес,
    НАЧАЛОПЕРИОДА(vl_МониторОбработкиЗаказов.ВремяСборки, ЧАС) КАК Час
ИЗ
    РегистрСведений.vl_МониторОбработкиЗаказов КАК vl_МониторОбработкиЗаказов
ГДЕ
    vl_МониторОбработкиЗаказов.ВремяСборки >= &НачалоПериода
    И vl_МониторОбработкиЗаказов.ВремяСборки <= &КонецПериода

ОБЪЕДИНИТЬ

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

в итоге получается, что значения веса суммируются из обоих таблиц; а они должны быть разными
26 Cyberhawk
 
10.01.20
08:16
Полное соединение
27 catena
 
10.01.20
08:27
(25)ВЫБРАТЬ
    ВЫБОР
        КОГДА vl_МониторОбработкиЗаказов.Склад = ЗНАЧЕНИЕ(Перечисление.vl_ТипыСкладов.Желтый)
            ТОГДА vl_МониторОбработкиЗаказов.Вес
        ИНАЧЕ 0
    КОНЕЦ КАК ЖелтыйВес,
    NULL как другойЖелтыйвес,
    НАЧАЛОПЕРИОДА(vl_МониторОбработкиЗаказов.ВремяСборки, ЧАС) КАК Час
ИЗ
    РегистрСведений.vl_МониторОбработкиЗаказов КАК vl_МониторОбработкиЗаказов
ГДЕ
    vl_МониторОбработкиЗаказов.ВремяСборки >= &НачалоПериода
    И vl_МониторОбработкиЗаказов.ВремяСборки <= &КонецПериода

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    NULL
    ВЫБОР
        КОГДА vl_МониторОбработкиЗаказов.Склад = ЗНАЧЕНИЕ(Перечисление.vl_ТипыСкладов.Желтый)
            ТОГДА vl_МониторОбработкиЗаказов.Вес
        ИНАЧЕ 0
    КОНЕЦ,
    НАЧАЛОПЕРИОДА(vl_МониторОбработкиЗаказов.ВремяУпаковки, ЧАС)
ИЗ
    РегистрСведений.vl_МониторОбработкиЗаказов КАК vl_МониторОбработкиЗаказов
ГДЕ
    vl_МониторОбработкиЗаказов.ВремяУпаковки >= &НачалоПериода
    И vl_МониторОбработкиЗаказов.ВремяУпаковки <= &КонецПериода
28 catena
 
10.01.20
08:27
Ну, не NULL, а 0 для чисел, конечно же.
29 grum01
 
10.01.20
08:36
(27) Во! То, что надо! добавить пустую колонку..

А как теперь это все сгруппировать по времени? А то несколько строк с одинаковым периодом выводит. По какому полю?
30 catena
 
10.01.20
08:41
(29)Сгруппировать по дате, суммируя остальное.

Я понимаю, что в жизни разные выкрутасы бывают, но за 5 лет ведь должна была промелькнуть информация, что в 1С есть встроенная справка, не?
31 grum01
 
10.01.20
09:21
(30) Да в справке такого фиг найдешь, даже, если оно там есть. Все функции перерывать не будешь ведь. А с таким первый раз столкнулся; мало знаю запросы, каюсь.
Для меня проблема группировки в том, что поля-то разные в этих двух запросах. А через конструктор группировка в данном случае прописывается только для каждого отдельно.
Насколько понимаю, надо эти два запроса запихнуть во вложенный запрос, а его потом группировать?
32 catena
 
10.01.20
09:28
(31)Ну я вот открыла в справке про секцию ОБЪЕДИНИТЬ, там даже пример и даже и добавлением поля.
Да, группировать результат.
33 seevkik
 
10.01.20
09:32
Ну это сильно, за 5 лет с запросами не поработать
34 grum01
 
10.01.20
09:36
(33) с запросами работаю часто и много; но с элементарными, "одноуровневыми", так сказать. Ну не было никогда нужды во вложенных запросах и их объединении.
35 grum01
 
10.01.20
09:37
(32) Спасибо вам большое! С группировкой разобрался.
Человеческого вам счастья и удачи!
36 Xapac
 
модератор
10.01.20
14:12
(0)стаж 4 года. странные вопросы или просто тролинг
37 kalleka
 
05.02.20
15:35
(0) Не в тему, но цвет индикатора получилось поменять?)
Программист всегда исправляет последнюю ошибку.