Работа с СКД #690753


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

В этой группе 1С