回答箱 No.138-1: 労働時間の管理表

       ◆ 質問箱 No.138 質問者:  西村 重幸  2002年06月 245号 P.16
           ◆ 質問箱 目次へ
No.138-1   労働時間の管理表 回答者
  内海 孝
2002年07月
246号 P.13
<CALENDAR>   /*当年分4,12月の管理表に曜日を記入するために必要*/
LET Z4=TODAY;LET V4=NUM$(Z4);LET V5=LEFT$(V4,4);LET V6=V5+"0101";
LET Z5=VAL(V5);LET Z6=Z5+1;LET V7=NUM$(Z6);;
G;WEEK/1;CPR;A;4*52;ATR;N;D;1;NUM;;;1;;%V6;;NF;;1;6/2/2/2/2;DR;@%V7年;;
DC;1/3/5;;CF;1/2;4;FILL;月;2;3;;DRL;C;1;DRL;C;N;
GROUP;;;2;;CALENDAR;G;1;CPB/P;CALENDAR;CALENDAR;4,2;4,2;2,3;Y;
STOP

<CALENDARN>   /*翌年分1,3月の管理表に曜日を記入するために必要*/
LET Z4=TODAY;LET V4=NUM$(Z4);LET V5=LEFT$(V4,4);
LET Z5=VAL(V5);LET Z6=Z5+1;LET V7=NUM$(Z6);LET V8=V7+"0101";
LET Z7=Z6+1;LET V9=NUM$(Z7);
G;WEEK/2;CPR;A;4*52;ATR;N;D;1;NUM;;;1;;%V8;;NF;;1;6/2/2/2/2;DR;@%V9年;;
DC;1/3/5;;CF;1/2;4;FILL;月;2;3;;DRL;C;1;DRL;C;N;
GROUP;;;2;;CALENDARN;G;1;CPB/P;CALENDARN;CALENDARN;4,2;4,2;2,3;Y;
STOP
<管理表4〜12> /*基本表から当年4,12月の時間外管理表バインダー作成*/
FOR X1= 4 TO 12;
 LET V1=NUM$(X1); LET V2=FORM$(V1,5);CPP;基本表;時間外管理表%V2月;;
NEXT;
STOP
<管理表1〜3>  /*基本表から翌年1,3月の時間外管理表バインダー作成*/
FOR X1= 1 TO 3;
 LET V1=NUM$(X1); LET V2=FORM$(V1,5);CPP;基本表;時間外管理表%V2月;;
NEXT;
STOP

<曜日> /*4〜12月管理表にタイトル、曜日等記入*/
LET Z4=TODAY;LET V4=NUM$(Z4);LET V5=LEFT$(V4,4);
FOR X1=4 TO 12;
   LET V1=NUM$(X1); LET V2=FORM$(V1,5);
   G;CALENDAR/%X1;DC;1;;S;LET V40="時間外管理表"+V2+"月"; G;%V40/1;
   FOR X2=1 TO BINDER(V40);
      G;%X2;FILL;%X1月;2;4¥;;CT;時間外管理表 %V5年%X1月_%X2;P;*;LET X5=15;
      FOR X3={H} TO {T};
         LET V3={X3,@月 };LET [2,X5]=V3;LET X5=X5+3;
      NEXT;P;*;
   NEXT;
NEXT;
STOP

<曜日N> /*翌1〜3月管理表にタイトル、曜日等記入*/
LET Z4=TODAY;LET V4=NUM$(Z4);LET V5=LEFT$(V4,4);LET Z5=VAL(V5);
LET Z5=Z5+1;LET V5=NUM$(Z5);
FOR X1=1 TO 3;
   LET V1=NUM$(X1); LET V2=FORM$(V1,5);
   G;CALENDARN/%X1;DC;1;;S;LET V40="時間外管理表"+V2+"月";G;%V40/1;
   FOR X2=1 TO BINDER(V40);
      G;%X2;FILL;%X1月;2;4¥;;CT;時間外管理表 %V5年%X1月_%X2;P;*;LET X5=15;
      FOR X3={H} TO {T};
         LET V3={X3,@月 };LET [2,X5]=V3;LET X5=X5+3;
      NEXT;P;*;
   NEXT;
NEXT;
STOP

<ON>      /*時間外データ入力*/
WR/T;入力定義表/2;;14;ENTRY;P;*;
STOP

<NEW>       /*前月迄の年間累計に当月の月間累計を加算して次月の表作成*/
$始め:LET V1="04月";LET V2="05月";LET V3="06月";LET V4="07月";
      LET V5="08月";LET V6="09月";LET V7="10月";LET V8="11月";
      LET V9="12月";LET V10="01月";LET V11="02月";LET V12="03月";
      LET V13="終了";
SELECT [72,2],"翌月を指定して[Home]",X1,V1,V2,V3,V4,V5,
「この行は用紙幅の都合上、分割しています」V6,V7,V8,V9,V10,V11,V12,V13;
      IF X1=1 THEN GOTO $04;IF X1=2 THEN GOTO $05;
      IF X1=3 THEN GOTO $06;IF X1=4 THEN GOTO $07;
      IF X1=5 THEN GOTO $08;IF X1=6 THEN GOTO $09;
      IF X1=7 THEN GOTO $08;IF X1=8 THEN GOTO $12;
      IF X1=9 THEN GOTO $01;IF X1=11 THEN GOTO $02;
      IF X1=12 THEN GOTO $03;IF X1=13 THEN GOTO $EX;
$04:  ACCEPT "4月の管理表を作りますか?  (Y/N) ",V1;
      IF ERR(0)=55 THEN GOTO $EX;IF INSTR(1,"YyNn",V1)=0 THEN GOTO $04;
      IF V1="N" OR "n" THEN GOTO $始め;
      FILL/P;時間外管理表4月;時間外管理表4月;;A;6,T;;Y;G;1;GOTO $EX;
$05:  ACCEPT "5月の管理表を作りますか?  (Y/N) ",V1;
      IF ERR(0)=55 THEN GOTO $EX;IF INSTR(1,"YyNn",V1)=0 THEN GOTO $05;
      IF V1="N" OR "n" THEN GOTO $始め;
      CA;時間外管理表5月;時間外管理表4月;1,5/S6,8/9,T;;
      時間外管理表5月;CAL/P;時間外管理表5月;時間外管理表5月;
      @年間累計 +@月間累計 =@年間累計;Y;
      FILL/P;時間外管理表5月;時間外管理表5月;;A;8,T;;Y;G;1;GOTO $EX;
$06:  ACCEPT "6月の管理表を作りますか?  (Y/N) ",V1;
      IF ERR(0)=55 THEN GOTO $EX;IF INSTR(1,"YyNn",V1)=0 THEN GOTO $06;
      IF V1="N" OR "n" THEN GOTO $始め;
      CA;時間外管理表6月;時間外管理表5月;1,5/S6,8/9,T;;
      時間外管理表6月;CAL/P;時間外管理表6月;時間外管理表6月;
      @年間累計 +@月間累計 =@年間累計;Y;
      FILL/P;時間外管理表6月;時間外管理表6月;;A;8,T;;Y;G;1;GOTO $EX;
以下プログラム省略
1週間表
 合宿例会で質問者の西村さんから、出題の趣旨を、いろいろ聞かして頂いた結果、日々の時間外勤務時間数を管理するための時間外管理表を、どのような構成にするかが問題ということで、社員データは、1行ですませること、曜日も表示することを重点的に考えてみました。
 カレンダーを作成するための、1週間表と、社員名簿のある時間外管理表の基本表を手作りで作成しておく必要があります。以下、プログラムのタイトルを項目として順番に説明します。

1) CALENDAR
 左表の1週間表はWEEKバインダー1ページにあり、2002年のカレンダーを作成するための表です。曜日列の一番上にある"火"は2002年元旦の曜日です。
 これを一年分、52週分コピーして、最終的に左表のようなカレンダーを12ヶ月分作成しCALENDARバインダーに保存。
 カレンダーの作り方はダイナカルク、及びマイルドピップス、マスターブック応用編((株)ピップスワールド)に載っております。

2) CALENDARN
 時間外管理表の年間は4月1日〜翌年3月31日です。
 従って翌年のカレンダーも必要です。1)と同じように、WEEKバインダーの2ページにある週間表を使って2003年のカレンダーも作成しCALENDARNバインダーに保存します。

3) 管理表4〜12
 縦項目には社員名、前月迄の年間累計、月間累計、時間未満、警告と1日から31日までの時間数(時間と分数)を書き込める項目を作り、横項目を社員別に1行を使用するようにして、全罫線を引くと24名分の基本表が出来ました。下図参照。

基本表
 一人が管理する人員が24名以上の時は、この基本表をNに登録して複数ページの基本表を作っておきます。この場合は2ページ(48名分)にしてあります。
 プログラムはこの基本表を使って、4月から12月までの月別の時間外管理表バインダーを作成しますが、作成前に社員名列に社員名簿を完成しておくことが必要です。基本表バインダーをコピーしますから、各バインダーとも2ページの基本表を持つことになります。

4) 管理表1〜3
 同様にして、1月から3月までの月別の時間外管理表バインダーを作ります。

5) 曜日
 CALENNDARバインダーの2002年4月から12月までのカレンダーを使い、同じく4月から12月までの時間外管理表の各日付の右横に曜日を記入し、社員名項目名の上に月名を記入、ページタイトルを変更します。
時間外管理表 2002年4月_1 参照

時間外管理表 2002年4月_1

6) 曜日N
 同様にして、CALENDARNバインダーの2003年1月から3月までのカレンダーを使い、同じく1から3月までの管理表に曜日、社員名の上に月名を記入、ページタイトルを変更します。

7) ON (入力)
 この場合は、オペレーターが目的のバインダーのページを呼び出して"ON"と入力することによって、入力が始まります。日付の数字にHが付いている列には時関数、Mが付いている列には15分単位で15,30,45等と入力します。入力と同時に入力定義表によって、横の時間数を全部加算、60を乗じて月間累計に表示、同様に横全部の分数を加算して時間未満に表示、それを更に月間累計に加算、用済みの時間未満の数字は消去します。
 時間外勤務の1ヶ月協定時間から、当月累計を差し引いた数値が120以下の場合は赤字で月間注意、1年協定時間から、前月迄の年間累計と当月の月間累計を引いた数値が120以下の場合は、赤字で年間注意と表示されます。

入力が終了したところ

入力定義表

 横1行に時間単位の時間と分単位の時間を並列入力することで、社員データを1行にすることが出来ましたが、入力定義表は、連続加算が出来なくなり、1列づつ加算することになりました。少し煩雑になりましたが、メリットはあると思います。

8) NEW
 NEWを入力するとSELECT文で左図のウィンドウが表示され、翌月の月を選択すると、翌月の準備が出来ます。
 4月はスタートの月ですから、バインダー単位で、年間累計項目以降のデータを全部消去します。
 5月以降は前月の月間累計を前月迄の年間累計に加算して、月間累計以降のデータを全部消去します。
 4月以降に前月迄の年間累計を手動で書き込めば、このプログラムは、4月以降なら何月からでもスタート出来ます。

回答箱のプログラムがプログラム集に収録されています。


このページのTOPへ戻る