参加
最後オンライン
最近の投稿
拡張開発に投稿されました 続きを読む

このトピックでは、BTEの検索方法を取り上げて説明します。

BTEを検索するには、SAP標準から以下のトランザクションが用意されています。  

  • BERE
    Publish and Subscribe Interface検索
  • BERP
    Process Interface検索

上記のトランザクションはトランザクションコードを直接入力するほか、FIBFの「環境」メニューからも起動することができます。

BERE利用

  • BERPを起動、検索条件を入力、実行ボタンを押下
  • BTE一覧画面が表示され、そこで対象BTEを選択、文書ボタンを押下
  • BTEの説明文書が表示され、そこでBTEの詳細を確認

    上記の文書から該当BTEでもし個別のアドオンテーブルを更新する場合、IN UPDATE TASKコマンドで更新プロセスを利用しなければならないことが分かります。

BERP利用

  • BERPを起動、検索条件を入力、実行ボタンを押下
  • BTE一覧画面が表示され、そこで対象BTEを選択、文書ボタンを押下
  • BTEの説明文書が表示され、そこでBTEの詳細を確認

    上記の文書から該当BTEが呼び出されるときに伝票番号がまだ採番されていないことが分かります。

BTEを呼び出すには、必ず「OPEN_FI_PERFORM_~」という名前の汎用モジュールを使用しているため、OPEN_FI_PERFORMというキーワードで、標準プログラムのソースを一括検索すれば、該当標準プログラムからどんなBTEを呼び出しているかが分かります。 OpenFIという呼び方はここから由来しているものと見受けられます。 汎用モジュール名の最後は必ずE或いはPが付けられており、EはPublish and Subscribe Interface、PはProcess Intefaceを示しております。

会計伝票を転記するプログラムSAPMF05Aを例として、プログラム内の一括検索方法を示します。

  • SE80でSAPMF05Aを開く
  • 検索/置換ダイアログを開き、検索文字列OPEN_FI_PERFORMを入力、検索ボタンを押下
  • 該当先一覧が表示される
    OPEN_FI_PERFORM

BTEは当初FIモジュールの業務拡張方法として導入されて、その後別のもじゅーるにも利用できるような汎用的な拡張方法に変わったため、FI以外のモジュールでBTEを呼び出す汎用モジュールも同じく「OPEN_FI_PERFORM_~」のような名前を付けております。

以下の図はSDモジュールの受注処理プログラムの例です。

拡張開発に投稿されました 続きを読む

標準機能の拡張を検討する際に、標準機能でどんなカスタマExitを用意されているかを調査しなければならない場面がしばしば出てきます。 このトピックでは、カスタマExitの検索方法を取り上げて説明します。

STEP1

STEP2

STEP3

STEP4

STEP5

STEP6

STEP1

STEP2

STEP3

STEP1

STEP2

STEP3

STEP4

STEP5

STEP6

拡張開発に投稿されました 続きを読む

このトピックでは、既存のBadi実装を作成する方法や手順を取り上げて説明します。

1.BAdi定義名を指定

SE18でBAdiビルダ画面を開き、BAdi定義名を入力して照会ボタンを押下

2.BAdi定義照会画面表示

指定されたBAdi定義の照会画面が表示されます。

3.実装照会機能を選択

「実装」→「照会」をクリック

4.BAdi実装一覧画面表示

BAdi定義の実装一覧がポップアップで表示されます。

5.BAdi実装照会画面表示

BAdi定義の実装一覧ポップアップで、対象実装を選択して、確定すると、対象実装の照会画面が表示されます。

変更モードにしておけば、実装を有効化したり無効化したりすることができます。

拡張開発に投稿されました 続きを読む

このトピックでは、指定Badi定義の実装を検索する方法や手順を取り上げて説明します。

SE18でBAdiビルダ画面を開き、BAdi定義名を入力して照会ボタンを押下

指定されたBAdi定義の照会画面が表示されます。

「実装」→「照会」をクリック

BAdi定義の実装一覧がポップアップで表示されます。

BAdi定義の実装一覧ポップアップで、対象実装を選択して、確定すると、対象実装の照会画面が表示されます。

変更モードにしておけば、実装を有効化したり無効化したりすることができます。

ALV開発に投稿されました 続きを読む

ALV出力時の項目カテゴリ制御は主に以下三つの方法があります。

  • 自動生成
  • マニュアル生成
  • 半自動生成

このトピックでは、各方法をそれぞれ取り上げて説明します。

出力テーブルの構造がデータディクショナリに定義されている場合、汎用モジュールを呼び出す際に入力パラメータI_STRUCTURE_NAMEで構造体の名前を指定することにより、項目カテゴリは内部に自動的に生成されることになります。 ここで注意すべきのは、出力テーブルは必ず該当構造体を使って定義しなけれなりません。そうではない場合、なかみが同じでも、実行時ランタイムエラーが発生します。

16をこのやり方で見直す場合、ABAPディクショナリに該当構造体を定義しておけば、以下のようにソースプログラムがすごくシンプルになります。

REPORT  YLWF_ALV_FC_AUTO.
*ALV用のタイププール
TYPE-POOLS: slis.
TYPES ttbl_account_doc TYPE STANDARD TABLE OF YLWF_FC_AUTO_STRUC.
DATA g_account_doc TYPE YLWF_FC_AUTO_STRUC.
DATA gtbl_account_doc TYPE ttbl_account_doc.
DATA: g_bukrs TYPE bukrs.
SELECTION-SCREEN BEGIN OF BLOCK LAYOUT WITH FRAME .
SELECT-OPTIONS: S_BUKRS FOR  g_bukrs.
SELECTION-SCREEN END OF BLOCK LAYOUT.
START-OF-SELECTION.
  SELECT
    bukrs
    belnr
    gjahr
    buzei
    pswbt
    pswsl
  FROM bseg
  INTO CORRESPONDING FIELDS OF TABLE gtbl_account_doc
  UP TO 10 ROWS
  WHERE
    bukrs in  s_bukrs.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
     i_structure_name = 'YLWF_FC_AUTO_STRUC'
     i_grid_title       = '伝票照会'
   TABLES
      t_outtab           = gtbl_account_doc
    EXCEPTIONS
     OTHERS             = 0
      .

データディクショナリでは、テーブルデータ型LVC_T_FCAT によって項目カタログが定義されています。項目カタログテーブルの各行には、出力テーブルの項目が記述されています。 項目カタログのマニュアル生成は、上記のテーブルを作成して、汎用モジュールを呼び出す際に入力パラメータIT_FIELDCATとして受け渡します。

実装の詳細は、16をご参照ください。

項目カタログの半自動生成は、

  1. ABAPディクショナリーの構造体から項目カタログを自動生成する
  2. 自動生成された項目カタログに対してマニュアル修正を加える

というプロセスになります。

ABAPディクショナリーの構造体から項目カタログを自動生成するには、汎用モジュールLVC_FIELDCATALOG_MERGEを使用します。

ALV開発に投稿されました 続きを読む

ALVを出力する前に、選択画面でユーザにALVの出力レイアウトを指定してもらう場面があります。 このトピックでは、16を元に出力レイアウト選択機能を追加する例を取り上げて説明します。

変数の定義を追加

DATA: g_variant TYPE disvariant.
DATA:  VG_SAVE       TYPE CHAR1,
           VG_EXIT       TYPE CHAR1,
           VG_VARIANT    TYPE DISVARIANT,
           VG_VARIANT_EX TYPE DISVARIANT.

選択パラメータを追加

PARAMETERS:     P_LAYOUT TYPE DISVARIANT-VARIANT.

初期化処理を追加

初期化処理で、デフォルトのバリアント値を取得して自動提案します。

INITIALIZATION.
  VG_SAVE = 'A'.   "ユーザ定義レイアウトとグローバルレイアウトの両方を保存できます。
  VG_VARIANT-REPORT = SY-REPID.
  VG_VARIANT_EX = VG_VARIANT.
  • バリアントの初期化
    CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
    EXPORTING
    I_SAVE = VG_SAVE
    CHANGING
    CS_VARIANT = VG_VARIANT_EX
    EXCEPTIONS
    WRONG_INPUT = 1
    NOT_FOUND = 2
    PROGRAM_ERROR = 3
    OTHERS = 4.
    IF SY-SUBRC = 0.
    P_LAYOUT = VG_VARIANT_EX-VARIANT.
    ENDIF.

検索ヘルプ実装

* AT SELECTION-SCREEN  選択画面:レイアウトのヘルプ設定
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_LAYOUT .
  • レイアウトのヘルプ設定
    CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
    EXPORTING
    IS_VARIANT = VG_VARIANT
    I_SAVE = VG_SAVE
    IMPORTING
    E_EXIT = VG_EXIT
    ES_VARIANT = VG_VARIANT_EX
    EXCEPTIONS
    NOT_FOUND = 1
    PROGRAM_ERROR = 2.
    IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ELSE.
    IF VG_EXIT = SPACE.
    P_LAYOUT = VG_VARIANT_EX-VARIANT.
    ELSE.
    ENDIF.
    ENDIF.
  • 入力チェックを追加

    入力チェック処理で、入力されたレイアウトバリアント値が存在するかどうかをチェックします。

    AT SELECTION-SCREEN.
    
  • バリアント存在チェック
    IF P_LAYOUT IS NOT INITIAL.
    VG_VARIANT-VARIANT = P_LAYOUT.
    CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'
    EXPORTING
    I_SAVE = VG_SAVE
    CHANGING
    CS_VARIANT = VG_VARIANT
    EXCEPTIONS
    WRONG_INPUT = 1
    NOT_FOUND = 2
    PROGRAM_ERROR = 3.
    IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    ENDIF.
  • レイアウト選択値を反映

    汎用モジュールを呼び出してALV一覧出力を行う時、汎用モジュールの入力パラメータとしてレイアウトの選択値を受け渡します。

      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
  •   i_callback_pf_status_set = 'PF_STATUS_SIMP'
    
    it_fieldcat = gtbl_fieldcat
  •  i_structure_name = 'YLWF_AL'
    
  • is_layout          = g_layout
    IS_VARIANT    = VG_VARIANT
    i_save             = VG_SAVE
    
    TABLES
    t_outtab = gtbl_account_doc
    EXCEPTIONS
  •  program_error      = 0
    
    OTHERS = 0
  • ALV開発に投稿されました 続きを読む

    このトピックでは、ALVコントロールを利用したALV出力実装の基本方法を取り上げて説明します。

    イベントキャッチ

    *---------------------------------------------------------------------*
    *       クラス イベントキャッチ(定義)
    *       CLASS lcl_event_receiver DEFINITION
    *---------------------------------------------------------------------*
    CLASS LCL_EVENT_RECEIVER DEFINITION .
      PUBLIC SECTION.
    *   選択行のダブルクリックイベント
    *   CATCH THELINE BOUBLECLICK EVENT
        METHODS CATCH_DOUBLECLICK
          FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
          IMPORTING E_ROW
                    E_COLUMN.
    *   グリッドのツールバー(PDFボタン=オン)
    *   CATCH THE TOOLBAR'S PDF BUTTON
        METHODS HANDLE_TOOLBAR_PDF
          FOR EVENT TOOLBAR  OF CL_GUI_ALV_GRID
          IMPORTING E_OBJECT.
    *   グリッドのコマンド
    *   CATCH THE GRID COMMAND EVENT
        METHODS HANDLE_UCOMM
          FOR EVENT USER_COMMAND  OF CL_GUI_ALV_GRID
          IMPORTING E_UCOMM  .
    ENDCLASS.                    "lcl_event_receiver DEFINITION
    

    ALV出力用コンテナ対象

    DATA  VG_GRID      TYPE REF TO CL_GUI_ALV_GRID.

    ALVイベントキャッチ

    DATA: EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER.

    ALV出力用コンテナ対象をインスタンス化する。

        CREATE OBJECT VG_GRID
          EXPORTING
            I_PARENT = CL_GUI_CONTAINER=>SCREEN0.
      CALL METHOD VG_GRID->SET_TABLE_FOR_FIRST_DISPLAY
        EXPORTING
          IS_LAYOUT                     = WL_SLA
        CHANGING
          IT_OUTTAB                     = TG_ALV[]
          IT_FIELDCATALOG               = TG_FIELDCAT[]
        EXCEPTIONS
          INVALID_PARAMETER_COMBINATION = 1
          PROGRAM_ERROR                 = 2
          TOO_MANY_LINES                = 3
          OTHERS                        = 4.
      CALL METHOD VG_GRID->SET_READY_FOR_INPUT "
        EXPORTING
          I_READY_FOR_INPUT = 1.

    ALV出力用イベント対象をインスタンス化します。

    CREATE OBJECT EVENT_RECEIVER.

    ALV出力用イベント「ダブルクリック」を実装します。

    SET HANDLER EVENT_RECEIVER->CATCH_DOUBLECLICK FOR VG_GRID.

    「ツールバー」イベントを実装します。

    SET HANDLER EVENT_RECEIVER->HANDLE_TOOLBAR_FAX FOR VG_GRID 

    ALVを再表示します。

      CALL METHOD VG_GRID->REFRESH_TABLE_DISPLAY
        EXPORTING 

    IS_STABLE = WL_STABLE.

    ALV開発に投稿されました 続きを読む

    このトピックでは、ALVの項目カタログを取り上げて説明します。

    項目カタログは、ALVで出力される各列(項目)のデータ型情報等が定義されます。 項目カタログに格納される定義情報は、以下のように分類することができます。

    • 項目名
      内部出力テーブルの項目名を指定します。列定義構造体のキー項目になります。
    • データ型情報
      ABAPデータ型や出力長などの情報が定義されます。
      ABAPディクショナリーの項目を参照して定義するとマニュアルで定義するとの2パターンがあります。
    • 単位や通貨情報
      数量や金額などの項目は、それぞれ関連する単位や通貨の情報を定義する必要があります。
    • 列の書式情報
    • 列の出力オプション

    項目カタログの項目一覧は下記のリンクをご参考ください。 項目カタログの項目-SAP Help Portal

    基本的に、ALVを使用して表示する一覧ごとに項目カタログが必要です。項目カタログを生成する方法として、以下の方法があります。

    • データディクショナリ構造を使用して自動的に生成
    • ABAPプログラムでマニュアル生成
    • 上記の2 つの方法を組み合わせて半自動的に生成

    項目カタログ-SAP Help Portal

    レポート開発に投稿されました 続きを読む

    このトピックでは、ツールバー関連のプログラミングを取り上げて説明します。

    関連技術

    自動的に設定される選択画面の GUI ステータスでは、 アプリケーションツールバーに無効な 押ボタンが 5 つあり、これらに機能コード FC01 から FC05 までが割り当てられ ています。この命令を使用すると、機能コード FC0n の押ボタンが有効化されます。 n には 1 と 5 の間にある値を入力しなければなりません。 押ボタンを使用できるようにするには、 TABLES 命令を使用して、ABAP ディクショナリに由来する構造 SSCRFIELDS の インタ フェース作業領域を宣言しなければなりません。 選択画面を呼び出す前にインタフェース領域 sscrfields のコンポーネント functxt_0n にテキスト が割り当てられていると、 このテキストが該当の押ボ タン上に表示されます。割 り当てられていないと、押 ボタンにテキストは表示されません。

    サンプル

    SAP標準のMIR5請求書一覧照会トランザクションのエキスパートモード機能の実装を例として解説します。 * 画面イメージ * 機能概要 「エキスパートモード」ボタンを押下により、エキスパートモードの表示/非表示を切り替える * 実装詳細 ①選択画面の定義に対象機能コードのボタンを有効にする

    SELECTION-SCREEN FUNCTION KEY 1.

    ②INITIALIZATIONイベントブロックでボタンの初期表示テキストを設定

    sscrfields-functxt_01 = text-001. "エキスパートモード

    ③AT SELECTION /AT USER-COMMANDイベントブロックでボタン押下イベントを処理

    CASE sscrfields-ucomm.	
     WHEN 'FC01'.	
      IF status_expert = c_hide."元々エキスパートモードが閉じれれた場合	
       status_expert = c_show. "エキスパートモードフラグをONにする	
       sscrfields-functxt_01 = text-007."ボタンテキストを「エキスパートモード非表示」に	
      ELSE.              "元々エキスパートモードがオープンれれた場合	
       status_expert = c_hide."エキスパートモードフラグをOFFにする	
       sscrfields-functxt_01 = text-001. "ボタンテキストを「エキスパートモード」に	
      ENDIF.	
    ENDCASE.

    ④AT SELECTION-SCREEN OUTPUTイベントブロックでエキスパートモード項目の表示/非表示を切り替え

    LOOP AT SCREEN.	
      CASE screen-group1.	
        WHEN 'F'.	
          IF  status_expert  = c_show.	
            screen-active = 1.	
            SET CURSOR FIELD 'PA_FIDOC'.	
          ELSE.	
            screen-active = 0.	
          ENDIF.	
          MODIFY SCREEN.	
      ENDCASE.	
    ENDLOOP.	

    ABAP開発に投稿されました 続きを読む

    このトピックでは、プログラムの実行方法を取り上げて説明します。

    トランザクションコード指定

    レポートプログラムにトランザクションコードを割り当てておけば、トランザクションコード指定により、レポートを実行することができます。 レポートプログラムに割り当てられたトランザクションは、レポートトランザクションと呼ばれます。

    • トランザクションの確認
      • SE93を実行
      • MIR5を入力、照会ボタンを押下
    • トランザクションの実行
      • MIR5を入力
      • Enterキーを押下

    プログラム名指定

    SE38でプログラム名を指定してプログラムを実行することができます。

    プログラミングからは、submit命令を利用すれば、別のレポートプログラムを起動することができます。