Crystal Reports 2008 でレポートを作成しています。レポートは従業員のスケジュールを扱っています。スケジュールが空いている時間帯と、スケジュールが空いている時間帯があります。
現在、利用できない時間の開始と終了を検出するようにロジックを構築しました。彼らのレポートは、その特定のスタッフが何時間利用できなかったかを教えてくれます。
私の問題は、スタッフがスケジュールの開始時に「利用不可」とマークされたブロックを持ち、1 日の終わりに「利用不可」とマークされたブロックを持っている場合がありますが、2 つの間は「オープン」です。したがって、報告書には、特定のスタッフが 1 日中外出していたが、実際には働いていたと書かれています。これらの特定のスタッフに 1 日のスケジュール方法を指示することはできません。彼らは自分のスケジュールを決定し、私は彼らのニーズに合わせてレポートを書きます。
SCHEDULE_TIME EMP_ID UNAVAILABLE_CODE WORK_LENGTH
7/5/2011 11:00 100 NULL 15
7/5/2011 11:15 100 NULL 15
7/5/2011 11:30 100 NULL 15
7/5/2011 11:45 100 NULL 15
7/5/2011 12:00 100 15 5
7/5/2011 17:00 100 15 5
この例は、誰かが利用できない時間に対して 5 時間のブロックを計算する方法を示していますが、それは 2 つの予定しかありません。コードでは、予定時間の間に DATEDIFF を使用しています。
(基本的に、彼らは複数の「使用不可」ブロックを組み込んでおり、私のロジックは 1 日あたり 1 つの「使用不可」ブロックのみに対応します)。
使用不可の合計時間を計算するには、レポート内で DO...WHILE ループを実行する必要があると確信しています。Crystal Reports でループを構成する方法がわかりません。