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:

// 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.

// 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"

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:

 Column "Werk" name="werks" size=6 -pushbutton process="mm03plants\plants_select.txt"

Die ausgewählte Zeile erhält man über die Systemvariable V[_tabrowabs].

// InputScript "plants_select.txt"

// 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

 

Sie können die Scripte hier runterladen: mm03plants_d.zip