# 第12章 コマンド(バッチ)での利用方法

説明書の第12章に対応するサンプルです。

https://sit-cobol.sit11.com/manual

在庫の更新から帳票の作成までを、複数のプログラムをつないで行う例です。
マスタに索引ファイル(SQLite3)を使うため、このフォルダのサンプルは
すべて SIT COBOL/Pro 版が必要です。

# フォルダの構成

  12_3_バッチ処理例          12.3 の例。ファイル名をプログラムに直接書く形
  12_4_バッチ処理例の改善    12.4 と 12.5 の例。ファイル名を環境変数で渡す形

# 実行の順番 (12_3_バッチ処理例)

順番が決まっています。マスタを作る前に更新を動かすと、読むファイルが
無いためエラーになります。

  1. 全マスタ作成.bat            12.3.1

       初期データのCSVから、4つのマスタを作ります。

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

  2. バッチ処理サンプル.bat      12.3.3 〜 12.3.5

       次の3本を続けて実行します。errorlevel を見て、途中で失敗したら
       そこで止まります。

         STEP 1  在庫マスタ更新.cob
                   トランザクションデータ.csv を在庫マスタに反映し、
                   発注.dat と 欠品.dat を出します。
         STEP 2  発注帳票作成.cob
                   発注.dat から 発注帳票.txt を作ります。
         STEP 3  欠品帳票作成.cob
                   欠品.dat から 欠品帳票.txt を作ります。

.cob を1本ずつ実行するときも、この順番で動かしてください。

# 実行の順番 (12_4_バッチ処理例の改善)

★ 12_4 にはマスタを作るプログラムがありません。
   バッチが用意するのはトランザクションデータだけです。
   先に 12_3 でマスタを作り、コピーしてください。

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

  2. できた4つのファイルを 12_4_バッチ処理例の改善 へコピーする

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

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

       12_3 の2つの問題を直したものです。

         ・ファイル名がプログラムに直接書いてあった
             → 環境変数で渡し、ACCEPT ... FROM ENVIRONMENT で受け取る
         ・同時に2つ動かすと作業ファイルがぶつかった
             → 作られるファイルの頭にプロセスIDを付けて分ける
               例) 12345_発注帳票.txt

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

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

  12_4_バッチ処理例の改善\バッチ処理サンプル.cob

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

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

実行の前提は バッチ処理サンプル2.bat と同じで、マスタのコピーが要ります。

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

配布物には含んでいません。実行すると作られます。

  12_3_バッチ処理例
      在庫マスタ.sqlite3 / 商品マスタ.sqlite3
      顧客マスタ.sqlite3 / 倉庫マスタ.sqlite3
      発注.dat / 欠品.dat
      発注帳票.txt / 欠品帳票.txt

  12_4_バッチ処理例の改善
      12_3 からコピーした 4つの .sqlite3
      <プロセスID>_発注帳票.txt / <プロセスID>_欠品帳票.txt

      作業ファイル(.csv と .dat)は、終わると自動で消えます。

はじめからやり直すときは、これらを削除してから 1. の手順に戻ってください。

# うまく動かないとき

案内サイトの「つまずいたとき」に、この章の対処をまとめています。

  https://sit-cobol.sit11.com/samples/troubleshooting

よくあるつまずきは、サンプル集の readme.txt にも書いてあります。
