|   |   | 
| 
 | Работа с СКД | ☑ | ||
|---|---|---|---|---|
| 0
    
        новичокфорума 05.12.13✎ 14:17 | 
        Добрый день всем!
 Очень хотелось бы получить помощи от мудрых и опытных людей работающих с СКД отчета. Дело в том, что я формирую отчет по сотрудникам с указанием периода когда он входил/выходил. Своя разработанная система СКУД. Т.е. есть поля физлицо,период,доступ(вход/выход). Так вот, я пытаюсь добавить колонку в которой нужно рассчитать разность периодов между строкой со значением ВЫХОД и строкой со значением ВХОД (как правило это соседние строки). Пытаюсь работать с вычисляемыми полями, но никак не получается. Помогите пожалуйста!!!?? Пример отчета: 1 Физлицо1 05.12.2013 10:00:13 Вход 2 Физлицо1 05.12.2013 12:03:46 Выход Как посчитать разницу т.е. строка2-строка1? | |||
| 1
    
        Wobland 05.12.13✎ 14:19 | 
        наколдуй разность дат     | |||
| 2
    
        Wobland 05.12.13✎ 14:20 | 
        или просто отними     | |||
| 3
    
        новичокфорума 05.12.13✎ 14:22 | 
        (2) Пыталась просто отнять в выражении вычисляемого поля, но при отладке отчета выходит ошибка что не опознан оператор "-"....     | |||
| 4
    
        Defender aka LINN 05.12.13✎ 14:22 | 
        (0) Куда побежишь, когда пользователь другую сортировку поставит?     | |||
| 5
    
        новичокфорума 05.12.13✎ 14:24 | 
        (4) Ну по идее я ограничиваю возможность сортировки пользователю, есть только возможность отбора, т.е. сортировка по полю "физлицо", затем по полю "период".     | |||
| 6
    
        bolobol 05.12.13✎ 14:27 | 
        Фотки нет - не взлетит...     | |||
| 7
    
        Feunoir 05.12.13✎ 14:29 | 
        (2) (3) Отнимают пирожки в школьной столовой, а в математике операция называется вычитание (с) мой школьный учитель физики, мир праху его...
 (3) Такая ошибка бывает если один (или оба) операндов равны NULL. Поэтому разность взять и не получается. Показывай как настраивала вычисляемое поле. И фотку обязательно. | |||
| 8
    
        новичокфорума 05.12.13✎ 14:44 | 
        (7) я попробовала сделать через разностьдат в вычисляемом поле, и у меня получилось. Но у меня есть проблема, например:
 1 Физлицо1 10:13:59 Вход 2 Физлицо1 10:14:02 Вход 3 Физлицо1 12:05:37 Выход Как можно отсечь первыю строку с входом, и посчитать разницу строка2-строка1? Выражение вычисляемого поля: + Выбор когда Доступ = "Выход разрешен" тогда РазностьДат(ВычислитьВыражение("Период",,,"Предыдущая"),ВычислитьВыражение("Период",,,"Текущая"),"Секунда") Конец - P.S. Я что то не пойму как тут вложить скриншот в сообщении... | |||
| 9
    
        новичокфорума 05.12.13✎ 14:45 | 
        (8) т.е. не строка2-строка1, а строка 3-строка2
 прошу прощения за ошибку... | |||
| 10
    
        Feunoir 05.12.13✎ 14:49 | 
        (9) Скриншоты тут не прикладываются. Выкладывай на любой сторонний сервер, а сюда ссылку.
 Что означают "Вход" и "Выход". Скорее всего будет достаточно добавить условие в ВЫБОР. ВычислитьВыражение("Период",,,"Текущая") не обязательно. Можно просто Период И как обрабатывать ситуацию Вход Выход Выход | |||
| 11
    
        новичокфорума 05.12.13✎ 15:02 | 
        (10) http://www.pifp.ru/s/file/a263dfe59ba5e62ec7ee1ec9bbc09b4b/32504
 Вход и выход это для понимания(данные записываются в Рсв, чтобы понимать в какой период сотрудник вошел а в какой вышел) Вот поэтому я и спрашиваю... а может можно как нибудь удалить строки не нужные для анализа из отчета? | |||
