Sie sind auf Seite 1von 5

Hinweis 418801 Hinweissprache: Deutsch

16.02.2006

Anlegen eines Userexit-Makros


Version: 4 Gltigkeit:
gltig seit

Zusammenfassung
Symptom
Die Verwendung eines Standardmakros ist nicht mglich.

Weitere Begriffe
Makro Macro /SAPAPO/SDP94 /SAPAPO/SNP94

Ursache und Voraussetzungen


Mgliche Ursachen: o Parameter, die zur Berechnung der Zeileneintrge bentigt werden, sind im Makrobuilder nicht verfgbar und mssen erst aus Datenbanktabellen gezogen werden. Zur Ermittlung der Zeileneintrge sind kompliziertere Berechnungen erforderlich.

Lsung
Das Problem kann durch Anlegen eines User-Exit-Makros gelst werden. Die genaue Vorgehensweise soll im folgenden illustriert werden. Ab SCM Release 5.0 wird empfohlen, anstelle eines User-Exit-Makros ein BAdI-Makro zu verwenden (siehe SAP Online Dokumentation).

Anlegen des Makros


o o o Rufen Sie den Macrobuilder mit der Transaktion /SAPAPO/ADVM auf. Selektieren Sie eine Makromappe. Ziehen Sie per Drag-and-Drop das Symbol mit der Aufschrift 'Userexit-Makro' vom Shuffler in den mittleren Screen und hngen Sie ihn an das Symbol mit der Bezeichnung 'Makro'. Benennen Sie ihn. Falls erwnscht verknpfen Sie das soeben erzeugte Userexit-Makro-Symbol mit einem der Ereignis-Symbole, die sich im rechten Teilscreen befinden.

Anlegen des Userexits


o o Starten Sie die Transaktion SMOD. Fllen Sie das Feld 'Erweiterung' mit APODM005. Weiter mit 'Anzeigen'.

28.07.2011

Seite 1 von

Hinweis 418801 -

Anlegen eines Userexit-Makros

Danach bettigen Sie die Drucktaste 'Komponenten' oder Umsch+F11 und doppelklicken Sie auf die Bezeichnung des Funktionsbausteins. Doppelklicken Sie auf das in dem Funktionsbaustein befindliche Include, um ihr Coding zu erfassen.

Schnittstelle
Im folgenden soll dargelegt werden, wie die Schnittstelle des Userexits zu fllen ist. Der Benutzer fllt bzw. modifiziert ausschlielich die Tabellen T_C_TAB T_E_TAB_OLD

Die Tabelle T_C_TAB ist hier die eigentliche Ausgabetabelle. T_E_TAB_OLD gibt Aufschlu ber Datenvernderungen und mu aus technischen Grnden gepflegt werden. Alle weiteren Tabellen dienen als Eingabeparameter. Die auf der Plantafel befindlichen Werte sind in der Tabelle T_C_TAB unter dem Feldnamen V abgelegt. Die Tabelleneintrge werden eindeutig durch ihren Zeilenindex Z und ihren Spaltenindex C festgelegt. Dabei liefert die Tabelle T_I_COLS die Spalteninformation, whrend sich die Zeileninformation aus einem inneren Join ber die Tabellen T_I_PLOB_VALUES und T_I_LINES ergibt. Zur Berechnung von Zeilen und Spalten werden die Parameter der folgenden Tabellen verwendet: Schnittstellen-Parameter -----------------------------------------------------------------| Tabelle | Feld | Beschreibung | -----------------------------------------------------------------| T_I_COLS | VONTG | Datumsuntergrenze | | T_I_COLS | BISTG | Datumsobergrenze | -----------------------------------------------------------------| T_I_PLOB_VALUES | SELECTION | Tabelle bestehend aus dem | | | | Merkmal IOBJNM und einer | | | | Ranges-Struktur | | T_I_PLOB_VALUES | PLOBJ | (fr Join-Bedingung) | | T_I_PLOB_VALUES| IOBJNM | Technische Bezeichnung des | | SELECTION | | betr. Merkmals | -----------------------------------------------------------------| T_I_LINES | FELDH | Technische Bezeichnung der | | | | betr. Kennzahl | | T_I_LINES | GRIDNR | Name des betr. Grids | | T_I_LINES | KRIT1 | (fr Join-Bedingung) | -----------------------------------------------------------------| T_C_TAB / T_E_TAB_OLD | Z | Zeilenindex der Plantafel | | T_C_TAB / T_E_TAB_OLD | C | Spaltenindex der Plantafel | | T_C_TAB / T_E_TAB_OLD | V | num. Plantafeleintrag | -----------------------------------------------------------------Um die Plantafeleintrge zu manipulieren, mssen die Matrixeintrge der der Tabelle T_C_TAB durch das Coding des User-Exits geeignet angepat werden. Jede einzelne Zelle wird dabei durch die Koordinaten der Matrix addressiert. Im einzelnen gehen Sie wie folgt vor:
28.07.2011 Seite 2 von 5

Hinweis 418801 -

Anlegen eines Userexit-Makros

Bestimmen Sie abhngig von den Datumsgrenzen VONTG und BISTG die Spalte C aus der Tabelle T_I_COLS. Prfen Sie ber die interne Tabelle T_I_PLOB_VALUES-SELECTION die Eindeutigkeit der Lsung und bestimmen Sie gegebenenfalls T_I_PLOB_VALUES-PLOBJ. Bestimmen Sie aus Tabelle T_I_LINES vermittels der Schlsselfelder T_I_PLOB_VALUES-PLOBJ FELDH GRIDNR = '001'

