|
Анализ пересечения периодов | ☑ | ||
---|---|---|---|---|
0
AceVi
14.04.21
✎
16:46
|
Собираюсь решить задачу, но ни разу с таким не сталкивался - может кто имеет опыт и поделиться?
Задача - необходимо проанализировать гарфик работника(по периодам в часах)(это план) и проходы его через электронную проходную(факт) на основании анализа ввести документы отклонений(типа прогул) Например План 8-12 12-12:30 - обед 12:30-17 Факт 7:30-12 12-13 13-15 16-17 Результат : 8-12 и 7:30-12 - факт полностью закрывает план - все ок. 12-12:30 и 12-13 - факт обеда больше на 30 минут - нужно ввести прогул на 30 минут 12:30-17 и 13-15 - факт не закрывает план - но ничего не вводим - нужно посмотреть другие периоды, вдруг он дальше все закрыл 12:30-17 и 16-17 - опять не закрыл план. но нужно определить что 2 периода вместе входят в план и в совокупности теряеться только 1 час. итого сотрудник отсутствовал всего 1:30 и нужно ввести документ отклонения от графика как прогул на 1:30. Пересечение 2 конкретных периодов можно отловить и проаналзировать а вот как проанализировать пересечения групп периодов ? Если кто сталкивался с такой задачей, буду рад любому совету. |
|||
1
fisher
14.04.21
✎
16:51
|
В чем проблема.
Добавь к периодам плана поле "ЧасовПоПлану" и вычитай из него часы тех периодов факта, которые в них попали. |
|||
2
ZDenis
14.04.21
✎
16:54
|
(0) А если он не хочет никуда выходить на обед?
Не проще считать время проведенное на территории и если оно меньше того, что он должен отработать, тогда уже прогул |
|||
3
fisher
14.04.21
✎
16:59
|
(2) Ты еще предложи не считать прогулы, если работник справляется со своими обязанностями. Не для того такие системы внедряются.
|
|||
4
AceVi
14.04.21
✎
17:04
|
(1) Вы сводите все к рабочим часам в день, но это неверно.
т.к. тогде период 7:30-16:30(факт) по часам будет равен периоду 8-17(план), а это некорректно - человек должен четко закрыть план или мы должны определить все отклонения от плана. (2) проще - но у кадров свой однозначный запрос - зачем? - не могу знать! есть трафарет(план) и факт должен с ним совпадать. Насчет обедов - допускается присутствие сотрудников во время обеда на территории, но это время согласно плану не считается рабочим. |
|||
5
mistеr
14.04.21
✎
17:04
|
(0) Не понял, почему в обед нужно сразу писать прогул, а после обеда "нужно посмотреть другие периоды"?
Нужно уточнить постановку. Если общее время за день закрывает план, этого достаточно? А за месяц? |
|||
6
acht
14.04.21
✎
17:07
|
(4) Чем отличается:
> 12-12:30 и 12-13 - факт обеда больше на 30 минут - нужно ввести прогул на 30 минут от > 12:30-17 и 13-15 - факт не закрывает план - но ничего не вводим - нужно посмотреть другие периоды, вдруг он дальше все закрыл Почему там нужно, а тут не нужно? |
|||
7
AceVi
14.04.21
✎
17:07
|
(5) Недостаточно - рабочим временем в итоге учитывается время которое строго вошло в рамки плана.
Кстати - факт и план я собрал, в том же виде как они приведены в примере(т.е. периодами) но как их сравнить? не могу понять. |
|||
8
ZDenis
14.04.21
✎
17:10
|
(7) Суммируешь время проведенное на территории в 2 интервалах (до обеда и после обеда) - это есть факт
Время по плану и так известно и их сравниваешь. |
|||
9
ZDenis
14.04.21
✎
17:11
|
+8 в интервалах между 8.00 - 12.00 и 12.30 - 17.00
|
|||
10
AceVi
14.04.21
✎
17:12
|
(6) скорректирую пример
Факт 7:30-12 //12-13 13-15 16-17 вот так лучше - 12-13 человек не был на территории.(вышел в 12 и вернулся только в 13) т.к. это время ближе всего к периоду плана "обед" то и сравниваем с ним. |
|||
11
mistеr
14.04.21
✎
17:12
|
(7) То есть в зачет идет только время из интервалов в плане? Я правильно понял?
|
|||
12
AceVi
14.04.21
✎
17:13
|
(9) см (4) - нельзя все сводить к часам в день
|
|||
13
ZDenis
14.04.21
✎
17:13
|
И немного не понятно тут "факт не закрывает план - но ничего не вводим - нужно посмотреть другие периоды, вдруг он дальше все закрыл".
Как он в принципе может "закрыть" дальше, если вы не даете ему работать свыше плана |
|||
14
AceVi
14.04.21
✎
17:13
|
(11) да, кроме времени плана - "обед"
|
|||
15
ZDenis
14.04.21
✎
17:14
|
(12) у меня не сводится к часам в день. У меня сводится к времени в "разрешенных" интервалах
|
|||
16
AceVi
14.04.21
✎
17:15
|
(13) например факт может быть таким
7:30-12 //12-13 13-15 15:10-17 Тогда человек всего 10 минут не был на рабочем месте - предположим что он встречал курьера. в любом случаем до 15 минут отклонений за раз - мы ему простим итого план он выполнил. |
|||
17
mistеr
14.04.21
✎
17:17
|
(14) Тогда так.
1) Взять пересечения интервалов факта и плана (только рабочее время), Просуммировать. 2) Просуммировать план (только рабочее время). 3) Сравнить, разницу пишем в прогул. |
|||
18
fisher
14.04.21
✎
17:22
|
(4) Нет. Не свожу. Из остатка часов планового присутствия вычитаются только то количество часов, которое определяется пересечением фактического периода с плановыми. Мне казалось, это очевидно.
|
|||
19
fisher
14.04.21
✎
17:42
|
Удобнее всего, как я и говорил, просто добавить в табличку периодов планового присутствия колонку, где на старте рассчитать количество плановых часов присутствия для каждого периода.
Потом при обходе фактических периодов пробегаешься по табличке плановых периодов и "примеряешь" каждый фактический период к каждому плановому. Если есть пересечение, то вычитаешь количество часов НА ПЕРЕСЕЧЕНИИ из количества часов планового присутствия для периода. Итог по колонке в конце даст общее количество часов прогула. Можно и без колонки, тупо из общего количества часов планового присутствия вычитать. Но так не останется инфы, в какие конкретно периоды сотр не вписался, а это может быть полезным. |
|||
20
fisher
14.04.21
✎
17:46
|
Это как раз фигня задача. Я как увидел тему, подумал что речь про более интересную задачу - как получить эти самые периоды фактического присутствия из данных СКУД, где вход и выход отдельными событиями пишется. С учетом всевозможных отклонений. Двойных срабатываний, проходом без отметки и так далее.
|
|||
21
МихаилМ
14.04.21
✎
17:47
|
мыслите множествами. тогда пересечение интервалов не важно. а важно только общая сумма отработанных часов.
|
|||
22
fisher
14.04.21
✎
17:49
|
(21) Перед тем как начинать мыслить, полезно прочитать ТЗ.
|
|||
23
AceVi
15.04.21
✎
09:47
|
(19) Сравнивать каждый с каждым хм... я такое предлагал кадрам но они почему то забраковали. сегодня добьюсь от них письменного ответа. спасибо.
(20) да случаи прохода бывают разные, "волшебные" - 2 входа подряд с разницей в 2 часа. пока принято решение что это был выход по "чужой карте" и наказывается не зачётом того периода где нет выхода. |
|||
24
fisher
15.04.21
✎
10:01
|
(23) Причем тут вообще "кадры"? Это детали внутренней реализации.
У тебя же небольшое количество периодов планового присутствия. В сабже - два. Дообеденный и послеобеденный. В чем проблема сравнивать их на пересечение с каждым фактическим? |
|||
25
acht
15.04.21
✎
10:12
|
(23) Вот интересно - а у программистов, разрабатывающих эту чудо-систему, есть план пристуствия на рабочем месте, который надо закрывать? Или это другое?
|
|||
26
AceVi
15.04.21
✎
10:18
|
(24) в чем проблема - если у нас 1 вид документа отклонения(прогул) на любое отклонение от плана и мы можем все отклонения просто просуммировать между собой, если больше одного то получается что на каждое отклонение от плана необходимо вводить свой документ(со своим видом)(например прогул И отпуск без сохранения зп(уж не знаю чем это от прогула отличается, но вот такое бывает))
(25) план есть у любого сотрудника предприятия(даже у директора) - часть программистов не являются сотрудниками текущего предприятия и имеют право свободного входа\выхода. любопытный вы наш. |
|||
27
AceVi
15.04.21
✎
10:23
|
(19) так стоп
ну и как мы узнаем отклонение в часах при План 12:30-17 Факт 13-15 16-17 Если последовательно сравнивать периоды - то 12:30-17 и 13-15 даст отклонение в 2,5 часа от плана и 12:30-17 и 16-17 - 3,5 часа. после того как просуммируем будет отклонение 6 часов. что неверно - ведь реальное отклонение только 1,5 часа с 12:30-13 и с 15-16 - этого мы не сможем узнать просто последовательно сравнивая периоды. так что пока план нерабочий. |
|||
28
Bigbro
15.04.21
✎
10:25
|
внедряя подобные системы не нужно забывать о том что любое действие порождает противодействие.
чем жестче закручивают гайки контролируя каждый шаг сотрудников и карая за любое отклонение тем меньше сотрудник заинтересован в результатах своего труда, а лишь в соблюдении всего этого бреда за который могут наказать. через некоторое время адекватные люди задаются вопросом а нахрена я вообще тут нахожусь если вместо работы голова забита только прогулами объяснительными как не опоздать как не выйти позже чем положено и т.д. и уходят туда где нет подобного бреда. |
|||
29
AceVi
15.04.21
✎
10:31
|
(28) это управленческие вопросы - не вижу смысла поднимать их в данной теме.
|
|||
30
mistеr
15.04.21
✎
10:32
|
(27) Нужно суммировать пересечения. См. (17)
|
|||
31
Bigbro
15.04.21
✎
10:35
|
(29) а без этого тривиальная задача.
перебираем фактические периоды, вырезаем их из плановых. все что осталось - отсутствия. все что сверху вырезалось - переработки. дальше поступаем с этими периодами согласно имеющемуся ТЗ. вводим документы например. |
|||
32
Kassern
15.04.21
✎
10:36
|
(29) Мне чет не совсем понятно, что это за отметки факта, у вас сотрудники по несколько раз на дню через проходную проходят? Если так, то если человек вышел через проходную не в обед, то все, прогул?
|
|||
33
Kassern
15.04.21
✎
10:38
|
(32) у нас на предприятии проще, считаются только крайние отметки, чтобы зафиксировать когда пришел на работу и когда ушел домой. Обед вообще не привязан ко времени, есть час в течении дня, когда захотел, тогда и покушал. И нет никаких проблем
|
|||
34
Classic
15.04.21
✎
10:43
|
ВЫБРАТЬ
ВЫБОР КОГДА Факт.ВремяНачала < План.ВремяНачала ТОГДА План.ВремяНачала ИНАЧЕ Факт.ВремяНачала КОНЕЦ КАК ВремяНачала, ВЫБОР КОГДА Факт.ВремяОкончания > План.ВремяОкончания ТОГДА План.ВремяОкончания ИНАЧЕ Факт.ВремяОкончания КОНЕЦ КАК ВремяОкончания ПОМЕСТИТЬ ОтработанныеПериоды ИЗ План КАК План ЛЕВОЕ СОЕДИНЕНИЕ Факт КАК Факт ПО Факт.ВремяНачала <= План.ВремяОкончания И Факт.ВремяОкончания >= План.ВремяНачала ; ВЫБРАТЬ ОтработанныеПериоды.ВремяОкончания КАК ВремяНачала, МИНИМУМ(ОтработанныеПериоды.ВремяНачала) КАК ВремяОкончания ПОМЕСТИТЬ НеОтработанныеПериоды ИЗ Отработанные Периоды КАК ОтработанныеПериоды ЛЕВОЕ СОЕДИНЕНИЕ ОтработанныеПериоды КАК ОтработанныеПериоды1 ПО ОтработанныеПериоды.ВремяОкончания <= ОтработанныеПериоды1.ВремяНачала СГРУППИРОВАТЬ ПО ОтработанныеПериоды.ВремяОкончания ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "00:00:00", МИНИМУМ(ОтработанныеПериоды.ВремяНачала) ИЗ ОтработанныеПериоды КАК ОтработанныеПериоды ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ МАКСИМУМ (ОтработанныеПериоды.ВремяОкончания), "23:59:59" ИЗ ОтработанныеПериоды КАК ОтработанныеПериоды ; ВЫБРАТЬ ВЫБОР КОГДА НеотработанныеПериоды.ВремяНачала < План.ВремяНачала ТОГДА План.ВремяНачала ИНАЧЕ НеотработанныеПериоды.ВремяНачала КОНЕЦ КАК ВремяНачала, ВЫБОР КОГДА НеотработанныеПериоды.ВремяОкончания > План.ВремяОкончания ТОГДА План.ВремяОкончания ИНАЧЕ НеотработанныеПериоды.ВремяОкончания КОНЕЦ КАК ВремяОкончания ПОМЕСТИТЬ ПериодыПрогулов ИЗ НеотработанныеПериоды КАК НеотработанныеПериоды ВНУТРЕНННЕЕ СОЕДИНЕНИЕ План КАК План ПО НеотработанныеПериоды.ВремяНачала <= План.ВремяОкончания И НеотработанныеПериоды.ВремяОкончания <= План.ВремяНачала |
|||
35
Classic
15.04.21
✎
10:44
|
И НеотработанныеПериоды.Времяокончания >= План.ВремяНачала
Последнюю строку зафакапил |
|||
36
fisher
15.04.21
✎
10:49
|
(27) Не понял, как ты считаешь.
План 12:30 - 17:00 (начало периода включительно, конец - не включительно. Правильно? Т.е. 4.5 плановых часа) Факт 13:00 - 15.00 (2 часа, они же результат пересечения с планом, вычитаем из плана остается остаток 2.5 плановых часа) Факт 16:00 - 17:00 (1 час, он же результат пересечения с планом, вычитаем из остатка плановых часов, остается 1.5 плановых часа) |
|||
37
AceVi
15.04.21
✎
10:53
|
(32) все верно
проход через проходную может быть сколько угодно раз в день. отсутствие на предприятии больше 15 минут в рабочее(плановое) время - сразу прогул. |
|||
38
fisher
15.04.21
✎
10:53
|
(27) Ты, походу, не пересечение считал, а разность.
|
|||
39
fisher
15.04.21
✎
10:55
|
(37) Т.е. если видишь что опаздываешь, то проще на работу вообще не ехать. Удобно.
|
|||
40
Kassern
15.04.21
✎
10:56
|
(39) пишешь заявление о предоставлении отпуска на период опоздания в счет будущей переработки))
|
|||
41
AceVi
15.04.21
✎
10:58
|
(36) (38)
Ну смотри сравниваем последовательно периоды план 12:30-17 1. 12:30-17 и 13-15 даст отклонение в 2,5 часа от плана - 12:30-13 - 30 минут и 15-17 2 часа. итого отклонения по текущему факту 2,5 часа 2. 12:30-17 и 16-17 - 3,5 часа. с 12:30 - 16 - 3,5 часа отклонения. Итого 6 часов отклонения. а ты как предлагаешь? |
|||
42
pavlika
15.04.21
✎
10:58
|
У вас графики работы с началом и окончанием рабочего времени? Время обеда прописано? Внутрисменные неявки с привязкой ко времени?
|
|||
43
fisher
15.04.21
✎
11:00
|
(41) Я тебе уже на пальцах расписал. Не тупи. Пересечение множеств/промежутков - это их общая часть. А ты чего насчитал?
|
|||
44
AceVi
15.04.21
✎
11:00
|
(42) да да и да
|
|||
45
AceVi
15.04.21
✎
11:01
|
(43) можешь показать на пальцах алгоритм? что такое "общая часть", как ее определить?
|
|||
46
fisher
15.04.21
✎
11:04
|
(45) Нарисуй на бумажке два отрезочка. Один под другим. Заштрихуй ту часть, где одновременно две линии придется. Это и будет общая часть. Пересечение.
|
|||
47
AceVi
15.04.21
✎
11:07
|
(46) отлично - а алгоритм как выглядит? не могу сообразить.
|
|||
48
fisher
15.04.21
✎
11:17
|
(47) Писал навскидку, поэтому лучше перепроверить:
Функция ПолучитьОбщиеВремяДвухПериодовСекунды(Нач1, Кон1, Нач2, Кон2) Пересечение = Мин(Кон1, Кон2) - Макс(Нач1, Нач2); Возврат ?(Пересечение > 0, Пересечение, 0); КонецФункции |
|||
49
AceVi
15.04.21
✎
11:25
|
(48) Уважаемый у нас же не двух а 3 - как вы утверждаете
мое утверждение у нас 2 сравнения 3 периодов 1. 12:30-17 и 13-15 2. 12:30-17 и 16-17 твое утверждение: у нас 1 сравнение 3 периодов(2 периода объединяються в "общую часть") 12:30-17 и "13-15 и затем 16-17" - вот она общая часть. так вот мой вопрос - как т определяешь что эти 2 периода это некая общая часть? |
|||
50
fisher
15.04.21
✎
11:28
|
(49) Уважаемый писатель. Перечитайте еще раз мои посты. Особенное внимание посту (36) на вашем же примере. Нигде не было речи про ОДНОВРЕМЕННОЕ сравнение трех периодов. Речь о попарном сравнении всех плановых периодов с каждым фактическим.
|
|||
51
fisher
15.04.21
✎
11:32
|
Там где про "общую" часть писалось - это про сравнение ДВУХ периодов. А не трех. Потому что ты не понимал что такое пересечение двух множеств и вместо этого считал их разность.
|
|||
52
AceVi
15.04.21
✎
11:34
|
(50) можно алгоритм этого "попарного сравнения"?
я знаю только алгоритм сравнения 2 периодов между собой (именного его вы и привели). еще раз в (48) вы указали сравнение 2 периодов между собой. а что за алгоритм "Речь о попарном сравнении всех плановых периодов с каждым фактическим". как вы выразились - можно его увидеть? |
|||
53
fisher
15.04.21
✎
11:36
|
(52) Про вложенные циклы что-то слышал?
|
|||
54
AceVi
15.04.21
✎
11:40
|
(53) что то слышал.
|
|||
55
fisher
15.04.21
✎
11:42
|
Напоминаю
|
|||
56
AceVi
15.04.21
✎
11:54
|
(55) имея вот такие простые входные данные
План 12:30-17 Факт 13-15 16-17 общая Длина плановых секунд 16200 пройдя следующие итерации 1. 12:30-17 и 13-15 - сравниваем и получаем 9000 сек отклонения от плана 2. 12:30-17 и 16-17 - сравниваем и получаем 12600 сек отклонения от плана итого 16200-9000 -12600 = -5400 сек. что неверно. верный ответ 5400 сек отклонения от плана. Алгоритм неверный. |
|||
57
AceVi
15.04.21
✎
11:57
|
(55) а если мы возьмем более реальные входные данные
План 8-12 12-12:30 - обед 12:30-17 Факт 7:30-12 13-15 16-17 то ваш алгоритм и того ошибочней посчитает. |
|||
58
fisher
15.04.21
✎
11:58
|
Ок. Забудь обо всем, что я писал. Я совершил огромную ошибку и уже сделал из нее выводы.
|
|||
59
Bigbro
15.04.21
✎
12:09
|
(37) вообще-то прогул по ТК это совсем другое.
и ваши истории с прогулом за 15 минутное опоздание продолжаются ровно до того момента пока не найдется принципиальный и грамотный сотрудник который натравит на вас трудинспекцию, которая вас там уже всех за такие прогулы поставит в коленно-локтевую позицию. |
|||
60
AceVi
15.04.21
✎
13:06
|
(59) попрошу не писать не по теме топика.
|
|||
61
fisher
15.04.21
✎
13:22
|
(60) А по теме до сих пор вопросы остались?
ТаблицаПлана = Новый ТаблицаЗначений; ТаблицаПлана.Колонки.Добавить("Начало"); ТаблицаПлана.Колонки.Добавить("Конец"); ТаблицаФакта = ТаблицаПлана.Скопировать(); ПериодПлана = ТаблицаПлана.Добавить(); ПериодПлана.Начало = НачалоДня(ТекущаяДата()) + 12*60*60 + 30*60; ПериодПлана.Конец = НачалоДня(ТекущаяДата()) + 17*60*60; ПериодФакта = ТаблицаФакта.Добавить(); ПериодФакта.Начало = НачалоДня(ТекущаяДата()) + 13*60*60; ПериодФакта.Конец = НачалоДня(ТекущаяДата()) + 15*60*60; ПериодФакта = ТаблицаФакта.Добавить(); ПериодФакта.Начало = НачалоДня(ТекущаяДата()) + 16*60*60; ПериодФакта.Конец = НачалоДня(ТекущаяДата()) + 17*60*60; Результат 5400. Без минуса. |
|||
62
AceVi
15.04.21
✎
13:29
|
(61) остались. я привел пример расчета по вашему циклу в (56) - вы нет.
откуда вы взяли ваш результат мне решительно непонятно. прошу раскрыть вопрос. |
|||
63
AceVi
15.04.21
✎
13:30
|
(62) я не просто так прошу - я утверждаю - ваш алгоритм выдает совершенно неверный результат.
|
|||
64
fisher
15.04.21
✎
13:31
|
(62) Подставил эти исходные данные в (55)
А вот проверка для (57): ПериодПлана = ТаблицаПлана.Добавить(); ПериодПлана.Начало = НачалоДня(ТекущаяДата()) + 8*60*60; ПериодПлана.Конец = НачалоДня(ТекущаяДата()) + 12*60*60; ПериодПлана = ТаблицаПлана.Добавить(); ПериодПлана.Начало = НачалоДня(ТекущаяДата()) + 12*60*60 + 30*60; ПериодПлана.Конец = НачалоДня(ТекущаяДата()) + 17*60*60; ПериодФакта = ТаблицаФакта.Добавить(); ПериодФакта.Начало = НачалоДня(ТекущаяДата()) + 7*60*60 + 30*60; ПериодФакта.Конец = НачалоДня(ТекущаяДата()) + 12*60*60; ПериодФакта = ТаблицаФакта.Добавить(); ПериодФакта.Начало = НачалоДня(ТекущаяДата()) + 13*60*60; ПериодФакта.Конец = НачалоДня(ТекущаяДата()) + 15*60*60; ПериодФакта = ТаблицаФакта.Добавить(); ПериодФакта.Начало = НачалоДня(ТекущаяДата()) + 16*60*60; ПериодФакта.Конец = НачалоДня(ТекущаяДата()) + 17*60*60; Тоже 5400 результат. |
|||
65
fisher
15.04.21
✎
13:32
|
(63) Ну, не знаю. Перезагрузи компьютер, чайку попей.
|
|||
66
AceVi
15.04.21
✎
13:54
|
(65) Приношу свои искренние извинения за свой тупизм.
На тестовом примере алгоритм выдал верный результат. ухожу в отладку и применение алгоритма к реальным данным. Ближе к вечеру отпишу все ли нормально. Спасибо за помощь. еще раз. прошу меня простить, что я неверно прочитал алгоритм, а он работает так как задумано. |
|||
67
fisher
15.04.21
✎
14:06
|
(66) Я до последнего не был уверен, что ты не троллишь и успел и разозлиться и пожалеть, что ввязался.
Так что тоже извиняюсь, если был местами резок. Но мне казалось, что это довольно тривиальная задача и тема себя быстро исчерпает. |
|||
68
AceVi
15.04.21
✎
14:11
|
(67) ты еще погоди.
я же только на тестовом примере проверил. надо проверить на реальных данных, возможно там будет не так все радужно. но в любом случае , спасибо за помощь. |
|||
69
fisher
15.04.21
✎
14:15
|
На реальных данных конец фактического периода вероятно будет "включая", а не "исключая" последнюю секунду. Соответственно нужно будет и план привести к виду 8:00:00 - 11:59:59 и расчет на секунду поправить.
|
|||
70
fisher
15.04.21
✎
14:20
|
А может и не будет. Зависит от того, как вы данные СКУДа били на периоды пребывания.
|
|||
71
AliceLight
15.04.21
✎
15:11
|
(33) а если сотрудник вышел в обед и вернулся через 2 часа, то есть 1 час прогулял?
|
|||
72
AceVi
15.04.21
✎
15:18
|
(71) да
(69) даже для формата План 8-12 12-12:30 - обед 12:30-17:30 Факт 7:07-17:15 выдает корректный результат Отсутствовал 15 минут (которые прощаются, но главное что мы их видим). Еще раз спасибо. продолжаю тестирование. |
|||
73
Bigbro
16.04.21
✎
04:27
|
(60) а по теме все в 31 написано. если уж такую простейшую вещь не можете реализовать... то я не знаю.
|
|||
74
Гений 1С
гуру
16.04.21
✎
08:11
|
(0) о, я с этой темой сталкивался очень подробно...
Реализовывал одну такую систему. Пиши в лычку, скину описалово. для затравки: Учет отметок о приходе Время сотрудника первоначально делится на моменты его нахождения на работе и за ее пределами, например, так: • 09.50-11.00 на работе • 11.00-11.30 вне работы • 11.30-15.00 на работе • 15.00-17.00 вне работы • 17.00-19.00 на работе При этом первая и последняя запись всегда «на работе». На работе обозначает что сотрудник находился на рабочем месте, на территории предприятия Ведение расписаний Расписания вводятся в базе «1С: Биометрия». Расписания заносятся в справочник «Расписания». Учет отклонений рабочего времени Когда задано расписание, то появляется возможность учитывать отклонения рабочего времени. Виды рабочего времени бывают такими: 1. Рабочее время (РВ) – сотрудник находится на рабочем месте. 2. Опоздание (ОП) – сотрудник пришел на работу позже назначенного времени 3. Преждевременный уход (ПУ) – сотрудник ушел с работы раньше назначенного времени 4. Переработка (СР) – сотрудник работает сверх рабочего времени 5. Перерыв (ПР) – сотрудник ушел с работы внутри интервала не рабочего времени. 6. Прогул (НВ) – если сотрудник должен быть на рабочем месте, но отсутствовал, задается рамками начала и окончания рабочего дня. 7. Отсутствие(ОТ) – сотрудник ушел с работы внутри интервала рабочего времени. 8. Прогул (ПГ) – прогул. Каждый интервал времени расписания помечается следующими полями: 1. Рабочее время – флажок того, что время считается рабочим. Если не установлен, то время не рабочее, например, перерыв – не рабочее время. 2. Опоздание – фиксировать опоздание, если первая отметка рабочего времени позже интервала. 3. Преждевременный уход – фиксировать преждевременный уход, если последняя отметка рабочего времени раньше интервала. 4. Переработка – присутствие сотрудника в этом интервале времени считается переработкой. 5. Перерыв – время относится к перерыву. Для расписания в целом задаются следующие параметры: 1. Норма перерывов – какое количество перерывов допустимо в течении рабочего дня. Время, превышающее норму перерывов относится в «Отсутствие». 2. Максимальное опоздание – какое максимальное опоздание начисляется, в минутах. После этого время относится в «Отсутствие». Если не задано, то опоздание считается по факту. 3. Допустимое опоздание – какое опоздание разрешается, в минутах. 4. Вычитать допустимое опоздание – если флаг установлен, то из зафиксированного опоздания вычитается допустимое опоздание, иначе опоздание считается без вычетов. 5. Максимальная переработка – какое максимальное время переработки учитывается. Если не задано, то переработка учитывается по факту. 6. Максимальный преждевременный уход – какое максимальное время преждевременного ухода учитывать. 7. Допустимый преждевременный уход – какой преждевременный уход разрешается, в минутах. 8. Вычитать допустимый преждевременный уход – если флаг установлен, то из зафиксированного преждевременного ухода вычитается преждевременный уход, иначе преждевременный уход считается без вычетов. 9. Минимальное рабочее время – если задано, то в случае, если рабочее время получилось меньше, рабочее время обнуляется и фиксируется прогул. Итогом расчета рабочего времени является список интервалов, каждый из которых относится к определенному виду времени. В итоге получается сумма по каждому из видов времени в минутах. Она сохраняется по каждому расчету в регистре «Начисленное время». Пример: Рабочее время 420, Опоздание 10, Перерыв 60, Переработка 30. Чтобы скорректировать рабочее время используется регистр «Корректировки времени», где для каждого сотрудника на определенную дату можно указать другое значение по виду времени. Значения из этого регистра имеют приоритет над расчетными. Каждую запись можно сопроводить комментарием. Пример: Сотрудник ездил по делам в течении трех часов, в итоге у него Отсутствие 180. Нужно создать корректировочную запись Отсутствие 0, с комментарием «Отсутствие по делам, согласовано с руководством». Пример: Сотрудник опоздал на час из-за сбоя в работе транспорта, в итоге у него Опоздание 60. Нужно создать корректировочную запись Опоздание 0, с комментарием «Опоздал из-за сбоя транспорта, объяснительная приложена и проверена Ивановым И.И.». Назначение расписаний сотрудникам В регистре «Назначения» назначается расписание сотрудникам. Одному сотруднику можно назначить на дату несколько расписаний, тогда по каждому из них ему будут посчитаны показатели рабочего времени. Алгоритм расчета часов по расписаниям Алгоритм позволяет определить прогулы сотрудников. Поэтому анализируются данные за выбранный в обработке период времени. Если период не выбран, то используется дата от начальной до минимальной. Изначально таблица проходов рассчитывается в разрезе Person ID + Дата + Точка. Затем за каждый анализируемый день по таблице назначения расписаний определяется, какие расписания действуют для сотрудников на этот день. Формируется таблица расчета часов в разрезе: Физлицо + Дата + Точка + Расписание + Подразделение. .... |
|||
75
Гений 1С
гуру
16.04.21
✎
08:11
|
(73) ты не прав, это не простейшая вещь. там много нюансов, если копать
|
|||
76
Мимохожий Однако
16.04.21
✎
08:19
|
ОФФ: Всю сознательную жизнь избегал работы, где платят за часы, а не за фактическую работу.
|
|||
77
AceVi
16.04.21
✎
08:39
|
(74) Спасибо. это мне очень пригодиться.
мне еще очень интересно как вы получаете "Итогом расчета рабочего времени является список интервалов". На данный момент я могу - задать рассписание(например 8:30 -12 и с 12:30-17:30) и проверить что заданный интервал входит в расписание и какое отклонение от расписания содержит(например реальное время сотрудника задано как 7:30-17, я могу определить что относительно плана мы имеем отклонение в 30 минут, а знаете ли вы как сделать что бы в итоге мы получили след интервалы 8:30-12 - раб время 12:30-17 раб время 17-17:30 - прогул. на данный момент я могу только сделать такую картину 8:30-17 раб время 30 минут - прогул |
|||
78
Мимохожий Однако
16.04.21
✎
09:10
|
Почитай про регистры расчета.
|
|||
79
Kekeke
16.04.21
✎
09:19
|
Я не совсем в теме всего этого, чисто логически подхожу.
Если чувак вышел - включаем счетчик ИЛИ если наступило 8 часов и он не пробил пропуск. Счетчик перевалил за 15 минут - смотрим время Если это не 12-12:30 счетчик считает время прогула до следующего пробития пропуска или конца смены. Как-то так, возможно я просто мешаю, т.к. немного не в теме языка 1с |
|||
80
AceVi
16.04.21
✎
09:29
|
(79) тут язык не при чем. вы просто не в теме.
|
|||
81
fisher
16.04.21
✎
09:42
|
(77) Просто в том коде, что уже есть, где уже сравниваются плановые интервалы с фактическими, "выкусывай" из плановых интервалов куски фактических. Если появляется новый "огрызок" - добавляй его к списку плановых интервалов. Если факт полностью покрыл плановый "кусок" - удаляй такой плановый интервал. В итоге у тебя останутся только периоды прогулов.
Только код за тебя писать я уже не буду. |
|||
82
Classic
16.04.21
✎
10:01
|
(76)
Ближе к старости пожалеешь. |
|||
83
Bigbro
16.04.21
✎
10:14
|
(81) cм. (31) ))
|
|||
84
AceVi
16.04.21
✎
10:14
|
(81) Да понимаю что информацию в итоге можно выцепить и "построить" нужную последовательность периодов в рамках плана.
Просто хотелось бы услышать и версию человека в посте (74). чем больше опыта, тем лучше. |
|||
85
fisher
16.04.21
✎
12:18
|
Держи. Только протестить надо.
|
|||
86
fisher
16.04.21
✎
12:25
|
"Продолжить" в конце - атавизма.
|
|||
87
mistеr
16.04.21
✎
14:41
|
(81) В одном запросе все можно сделать и не мучиться.
|
|||
88
Гений 1С
гуру
16.04.21
✎
14:58
|
(85) я брезгую регистрами расчета
(77) ну например такой список: 10:00-11:00 12:00-12:45 13:15-14:20 |
|||
89
Мимохожий Однако
16.04.21
✎
14:59
|
(82) Обоснуй )
|
|||
90
fisher
16.04.21
✎
15:14
|
(87) Можно. А в 1С зачастую и нужно. Но я предпочитаю не сбивать руку. Фигачить все запросами - это проф-деформация одинэсников.
|
|||
91
Kassern
16.04.21
✎
15:15
|
(90) я думал это новый уровень одинэсников. Мол циклом каждый может, а вот написать грамотный запрос далеко не все могут.
|
|||
92
Гений 1С
гуру
16.04.21
✎
15:22
|
(91) излишне фанатичная любовь к запросам вылазит в нечитаемый код, а потом икается
|
|||
93
fisher
16.04.21
✎
15:24
|
(91) Без запросов вообще никуда. Поэтому хочешь - не хочешь, а рука набивается. Да и о каких грамотных запросах речь? СУБД все стерпит.
Много раз уже наблюдал ситуацию, когда человек более-менее овладел запросами - и все. Это теперь серебряная пуля. Простейшая обработка на клиенте? Пффф. Выгрузим ТЗ на сервер, СУБД нам все посчитает. И что самое смешное - в 1С это зачастую эффективнее. |
|||
94
Kassern
16.04.21
✎
15:32
|
(93) грамотный запрос, это оптимальный в моем понимании. Можно же по документам собрать данные с начала эпохи в запросе, а можно к регистру обратиться с нужными отборами и получить нужные данные, можно в цикле запрос гонять, т.к. не умеешь объединять таблицы, а можно выполнить 1 раз и работать в цикле с результирующей таблицей. В общем я про это...
|
|||
95
Kassern
16.04.21
✎
15:34
|
(93) видел я 1 запрос при загрузке с сайта в цикле, где для каждого товара делался запрос в базу, в итоге при загрузке файлика в 30мб, грузился он пол часа и сервак чуть ли не загибался. После правки запроса, чтобы он вызывался 1 раз, загрузка этого файла заняла пару минут, может даже меньше.
|
|||
96
fisher
16.04.21
✎
15:43
|
(94) Ну а я про то, что часто предпочитают переусложненные запросы простейшей постобработке. Опыт работы с СКД на это форсит.
|
|||
97
Kassern
16.04.21
✎
15:46
|
(96) видимо в своей практике я больше встречаю обратное, там где можно было сделать простым соединением 2х таблиц клепается куча циклов и условий...
|
|||
98
mistеr
16.04.21
✎
15:50
|
(94) О мастерстве написания грамотных и оптимальных запросов можно говорить, когда тебе доступна вся мощь СУБД в виде ее родного диалекта SQL. А в случае 1С это смех один... Разве что мастерство эмуляции в уме транслятора в SQL.
|
|||
99
fisher
16.04.21
✎
16:01
|
(97) Дык я про продвинутых одинэсников, а не падаванов. Падаваны еще и не то напишут. Но если они уже хоть как-то смогли решить задачу, то это правильные падаваны.
|
|||
100
Classic
16.04.21
✎
18:02
|
(89)
Захочется сидеть, ничего не делать и получать денег. А все работы заточены на сделку. |
|||
101
AceVi
19.04.21
✎
16:52
|
(98) (87) вы мистер балабол - приведите пример запроса сравнения 2 таблиц периодов на пересечения периода каждого с каждым( который в итоге выдаст хотя бы какой с каким периодом пересеклись, цифру их не сопвпадения, а в будущем и достройка таб периодовов до факт+прогул=план)
|
|||
102
mistеr
19.04.21
✎
17:33
|
(101) Попросил бы вежливо — дал бы. А так сам думай.
|
|||
103
Classic
20.04.21
✎
09:45
|
(101)
Прикалываешься? В этой ветке уже дали |
|||
104
AceVi
20.04.21
✎
17:04
|
(103) Запрос? нет! дали алгоритм с циклами , что меня абсолютно устраивает.
а вот мистер (102) заявляет что тоже самое можно сделать запросом - вот я и попросил его подтвердить его слова - а он вертляеться = он балбол. |
|||
105
Kassern
20.04.21
✎
17:08
|
(104) а в (34)(35) разве не то?
|
|||
106
AceVi
21.04.21
✎
08:48
|
(105) не проверял. так что не могу утверждать то или не то. на вид не то(
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |