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

Не могу понять, что не так?
Конф. УПП

```1c
    ВЫБРАТЬ
    СУММА(ОсновныеНачисленияРаботниковОрганизаций.КалендарныеДни) КАК КалендарныеДни,
    ОсновныеНачисленияРаботниковОрганизаций.ПериодДействияНачало,
    ОсновныеНачисленияРаботниковОрганизаций.ПериодДействияКонец,
    ОсновныеНачисленияРаботниковОрганизаций.Сотрудник
    ПОМЕСТИТЬ ЗапросОтпуска
    ИЗ
    РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК ОсновныеНачисленияРаботниковОрганизаций
    ГДЕ
    ОсновныеНачисленияРаботниковОрганизаций.ВидРасчета В(&ВидРасчета)
    И ОсновныеНачисленияРаботниковОрганизаций.Сотрудник = &Сотрудник
    И ОсновныеНачисленияРаботниковОрганизаций.ПериодРегистрации МЕЖДУ &Дата1 И &Дата2

    СГРУППИРОВАТЬ ПО
    ОсновныеНачисленияРаботниковОрганизаций.ПериодДействияНачало,
    ОсновныеНачисленияРаботниковОрганизаций.ПериодДействияКонец,
    ОсновныеНачисленияРаботниковОрганизаций.Сотрудник
    ;

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

    СГРУППИРОВАТЬ ПО
    РегламентированныйПроизводственныйКалендарь.ВидДня
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ЗапросОтпуска.КалендарныеДни - КоличестоПраздников.ДатаКалендаря КАК КалендарныеДни,
    ЗапросОтпуска.Сотрудник,
    ЗапросОтпуска.ПериодДействияНачало КАК Начало,
    ЗапросОтпуска.ПериодДействияКонец КАК Конец
    ИЗ
    ЗапросОтпуска КАК ЗапросОтпуска,
    КоличестоПраздников КАК КоличестоПраздников

    СГРУППИРОВАТЬ ПО
    КоличестоПраздников.ДатаКалендаря,
    ЗапросОтпуска.Сотрудник,
    ЗапросОтпуска.ПериодДействияНачало,
    ЗапросОтпуска.ПериодДействияКонец,
    ЗапросОтпуска.КалендарныеДни - КоличестоПраздников.ДатаКалендаря
```
---
щей суммы, а от каждой строки. На скрине прим
Тогда в последней таблице не делай левое соединение, а загоняй во временную таблицу в которой календарные дни будут просуммированы, а потом уже соединяй и вычитай с учетом ЕСТЬ NULL
---
В последний запрос нужно добавить:
КоличестоПраздников.ВидДня

Должны получить в итоге что-то типа :
Иванов рабочие 20
Иванов праздничные 2
Иванов выходные 9
---
первое надо обязательно настроить связи, если их нет, то просто полное по истина.
Раз результат не тот значит в данных вопрос. Скрины из консоли покажи?
---
В вашем случае если хоть одна временная таблица окажется пустой то запрос ничего не выдаст.
---
А можно как-то сделать, чтобы итог заполнялся без связи таблиц? У таблиц нет одинаковых полей по которым можно связать.
Я пробовал через ВЫБОР, но не получается. Т.е. хотел проверить, если второй запрос пустой, тогда просто вывести количество дней. Но не получается.
Или это нельзя реализовать?
---
А почему таблицы странным образом никак не связаны?
---
ЛЕВОЕ СОЕДИНЕНИЕ вам в помощь
---
(5)
(3)А как их связать? Там нет одинаковых полей. Во втором запросе я могу получить только календарный день и вид праздника. Ну а в первом только даты от и до.
---
да, связывайте таблицы через Левое соединение
---
Попробуйте так

    ЗапросОтпуска КАК ЗапросОтпуска
левое соединение
    КоличестоПраздников КАК КоличестоПраздников
по Истина
---
Ничего не меняется. Все-равно запрос пустой.

```1c
    ВЫБРАТЬ
    СУММА(ОсновныеНачисленияРаботниковОрганизаций.КалендарныеДни) КАК КалендарныеДни,
    ОсновныеНачисленияРаботниковОрганизаций.ПериодДействияНачало,
    ОсновныеНачисленияРаботниковОрганизаций.ПериодДействияКонец
    ПОМЕСТИТЬ ЗапросОтпуска
    ИЗ
    РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК ОсновныеНачисленияРаботниковОрганизаций
    ГДЕ
    ОсновныеНачисленияРаботниковОрганизаций.ВидРасчета В(&ВидРасчета)
    И ОсновныеНачисленияРаботниковОрганизаций.Сотрудник = &Сотрудник
    И ОсновныеНачисленияРаботниковОрганизаций.ПериодРегистрации МЕЖДУ &Дата1 И &Дата2

    СГРУППИРОВАТЬ ПО
    ОсновныеНачисленияРаботниковОрганизаций.ПериодДействияНачало,
    ОсновныеНачисленияРаботниковОрганизаций.ПериодДействияКонец
    ;

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

    СГРУППИРОВАТЬ ПО
    РегламентированныйПроизводственныйКалендарь.ВидДня
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    СУММА(ЗапросОтпуска.КалендарныеДни) - КоличестоПраздников.ДатаКалендаря КАК КалендарныеДни
    ИЗ
    ЗапросОтпуска КАК ЗапросОтпуска
    ЛЕВОЕ СОЕДИНЕНИЕ КоличестоПраздников КАК КоличестоПраздников
    ПО ИСТИНА

    СГРУППИРОВАТЬ ПО
    КоличестоПраздников.ДатаКалендаря
```
---
КоличестоПраздников.ДатаКалендаря
Если проблема только когда нет праздников, то нужно добавить

```1c
    ЕСТЬNULL(КоличестоПраздников.ДатаКалендаря, 0)
```

Будет так

```1c
    СУММА(ЗапросОтпуска.КалендарныеДни) - ЕСТЬNULL(КоличестоПраздников.ДатаКалендаря, 0) КАК КалендарныеДни
```
---
а такой запрос попробуйте выполнить

```1c
    ВЫБРАТЬ
    ЗапросОтпуска.КалендарныеДни,
    КоличестоПраздников.ДатаКалендаря,
    ЗапросОтпуска.Сотрудник,
    ЗапросОтпуска.ПериодДействияНачало КАК Начало,
    ЗапросОтпуска.ПериодДействияКонец КАК Конец
    ИЗ
    ЗапросОтпуска КАК ЗапросОтпуска
    ЛЕВОЕ СОЕДИНЕНИЕ КоличестоПраздников КАК КоличестоПраздников
    ПО ИСТИНА
```
---
(10)Частично получилось. Запрос отрабатывает, но после того, как вписал левое соединение он перестал суммировать.
Если у сотрудника, например 2 отпуска в месяце, то все отрабатывает отлично.
Но если у него 2 отпуска в один из которых попадает праздничный день, то суммировать запрос перестает. Причем отнимает праздники не от общей суммы, а от каждой строки. На скрине пример (отпусков получается 3 и 11).

```1c
    ВЫБРАТЬ
    СУММА(ОсновныеНачисленияРаботниковОрганизаций.КалендарныеДни) КАК КалендарныеДни,
    ОсновныеНачисленияРаботниковОрганизаций.ПериодДействияНачало,
    ОсновныеНачисленияРаботниковОрганизаций.ПериодДействияКонец
    ПОМЕСТИТЬ ЗапросОтпуска
    ИЗ
    РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК ОсновныеНачисленияРаботниковОрганизаций
    ГДЕ
    ОсновныеНачисленияРаботниковОрганизаций.ВидРасчета В(&ВидРасчета)
    И ОсновныеНачисленияРаботниковОрганизаций.Сотрудник = &Сотрудник
    И ОсновныеНачисленияРаботниковОрганизаций.ПериодРегистрации МЕЖДУ &Дата1 И &Дата2

    СГРУППИРОВАТЬ ПО
    ОсновныеНачисленияРаботниковОрганизаций.ПериодДействияНачало,
    ОсновныеНачисленияРаботниковОрганизаций.ПериодДействияКонец,
    ОсновныеНачисленияРаботниковОрганизаций.КалендарныеДни
    ;

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

    СГРУППИРОВАТЬ ПО
    РегламентированныйПроизводственныйКалендарь.ВидДня
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВЫБОР
    КОГДА КоличестоПраздников.ДатаКалендаря ЕСТЬ NULL
    ТОГДА СУММА(ЗапросОтпуска.КалендарныеДни)
    ИНАЧЕ СУММА(ЗапросОтпуска.КалендарныеДни) - КоличестоПраздников.ДатаКалендаря
    КОНЕЦ КАК Результат
    ИЗ
    ЗапросОтпуска КАК ЗапросОтпуска
    ЛЕВОЕ СОЕДИНЕНИЕ КоличестоПраздников КАК КоличестоПраздников
    ПО (ИСТИНА)

    СГРУППИРОВАТЬ ПО
    КоличестоПраздников.ДатаКалендаря,
    ЗапросОтпуска.КалендарныеДни
```
---
щей суммы, а от каждой строки. На скрине прим
Тогда в последней таблице не делай левое соединение, а загоняй во временную таблицу в которой календарные дни будут просуммированы, а потом уже соединяй и вычитай с учетом ЕСТЬ NULL
---
(15)Спасибо. Теперь все работает:

```1c
    ВЫБРАТЬ
    СУММА(ОсновныеНачисленияРаботниковОрганизаций.КалендарныеДни) КАК КалендарныеДни,
    ОсновныеНачисленияРаботниковОрганизаций.ПериодДействияНачало,
    ОсновныеНачисленияРаботниковОрганизаций.ПериодДействияКонец
    ПОМЕСТИТЬ ЗапросОтпуска
    ИЗ
    РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК ОсновныеНачисленияРаботниковОрганизаций
    ГДЕ
    ОсновныеНачисленияРаботниковОрганизаций.ВидРасчета В(&ВидРасчета)
    И ОсновныеНачисленияРаботниковОрганизаций.Сотрудник = &Сотрудник
    И ОсновныеНачисленияРаботниковОрганизаций.ПериодРегистрации МЕЖДУ &Дата1 И &Дата2

    СГРУППИРОВАТЬ ПО
    ОсновныеНачисленияРаботниковОрганизаций.ПериодДействияНачало,
    ОсновныеНачисленияРаботниковОрганизаций.ПериодДействияКонец
    ;

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

    СГРУППИРОВАТЬ ПО
    РегламентированныйПроизводственныйКалендарь.ВидДня
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    СУММА(ЗапросОтпуска.КалендарныеДни) КАК КалендарныеДни
    ПОМЕСТИТЬ ИтогОтпуска
    ИЗ
    ЗапросОтпуска КАК ЗапросОтпуска
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ИтогОтпуска.КалендарныеДни - ЕСТЬNULL(КоличестоПраздников.ДатаКалендаря, 0) КАК КалендарныеДни
    ИЗ
    ИтогОтпуска КАК ИтогОтпуска
    ЛЕВОЕ СОЕДИНЕНИЕ КоличестоПраздников КАК КоличестоПраздников
    ПО (ИСТИНА)

    СГРУППИРОВАТЬ ПО
    КоличестоПраздников.ДатаКалендаря,
    ИтогОтпуска.КалендарныеДни - ЕСТЬNULL(КоличестоПраздников.ДатаКалендаря, 0)
```