die Zeilennummer Z = T_I_LINES-LINE. o In die Tabelle T_C_TAB tragen Sie zum ermittelten Zeilen- und Spaltenindex den erwnschten Wert unter T_C_TAB-V ein. Falls ein Wert der Tabelle verndert werden soll, speichern Sie den frheren Eintrag der T_C_TAB in der strukturgleichen Tabelle T_E_TAB_OLD ab. Wird ein Wert in die Tabelle T_C_TAB neu eingefuegt, muss dabei in die Tabelle T_E_TAB_OLD ein Nullwert fuer die entsprechende Zeilen und Spaltennummer eingefuegt werden.

Bemerkungen
o Es is ntig, die Eindeutigkeit der Selektion sicherzustellen, sofern man Modifikationen auf der Stufe niedrigster Granularitt vornehmen mchte. Wir mchten uns hier auf diesen Fall beschrnken. Die technischen Bezeichnungen fr Kennzahl und Merkmal entnehmen Sie der Transaktion /SAPAPO/SDP8B.

Beispiel-Coding
Der folgende Funktionsbaustein belegt alle Buckets zur Kennzahl FELDH innerhalb des Zeitintervalles VONTG bis BISTG mit einem konstanten Wert V. Die Selektion wird durch die Felder IOBJNM und CHAR_VAL bestimmt, wobei ersteres der technische Name des Merkmals ist und letzteres den Wert des Merkmals bezeichnet. FUNCTION zfill_buckets *"---------------------------------------------------------------------*"*"Global interface: *" IMPORTING *" VALUE(I_CUBE) TYPE /SAPAPO/INFOCUBE *" VALUE(I_LAYOUT) TYPE /SAPAPO/LAYOUT *" VALUE(I_SCTYP) TYPE /SAPAPO/SCTYP *" VALUE(I_MACRO_NAME) TYPE /SAPAPO/TXMAK *" VALUE(I_ACT_PLOBJ) TYPE /SAPAPO/PLOBJ *" VALUE(VONTG) TYPE BEGDA *" VALUE(BISTG) TYPE ENDDA *" VALUE(IOBJNM) TYPE /SAPAPO/IOBJNM OPTIONAL *" VALUE(CHAR_VAL) TYPE /SAPAPO/CHAVL
28.07.2011 Seite 3 von 5

Hinweis 418801 -

Anlegen eines Userexit-Makros

*" VALUE(FELDH) TYPE /SAPAPO/IOBJNM *" VALUE(V) TYPE I *" TABLES *" T_I_PLOB_VALUES TYPE /SAPAPO/DM_T_PLOB_VALUES *" T_I_DRILL_HIER STRUCTURE /SAPAPO/PGAN *" T_I_LINES STRUCTURE /SAPAPO/MCP6_LI *" T_I_COLS STRUCTURE /SAPAPO/PGCOLS *" T_C_TAB STRUCTURE /SAPAPO/MXSOP *" T_E_TAB_OLD STRUCTURE /SAPAPO/MXSOP *"---------------------------------------------------------------------DATA: l_selection LIKE LINE OF t_i_plob_values-selection. DATA: l_line LIKE LINE OF t_i_lines. DATA: l_tab LIKE LINE OF t_c_tab. DATA: l_col LIKE LINE OF t_i_cols. DATA: l_column LIKE t_i_cols-column. DATA: l_cnt TYPE i. DATA: l_gridnr TYPE char3 VALUE '001'. DATA: l_index LIKE sy-tabix. * read table t_i_cols index 1 into l_col. LOOP AT t_i_cols INTO l_col WHERE bistg <= bistg AND vontg >= vontg. l_column = l_col-column. LOOP AT t_i_plob_values. For checking uniqueness calculate # entries CLEAR l_cnt. LOOP AT t_i_plob_values-selection INTO l_selection WHERE iobjnm = iobjnm AND low = char_val. l_cnt = l_cnt + 1. IF l_cnt > 1. EXIT. ENDIF. ENDLOOP.

IF sy-subrc <> 0 OR l_cnt > 1. CONTINUE. ENDIF. READ TABLE t_i_plob_values-selection WITH KEY iobjnm = iobjnm low = char_val z = l_line-line c = l_column TRANSPORTING NO FIELDS. * store old value IF sy-subrc = 0. MODIFY t_e_tab_old FROM l_tab INDEX sy-tabix. ELSE. APPEND l_tab TO t_e_tab_old. ENDIF. * store new value l_tab-v = v. MODIFY t_c_tab FROM l_tab INDEX l_index. ENDLOOP. ENDLOOP. ENDFUNCTION.
28.07.2011 Seite 4 von 5

Hinweis 418801 -

Anlegen eines Userexit-Makros

Kopfdaten
Freigabestatus: Freigegeben am: Mastersprache: Proritt: Kategorie: Hauptkomponente: Zustzliche Komponenten: SCM-APO-SNP-MAC MacroBuilder Fr Kunden freigegeben 16.02.2006 09:45:22 Deutsch Korrektur mit mittlerer Prioritt Beratung SCM-APO-FCS-MAC MacroBuilder

Gltige Releases
Software Komponente SAP_APO SAP_APO SCM SCM SCM SCM Release 30 310 400 410 500 510 Von Release 30A 310 400 410 500 510 Bis Release 30A 310 400 410 500 510 und folgende

Verwandte Hinweise
Nummer 1045639 539797 Kurztext Beratungshinweise fr SNP/CTM Sammelberatungshinweis fr Makros

28.07.2011

Seite 5 von