| 12
    
        spu79 05.12.13✎ 15:10 | 
        последняя колонка "время" на размышления не наводит?     | |||
| 13
    
        Feunoir 05.12.13✎ 15:11 | 
        (11) У ВычислитьВыражение есть ещё параметры. Последний из них ОбработкаОдинаковыхЗначенийПорядка. Посмотри, может поможет.
 А как удалять "строки не нужные для анализа" я тебе сказать не могу - откуда же я могу знать какие строки нужны, а какие нет. Расскажешь - подумаем. | |||
| 14
    
        spu79 05.12.13✎ 15:12 | 
        )))) фотка обязательна!     | |||
| 15
    
        spu79 05.12.13✎ 15:14 | 
        оставьте СКД в покое. ТС пытается почитать время между событиями, а оно в последней колонке уже посчитано))))))))))))) в секундах!     | |||
| 16
    
        Feunoir 05.12.13✎ 15:15 | 
        (15) Ну так оно у неё и посчитано через вычисляемое поле. Сейчас просто дошлифовываем.     | |||
| 17
    
        Бледно Золотистый 05.12.13✎ 15:17 | 
        (9) Делай проверку если текущая строка "выход" и предыдущая "вход", тогда считаем разницу.
 Не понятно что делать когда несколько выходов подряд или последняя запись - "вход", без выхода. | |||
| 18
    
        spu79 05.12.13✎ 15:22 | 
        на сколько видел подобные системы. два одинаковых события подряд идти не могут (просто физически чел не может 2 раза зайти ни куда не выходя) - это просто глюк системы. самый простой вариант отсечь события по фильтру, скажем < 10 сек.     | |||
| 19
    
        spu79 05.12.13✎ 15:23 | 
        ИМХО но я бы это в запросе делал, а не вычисляемом поле...     | |||
| 20
    
        samozvanec 05.12.13✎ 15:24 | 
        а я бы по-другому делал. соединил бы таблицу саму к себе и вычитал бы     | |||
| 21
    
        samozvanec 05.12.13✎ 15:25 | 
        (18) нифига подобного. выходим с кем-нибудь покурить, туда он пикает, обратно я(кто первый идет, тот и пикает). и так весь день. каждый день.     | |||
| 22
    
        Feunoir 05.12.13✎ 15:25 | 
        (18) У нас когда по весне субботник был, выносили "мусор" из серверной. Так на выход девочки с ресепшена нам двери открывали, а на вход сами ключами пикали. Потом у каждого было по 4 входа и ни одного выхода.
 (20) вариант хороший, но боюсь начинающий не потянет. | |||
| 23
    
        Halyavnik 05.12.13✎ 15:31 | 
        Создаем временную Таблицу1:
 Делаем выборку ВЫХОДОВ, затем Join c выборкой входов по условию ВремяВхода<ВремяВыхода, группируем по времени выхода, функция максимум(время входа). На выходе получаем ВремяВыхода, МаксимальноеВремяВходаМеньшееЧемВремяВыхода. Дополнительные поля типа Сотрудник - по вкусу. Основная выборка: Выборка Выходов Join с Таблицей1. Условия соединения, думаю, сами сможете прописать. Медленно, но, вроде, должно дать необходимый результат. | |||
| 24
    
        samozvanec 05.12.13✎ 15:35 | 
        (22) ну если он так и будет делать "как потянет", то он так всегда будет делать     | |||
| 25
    
        Halyavnik 05.12.13✎ 15:42 | 
        (22) После субботника надо было базку "подчистить" от "брака". Или триггер вставить: если последняя запись по сотруднику - вход, новый вход делать нельзя или делать какое-то сообщение или заблокировать вход и т.д.     | |||
