Имя: Пароль:
1C
1C 7.7
v7: Запрос с левым соединением
0 HighFly
 
14.01.13
10:35
Всем доброго времени суток!
Есть такой запрос:

|SELECT
|   Основной.Сотрудник [Сотрудник $Справочник.Сотрудники],
|   $ПоследнееЗначение.Сотрудники.Подразделение(Сотрудник,:КонецПериода) as [Отдел $Справочник.Подразделения],
|   Основной.КоличествоДнейОтпуска,
|   Основной.ДнейОтозвано,
|   (select top 1 k.date
|    from _1SConst k
|    left join $Справочник.Должности Долж1 on Долж1.id = k.value
|       where (k.ID = $ИсторияРеквизита.Сотрудники.Должность)
|     and (k.OBJID = Основной.Сотрудник)
|      order by k.date) Стаж
|FROM
|   (SELECT Сотр.ID as Сотрудник
|          , SUM(Документы.КолДней) КоличествоДнейОтпуска
|       , SUM(CAST(Документы.ОкончаниеОтзыва as float) - Cast(Документы.НачалоОтзыва AS float) + 1) ДнейОтозвано
|       FROM $Справочник.Сотрудники Сотр
|        LEFT JOIN (Select
|              $ДокОтпускПред.КоличествоДнейОтпуска as КолДней,
|              $ДокОтпускПред.Сотрудник as Сотрудник ,
|              $ДокОтзыва.Начало as НачалоОтзыва,
|              $ДокОтзыва.Окончание as ОкончаниеОтзыва
|            FROM $Документ.ПриказПоОтпуску ДокОтпускПред
|              LEFT JOIN $Документ.ПриказОбОтзыве ДокОтзыва On $ДокОтзыва.ДокОснование = ДокОтпускПред.IDDOC and $ДокОтзыва.ПродлятьОтпуск=0
|              INNER JOIN _1SJOURN AS j1 ON ДокОтпускПред.IDDOC = j1.IDDOC and (j1.Closed & 1 = 1)
|              Where $ДокОтпускПред.НачалоПериода >= :НачалоПериода and $ДокОтпускПред.НачалоПериода <= :КонецПериода
|              ) Документы
|          ON Сотр.ID = Документы.Сотрудник
|                    
|    WHERE $ПоследнееЗначение.Сотрудники.СостояниеФизЛица(Документы.Сотрудник,:ДатаАктуальности) = :СотрудникОсновной
|          and Сотр.id = $Сотр.ОсновнойЭлемент
|     GROUP BY
|     Сотр.ID
|     ) Основной

По идее в нем должны отбираться все элементы справочника "сотрудники", но на деле он отбирает только те, у которых правая часть соединения не равна NULL. Если убрать условие на периоды в подзапросе Документы, то выводятся все элементы справочника, но правая часть, естественно, неправильная. Долго проверял запрос, никак не могу найти ошибку, может быть кто-то подскажет?
1 Дык ё
 
14.01.13
10:39
добавь к условию

or Документы.Сотрудник is null
2 Ёпрст
 
14.01.13
10:40
(0) ясен пень, ты вот этим:

 WHERE $ПоследнееЗначение.Сотрудники.СостояниеФизЛица(Документы.Сотрудник,:ДатаАктуальности)

превратил left join
в inner join
3 Ёпрст
 
14.01.13
10:41
всё собственно, дальше думай, нужно ли тебе оно именно так.
4 HighFly
 
14.01.13
10:57
(2) Спасибо! Исправил.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан