|
Как сделать такое в Crystall Reports
|
|||
---|---|---|---|
#18+
Здравствуйте! У меня такая проблема - не могу сделать отчет в Crystall Reports. Нужен отчет по учету робочего времени сотрудников: Имя сотрудника (по нему происходит группировка), затем дата, время прихода, время ухода, отработанное время, насколько опоздал, на сколько ушел раньше. Отчет составляется за некий период и должен выглядеть примерно так: Дата | Время прихода | Время ухода | Отработано | Опоздание | Ушел раньше Петя Морковкин 10.10.2005 | 8:00 | 17:00 | 8:00 | 0:00 | 0:00 11.10.2005 | 8:15 | 17:00 | 7:45 | 0:15 | 0:00 ... Вася Пупкин 10.10.2005 | 8:30 | 18:00 | 8:30 | 0:30 | 0:00 11.10.2005 | 9:00 | 17:30 | 7:30 | 1:00 | 0:00 ... Есть база в которой есть таблица с данными сотрудника, таблица событий, таблица расписания (рабочего времени). В таблице событий заносятся все события по проходам сотрудника и времени события. Так вот, дело в том, что за один день у одного сотрудника может быть несколько входов и выходов. Проблема №1: Естественно вычислить минимальное время входа и максимальное время выхода - не проблема, проблема в том, что эти данные получаются в разных строках отчета, а нужно чтобы они были в одной. Проблема №2: Как вычислить остальные значения вообще пока не представляю. Код: plaintext
Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2005, 15:55 |
|
Как сделать такое в Crystall Reports
|
|||
---|---|---|---|
#18+
Если есть возможность, то лучше написать запрос. В кристале, используя репорт експерт: 1) Выбираете таблицы 2) Указываете связи. Таблица с данными сотрудника связана с таблицей событий. Таблица расписания связана с таблицей событий. Хотя здесь возможно должна быть промежуточная "связывающая" таблица. 3) Указываете поля: Имя сотрудника | Дата | Время прихода | Время ухода 4) Поля группировки: 1) Имя сотрудника 2) Дата 5) Создаете вычисляемые поля: Отработано | Опоздание | Ушел раньше ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2005, 16:33 |
|
Как сделать такое в Crystall Reports
|
|||
---|---|---|---|
#18+
Так, кажется у меня не получается даже вычислить время прихода и ухода. Не подскажите какие должны быть формулы? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2005, 19:23 |
|
Как сделать такое в Crystall Reports
|
|||
---|---|---|---|
#18+
По поводу вычисления времени входа и выхода, я использую следующие формулы: для вычисления времени входа if {Events.Id} = 272 and {Events.EventTime} = Minimum({Events.EventTime}) then Time(Minimum({Events.EventTime})) для вычисления времени выхода if {Events.Id} = 274 and {Events.EventTime} = Maximum({Events.EventTime}) then Time(Maximum({Events.EventTime})) где {Events.Id} - признак входа/выхода. Так он у меня вычисляет вход только для первого дня, а выход только для последнего. Т.е. он проходит по выборки не каждого дня в отдельности а выюлрки всех событий за все дни... Как сделать чтобы он вычислял для каждого дня в отдельности? И еще, когда я делаю выборку только для одного дня, то значения входа и выхода печатаются в разных строках (ну видимо т.к. это разные записи в таблице, а о н разные записи печатает в разных строках), а мне нужно в одной строке таблицы. Как это сделать тоже ума не приложу... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2005, 19:38 |
|
Как сделать такое в Crystall Reports
|
|||
---|---|---|---|
#18+
См. п.2. Вы установили связи между таблицами? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2005, 10:57 |
|
Как сделать такое в Crystall Reports
|
|||
---|---|---|---|
#18+
Константин С. И еще, когда я делаю выборку только для одного дня, то значения входа и выхода печатаются в разных строках (ну видимо т.к. это разные записи в таблице, а о н разные записи печатает в разных строках), а мне нужно в одной строке таблицы. Как это сделать тоже ума не приложу... См. п.4. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2005, 10:59 |
|
Как сделать такое в Crystall Reports
|
|||
---|---|---|---|
#18+
Здравствуйте уважаемый Прохожий Так связи же автоматически устанавливаются или в визарде или когда новую таблицу добавляешь (у меня 11 репорт, не знаю как в других)... или Вы что то другое имели ввиду? Насчет группировки по дате я в начале тоже подумал что поможет, но когда сделал, к своему удивлению, обнаружил тот же результат. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2005, 15:11 |
|
Как сделать такое в Crystall Reports
|
|||
---|---|---|---|
#18+
Константин С.Здравствуйте уважаемый Прохожий Так связи же автоматически устанавливаются или в визарде или когда новую таблицу добавляешь (у меня 11 репорт, не знаю как в других)... или Вы что то другое имели ввиду? Насчет группировки по дате я в начале тоже подумал что поможет, но когда сделал, к своему удивлению, обнаружил тот же результат. 1) Не факт, что они корректные. Проверьте. Кристал может их организовать по "своему" алгоритму. 2) У вас *.dbf файлы? Если база не реляционная, то отправьте ваши файлы на e-mail который вы найдет в личке у зарегистрированного пользователя Прохожий111. Посмотрю, что смогу для вас сделать. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2005, 17:33 |
|
Как сделать такое в Crystall Reports
|
|||
---|---|---|---|
#18+
Константин С.По поводу вычисления времени входа и выхода, я использую следующие формулы: для вычисления времени входа if {Events.Id} = 272 and {Events.EventTime} = Minimum({Events.EventTime}) then Time(Minimum({Events.EventTime})) для вычисления времени выхода if {Events.Id} = 274 and {Events.EventTime} = Maximum({Events.EventTime}) then Time(Maximum({Events.EventTime})) где {Events.Id} - признак входа/выхода. Просмотрел. Данную логическую конструкцию добавьте в запрос. Точно не помню как в акцессе, но примерно iff({Events.Id} = 272, sum(Функция_Получения_Времени({Events.EventTime}) ) - iff({Events.Id} = 274, sum(Функция_Получения_Времени({Events.EventTime})) - отработанное время. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2005, 10:24 |
|
|
start [/forum/topic.php?fid=31&fpage=167&tid=1539385]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
83ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 180ms |
0 / 0 |