Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите с связями в запросе
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
kosalex
Есть запрос:
ВЫБРАТЬ
    ДанныеПроходныхКОДОС.Сотрудник КАК Сотрудник,
    ДанныеПроходныхКОДОС.ТабельныйНомер КАК ТабельныйНомер,
    ДанныеПроходныхКОДОС.График КАК График,
    ДанныеПроходныхКОДОС.ПодразделениеОрганизации КАК ПодразделениеОрганизации,
    ДанныеПроходныхКОДОС.Период1 КАК Период1,
    ДанныеПроходныхКОДОС.Период КАК ВремяВход
ИЗ
    РегистрСведений.ДанныеПроходныхКОДОС КАК ДанныеПроходныхКОДОС
ГДЕ
    ДанныеПроходныхКОДОС.Период МЕЖДУ &ПериодНачало И &ПериодКонец
    И ДанныеПроходныхКОДОС.Сотрудник В(&Сотрудник)
    И (ДанныеПроходныхКОДОС.Событие = "Вход"
            ИЛИ ДанныеПроходныхКОДОС.Событие = "Въезд")


Результат:


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


Результат:


Вопрос: Какие должны быть связи между итими запросами чтобы получилось:
Сотрудник|ВремяВхода|ВремяВыхода|День

Сейчас получается вот так:


А должно:

Сотрудник | ВремяВхода |ВремяВыхода |День
Сотрудник1| 08.09.2015 7:36:00 | 08.09.2015 10:53:00|8
Сотрудник1| 08.09.2015 15:00:00| 08.09.2015 16:34:00|8

Видно что записи связываются не правильно. Помогите плиз...
sava1
в первом запросе мин(период) как времяВхода
во втором мах() Время выхода
объдинить результат и сгруппировать
kosalex
Цитата(sava1 @ 21.09.15, 11:57) необходимо зарегистрироваться для просмотра ссылки
в первом запросе мин(период) как времяВхода
во втором мах() Время выхода
объдинить результат и сгруппировать


Что то не получается...у меня ситуация когда сотрудник может выйти и зайти несколько раз за рабочий день
sava1
А видеть это как надо?
kosalex
Цитата(sava1 @ 21.09.15, 12:45) необходимо зарегистрироваться для просмотра ссылки
А видеть это как надо?

"Это" - это что? код или то что сотрудник может зайти и выйти несколько раз?

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

СГРУППИРОВАТЬ ПО
    ДанныеПроходныхКОДОС.Сотрудник,
    ДанныеПроходныхКОДОС.ТабельныйНомер,
    ДанныеПроходныхКОДОС.ПодразделениеОрганизации,
    ДанныеПроходныхКОДОС.График,
    ДЕНЬ(ДанныеПроходныхКОДОС.Период1)

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

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

СГРУППИРОВАТЬ ПО
    ДанныеПроходныхКОДОС.Сотрудник,
    ДанныеПроходныхКОДОС.ПодразделениеОрганизации,
    ДанныеПроходныхКОДОС.ТабельныйНомер,
    ДанныеПроходныхКОДОС.График,
    ДЕНЬ(ДанныеПроходныхКОДОС.Период1)


Результат:

sava1
Цитата(kosalex @ 21.09.15, 12:52) необходимо зарегистрироваться для просмотра ссылки
то что сотрудник может зайти и выйти несколько раз

kosalex
Посмотрите пожалуйста первый пост. Без обид, думал что будет понятно. Как есть сейчас - на картинке, а ниже текстом написано как мне надо. Красным квадратом выделено то что сотрудник может входить и выходить несколько раз за рабочий день.
sava1
Нужно показывать все входы и выходы?
kosalex
Цитата(sava1 @ 21.09.15, 12:59) необходимо зарегистрироваться для просмотра ссылки
Нужно показывать все входы и выходы?


Нужно получить табель с отработанным временем.

Сотрудник может войти и выйти один раз, а может несколько раз войти и выйти. нужно посчитать время нахождения его на предприятии, т.е. от выхода2 отнять вход2 = время2, от выхода1 отнять вход1 = время1

Отработанное время за день = Время1+Время2

sava1
Когда-то обсуждалась эта тема и я предлагал - время входа регистрировать с минусом - в итоге отработанное время находится простым суммированием.
kosalex
Цитата(sava1 @ 21.09.15, 13:06) необходимо зарегистрироваться для просмотра ссылки
Когда-то обсуждалась эта тема и я предлагал - время входа регистрировать с минусом - в итоге отработанное время находится простым суммированием.



