Добрый день! Есть производственный календарь, есть данные о посещении сотрудниками офиса. Нужно вывести данные в виде - Дата, сотрудник, признак посещения. И так на каждую дату, по каждому сотруднику.
Делаю левое соединение чтобы получить кто в какой день выходил. Но если сотрудник не выходил, то эти дни по нему не выводятся. Как сделать, чтобы даже если человек не приходил на работу дата из календаря и его фамилия выводились тоже, просто с отрицательным признаком выхода на работу?
---
Выбрать дата, сотрудник из Даты, сотрудники - будет полный список всех сотрудников и всех дат.
Потом левое соединение присутствия по дата=дата и сотрудник-сотрудник.
---
К календарю делай левое соединение своих данных, тогда будут все даты.
---
Да, даты все есть, но без сотрудника и признака отсутствия на работе.
Т.е. сейчас так
Сотрудник Дата Присутствовал на работе
Иванов 01.09 V
Петров 01.09 V
Сидоров 01.09 V
Иванов 02.09 V
Петров 02.09 V
                    03.09
                    04.09
                    05.09
Т.е. если Сидорова не было 2 числа, то он и не выводится. И если нет данных по 3,4,5 то тоже выводятся пустые даты..
А надо чтобы во все даты по всем были данные, только с признаком отсутствия на работе
---
Кросс соединение нужно.
---
Как оно делается?
---
Выбрать дата, сотрудник из Даты, сотрудники - будет полный список всех сотрудников и всех дат.
Потом левое соединение присутствия по дата=дата и сотрудник-сотрудник.
---
Выбрать дата, сотрудник из Даты, сотрудники - будет полный список всех сотрудников и всех дат.
Немного не понятно.
У меня сейчас есть регистр где хранится информация по тому какой сотрудник в какой день был.
Сотрудник, Дата, Присутствие
И производственный календарь.
Надо выбрать из производственного календаря Дата, из второго регистра Сотрудника?
---
Да
---
Ок, да, я получила таблицу как в своем случае. Если Сидорова не было второго, то он и не выводится.
Потом левое соединение присутствия по дата=дата и сотрудник-сотрудник.

Нужно сделать левое соединение с регистром присутствия?
По равенству дат и сотрудников?
Я так сделала, но ничего не поменялось.. Как не было Сидорова с отсутствием, так и нет.
---
Где запрос, я что критиковать-то буду?))
---
:-) Ну что сразу то критиковать?

```1c
    ВЫБРАТЬ
    РегламентированныйПроизводственныйКалендарь.ДатаКалендаря
    ПОМЕСТИТЬ ВсеДниВПериоде
    ИЗ
    РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
    ГДЕ
    РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &НачалоПериода И &ОкончаниеПериода
    ;

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

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВТдляКроссТаблицы1.Сотрудник,
    ВТдляКроссТаблицы1.ДатаКалендаря,
    ПрисутствиеВОфисе.Присутствие
    ИЗ
    ВТдляКроссТаблицы1 КАК ВТдляКроссТаблицы1
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений. ПрисутствиеВОфисе КАК ПрисутствиеВОфисе
    ПО ВТдляКроссТаблицы1.Сотрудник = ПрисутствиеВОфисе.Сотрудник
    И ВТдляКроссТаблицы1.ДатаКалендаря = ПрисутствиеВОфисе.Период
```
---
Ну разве я так написала? У вас во второй таблице левое соединение, а я писала - кросс

Выбрать дата, сотрудник из Даты,(<-это запятая) сотрудники
---
Да, я эту запятую и не поняла и переспросила.
Мне нужно 2 раза выбрать сотрудника из одной талицы?
Что такое кросс соединение?
---
Полное соединение двух таблиц. Для каждого элемента одной таблицы сопоставить элемент другой таблицы без условий.
---
Просто исправьте вторую таблицу так, как я вам написала в (15)
---
Добавила различные. Поменяла вид соединения, не получается все равно.

```1c
    ВЫБРАТЬ
    РегламентированныйПроизводственныйКалендарь.ДатаКалендаря
    ПОМЕСТИТЬ ВсеДниВПериоде
    ИЗ
    РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
    ГДЕ
    РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &НачалоПериода И &ОкончаниеПериода
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ РАЗЛИЧНЫЕ
    ПрисутствиеВОфисе.Сотрудник,
    ВсеДниВПериоде.ДатаКалендаря
    ПОМЕСТИТЬ ВТдляКроссТаблицы1
    ИЗ
    ВсеДниВПериоде КАК ВсеДниВПериоде
    ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.ПрисутствиеВОфисе КАК ПрисутствиеВОфисе
    ПО ВсеДниВПериоде.ДатаКалендаря = ПрисутствиеВОфисе.Период
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВТдляКроссТаблицы1.Сотрудник,
    ВТдляКроссТаблицы1.ДатаКалендаря,
    ПрисутствиеВОфисе.Присутствие
    ИЗ
    ВТдляКроссТаблицы1 КАК ВТдляКроссТаблицы1
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПрисутствиВОфисе КАК ПрисутствиеВОфисе
    ПО ВТдляКроссТаблицы1.Сотрудник = ПрисутствиеВОфисе.Сотрудник
    И ВТдляКроссТаблицы1.ДатаКалендаря = ПрисутствиеВОфисе.Период
```
---
ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.ПрисутствиеВОфисе КАК ПрисутствиеВОфисе
        ПО ВсеДниВПериоде.ДатаКалендаря = ПрисутствиеВОфисе.ПериодЭто просто феерично. У вас на клавиатуре не работают кнопки ctrl+C? Полное соединение - это совсем не кросс соединение.
---
Что такое кросс соединение?
Полное соединение двух таблиц
Полное соединение - это совсем не кросс соединение.
---
В данной цитате "Полное" - это не "ПОЛНОЕ" из запроса. Там дальше в цитате уточнение. А в (15) полночтью готовый запрос для второй таблицы.
---
Ааа, все поняла. Я думала, что в (15) не весь запрос влез. А это и весь запрос. Просто без соединения.
Ок, сейчас попробую.
---
Спасибо! Все работает! Попутно еще решилась проблема пустой записи в начале таблицы.
---
```1c
    ВЫбрать
    .....
    ИЗ Календарь
    Левое Соединение АктуальныеСотрудники
    Левое Соединение ДанныеСКУД
```
---
Запрос в студию.
---
Выше добавила.
---
```1c
    ВЫБРАТЬ различные
    ПрисутствиеВОфисе.Сотрудник,
    ВсеДниВПериоде.ДатаКалендаря
    ПОМЕСТИТЬ ВТдляКроссТаблицы1
    ИЗ
    ВсеДниВПериоде КАК ВсеДниВПериоде
    , РегистрСведений.ПрисутствиеВОфисе КАК ПрисутствиеВОфисе
    ;
```
---
Да согласен, тоже это сразу заметил