| 26
    
        Feunoir 05.12.13✎ 15:45 | 
        (24) С вычислениями в СКД всё равно в конце концов придётся разбираться, поэтому одно другому не мешает.
 (25) Это головная боль админов, службы персонала и безопасников. У меня зарплата от проведённого на работе времени не зависит, так что мне в целом пофиг. (0) Ну и традиционно: http://www.spec8.ru/kurs-po-skd-besplatno | |||
| 27
    
        spu79 05.12.13✎ 17:20 | 
        (21) но одинаковое событие с интервалом в 4-5 сек точно глюк, либо чел стоит у турникета и систему троллит.     | |||
| 28
    
        новичокфорума 05.12.13✎ 17:27 | 
        (27) да, это глюк, потому что не налажена взаимосвязь с турникетом (нет информации о прокрутке на вход/выход)     | |||
| 29
    
        spu79 05.12.13✎ 17:32 | 
        (28) вот выбросить весь этот мусор. Условие "Время" > 10 (выбирайте цифру сами) или Время = 0 (т.е. есть вход, но нет выхода)     | |||
| 30
    
        новичокфорума 05.12.13✎ 17:40 | 
        (29) вот, а как это сделать "выбросить весь мусор"?     | |||
| 31
    
        Phace 05.12.13✎ 18:30 | 
        Не так все просто как кажется, подводных камней еще много будет, например как быть если человек не отметился на входе (либо отметился но произошел сбой и событие не зафиксировалось), а выход есть? А наоборот?     | |||
| 32
    
        echo77 05.12.13✎ 20:44 | 
        (0) Вопрос решился?
 Это можно сделать на уровне СКД, добавив вычисляемое поле, создав для него ресурс и вычислять его для группировки, например по физлицу | |||
| 33
    
        новичокфорума 06.12.13✎ 08:59 | 
        (32) Нет, так и не решился, я не могу отсечь ненужные строки из отчета, то есть время считается для тех полей, которые мне нужны, а те которые не соответствуют условию остаются пустыми. (так как я прописывала выражение в вычисляемом поле СКД)     | |||
| 34
    
        Feunoir 06.12.13✎ 09:02 | 
        (33) Да блин! Ты по человечески можешь объяснить что и как тебе отсечь нужно?
 Может тебе просто нужно отбор добавить по Время>0 | |||
| 35
    
        el7cartel 06.12.13✎ 09:04 | 
        (0) хм...интересно, а что если будет что строка два будет входом?     | |||
| 36
    
        новичокфорума 06.12.13✎ 09:05 | 
        (34) я пыталась делать отбором в настройках отчета, но выходит ошибка. сейчас кину ссылку наглядную...     | |||
| 37
    
        новичокфорума 06.12.13✎ 09:08 | 
        (35) то по идее у меня не считает время, а оставляет поле пустым, это хорошо, но было бы идеально, если бы я прописала условие которое отсекает строки с дублирующимися строками (Вход или Выход)     | |||
| 38
    
        el7cartel 06.12.13✎ 09:12 | 
        (37)по идеи здесь разные варианты есть! и их несколько! и получится, что тз будет по разному выглядеть! группировать по одной дате, а дальше уже смотреть!     | |||
| 39
    
        новичокфорума 06.12.13✎ 09:15 | ||||
| 40
    
        новичокфорума 06.12.13✎ 09:17 | 
        (39) Так вот, где прописать условие, чтобы отсекать из отчета строку которая совпадает с предыдущей (т.е. Выход-Выход), промежуток меньще 60 сек?     | |||
| 41
    
        el7cartel 06.12.13✎ 09:18 | 
        (39) прямо в запросе и пропишите! можно, просто сделать, выбрать max по событию на дату, но не так точно будет     | |||
| 42
    
        новичокфорума 06.12.13✎ 09:19 | 
        (40) поле время расчетное, и выражение прописано в вычисляемом поле. а в запросе я это условие прописать не могу, так как у меня используется функция вычислить выражение (для расчета разности между тек. и предыдущей строками)     | |||
| 43
    
        Feunoir 06.12.13✎ 09:26 | 
        (40) 
 
Потом отбор по этому полю | |||
| 44
    
        новичокфорума 06.12.13✎ 09:34 | 
        (43) 
 точно так? не вот так случайно?: ВЫБОР КОГДА ВычислитьВыражение("Доступ",,, "Предыдущая")="Вход разрешен" И РазностьДат(ВычислитьВыражение("Период",,, "Предыдущая"), Период, "Секунда")>60 ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ "доступ - "Вход разрешен" и знак больше 60"? | |||
| 45
    
        Feunoir 06.12.13✎ 09:37 | 
        (44) А теперь переведи на русский язык моё условие, потом своё и сравни оба со своими пожеланиями из (40)     | |||
| 46
    
        echo77 06.12.13✎ 09:46 | 
        А фотка была уже?     | |||
| 47
    
        новичокфорума 06.12.13✎ 09:49 | 
        (45) да, поняла, но теперь прописав Ваше условие, и установив отбор при отладке выходит ошибка...
 http://www.pifp.ru/s/file/2452a299f543be4eefa76235228fb9/32509 | |||
| 48
    
        новичокфорума 06.12.13✎ 09:50 | 
        (47) только там в отборе вместо ИСТИНА стоит ЛОЖЬ, не правильный скрин, прошу прощения     | |||
| 49
    
        Feunoir 06.12.13✎ 09:53 | 
        (46) Да вот в том то и дело, что нет. Кощунство какое-то. Пятница, а фотки нет.
 (47) Погоди. Зря ты это вписала в поле Время. Лучше бы добавить это в другое вычисляемое поле так как это не время, а условие дублирования. И отбор надо делать не на уровне всего отчета, а на уровне детальных записей. Не надо меня писать на вы, да ещё и с большой буквы. Лучше фотку в профиль прикрепи ;) | |||
| 50
    
        новичокфорума 06.12.13✎ 11:21 | 
        (49) прошу прощения что так долго не выходила на связь, были сбои в коннекте к данному форуму...
 а фотку я прикрепить не могу, так как на работе... а по поводу того, что нужно было выражение прописать в другом поле - пробовала, но выходила та же ошибка( | |||
| 51
    
        новичокфорума 06.12.13✎ 15:09 | 
        (50) вроде получилось, но вот теперь отбор не работает (установлен, но не отсекает строки не удовлетворяющие отбору)
 для удобства понимания скрин по ссылке: http://www.pifp.ru/s/file/9c6c6a9964adb2b6206fc78cd92268c5/32510 | |||
| 52
    
        Phace 06.12.13✎ 16:00 | 
        Еще раз повторюсь, человек не отметился на входе, есть только выход, что посчитает в твоем примере система? Сколько времени он отработал? 0 часов, прогул?     | |||
| 53
    
        новичокфорума 06.12.13✎ 16:20 | 
        (52) он просто не обрабатывает данную строку, до тех пор пока нам не доработают программу турникета для корректной записи один вход - один выход     | |||
| 54
    
        Phace 06.12.13✎ 16:54 | 
        (53) Не доработают программу, разные ситуации бывают, отключили на пару часов электричество с которого запитаны турникеты с утра, людям надо на работу, что их не пускать туда, пока турникеты не заработают? Пускай все гуляют? Нет. У вас должна быть возможность внести вручную ответственным лицом данные о входе/выходе.     | |||
| 55
    
        Phace 06.12.13✎ 17:03 | 
        (54) Это я все к чему, да к тому что твой подход к автоматизации данной задачи в принципе не правильный. Первую проблему с неработающими турникетами я описал выше. Следующая. Как быть, например, с охранником который работает посменно, в ночь? Т.е. приходит вечером, а уходит на следующий день с утра? Как время посчитается в этом случае у тебя? По хорошему должны быть графики работ для каждого сотрудника назначены. Далее. Что делать когда человек отпросился и не вышел на работу? Или отпросился на пол-дня?     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |