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

       ◆ 質問箱 No.130 質問者:  西村 重幸  2002年03月 242号 P.21
           ◆ 質問箱 目次へ
No.130-3   貸与期間の変更に伴う、貸与計画表を作成したい 回答者
  高橋 周助
2002年04月
243号 P.30
 もとになる表の構成から変えてしまいました(後記 注参照)。
  1. どの要素を行にすべきか、どの要素を列にすべきか、を判断して、バインダ『貸与品基本台帳』を作りました。・・・・・・・・・・フィールド項目の決定、レコードの決定。
  2. 社員1人ごとのバインダではなく、全社員をまとめた台帳にしました。


  1. 貸与期間は、会社全体で一律の規定があるのが普通だと思い、社員個人別のデータとして持たせるのは不都合だと考え、バインダ『貸与期間』として独立させました。・・・・・・・・・・正規化

 オートの書き方は、構造化プログラミングを心掛けています。
 できるだけコメントもたくさん書きこんでいますので、上から順に読んでもらえば、少なくとも全体の流れは理解していただけるでしょう。

<貸与予定表作成>
/******* A. 設定 ********************************************************/
        /**** A-a.説明(変数の使い方)***********************************/
          /*X01:FOR〜NEXT の頁コントロール変数。*/
          /*X02:FOR〜NEXT の行コントロール変数。*/
          /*上記以外で、添え字01〜09の変数は、その場限りの使い捨て。*/
          /*添え字10〜 の変数はプログラムを通して同一の意味を持つ。 */
        /**** A-b.規定 **************************************************/
        LET X10=2002;/*改定基準年*/
        LET X11=2006;/*表示の当該年。前1年、後6年を表示する。*/
/********* B.演算用の表(ワーク)作成 ***********************************/
        SET;S;M;1;100;;Y;/* 横桁数100 */
        O;WK;10;西暦年;10;行NO;10;貸与有無;;ESC;
        IR;S;H;50;
        NUM;M;C;@西暦年 ;H;1990;1;
        NUM;M;C;@行NO   ;H;%(H);1;
        CS;M;C1=C1;;;WK/D;/*バインダ「WK」に登録*/
/********* C.社員毎の処理 ***********************************************/
        FOR X01=1 TO BINDER("貸与品基本台帳");
          G;貸与品基本台帳/%X01;
          FOR X02=H TO T;
            /**** C-a.作業服A *******************************************/
            G;貸与品基本台帳/%X01;
            LET V22=[X02,@作業服A ];  LET X22=IVAL(V22);/*貸与開始年*/
            G;貸与期間/1;
            LET V23=[@作業服A ,@現在    ];  LET X23=IVAL(V23);
            LET V24=[@作業服A ,@改定後  ];  LET X24=IVAL(V24);
            GOSUB sub処理;
            G;貸与品基本台帳/%X01;
            LET V31=[X02,@社員名  ];
            CA;WK;;@西暦年 ;@貸与有無 ;;%V31/D;/*社員名でバインダ作成。*/
            /**** C-b.作業服B *******************************************/
            G;貸与品基本台帳/%X01;
            LET V22=[X02,@作業服B ];  LET X22=IVAL(V22);/*貸与開始年*/
            G;貸与期間/1;
            LET V23=[@作業服B ,@現在    ];  LET X23=IVAL(V23);
            LET V24=[@作業服B ,@改定後  ];  LET X24=IVAL(V24);
            GOSUB sub処理;
            CAM;%V31;WK;@西暦年 ;;@西暦年 ;A;S@貸与有無 ;;%V31;
            /**** C-c.作業服C *******************************************/
            G;貸与品基本台帳/%X01;
            LET V22=[X02,@作業服C ];  LET X22=IVAL(V22);/*貸与開始年*/
            G;貸与期間/1;
            LET V23=[@作業服C ,@現在    ];  LET X23=IVAL(V23);
            LET V24=[@作業服C ,@改定後  ];  LET X24=IVAL(V24);
            GOSUB sub処理;
            CAM;%V31;WK;@西暦年 ;;@西暦年 ;A;S@貸与有無 ;;%V31;
/********* D.表の縦横変換 ***********************************************/
            CS;%V31;%X11-1<=@西暦年 AND @西暦年 <=%X11+6;;;;
            W;H-2;2;作業服A;作業服B;作業服C;ESC;                                       
            IR;S;H;1;
            G/S/F;貸与品基本台帳/%X01;
            LET [H,@作業服A ]={X02,@作業服A };
            LET [H,@作業服B ]={X02,@作業服B };
            LET [H,@作業服C ]={X02,@作業服C };
            SRC;
            W;H-2;;貸与品;貸与始期;ESC;
            P;%V31/1;ESC;
          NEXT;
        NEXT;
/********* Z.終わり *****************************************************/
$終わり:STOP;

<sub処理>
/********* A.改定前の貸与期間の適用 要/不要を判断 ***********************/
        IF X22<=X10 THEN GOTO $改正前;
/********* B.改定前の貸与期間の適用 不要の場合 **************************/
        CS;WK/1;@西暦年 =%X22;;;;
        LET V25=[H,@行NO ];  LET X25=IVAL(V25)/*NUM開始の行NO*/
        G;WK/1;  FILL;;A;@貸与有無 ;Y;  P;WK/1;ESC;
        GOTO $NUM;
/********* C.改定前 *****************************************************/
$改正前:CS;WK/1;@西暦年 =%X22;;;;
        LET V05=[H,@行NO ];  LET X05=IVAL(V05)/*西暦年 行NO*/
        G;WK/1;
        FILL;;A;@貸与有無 ;Y;
        LET X06=1+X23-1;
        NUM;M;C;@貸与有無 ;%X05;1;1/%X06/C;/*開始:1,増分:1,最大値:X06*/
        P;WK/1;ESC;
/********* D.改定後 *****************************************************/
$改正後:CS;WK;@西暦年 >=%X10 & @貸与有無 =1;;;;
        LET V25=[H,@行NO ];  LET X25=IVAL(V25);
        G;WK/1;  FILL;;%(X25+1),T;@貸与有無 ;Y;  P;WK/1;ESC;
        LET X25=X25+X24;/*NUMの開始行NO*/
$NUM:   G;WK/1;
        LET X26=11+X24-1;/*NUMの最大値*/
        NUM;M;C;@貸与有無 ;%X25;11;1/%X26/C;/*始:11,増分:1,最大値:X26*/
        P;WK/1;ESC;
/********* E.○●記号で書き換え *****************************************/
        MPU;WK;;@貸与有無 = 1;"○"=@貸与有無 ;
                @貸与有無 =11;"●"=@貸与有無 ;
                @貸与有無 <>"○" & @貸与有無 <>"●";""=@貸与有無 ;;E;Y;
/********* Z.出口 *******************************************************/
$出口:  RETURN;
  
 (注) ----------

 表の作り方から変えてしまったのは、質問者への冒涜かもしれませんし、実情に合わないかもしれません。あえてそうした案を投稿するのは、下記のような考え方からくるものです。

 PIPSは今となってみれば、表計算的世界とデータベース的世界とが、渾然一体となっていると見ることができます。あるいは、分析用ツールを基幹業務用ツールに流用している、と私は考えます。だから使い易いという面と、だから使いにくいという面とあります。
使い易いか使いにくいかの分かれる原因は、処理対象となる仕事そのものの中にあるといっていいのではないでしょうか。

 データ量やソフトの規模が大きくなってきたり、関わる人が多くなったり、また、仕事が定型化してきたり、オペレータの判断の入り込む余地を排除したい、とか・・・・・
そんな要素が多くなるにつれて、なんでもあり的融通無碍の世界から、融通を排除しやすいデータベース的世界に移行した方が、わけのわからないトラブルやメンテの手間などが減ってくるでしょう。

 本回答はそんな背景を前提に考えたもので、データベース的世界に近づきたくなった人に限定した上での、参考資料です。
ソフト的にはPIPSという離れ小島にいるのですから、せめて考え方だけでも世の中の標準に合わせておいた方が、その後は、何かと便利になると思います。

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


このページのTOPへ戻る