回答箱 No.130-1: 貸与期間の変更に伴う、貸与計画表を作成したい

       ◆ 質問箱 No.130 質問者:  西村 重幸  2002年02月 241号 P.21
           ◆ 質問箱 目次へ
No.130-1   貸与期間の変更に伴う、貸与計画表を作成したい 回答者
  内海 孝
2002年03月
242号 P.18
 図1.
 基本台帳は、一名分だけ提示されましたが、左図のようなイメージの名簿を作成しました。レコードマークをシステムカラムに書き込んで、ブロック毎、検索できます。

1 <TAIYO1>
2  /*********************************************************************************/
3  /* V10=社員コード:V1,Z1=基本台帳の最古始期:Z2=2004年までの貸与予定年用列数:     */
4  /* Z3,X3=全列数:V2=作業服Aの貸与始期:V3=Bの貸与始期:V4=Cの貸与始期:          */
5  /* X1〜X6=FOR NEXT:V7,X7=現在貸与期間:V8=貸与予定表の先頭年号:V9,X9=改正貸与期間 */
6  /*********************************************************************************/
7  FOR X1=1 TO BINDER("基本台帳");
8     G;基本台帳/%X1;
9     FOR X2=H TO T;
10       G;基本台帳/%X1; LET V10=[%X2,1];IF V10="" THEN CONTINUE;
11       CS;基本台帳/%X1;@No =%V10;;;AAA/D;
12       SORT;M;4;A/N;;;LET V1=[H,4];LET Z1=VAL(V1);
13       G;AAA/%X1;DR;2/T;;
14       LET Z2=2004-Z1+1;LET Z3=Z2+4;IC;D;N;6*%Z2;ESC;NUM;;R;2;7;%Z1;;
15       LET V2=[4 ,4];LET V3=[5,4];LET V4=[6,4];
16       LET [4 ,@%V2 ]="◎";LET [5 ,@%V3 ]="◎";LET [6 ,@%V4 ]="◎";
17       FOR X3=7 TO %Z3;                    /*初期値5は、貸与予定年の先頭列の列番*/
18           FOR X4=H TO T;
19               LET V7=[X4,5];LET X7=VAL(V7);
20               IF [X4,X3]="○" & X3=(CN("@2002")) THEN CONTINUE;
21               IF [X4,X3]<>"" THEN LET [X4,X3+X7]="○";
22           NEXT;
23       NEXT;
24       DC;7,%(CN("@2000"));;IC;D;N;6*6;ESC;     /*%(CN("@2000"))=項目名2000の列番*/
25       LET V8=[2,7];NUM;;R;2;7;%V8;;
26       FOR X5=%(CN("@2002")) TO 12;     /*初期値は%(CN("@2002"))=基準年の列番8*/
27           FOR X6=H TO T;
28                LET V9=[X6,6];LET X9=VAL(V9);
29                IF [X6,X5]<>"" THEN LET [X6,X5+X9]="●"
30           NEXT;
31       NEXT;CT;No1  2002年貸与予定表;P;2002年貸与予定表/N;
32    NEXT;
33 NEXT;
34 STOP
35 <TAIYO2>
36 FOR X1=1 TO BINDER("2002年貸与予定表");
37	G;2002年貸与予定表/%X1;DC;7,10;;
38     LET V1=[2,7];IC;D;N;6*4;ESC;NUM;;R;2;7;%V1;;
39     FOR X2=7 TO 12;
40        FOR X3=H TO T;
41           LET V4=[X3,6];LET X4=VAL(V4);
42           IF [X3,X2]<>"" THEN LET [X3,X2+X4]="●"
43        NEXT;
44	NEXT;CT;No2  2006年貸与予定表;P;2006年貸与予定表/N;
45 NEXT;
46 STOP
  
 以下、太字の数字はプログラムの行番です。

<TAIYO1>
(7〜16)
 基本台帳から最初の1001を検索し、作業バインダーAAAに保存、貸与始期列をA/N順にSORT、最古年V1求め、再度AAAを呼び出し、最終予定年を2004年とし、予定年列数Z2、全列数Z3を算出。2図のような頭部(6列目まで)を作成、1993年から2004年までの列を追加、FOR NEXTで始期年該当列に◎印を付けた基本表を(2図)を作成。

 2図

(17〜23)
 この表に、現在の貸与期間毎に、FOR NEXTで○印を付け、社員Aの基本表完成。プログラムの20行で項目名2002の列に○があるときは、以後に○を付けません。

(24〜33)
 基本表の7列から項目名2000の列番[%(CN("@2000"))]までを削除し、最終列に6桁4列を追加、先頭予定列項目名(2001)からナンバリング。%(CN("@2000"))は、最古始期年が1993の時、14列ですが、最古始期年が変われば、変わります。
FOR NEXTで、項目名2002の列番[%(CN("@2002"))=14に○のある列をチェックし、あれば(スペースでなければ)、改正貸与期間毎に●印を付けます。

3図
2002年貸与予定表バインダーに逐次ページ毎に、保存します。

 3図 2002年貸与予定表

 4図 2006年 貸与予定表

<TAIYO2>
(36〜45)
 FOR  NEXT で2002年 貸与予定表から2002年貸与予定表を呼び出し、トップの年号を記憶し、7列から10列までを削除、新たに6桁、4列を追加、年号を記入、FOR NEXTで●をチェックし、あれば改正貸与期間後に●を記入し、2006年貸与予定表バインダーに逐次、登録します。

<TAIYO3> 2002の個人別貸与予定表

1 <TAIYO3>
2      FOR X1=1 TO BINDER("2002年貸与予定表");
3          G;2002年貸与予定表/%X1;DC;5,6/15,T;;DRL;A;
4          IF 1=%X1MOD6 THEN GOTO $NP;GOTO $GO;
5 $NP:     P;2002個人別貸与予定表/N;CONTINUE;
6 $GO:     S;G;2002個人別貸与予定表/E;CPR;S1,E;E+1;P;*;
7     NEXT;
8 STOP
  
 2002年貸与予定表1ページを呼び出し、不要列を削除、全罫線を引いて2002年個人別貸与予定表バインダーに保存、次のページも同様に加工して、前表の下に追加します。1ページの下に6名分の予定表を追加します。5図

 5図 2002年 個人別貸与予定表

<TAIYO3>の2002を全部2006に書き換えれば、下図の表を作成するプログラムが出来ます。

 6図 2006年 個人別貸与予定表

 <TAIYO3>の2002を全部2006に書き換えれば使えます。

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


このページのTOPへ戻る