По теме из базы знаний
Найденные решения
Во временную таблицу помещаешь первые 100000 строк отсортированных по сотруднику и дате. В неё же добавляешь поле Автонумерация(). Затем из временной таблицы выбираешь строки где событие = "вход" и левым соединением с этой же временной таблицей ищешь его "выход" по условию сотрудникВТ1 = сотрудникВТ2 и НомерЗаписиВТ = НомерЗаписиВТ2 - 1
В (10) чуть быстрее дан ответ. Только не нужно отбирать отдельно входы и выходы во временную таблицу.
В (10) чуть быстрее дан ответ. Только не нужно отбирать отдельно входы и выходы во временную таблицу.
(10)
(11)Сделал почти по той схеми что вы предложили. Создал две временных таблицы, в одной только входы, в другой только выходы. Объединил их все выходы по сотруднику к каждому входу, затем сгрупировал по полю организация, сотрудник, дата входа, а поле дата выхода взял минимальную.
(11)Сделал почти по той схеми что вы предложили. Создал две временных таблицы, в одной только входы, в другой только выходы. Объединил их все выходы по сотруднику к каждому входу, затем сгрупировал по полю организация, сотрудник, дата входа, а поле дата выхода взял минимальную.
ВЫБРАТЬ
ВЫРАЗИТЬ(ТЗСписка.Фирма КАК СТРОКА(100)) КАК Организация,
ВЫРАЗИТЬ(ТЗСписка.Сотрудник КАК СТРОКА(100)) КАК Сотрудник,
ТЗСписка.TDATETIME КАК Дата,
ВЫРАЗИТЬ(ТЗСписка.Направление КАК СТРОКА(10)) КАК Событие
ПОМЕСТИТЬ ВТ_ДаннеXML
ИЗ
&ТЗСписка КАК ТЗСписка
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_ДаннеXML.Организация КАК Организация,
ВТ_ДаннеXML.Сотрудник КАК Сотрудник,
ВТ_ДаннеXML.Дата КАК ДатаВхода
ПОМЕСТИТЬ ВТ_Входы
ИЗ
ВТ_ДаннеXML КАК ВТ_ДаннеXML
ГДЕ
ВТ_ДаннеXML.Событие = "Вход"
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_ДаннеXML.Организация КАК Организация,
ВТ_ДаннеXML.Сотрудник КАК Сотрудник,
ВТ_ДаннеXML.Дата КАК ДатаВыхода
ПОМЕСТИТЬ ВТ_Выходы
ИЗ
ВТ_ДаннеXML КАК ВТ_ДаннеXML
ГДЕ
ВТ_ДаннеXML.Событие = "Выход"
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_Входы.Организация КАК Организация,
ВТ_Входы.Сотрудник КАК Сотрудник,
ВТ_Входы.ДатаВхода КАК ДатаВхода,
МИНИМУМ(ВТ_Выходы.ДатаВыхода) КАК ДатаВыхода
ИЗ
ВТ_Входы КАК ВТ_Входы
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Выходы КАК ВТ_Выходы
ПО ВТ_Входы.Организация = ВТ_Выходы.Организация
И ВТ_Входы.Сотрудник = ВТ_Выходы.Сотрудник
И ВТ_Входы.ДатаВхода < ВТ_Выходы.ДатаВыхода
СГРУППИРОВАТЬ ПО
ВТ_Входы.Организация,
ВТ_Входы.Сотрудник,
ВТ_Входы.ДатаВхода
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
а если он входил-выходил несколько раз за день? (на обед ходил)
а если вошёл сегодня вышел завтра?
а если забыл пробиться и два раза вошёл?
если этого нет - в первую ВТ помещаешь иванов, день, время где чтото равно вход
во втором присоединяешь к нему чтото равно выход по иванов = иванов и день = день
а если вошёл сегодня вышел завтра?
а если забыл пробиться и два раза вошёл?
если этого нет - в первую ВТ помещаешь иванов, день, время где чтото равно вход
во втором присоединяешь к нему чтото равно выход по иванов = иванов и день = день
(4)Здесь строгий контроль программы СКУД из которой эти данные приходят в 1С. Не может быть двойного входа без выхода, турникет выдаст ошибку и не пустит сотрудника пока охрана ему не пропишет выход. Т.е. последовательность в регистре строгая, если есть вход, то следующей записью будет обязательно выход. Даже пускай и следующим днём (сотрудник например работал в ночь).
Во временную таблицу помещаешь первые 100000 строк отсортированных по сотруднику и дате. В неё же добавляешь поле Автонумерация(). Затем из временной таблицы выбираешь строки где событие = "вход" и левым соединением с этой же временной таблицей ищешь его "выход" по условию сотрудникВТ1 = сотрудникВТ2 и НомерЗаписиВТ = НомерЗаписиВТ2 - 1
В (10) чуть быстрее дан ответ. Только не нужно отбирать отдельно входы и выходы во временную таблицу.
В (10) чуть быстрее дан ответ. Только не нужно отбирать отдельно входы и выходы во временную таблицу.
(10)
(11)Сделал почти по той схеми что вы предложили. Создал две временных таблицы, в одной только входы, в другой только выходы. Объединил их все выходы по сотруднику к каждому входу, затем сгрупировал по полю организация, сотрудник, дата входа, а поле дата выхода взял минимальную.
(11)Сделал почти по той схеми что вы предложили. Создал две временных таблицы, в одной только входы, в другой только выходы. Объединил их все выходы по сотруднику к каждому входу, затем сгрупировал по полю организация, сотрудник, дата входа, а поле дата выхода взял минимальную.
ВЫБРАТЬ
ВЫРАЗИТЬ(ТЗСписка.Фирма КАК СТРОКА(100)) КАК Организация,
ВЫРАЗИТЬ(ТЗСписка.Сотрудник КАК СТРОКА(100)) КАК Сотрудник,
ТЗСписка.TDATETIME КАК Дата,
ВЫРАЗИТЬ(ТЗСписка.Направление КАК СТРОКА(10)) КАК Событие
ПОМЕСТИТЬ ВТ_ДаннеXML
ИЗ
&ТЗСписка КАК ТЗСписка
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_ДаннеXML.Организация КАК Организация,
ВТ_ДаннеXML.Сотрудник КАК Сотрудник,
ВТ_ДаннеXML.Дата КАК ДатаВхода
ПОМЕСТИТЬ ВТ_Входы
ИЗ
ВТ_ДаннеXML КАК ВТ_ДаннеXML
ГДЕ
ВТ_ДаннеXML.Событие = "Вход"
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_ДаннеXML.Организация КАК Организация,
ВТ_ДаннеXML.Сотрудник КАК Сотрудник,
ВТ_ДаннеXML.Дата КАК ДатаВыхода
ПОМЕСТИТЬ ВТ_Выходы
ИЗ
ВТ_ДаннеXML КАК ВТ_ДаннеXML
ГДЕ
ВТ_ДаннеXML.Событие = "Выход"
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_Входы.Организация КАК Организация,
ВТ_Входы.Сотрудник КАК Сотрудник,
ВТ_Входы.ДатаВхода КАК ДатаВхода,
МИНИМУМ(ВТ_Выходы.ДатаВыхода) КАК ДатаВыхода
ИЗ
ВТ_Входы КАК ВТ_Входы
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Выходы КАК ВТ_Выходы
ПО ВТ_Входы.Организация = ВТ_Выходы.Организация
И ВТ_Входы.Сотрудник = ВТ_Выходы.Сотрудник
И ВТ_Входы.ДатаВхода < ВТ_Выходы.ДатаВыхода
СГРУППИРОВАТЬ ПО
ВТ_Входы.Организация,
ВТ_Входы.Сотрудник,
ВТ_Входы.ДатаВхода
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот