6. テーブルの追加
- テーブルの追加
インプットアシスタントを使用すると、独自のテーブルコントロールを作成し、任意のSAP画面に統合することができます。 追加データを表示したり、独自のデータ入力用テーブルを実装することができます。
例題として、プラント固有の購買データを品目照会トランザクションMM03に表示します。
MM03品目照会:
新規プッシュボタン「プラント固有の購買データを表示」により、プラント固有の追加データを表示することができる。
テーブルに在庫数と追加購入情報が表示された。
GuiXTテーブルコントロールに、任意の数の入出力カラム、チェックボックス、プッシュボタンを作成することができます。
テーブルは、コマンドTableとColumnで定義されています。 “tabx”がテーブルの名前で、 “plant”がカラム名の場合、変数V [tabx.cell.plant.5]は、カラム”plant”の行5のセルを表します 。 同様に、行の総数、最初に表示される行、カラム幅など、様々なテーブル属性に対する標準の変数があります。
// トランザクションMM03にプラント情報を表示
if Q[Transaction=MM03]
Set V[matnr] “&F[RMMG1-MATNR]” -uppercase
// 表示するプラントテーブルは?
if V[matnr] and V[display_plants=X]
// 最後にプラントテーブルが表示されてから品目番号は変更された?→その場合はデータを再読み込み
if not V[matnr=&V[plants_matnr]]
Enter process=“mm03plants\plants_read.txt”
Stop Script
endif
Table (3,1) (12,100) name=“plants” title=“品目&V[matnr] &V[mattext] プラント別購買データ” rows=“&V[plants_count]” fixedcolumns=1
Column “プラント” name=“werks” size=6 -pushbutton process=“mm03plants\plants_select.txt”
Column “在庫数” name=“avamount” size=8 -readonly -alignright
Column “最小在庫数” name=“minbe” size=8 -readonly -alignright
Column “最大在庫数” name=“mabst” size=8 -readonly -alignright
Column “基本数量単位” name=“meins” size=8 -readonly
Column “自動購買発注” name=“kautb” size=10 -readonly -checkbox
Column “納入予定日数” name=“plifz” size=10 -readonly
Column “購買グループ” name=“ekgrp” size=10 -readonly
Column “原産国” name=“herkl” size=8 -readonly
Column “利益センタ” name=“prctr” size=16 -readonly
Pushbutton (3,101) “X” process=“mm03plants\plants_off.txt” size=(1,2)
// Enter押下でデータを再読み込み
On Enter process=“mm03plants\plants_read.txt”
// 品目番号は変更された?
else
Pushbutton (3,0) “プラント別の購買データを表示” process=“mm03plants\plants_read.txt”
endif
endif
テーブルに示す追加データは、次の汎用モジュールを使用して読み込まれます。
- BAPI_MATERIAL_GET_DETAIL
- BAPI_MATERIAL_GET_ALL
- BAPI_MATERIAL_AVAILABILITY
- /GUIXT/EXT2INT
- /GUIXT/DBSELECT
上記1~3番目は標準SAPモジュールです。/GUIXT/DBSELECTに関しては別資料(汎用モジュール/guixt/dbselect)を参照してください。/GUIXT/EXT2INTは外部書式から内部書式に変換するときに使用します。 /GUIXT/EXT2INTは、/GUIXT/DBSELECTと同じパッケージ内に含まれています。(本ソースコードが必要な場合は、ysano@ibrdg.co.jpまでご連絡ください。)
//Input Script “plants_read.txt”
// 品目番号
Set V[matnr] “&F[RMMG1-MATNR]” -uppercase
// 内部書式に変換する
Call “/GUIXT/ext2int” in.extvalue=“&V[matnr]” in.domname=“MATNR” out.intvalue=“matnr_int”
// 追加フィールドに品目番号を保存する
Set V[plants_matnr] “&F[RMMG1-MATNR]” -uppercase
// 品目データを読む
Call “BAPI_MATERIAL_GET_DETAIL” in.MATERIAL=“&V[matnr_int]” out.MATERIAL_GENERAL_DATA=”matdata”
// テキスト及び単位
Set V[mattext] “&V[matdata](BAPIMATDOA-MATL_DESC)”
Set V[matunit] “&V[matdata](BAPIMATDOA-BASE_UOM)”
// SAPデータベースのプラントテーブルMARCを読む
Call “/GUIXT/dbselect” in.table=”MARC” _
in.condition=“MATNR = @MATNR” _
in.fields=“WERKS” _
in.domname1=“MATNR” _
in.domvalue1=“&V[matnr]” _
table.values=“data”
//テーブルのリセット
Set V[plants.*] “”
// 読み込まれたプラントの数
Set V[plants_count] 0
// カラム幅の初期値をセットする
Set V[plants.stat.columnwidth.werks] 6
Set V[i] 1
label next_plant
CopyText fromText=“data” toString=“datarow” line=&V[i]
if Q[ok]
Set V[plant] “&V[datarow]”
Set V[plants.cell.werks.&V[i]] “&V[plant]”
// 追加のプラントデータを読み込む
Call “BAPI_MATERIAL_GET_ALL” in.MATERIAL=“&V[matnr_int]” in.PLANT=“&V[plant]” out.PLANTDATA=“plantdata”
Set V[plants.cell.ekgrp.&V[i]] “&V[plantdata](BAPI_MARC_GA-PUR_GROUP)”
Set V[plants.cell.prctr.&V[i]] “&V[plantdata](BAPI_MARC_GA-PROFIT_CTR)”
Set V[plants.cell.kautb.&V[i]] “&V[plantdata](BAPI_MARC_GA-AUTO_P_ORD)”
Set V[plants.cell.meins.&V[i]] “&V[matunit]”
Set V[plants.cell.plifz.&V[i]] “&V[plantdata](BAPI_MARC_GA-PLND_DELRY)” -unpack
// 最小在庫
Set V[minbe] “&V[plantdata](BAPI_MARC_GA-REORDER_PT)” -unpack
Set V[minbe] &V[minbe] / 1000
if V[minbe=0]
Set V[minbe] “”
endif
Set V[plants.cell.minbe.&V[i]] &V[minbe]
// 最大在庫
Set V[mabst] “&V[plantdata](BAPI_MARC_GA-MAX_STOCK)” -unpack
Set V[mabst] &V[mabst] / 1000
if V[mabst=0]
Set V[mabst] “”
endif
Set V[plants.cell.mabst.&V[i]] &V[mabst]
// 原産国
Set V[plants.cell.herkl.&V[i]] “&V[plantdata](BAPI_MARC_GA-COUNTRYORI)”
// プラントで入手できる数
Call “BAPI_MATERIAL_AVAILABILITY” in.MATERIAL=“&V[matnr_int]” in.PLANT=“&V[plant]” in.UNIT=“&V[matunit]” out.AV_QTY_PLT=“avamount”
Set V[plants.cell.avamount.&V[i]] &V[avamount] / 1000
// 品目に対するプラント総数
Set V[plants_count] &V[i]
// 次の行
Set V[i] &V[i] + 1
goto next_plant
endif
if V[plants_count>0]
Set V[display_plants] “X”
else
Message “E: プラントデータがありません” -statusline
endif
Return
テーブルを非表示にするには、以下のInputScriptを使用します。
// InputScript “plants_off.txt”
Set V[display_plants] “”
Set V[plant_matnr] “”
Return
ここで、選択されたプラントのMM03の購買情報を表示するために、「プラント」のボタンのうちの1つをクリックします。例えばをクリックすると、以下のようなMM03画面が表示されます。
トランザクションMM03、選択されたプラントの購買管理タブの照会画面
これはプッシュボタンを押して呼び出されるInputscript “plants_select.txt”に実装されています。
Column “プラント” name=“werks” size=6 -pushbutton process=“mm03plants\plants_select.txt”
選択されたプラントを取得するには、システム変数V [_tabrowabs]を使用します。
// InputScript “plants_select.txt”
// MM03で選択されたプラントデータを表示する
Enter “/5”
// カレントビュー選択を削除
Screen SAPLMGMM.0070
Enter “/19”
// ビュー選択で1つ目を選択
Screen SAPLMGMM.0070
Set cell[Table,0,1] “X”
Enter
// 購買管理タブへ
Screen SAPLMGMM.4004
Enter “=SP09”
// 組織レベルのポップアップにプラントをセットする
Screen SAPLMGMM.0081
Set F[RMMG1-WERKS] “&V[plants.cell.werks.&V[_tabrowabs]]”
Enter