*---------------------------------------------------------------------*
* Z _ B J H _ D Y N P R O _ T C *
* *
* Autor: Bernd Haase (BJH Software) *
*---------------------------------------------------------------------*
* Beispielprogramm für die Be- und Verarbeitung eines Dynpros. Für *
* die Auswahl werden zum Test die Lieferantennummer und ähnliche *
* Felder eingegeben. Danach ermittel das System eine Liste, welche im *
* Dynpro als Table-Control angezeigt wird. Einzige Aktion (außer Ende)*
* ist das Anklicken oder Verändern der Menge, es erfolgt (nur zu *
* Anschauungszwecken) eine Addtion der Menge um 0,1 und das Zurück- *
* setzen der Markierung. PBO und PAI sind im Programm, keine Includes.*
*---------------------------------------------------------------------*
* (D) Dynpro - Table Control, Dynpro - Icon Create (Grafik und Push- *
* button) *
*---------------------------------------------------------------------*
* 23.12.2003 BHaa: Programm erstellt *
* 05.01.2004 BHaa: Beispiel-Aktion für Anmarkern hinterlegt *
* 25.05.2005 BHaa: Ampel als Grafiksymbil im Table Control *
*---------------------------------------------------------------------*
REPORT z_bjh_dynpro_tc .
INCLUDE .
TABLES:
ekko, "Einkaufsbelegkopf
ekpo. "Einkaufsbelegposition
* für das Beispiel dient die Bestellpositionstabelle
DATA:
wa_ekko LIKE ekko,
wa_ekpo LIKE ekpo,
* Tabelle für das Dynpro erweitert um xmarked zum Markieren
* Werteinhalte für die auszugebende Liste. Achtung: anscheinend können
* geschachtelte Strukturen nicht ordnungsgemäß ausgegeben werden,
* deswegen der Umweg über ausw-Struktur und move-corresponding
BEGIN OF ausw,
xmarked(1) TYPE c,
ebeln LIKE ekko-ebeln,
ebelp LIKE ekpo-ebelp,
lifnr LIKE ekko-lifnr,
matnr LIKE ekpo-matnr,
meins LIKE ekpo-meins,
menge LIKE ekpo-menge,
werks LIKE ekpo-werks,
END OF ausw,
* interner Parameter
anzahl(5) TYPE n.
* Data-Anweisungen speziell nur für den Table-Control
DATA:
* Rückgabewert Aktion im Dynpro
okcode LIKE sy-ucomm,
* Table-Control für die Anzeige am Bildschirm
itab_ausw LIKE TABLE OF ausw.
***************
* Dynpro 9200 *
***************
CONTROLS:
* Kontrolle für den TableControl-Bildschirm
tc9200 TYPE TABLEVIEW USING SCREEN '9200'.
DATA:
* Systemfelder für den Table Control im Dynpro
* wieviel Zeilen gibt es
loop9200 LIKE sy-loopc,
cursor_9200 LIKE sy-stepl,
* selektierte Zeile
select9200 LIKE sy-stepl,
* Datensatznummer referiert auf die interne Tabelle zur Auswahl der
* Tabellenzeile
datensatz9200 LIKE sy-tabix,
* Ampel als grafische Auflockerung im Dynpro
icon_ampel LIKE icons-text,
* Materialnummer als Pushbutton
icon_matnr LIKE icons-text,
* lesen aus der Tabelle, dient aber auch zum Anwählen der Materialien
idx_9200 LIKE sy-tabix.
*---------------------------------------------------------------------*
* *
* A u s w a h l b i l d s c h i r m *
* *
*---------------------------------------------------------------------*
* Auswahlbildschirm zur Eingrenzung der Auswahl
SELECTION-SCREEN: BEGIN OF BLOCK a1 WITH FRAME TITLE text-901.
SELECT-OPTIONS:
* Lieferantennummer
solifnr FOR ekko-lifnr,
* Bestellung
soebeln FOR ekko-ebeln,
* Materialnummer
somatnr FOR ekpo-matnr.
SELECTION-SCREEN: END OF BLOCK a1.
INITIALIZATION.
***********************************************************************
* *
* P R O G R A M M S T A R T *
* *
***********************************************************************
* beim Dynpro muß hier "at Selektion-Screen" stehen anstatt
* "Start-of-selection". Beim Select-Options ist die Dynpro-Nummer
* normalerweise die 1000, diese muß der Transaktion zugeordnet sein
AT SELECTION-SCREEN.
* Selektion der Datensätze auf Basis der Vorabauswahl
* hier mal als geschachtelte Einlesevariante
SELECT * FROM ekko INTO wa_ekko
WHERE ebeln IN soebeln
AND lifnr IN solifnr
AND loekz = ' '.
SELECT * FROM ekpo INTO wa_ekpo
WHERE ebeln = wa_ekko-ebeln
AND matnr IN somatnr
AND loekz = ' '.
CLEAR: ausw.
MOVE-CORRESPONDING wa_ekko TO ausw.
MOVE-CORRESPONDING wa_ekpo TO ausw.
APPEND ausw TO itab_ausw.
ENDSELECT.
ENDSELECT.
* Alternativ-Beispiel
* 100 Datensätze 1:1 in die interne Tabelle kopieren
* SELECT * FROM ekpo into
* UP TO 100 ROWS
* INTO TABLE itab_ekpo.
DESCRIBE TABLE itab_ausw LINES anzahl.
* es wurden Datensätze selektiert
IF anzahl > 0.
* Liste nach Bestellnummer sortieren
SORT itab_ausw BY ebeln ebelp ASCENDING.
LEAVE TO SCREEN '9200'.
ENDIF.
EXIT.
*---------------------------------------------------------------------*
* *
* P B O Routinen *
* *
*---------------------------------------------------------------------*
* Module S T A T U S _ 9 2 0 0 Output *
*---------------------------------------------------------------------*
* allgemeiner Teil des Dynpros, was wie gesetzt werden soll. *
*---------------------------------------------------------------------*
MODULE status_9200 OUTPUT.
* umschalten der Toolbar und eventuell des Titels, hier keine Aktion
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'.
DESCRIBE TABLE itab_ausw LINES tc9200-lines.
ENDMODULE.
*---------------------------------------------------------------------*
* Module G E T _ L O O P L I N E S _ 9 2 0 0 Output *
*---------------------------------------------------------------------*
* Table-Control spezifischer Teil. Dieser Part gilt für nur den Table *
* Control, welcher im Dynpro in der Ablauflogik-Schleife dazu hinter- *
* legt ist. Das Setzen der Loop-Lines sollte immer geschehen, weiter- *
* hin wird hier noch die Grafik bestimmt. Die kann von Zeile zu Zeile *
* sich ändern, auch wenn es immer die gleiche Variable ist ! *
*---------------------------------------------------------------------*
MODULE get_looplines_9200 OUTPUT.
loop9200 = sy-loopc.
* anhand der Auswahlmenge eine Ampel am Bildschirm anzeigen
IF ausw-menge < 10.
PERFORM upro-bildschirm_icon
USING 'ICON_GREEN_LIGHT' 'kleine Menge'
CHANGING icon_ampel.
ELSEIF ausw-menge < 100.
PERFORM upro-bildschirm_icon
USING 'ICON_YELLOW_LIGHT' 'geht noch'
CHANGING icon_ampel.
ELSEIF ausw-menge < 1000000.
PERFORM upro-bildschirm_icon
USING 'ICON_RED_LIGHT' 'na ja'
CHANGING icon_ampel.
ELSE.
PERFORM upro-bildschirm_icon
USING 'ICON_ALERT' 'etwas zu viel ?'
CHANGING icon_ampel.
ENDIF.
* Materialnummer als Push-Button (Hintenrumtrick für die Anzeige)
* wie dieser angelegt wird, siehe auch Beschreibung im Dynpro
CALL FUNCTION 'ICON_CREATE'
EXPORTING
name = '@'
text = ausw-matnr
info = 'Transaktion MM03'
* ADD_STDINF = 'X'
IMPORTING
result = icon_matnr.
ENDMODULE.
*---------------------------------------------------------------------*
* *
* P A I Routinen *
* *
*---------------------------------------------------------------------*
* Module U S E R _ C O M M A N D _ E N D E Input *
*---------------------------------------------------------------------*
* harter Abbruch ausgelöst. Hier sofort das gesamte Programm verlassen*
*---------------------------------------------------------------------*
MODULE user_command_ende INPUT.
LEAVE PROGRAM.
ENDMODULE.
*---------------------------------------------------------------------*
* Module U S E R _ C O M M A N D _ 9 2 0 0 Input *
*---------------------------------------------------------------------*
* Prüfen auf Funktionscodes im Dynpro und allgmeiner Nachlaufroutinen.*
* Im Dynpro ist die allgemeine Funktion "Ende" hinterlegt, allerdings *
* diese auch als harter Abbruch (Funktions-Typ "E") sowie es gibt *
* einen Pushbutton auf das Material, welcher bei Drücken in den Mate- *
* rialstamm verzweigt. *
*---------------------------------------------------------------------*
MODULE user_command_9200 INPUT.
CASE okcode.
WHEN 'MM03'.
* Klick auf die Materialnummer, wechseln in Transaktion MM03
PERFORM upro-sprung_mm03.
WHEN 'ENDE'.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE.
*---------------------------------------------------------------------*
* Module M O D I F Y _ I T A B _ A U S W INPUT *
*---------------------------------------------------------------------*
* Aktion für eine Änderung in einem Feld. Im Beispiel hier soll bei *
* geänderter Menge oder Markierung die Menge ein wenig erhöht werden. *
*---------------------------------------------------------------------*
MODULE modify_itab_ausw INPUT.
* Beispiel: markierte Zeile demarkieren
* und die Menge in der Zeile zu entsprechenden Wert erhöhen
MOVE ' ' TO ausw-xmarked.
ADD '0.1' TO ausw-menge.
* ermittelte Zeile (alle Werte) des Bildschirmes in interne Tabelle
* übertragen und dort aktualisieren
MODIFY itab_ausw FROM ausw INDEX tc9200-current_line.
ENDMODULE.
*---------------------------------------------------------------------*
* *
* Unterprogramme *
* *
*---------------------------------------------------------------------*
* S P R U N G _ M M 0 3 *
*---------------------------------------------------------------------*
* Klick auf den Materialstamm. Sprung in den Materialdatenverwaltung *
* mit der geklickten Materialnummer und dem Werk der Bestellposition. *
*---------------------------------------------------------------------*
FORM upro-sprung_mm03.
DATA:
mm03_matnr LIKE mara-matnr,
mm03_werks LIKE marc-werks.
CLEAR: mm03_matnr, mm03_werks.
* in welcher Zeile wurde die Materialanzeige gedrückt
GET CURSOR LINE cursor_9200.
IF sy-subrc = 0.
idx_9200 = tc9200-top_line + cursor_9200 - 1.
* Bildschirmzeile einlesen
READ TABLE itab_ausw INTO ausw INDEX idx_9200.
IF sy-subrc = 0.
MOVE ausw-matnr TO mm03_matnr.
MOVE ausw-werks TO mm03_werks.
ENDIF.
ENDIF.
* Materialnummer vorhanden, wechseln in das Materialanzeigeprogramm
IF NOT mm03_matnr IS INITIAL.
SET PARAMETER ID 'MAT' FIELD mm03_matnr.
SET PARAMETER ID 'WRK' FIELD mm03_werks.
SET PARAMETER ID 'LAG' FIELD ' '.
* welche Sichten sollen in Transaktion MM03 aufgeblendet werden
* B=Buchhaltung1, D=Disposition1, E=Einkauf, K=Grunddaten,
* G=Kalkulation, L=Werksdaten / Lagerung 1, X=Werksbestand, Z=
SET PARAMETER ID 'MXX' FIELD 'D'.
CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
ENDIF.
ENDFORM.
*---------------------------------------------------------------------*
* B I L D S C H I R M _ I C O N *
*---------------------------------------------------------------------*
* Bildchen / Grafik im Dynpro umwandeln auf das richtige Format für *
* eine Anzeige. Es wird nur der Funktionsbaustein bedient, alle Ein- *
* gaben müssen gemacht und vorgegeben werden. *
*---------------------------------------------------------------------*
* =>] p_icon_name: welche Grafik soll gezeichnet werden *
* =>] p_icon_info: Zusatztext, erscheint bei Maus darüber (HTML ALT=) *
* ]=> p_icon: SAP interne Darstellung der Grafik *
*---------------------------------------------------------------------*
FORM upro-bildschirm_icon
USING p_icon_name
p_icon_info
CHANGING p_icon.
CALL FUNCTION 'ICON_CREATE'
EXPORTING
name = p_icon_name
* TEXT = p_icon_text
info = p_icon_info
* ADD_STDINF = 'X'
IMPORTING
result = p_icon.
ENDFORM.
***** Ende *****
* Copyright BJH Software, Datei überarbeitet am: 26.5.2005