回答箱 No.14-2:FORMで自動計算した後次の入力に移りたい
        ◆ 質問箱 No.14 質問者: 柏木 秀一  1995年07月 162号 P.17
            ◆ 質問箱目次へ
No.14-2 FORMで自動計算した後次の入力に移りたい 回答者
  入川 精二
1995年08月
163号 P.39
   ◆ No.14(1995年7月号)の回答-2

START END DAY
950601 950605     4
950423 950523    30
950101 950615   165
940615 950615   365
950331 950615    76
950101 950615   165
941231 950615   166

   
左のような表に入力していくとして"END"の列に入力した後、後処理で計算し、"EXIT"で1件の入力を完了させます。小さな親切で付け加えるなら、日付の入力は「あり得ない日付」をチェックするべきです。
  下のFORM定義表16行目と18行目のDATENUM(・・・)で日付連番を求めています。あり得ない日付(例えば2月30日)だとこれが0になるのでチェックになります。
  日数の計算は、単純な引算ではなく、"DATE関数"を使います。18行目のDATE(N("@START"),N("@END))は日数計算ですが、Z2-Z1でもよいでしょう。
日数フォーム定義表(使わない列を削除してあります)
  1 ┌──┬────┬──┬──┬────┬─────┬────┬───┬─────┐
  2 │番号│ 項目名 │ 桁 │ 行 │ サイズ │ 色と強調 │文字位置│ 端数 │  後処理  │
  3 ├──┼────┼──┼──┼────┼─────┼────┼───┼─────┤
  4 │    │ START  │32│  7│    10│        w│        │      │ <STARTA> │
  5 │    │   END  │32│  9│    10│        w│        │      │ <ENDA>   │
  6 │    │   DAY  │32│11│    10│        w│        │      │          │
  7 └──┴────┴──┴──┴────┴─────┴────┴───┴─────┘
  8 /I
  9 BIND=日数TEST;UBFO=<UBFO>
 10
 11 /M
 12 %L25;7.%C7.%H0.%U0.%R0.START%L25;9.END%L25;11.DAY
 13
 14 /P
 15 <UBFO>   CLEAR Z1,2;STOP;
 16 <STARTA> LET Z1=DATENUM(N("@START"));IF Z1=0 THEN EJECT;STOP;
 17 <ENDA>   LET Z2=DATENUM(N("@END"));IF Z2=0 THEN EJECT;
 18          LET N("@DAY")=DATE(N("@START",N("@END"));EXIT;STOP;


このページのTOPへ戻る