Crystal Report исключает записи времени на основе правил праздников - PullRequest
1 голос
/ 08 ноября 2011

Работа над отчетом для определения степени использования сотрудников (коэффициент использования определяется как количество оплачиваемых и неоплачиваемых часов за определенный отчетный период).

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

У меня нет доступа к бэкэнд-MS.База данных SQL для создания таблицы выходных, поэтому мне нужно отфильтровать даты в отчете.

Праздники, которые я должен исключить:

  • Новый год (1 января)

  • День памяти (последний понедельник мая)

  • День независимости (4 июля)

  • День труда (первый понедельник сентября)

  • День благодарения (четвертый четверг ноября)

  • 1/2 дня сочельника (24 декабря)

  • Рождество (25 декабря)

  • 1/2 дня Нового года (31 декабря)

Вот правила, которым я должен следовать:

Признанный праздник, который выпадает на субботу, будет отмечаться в предыдущую пятницу.

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

В настоящее время у меня есть отчет, который работает путем вычисления общего количества доступных минут (каждый рабочий день = 480 минут), поэтому для обычных праздниковМне нужно удалить их из общего количества отработанных часов и из общего количества доступных часов).Для отдыха на полдня мне нужно убрать 240 минут из общего количества свободных и отбросить все минуты, отработанные свыше 240).Я надеюсь, что это имеет смысл.

1 Ответ

2 голосов
/ 08 ноября 2011

Создайте пользовательскую функцию с именем «Observance» со следующим текстом:

//Correct date to match business rules
Function (Datevar value)

    Select DayOfWeek(value)
    //Sunday; add a day
    Case 1: Date(DateAdd("d", 1, value))
    //Saturday
    Case 7: Date(DateAdd("d", -1, value))
    //no change
    Default: value
    ;

Создайте пользовательскую функцию с именем «FullHolidays» со следующим текстом:

//create a list of full-day holidays, calculated dynamically
Function (Numbervar yyyy)

    Datevar Array holidays;
    Datevar holiday;

    //New Year's day
    holiday:=Date(yyyy, 1, 1);
    Redim Preserve holidays[Ubound(holidays)+1];
    holidays[Ubound(holidays)]:=Observance(holiday);

    //Memorial Day (last Monday in May)
    //TODO

    //Independence day
    holiday:=Date(yyyy, 7, 4);
    Redim Preserve holidays[Ubound(holidays)+1];
    holidays[Ubound(holidays)]:=Observance(holiday);

    //Labor Day (first Monday in September)
    //TODO

    //Thanksgiving (fourth Thursday in November)
    //TODO

    //xmas day
    holiday:=Date(yyyy, 12, 25);
    Redim Preserve holidays[Ubound(holidays)+1];
    holidays[Ubound(holidays)]:=Observance(holiday);

    holidays;

Createпользовательская функция с именем «HalfHolidays» со следующим текстом:

//create a list of half-day holidays, calculated dynamically
Function (Numbervar yyyy)

    Datevar Array holidays;
    Datevar holiday;

    //xmas eve
    holiday:=Date(yyyy, 12, 24);
    Redim Preserve holidays[Ubound(holidays)+1];
    holidays[Ubound(holidays)]:=Observance(holiday);

    //new year's eve
    holiday:=Date(yyyy, 12, 31);
    Redim Preserve holidays[Ubound(holidays)+1];
    holidays[Ubound(holidays)]:=Observance(holiday);

    holidays;

Используйте в формуле, например:

If {Table.DateField} IN FullHolidays(Year({Table.DateField})) Then
    0
Else If {Table.DateField} IN HalfHolidays(Year({Table.DateField})) Then
    240
Else
    480

Я оставлю расчет на День благодарения (и другие подобные праздники)в твоих способных руках (я слишком занят наблюдением за Хаусом).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...