Имя: Пароль:
1C
1С v8
Работа с СКД
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)


ВЫБОР
КОГДА ВычислитьВыражение("Доступ",,, "Предыдущая")=Доступ И РазностьДат(ВычислитьВыражение("Период",,, "Предыдущая"), Период, "Секунда")<60 ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ


Потом отбор по этому полю
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) Это я все к чему, да к тому что твой подход к автоматизации данной задачи в принципе не правильный. Первую проблему с неработающими турникетами я описал выше. Следующая. Как быть, например, с охранником который работает посменно, в ночь? Т.е. приходит вечером, а уходит на следующий день с утра? Как время посчитается в этом случае у тебя? По хорошему должны быть графики работ для каждого сотрудника назначены. Далее. Что делать когда человек отпросился и не вышел на работу? Или отпросился на пол-дня?