powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / Как сделать такое в Crystall Reports
9 сообщений из 9, страница 1 из 1
Как сделать такое в Crystall Reports
    #33384557
Здравствуйте!

У меня такая проблема - не могу сделать отчет в 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
...
Рейтинг: 0 / 0
Как сделать такое в Crystall Reports
    #33384715
Если есть возможность, то лучше написать запрос.
В кристале, используя репорт експерт:
1) Выбираете таблицы
2) Указываете связи. Таблица с данными сотрудника связана с таблицей событий. Таблица расписания связана с таблицей событий. Хотя здесь возможно должна быть промежуточная "связывающая" таблица.
3) Указываете поля: Имя сотрудника | Дата | Время прихода | Время ухода
4) Поля группировки: 1) Имя сотрудника 2) Дата
5) Создаете вычисляемые поля: Отработано | Опоздание | Ушел раньше
...
Рейтинг: 0 / 0
Как сделать такое в Crystall Reports
    #33385222
Так, кажется у меня не получается даже вычислить время прихода и ухода. Не подскажите какие должны быть формулы?
...
Рейтинг: 0 / 0
Как сделать такое в Crystall Reports
    #33385267
По поводу вычисления времени входа и выхода, я использую следующие формулы:
для вычисления времени входа
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} - признак входа/выхода.

Так он у меня вычисляет вход только для первого дня, а выход только для последнего. Т.е. он проходит по выборки не каждого дня в отдельности а выюлрки всех событий за все дни...

Как сделать чтобы он вычислял для каждого дня в отдельности?

И еще, когда я делаю выборку только для одного дня, то значения входа и выхода печатаются в разных строках (ну видимо т.к. это разные записи в таблице, а о н разные записи печатает в разных строках), а мне нужно в одной строке таблицы. Как это сделать тоже ума не приложу...
...
Рейтинг: 0 / 0
Как сделать такое в Crystall Reports
    #33386178
См. п.2. Вы установили связи между таблицами?
...
Рейтинг: 0 / 0
Как сделать такое в Crystall Reports
    #33386188
Константин С.
И еще, когда я делаю выборку только для одного дня, то значения входа и выхода печатаются в разных строках (ну видимо т.к. это разные записи в таблице, а о н разные записи печатает в разных строках), а мне нужно в одной строке таблицы. Как это сделать тоже ума не приложу...

См. п.4.
...
Рейтинг: 0 / 0
Как сделать такое в Crystall Reports
    #33387119
Здравствуйте уважаемый Прохожий

Так связи же автоматически устанавливаются или в визарде или когда новую таблицу добавляешь (у меня 11 репорт, не знаю как в других)... или Вы что то другое имели ввиду?

Насчет группировки по дате я в начале тоже подумал что поможет, но когда сделал, к своему удивлению, обнаружил тот же результат.
...
Рейтинг: 0 / 0
Как сделать такое в Crystall Reports
    #33387564
Константин С.Здравствуйте уважаемый Прохожий

Так связи же автоматически устанавливаются или в визарде или когда новую таблицу добавляешь (у меня 11 репорт, не знаю как в других)... или Вы что то другое имели ввиду?

Насчет группировки по дате я в начале тоже подумал что поможет, но когда сделал, к своему удивлению, обнаружил тот же результат.

1) Не факт, что они корректные. Проверьте. Кристал может их организовать по "своему" алгоритму.
2) У вас *.dbf файлы? Если база не реляционная, то отправьте ваши файлы на e-mail который вы найдет в личке у зарегистрированного пользователя Прохожий111. Посмотрю, что смогу для вас сделать.
...
Рейтинг: 0 / 0
Как сделать такое в Crystall Reports
    #33389267
Константин С.По поводу вычисления времени входа и выхода, я использую следующие формулы:
для вычисления времени входа
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})) - отработанное время.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / Как сделать такое в Crystall Reports
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]