Eigene
Tabellen können Sie mit InputAssistant frei gestalten und in beliebige
SAP-Bildschirme integrieren. Sie können damit Zusatzdaten aufbereiten
oder eine eigene Datenerfassung in tabellarischer Form anbieten.
Als
Beispiel blenden wir in der Materialanzeige MM03 eine Tabelle mit
Informationen pro Werk ein. In der Standardtransaktion zeigen wir eine zusätzliche Drucktaste
an:
MM03 Anzeige Materialstamm:
Mit unserer
neuen Drucktaste
"Einkaufsdaten pro Werk anzeigen"
kann eine Tabelle mit
Zusatzdaten eingeblendet werden
Die Tabelle enthält pro Werk, in dem
das Material geführt wird,
die aktuell verfügbare Menge und einige
Informationen zum Einkauf
In
der Tabelle können Sie Spalten in den Formaten Ausgabe, Eingabe,
Checkbox oder Drucktaste definieren.
Die
Definition der Tabelle erfolgt über die Schlüsselwörter
Table
und
Column. Für jede Zelle der
Tabelle gibt es eine GuiXT-Variable: Wenn tabx der Name der Tabelle ist
und eine der Spalten "werk" heisst, ist der Name der Zellenvariablen in
der 5.Zeile V[tabx.cell.werk,5]. In ähnlicher Weise sind
Standardvariablen für die Anzahl Zeilen, Breite der Spalten usw.
definiert. Details finden Sie bei
Table.
GuiXT Script:
GuiXT
// Display plant info in transaction MM03
if Q[Transaction=MM03]
Set V[matnr] "&F[RMMG1-MATNR]" -uppercase
// plant table to be displayed?
if V[matnr] and V[display_plants=X]
// material number changed since last plant table display?
// then read data again
if not V[matnr=&V[plants_matnr]]
Enter process="mm03plants\plants_read.txt"
Stop Script
endif
Table (3,1) (12,100) name="plants" _
title="Einkaufsdaten pro Werk für Material &V[matnr] &V[mattext]" _
rows="&V[plants_count]" fixedColumns=1
Column "Werk" name="werks" size=6 -pushButton _
process="mm03plants\plants_select.txt"
Column "Verfügbar" name="avamount" size=8 -readOnly -alignRight
Column "Minimum" name="minbe" size=8 -readOnly -alignRight
Column "Maximum" name="mabst" size=8 -readOnly -alignRight
Column "Einheit" name="meins" size=8 -readOnly
Column "Autom.Best." name="kautb" size=10 -readOnly -checkBox
Column "Liefertage" name="plifz" size=10 -readOnly
Column "Einkäufer" name="ekgrp" size=10 -readOnly
Column "Herkunft" name="herkl" size=8 -readOnly
Column "Profitcenter" name="prctr" size=16 -readonly
Pushbutton (3,101) "X" process="mm03plants\plants_off.txt" size=(1,2)
// refresh data on Enter
On Enter process="mm03plants\plants_read.txt"
else
Pushbutton (3,0) "Einkaufsdaten pro Werk anzeigen" _
process="mm03plants\plants_read.txt"
endif
endif
Das
Lesen der Zusatzdaten erfolgt über den Aufruf von Funktionsbausteinen:
BAPI_MATERIAL_GET_DETAIL
BAPI_MATERIAL_GET_ALL
BAPI_MATERIAL_AVAILABILITY
/GUIXT/EXT2INT
/GUIXT/DBSELECT
Die
ersten drei sind SAP-Standardbausteine. Zu /GUIXT/DBSELECT finden
Sie hier nähere
Informationen. /GUIXT/EXT2INT dient zur Konvertieung von
externem in internes Format; der Baustein ist in dem gleichen
Transportauftrag wie /GUIXT/DBSELECT enthalten.
GuiXT
// InputScript "plants_read.txt"
// material number
Set V[matnr] "&F[RMMG1-MATNR]" -upperCase
// convert to internal format
Call "/GUIXT/ext2int" in.extvalue="&V[matnr]" _
in.domname="MATNR" out.intvalue="matnr_int"
// save material number in additional field
Set V[plants_matnr] "&F[RMMG1-MATNR]" -uppercase
// Read material data
Call "BAPI_MATERIAL_GET_DETAIL" _
in.MATERIAL="&V[matnr_int]" _
out.MATERIAL_GENERAL_DATA="matdata"
// Text and unit
Set V[mattext] "&V[matdata](BAPIMATDOA-MATL_DESC)"
Set V[matunit] "&V[matdata](BAPIMATDOA-BASE_UOM)"
// read SAP database plant table MARC
Call "/GUIXT/dbselect" in.table="MARC" _
in.condition="MATNR = @MATNR" _
in.fields="WERKS" _
in.domname1="MATNR" _
in.domvalue1="&V[matnr]" _
table.values="data"
// reset table
Set V[plants.*] ""
// number of plants read
Set V[plants_count] 0
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]"
// read additional plant data
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
// Minimum
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]
// Maximum
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]
// country
Set V[plants.cell.herkl.&V[i]] "&V[plantdata](BAPI_MARC_GA-COUNTRYORI)"
// available amount in this plant
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
// total number of plants for this material
Set V[plants_count] &V[i]
// next data row
Set V[i] &V[i] + 1
goto next_plant
endif
if V[plants_count>0]
Set V[display_plants] "X"
else
Message "E: Keine Werksdaten verfügbar" -statusline
endif
Return
Zum
Ausschalten der Anzeige dient das
// InputScript "plants_off.txt"
GuiXT
Set V[display_plants] ""
Set V[plant_matnr] ""
Return
In
dem Beispiel zeigen wir bei Klick auf die Drucktaste in Spalte "Werk"
den Reiter "Einkauf" der MM03 für das entsprechende Werk an, z.B. bei
Klick auf
Sprung in MM03, Reiter
"Einkauf", bei Klick auf die Drucktaste in Spalte "Werk"
Dazu
wird bei der Spalte "Werk" ein InputScript angegeben, das bei Klick auf die
Drucktaste ausgeführt wird:
Die
ausgewählte Zeile erhält man über die Systemvariable V[_tabrowabs].
// InputScript "plants_select.txt"
GuiXT
// Display data for selected plant in MM03
Enter "/5"
// delete current view selection
Screen SAPLMGMM.0070
Enter "/19"
// Select first material view
Screen SAPLMGMM.0070
Set cell[Table,0,1] "X"
Enter
// to tab Purchasing
Screen SAPLMGMM.4004
Enter "=SP09"
// Set plant in organizational popup
Screen SAPLMGMM.0081
Set F[RMMG1-WERKS] "&V[plants.cell.werks.&V[_tabrowabs]]"
Enter