|
учет рабочего времени по данным пропускной системы | ☑ | ||
---|---|---|---|---|
0
Abba
28.01.20
✎
15:57
|
TimeVal HozOrgan Remar Mode
09.12.2019 9:26:38 58 6: Выход 4-й этаж служебный, Считыватель 2, Пр 2 09.01.2020 9:06:40 103 2: Вход дверь 2-й этаж служебный, Считыватель 1 20.01.2020 16:10:50 77 2: Вход дверь 2-й этаж служебный, Считыватель 1 21.01.2020 10:32:51 47 3: Выход 3-й этаж главный вход, Считыватель 2, 2 02.12.2019 17:00:41 56 6: Вход 4-й этаж служебный, Считыватель 1, При 1 23.01.2020 9:32:52 16 3: Вход 3-й этаж главный вход, Считыватель 1, 1 24.01.2020 14:24:22 54 4: Вход 3-й этаж служебный, Считыватель 1, При 1 17.01.2020 10:41:14 37 2: Выход дверь 2-й этаж служебный, Считыватель 2 27.01.2020 9:53:30 69 6: Выход 4-й этаж служебный, Считыватель 2, Пр 2 27.12.2019 13:47:58 64 2: Выход дверь 2-й этаж служебный, Считыватель 2 16.01.2020 8:07:03 89 6: Вход 4-й этаж служебный, Считыватель 1, При 1 30.12.2019 14:26:43 58 6: Выход 4-й этаж служебный, Считыватель 2, Пр 2 14.01.2020 8:56:27 36 1: Вход 2-й этаж гл.вход, Считыватель 1, Прибо 1 16.12.2019 17:34:00 4 5: Выход 4-й этаж главный вход, Считыватель 2, 2 23.12.2019 18:19:25 26 3: Выход 3-й этаж главный вход, Считыватель 2, 2 03.12.2019 16:22:59 48 2: Вход дверь 2-й этаж служебный, Считыватель 1 HozOrgan - ID сотрудника Mode - 1-вход 2- выход есть такая таблица,как по ней написать отчет о том,какие сотрудники в течении рабочего дня отлучались больше чем на 20 минут |
|||
1
olegves
28.01.20
✎
15:58
|
(0) запросом
|
|||
2
Solitar
28.01.20
✎
15:58
|
Интеграция с Орионом ?)
|
|||
3
XLife
28.01.20
✎
16:00
|
кто таких на работу берёт...
|
|||
4
shuhard
28.01.20
✎
16:00
|
(2) +100500
и как всегда вышел 3 раза, а зашёл 1 |
|||
5
Дмитрий
28.01.20
✎
16:09
|
опубликуй ссылку на этот форум в чате предприятия и иди к директору за премией по случаю резкого скачка дисциплины )
|
|||
6
Йохохо
28.01.20
✎
16:09
|
(4) а некурящие 2/2
|
|||
7
Deon
28.01.20
✎
16:10
|
(0) Время работы каждого сотрудника есть где брать? А то вот я работаю до 18:00, а ушел в 17:35. Это отсутствие в 25 минуто тоже должно попасть в отчет )
|
|||
8
Йохохо
28.01.20
✎
16:11
|
и по этому отчету никак, нет Зоны, надо раб зону и внешний мир
|
|||
9
ZDenis
28.01.20
✎
16:13
|
(0) А если он вышел через 1 дверь, а вошел через другую (при этом дверь была открыта кем-то ранее и он не прикладывал карточку к считывателю). А так тут перец #58 два раза вышел. Первый раз в канун нового года, а второй уже девятого числа))
|
|||
10
Deon
28.01.20
✎
16:16
|
(9) Я в таких случаях считал, что если первая запись в дне Выход, то он пришел на работу точно вовремя. Хорошо, что все были 5-дневщиками
|
|||
11
Garikk
28.01.20
✎
16:19
|
(9) это быстро лечится - включением контроля прохода в помещение, что нельзя выйти из помещения не войдя туда, моментально все научатся карточки прикладывать, даже штрафовать никого не придется
|
|||
12
Йохохо
28.01.20
✎
16:21
|
(11) а проходная типа тамбур и денег стоит и место занимает. и 100 носов на смену за час пройдут еле еле)
|
|||
13
8 bit
28.01.20
✎
16:21
|
(0) пиши вручную
|
|||
14
olegves
28.01.20
✎
16:25
|
(8) есть событие вход и выход
|
|||
15
Garikk
28.01.20
✎
16:25
|
(12) нормально пройдут, я работал в двух конторах где уровень безопасности обязывает держать тамбур-шлюз...за 15 минут 400 человек в здание заходят без огромных очередей
|
|||
16
Йохохо
28.01.20
✎
16:28
|
(14) это не события покинул рабочее место
|
|||
17
rphosts
28.01.20
✎
16:29
|
(0) не перко случаем?
Собирали в 1С по регламенту минут в 5 раз, со всех филиалов (на самом деле с 1 сервера перко), были допформочки где челы регили причину отсутствия(заблаговременно, ну кроме выйти покурить но покурить это только менее 5 мин отсутствия)... ну и отчёты были (по недоработке/переработке, оператиынеы сведения о присутствии/отсутствии/командировках/...) |
|||
18
Garikk
28.01.20
✎
16:31
|
<челы регили причину отсутствия>
господи как я счастлив что в ит работаю... такое впечатление что в других профессиях какойто ужас и эксплуатация крепостных крестьян |
|||
19
olegves
28.01.20
✎
16:32
|
(17) имхо, считать жопочасы - последнее дело, и показывает "качество" среднего менеджерского звена
|
|||
20
Abba
29.01.20
✎
13:49
|
(1) каким? как найти интервал между выходом и входом более 20 минут?
|
|||
21
Abba
29.01.20
✎
13:50
|
почти все замечания не по делу,просто потрындеть зашли?
|
|||
22
TopProger
29.01.20
✎
13:55
|
(21) ну просто готовое решение долго набирать, а свои наработки вы не представили
|
|||
23
TopProger
29.01.20
✎
13:56
|
(20) Ну наверно надо как то подобрать чтобы в одной строке таблицы был выход и ближайший вход, скорее всего путем соединения таблицы с собой. А затем заюзать РазностьДат и по результату наложить отбор.
|
|||
24
Abba
29.01.20
✎
14:05
|
(23) вот ближайший вход как организовать?
|
|||
25
TopProger
29.01.20
✎
14:05
|
(24) путем соединения в запросе таблицы данных с собой и наложение условий на поля этой таблицы
|
|||
26
Масянька
29.01.20
✎
14:09
|
(19) Мечта любого безопасника.
|
|||
27
Abba
29.01.20
✎
14:09
|
(25) это понятно,какие условия поставить?
|
|||
28
Йохохо
29.01.20
✎
14:10
|
(21) вообще то а) в болиде есть готовый отчет б) задача для десятиклассника
|
|||
29
TopProger
29.01.20
✎
14:13
|
(27) а какие условия вы пробовали? Готовое решение никто не даст, уже понятно по постав выше. Надо пробовать самому
|
|||
30
Abba
29.01.20
✎
14:15
|
(29) ВЫБРАТЬ ПЕРВЫЕ 100
dbo_pList.ID КАК ID, dbo_pList.Name КАК Name, dbo_pList.FirstName КАК FirstName, dbo_pList.MidName КАК MidName, dbo_pLogData.TimeVal КАК TimeVal, dbo_pLogData.Mode КАК Mode ИЗ ВнешнийИсточникДанных.ПроходнаяSQL.Таблица.dbo_pList КАК dbo_pList ЛЕВОЕ СОЕДИНЕНИЕ ВнешнийИсточникДанных.ПроходнаяSQL.Таблица.dbo_pLogData КАК dbo_pLogData ПО (dbo_pList.ID = dbo_pLogData.HozOrgan) СГРУППИРОВАТЬ ПО dbo_pList.ID, dbo_pList.Name, dbo_pList.FirstName, dbo_pList.MidName, dbo_pLogData.TimeVal, dbo_pLogData.Mode |
|||
31
Abba
29.01.20
✎
14:16
|
(28) ну дак опишите решение?или вы в 9 классе?
|
|||
32
TopProger
29.01.20
✎
14:19
|
(30) ну очевидно, что вы ничего не пробовали
|
|||
33
Abba
29.01.20
✎
14:24
|
(32) вон же написано выше,мой запрос.но там еще другие таблицы привязаны,на них не обращайте внимание
|
|||
34
VladZ
29.01.20
✎
14:25
|
(7) Это другая задача. :)
|
|||
35
Abba
29.01.20
✎
14:28
|
(32) не то скопировала.вот
ВЫБРАТЬ dbo_pLogData.HozOrgan КАК HozOrgan, dbo_pLogData.TimeVal КАК времяВхода ПОМЕСТИТЬ ВнешнийИсточникДанных.ПроходнаяSQL.ВременнаяТаблица.ВременнаяТаблица ИЗ ВнешнийИсточникДанных.ПроходнаяSQL.Таблица.dbo_pLogData КАК dbo_pLogData ГДЕ dbo_pLogData.Mode = 1 СГРУППИРОВАТЬ ПО dbo_pLogData.HozOrgan, dbo_pLogData.TimeVal ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ dbo_pLogData.HozOrgan КАК HozOrgan, dbo_pLogData.TimeVal КАК времявыхода ПОМЕСТИТЬ ВнешнийИсточникДанных.ПроходнаяSQL.ВременнаяТаблица.ВременнаяТаблицаВыход ИЗ ВнешнийИсточникДанных.ПроходнаяSQL.Таблица.dbo_pLogData КАК dbo_pLogData ГДЕ dbo_pLogData.Mode = 2 СГРУППИРОВАТЬ ПО dbo_pLogData.HozOrgan, dbo_pLogData.TimeVal ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПроходнаяSQLВременнаяТаблицаВременнаяТаблица.HozOrgan КАК HozOrgan, ВЫБОР КОГДА РАЗНОСТЬДАТ(ПроходнаяSQLВременнаяТаблицаВременнаяТаблицаВыход.времявыхода, ПроходнаяSQLВременнаяТаблицаВременнаяТаблица.времяВхода, МИНУТА) > 20 И РАЗНОСТЬДАТ(ПроходнаяSQLВременнаяТаблицаВременнаяТаблицаВыход.времявыхода, ПроходнаяSQLВременнаяТаблицаВременнаяТаблица.времяВхода, МИНУТА) < 900 ТОГДА РАЗНОСТЬДАТ(ПроходнаяSQLВременнаяТаблицаВременнаяТаблицаВыход.времявыхода, ПроходнаяSQLВременнаяТаблицаВременнаяТаблица.времяВхода, МИНУТА) КОНЕЦ КАК Поле1, ПроходнаяSQLВременнаяТаблицаВременнаяТаблица.времяВхода КАК времяВхода, ПроходнаяSQLВременнаяТаблицаВременнаяТаблицаВыход.времявыхода КАК времявыхода ПОМЕСТИТЬ ВнешнийИсточникДанных.ПроходнаяSQL.ВременнаяТаблица.ВременнаяТаблицаИнтервал ИЗ ВнешнийИсточникДанных.ПроходнаяSQL.ВременнаяТаблица.ВременнаяТаблица КАК ПроходнаяSQLВременнаяТаблицаВременнаяТаблица ПОЛНОЕ СОЕДИНЕНИЕ ВнешнийИсточникДанных.ПроходнаяSQL.ВременнаяТаблица.ВременнаяТаблицаВыход КАК ПроходнаяSQLВременнаяТаблицаВременнаяТаблицаВыход ПО ПроходнаяSQLВременнаяТаблицаВременнаяТаблица.HozOrgan = ПроходнаяSQLВременнаяТаблицаВременнаяТаблицаВыход.HozOrgan И (НАЧАЛОПЕРИОДА(ПроходнаяSQLВременнаяТаблицаВременнаяТаблицаВыход.времявыхода, ДЕНЬ) = НАЧАЛОПЕРИОДА(ПроходнаяSQLВременнаяТаблицаВременнаяТаблица.времяВхода, ДЕНЬ)) И (ПроходнаяSQLВременнаяТаблицаВременнаяТаблицаВыход.времявыхода < ПроходнаяSQLВременнаяТаблицаВременнаяТаблица.времяВхода) СГРУППИРОВАТЬ ПО ПроходнаяSQLВременнаяТаблицаВременнаяТаблица.HozOrgan, ВЫБОР КОГДА РАЗНОСТЬДАТ(ПроходнаяSQLВременнаяТаблицаВременнаяТаблицаВыход.времявыхода, ПроходнаяSQLВременнаяТаблицаВременнаяТаблица.времяВхода, МИНУТА) > 20 И РАЗНОСТЬДАТ(ПроходнаяSQLВременнаяТаблицаВременнаяТаблицаВыход.времявыхода, ПроходнаяSQLВременнаяТаблицаВременнаяТаблица.времяВхода, МИНУТА) < 900 ТОГДА РАЗНОСТЬДАТ(ПроходнаяSQLВременнаяТаблицаВременнаяТаблицаВыход.времявыхода, ПроходнаяSQLВременнаяТаблицаВременнаяТаблица.времяВхода, МИНУТА) КОНЕЦ, ПроходнаяSQLВременнаяТаблицаВременнаяТаблица.времяВхода, ПроходнаяSQLВременнаяТаблицаВременнаяТаблицаВыход.времявыхода ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ dbo_pList.ID КАК ID, dbo_pList.FirstName КАК FirstName, dbo_pList.MidName КАК MidName, dbo_pList.Name КАК Name ПОМЕСТИТЬ ВнешнийИсточникДанных.ПроходнаяSQL.ВременнаяТаблица.ВременнаяТаблица_ФИО ИЗ ВнешнийИсточникДанных.ПроходнаяSQL.Таблица.dbo_pList КАК dbo_pList СГРУППИРОВАТЬ ПО dbo_pList.ID, dbo_pList.FirstName, dbo_pList.MidName, dbo_pList.Name ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПЕРВЫЕ 100 ПроходнаяSQLВременнаяТаблицаВременнаяТаблица_ФИО.FirstName КАК FirstName, ПроходнаяSQLВременнаяТаблицаВременнаяТаблица_ФИО.MidName КАК MidName, ПроходнаяSQLВременнаяТаблицаВременнаяТаблица_ФИО.Name КАК Name, ПроходнаяSQLВременнаяТаблицаВременнаяТаблицаИнтервал.Поле1 КАК ВремяОтсутствия, ПроходнаяSQLВременнаяТаблицаВременнаяТаблицаИнтервал.времявыхода КАК времявыхода, ПроходнаяSQLВременнаяТаблицаВременнаяТаблицаИнтервал.времяВхода КАК времяВхода, ПроходнаяSQLВременнаяТаблицаВременнаяТаблица_ФИО.ID КАК ID1 ИЗ ВнешнийИсточникДанных.ПроходнаяSQL.ВременнаяТаблица.ВременнаяТаблицаИнтервал КАК ПроходнаяSQLВременнаяТаблицаВременнаяТаблицаИнтервал ЛЕВОЕ СОЕДИНЕНИЕ ВнешнийИсточникДанных.ПроходнаяSQL.ВременнаяТаблица.ВременнаяТаблица_ФИО КАК ПроходнаяSQLВременнаяТаблицаВременнаяТаблица_ФИО ПО (ПроходнаяSQLВременнаяТаблицаВременнаяТаблицаИнтервал.HozOrgan = ПроходнаяSQLВременнаяТаблицаВременнаяТаблица_ФИО.ID) ГДЕ НЕ ПроходнаяSQLВременнаяТаблицаВременнаяТаблицаИнтервал.Поле1 = "" И НЕ ПроходнаяSQLВременнаяТаблицаВременнаяТаблица_ФИО.ID = "" И НЕ ПроходнаяSQLВременнаяТаблицаВременнаяТаблица_ФИО.FirstName = "-123" И НЕ ПроходнаяSQLВременнаяТаблицаВременнаяТаблица_ФИО.MidName = "-" И НЕ ПроходнаяSQLВременнаяТаблицаВременнаяТаблица_ФИО.Name = "-" И ПроходнаяSQLВременнаяТаблицаВременнаяТаблицаИнтервал.времяВхода МЕЖДУ &времяВхода И &времяВыхода И ПроходнаяSQLВременнаяТаблицаВременнаяТаблицаИнтервал.времявыхода МЕЖДУ &времяВхода И &времяВыхода СГРУППИРОВАТЬ ПО ПроходнаяSQLВременнаяТаблицаВременнаяТаблица_ФИО.FirstName, ПроходнаяSQLВременнаяТаблицаВременнаяТаблица_ФИО.MidName, ПроходнаяSQLВременнаяТаблицаВременнаяТаблица_ФИО.Name, ПроходнаяSQLВременнаяТаблицаВременнаяТаблицаИнтервал.Поле1, ПроходнаяSQLВременнаяТаблицаВременнаяТаблицаИнтервал.времявыхода, ПроходнаяSQLВременнаяТаблицаВременнаяТаблицаИнтервал.времяВхода, ПроходнаяSQLВременнаяТаблицаВременнаяТаблица_ФИО.ID |
|||
36
TopProger
29.01.20
✎
14:34
|
всеже в рамках задачи можно было и обрезать все лишнее и обратить внимание на нужные таблицы. Зачем полное соединение оно должно быть левым. А может даже изначально сделать две выборки, в одной будут входы в другой выходы.
|
|||
37
Abba
29.01.20
✎
14:40
|
(36) там только фио лишнее.оно не влияет на суть. если даже две выборки,как найти интервал (более 20мин) в течении дня? мой запрос работает,но некорректно(
|
|||
38
Homer
29.01.20
✎
14:50
|
предлагаю тебе ВнешнийИсточникДанных.ПроходнаяSQL.ВременнаяТаблица.ВременнаяТаблицаИнтервал сгруппировать по Минимум(времявыхода)
|
|||
39
TopProger
29.01.20
✎
14:53
|
Получаешь таблицу входов, затем получаешь таблицу выходов, затем соединяешь таблицу входов с таблицей выходов, там чтобы дата выхода была меньше даты входа, Затем для каждого сотрудника получаешь минимальные значения для даты входа, далее считаешь разницу между входом и выходом
|
|||
40
3achem
29.01.20
✎
14:58
|
(39) Сейчас тебя попросят код написать
|
|||
41
Abba
29.01.20
✎
15:24
|
(39) спасибо.так и делала. я поняла почему некорректно работает.просто сам регистр некорректен, то несколько выходов подряд,то несколько входов((
придется в коде писать |
|||
42
MyNick
29.01.20
✎
15:27
|
(0) надо начать с того, что реализация данной задачи НИКАК не повысит мотивацию сотрудников и не увеличит прибыль компании.
|
|||
43
MyNick
29.01.20
✎
15:30
|
Я бы даже сказал, что у более-менее ответственных мотивация только пострадает, а у расп..яев нововведения вызовут улыбку.
|
|||
44
Abba
29.01.20
✎
15:49
|
(43) это отношение к делу не имеет
|
|||
45
Xapac
29.01.20
✎
15:58
|
а системы распознавания лиц (вход/выход) интересно ставят уже где либо.
|
|||
46
fisher
29.01.20
✎
16:08
|
Тех, кто советует запросом - гони ссаными тряпками. Замучаешься краевые случаи обрабатывать.
Сортируешь и проходишься конечным автоматом. |
|||
47
fisher
29.01.20
✎
16:11
|
Хотя оно и так должно быть по времени отсортировано. Этого достаточно.
|
|||
48
El_Duke
гуру
29.01.20
✎
16:13
|
(45) Знаю один франч где внедрено такое
|
|||
49
Xapac
29.01.20
✎
16:25
|
(46)+
|
|||
50
almar
29.01.20
✎
16:27
|
Еще перед подсчетом времени нужно определять ошибки - первое событие дня выход, два подряд входа, два подряд выхода, последнее событие дня вход
|
|||
51
Abba
29.01.20
✎
16:28
|
(45) у нас только по пальцу было)) и то замучались
|
|||
52
Abba
29.01.20
✎
16:29
|
(46) это как? по выборке пройтись? я просто новичек совсем,уж извините))
|
|||
53
fisher
29.01.20
✎
16:30
|
(50) Естественно. Только почему "перед", а не "при"? Сразу при подсчете принимать решение по проблемным ситуациям, просто помечать этот отрезок как проблемный и даже ставить категорию проблемы для последующего анализа.
|
|||
54
Abba
29.01.20
✎
16:33
|
(50) в запросе так не сделаешь
|
|||
55
fisher
29.01.20
✎
16:52
|
(52) Да. Смотри. У тебя задача из потока событий получить таблицу посещений вида "сотр / вход / выход / время пребывания". Плюс еще категорию проблемы при определении времени пребывания можно добавить. Потом уже делай с ней что хочешь в зависимости от задачи. Для сабжевой задачи отсортируешь по убыванию времени пребывания и возьмешь верхние записи за пределами 20 минут.
Теперь как получить таблицу посещений. Делаешь машину состояний. Ну, т.е. для каждого сотрудника надо где-то хранить, какое его текущее состояние анализа. Вошедший он на текущий момент или вышедший. Плюс время последнего события запоминаем. Для скорости, лучше всего это в соответствие пихать где ключами сотрудники, а значения - структуры с нужными полями. Т.е. начинаем анализировать таблицу событий, берем строку. Берем состояние сотра из соответствия. Нету - создаем. Есть - сравниваем состояние сотрудника с текущим событием. Был вышедший, а событие вход? Ага - добавляем строку в таблицу посещений, проставляем там время входа и запоминаем ссылку на строку в структуре состояния сотрудника. Был вошедший, а событие выход? Ага - берем ссылку на строку из структуры состояний где уже проставлен вход, пишем туда время выхода и рассчитываем время пребывания. Был никакой, а событие выход? Хм... Я бы добавил строку в таблицу посещений со временем, равным началу анализа и поставил признак, что была такая-то проблема при расчете этого отрезка. Был вошедший, а событие вход? Хм... Можно проанализировать время предыдущего входа и если оно рядом, то принять первое срабатывание как ложное (изменить время входа на второе событие). Стоит ли отдельно анализировать ложные срабатывания - вопрос. Если два входа разнесены по времени, а выхода между ними нет (либо пикнул и ушел, либо вышел по чужой карточке либо еще что) - то нужно принять решение каким временем закрыть прошлый вход и обязательно пометить эту проблему отдельной категорией. Если такие инциденты по сотруднику будут регулярными - значит он мухлюет. Ну и так далее. Еще нужно будет решить, что делать если вошел вечером, а вышел утром и т.п. Но это уже дело техники. Новые правила внедряются несложно. |
|||
56
fisher
29.01.20
✎
16:57
|
А, стоп. У тебя время отсутствия надо считать, а не время пребывания. Тогда можно отсортировать полученную таблицу посещений по сотрам и за один проход собрать тех, у которых время начала очередного рабочего отрезка отличается от времени завершения предыдущего более чем на 20 минут в рабочее время. А таблица посещений все равно пригодится для очередных анализов.
|
|||
57
ManyakRus
29.01.20
✎
17:01
|
я как раз то же самое делал недавно в 1С Документооборот :)
Интеграция с Орионом :) |
|||
58
Йохохо
29.01.20
✎
17:02
|
(56) 16:52 - 16:57 =)
|
|||
59
fisher
29.01.20
✎
17:04
|
(58) Не понял шутки юмора. Но в конце дня я могу тормозить больше обычного :)
|
|||
60
Йохохо
29.01.20
✎
17:05
|
(59) решение за 5 минут если вчитаться
|
|||
61
fisher
29.01.20
✎
17:11
|
(60) Не-не-не. У меня уже вышел дневной лимит распознавания намеков. Выдай мысль полным связным предложением :)
|
|||
62
rphosts
29.01.20
✎
17:13
|
(19) я от туточки ушёл
|
|||
63
Abba
31.01.20
✎
14:43
|
(2)да
|
|||
64
Abba
31.01.20
✎
14:44
|
(13) как?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |