ABAPでマイナス符号を前に表示する方法|CLOI_PUT_SIGN_IN_FRONTの使い方

ABAPで金額や数量を帳票・外部連携ファイルに出力すると、負数が「123.45-」のように末尾のマイナス符号で表示されることがあります。出力先が「-123.45」を求める場合は、汎用モジュール CLOI_PUT_SIGN_IN_FRONT で表示用文字列の符号を先頭に移せます。

CLOI_PUT_SIGN_IN_FRONTで変わるもの

この汎用モジュールは、文字列の末尾に付いたマイナス符号を先頭に移動します。たとえば「123.45-」は「-123.45」になります。正数の文字列はそのまま扱えます。数値の正負や計算結果を変更する処理ではなく、出力用の文字列表現を整える処理です。

末尾マイナスの文字列を変換する

DATA lv_text TYPE c LENGTH 20 VALUE '123.45-'.

CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
  CHANGING
    value = lv_text.

WRITE: / lv_text.  " -123.45

引数 VALUE は変更されるため、文字型の変数を CHANGING に渡します。固定長の文字項目では空白が含まれることがあるので、後続処理で厳密な文字列が必要なら空白の扱いも確認してください。

数値型の金額を表示用に変換する

金額を数値型で保持している場合は、まず文字型の出力項目へ書き出してから符号位置を整えます。

DATA lv_amount TYPE p LENGTH 8 DECIMALS 2 VALUE '-123.45'.
DATA lv_text   TYPE c LENGTH 20.

WRITE lv_amount TO lv_text.

CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
  CHANGING
    value = lv_text.

WRITE: / lv_text.  " 表示例: -123.45

WRITE ... TO の小数点・桁区切りなどは書式設定の影響を受けます。CSVや外部インターフェースに渡す場合は、符号位置だけでなく、小数点記号、桁区切り、項目長も相手先の仕様に合わせて確認してください。計算には元の数値項目を使います。

新しいABAPでの書き方

利用中のABAP環境が文字列テンプレートの SIGN 書式指定をサポートしている場合、数値を文字列にする時点で符号を左側に指定できます。

DATA(lv_text) = |{ lv_amount SIGN = LEFT }|.

すでに末尾マイナスで作られた文字列を受け取る処理では、CLOI_PUT_SIGN_IN_FRONT による変換が分かりやすい方法です。

実装時の確認ポイント

  • 負数・正数・ゼロと、小数を含む値で表示を確認する
  • 出力項目の長さが符号と数値を収められるか確認する
  • 外部連携では符号位置に加え、小数点と桁区切りの仕様を確認する

参考・関連記事

関連記事

PAGE TOP