回答箱 No.73-1: 職員の履歴管理表に行を追加したいの補足質問
        ◆ 質問箱 No.73 質問者: 西村 重幸  1998年03月 194号 P.19
            ◆ 質問箱 目次へ
No.73-1    質問箱 No.68、職員の履歴管理表に行を追加したいの補足質問 回答者
  高橋 周助
1998年04月
195号 P.26
◆ No.73(1998年3月号)の回答-1
   対象期間の初日のデータ行が、必要であるにもかかわらず、存在しない場合は、作ってしまいます。対象期間前のデータが皆無の場合は、不必要と判断しました。
   今回は、『級号』欄にデータが無い行は、目的の処理にとって意味がないと判断して、処理から除外しました。


このプログラムはプログラム集にテキストファイルがあります。

 1 <RIREKI2>      (第1案    できるだけPIPS的に)
 2         LET X1=9;   LET X2=12;  LET X3=8; /* 適用日       */
 3         LET X4=X1;  LET X5= 4;  LET X6=1; /* 対象期間初日 */
 4 /********* B.『級号』欄にデータがある行のみを検索する。***************/
 5         CS;DATA;@級号 ="=*?";;;WK/D;  IF RESULT(1)=0 THEN GOTO $終わり;
 6 /********* C. 対象期間の行のみを検索する。**************************/
 7         CS;WK;@年 =%X4 & @月 >=%X5;;;WK2/D;
 8           IF RESULT(1)=0 THEN GOTO $初日行;
 9         G;WK2/1;
10         IF VAL([H,@月 ])=X5 & VAL([H,@日 ])=X6 THEN GOTO $新月額;
11 /********* D. 初日データの行がなければ、作る。************************/
12 $初日行:CS;WK;(@年 =%X4 & @月 <%X5) OR (@年 <%X4);;;WK3/D;
13           IF RESULT(1)=0 THEN GOTO $新月額;
14         G;WK3/E;
15         IF H=T THEN GOTO $単行;  DR;H,T-1;Y;
16 $単行:  LET [T,@年 ]=NUM$(X4);
17         LET [T,@月 ]=NUM$(X5);
18         LET [T,@日 ]=NUM$(X6);
19         P;WK2/N;  LET X5=BINDER("WK2");  ARP;WK2;M;%X5;1;
20 /********* E. 新月額を書き込む。************************************/
21 $新月額:MPU;WK2;PAY9;@級号 ;;@級号 ;;S@月額 =@月額 ;E;Y;
22 /********* F. 事項・年・月・日 欄を書き替え。**************************/
23         FOR X11=1 TO BINDER("WK2");
24           G;WK2/%X11;
25           FOR X12=H TO T;
26             LET V21=[X12,@年 ]+"年"+[X12,@月 ]+"月"+[X12,@日 ]+"日";
27             LET [X12,@事項 ]="給与条例改定(平成"+V21+"から適用)";
28             LET [X12,@年   ]=NUM$(X1);
29             LET [X12,@月   ]=NUM$(X2);
30             LET [X12,@日   ]=NUM$(X3);
31           NEXT;
32           P;WK2/%X11;
33         NEXT;
34 /********* G. 元バインダへ アペンド *********************************/
35         APD;WK2;DATA;Y;
36 /********* Z. 終わり ***********************************************/
37 $終わり:STOP;

 1 <RIREKI3>     /* 第2案        シーケンシャルファイル処理風に     */
 2                     /* 西村さんは、こちらの方がお好みかもしれません */
 3
 4     LET X1=9;   LET X2=12;  LET X3=8; /* 適用日         */
 5     LET X4=X1;  LET X5= 4;  LET X6=1; /* 対象期間の初日 */
 6 /***** B.『級号』欄にデータがある行のみを検索する。********************/
 7     CS;DATA;@級号 ="=*?";;;WK/D;  IF RESULT(1)=0 THEN GOTO $終;
 8 /***** C. 対象期間かどうか判断 **************************************/
 9     CLEAR V10,16;
10     FOR X11=BINDER("WK") TO 1 STEP -1;
11       G;WK/%X11;
12       FOR X12=T TO H STEP -1;
13         /****** C-A. 判断 *******************************************/
14         LET V13=[X12,@級号 ];  IF V13="" THEN CONTINUE;
15         LET V14=[X12,@年   ];  LET V15=[X12,@月 ];  LET V16=[X12,@日 ];
16         LET V10="期間前";
17         IF VAL(V14)=X4 & VAL(V15)=X5 & VAL(V16)=X6 THEN LET V10="初日";
18         IF VAL(V14)=X4 & VAL(V15)=X5 & VAL(V16)>X6 THEN LET V10="期間中";
19         IF VAL(V14)=X4 & VAL(V15)>X5                THEN LET V10="期間中";
20         IF VAL(V14)>X4                              THEN LET V10="期間後";
21         LET [X12,@事項 ]=V10;
22         IF V10="初日" THEN BREAK;
23         IF V10<>"期間前" THEN CONTINUE;
24         /****** C-B. 初日データの行がないので、作る。******************/
25         LET [X12,@年 ]=NUM$(X4);  LET [X12,@月 ]=NUM$(X5);
26         LET [X12,@日 ]=NUM$(X6);  LET [X12,@事項 ]="初日";  BREAK;
27       NEXT;
28       P;WK/%X11;
29       IF V10="初日" OR V10="期間前" THEN BREAK;
30     NEXT;
31 /***** D. 新月額を書き込む。*****************************************/
32     CS;WK;@事項 ="初日" OR "期間中";;;WK2/D;
33       IF RESULT(1)=0 THEN GOTO $終;
34     MPU;WK2;PAY9;@級号 ;;@級号 ;;S@月額 =@月額 ;E;Y;
35 /***** E. 事項・年・月・日 欄を書き替え。*******************************/
36     FOR X11=1 TO BINDER("WK2");
37       G;WK2/%X11;
38       FOR X12=H TO T;
39         LET V21=[X12,@年 ]+"年"+[X12,@月 ]+"月"+[X12,@日 ]+"日";
40         LET [X12,@事項 ]="給与条例改定(平成"+V21+"から適用)";
41         LET [X12,@年 ]=NUM$(X1);  LET [X12,@月 ]=NUM$(X2);
42         LET [X12,@日 ]=NUM$(X3);
43       NEXT;
44       P;WK2/%X11;
45     NEXT;
46 /***** F. 元バインダへ アペンド ***************************************/
47     APD;WK2;DATA;Y;
48 /***** Z. 終わり ****************************************************/
49 $終:STOP;


このページのTOPへ戻る