導入:なぜ今さら「会計符号」なのか
銀行系システムや古い会計系システムを保守していると、帳票出力で見慣れない記述に出くわすことがあります。それが「編集文字(会計符号)」のCRやDBです。これらは、数値が負のときに特定の文字を付加する特殊な属性です。現代のWebシステムでは見かけませんが、COBOLの帳票処理においては「正の数は空白、負の数は記号」というルールが厳格に求められます。この仕組みを正しく理解していないと、帳票のレイアウト崩れや、集計結果の読み間違いといった致命的なミスに繋がるため、改めて整理しておきましょう。
基礎知識:編集文字としてのCRとDB
COBOLにおける「編集文字」とは、PIC句で定義する際の表示形式を制御する文字のことです。通常は「Z」や「,(カンマ)」、「.(ピリオド)」を使いますが、会計符号として「CR(Credit:貸方)」や「DB(Debit:借方)」を指定することができます。
仕組みは非常にシンプルです。
・数値が「正」または「ゼロ」の場合:末尾にスペース2つが出力されます。
・数値が「負」の場合:末尾に「CR」または「DB」が出力されます。
この定義を使うことで、IF文でわざわざ「もしマイナスならCRを付加する」といった判定ロジックを書かずに、MOVEするだけで自動的に帳票出力用のフォーマットが完成します。
実装・解決策
会計符号を使用する際は、数値の桁数に対して「2桁分」の余裕(または定義)を考慮する必要があります。例えば、7桁の数字にCRを付ける場合は「PIC 9(7)CR」と定義します。このとき、メモリ上では全体で9桁分の領域が確保されます。
サンプルプログラム
以下のコードは、数値が正の場合と負の場合で、編集後の出力がどのように変わるかを確認するサンプルです。
PROGRAM-ID. ACCOUNT-SYMBOL-SAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NUM-POS PIC S9(7) VALUE 1234567.
01 WS-NUM-NEG PIC S9(7) VALUE -1234567.
01 WS-EDIT-CR PIC 9(7)CR.
01 WS-EDIT-DB PIC 9(7)DB.
PROCEDURE DIVISION.
> 正の数値をMOVE(CRが付くはずの箇所は空白になる)
MOVE WS-NUM-POS TO WS-EDIT-CR.
DISPLAY “正の数(CR編集): [” WS-EDIT-CR “]”.
> 負の数値をMOVE(マイナスならCR/DBが付加される)
MOVE WS-NUM-NEG TO WS-EDIT-CR.
DISPLAY “負の数(CR編集): [” WS-EDIT-CR “]”.
MOVE WS-NUM-NEG TO WS-EDIT-DB.
DISPLAY “負の数(DB編集): [” WS-EDIT-DB “]”.
STOP RUN.
応用・注意点:現場で陥りやすいバグ
現場で最も注意すべきは、「編集項目をそのまま演算に使用しないこと」です。
編集文字(CRやDBを含むPIC)が適用された項目は、内部的には「数字編集項目(Numeric-Edited)」という属性になります。これは数値としての計算能力を持たないため、演算処理に使うとコンパイルエラーや予期せぬ動作の原因となります。
また、「桁あふれ」にも注意してください。CR/DBを付加する際は、必ず元の数値項目より2桁多い領域を確保しなければなりません。既存の固定長ファイルを読み込む際に、定義を間違えて1桁分しか確保していないと、後ろの項目を巻き込んで「文字化け」や「データ破壊」が発生します。
古い仕様だからこそ、仕様書を鵜呑みにせず、必ず定義と実データのバイト数を確認する習慣をつけましょう。これらを正しく使いこなすことで、帳票出力ロジックを劇的に簡素化することができます。

コメント