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:

 GuiXT

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"

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

 

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