Имя: Пароль:
1C
1С v8
Пустой результат запроса, если одна из временных таблиц пустая
0 poddex
 
20.04.17
09:18
Добрый день, уважаемые специалисты и гости форума! Нужна ваша помощь.
Сделал пакетный запрос - 2 запроса во временные таблицы, третий запрос - на основе этих временных таблиц. В чем проблема: если вторая временная таблица пустая (там отбор в ГДЕ по условию, и она может быть пустой), итоговый запрос ничего не возвращает, хотя выбор по полям вроде стоит. Где-то я нанубил, не понимаю, как соединять эти таблицы правильно. До кучи вопрос: если выбирать поля так, как я привел - как логически происходит этот запрос? С соединениями вроде все ясно, а если просто перечислить выбираемые таблицы в разделе ИЗ? Вот текст итогового запроса.

ВЫБРАТЬ
    ВЫБОР
        КОГДА ВТОтветственныеЛица.ФИО = ВТЗамещаемые.ЗамещаемоеЛицо
            ТОГДА ВТЗамещаемые.ЗамещающееЛицо
        ИНАЧЕ ВТОтветственныеЛица.ФИО
    КОНЕЦ КАК ФИО,
    ВТОтветственныеЛица.ОтветственноеЛицо,
    ВТОтветственныеЛица.ГлавнаяВиза,
    ВЫБОР
        КОГДА ВТОтветственныеЛица.ФИО = ВТЗамещаемые.ЗамещаемоеЛицо
            ТОГДА ВТЗамещаемые.ДолжностьЗамещающего
        ИНАЧЕ ВТОтветственныеЛица.Должность
    КОНЕЦ КАК Должность,
    ВЫБОР
        КОГДА ВТОтветственныеЛица.ФИО = ВТЗамещаемые.ЗамещаемоеЛицо
            ТОГДА ВТЗамещаемые.ПодразделениеОрганизации
        ИНАЧЕ ВТОтветственныеЛица.ПодразделениеОрганизации
    КОНЕЦ КАК ПодразделениеОрганизации
ИЗ
    ВТОтветственныеЛица КАК ВТОтветственныеЛица,
    ВТЗамещаемые КАК ВТЗамещаемые
1 HEKPOH
 
20.04.17
09:20
ИЗ
    ВТОтветственныеЛица КАК ВТОтветственныеЛица,
    ВТЗамещаемые КАК ВТЗамещаемые

Некошерно так писать...
2 Рэйв
 
20.04.17
09:21
(0)Полное Соединение сделай
3 Рэйв
 
20.04.17
09:21
(0)Полно Соединение сделай
4 Buster007
 
20.04.17
09:23
Вот это
ВЫБОР
        КОГДА ВТОтветственныеЛица.ФИО = ВТЗамещаемые.ЗамещаемоеЛицо
            ТОГДА ВТЗамещаемые.ЗамещающееЛицо
        ИНАЧЕ ВТОтветственныеЛица.ФИО
    КОНЕЦ КАК ФИО

странное условие. Какой от него смысл?
5 Мимохожий Однако
 
20.04.17
09:24
(0) это весь запрос?
6 dezss
 
20.04.17
09:27
(0) делай левое соединение с той, которая никогда не пустая.
При простом перечислении таблиц в "из" делается полное декартово произведение таблиц. Если одна из них пуста, то и результат будет пустой.
7 poddex
 
20.04.17
09:28
В первой временной таблице ВТОтветственные отбирается список сотрудников. Во второй временной таблице ВТЗамещаемые отбирается список отсутствующих сотрудников (там условие построено так, что всего один человек выпадает - 1 строка в запросе). В итоговом запросе, который я привел, поля первой временной таблицы "сравниваются" (это я так думаю) со второй, и если текст совпадает (ВЫБОР), берутся поля из второй таблицы. Вот только по-ходу, я неверно понял, как логически работает итоговый запрос, оттого и косяки. Кстати, если в ВТЗамещаемые одна строка, то все работает прекрасно.
8 catena
 
20.04.17
09:39
Запись "из тз1,тз2" соединяет каждую строку тз1 с каждой строкой тз2. Если в одной из таблиц строк нет, то и соединять нечего.
9 poddex
 
20.04.17
10:18
Действительно, ПОЛНОЕ СОЕДИНЕНИЕ надо было. Не допетрил, что "Декартово произведение" (6) ,в этом случае результат будет пустой, а соединение берет данные из обеих таблиц.
10 dezss
 
20.04.17
10:23
(9) полное или левое, тут не принципиально, если только одна из них может быть пустой...
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший