0

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 でループを構成する方法がわかりません。

4

1 に答える 1

1

多分私は何かが欠けているかもしれませんが、あなたがやりたいことはまっすぐに見えます. 2 つの明白なオプション:

  1. 累計: フィールドを {TABLE.WORK_LENGTH} に設定 タイプを sum に設定 評価式を not(isnull({TABLE.UNAVAILABLE_CODE})) に設定 グループ/フィールド {TABLE.EMP_ID} の変更時にリセットを設定 ( '従業員ごとの合計を探しています)

  2. 数式/合計: if not(isnull({TABLE.UNAVAILABLE_CODE})) then {TABLE.WORK_LENGTH} else 0 {TABLE.EMP_ID} でグループを作成して、数式フィールドを使用不可_時間に作成します。グループ フッターの数式フィールドに合計を作成します。

于 2012-11-16T16:51:57.253 に答える