Имя: Пароль:
1C
1С v8
соединение таблиц запросом
0 golem14
 
15.06.23
06:57
Как соединить две таблицы запросом по полям Статья Контрагент таким образом чтобы нужные контрагенты встали на свои места, а те которые не вошли сгруппировались в Прочие контрагенты. Пример с двумя исходными таблицами и нужным результатом здесь: https://telegra.ph/kak-soedinit-tablicy-06-15
1 НафНаф
 
15.06.23
07:58
возможно Вам надо ОБЪЕДИНИТЬ ВСЕ
2 golem14
 
15.06.23
08:03
примерно так получилось:
3 golem14
 
15.06.23
08:03
ВЫБРАТЬ
    План.Статья КАК Статья,
    План.Контрагент КАК Контрагент,
    План.СуммаПлан КАК СуммаПлан,
    Факт.Статья КАК СтатьяФакт,
    Факт.Контрагент КАК КонтрагентФакт,
    Факт.СуммаФакт КАК СуммаФакт
ПОМЕСТИТЬ Найденные
ИЗ
    РегистрСведений.План КАК План
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Факт КАК Факт
        ПО (План.Статья = Факт.Статья)
            И (План.Контрагент = Факт.Контрагент)
ГДЕ
    НЕ Факт.СуммаФакт ЕСТЬ NULL
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Факт.Статья КАК Статья,
    Факт.Контрагент КАК Контрагент,
    Факт.СуммаФакт КАК СуммаФакт,
    Найденные.СтатьяФакт КАК СтатьяФакт,
    Найденные.КонтрагентФакт КАК КонтрагентФакт,
    Найденные.СуммаФакт КАК Сумма
ПОМЕСТИТЬ НайденныеФакт
ИЗ
    РегистрСведений.Факт КАК Факт
        ЛЕВОЕ СОЕДИНЕНИЕ Найденные КАК Найденные
        ПО Факт.Статья = Найденные.СтатьяФакт
            И Факт.Контрагент = Найденные.КонтрагентФакт
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    СУММА(НайденныеФакт.СуммаФакт) КАК Сумма
ПОМЕСТИТЬ СуммаФактПрочие
ИЗ
    НайденныеФакт КАК НайденныеФакт
ГДЕ
    НайденныеФакт.Сумма ЕСТЬ NULL
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Статьи.Ссылка КАК Статья,
    Контрагенты.Ссылка КАК Контрагент,
    СуммаФактПрочие.Сумма КАК СуммаФакт
ПОМЕСТИТЬ ПрочиеКонтрагенты
ИЗ
    Справочник.Статьи КАК Статьи,
    Справочник.Контрагенты КАК Контрагенты,
    СуммаФактПрочие КАК СуммаФактПрочие
ГДЕ
    Статьи.Наименование = "Аренда"
    И Контрагенты.Наименование = "Прочие контрагенты"
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Найденные.Статья КАК Статья,
    Найденные.Контрагент КАК Контрагент,
    Найденные.СуммаПлан КАК СуммаПлан,
    Найденные.СуммаФакт КАК СуммаФакт
ИЗ
    Найденные КАК Найденные

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

ВЫБРАТЬ
    ПрочиеКонтрагенты.Статья,
    ПрочиеКонтрагенты.Контрагент,
    NULL,
    ПрочиеКонтрагенты.СуммаФакт
ИЗ
    ПрочиеКонтрагенты КАК ПрочиеКонтрагенты
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    План.Статья КАК Статья,
    План.Контрагент КАК Контрагент,
    План.СуммаПлан КАК СуммаПлан,
    ЕСТЬNULL(Факт.СуммаФакт, 0) КАК СуммаФакт
ПОМЕСТИТЬ Предварительная
ИЗ
    РегистрСведений.План КАК План
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Факт КАК Факт
        ПО План.Статья = Факт.Статья
            И План.Контрагент = Факт.Контрагент

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    ПрочиеКонтрагенты.Статья,
    ПрочиеКонтрагенты.Контрагент,
    0,
    ПрочиеКонтрагенты.СуммаФакт
ИЗ
    ПрочиеКонтрагенты КАК ПрочиеКонтрагенты
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Предварительная.Статья КАК Статья,
    Предварительная.Контрагент КАК Контрагент,
    СУММА(Предварительная.СуммаПлан) КАК СуммаПлан,
    СУММА(Предварительная.СуммаФакт) КАК СуммаФакт
ИЗ
    Предварительная КАК Предварительная

СГРУППИРОВАТЬ ПО
    Предварительная.Статья,
    Предварительная.Контрагент
4 golem14
 
15.06.23
08:08
5 RomanYS
 
15.06.23
08:08
Можно через полное соединение сделать без временных таблиц
6 golem14
 
15.06.23
08:15
(5) Что дальше?
https://telegra.ph/chto-dalshe-06-15
7 НафНаф
 
15.06.23
08:19
(6)
ЕСТЬNULL(План.Контрагент,&ПрочийКонтрагент) КАК Контрагент,
ЕСТЬNULL(План.Статья,Факт.Статья) КАК Статья,
8 RomanYS
 
15.06.23
08:19
(6) естьnull(факт.контрагент, &ПрочийКонтрагент) как контрагент
9 RomanYS
 
15.06.23
08:19
(7) только не из плана, там и так прочий
10 НафНаф
 
15.06.23
08:24
(9) как раз из плана
11 RomanYS
 
15.06.23
08:27
(10) да, я перепутал
12 golem14
 
15.06.23
08:31
получилось, спасибо вам большое
13 golem14
 
15.06.23
08:31
ВЫБРАТЬ
    ЕСТЬNULL(План.Статья, Факт.Статья) КАК Статья,
    ЕСТЬNULL(План.Контрагент, &ПрочийКонтрагент) КАК Контрагент,
    СУММА(План.СуммаПлан) КАК СуммаПлан,
    СУММА(Факт.СуммаФакт) КАК СуммаФакт
ПОМЕСТИТЬ ПолноеОбъединение
ИЗ
    РегистрСведений.План КАК План
        ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.Факт КАК Факт
        ПО (План.Статья = Факт.Статья)
            И (План.Контрагент = Факт.Контрагент)

СГРУППИРОВАТЬ ПО
    ЕСТЬNULL(План.Статья, Факт.Статья),
    ЕСТЬNULL(План.Контрагент, &ПрочийКонтрагент)
14 golem14
 
15.06.23
08:31
15 RomanYS
 
15.06.23
08:34
Редкий случай, когда полное пригодилось
16 РЕШЕНИЕ
 
15.06.23
09:41
Проблема:
Как соединить таблицы "План" и "Факт" с полями Контрагент, Статья таким образом, чтобы план сопоставился с фактом, а не найденные сгруппировались в "Прочие контрагенты".

Решение:
Используйте ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ и функцию ЕСТЬNULL()
Пример запроса в (13)
17 НафНаф
 
15.06.23
10:49
(16) отличный робот!