# 12_4 バッチ処理例の改善

説明書の該当箇所: 12.4 と 12.5

  このフォルダのサンプルは SIT COBOL/Pro 版が必要です。

章全体の説明は、1つ上のフォルダの readme.txt にあります。

# ★ まずマスタをコピーしてください

このフォルダには、マスタを作るプログラムがありません。
バッチが用意するのはトランザクションデータだけです。

  1. 12_3_バッチ処理例 で 全マスタ作成.bat を実行する

  2. できた4つのファイルをこのフォルダへコピーする

       在庫マスタ.sqlite3
       商品マスタ.sqlite3
       顧客マスタ.sqlite3
       倉庫マスタ.sqlite3

  3. バッチ処理サンプル2.bat を実行する

# 12.4 — 12_3 の2つの問題を直したもの

  ・ファイル名がプログラムに直接書いてあった
      → バッチが環境変数で渡し、プログラムは
        ACCEPT ... FROM ENVIRONMENT で受け取ります

  ・同時に2つ動かすと作業ファイルがぶつかった
      → 作られるファイルの頭にプロセスIDを付けて分けます
        PPID取得.cob がプロセスIDを RETURN-CODE で返し、
        バッチ側で %ERRORLEVEL% として受け取ります

        例) 12345_発注帳票.txt

★ 在庫マスタ更新2.cob / 発注帳票作成2.cob / 欠品帳票作成2.cob は
   単体では実行できません。バッチを通さずに動かすと環境変数が空のまま
   実行され、中身の無い帳票ができます。
   必ず バッチ処理サンプル2.bat から実行してください。

# 12.5 — ジョブ制御を COBOL で書いた例

  バッチ処理サンプル.cob

バッチ処理サンプル2.bat と同じ流れを、COBOL だけで書いたものです。
これは .bat を通さず、そのまま実行します。
マスタのコピーが要るのは同じです。

  ・プロセスIDの取得            CALL "CBL_GET_PID"
  ・環境変数の設定              SET ENVIRONMENT
  ・トランザクションの複製      CALL "CBL_COPY_FILE"
  ・3本の副プログラムの呼び出し CALL "在庫マスタ更新2" など
  ・作業ファイルの後始末        CALL "CBL_DELETE_FILE"

呼び出しごとに RETURN-CODE を見て、失敗したら後始末へ飛びます。
.bat の errorlevel による分岐と同じことを COBOL で書いた形です。

# 同梱しているファイル

  トランザクションデータ.csv    在庫の増減

  COPY原文(単体では実行できません)
    倉庫レコード.cob / 商品レコード.cob / 在庫レコード.cob /
    発注レコード.cob / 欠品レコード.cob

# 実行するとできるファイル

  <プロセスID>_発注帳票.txt
  <プロセスID>_欠品帳票.txt

作業ファイル(.csv と .dat)は、終わると自動で消えます。
帳票は残るので、要らなくなったら削除してください。