Оно и так найдется простым суммированием, тут дело то в другом. По моему без разницы с минусом писать или без если не получается в выборке получить запись Сотрудник/ВремяВход/ВремяВыхода/День
sava1
Не надо ВремяВход,ВремяВыход -
Выбираем входы с минусом, выходы с плюсом в одну колонку Отработанное время
Группируем выборку по сотрудник,дата
kosalex
Цитата(sava1 @ 21.09.15, 13:11) необходимо зарегистрироваться для просмотра ссылки
Не надо ВремяВход,ВремяВыход -
Выбираем входы с минусом, выходы с плюсом в одну колонку Отработанное время
Группируем выборку по сотрудник,дата


Угу)

А как быть в моем случае с событием вход/выход?

sava1
Select .......
SUM(CASE WHEN ДанныеПроходныхКОДОС.Событие = "Вход" ИЛИ ДанныеПроходныхКОДОС.Событие = "Въезд") THEN -Период ELSE Период END) as OtrabVremya
kosalex
Цитата(sava1 @ 21.09.15, 13:17) необходимо зарегистрироваться для просмотра ссылки
Select .......
SUM(CASE WHEN ДанныеПроходныхКОДОС.Событие = "Вход" ИЛИ ДанныеПроходныхКОДОС.Событие = "Въезд") THEN -Период ELSE Период END) as OtrabVremya



Сенкс!Попробую

Цитата(sava1 @ 21.09.15, 13:17) необходимо зарегистрироваться для просмотра ссылки
Select .......
SUM(CASE WHEN ДанныеПроходныхКОДОС.Событие = "Вход" ИЛИ ДанныеПроходныхКОДОС.Событие = "Въезд") THEN -Период ELSE Период END) as OtrabVremya



А "-Период" не получить, там тип дата ((
sava1
Преобразовать время к числу (Период для примера)
kosalex
Цитата(sava1 @ 21.09.15, 13:31) необходимо зарегистрироваться для просмотра ссылки
Преобразовать время к числу (Период для примера)



В запросе преобразовать получиться?

Или лучше выгруззить в ТЗ и там уже проставить минусы?
sava1
Счас не вспомню, но никто не отменял Выразить,Подстрока
kosalex
Цитата(sava1 @ 21.09.15, 13:35) необходимо зарегистрироваться для просмотра ссылки
Счас не вспомню, но никто не отменял Выразить,Подстрока



ВЫРАЗИТЬ...не хочет работать с датой
sava1
ВЫРАЗИТЬ(РАЗНОСТЬДАТ(Дата1, Дата2, Секунда))
Вместо дата1/Дата2 подставлять НАЧАЛОПЕРИОДА(Период, Секунда)
kosalex
Цитата(sava1 @ 21.09.15, 13:46) необходимо зарегистрироваться для просмотра ссылки
ВЫРАЗИТЬ(РАЗНОСТЬДАТ(Дата1, Дата2, Секунда))
Вместо дата1/Дата2 подставлять НАЧАЛОПЕРИОДА(Период, Секунда)

нет такого как секунда :-)
andr_andrey
Цитата(kosalex @ 21.09.15, 13:04) необходимо зарегистрироваться для просмотра ссылки
Нужно получить табель с отработанным временем.

Сотрудник может войти и выйти один раз, а может несколько раз войти и выйти. нужно посчитать время нахождения его на предприятии, т.е. от выхода2 отнять вход2 = время2, от выхода1 отнять вход1 = время1

Отработанное время за день = Время1+Время2
...


Не всё так просто, сотрудник может войти не один раз подряд, и выйти не один раз подряд, пропуском щёлкнул, но не прошёл, замешкался, забыл что-то в шкафчике, позвал начальник назад.
kosalex
Цитата(andr_andrey @ 21.09.15, 14:17) необходимо зарегистрироваться для просмотра ссылки
Не всё так просто, сотрудник может войти не один раз подряд, и выйти не один раз подряд, пропуском щёлкнул, но не прошёл, замешкался, забыл что-то в шкафчике, позвал начальник назад.


Согласен. Этого в задаче нет, сотрудник входит и выходит, может сделать это несколько раз. Если он зашел и не вышел и т.п. то это уже отслеживает ОК.
sava1
Цитата(kosalex @ 21.09.15, 13:59) необходимо зарегистрироваться для просмотра ссылки
нет такого как секунда :-)

Да уж на автомате 09000000.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.