Dynpro Steuerung mit Z_CHECK_MODIFY (Dynpro - Matthias König)
Folgende Funktionen sind möglich:
- Abbrechen
- Ändern -> Anzeigen
- Objekt wechseln
- Löschen
- Beenden
FUNCTION Z_CHECK_MODIFY. *"---------------------------------------------------------------------- *"*"Lokale Schnittstelle: *" IMPORTING *" VALUE(CODE) *" VALUE(MODIFY) *" EXPORTING *" VALUE(RCODE) LIKE SY-SUBRC *"---------------------------------------------------------------------- * Initialisierungen CLEAR RCODE. * Fallunterscheidung CASE CODE. * .. Abbrechen WHEN 'A'. CHECK NOT MODIFY IS INITIAL. CALL FUNCTION 'POPUP_TO_CONFIRM_STEP' EXPORTING DEFAULTOPTION = 'Y' TEXTLINE1 = TEXT-005 TEXTLINE2 = TEXT-006 TITEL = TEXT-007 IMPORTING ANSWER = ANSWER EXCEPTIONS OTHERS = 1. IF ANSWER <> 'J'. RCODE = 1. ENDIF. * .. Ändern -> Anzeigen WHEN 'V'. CHECK NOT MODIFY IS INITIAL. CALL FUNCTION 'POPUP_TO_CONFIRM_STEP' EXPORTING DEFAULTOPTION = 'Y' TEXTLINE1 = TEXT-011 TEXTLINE2 = TEXT-012 TITEL = TEXT-015 IMPORTING ANSWER = ANSWER EXCEPTIONS OTHERS = 1. IF ANSWER = 'J'. RCODE = 1. ELSEIF ANSWER = 'A'. RCODE = 2. ENDIF. * .. Objekt wechseln WHEN 'W'. CHECK NOT MODIFY IS INITIAL. CALL FUNCTION 'POPUP_TO_CONFIRM_STEP' EXPORTING DEFAULTOPTION = 'Y' TEXTLINE1 = TEXT-011 TEXTLINE2 = TEXT-012 TITEL = TEXT-016 IMPORTING ANSWER = ANSWER EXCEPTIONS OTHERS = 1. IF ANSWER = 'J'. RCODE = 1. ELSEIF ANSWER = 'A'. RCODE = 2. ENDIF. * .. Löschen WHEN 'L'. CALL FUNCTION 'POPUP_TO_CONFIRM_STEP' EXPORTING DEFAULTOPTION = 'N' TEXTLINE1 = TEXT-008 TEXTLINE2 = TEXT-009 TITEL = TEXT-010 IMPORTING ANSWER = ANSWER EXCEPTIONS OTHERS = 1. IF ANSWER <> 'J'. RCODE = 1. ENDIF. * .. sonst WHEN OTHERS. CHECK NOT MODIFY IS INITIAL. CALL FUNCTION 'POPUP_TO_CONFIRM_STEP' EXPORTING DEFAULTOPTION = 'Y' TEXTLINE1 = TEXT-011 TEXTLINE2 = TEXT-012 TITEL = TEXT-013 IMPORTING ANSWER = ANSWER EXCEPTIONS OTHERS = 1. IF ANSWER = 'J'. RCODE = 1. ELSEIF ANSWER = 'A'. RCODE = 2. ENDIF. ENDCASE. ENDFUNCTION. ------------------------------------------------------------------------ Texte: 005 Alle Eingaben werden verloren 006 gehen. Möchten Sie abbrechen? 007 Abbrechen 008 Wollen Sie das Objekt 009 wirklich löschen? 010 Löschen 011 Wollen Sie Ihre Daten vorher 012 noch sichern? 013 Beenden 015 Ändern -> Anzeigen 016 ... wechseln |
F4-Hilfe (Dynpro - Matthias König)
PROCESS ON VALUE-REQUEST.
FIELD KNA1-KTOKD MODULE D100_F4_KTOKD.
FORM F4_KTOKD. DATA: BEGIN OF VTAB OCCURS 0, WERT(35) TYPE C, END OF VTAB. DATA: DFIELDS LIKE DYNPREAD OCCURS 0 WITH HEADER LINE, FIELDS LIKE HELP_VALUE OCCURS 0 WITH HEADER LINE, IND LIKE SY-TABIX, RC LIKE SY-SUBRC. * Struktur der Tabelle definieren CLEAR FIELDS. FIELDS-TABNAME = 'KNA1'. FIELDS-FIELDNAME = 'KTOKD'. FIELDS-SELECTFLAG = 'X'. APPEND FIELDS. CLEAR FIELDS. FIELDS-TABNAME = 'KNA1'. FIELDS-FIELDNAME = 'KTOST'. APPEND FIELDS. CLEAR FIELDS. FIELDS-TABNAME = 'KNA1T'. FIELDS-FIELDNAME = 'KTOTX'. APPEND FIELDS. * Wertetabelle füllen SELECT * INTO TABLE I_DATA FROM KNA1 WHERE SPERR = '' ORDER BY KTOKD KTOST. LOOP AT I_DATA. * .. Kontengruppe, Steuerkz. VTAB-WERT+0(4) = I_KNA1-KTOKD. VTAB-WERT+4(1) = I_KNA1-KTOST. * .. Text zur Kontengruppe SELECT SINGLE * FROM KNA1T WHERE KTOKD = I_DATA-KTOKD AND KTOST = I_DATA-KTOST AND SPRAS = SY-LANGU. IF SY-SUBRC <> 0. CLEAR KNA1T-KTOTX. ENDIF. VTAB-WERT+5(30) = KNA1T-KTOTX. APPEND VTAB. ENDLOOP. * erlaubte Werte anzeigen CALL FUNCTION 'HELP_VALUES_GET_NO_DD_NAME' EXPORTING SELECTFIELD = 'KNA1-KTOKD' TITEL = 'Kontengruppe auswählen' SHOW_ALL_VALUES_AT_FIRST_TIME = 'X' NO_SCROLL = 'X' NO_MARKING_OF_CHECKVALUE = 'X' NO_DISPLAY_OF_PERS_VALUES = ' ' IMPORTING IND = IND TABLES FIELDS = FIELDS FULL_TABLE = VTAB EXCEPTIONS FULL_TABLE_EMPTY = 1 NO_TABLESTRUCTURE_GIVEN = 2 NO_TABLEFIELDS_IN_DICTIONARY = 3 MORE_THEN_ONE_SELECTFIELD = 4 NO_SELECTFIELD = 5 OTHERS = 6. IF SY-SUBRC <> 0. MESSAGE E103 WITH 'HELP_VALUES_GET_NO_DD_NAME' SY-SUBRC. ENDIF. * prüfen, ob Wert zurückgegeben wurde IF IND = 0. EXIT. ENDIF. * Struktur ZV11 anpassen READ TABLE I_DATA INDEX IND. SKNA1-KTOKD = I_ZVDKG-KTOKD. SKNA1-KTOST = I_ZVDKG-KTOST. SKNA1-KTOTX = ZVDKGT-KTOTX. * Dynpro-Felder definieren CLEAR DFIELDS. DFIELDS-FIELDNAME = 'SKNA1-KTOKD'. DFIELDS-FIELDVALUE = SKNA1-KTOKD. APPEND DFIELDS. CLEAR DFIELDS. DFIELDS-FIELDNAME = 'SKNA1-KTOTX'. DFIELDS-FIELDVALUE = KNA1-KTOTX. APPEND DFIELDS. * Werte auf Dynpro ausgeben CALL FUNCTION 'DYNP_VALUES_UPDATE' EXPORTING DYNAME = SY-REPID DYNUMB = SY-DYNNR TABLES DYNPFIELDS = DFIELDS EXCEPTIONS INVALID_ABAPWORKAREA = 1 INVALID_DYNPROFIELD = 2 INVALID_DYNPRONAME = 3 INVALID_DYNPRONUMMER = 4 INVALID_REQUEST = 5 NO_FIELDDESCRIPTION = 6 UNDEFIND_ERROR = 7 OTHERS = 8. IF SY-SUBRC <> 0. MESSAGE E999 WITH 'DYNP_VALUES_UPDATE' SY-SUBRC. ENDIF. * PBO aufrufen LEAVE TO SCREEN SY-DYNNR. ENDFORM. " F4_KTOKD |
Feldprüfungen (Dynpro - Matthias König)
Sämtliche Prüfungen (Prüftabelle, Festwerte, FIELD ... ) werden bei nicht eingabebereiten Feldern nicht ausgeführt.
Folgebildsteuerung (Dynpro - Matthias König)
Die folgenden Tabellen müssen mit der Transaktion SM31 gepflegt werden: - Tabelle T185 (nur 1 Eintrag) - Tabelle T185F (3 Einträge für Anlegen, Ändern und Anzeigen) Programm TTyp FCode Bezeichnung AkTyp Bldgr Panel KGr PGr FTyp DiArt --------------------------------------------------------------------------------- SAPMV45A A PINF Info Bestand, Preise V X 0 SAPMV45A H PINF Info Bestand, Preise V X 0 SAPMV45A V PINF Info Bestand, Preise V X 0
Leerzeilen bei Table Control (Dynpro - Bernhard Diemer)
Um Eingabebereite Leerzeilen auf dem Dynpro anzeigen zu koennen muss nicht die interne Tabelle mit Leer Zeilen befüllt werden.
Es muss lediglich der Parameter
LINES
des Table Controls auf die gewünschte Anzahl gesetzt werden.
Liste ausgeben (Dynpro - Matthias König)
LEAVE TO LIST-PROCESSING
PROCESS BEFORE OUTPUT. MODULE D9000_PREPARE_LIST. * PROCESS AFTER INPUT. MODULE D9000_PREPARE_LIST OUTPUT. * Ausgabe in Liste aktivieren LEAVE TO LIST-PROCESSING AND RETURN TO SCREEN 0. * Seite, Titel und Status setzen NEW-PAGE NO-TITLE LINE-SIZE 50. SET TITLEBAR '900' WITH YSBEST-VTWEG. SET PF-STATUS '9000'. * Liste ausgeben PERFORM LISTE_AUSGEBEN. * Liste verlassen LEAVE SCREEN. ENDMODULE. " D9500_PREPARE_LIST OUTPUT |
Liste drucken (Dynpro - Matthias König)
innerhalb eines Dynpros drucken
* ... * Druckparameter zum akt. Benutzer bestimmen (MODE = CURRENT) CALL FUNCTION 'GET_PRINT_PARAMETERS' EXPORTING IN_PARAMETERS = PARAMS MODE = 'CURRENT' NO_DIALOG = 'X' LINE_COUNT = 65 LINE_SIZE = 80 IMPORTING OUT_PARAMETERS = PARAMS EXCEPTIONS ARCHIVE_INFO_NOT_FOUND = 1 INVALID_PRINT_PARAMS = 2 INVALID_ARCHIVE_PARAMS = 3 OTHERS = 4. IF SY-SUBRC <> 0. MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. EXIT. ENDIF. * Umschaltung auf Listausgabe (und sofortigem Springen zur Maske der * Druckparameter durch 'PRINT ON') LEAVE TO LIST-PROCESSING. IF PARAMS-PDEST IS INITIAL. NEW-PAGE NO-TITLE PRINT ON PARAMETERS PARAMS. ELSE. NEW-PAGE NO-TITLE PRINT ON NO DIALOG PARAMETERS PARAMS. ENDIF. * Kopfzeilen ausgeben ULINE. WRITE:/01 SY-VLINE, 02 SY-DATUM, 13 SY-UZEIT, 22 SY-UNAME, 35 TEXT1, 82 SY-VLINE. ULINE. * ... |
mehrere Step-Loops (Dynpro - Matthias König)
es sind mehrere LOOP - ENDLOOP-Blöcke im Ablauf möglich. Sie werden in der Reihenfolge, in der sie auf dem Dynpro angeordnet sind (von oben nach unten) angeprochen.
TabStrip (Dynpro - Matthias König)
CONTROLS: ct_tabstrip TYPE TABSTRIP.
... * Titel und Status setzen CASE W_DYNNR. * .. Kopf WHEN '1100'. SET TITLEBAR '110' WITH W_AKTXT. SET PF-STATUS W_PFSTA EXCLUDING I_EXCL. CT_TABSTRIP-ACTIVETAB = 'TAB1'. * .. Kunden WHEN '1200'. SET TITLEBAR '120' WITH W_AKTXT. SET PF-STATUS W_PFSTA EXCLUDING I_EXCL. CT_TABSTRIP-ACTIVETAB = 'TAB2'. * .. Planzahlen WHEN '1300'. SET TITLEBAR '130' WITH W_AKTXT. SET PF-STATUS W_PFSTA EXCLUDING I_EXCL. CT_TABSTRIP-ACTIVETAB = 'TAB3'. * .. Status WHEN '1400'. SET TITLEBAR '140' WITH W_AKTXT. SET PF-STATUS W_PFSTA EXCLUDING I_EXCL. CT_TABSTRIP-ACTIVETAB = 'TAB4'. ENDCASE. ... =============================================================================== CONTROLS: ct_tabstrip TYPE TABSTRIP. |
Übersetzung (Dynpro - Matthias König)
Alle Texte, die man auf dem Dynpro ohne Bezug zum Data Dictionary definiert (wie z.B. Rahmentitel, Kommentare, ...), können übersetzt werden, in dem man auf dem Fullscreen über Springen -> Übersetzung in die Übersetzungsumgebung springt.
ADDRESS_MAINTAIN (FB - Matthias König)
Adresse anlegen bzw. pflegen
ALSM_EXCEL_TO_INTERNAL_TABLE (FB - unbekannt)
Excel Datei in ABAP/4 Programm verarbeiten
*&---------------------------------------------------------------------* *& Report UPLOAD_EXCEL * *& * *&---------------------------------------------------------------------* *& * *& Upload and excel file into an internal table using the following * *& function module: ALSM_EXCEL_TO_INTERNAL_TABLE * *&---------------------------------------------------------------------* REPORT UPLOAD_EXCEL no standard page heading. *Data Declaration *---------------- data: itab like alsmex_tabline occurs 0 with header line. * Has the following format: * Row number | Colum Number | Value * --------------------------------------- * i.e. 1 1 Name1 * 2 1 Joe TYPES: Begin of t_record, name1 like itab-value, name2 like itab-value, age like itab-value, End of t_record. DATA: it_record type standard table of t_record initial size 0, wa_record type t_record. DATA: gd_currentrow type i. *Selection Screen Declaration *---------------------------- PARAMETER p_infile like rlgrap-filename. ************************************************************************ *START OF SELECTION call function 'ALSM_EXCEL_TO_INTERNAL_TABLE' exporting filename = p_infile i_begin_col = '1' i_begin_row = '2' "Do not require headings i_end_col = '14' i_end_row = '31' tables intern = itab exceptions inconsistent_parameters = 1 upload_ole = 2 others = 3. if sy-subrc <> 0. message e010(zz) with text-001. "Problem uploading Excel Spreadsheet endif. * Sort table by rows and colums sort itab by row col. * Get first row retrieved read table itab index 1. * Set first row retrieved to current row gd_currentrow = itab-row. loop at itab. * Reset values for next row if itab-row ne gd_currentrow. append wa_record to it_record. clear wa_record. gd_currentrow = itab-row. endif. case itab-col. when '0001'. "First name wa_record-name1 = itab-value. when '0002'. "Surname wa_record-name2 = itab-value. when '0003'. "Age wa_record-age = itab-value. endcase. endloop. append wa_record to it_record. *!! Excel data is now contained within the internal table IT_RECORD * Display report data for illustration purposes loop at it_record into wa_record. write:/ sy-vline, (10) wa_record-name1, sy-vline, (10) wa_record-name2, sy-vline, (10) wa_record-age, sy-vline. endloop. |
Batch Input erstellen für NON-Programmierer (FB - Holger Onnen)
Hallo,
SAP Bietet ab dem Rel. 4.6 alternativ eine Funktion zur Erstellung von Datenübernahmeprogrammen und Batch-Input Mappen.
Die Transaktion lautet LSMW *Legacy System Migration Workbench*.
Sollte die Funktion nicht mögliche sein, so steht der Download auf der SAP HP zur Verfügung.
BDC_CLOSE_GROUP (FB - Matthias König)
Mappenverarbeitung
* Mappe öffnen CALL FUNCTION 'BDC_OPEN_GROUP' EXPORTING GROUP = 'GROUP1' KEEP = 'X' USER = SY-UNAME EXCEPTIONS ... * Mappe füllen CALL FUNCTION 'BDC_INSERT' EXPORTING TCODE = 'XD07' TABLES DYNPROTAB = BDCTAB EXCEPTIONS ... * Mappe schließen CALL FUNCTION 'BDC_CLOSE_GROUP' EXCEPTIONS ... |
BDC_INSERT (FB - Matthias König)
Mappenverarbeitung
* Mappe öffnen CALL FUNCTION 'BDC_OPEN_GROUP' EXPORTING GROUP = 'GROUP1' KEEP = 'X' USER = SY-UNAME EXCEPTIONS ... * Mappe füllen CALL FUNCTION 'BDC_INSERT' EXPORTING TCODE = 'XD07' TABLES DYNPROTAB = BDCTAB EXCEPTIONS ... * Mappe schließen CALL FUNCTION 'BDC_CLOSE_GROUP' EXCEPTIONS ... |
BDC_OPEN_GROUP (FB - Matthias König)
Mappenverarbeitung
* Mappe öffnen CALL FUNCTION 'BDC_OPEN_GROUP' EXPORTING GROUP = 'GROUP1' KEEP = 'X' USER = SY-UNAME EXCEPTIONS ... * Mappe füllen CALL FUNCTION 'BDC_INSERT' EXPORTING TCODE = 'XD07' TABLES DYNPROTAB = BDCTAB EXCEPTIONS ... * Mappe schließen CALL FUNCTION 'BDC_CLOSE_GROUP' EXCEPTIONS ... |
Berechnet Arbeitszeit in Sekunden zwischen zwei Zeitpunkten (FB - martinkh)
De funktionsbaustein TSTR_CALC_DURATION berechnet die Arbeitszeit in Sekunden zwischen zwei Zeitpunkten. Dabei berücksichtigt er auch den Fabrikkalender
CALL_BROWSER (FB - Matthias König)
Internet-Browser aufrufen
CHAR_FLTP_CONVERSION (FB - Matthias König)
Konvertierung von CHAR in FLOAT; keine Tausendertrennzeichen erlaubt
REPORT ZKOTST04 NO STANDARD PAGE HEADING. DATA: FLOAT TYPE F. CALL FUNCTION 'CHAR_FLTP_CONVERSION' EXPORTING STRING = '-12000,12' IMPORTING FLSTR = FLOAT EXCEPTIONS EXPONENT_TOO_BIG = 1 EXPONENT_TOO_SMALL = 2 STRING_NOT_FLTP = 3 TOO_MANY_DECIM = 4 OTHERS = 5. WRITE:/ FLOAT EXPONENT 0. |
CLPB_EXPORT (FB - Matthias König)
Text in das Clipboard/Zwischenablage übernehmen
* Adresse in Datentabelle übernehmen I_DATA = 'Zeile1'. APPEND I_DATA. I_DATA = 'Zeile2'. APPEND I_DATA. * Adresse in Zwischenablage kopieren CALL FUNCTION 'CLPB_EXPORT' TABLES DATA_TAB = I_DATA EXCEPTIONS CLPB_ERROR = 1 OTHERS = 2. |
CONVERSION_EXIT_SDATE_INPUT (FB - Matthias König)
Konvertierung eines externen Datums in das interne Format.
CONVERT_AMOUNT_TO_CURRENCY (FB - Matthias König)
Umrechnung von Währungen (z.B. in EURO)
COPY_TEXTS (FB - Matthias König)
Textobjekt kopieren; Textobjekte stehen in der Tabelle STXH
DATEI_IN (FB - Matthias König)
PC-Datei über Explorer bestimmen
CALL FUNCTION 'WS_FILENAME_GET' EXPORTING DEF_FILENAME = DATEI_IN MASK = ',*.txt,*.txt.' MODE = 'S' " oder O TITLE = 'Bitte Datei auswählen' IMPORTING FILENAME = DATEI_OUT EXCEPTIONS INV_WINSYS = 1 NO_BATCH = 2 SELECTION_CANCEL = 3 SELECTION_ERROR = 4 OTHERS = 5. |
DDIF_FIELDINFO_GET (FB - Matthias König)
Mit diesem Funktionsbaustein können Sie die Laufzeitinformation einer Tabelle oder allgemeiner eines beliebigen Typs des ABAP Dictionary lesen. Die Laufzeitinformation enthält auch Textinformation. Falls Sie keine Textinformation wünschen, so sollten Sie den wesentlich effizienteren Funktionsbaustein DDIF_NAMETAB_GET verwenden.
DATA: i_ftab LIKE dfies OCCURS 0 WITH HEADER LINE. * Felder der Struktur ZSKF bestimmen CALL FUNCTION 'DDIF_FIELDINFO_GET' EXPORTING tabname = 'ZSKF' TABLES dfies_tab = i_ftab EXCEPTIONS OTHERS = 1. |
DEQUEUE_ALL (FB - Matthias König)
alle bestehenden Sperren aufheben
DISPLAY_BASIC_LIST (FB - Matthias König)
Darstellung einstufiger Listen als Table Control und als Liste mit Möglichkeit des Datentransfers in MS Word u. MS Excel
REPORT ZLISTPROG. TABLES: KNA1. DATA: BEGIN OF I_KUNDEN OCCURS 0, KUNNR LIKE KNA1-KUNNR, NAME1 LIKE KNA1-NAME1, END OF I_KUNDEN. DATA: I_DATA_TAB LIKE HRDATATAB OCCURS 20 WITH HEADER LINE. DATA: I_FIELDNAMES LIKE HRFIELDNAM OCCURS 20 WITH HEADER LINE. CONSTANTS: C_FILENAME(7) VALUE 'SAPDATA'. START-OF-SELECTION. * Datenselektion SELECT KUNNR NAME1 FROM KNA1 INTO CORRESPONDING FIELDS OF TABLE I_KUNDEN. * Aufbau Datentabelle für Übergabe an Fubau LOOP AT I_KUNDEN. I_DATA_TAB-LANGTEXT1 = I_KUNDEN-KUNNR. I_DATA_TAB-LANGTEXT2 = I_KUNDEN-NAME1. APPEND I_DATA_TAB. ENDLOOP. * Aufbau Überschriftentabelle I_FIELDNAMES-FIELD = 'Kundennummer'. I_FIELDNAMES-FIELD2 = 'KNA1'. I_FIELDNAMES-FIELD3 = 'KUNNR'. I_FIELDNAMES-KEY = 'X'. APPEND I_FIELDNAMES. CLEAR I_FIELDNAMES. I_FIELDNAMES-FIELD = 'Kundenname'. I_FIELDNAMES-FIELD2 = 'KNA1'. I_FIELDNAMES-FIELD3 = 'NAME1'. APPEND I_FIELDNAMES. * Liste als TableControl darstellen CALL FUNCTION 'DISPLAY_BASIC_LIST' EXPORTING FILE_NAME = C_FILENAME TABLES DATA_TAB = I_DATA_TAB FIELDNAME_TAB = I_FIELDNAMES EXCEPTIONS DOWNLOAD_PROBLEM = 1 NO_DATA_TAB_ENTRIES = 2 TABLE_MISMATCH = 3 PRINT_PROBLEMS = 4 OTHERS = 5. |
DOMAIN_VALUE_GET (FB - Matthias König)
Domänenfestwerte bestimmen
DOWNLOAD (FB - Matthias König)
interne Tabelle als Datei auf dem Präentationsserver ablegen
DYNP_VALUES_READ (FB - Matthias König)
Dynpro Feldwerte lesen vor PAI Feldtransport.
Mit Hilfe dieses Funktionsbausteines können Feldinhalte aus dem Dynpro ausgelesen werden, welche von den Hilfebausteinen weiter verarbeitet werden können. Der Funktionsbaustein ist nur im POV (process on value-request) eines Dynpros bzw. Reports (siehe Beispiel) einsetzbar.
DATA: I_DFIELDS LIKE DYNPREAD OCCURS 0 WITH HEADER LINE. * Parameterwerte bestimmen I_DFIELDS-FIELDNAME = 'P_DFILE'. APPEND I_DFIELDS. I_DFIELDS-FIELDNAME = 'P_DLOCL'. APPEND I_DFIELDS. CALL FUNCTION 'DYNP_VALUES_READ' EXPORTING DYNAME = 'ZJABOIFD' DYNUMB = '1000' TABLES DYNPFIELDS = I_DFIELDS EXCEPTIONS INVALID_ABAPWORKAREA = 1 INVALID_DYNPROFIELD = 2 INVALID_DYNPRONAME = 3 INVALID_DYNPRONUMMER = 4 INVALID_REQUEST = 5 NO_FIELDDESCRIPTION = 6 INVALID_PARAMETER = 7 UNDEFIND_ERROR = 8 DOUBLE_CONVERSION = 9 STEPL_NOT_FOUND = 10 OTHERS = 11. LOOP AT I_DFIELDS. CASE I_DFIELDS-FIELDNAME. WHEN 'P_DFILE'. P_DFILE = I_DFIELDS-FIELDVALUE. WHEN 'P_DLOCL'. P_DLOCL = I_DFIELDS-FIELDVALUE. ENDCASE. ENDLOOP. |
ENQUEUE_E_TABLE (FB - Matthias König)
Tabelle sperren; Sperrobjekt E_TABLE
F4_SHOW_RESULT' (FB - Matthias König)
Liste mit Mehrfachauswahl
FIELDNAME_ROLLNAME_TEXT (FB - Matthias König)
Liefert zu einem Feld Feld- und Datenelementinformationen, z.b. Kurztext
FIELD_CHOICE (FB - Matthias König)
Auswahl von Feldern - mit diesem Funktionsbaustein kann eine optisch verbesserte Feldauswahl realisiert werden.
FILE_GET_NAME (FB - Matthias König)
phy. Dateipfad zu einem logischen bestimmen
FORMAT_TEXTLINES (FB - Matthias König)
Textzeilen eines Sapscript Textobjekts formatieren
GET_DYNPRO_LIST (FB - Matthias König)
Dynpro drucken
DATA: DYNPRO_LIST LIKE DYNP_LIST OCCURS 0 WITH HEADER LINE, PARAMS LIKE PRI_PARAMS. * Druckparameter zum akt. Benutzer bestimmen (MODE = CURRENT) CALL FUNCTION 'GET_PRINT_PARAMETERS' EXPORTING IN_PARAMETERS = PARAMS MODE = 'CURRENT' NO_DIALOG = 'X' LINE_COUNT = 44 LINE_SIZE = 82 IMPORTING OUT_PARAMETERS = PARAMS EXCEPTIONS ARCHIVE_INFO_NOT_FOUND = 1 INVALID_PRINT_PARAMS = 2 INVALID_ARCHIVE_PARAMS = 3 OTHERS = 4. * Dynpro in Listzeilen umwandeln CALL FUNCTION 'GET_DYNPRO_LIST' EXPORTING DYNAME = SY-CPROG DYNUMB = SY-DYNNR PROCESS_ACTUAL_DYNPRO = 'X' TABLES DYNPRO_LIST = DYNPRO_LIST EXCEPTIONS NO_SUCH_DYNPRO = 1 NO_INCLUDE_DYNPRO_INFOS = 2 WRONG_INCLUDE_DYNPRO_INFOS = 3 OTHERS = 4. * Umschaltung auf Listausgabe (und sofortigem Springen zur Maske der * Druckparameter durch 'PRINT ON') LEAVE TO LIST-PROCESSING AND RETURN TO SCREEN SY_DYNNR. SET PF-STATUS '9900'. SET TITLEBAR '990' WITH SY-DYNNR. NEW-PAGE NO-TITLE PRINT ON NO DIALOG PARAMETERS PARAMS. * Dynpro als Liste ausgeben CALL FUNCTION 'PRINT_DYNPRO_LIST' TABLES DYNPRO_LIST = DYNPRO_LIST EXCEPTIONS LIST_EMPTY = 1 OTHERS = 2. |
GET_INCLUDETAB (FB - Matthias König)
Alle Includes zu einem Programm (Funktionsgruppe, Report) bestimmen
GET_JOB_RUNTIME_INFO (FB - Matthias König)
Lesen Laufzeitdaten eines Batch-Jobs innerhalb des im Batch ausgeführten Programms
GET_PRINT_PARAMETERS (FB - Matthias König)
Druckparameter zum akt. Benutzer bestimmen
* Druckparameter zum akt. Benutzer bestimmen (MODE = CURRENT) CALL FUNCTION 'GET_PRINT_PARAMETERS' EXPORTING IN_PARAMETERS = PARAMS MODE = 'CURRENT' NO_DIALOG = 'X' LINE_COUNT = 44 LINE_SIZE = 82 IMPORTING OUT_PARAMETERS = PARAMS EXCEPTIONS ARCHIVE_INFO_NOT_FOUND = 1 INVALID_PRINT_PARAMS = 2 INVALID_ARCHIVE_PARAMS = 3 OTHERS = 4. |
GUI_IS_ITS (FB - Matthias König)
Fb GUI_IS_ITS gibt 'X' zurück, wenn ein Web-Gui (ITS) verwendet wird.
DATA: result TYPE c. CALL FUNCTION 'GUI_IS_ITS' IMPORTING return = result. |
HELP_DOCULINES_SHOW (FB - Matthias König)
Popup zur Anzeige eines Textes
FORM MESSAGE_AUSGEBEN TABLES FT_TLINE STRUCTURE TLINE. DATA: LI_EXCL LIKE HLPFCODE OCCURS 0 WITH HEADER LINE, LWA_HINFO LIKE HELP_INFO. * Nachricht ausgeben LWA_HINFO-TITLE = 'Berechtigungsprüfung'. LI_EXCL = 'DINF'. APPEND LI_EXCL. CALL FUNCTION 'HELP_DOCULINES_SHOW' EXPORTING CUCOL = 5 CUROW = 5 HELP_INFOS = LWA_HINFO LINENR = 1 NOT_HELP = '' OVERLAY_HEADER = '' SUPPRESS_VIEWER = '' TABLES EXCLUDEFUN = LI_EXCL HELPLINES = FT_TLINE EXCEPTIONS OTHERS = 1. ENDFORM. " MESSAGE_AUSGEBEN |
HELP_DOCULINES_SHOW (FB - Matthias König)
Dokumenation anzeigen (analog F1 zu Datenelement)
FORM INFO_TEXTE_ANZEIGEN. DATA: BEGIN OF I_EXCL OCCURS 0, FUNC(4) TYPE C, END OF I_EXCL. DATA: I_LINE LIKE TLINE OCCURS 0 WITH HEADER LINE, I_LINE_H LIKE TLINE OCCURS 0 WITH HEADER LINE, S_HINFO LIKE HELP_INFO, TDNAME LIKE THEAD-TDNAME, TDSPRAS LIKE THEAD-TDSPRAS. * Texte lesen TDNAME = KUNNR. IF ZV05_AD-SPRAS IS INITIAL. TDSPRAS = SY-LANGU. ELSE. TDSPRAS = KNA1-SPRAS. ENDIF. CALL FUNCTION 'READ_TEXT' EXPORTING ID = '9002' LANGUAGE = TDSPRAS NAME = TDNAME OBJECT = 'KNA1' TABLES LINES = I_LINE_H EXCEPTIONS ID = 1 LANGUAGE = 2 NAME = 3 NOT_FOUND = 4 OBJECT = 5 REFERENCE_CHECK = 6 WRONG_ACCESS_TO_ARCHIVE = 7 OTHERS = 8. IF SY-SUBRC = 0. APPEND LINES OF I_LINE_H TO I_LINE. ENDIF. CALL FUNCTION 'READ_TEXT' EXPORTING ID = '9003' LANGUAGE = TDSPRAS NAME = TDNAME OBJECT = 'KNA1' TABLES LINES = I_LINE_H EXCEPTIONS ID = 1 LANGUAGE = 2 NAME = 3 NOT_FOUND = 4 OBJECT = 5 REFERENCE_CHECK = 6 WRONG_ACCESS_TO_ARCHIVE = 7 OTHERS = 8. IF SY-SUBRC = 0. IF NOT I_LINE[] IS INITIAL. I_LINE = TEXT-103. APPEND I_LINE. ENDIF. APPEND LINES OF I_LINE_H TO I_LINE. ENDIF. IF I_LINE[] IS INITIAL. MESSAGE S513. EXIT. ENDIF. * Text anzeigen S_HINFO-TITLE = 'Infotexte zum Kunden'. I_EXCL = 'ERHI'. APPEND I_EXCL. I_EXCL = 'DINF'. APPEND I_EXCL. I_EXCL = 'VPFL'. APPEND I_EXCL. I_EXCL = 'DWFL'. APPEND I_EXCL. I_EXCL = 'DCAN'. APPEND I_EXCL. CALL FUNCTION 'HELP_DOCULINES_SHOW' EXPORTING CUCOL = 3 CUROW = 5 HELP_INFOS = S_HINFO NOT_HELP = 'X' TABLES EXCLUDEFUN = I_EXCL HELPLINES = I_LINE EXCEPTIONS OTHERS = 1. ENDFORM. " INFO_TEXTE_ANZEIGEN |
HELP_OBJECT_SHOW (FB - Matthias König)
Message-Langtext auf einem Dynpro ausgeben
DATA: I_LINKS LIKE TLINE OCCURS 0 WITH HEADER LINE. * Langtext Nachricht 200(KN) anzeigen CALL FUNCTION 'HELP_OBJECT_SHOW' EXPORTING DOKCLASS = 'NA' " DE bei Datenelement DOKNAME = 'KN200' DOKTITLE = 'Nachricht' MSG_VAR_1 = TABNA MSG_VAR_2 = INDNR MSG_VAR_3 = WERTM MSG_VAR_4 = TREFF TABLES LINKS = I_LINKS. |
HELP_START (FB - Matthias König)
Suchhilfe direkt aufrufen (z.B. für Kunden-Nr.)
FORM F4_KUNNR. DATA: I_DYSE LIKE DSELC OCCURS 0 WITH HEADER LINE, I_DYVA LIKE DVAL OCCURS 0 WITH HEADER LINE, HINFO LIKE HELP_INFO, SELECTION(100) TYPE C, RSMDY_RET LIKE RSMDY, VALUE LIKE HELP_INFO-FLDVALUE, KUNNR LIKE KNA1-KUNNR. * help_infos füllen HINFO-CALL = 'M'. HINFO-OBJECT = 'F'. HINFO-PROGRAM = SY-CPROG. HINFO-DYNPRO = '1000'. HINFO-TABNAME = 'KNA1'. HINFO-FIELDNAME = 'KUNNR'. HINFO-FIELDTYPE = 'CHAR'. HINFO-FIELDLNG = '16'. HINFO-MCOBJ = 'DEBI'. HINFO-SPRAS = SY-LANGU. HINFO-DYNPROFLD = 'KNA1-KUNNR'. HINFO-DYNPPROG = SY-CPROG. * Matchcodehilfe aufrufen CALL FUNCTION 'HELP_START' EXPORTING HELP_INFOS = HINFO IMPORTING SELECTION = SELECTION SELECT_VALUE = VALUE RSMDY_RET = RSMDY_RET TABLES DYNPSELECT = I_DYSE DYNPVALUETAB = I_DYVA EXCEPTIONS OTHERS = 1. CHECK SY-SUBRC = 0 AND NOT VALUE IS INITIAL. ENDFORM. " F4_KUNNR |
HELP_VALUES_GET_NO_DD_NAME (FB - Matthias König)
Liste mit Einfachauswahl
*&---------------------------------------------------------------------* *& Form f4_brkey *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM f4_brkey USING brkey. DATA: BEGIN OF i_vtab OCCURS 0, wert(79) TYPE c, END OF i_vtab. DATA: i_fields LIKE help_value OCCURS 0 WITH HEADER LINE, i_dfields LIKE dynpread OCCURS 0 WITH HEADER LINE, bukrs LIKE ynv27-bukrs, ind LIKE sy-tabix. * Struktur der Tabelle definieren CLEAR i_fields. i_fields-tabname = 'ZALLG'. i_fields-fieldname = 'GPKEY'. i_fields-selectflag = 'X'. APPEND i_fields. CLEAR i_fields. i_fields-tabname = 'YNV01'. i_fields-fieldname = 'NAME1'. APPEND i_fields. CLEAR i_fields. i_fields-tabname = 'YNV02'. i_fields-fieldname = 'NAME4'. APPEND i_fields. CLEAR i_fields. i_fields-tabname = 'YNV27'. i_fields-fieldname = 'PROVEAR_ID'. APPEND i_fields. CLEAR i_fields. i_fields-tabname = 'YNV27'. i_fields-fieldname = 'BER_NR'. APPEND i_fields. * Buchungskreis vom Selektionsbild lesen i_dfields-fieldname = 'P_BUKRS'. APPEND i_dfields. CALL FUNCTION 'DYNP_VALUES_READ' EXPORTING dyname = sy-cprog dynumb = '1000' TABLES dynpfields = i_dfields EXCEPTIONS invalid_abapworkarea = 1 invalid_dynprofield = 2 invalid_dynproname = 3 invalid_dynpronummer = 4 invalid_request = 5 no_fielddescription = 6 invalid_parameter = 7 undefind_error = 8 double_conversion = 9 stepl_not_found = 10 OTHERS = 11. LOOP AT i_dfields. CASE i_dfields-fieldname. WHEN 'P_BUKRS'. bukrs = i_dfields-fieldvalue. ENDCASE. ENDLOOP. * Wertetabelle füllen SELECT * FROM ynv27 WHERE bukrs = bukrs AND gueltig_ab <= sy-datum AND gueltig_bi >= sy-datum AND loeschkz = ''. SELECT SINGLE * FROM ynv01 WHERE gp_id = ynv27-gp_id. IF sy-subrc <> 0. CLEAR ynv01. ENDIF. SELECT * FROM ynv02 WHERE gp_id = ynv27-gp_id AND lfdnr = ynv27-lfdnr_id AND gueltab <= sy-datum AND gueltbis >= sy-datum. EXIT. ENDSELECT. IF sy-subrc <> 0. CLEAR ynv02. ENDIF. i_vtab+00(10) = ynv27-gp_id. i_vtab+10(01) = '.'. i_vtab+11(03) = ynv27-lfdnr_id. i_vtab+14(30) = ynv01-name1. i_vtab+44(30) = ynv02-name4. i_vtab+74(02) = ynv27-provear_id. i_vtab+76(03) = ynv27-ber_nr. APPEND i_vtab. ENDSELECT. IF i_vtab[] IS INITIAL. MESSAGE s910(zn). EXIT. ENDIF. * erlaubte Werte anzeigen CALL FUNCTION 'HELP_VALUES_GET_NO_DD_NAME' EXPORTING selectfield = 'ZALLG-GPKEY' titel = 'Berater auswählen' show_all_values_at_first_time = 'X' no_scroll = 'X' no_marking_of_checkvalue = 'X' no_display_of_pers_values = ' ' IMPORTING ind = ind TABLES fields = i_fields full_table = i_vtab EXCEPTIONS full_table_empty = 1 no_tablestructure_given = 2 no_tablefields_in_dictionary = 3 more_then_one_selectfield = 4 no_selectfield = 5 OTHERS = 6. IF sy-subrc <> 0. MESSAGE e103 WITH 'HELP_VALUES_GET_NO_DD_NAME' sy-subrc. ENDIF. * prüfen, ob Wert zurückgegeben wurde IF ind = 0. EXIT. ENDIF. * ausgewählten Wert zurückgeben READ TABLE i_vtab INDEX ind. brkey = i_vtab(14). ENDFORM. " f4_brkey |
INBOUND_IDOC_PROCESS (FB - Matthias König)
Dieser Funktionsbaustein startet die Eingangsverarbeitung der ALE-Schicht. Über die Tabellenparameter können der ALE-Schicht ein oder mehrere Zwischenbelege übergeben werden. Die Tabelle IDOC_CONTROL enthält die Kontrollsätze und die Tabelle IDOC_DATA die Datensätze zu den Zwischenbelegen. Um die Verbindung zwischen einem Kontrollsatz und den zugehörigen Datensätzen herzustellen, muß der Inhalt des Feldes DOCNUM im Kontrollsatz und den zugehörigen Datensätzen übereinstimmen. Die eingehenden Zwischenbelege werden nach der Verarbeitung durch die ALE-Schicht auf die Datenbank geschrieben und an die empfangende Anwendung übergeben.
ITS_EXECUTE (FB - Matthias König)
Ausführen eines Programms auf dem Client / FrontEnd, wenn der Zugriff über den ITS erfolgt. Dabei wird ein JavaApplet aufgerufen, das das Programm dann ausführt.
CALL FUNCTION 'ITS_EXECUTE' EXPORTING commandline = 'C:\tmp\i_view32.exe' program = 'C:\temp\Bilder\test.jpg' EXCEPTIONS frontend_error = 1 prog_not_found = 2 gui_refuse_execute = 3 OTHERS = 4. |
J_8AI_CONVERT_TO_CHAR (FB - Matthias König)
Konvertiere beliebiger Typen nach CHAR
K_MESSAGE_TRANSFORM (FB - Matthias König)
Umsetzen einer Nachricht in ein Textfeld
MS_EXCEL_OLE_STANDARD_DAT (FB - Matthias König)
Daten direkt in MS Excel laden
NAMETAB_GET (FB - Matthias König)
Felder einer Tabelle bzw. Struktur bestimmen
NUMBER_RANGE_INTERVAL_LIST (FB - Matthias König)
Nummernkreisintervall Informationen
POPUP_TO_CONFIRM_STEP (FB - Matthias König)
siehe Funktionsgruppen SPO1 bis SPO6
PRINT_TEXT (FB - Matthias König)
Text analog Nachrichten-Langtext ausgeben
DATA: lwa_header LIKE thead, lwa_options LIKE itcpo. Header bestimmen lwa_header-tdobject = 'DOKU'. lwa_header-tdname = 'besondere Bearbeitung'. lwa_header-tdid = 'ST'. lwa_header-tdspras = 'D'. lwa_header-tdtitle = 'Header-Titel'. lwa_header-tdform = 'S_DOCU_SHOW'. lwa_header-tdstyle = 'S_DOCUS1'. lwa_header-tdlinesize = 72. (Druck-) Optionen bestimmen lwa_options-tddest = '*'. lwa_options-tdimmed = '*'. lwa_options-tddelete = '*'. lwa_options-tdtitle = '(besondere Bearbeitung)'. Text anzeigen CALL FUNCTION 'PRINT_TEXT' EXPORTING device = 'SCREEN' dialog = '' header = lwa_header options = lwa_options TABLES lines = i_text EXCEPTIONS canceled = 1 device = 2 form = 3 options = 4 unclosed = 5 unknown = 6 format = 7 textformat = 8 communication = 9 bad_pageformat_for_print = 10 OTHERS = 11. |
PRINT_TEXT (FB - Matthias König)
Textobjekt drucken
DATA: DOKUHEADER LIKE THEAD OCCURS 01 WITH HEADER LINE, DOKULINES LIKE TLINE OCCURS 10 WITH HEADER LINE. CALL FUNCTION 'READ_TEXT' EXPORTING CLIENT = SY-MANDT ID = 'ST' LANGUAGE = 'D' NAME = 'Z_JE_KENNUNGHELP' OBJECT = 'TEXT' IMPORTING HEADER = DOKUHEADER TABLES LINES = DOKULINES EXCEPTIONS ... CALL FUNCTION 'PRINT_TEXT' EXPORTING APPLICATION = 'TD' DEVICE = 'SCREEN' HEADER = DOKUHEADER TABLES LINES = DOKULINES EXCEPTIONS ... |
prüfen ob Arbeitstag im Fabrikkalender (FB - martinkh)
Der Funktionsbaustein DATE_CONVERT_TO_FACTORYDATE prüft ob ein Datum im Fabrikalender als Arbeitstag gekennzeichnet ist. Wenn nach Ausführung die Inport-und Exportparameter DATE gleich sind, ist es ein Arbeitstag im Fabrikkalender.
Über den Parameter CORRECT_OPTION steuert man wie der Arbeitstag berechnet wird.
'+' Falls das angegebene Datum kein Arbeitstag ist, wird
der erste Arbeitstag nach dem Datum geliefert.
( Default )
'-' Falls das angegebene Datum kein Arbeitstag ist, wird
der erste Arbeitstag vor dem Datum geliefert.
READ_FORM (FB - Matthias König)
Textelement zu einem Formular lesen. Der Beginn eines Seitenfensters wird mit Format /W gekennzeichnet.
READ_TEXT (FB - Matthias König)
Textobjekt lesen
REUSE_ALV_GRID_DISPLAY (FB - Matthias König)
ALV Grid aufrufen (ab 4.6)
RH_LISTPOPUP (FB - Matthias König)
Wert aus einer Liste auswählen
DATA: LIST(25) TYPE C OCCURS 25 WITH HEADER LINE, HEAD(25) TYPE C OCCURS 1 WITH HEADER LINE. CALL FUNCTION 'RH_LISTPOPUP' EXPORTING TITLE = 'Titel' CUCOL = 50 CUROW = 4 IMPORTING PICKED_LINE = LIST " ausgewählter Wert TABLES PAGE_HEADER = HEAD LIST = LIST EXCEPTIONS LIST_EMPTY = 1 WRONG_MARK_MODE = 2 F15 = 3 " Abbrechen OTHERS = 4. IF SY-SUBRC <> 0. EXIT. ENDIF. VTWEG = LIST(2). |
RKC_MSG_STRING (FB - Matthias König)
Umsetzen einer Nachricht in ein Textfeld
RP_CALC_DATE_IN_INTERVAL (FB - Matthias König)
Datumsberechnung
Datum +/- Jahr/Monat/Tag (in die Zukunft/Vergangenheit)
RSPO_RETURN_SPOOLJOB (FB - Matthias König)
Spooldatei in interne Tabelle lesen
FUNCTION Z_SEND_MAIL_ATT_PDF. *"---------------------------------------------------------------------- *"*"Lokale Schnittstelle: *" IMPORTING *" VALUE(RQIDENT) LIKE TSP01-RQIDENT *" VALUE(TITEL) LIKE SODOCCHGI1-OBJ_DESCR DEFAULT 'Mail' *" VALUE(OBJECT) LIKE SOLISTI1 STRUCTURE SOLISTI1 *" VALUE(RECEIVER) LIKE SOMLRECI1-RECEIVER *" VALUE(OUTBOX) LIKE SONV-FLAG DEFAULT '' *" VALUE(DELETE_SPOOL) LIKE SY-BATCH DEFAULT 'X' *" VALUE(TEXT1) LIKE SOLISTI1 STRUCTURE SOLISTI1 *" DEFAULT SY-UNAME *" VALUE(TEXT2) LIKE SOLISTI1 STRUCTURE SOLISTI1 *" DEFAULT SY-DATUM *" VALUE(TEXT3) LIKE SOLISTI1 STRUCTURE SOLISTI1 *" DEFAULT SY-UZEIT *" VALUE(TEXT4) LIKE SOLISTI1 STRUCTURE SOLISTI1 *" OPTIONAL *" VALUE(TEXT5) LIKE SOLISTI1 STRUCTURE SOLISTI1 *" OPTIONAL *" VALUE(TEXT6) LIKE SOLISTI1 STRUCTURE SOLISTI1 *" OPTIONAL *" EXCEPTIONS *" FEHLER_LESEN_SPOOL *" FEHLER_KONVERTIERUNG *" FEHLER_SEND_MAIL *" FEHLER_SPOOL_LOESCHEN *"---------------------------------------------------------------------- DATA: I_SOLI LIKE SOLI OCCURS 0 WITH HEADER LINE, I_PLIST LIKE SOPCKLSTI1 OCCURS 0 WITH HEADER LINE, I_OHEAD LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE, I_COBIN LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE, I_COTXT LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE, I_RECI LIKE SOMLRECI1 OCCURS 0 WITH HEADER LINE. DATA: LEN_OUT LIKE SOOD-OBJLEN, DOC_DATA LIKE SODOCCHGI1, RQIDENT_C10(10) TYPE C, ERRMSG(100) TYPE C, ANZ1 LIKE SY-TABIX, ANZ2 LIKE SY-TABIX, RC(10) TYPE C. * Spool-Datei lesen CALL FUNCTION 'RSPO_RETURN_SPOOLJOB' EXPORTING RQIDENT = RQIDENT DESIRED_TYPE = 'OTF' TABLES BUFFER = I_SOLI EXCEPTIONS NO_SUCH_JOB = 1 JOB_CONTAINS_NO_DATA = 2 SELECTION_EMPTY = 3 NO_PERMISSION = 4 CAN_NOT_ACCESS = 5 READ_ERROR = 6 TYPE_NO_MATCH = 7 OTHERS = 8. IF SY-SUBRC <> 0. MESSAGE E902 WITH RQIDENT SY-SUBRC RAISING FEHLER_LESEN_SPOOL. ENDIF. * OTF in PDF umsetzen CALL FUNCTION 'SX_OBJECT_CONVERT_OTF_PDF' EXPORTING FORMAT_SRC = 'OTF' FORMAT_DST = 'TIF' DEVTYPE = '' LEN_IN = '' IMPORTING LEN_OUT = LEN_OUT TABLES CONTENT_IN = I_SOLI CONTENT_OUT = I_COBIN EXCEPTIONS ERR_CONV_FAILED = 1 OTHERS = 2. IF SY-SUBRC <> 0. MESSAGE E903 RAISING FEHLER_KONVERTIERUNG. ENDIF. * Empfänger bestimmen I_RECI-RECEIVER = RECEIVER. I_RECI-REC_TYPE = 'U'. APPEND I_RECI. * Mailtext aufbauen I_COTXT = TEXT1. APPEND I_COTXT. I_COTXT = TEXT2. APPEND I_COTXT. I_COTXT = TEXT3. APPEND I_COTXT. I_COTXT = TEXT4. APPEND I_COTXT. I_COTXT = TEXT5. APPEND I_COTXT. I_COTXT = TEXT6. APPEND I_COTXT. DESCRIBE TABLE I_COTXT LINES ANZ1. CLEAR I_PLIST. I_PLIST-HEAD_START = 1. I_PLIST-HEAD_NUM = 0. I_PLIST-BODY_START = 1. I_PLIST-BODY_NUM = ANZ1. I_PLIST-DOC_TYPE = 'RAW'. APPEND I_PLIST. * Mail-Anhang aufbauen DESCRIBE TABLE I_COBIN LINES ANZ2. CONCATENATE OBJECT '.pdf' INTO I_OHEAD. TRANSLATE I_OHEAD TO LOWER CASE. APPEND I_OHEAD. CLEAR I_PLIST. I_PLIST-TRANSF_BIN = 'X'. I_PLIST-HEAD_START = 1. I_PLIST-HEAD_NUM = 1. I_PLIST-BODY_START = 1. I_PLIST-BODY_NUM = ANZ2. I_PLIST-DOC_TYPE = 'PDF'. I_PLIST-OBJ_NAME = OBJECT. I_PLIST-DOC_SIZE = LEN_OUT. APPEND I_PLIST. * Dokumentdaten bestimmen DOC_DATA-OBJ_NAME = 'URGENT'. DOC_DATA-OBJ_DESCR = TITEL. DOC_DATA-SENSITIVTY = 'P'. DOC_DATA-DOC_SIZE = ( ANZ1 - 1 ) * 255 + STRLEN( I_COTXT ). * Mail mit Anhang (PDF-Datei) senden CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1' EXPORTING DOCUMENT_DATA = DOC_DATA PUT_IN_OUTBOX = OUTBOX TABLES PACKING_LIST = I_PLIST OBJECT_HEADER = I_OHEAD CONTENTS_BIN = I_COBIN CONTENTS_TXT = I_COTXT RECEIVERS = I_RECI EXCEPTIONS TOO_MANY_RECEIVERS = 1 DOCUMENT_NOT_SENT = 2 DOCUMENT_TYPE_NOT_EXIST = 3 OPERATION_NO_AUTHORIZATION = 4 PARAMETER_ERROR = 5 X_ERROR = 6 ENQUEUE_ERROR = 7 OTHERS = 8. IF SY-SUBRC <> 0. MESSAGE E904 WITH SY-SUBRC RAISING FEHLER_SEND_MAIL. ENDIF. * ggf. Spooldatei löschen IF NOT DELETE_SPOOL IS INITIAL. UNPACK RQIDENT TO RQIDENT_C10. CALL 'RSPOARNS' ID 'ID' FIELD RQIDENT_C10 ID 'FORCE' FIELD 'X' ID 'RC' FIELD RC ID 'ERRMSG' FIELD ERRMSG. IF SY-SUBRC <> 0. MESSAGE E901 WITH RQIDENT ERRMSG RAISING FEHLER_SPOOL_LOESCHEN. ENDIF. ENDIF. ENDFUNCTION. |
RS_COMPLEX_OBJECT_EDIT (FB - Matthias König)
interne Tabelle als Liste aufbereiten
DATA: BEGIN OF I_POS OCCURS 0, VBELN LIKE JKAP-VBELN, POSNR LIKE JKAP-POSNR, POSEX LIKE JKAP-POSEX, DRERZ LIKE JKAP-DRERZ, PVA LIKE JKAP-PVA, BEZTYP LIKE JKAP-BEZUGSTYP, DATVON LIKE JKAP-GUELTIGVON, DATBIS LIKE JKAP-GUELTIGBIS, BEZIRK LIKE JKPAZ-BEZIRK, LFBAR LIKE JKPAZ-LIEFBARNR, GPNR LIKE JKPA-GPNR, ADRNR LIKE JKPA-ADRNR, BEZPER LIKE JKEP-BEZPER, MENGE LIKE JKEP-ETMENGE, AENTY LIKE ZJAZVAE-AENTY, GRUND LIKE ZJAZVAE-GRUND, END OF I_POS. * I_POS als Liste ausgeben CALL FUNCTION 'RS_COMPLEX_OBJECT_EDIT' EXPORTING OBJECT_NAME = 'I_POS' CHANGING OBJECT = I_POS[]. |
RS_TOOL_ACCESS (FB - Matthias König)
Programmcode im Editor anzeigen
* Unterprogramm anzeigen CALL FUNCTION 'RS_TOOL_ACCESS' EXPORTING OPERATION = 'SHOW' OBJECT_NAME = 'KNA1_EXIT' OBJECT_TYPE = 'PU' ENCLOSING_OBJECT = 'SAPMF02D' MONITOR_ACTIVATION = 'X' EXCEPTIONS NOT_EXECUTED = 1 INVALID_OBJECT_TYPE = 2 OTHERS = 3. |
RS_WORKBENCH_CUSTOMIZING (FB - Matthias König)
SAP-Script Editor wechseln
* Auswahldynpro aufrufen CALL FUNCTION 'RS_WORKBENCH_CUSTOMIZING' EXPORTING CHOICE = 'SE'. * neuen Editor abspeichern IMPORT RSEUMOD FROM MEMORY ID 'RSEUMOD'. UPDATE RSEUMOD. EXPORT RSEUMOD TO MEMORY ID 'RSEUMOD'. |
SAPGUI_PROGRESS_INDICATOR (FB - Matthias König)
Progress Indicator anzeigen
FUNCTION Z_PROG_INDICATOR. *"---------------------------------------------------------------------- *"*"Lokale Schnittstelle: *" IMPORTING *" VALUE(GESAMT) OPTIONAL *" VALUE(AKTUELL) OPTIONAL *" VALUE(SCHRITT) DEFAULT 10 *" VALUE(TEXT) OPTIONAL *" VALUE(NUR_TEXT) OPTIONAL *"---------------------------------------------------------------------- DATA: PROZENT(2) TYPE N, PROZENT_A LIKE PROZENT, DIV1(2) TYPE N, DIV2(2) TYPE N, PTEXT(100) TYPE C. * nicht im Batch-Betrieb ausführen CHECK SY-BATCH IS INITIAL AND SY-BINPT IS INITIAL. * Sonderbehandlung für reine Textausgabe IF NOT NUR_TEXT IS INITIAL. IF TEXT IS INITIAL. PTEXT = 'Bitte warten ...'. ELSE. PTEXT = TEXT. ENDIF. CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING PERCENTAGE = 0 TEXT = PTEXT. ENDIF. * Initialisierung IF NOT SCHRITT BETWEEN 0 AND 20. SCHRITT = 10. ENDIF. * Formalprüfung CHECK GESAMT > 0 AND AKTUELL > 0 AND AKTUELL < GESAMT. * Prozent berechnen PROZENT = AKTUELL * 100 / GESAMT. * Prozentwert von vorherigem Wert berechnen PROZENT_A = ( AKTUELL - 1 ) * 100 / GESAMT. * prüfen, ob nächster Schritt erreicht ist; bei Schritt = 0 wird * Progress-Indikator bei jedem Schritt aufgerufen IF SCHRITT > 0. DIV1 = PROZENT DIV SCHRITT. DIV2 = PROZENT_A DIV SCHRITT. CHECK DIV1 > DIV2. ENDIF. * Text bestimmen WRITE PROZENT TO PTEXT NO-ZERO. CONDENSE PTEXT. CONCATENATE '(' PTEXT '%)' INTO PTEXT. IF TEXT IS INITIAL. CONCATENATE PTEXT 'ausgeführt'(001) INTO PTEXT SEPARATED BY SPACE. ELSE. CONCATENATE PTEXT TEXT INTO PTEXT SEPARATED BY SPACE. ENDIF. * SAPGUI Progress-Indikator aufrufen CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING PERCENTAGE = PROZENT TEXT = PTEXT. ENDFUNCTION. |
SCROLLING_IN_TABLE (FB - Matthias König)
in Steploop oder Table Control blättern (nach SAP Style Guide)
SD_COND_ACCESS (FB - Matthias König)
SD Konditionssätze lesen
* Ermitteln Konditionsart SELECT * FROM T685 WHERE KOZGF = KOZGF. EXIT. ENDSELECT. * Einlesen Zugriffsfolge SELECT * FROM T682I INTO TABLE X682I WHERE KOZGF = KOZGF. SORT X682I BY KOLNR. * Zugriffsfolge abarbeiten LOOP AT X682I. IF X682I-KOBED NE 0. BEDINGUNG_VORSTEP-NR = X682I-KOBED. PERFORM (BEDINGUNG_VORSTEP) IN PROGRAM SAPLV61A USING TKOMP. ZZHIER = TKOMP-ZZHIER. ENDIF. IF SY-SUBRC EQ 0. CALL FUNCTION 'SD_COND_ACCESS' EXPORTING APPLICATION = 'V' CONDITION_TYPE = T685-KSCHL DATE = SY-DATLO HEADER_COMM_AREA = TKOMK POSITION_COMM_AREA = TKOMP * PRESTEP = ' ' * PROTOCOL_DATE = ' ' * PROTOCOL_ACCESS = ' ' READ_ONLY_ONE_RECORD = 'X' T682I_I = X682I KOPRT_I = KOPRT * SDPROTHEAD_I = IMPORTING CONDITION_IS_PURELY_HEADER = MARK_HEADER TABLES CONDITION_RECORDS = KOND_TAB EXCEPTIONS FIELD_IS_INITIAL = 1 NOT_READ_UNQUALIFIED = 2 READ_BUT_NOT_FOUND = 3 OTHERS = 4. IF SY-SUBRC EQ 0. LOOP AT KOND_TAB. XKNUMH = KOND_TAB-KNUMH. * Zugriff auf Konditionstabellen ausführen SELECT SINGLE * FROM KONP WHERE KNUMH EQ XKNUMH AND KOPOS EQ '01'. IF SY-SUBRC EQ 0. MOVE KONP-KBETR TO YYPST. * ... ENDIF. ENDLOOP. EXIT. ELSE. CLEAR SY-SUBRC. ENDIF. ENDIF. ENDLOOP. |
SO_INBOX_ENTRIES_COUNT (FB - Matthias König)
Anzahl ungelesener Nachrichten im Eingangskorb bestimmen
SO_NEW_DOCUMENT_ATT_SEND_API1 (FB - Matthias König)
E-Mail oder SAP-Mail mit Anhang senden
FUNCTION Z_SEND_MAIL_ATT_PDF. *"---------------------------------------------------------------------- *"*"Lokale Schnittstelle: *" IMPORTING *" VALUE(RQIDENT) LIKE TSP01-RQIDENT *" VALUE(TITEL) LIKE SODOCCHGI1-OBJ_DESCR DEFAULT 'Mail' *" VALUE(OBJECT) LIKE SOLISTI1 STRUCTURE SOLISTI1 *" VALUE(RECEIVER) LIKE SOMLRECI1-RECEIVER *" VALUE(OUTBOX) LIKE SONV-FLAG DEFAULT '' *" VALUE(DELETE_SPOOL) LIKE SY-BATCH DEFAULT 'X' *" VALUE(TEXT1) LIKE SOLISTI1 STRUCTURE SOLISTI1 *" DEFAULT SY-UNAME *" VALUE(TEXT2) LIKE SOLISTI1 STRUCTURE SOLISTI1 *" DEFAULT SY-DATUM *" VALUE(TEXT3) LIKE SOLISTI1 STRUCTURE SOLISTI1 *" DEFAULT SY-UZEIT *" VALUE(TEXT4) LIKE SOLISTI1 STRUCTURE SOLISTI1 *" OPTIONAL *" VALUE(TEXT5) LIKE SOLISTI1 STRUCTURE SOLISTI1 *" OPTIONAL *" VALUE(TEXT6) LIKE SOLISTI1 STRUCTURE SOLISTI1 *" OPTIONAL *" EXCEPTIONS *" FEHLER_LESEN_SPOOL *" FEHLER_KONVERTIERUNG *" FEHLER_SEND_MAIL *" FEHLER_SPOOL_LOESCHEN *"---------------------------------------------------------------------- DATA: I_SOLI LIKE SOLI OCCURS 0 WITH HEADER LINE, I_PLIST LIKE SOPCKLSTI1 OCCURS 0 WITH HEADER LINE, I_OHEAD LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE, I_COBIN LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE, I_COTXT LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE, I_RECI LIKE SOMLRECI1 OCCURS 0 WITH HEADER LINE. DATA: LEN_OUT LIKE SOOD-OBJLEN, DOC_DATA LIKE SODOCCHGI1, RQIDENT_C10(10) TYPE C, ERRMSG(100) TYPE C, ANZ1 LIKE SY-TABIX, ANZ2 LIKE SY-TABIX, RC(10) TYPE C. * Spool-Datei lesen CALL FUNCTION 'RSPO_RETURN_SPOOLJOB' EXPORTING RQIDENT = RQIDENT DESIRED_TYPE = 'OTF' TABLES BUFFER = I_SOLI EXCEPTIONS NO_SUCH_JOB = 1 JOB_CONTAINS_NO_DATA = 2 SELECTION_EMPTY = 3 NO_PERMISSION = 4 CAN_NOT_ACCESS = 5 READ_ERROR = 6 TYPE_NO_MATCH = 7 OTHERS = 8. IF SY-SUBRC <> 0. MESSAGE E902 WITH RQIDENT SY-SUBRC RAISING FEHLER_LESEN_SPOOL. ENDIF. * OTF in PDF umsetzen CALL FUNCTION 'SX_OBJECT_CONVERT_OTF_PDF' EXPORTING FORMAT_SRC = 'OTF' FORMAT_DST = 'TIF' DEVTYPE = '' LEN_IN = '' IMPORTING LEN_OUT = LEN_OUT TABLES CONTENT_IN = I_SOLI CONTENT_OUT = I_COBIN EXCEPTIONS ERR_CONV_FAILED = 1 OTHERS = 2. IF SY-SUBRC <> 0. MESSAGE E903 RAISING FEHLER_KONVERTIERUNG. ENDIF. * Empfänger bestimmen I_RECI-RECEIVER = RECEIVER. I_RECI-REC_TYPE = 'U'. APPEND I_RECI. * Mailtext aufbauen I_COTXT = TEXT1. APPEND I_COTXT. I_COTXT = TEXT2. APPEND I_COTXT. I_COTXT = TEXT3. APPEND I_COTXT. I_COTXT = TEXT4. APPEND I_COTXT. I_COTXT = TEXT5. APPEND I_COTXT. I_COTXT = TEXT6. APPEND I_COTXT. DESCRIBE TABLE I_COTXT LINES ANZ1. CLEAR I_PLIST. I_PLIST-HEAD_START = 1. I_PLIST-HEAD_NUM = 0. I_PLIST-BODY_START = 1. I_PLIST-BODY_NUM = ANZ1. I_PLIST-DOC_TYPE = 'RAW'. APPEND I_PLIST. * Mail-Anhang aufbauen DESCRIBE TABLE I_COBIN LINES ANZ2. CONCATENATE OBJECT '.pdf' INTO I_OHEAD. TRANSLATE I_OHEAD TO LOWER CASE. APPEND I_OHEAD. CLEAR I_PLIST. I_PLIST-TRANSF_BIN = 'X'. I_PLIST-HEAD_START = 1. I_PLIST-HEAD_NUM = 1. I_PLIST-BODY_START = 1. I_PLIST-BODY_NUM = ANZ2. I_PLIST-DOC_TYPE = 'PDF'. I_PLIST-OBJ_NAME = OBJECT. I_PLIST-DOC_SIZE = LEN_OUT. APPEND I_PLIST. * Dokumentdaten bestimmen DOC_DATA-OBJ_NAME = 'URGENT'. DOC_DATA-OBJ_DESCR = TITEL. DOC_DATA-SENSITIVTY = 'P'. DOC_DATA-DOC_SIZE = ( ANZ1 - 1 ) * 255 + STRLEN( I_COTXT ). * Mail mit Anhang (PDF-Datei) senden CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1' EXPORTING DOCUMENT_DATA = DOC_DATA PUT_IN_OUTBOX = OUTBOX TABLES PACKING_LIST = I_PLIST OBJECT_HEADER = I_OHEAD CONTENTS_BIN = I_COBIN CONTENTS_TXT = I_COTXT RECEIVERS = I_RECI EXCEPTIONS TOO_MANY_RECEIVERS = 1 DOCUMENT_NOT_SENT = 2 DOCUMENT_TYPE_NOT_EXIST = 3 OPERATION_NO_AUTHORIZATION = 4 PARAMETER_ERROR = 5 X_ERROR = 6 ENQUEUE_ERROR = 7 OTHERS = 8. IF SY-SUBRC <> 0. MESSAGE E904 WITH SY-SUBRC RAISING FEHLER_SEND_MAIL. ENDIF. * ggf. Spooldatei löschen IF NOT DELETE_SPOOL IS INITIAL. UNPACK RQIDENT TO RQIDENT_C10. CALL 'RSPOARNS' ID 'ID' FIELD RQIDENT_C10 ID 'FORCE' FIELD 'X' ID 'RC' FIELD RC ID 'ERRMSG' FIELD ERRMSG. IF SY-SUBRC <> 0. MESSAGE E901 WITH RQIDENT ERRMSG RAISING FEHLER_SPOOL_LOESCHEN. ENDIF. ENDIF. ENDFUNCTION. |
STUM_WP_TOTAL_ACTIVITY (FB - Matthias König)
Anzahl der freien Batchprozesse bestimmen
SUSR_USER_ADDRESS_READ (FB - Matthias König)
Zugriff auf USR03 nach Umstellung auf zentrale Adressverwaltung
SWE_EVENT_CREATE_CHANGEDOCUMNT (FB - Matthias König)
FB wird beim Schreiben von Änderungsbelegen aufgerufen und löst einen Workflow aus, der durch FB (siehe Tab. SWECDOBJ) unterdrückt werden kann
SX_OBJECT_CONVERT_OTF_PDF (FB - Matthias König)
OTF in PDF umsetzen; OTF wird von einem SAP-Script Formular erzeugt
FUNCTION Z_BA_SEND_MAIL_ATT_PDF. *"---------------------------------------------------------------------- *"*"Lokale Schnittstelle: *" IMPORTING *" VALUE(RQIDENT) LIKE TSP01-RQIDENT *" VALUE(TITEL) LIKE SODOCCHGI1-OBJ_DESCR DEFAULT 'Mail' *" VALUE(OBJECT) LIKE SOLISTI1 STRUCTURE SOLISTI1 *" VALUE(RECEIVER) LIKE SOMLRECI1-RECEIVER *" VALUE(OUTBOX) LIKE SONV-FLAG DEFAULT '' *" VALUE(DELETE_SPOOL) LIKE SY-BATCH DEFAULT 'X' *" VALUE(TEXT1) LIKE SOLISTI1 STRUCTURE SOLISTI1 *" DEFAULT SY-UNAME *" VALUE(TEXT2) LIKE SOLISTI1 STRUCTURE SOLISTI1 *" DEFAULT SY-DATUM *" VALUE(TEXT3) LIKE SOLISTI1 STRUCTURE SOLISTI1 *" DEFAULT SY-UZEIT *" VALUE(TEXT4) LIKE SOLISTI1 STRUCTURE SOLISTI1 *" OPTIONAL *" VALUE(TEXT5) LIKE SOLISTI1 STRUCTURE SOLISTI1 *" OPTIONAL *" VALUE(TEXT6) LIKE SOLISTI1 STRUCTURE SOLISTI1 *" OPTIONAL *" EXCEPTIONS *" FEHLER_LESEN_SPOOL *" FEHLER_KONVERTIERUNG *" FEHLER_SEND_MAIL *" FEHLER_SPOOL_LOESCHEN *"---------------------------------------------------------------------- DATA: I_SOLI LIKE SOLI OCCURS 0 WITH HEADER LINE, I_PLIST LIKE SOPCKLSTI1 OCCURS 0 WITH HEADER LINE, I_OHEAD LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE, I_COBIN LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE, I_COTXT LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE, I_RECI LIKE SOMLRECI1 OCCURS 0 WITH HEADER LINE. DATA: LEN_OUT LIKE SOOD-OBJLEN, DOC_DATA LIKE SODOCCHGI1, RQIDENT_C10(10) TYPE C, ERRMSG(100) TYPE C, ANZ1 LIKE SY-TABIX, ANZ2 LIKE SY-TABIX, RC(10) TYPE C. * Spool-Datei lesen CALL FUNCTION 'RSPO_RETURN_SPOOLJOB' EXPORTING RQIDENT = RQIDENT DESIRED_TYPE = 'OTF' TABLES BUFFER = I_SOLI EXCEPTIONS NO_SUCH_JOB = 1 JOB_CONTAINS_NO_DATA = 2 SELECTION_EMPTY = 3 NO_PERMISSION = 4 CAN_NOT_ACCESS = 5 READ_ERROR = 6 TYPE_NO_MATCH = 7 OTHERS = 8. IF SY-SUBRC <> 0. MESSAGE E902 WITH RQIDENT SY-SUBRC RAISING FEHLER_LESEN_SPOOL. ENDIF. * OTF in PDF umsetzen CALL FUNCTION 'SX_OBJECT_CONVERT_OTF_PDF' EXPORTING FORMAT_SRC = 'OTF' FORMAT_DST = 'TIF' DEVTYPE = '' LEN_IN = '' IMPORTING LEN_OUT = LEN_OUT TABLES CONTENT_IN = I_SOLI CONTENT_OUT = I_COBIN EXCEPTIONS ERR_CONV_FAILED = 1 OTHERS = 2. IF SY-SUBRC <> 0. MESSAGE E903 RAISING FEHLER_KONVERTIERUNG. ENDIF. * Empfänger bestimmen I_RECI-RECEIVER = RECEIVER. I_RECI-REC_TYPE = 'U'. APPEND I_RECI. * Mailtext aufbauen I_COTXT = TEXT1. APPEND I_COTXT. I_COTXT = TEXT2. APPEND I_COTXT. I_COTXT = TEXT3. APPEND I_COTXT. I_COTXT = TEXT4. APPEND I_COTXT. I_COTXT = TEXT5. APPEND I_COTXT. I_COTXT = TEXT6. APPEND I_COTXT. DESCRIBE TABLE I_COTXT LINES ANZ1. CLEAR I_PLIST. I_PLIST-HEAD_START = 1. I_PLIST-HEAD_NUM = 0. I_PLIST-BODY_START = 1. I_PLIST-BODY_NUM = ANZ1. I_PLIST-DOC_TYPE = 'RAW'. APPEND I_PLIST. * Mail-Anhang aufbauen DESCRIBE TABLE I_COBIN LINES ANZ2. CONCATENATE OBJECT '.pdf' INTO I_OHEAD. TRANSLATE I_OHEAD TO LOWER CASE. APPEND I_OHEAD. CLEAR I_PLIST. I_PLIST-TRANSF_BIN = 'X'. I_PLIST-HEAD_START = 1. I_PLIST-HEAD_NUM = 1. I_PLIST-BODY_START = 1. I_PLIST-BODY_NUM = ANZ2. I_PLIST-DOC_TYPE = 'PDF'. I_PLIST-OBJ_NAME = OBJECT. I_PLIST-DOC_SIZE = LEN_OUT. APPEND I_PLIST. * Dokumentdaten bestimmen DOC_DATA-OBJ_NAME = 'URGENT'. DOC_DATA-OBJ_DESCR = TITEL. DOC_DATA-SENSITIVTY = 'P'. DOC_DATA-DOC_SIZE = ( ANZ1 - 1 ) * 255 + STRLEN( I_COTXT ). * Mail mit Anhang (PDF-Datei) senden CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1' EXPORTING DOCUMENT_DATA = DOC_DATA PUT_IN_OUTBOX = OUTBOX TABLES PACKING_LIST = I_PLIST OBJECT_HEADER = I_OHEAD CONTENTS_BIN = I_COBIN CONTENTS_TXT = I_COTXT RECEIVERS = I_RECI EXCEPTIONS TOO_MANY_RECEIVERS = 1 DOCUMENT_NOT_SENT = 2 DOCUMENT_TYPE_NOT_EXIST = 3 OPERATION_NO_AUTHORIZATION = 4 PARAMETER_ERROR = 5 X_ERROR = 6 ENQUEUE_ERROR = 7 OTHERS = 8. IF SY-SUBRC <> 0. MESSAGE E904 WITH SY-SUBRC RAISING FEHLER_SEND_MAIL. ENDIF. * ggf. Spooldatei löschen IF NOT DELETE_SPOOL IS INITIAL. UNPACK RQIDENT TO RQIDENT_C10. CALL 'RSPOARNS' ID 'ID' FIELD RQIDENT_C10 ID 'FORCE' FIELD 'X' ID 'RC' FIELD RC ID 'ERRMSG' FIELD ERRMSG. IF SY-SUBRC <> 0. MESSAGE E901 WITH RQIDENT ERRMSG RAISING FEHLER_SPOOL_LOESCHEN. ENDIF. ENDIF. ENDFUNCTION. |
SX_OBJECT_RECEIVE (FB - Matthias König)
Email direkt über SAP Connect versenden. Der Aufruf umgeht komplett das SAP R/3 Büro. Damit ist aber möglich, den Absender frei zu übergeben.
FORM EMAIL_AUFBEREITEN. DATA: PRINT_ACTION TYPE JYNA_PRINT_ACTION. DATA: I_OTFD LIKE ITCOO OCCURS 0 WITH HEADER LINE, i_line LIKE tline OCCURS 0 WITH HEADER LINE, i_cont LIKE solisti1 OCCURS 0 WITH HEADER LINE, i_reci LIKE somlreci1 OCCURS 0 WITH HEADER LINE, wa_data LIKE sodocchgi1, descr LIKE sodocchgi1-obj_descr, doc_size LIKE sodocchgi1-doc_size, ind LIKE sy-tabix, RC LIKE SY-BATCH. * Formular für Email verwenden TNAPR-FONAM = 'ZFAZ_IBR_EMAIL'. * OTF-Ausgabe unterdrücken IMPORT print_action FROM MEMORY ID jyna_c_memory_print_action. PRINT_ACTION-XOTFMEM = 'X'. EXPORT print_action TO MEMORY ID jyna_c_memory_print_action. * Formular öffnen PERFORM FORM_OPEN USING XSCREEN 'DE' 'D'. PERFORM ERROR_AT_FORMULAR USING RETCODE CON_FORM_OPEN ''. CHECK RETCODE = 0. * Ausgabe in Formular PERFORM FORM_PRINT. IF RETCODE <> 0. PERFORM FORM_CLOSE. PERFORM ERROR_AT_FORMULAR USING RETCODE CON_FORM_WRITE ''. ENDIF. CHECK RETCODE = 0. * Formular schließen PERFORM FORM_CLOSE_OTF TABLES I_OTFD CHANGING ITCPP. PERFORM ERROR_AT_FORMULAR_NA USING RETCODE CON_FORM_CLOSE ''. CHECK RETCODE = 0. * OTF-Ausgabe wieder aktivieren PRINT_ACTION-XOTFMEM = ''. EXPORT print_action TO MEMORY ID jyna_c_memory_print_action. * OTF in Text konvertieren CALL FUNCTION 'CONVERT_OTF' TABLES OTF = I_OTFD LINES = I_LINE EXCEPTIONS OTHERS = 1. IF SY-SUBRC <> 0. RETCODE = 4. ENDIF. * Betreff und Trennzeile ausfiltern READ TABLE i_line INDEX 1. IF i_line-tdline CP '*Betreff*'. ind = sy-fdpos + 8. descr = i_line-tdline+ind. CONDENSE descr. DELETE i_line INDEX 1. ENDIF. READ TABLE i_line INDEX 1. IF i_line-tdline CO ' -'. DELETE i_line INDEX 1. ENDIF. * Inhalt zeilenweise aufbereiten IND = 1. READ TABLE I_LINE INDEX IND. RC = SY-SUBRC. WHILE RC = 0. I_CONT-LINE = I_LINE-TDLINE. ADD 1 TO IND. READ TABLE I_LINE INDEX IND. RC = SY-SUBRC. WHILE RC = 0 AND I_LINE-TDFORMAT = '='. CONCATENATE I_CONT-LINE I_LINE-TDLINE INTO I_CONT-LINE. ADD 1 TO IND. READ TABLE I_LINE INDEX IND. RC = SY-SUBRC. ENDWHILE. APPEND I_CONT. ENDWHILE. DESCRIBE TABLE I_CONT LINES IND. DOC_SIZE = 255 * ( IND - 1 ) + STRLEN( I_CONT ). * Email anzeigen / senden IF xscreen = 'X'. * .. in Listdarstellung wechseln LEAVE TO LIST-PROCESSING. NEW-PAGE LINE-SIZE 80. SET PF-STATUS 'STLI' OF PROGRAM 'SAPMSSY0'. * .. Betreff anzeigen FORMAT INTENSIFIED OFF. WRITE:/ 'Betreff:', DESCR. WRITE:/ TEXT-002. FORMAT INTENSIFIED ON. * .. Inhalt zeilenweise ausgeben SET BLANK LINES ON. LOOP AT I_CONT. WRITE:/ I_CONT-LINE. ENDLOOP. SET BLANK LINES OFF. ELSE. * .. Empfänger bestimmen I_RECI-RECEIVER+00(30) = NAST-PFLD1. I_RECI-RECEIVER+30(20) = NAST-PFLD2. I_RECI-REC_TYPE = 'U'. APPEND I_RECI. * .. Dokumentdaten bestimmen WA_DATA-OBJ_NAME = 'KUNDENBRIEF'. WA_DATA-OBJ_DESCR = DESCR. WA_DATA-SENSITIVTY = 'O'. WA_DATA-PRIORITY = '5'. WA_DATA-DOC_SIZE = DOC_SIZE. * .. Email versenden IF SY-SYSID <> 'F30'. CALL FUNCTION 'SO_NEW_DOCUMENT_SEND_API1' EXPORTING DOCUMENT_DATA = WA_DATA DOCUMENT_TYPE = 'RAW' PUT_IN_OUTBOX = 'X' TABLES OBJECT_CONTENT = I_CONT RECEIVERS = I_RECI EXCEPTIONS TOO_MANY_RECEIVERS = 1 DOCUMENT_NOT_SENT = 2 DOCUMENT_TYPE_NOT_EXIST = 3 OPERATION_NO_AUTHORIZATION = 4 PARAMETER_ERROR = 5 X_ERROR = 6 ENQUEUE_ERROR = 7 OTHERS = 8. IF SY-SUBRC <> 0. RETCODE = 4. ENDIF. EXIT. ENDIF. * .. Um den Absender des Emails übergeben zu können, wird der FB zum * SAPConnect direkt aufgerufen. Der Aufruf umgeht komplett das * SAP R/3 Büro.) DATA: I_RECE LIKE SXEXTRECI1 OCCURS 0 WITH HEADER LINE, I_PACK LIKE SXPCKLSTI1 OCCURS 0 WITH HEADER LINE, I_HEAD LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE, I_CBIN LIKE SXLISTI1 OCCURS 0 WITH HEADER LINE, I_PARA LIKE SOPARAI1 OCCURS 0 WITH HEADER LINE, I_PARB LIKE SOPARBI1 OCCURS 0 WITH HEADER LINE, WA_INFO LIKE SXRECINFI1, WA_DOCU LIKE SXDOCCHGI1, WA_SYST LIKE SXSYSDATI1. GET TIME. DESCRIBE TABLE I_CONT LINES IND. WA_INFO-COMM_ID = 'ADR28000000000001F30'. "Dummy WA_INFO-SENDER = NAST-PFLD3. WA_INFO-SENDER+30 = NAST-PFLD4. WA_INFO-ADR_TYPE = 'INT'. WA_INFO-SEND_DATE = SY-DATUM. WA_INFO-SEND_TIME = SY-UZEIT. WA_INFO-CREAT_DATE = SY-DATUM. WA_INFO-SND_VINAME = 'Frankfurter Allgemeine Zeitung'. WA_INFO-CREAT_TIME = SY-UZEIT. WA_DOCU-OBJ_NAME = WA_DATA-OBJ_NAME. WA_DOCU-OBJ_DESCR = WA_DATA-OBJ_DESCR. WA_DOCU-OBJ_LANGU = SY-LANGU. WA_DOCU-SENSITIVTY = 'O'. WA_DOCU-PRIORITY = WA_DATA-PRIORITY. WA_DOCU-DOC_SIZE = WA_DATA-DOC_SIZE. WA_DOCU-STA_DATE = SY-DATUM. WA_DOCU-END_DATE = '21001231'. WA_SYST-VERSION = '0101'. I_RECE-RECEIVER = NAST-PFLD1. I_RECE-RECEIVER+30 = NAST-PFLD2. I_RECE-ADR_TYP = 'INT'. I_RECE-LFDNR = '001'. I_RECE-MIME = 'X'. APPEND I_RECE. I_PACK-HEAD_START = 1. I_PACK-HEAD_NUM = 0. I_PACK-BODY_START = 1. I_PACK-BODY_NUM = IND. I_PACK-DOC_TYPE = 'RAW'. I_PACK-OBJ_NAME = WA_DOCU-OBJ_NAME. I_PACK-OBJ_DESCR = WA_DOCU-OBJ_DESCR. I_PACK-OBJ_LANGU = SY-LANGU. I_PACK-DOC_SIZE = WA_DOCU-DOC_SIZE. I_PACK-ISO_LANGU = 'DE'. APPEND I_PACK. CALL FUNCTION 'SX_OBJECT_RECEIVE' DESTINATION 'SXC_OUT' EXPORTING RECEIVE_INFO = WA_INFO DOCUMENT_DATA = WA_DOCU SYSTEM_DATA = WA_SYST TABLES RECEIVERS = I_RECE PACKING_LIST = I_PACK OBJECT_HEADER = I_HEAD CONTENTS_BIN = I_CBIN CONTENTS_TXT = I_CONT OBJECT_PARA = I_PARA OBJECT_PARB = I_PARB EXCEPTIONS OTHERS = 1. IF SY-SUBRC <> 0. RETCODE = 4. ENDIF. ENDIF. ENDFORM. " EMAIL_AUFBEREITEN |
TABLE_PRINT_STRUCTURE_UNKNOWN (FB - Matthias König)
Interne Tabellen drucken mit nicht bekannter Struktur - auch für TableControl
TELNUMBER_FORMAT (FB - Matthias König)
Prüfen einer Telefonnummer auf Struktur und Umwandeln in kanonisches Format
(FuGr PHOC).
TEXT_SPLIT (FB - Matthias König)
Text in mehrere Zeilen umbrechen
TH_POPUP (FB - Matthias König)
Meldung an einen bestimmten User senden
Datei als interne Tabelle von dem Präentationsserver laden
VIEW_MAINTENANCE_CALL (FB - Matthias König)
Aufruf der erweiterten Tabellenpflege (SM30) ber FB.
Hinweis: Wird der FB innerhalb der erweiterten Tabellenpflege einer anderen Tabelle verwendet, muss der FB in einem Report gekapselt werden.
CALL FUNCTION 'VIEW_MAINTENANCE_CALL' EXPORTING ACTION = 'U' " Ändern VIEW_NAME = 'ZV...' EXCEPTIONS CLIENT_REFERENCE = 1 FOREIGN_LOCK = 2 INVALID_ACTION = 3 NO_CLIENTINDEPENDENT_AUTH = 4 NO_DATABASE_FUNCTION = 5 NO_EDITOR_FUNCTION = 6 NO_SHOW_AUTH = 7 NO_TVDIR_ENTRY = 8 NO_UPD_AUTH = 9 ONLY_SHOW_ALLOWED = 10 SYSTEM_FAILURE = 11 UNKNOWN_FIELD_IN_DBA_SELLIST = 12 VIEW_NOT_FOUND = 13 OTHERS = 14. |
VRM_SET_VALUES (FB - Matthias König)
Um für eine Listbox im PBO die möglichen Werte zu setzen, kann der FB VRM_SET_VALUES verwendet werden.
TYPE-POOLS: vrm. DATA: i_values TYPE vrm_values WITH HEADER LINE. MODULE d1300_init OUTPUT. * nur erster Durchlauf IF x_1300 = ''. x_1300 = 'X'. * .. prüfen, ob Gruppierung aktiv ist READ TABLE i_attr6 WITH KEY bukrs = zsgphdr-bukrs BINARY SEARCH. IF sy-subrc = 0 AND i_attr6-aktiv = 'X'. zsgpattr-gruppbez = i_attr6-ktext. ENDIF. * .. Gruppierungsbegriffe bestimmen IF zsgpattr-gruppbez <> ''. CLEAR i_values[]. LOOP AT i_attr7. i_values-key = i_attr7-grupp. i_values-text = i_attr7-ktext. APPEND i_values. ENDLOOP. CALL FUNCTION 'VRM_SET_VALUES' EXPORTING id = 'ZSGPATTR-GRUPP' values = i_values[] EXCEPTIONS id_illegal_name = 1 OTHERS = 2. ENDIF. ENDIF. ENDMODULE. " d1300_init OUTPUT |
WS_DOWNLOAD (FB - Matthias König)
Datei auf dem Präentationsserver ablegen
WS_EXECUTE (FB - Matthias König)
Programm auf dem Präentationsserver ausführen
Kunde löschen (Modul SD - Matthias König)
Reports SAPF019 und SAPV019 ausführen (löscht keine Z-Tabellen)
Material löschen (Modul SD - Matthias König)
FB REORGANISATION_MATERIAL
SAP IDES Access (Modul SD - Patrick Garde)
Ivobe provides access of SAP IDES on remote servers via the cloud. Get 100% white-hat access to SAP servers online for study & training for a low-cost subscription per month. It also offers free trial and a dedicated client server.
ABAP Object unter 4.0 (Object - Matthias König)
Beispiel für ABAP Object (siehe Datei)
REPORT ZKOTST04 NO STANDARD PAGE HEADING. TABLES: KNA1. * Definition der Klasse kunde CLASS KUNDE DEFINITION. PUBLIC SECTION. DATA: NAME1 LIKE KNA1-NAME1, SORTL LIKE KNA1-SORTL. METHODS: SET_DATA IMPORTING VALUE(I_KUNNR) LIKE KNA1-KUNNR, WRITE. PRIVATE SECTION. DATA: KUNNR LIKE KNA1-KUNNR. ENDCLASS. * Implementierung der Klasse kunde CLASS KUNDE IMPLEMENTATION. METHOD SET_DATA. KUNNR = I_KUNNR. SELECT SINGLE NAME1 SORTL INTO (NAME1, SORTL) FROM KNA1 WHERE KUNNR = KUNNR. ENDMETHOD. METHOD WRITE. WRITE:/ KUNNR, NAME1, SORTL. ENDMETHOD. ENDCLASS. START-OF-SELECTION. DATA: KUNDE TYPE REF TO KUNDE. * Instanz zum Object kunde erzeugen CREATE OBJECT: KUNDE1. * Methode set_data aufrufen CALL METHOD KUNDE1->SET_DATA('0000200002'). * Attribut versorgen KUNDE1->SORTL = 'Test'. * Methode write aufrufen CALL METHOD KUNDE1->WRITE. |
ABAP Aufrufhierarchie (Callstack) (Prog - Matthias König)
Mit Hilfe der Funktion CALL 'ABAP_CALLSTACK' kann die Aufrufhierarchie analog im ABAP Debugger im Programm abgefragt werden.
TYPES: BEGIN OF abap_call_stack_entry, mainprogram TYPE syrepid, include TYPE syrepid, line TYPE i, eventtype TYPE dbglevtype, event TYPE dbglevent, flag_system TYPE char1, END OF abap_call_stack_entry. DATA: tab TYPE TABLE OF abap_call_stack_entry. CALL 'ABAP_CALLSTACK' ID 'DEPTH' FIELD 10 ID 'CALLSTACK' FIELD tab. |
Abfrage ob Testsystem oder Produktivystem (Prog - Matthias König)
Abfrage ob Testsystem oder Produktivystem erfolgt über Tabelle T000.
SELECT SINGLE * FROM T000 WHERE MANDT = SY-MANDT. IF T000-CCCATEGORY = 'T'. * .. Testsystem ELSE. * .. kein Testsystem ENDIF. |
Anzahl Felder (Prog - Matthias König)
Anzahl Felder einer Tabelle oder Struktur bestimmen: DESCRIBE FIELD s_kna1 TYPE typ COMPONENTS anz.
Archivierung (Prog - Matthias König)
notwendige Einstellungen:
Menü: Werkzeuge->Administration->Verwaltung->Vorgangstechnik->ArchiveLink
Dokumentart: OAC2 (ZISM_IBR;IS-M/SD:individuelle Briefschreibung;PDF)
Objektart: OAC3 (DRAW;ZURB_T1;X;T1;TOA01;0)
Archivieren von Nachrichten:
FB GET_PRINT_PARAMETERS
Archivierte Nachricht anzeigen:
FB ARCHIVOBJECT_DISPLAY
PC Installation von ALVIEWER.EXE und Acrobat Reader wird vorausgesetzt
... * ggf. Archivierungsparameter bestimmen IF NAST-TDARMOD CA '23'. PERFORM ARCHIV_PARAM_BESTIMMEN USING ARC_PARAMS TOA_DARA RETCODE. PERFORM ERROR_AT_FORMULAR USING RETCODE CON_FORM_OPEN ''. CHECK RETCODE = 0. ENDIF. * Formular öffnen PERFORM FORM_OPEN USING XSCREEN 'DE' 'D'. ... ======================================================================== FORM ARCHIV_PARAM_BESTIMMEN USING WA_ARCHIV LIKE ARC_PARAMS WA_DARA LIKE TOA_DARA RC LIKE SY-SUBRC. DATA: WA_PRINT LIKE PRI_PARAMS, OBJID LIKE TOA_DARA-OBJECT_ID, REPID LIKE SY-REPID. * Initialisierung CLEAR: RC, WA_ARCHIV, WA_DARA. REPID = SY-REPID. * Objekt-Id bestimmen OBJID+00(16) = NAST-OBJKY. OBJID+16(04) = NAST-KSCHL. OBJID+20(10) = NAST-TDNAME+9(10). OBJID+30(08) = NAST-ERDAT. OBJID+38(06) = NAST-ERUHR. * Archiv-Parameter bestimmen CALL FUNCTION 'GET_PRINT_PARAMETERS' EXPORTING ARCHIVE_INFO = 'IBR' ARCHIVE_MODE = '2' "nur Archivieren ARCHIVE_TEXT = TEXT-001 AR_OBJECT = 'ZISM_IBR' "Dokumentart ARCHIVE_REPORT = REPID COPIES = 1 IMMEDIATELY = 'X' LAYOUT = TNAPR-FONAM "Formular NO_DIALOG = 'X' REPORT = REPID SAP_OBJECT = 'DRAW' "Objekttyp IMPORTING OUT_ARCHIVE_PARAMETERS = WA_ARCHIV OUT_PARAMETERS = WA_PRINT EXCEPTIONS ARCHIVE_INFO_NOT_FOUND = 1 INVALID_PRINT_PARAMS = 2 INVALID_ARCHIVE_PARAMS = 3 OTHERS = 4. IF SY-SUBRC <> 0. RC = SY-SUBRC. EXIT. ENDIF. * DARA-Parameter bestimmen WA_DARA-FUNCTION = 'DARA'. WA_DARA-MANDANT = SY-MANDT. WA_DARA-SAP_OBJECT = 'DRAW'. "Objekttyp WA_DARA-AR_OBJECT = 'ZISM_IBR'. "Dokumentart WA_DARA-OBJECT_ID = OBJID. "Objekt-Id WA_DARA-RESERVE = 'COMMIT'. ENDFORM. " ARCHIV_PARAM_BESTIMMEN ======================================================================== FORM ARCHIV_ANZEIGEN USING ARCID LIKE TOAAR-ARCHIV_ID DOCID LIKE SAPB-SAPADOKID. * archivierten Brief anzeigen CALL FUNCTION 'ARCHIVOBJECT_DISPLAY' EXPORTING ARCHIV_DOC_ID = DOCID ARCHIV_ID = ARCID EXCEPTIONS ERROR_ARCHIV = 1 ERROR_COMMUNICATIONTABLE = 2 ERROR_KERNEL = 3 OTHERS = 4. IF SY-SUBRC <> 0. MESSAGE ID SY-MSGID TYPE 'I' NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. ENDFORM. " ARCHIV_ANZEIGEN |
ASSIGN (Prog - Matthias König)
Pointer auf Feld; wobei der Feldname erst zur Laufzeit ermittelt wird
FIELD-SYMBOLS: DATA: KNAME(61) TYPE C. KNAME = 'KNA1-NAME1'. ASSIGN (KNAME) TO WRITE:/ KNA1-NAME1. " Ausgabe: Meier |
Batch-Input (Prog - Matthias König)
Commit Work beendet eine Transaction, die mit Batch-Input aufgerufen wurde
Berechtigung (Prog - Matthias König)
- Berechtigungsfelder werden mit der Transaktion SU20 definiert - Berechtigungsobjekte werden mit der Transaktion SU21 definiert - Berechtigungen werden mit der Transaktion SU03 definiert - Profile werden mit der Transaktion SU02 definiert o Einzelprofil: Es werden die Berechtigungen angegeben o Sammelprofil: Es werden Profile angegeben
Code-Generator für ALV-Grid (Prog - Christian Maas)
Wenn man ohne große Vorkenntnisse ein Programm mit einer Listausgabe mit einem ALV-Grid "aufmotzen" möchte, ist dieser Link ganz hilfreich:
http://www.alv-grid-display.de/alv_grid_de.html
Cursorposition auf Verzweigungsliste halten (Prog - Matthias König)
Mit dem folgenden Befehl kann nach einem erneuten Ausgeben einer Verzweigungsliste (CLEAR: sy-lsind. NEW-PAGE WITH-HEADING.) der Cursor wieder an die gleiche Stelle der vorherigen Liste positioniert werden:
SCROLL LIST INDEX 1 TO PAGE sy-cpage LINE sy-staro.
OPEN DATASET, READ DATASET, TRANSFER
Dokumentation Datenelement (Prog - Matthias König)
- Dynproabhängige Dokumentation zu einem Feld möglich - Transaktion SE61 (Dokumentenklasse ' Datenelementzusatz'; Erweiterung Benutzer) - In Tabelle THLPF (Transaktion SM30) einen Eintrag für die Verwendung eines Feldes mit Datenelementzusatz definieren, z.B. SAPLZV01 9000 USR03-BUINR ' ' 0001
DOS Befehl absetzen (versteckt) (Prog - Matthias König)
Mit folgendem Code ist es möglich, einen DOS-Befehl "versteckt" abzusetzen (siehe FB GUI_EXEC).
DATA: o_com TYPE ole2_object, comm TYPE string, return TYPE i. CREATE OBJECT o_com 'SAPINFO' NO FLUSH. comm = 'CMD.EXE /C XCOPY ...'. CALL METHOD OF o_com 'EXEC' = return EXPORTING #1 = comm #2 = 0. IF sy-subrc <> 0 OR return < 33. WRITE:/ 'Fehler'. ENDIF. |
Email über UNIX (Befehl MAIL) senden (Prog - Matthias König)
siehe Quellcode
FUNCTION Z_JB_UX_SENDMAIL. *"---------------------------------------------------------------------- *"*"Lokale Schnittstelle: *" IMPORTING *" VALUE(TO) LIKE SOMLRECI1-RECEIVER *" VALUE(FROM) LIKE SXRECINFI1-SENDER OPTIONAL *" VALUE(SENDER) LIKE SXRECINFI1-SND_VINAME OPTIONAL *" VALUE(SUBJECT) LIKE SODOCCHGI1-OBJ_DESCR OPTIONAL *" VALUE(XHTML) LIKE SY-BATCH DEFAULT 'X' *" TABLES *" I_CONT STRUCTURE SOLISTI1 *" EXCEPTIONS *" ERROR *"---------------------------------------------------------------------- DATA: BEGIN OF ERGTAB OCCURS 0, LINE(250) TYPE C, END OF ERGTAB. DATA: I_HEAD1 LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE, I_HEAD2 LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE, I_HEAD3 LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE, PROT_PATH LIKE RLGRAP-FILENAME, DATNAM LIKE RLGRAP-FILENAME, RCODE LIKE INRI-RETURNCODE, IND LIKE SY-TABIX, LEN LIKE SY-TABIX, ZEICH LIKE SY-BATCH, MAILN(10) TYPE N, LINE(2000) TYPE C, COM(250) TYPE C. * ggf. Email-Adresse des angemeldeten User bestimmen IF FROM IS INITIAL. SELECT SINGLE * FROM USR21 WHERE BNAME = SY-UNAME. SELECT DATE_FROM SMTP_ADDR INTO (ADR6-DATE_FROM, FROM) FROM ADR6 WHERE ADDRNUMBER = USR21-ADDRNUMBER AND PERSNUMBER = USR21-PERSNUMBER AND DATE_FROM <= SY-DATUM ORDER BY DATE_FROM. IF FROM CA '@'. EXIT. ENDIF. ENDSELECT. IF SY-SUBRC <> 0 OR FROM NA '@'. MESSAGE E999(ZJ) WITH 'Kein Empfänger angegeben.' RAISING ERROR. ENDIF. ENDIF. * Email-Header aufbauen I_HEAD1 = 'Return-path: $'. DISPLACE I_HEAD1 '$' FROM. APPEND I_HEAD1. IF NOT SENDER IS INITIAL. I_HEAD1 = 'From: "$" <$>'. DISPLACE I_HEAD1 '$' SENDER. DISPLACE I_HEAD1 '$' FROM. ELSE. I_HEAD1 = 'From: <$>'. DISPLACE I_HEAD1 '$' FROM. ENDIF. APPEND I_HEAD1. I_HEAD1 = 'To: $'. DISPLACE I_HEAD1 '$' TO. APPEND I_HEAD1. I_HEAD1 = 'Subject: $'. DISPLACE I_HEAD1 '$' SUBJECT. APPEND I_HEAD1. I_HEAD1 = 'MIME-Version: 1.0'. APPEND I_HEAD1. IF XHTML = ''. I_HEAD1 = 'Content-Type: text/plain;'. APPEND I_HEAD1. I_HEAD1 = ' charset="iso-8859-1"'. APPEND I_HEAD1. I_HEAD1 = 'Content-Transfer-Encoding: quoted-printable'. APPEND I_HEAD1. I_HEAD1 = ''. APPEND I_HEAD1. ELSE. I_HEAD1 = 'Content-Type: multipart/alternative;'. APPEND I_HEAD1. I_HEAD1 = ' boundary="----_=_NextPart_001_01C31ECC.DFEA6CF0"'. APPEND I_HEAD1. I_HEAD1 = ''. APPEND I_HEAD1. I_HEAD1 = '------_=_NextPart_001_01C31ECC.DFEA6CF0'. APPEND I_HEAD1. I_HEAD1 = 'Content-Type: text/plain;'. APPEND I_HEAD1. I_HEAD1 = ' charset="iso-8859-1"'. APPEND I_HEAD1. I_HEAD1 = 'Content-Transfer-Encoding: quoted-printable'. APPEND I_HEAD1. I_HEAD1 = ''. APPEND I_HEAD1. I_HEAD2 = '------_=_NextPart_001_01C31ECC.DFEA6CF0'. APPEND I_HEAD2. I_HEAD2 = 'Content-Type: text/html;'. APPEND I_HEAD2. I_HEAD2 = ' charset="iso-8859-1"'. APPEND I_HEAD2. I_HEAD2 = 'Content-Transfer-Encoding: quoted-printable'. APPEND I_HEAD2. I_HEAD2 = ''. APPEND I_HEAD2. I_HEAD2 = ''. APPEND I_HEAD2. I_HEAD2 = ''. APPEND I_HEAD2. I_HEAD2 = ' '. APPEND I_HEAD3. I_HEAD3 = '------_=_NextPart_001_01C31ECC.DFEA6CF0--'. APPEND I_HEAD3. ENDIF. * nächste Mail-Nummer bestimmen CALL FUNCTION 'NUMBER_GET_NEXT' EXPORTING nr_range_nr = '01' OBJECT = 'ZJBSNDMAIL' IMPORTING NUMBER = MAILN returncode = rcode EXCEPTIONS interval_not_found = 1 number_range_not_intern = 2 object_not_found = 3 quantity_is_0 = 4 quantity_is_not_1 = 5 interval_overflow = 6 buffer_overflow = 7 OTHERS = 8. IF rcode <> 0 OR sy-subrc <> 0. MESSAGE E999(ZJ) WITH 'Fehler beim Bestimmen der Mail-Nummer.' RAISING ERROR. ENDIF. * Dateinamen für Mail bestimmen call function 'FILE_GET_NAME' exporting logical_filename = 'Z_IS_ZVA' parameter_1 = '/prot/' importing file_name = prot_path exceptions file_not_found = 1 others = 2. CONCATENATE PROT_PATH 'mail_' MAILN '.dat' INTO DATNAM. * Mail-Datei schreiben OPEN DATASET DATNAM FOR OUTPUT IN TEXT MODE. IF SY-SUBRC <> 0. MESSAGE E999(ZJ) WITH 'Maildatei konnte nicht geschrieben werden.' RAISING ERROR. ENDIF. IF XHTML = ''. * .. nur Plaintext LOOP AT I_HEAD1. TRANSFER I_HEAD1 TO DATNAM. ENDLOOP. LOOP AT I_CONT. TRANSFER I_CONT TO DATNAM. ENDLOOP. ELSE. * .. Multipart (Plaintext und HTML) LOOP AT I_HEAD1. TRANSFER I_HEAD1 TO DATNAM. ENDLOOP. LOOP AT I_CONT. TRANSFER I_CONT TO DATNAM. ENDLOOP. LOOP AT I_HEAD2. TRANSFER I_HEAD2 TO DATNAM. ENDLOOP. LOOP AT I_CONT. CLEAR LINE. LEN = STRLEN( I_CONT ). DO LEN TIMES. IND = SY-INDEX - 1. ZEICH = I_CONT+IND(1). IF ZEICH <> ''. CONCATENATE LINE ZEICH INTO LINE. ELSE. CONCATENATE LINE ' ' INTO LINE. ENDIF. ENDDO. CONCATENATE LINE ' ' INTO LINE. TRANSFER LINE TO DATNAM. ENDLOOP. LOOP AT I_HEAD3. TRANSFER I_HEAD3 TO DATNAM. ENDLOOP. ENDIF. CLOSE DATASET datnam. * Mail versenden COM = 'mail $ < $ 2>&1'. DISPLACE COM '$' TO. DISPLACE COM '$' DATNAM. CALL 'SYSTEM' ID 'COMMAND' FIELD com ID 'TAB' FIELD ergtab[]. IF NOT ERGTAB[] IS INITIAL. MESSAGE E999(ZJ) WITH 'Es ist ein Fehler beim Versenden des Mails' 'aufgetreten.' RAISING ERROR. ENDIF. ENDFUNCTION. |
Ereignisse (Prog - Matthias König)
Ereignisse im Report: INITIALIZATION: Zeitpunkt vor dem Erscheinen des Selektionsbildes AT SELECTION-SCREEN: Zeitpunkt nach Verarbeitung der auf dem Selektionsbild vorgenommenen Benutzereingabe ... OUTPUT: Zeitpunkt vor der Ausgabe des Selektionsbildes. Hier können z.B. die Eigenschaften der Felder mit LOOP AT SCREEN noch geändert werden. START-OF-SELECTION: Zeitpunkt nach Verarbeitung des Selektionsbildes TOP-OF-PAGE: Zeitpunkt während der Listenverarbeitung, wenn eine neue Seite begonnen wird END-OF-PAGE: Zeitpunkt während der Listenverarbeitung, wenn eine Seite beendet wird AT LINE-SELECTION: Zeitpunkt, zu dem der Benutzer eine Zeile auswählt AT USER-COMMAND: Zeitpunkt, zu dem der Benutzer eine Funktionstaste drückt
Erweiterung Logistik-Informations-System (Prog - Matthias König)
Die Daten werden im Include RMCS00AL Form DATEN_BESCHAFFEN bestimmt und stehen anschließend in der internen Tabelle INT_S000
Erweiterungskonzept (Prog - Matthias König)
- User-Exits suchen
- Projekt zu einer SAP-Erweiterung anlegen
- Field-Exit
- OPEN FI
User-Exits suchen - Workbench => Übersicht => Anwendungshierarchie => SAP => Teilbaum oder ganzen Baum markieren => Infosystem => Umfeld => Doppelklick auf 'Kunden-Exit' => F8 (ggf. vorher 500 aus Max. Trefferzahl löschen) => Gesamtsicht => mit %SC nach User-Exit suchen (z.B. EXIT_SAPMF02D_001) - Workbench => Hilfsmittel => Erweiterungen => Projektverwaltung => Hilfsmittel => SAP-Erweiterungen => F8 Projekt zu einer SAP-Erweiterung anlegen - Workbench => Hilfsmittel => Erweiterungen => Projektverwaltung - Projektnamen vergeben z.B. Z0000001 - Attribute pflegen; SAP-Erweiterung angeben (s.o.); Erweiterungskomponenten ändern => Kompon. bearbeiten => Include anlegen - Projekt aktivieren Field-Exit - FB an Datenelement hängen - Profileparameter abap/fieldexit = YES global setzen - Möglich: immer ausführen / bestimmte Dynpros - ist nicht debuggbar OPEN FI - abhängig von Ereignis kann Funktion ausgeführt werden |
Exec SQL (Prog - Matthias König)
Exec SQL
DATA: ANZV LIKE SY-TABIX. EXEC SQL. SELECT COUNT(*) INTO :ANZV FROM VBFS ENDEXEC. EXEC SQL PERFORMING FORM1. SELECT FELD1 FELD2 INTO :FELD1 :FELD2 FROM TAB WHERE MANDT = :SY_MANDT AND ... ENDEXEC. FORM FORM1. WRITE:/ FELD1, FELD2. ENDFORM. |
F4_PROG_SUBPROGRAM (Prog - Matthias König)
alle Unterprogramme zu einem Programm bestimmen
Fabrikkalenderfunktionen (Prog - Matthias König)
siehe Entwicklungsklasse SZC (FuGr. SCAL und SCA5)
Farben in Listen (Prog - Matthias König)
Farben in Listen (siehe Datei)
Feldname deklarieren (Prog - Matthias König)
Feldname (Tabellenname + Bindestrich + Feldname) deklarieren:
DATA:
kname LIKE t130f-fname.
File Filter Datei-Dialog (Prog - Matthias König)
Um nur bestimmte Dateien im Datei-Dialog zuzulassen, kann der Parameter FILE_FILTER vorbelegt werden.
* Initialisierung CONCATENATE 'Alle-Dateien(*.*)|*.*|' 'Word-Dateien(*.doc)|*.doc|' 'Bild-Dateien(*.gif)|*.gif|' 'Bild-Dateien(*.jpg)|*.jpg|' 'Mail-Dateien(*.msg)|*.msg|' 'PDF-Dateien(*.pdf)|*.pdf|' 'Bild-Dateien(*.tif)|*.tif|' 'Text-Dateien(*.txt)|*.txt|' 'Excel-Dateien(*.xls)|*.xls' INTO filter. * Datei abfragen CALL METHOD cl_gui_frontend_services=>file_open_dialog EXPORTING window_title = 'Datei auswählen' file_filter = filter initial_directory = 'C:\' CHANGING file_table = i_file[] rc = rcode EXCEPTIONS OTHERS = 1. |
Funktionsbausteine für Tree-Control (unter Release 4.0B (Prog - Matthias König)
siehe Entwicklungsklasse SEUK
Funktionsgruppe GRAP (Prog - Matthias König)
Aufruf der Grafik und Filetransfer
Hashtabelle (Prog - Matthias König)
Im Unterschied zu Standard- und sortierten Tabellen kann auf Hash-Tabellen nicht mit Index zugegriffen werden. Alle Einträge müssen einen eindeutigen Schlüssel besitzen. Die Kosten für den Schlüsselzugriff sind konstant, d.h. sie sind unabhängig von der Anzahl der Tabelleneinträge. Es sind keine Indexzugriffe erlaubt. Im Unterschied dazu gilt für sortierte interne Tabellen: Der Schlüsselzugriff erfolgt mit binärer Suche. Bei nicht eindeutigem Schlüssel wird auf dem Eintrag mit niedrigstem Index operiert. Die Kosten für den Schlüsselzugriff hängen logarithmisch von der Anzahl der Tabelleneinträge ab
TYPES: BEGIN OF T_077D, KTOKD LIKE T077D-KTOKD, TNAME_Z LIKE DD03L-TABNAME, FNAME LIKE DD03L-FIELDNAME, TNAME LIKE DD03L-TABNAME, DYART LIKE Z077D-DYART, END OF T_077D. DATA: I_077D TYPE HASHED TABLE OF T_077D " Hash-Tabelle WITH UNIQUE KEY KTOKD TNAME_Z FNAME WITH HEADER LINE. * in Hashtabelle schreiben INSERT TABLE i_077d. * in Hashtabelle lesen READ TABLE I_077D WITH KEY KTOKD = KTOKD TNAME_Z = 'KNA1' FNAME = 'SNAME'. |
Herunterladen von Spooldateien als PDF-Datei (Prog - Matthias König)
RSTXPDFT2 für SAP-Script Dateien
RSTXPDFT3 für ABAP Listen
Hex-Wert (Prog - Matthias König)
FIELD-SYMBOLS
DATA:
text(100) type c.
len = STRLEN( text ).
DO len times.
ind = sy-index - 1.
ASSIGN text+ind(1) TO
IF
ENDIF.
ENDDO.
LOOP AT TAB. HIND = SY_TABIX. WRITE:/ ... HIDE HIND. ENDLOOP AT LINE-SELECTION. READ TABLE TAB INDEX HIND.
IN UPDATE TASK (Prog - Matthias König)
- FB in UPDATE TASK kann in V1 und V2 Verbuchung ausgeführt werden - V1 Verbuchung: alle in einer LUW gestarteten FBs laufen in einer weiteren LUW ab - V2 Verbuchung: alle in einer LUW gestarteten FBs laufen in einer separaten LUW ab - SET UPDATE TASK LOCAL: alle in einer LUW gestarteten V1-FBs laufen in der gleichen LUW ab - FB in BACKGROUND TASK erlaubt CALL TRANSACTION
interne Tabelle (Prog - Matthias König)
Deklaration interne Tabelle
DATA: ITAB LIKE YFBERG OCCURS 10 WITH HEADER LINE. DATA: BEGIN OF RFCSTATUS OCCURS 50, SKZ LIKE YRFCSTATUS-STATUS. INCLUDE STRUCTURE YRFCSTATUS. DATA: END OF RFCSTATUS. DATA: BEGIN OF RFCSTATUS OCCURS 50, SKZ LIKE YRFCSTATUS-STATUS, EKZ LIKE YBEZSTRUC-KZ, END OF RFCSTATUS. DATA: BEGIN OF RFCSTATUS OCCURS 50. INCLUDE STRUCTURE YRFCSTATUS. DATA: SKZ LIKE YRFCSTATUS-STATUS, END OF RFCSTATUS. |
- Beispiel für die Definition eines Join (siehe Datei)
- Ein DB-View ist immer nur logisch (entspricht CREATE VIEW)
SELECT K~VBELN P~POSNR INTO (VBELN, POSNR) FROM JKAP AS P INNER JOIN JKAK AS K ON P~VBELN = K~VBELN WHERE K~AUART = 'ABO' AND P~POART = 'NP'. WRITE:/ VBELN, POSNR. ENDSELECT. |
Kalender nach Gauß´sche Osterformel (Prog - MKEurope)
Kann mir jemand evt. ein Script erstellen welches ein Kalender nach der Gauß´schen Osterformel funktioniert.
Die eingabe soll auf dem Dynpro 100 mit Tag Monat Jahr und Bundesland sein.
auf dem Subscreen dyn 110 soll die Ausgabe der Feiertage in dem betreffenden Bundesland nach Datum sotirt stehen.
Klassennamen ermitteln (Prog - Matthias König)
siehe Klasse CL_OO_INCLUDE_NAMING
DATA: lo_cifref TYPE REF TO if_oo_clif_incl_naming. CALL METHOD cl_oo_include_naming=>get_instance_by_include EXPORTING progname = '/GRZ/GPDC__SESSION============CP' RECEIVING cifref = lo_cifref EXCEPTIONS no_objecttype = 1 internal_error = 2 OTHERS = 3. WRITE:/ lo_cifref->cifkey-clsname. |
Konditionen begrenzen (Massenverarbeitung) (Prog - Stefan Preuß)
Hallo zusammen,
ich habe ein kleines Problem.
Ich muss Konditionen ca. 3000 in unterschiedlichen Tabellen (A9xx) begrenzen.
Das Problem welches ich habe ist, dass das Feld KODATABI Teil des Schlüssels ist.
Daher kommt ein Update auf die entsprechende Tabelle nicht in Frage.
Alle Konditionen die zu begrenzen sind liegen als Datenbestand in Textformat vor.
Eine Massenänderung mittels LSMW und Auszeichnung als Batch-Input-Mappe
führt zu dem Fehler, dass das Datums Feld 'Gültig am' nur als einstelliges Feld
aufgezeichnet und somit beim Abspielen der Mappe nur mit der ersten Stelle des
Datums '0' oder '1' gefüllt wird.
Wer hat eine Idee wie ich das Projekt zum Erfolg führen kann.
Vielen Dank für Eure Unterstützung.
Konvertierung von ALPHA-Domäne, z.B. KUNNR (Prog - Matthias König)
CONVERSION_EXIT_ALPHA_INPUT: extern -> intern, z.B. 200002 -> 0000200002
CONVERSION_EXIT_ALPHA_OUTPUT: intern -> extern, z.B. 0000200002 -> 200002
Laufzeitmessung (Prog - Matthias König)
GET RUN TIME FIELD T.
Laufzeit wird in Mikrosekunden gemessen. Beim 1. Aufruf von GET RUN TIME wird Feld f auf Null gesetzt (Initialisierung); bei jedem weiteren Aufruf wird die Laufzeit seit diesem ersten Aufruf in Feld T gesetzt. Das Feld T sollte vom Typ I sein.
DATA T TYPE I. GET RUN TIME FIELD T. " setzt Feld T auf die Laufzeit des Programms WRITE: / 'Runtime', T. |
Listverarbeitung (Prog - Matthias König)
- Mit dem Befehl CLEAR SY-LSIND werden alle bisherigen Listen gelöscht und es kann eine neue Liste erzeugt werden
- TOP-OF-PAGE DURING LINE-SELECTION definiert Listenkopf einer weiteren Liste (z.B. der Detailliste, auf die man durch Doppelklick kommt)
- Liste auffrischen (siehe Datei)
- Zeile auf Liste lesen und ändern (siehe Datei)
- HIDE-Befehl
* alte Liste löschen und Titel und Überschriften ausgeben CLEAR SY-LSIND. NEW-PAGE WITH-TITLE WITH-HEADING. * Liste erneut ausgeben ... =============================================================================== * Zeile auf Liste lesen und ändern DO. ZEILENR = SY-INDEX + 3. READ LINE ZEILENR. IF SY-SUBRC <> 0. EXIT. ENDIF. CHECK NOT SY-LISEL+5(10) IS INITIAL. SY-LISEL+3(1) = 'X'. MODIFY LINE ZEILENR. ENDDO. * oder AT LINE-SELECTION. ... MODIFY CURRENT LINE FIELD VALUE BDCPS-PROCESS FROM ''. =============================================================================== * HIDE LOOP AT TAB. HIND = SY_TABIX. WRITE:/ ... HIDE HIND. ENDLOOP AT LINE-SELECTION. READ TABLE TAB INDEX HIND. |
logische Dateipfade (Prog - Matthias König)
- Mit Hilfe der Transaktion FILE (neue Einträge) wird ein logischer Dateipfad angelegt. Anschließend physische Dateipfade zuordnen (UNIX, DOS, ...). - Mit den FB FILE_GET_NAME kann der physische Dateipfad zu einem logischen Dateipfad bestimmt werden.
mehrere Batchinputmappen im Hintergrund abspielen (Prog - Matthias König)
Beispiele sind die Reports RPWI2000 und RPIEWT04. Diese starten mehrere
Mappen in je einem separaten Job.
MESSAGE (Prog - Matthias König)
- Bezug auf with-Variablen in Nachricht: &1, &2, ..., &4 - Bezug auf with-Variablen im Langtext: &V1&, &V2&, ..., &V4& - Langtext: Über Einbinden -> Verweis (ausgewählten Verweis ändern) kann einfach ein Link auf eine Transaktion, Datenelement, etc. eingefügt werden
MESSAGE und Spooldatei (Prog - Matthias König)
Um trotz MESSAGE E eine Spooldatei der WRITE-Ausgaben zu bekommen, muß vor der Fehlermeldung ein NEW-PAGE und anschließend ein COMMIT WORK gesetzt werden.
Monats Berechnungen (Prog - Bernhard Diemer)
Standard Funtkionsbaustein um nächsten Monat / Periode zu ermitteln.
HR_CALC_MONTH
MS Word als Standardeditor in SAPscript und Smart (Prog - Matthias König)
Geben Sie in der Transaktion SE38 das Programm RSCPINST oder RSCPSETEDITOR ein und drücken Sie Ausführen (F8). Wählen Sie im nächsten Bild Springen -> MS Word als SAPScript Editor setzen. Wenn das Ankreuzfeld markiert ist, entfernen Sie die Markierung bei MS Word und drücken Sie 'Aktivieren'. Ist MS Word nicht markiert, drücken Sie einfach 'Aktivieren'.
(siehe OSS Hinweis 791199)
OLE2 MS Outlook FolderType (Prog - Matthias König)
Hier die MS Outlook Folder-Typen:
5 = Gesendete Objekte
6 = Posteingang
9 = Kalender
10 = Kontakte
12 = Notizen
13 = Aufgaben
Pflegedialog (Prog - Matthias König)
- Transaktion SE54 - Ob bei der Aufzeichnungsroutine Transport- oder Customizingaufträge gezogen werden, hängt von der Auslieferungsklasse der Tabelle bzw. des Pflegeviews (Zusätze ? Auslieferungsklasse) ab. - Kommt es dabei zu Problemen, muß der entsprechende Eintrag in der Tabelle OBJH gepflegt werden (CUST satt CUSY). - Transaktionscode anlegen: Parametertransaktion; Transaktion SM30 (Einstiegsbild überspringen); VIEWNAME = Z..., UPDATE = X - Um nach dem Aufruf der SM30 zunächst mit einer Selektionsmaske Daten einschränken zu können, muß ein Pflegeview mit dem Pflegemerkmal S für die entsprechenden Felder gesetzt werden.
Programm zur Mappenanalyse (Prog - Matthias König)
Dieses Programm zeigt den aktuellen Verarbeitungsstatus von Mappen an. Auch von Mappen, die gerade verarbeitet werden (online/Batch). Der Verarbeitungsstatus wird mit Hilfe eines Progress-Indikators angezeigt.
Hinweis: Der Report sollte auf den Transaktionscode ZM35 gelegt werden, oder mit der SA38 ausgeführt werden, da nur dann die Protokollanzeige richtig funktioniert.
REPORT ZZJBMAPP MESSAGE-ID ZJ NO STANDARD PAGE HEADING LINE-SIZE 99. * Includes INCLUDE: * Tabellen TABLES: APQI, APQD. * interne Tabellen DATA: BEGIN OF I_TAB OCCURS 0, QID LIKE APQI-QID, ICON LIKE ICON-ID, MNAME LIKE APQI-GROUPID, CNAME LIKE APQI-CREATOR, CDATE LIKE APQI-CREDATE, CTIME LIKE APQI-CRETIME, ANGES LIKE SY-TABIX, ANVER LIKE SY-TABIX, ANOFF LIKE SY-TABIX, ANERR LIKE SY-TABIX, COL01 TYPE C, LEN01 LIKE SY-TABIX, COL02 TYPE C, LEN02 LIKE SY-TABIX, COL03 TYPE C, LEN03 LIKE SY-TABIX, END OF I_TAB. DATA: I_APQI LIKE APQI OCCURS 0 WITH HEADER LINE. * Felder und Strukturen DATA: WA_LOG LIKE RLOG, QID LIKE APQI-QID, ID LIKE ICON-ID. ************************************************************************ * Selektionsbild **************** SELECTION-SCREEN SKIP. PARAMETERS: P_MNAME LIKE APQI-GROUPID MEMORY ID MPN. SELECTION-SCREEN SKIP. PARAMETERS: P_CDVON LIKE APQI-CREDATE, P_CDBIS LIKE APQI-CREDATE. SELECTION-SCREEN SKIP. SELECTION-SCREEN BEGIN OF BLOCK BL1 WITH FRAME TITLE TEXT-BL1. PARAMETERS: P_ZUVER AS CHECKBOX DEFAULT 'X', P_FEHLE AS CHECKBOX DEFAULT 'X', P_BEARB AS CHECKBOX DEFAULT 'X', P_BATCH AS CHECKBOX DEFAULT 'X', P_INERS AS CHECKBOX DEFAULT 'X', P_INBEA AS CHECKBOX DEFAULT 'X'. SELECTION-SCREEN END OF BLOCK BL1. ************************************************************************ TOP-OF-PAGE. ************ * Seitenkopf setzen ULINE. FORMAT COLOR 1. WRITE:/ TEXT-H01. ULINE. ************************************************************************ AT LINE-SELECTION. ****************** GET CURSOR VALUE ID. ID+0(1) = '@'. ID+3(1) = '@'. CASE ID. WHEN ICON_LED_GREEN. MESSAGE I000 WITH 'zu verarbeiten'. WHEN ICON_INCOMPLETE. MESSAGE I000 WITH 'Fehlerhaft'. WHEN ICON_CHECKED. MESSAGE I000 WITH 'korrekt verarbeitet'. WHEN ICON_TOOLS. MESSAGE I000 WITH 'in Bearbeitung (online/Batch)'. WHEN ICON_NEXT_OBJECT. MESSAGE I000 WITH 'in Erstellung'. ENDCASE. ************************************************************************ AT USER-COMMAND. **************** * Unterscheidung OK-Code CASE SY-UCOMM. * .. Auffrischen WHEN 'AUFF'. SUBMIT (SY-CPROG) WITH P_MNAME = P_MNAME WITH P_CDVON = P_CDVON WITH P_CDBIS = P_CDBIS WITH P_CDBIS = P_CDBIS WITH P_ZUVER = P_ZUVER WITH P_FEHLE = P_FEHLE WITH P_BEARB = P_BEARB WITH P_BATCH = P_BATCH WITH P_INERS = P_INERS WITH P_INBEA = P_INBEA AND RETURN. LEAVE SCREEN. * .. Protokoll WHEN 'PROT'. IF QID IS INITIAL. MESSAGE I000 WITH 'Bitte Cursor auf Mappe positionieren.'. ELSE. WA_LOG-MODUS = 'C'. WA_LOG-QUID = QID. SET PARAMETER ID 'BDC' FIELD WA_LOG. SUBMIT RSBDCLOG AND RETURN. ENDIF. ENDCASE. ************************************************************************ START-OF-SELECTION. ******************* * Status setzen SET PF-STATUS '1000'. * Mappen selektieren PERFORM MAPPEN_SELEKTIEREN. * Einträge aufbereiten PERFORM MAPPEN_AUFBEREITEN. * Liste ausgeben PERFORM MAPPE_AUSGEBEN. *&---------------------------------------------------------------------* *& Form MAPPEN_SELEKTIEREN *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM MAPPEN_SELEKTIEREN. DATA: I_APQI_H LIKE APQI OCCURS 0 WITH HEADER LINE. * Initialisierung CLEAR I_APQI[]. * Mappen selektieren (Zu verarbeiten) IF P_ZUVER = 'X'. CALL FUNCTION 'BDC_OBJECT_SELECT' EXPORTING NAME = P_MNAME DATATYPE = 'BDC' CLIENT = SY-MANDT DATE_FROM = P_CDVON DATE_TO = P_CDBIS QSTATE = '' TABLES APQITAB = I_APQI_H EXCEPTIONS INVALID_DATATYPE = 1 OTHERS = 2. APPEND LINES OF I_APQI_H TO I_APQI. ENDIF. * Mappen selektieren (Fehlerhaft) IF P_FEHLE = 'X'. CALL FUNCTION 'BDC_OBJECT_SELECT' EXPORTING NAME = P_MNAME DATATYPE = 'BDC' CLIENT = SY-MANDT DATE_FROM = P_CDVON DATE_TO = P_CDBIS QSTATE = 'E' TABLES APQITAB = I_APQI_H EXCEPTIONS INVALID_DATATYPE = 1 OTHERS = 2. APPEND LINES OF I_APQI_H TO I_APQI. ENDIF. * Mappen selektieren (bearbeitet) IF P_BEARB = 'X'. CALL FUNCTION 'BDC_OBJECT_SELECT' EXPORTING NAME = P_MNAME DATATYPE = 'BDC' CLIENT = SY-MANDT DATE_FROM = P_CDVON DATE_TO = P_CDBIS QSTATE = 'F' TABLES APQITAB = I_APQI_H EXCEPTIONS INVALID_DATATYPE = 1 OTHERS = 2. APPEND LINES OF I_APQI_H TO I_APQI. ENDIF. * Mappen selektieren (im Hintergrund) IF P_BATCH = 'X'. CALL FUNCTION 'BDC_OBJECT_SELECT' EXPORTING NAME = P_MNAME DATATYPE = 'BDC' CLIENT = SY-MANDT DATE_FROM = P_CDVON DATE_TO = P_CDBIS QSTATE = 'S' TABLES APQITAB = I_APQI_H EXCEPTIONS INVALID_DATATYPE = 1 OTHERS = 2. APPEND LINES OF I_APQI_H TO I_APQI. ENDIF. * Mappen selektieren (in Erstellung) IF P_INERS = 'X'. CALL FUNCTION 'BDC_OBJECT_SELECT' EXPORTING NAME = P_MNAME DATATYPE = 'BDC' CLIENT = SY-MANDT DATE_FROM = P_CDVON DATE_TO = P_CDBIS QSTATE = 'C' TABLES APQITAB = I_APQI_H EXCEPTIONS INVALID_DATATYPE = 1 OTHERS = 2. APPEND LINES OF I_APQI_H TO I_APQI. ENDIF. * Mappen selektieren (in Bearbeitung) IF P_INBEA = 'X'. CALL FUNCTION 'BDC_OBJECT_SELECT' EXPORTING NAME = P_MNAME DATATYPE = 'BDC' CLIENT = SY-MANDT DATE_FROM = P_CDVON DATE_TO = P_CDBIS QSTATE = 'R' TABLES APQITAB = I_APQI_H EXCEPTIONS INVALID_DATATYPE = 1 OTHERS = 2. APPEND LINES OF I_APQI_H TO I_APQI. ENDIF. * Mappen sortieren SORT I_APQI BY GROUPID CREDATE DESCENDING CRETIME DESCENDING. ENDFORM. " MAPPEN_SELEKTIEREN *&---------------------------------------------------------------------* *& Form MAPPEN_AUFBEREITEN *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM MAPPEN_AUFBEREITEN. DATA: WA_BDCTH LIKE BDCTH. * Initialisierung CLEAR I_TAB[]. * Iteration über Mappen LOOP AT I_APQI. * .. Initialisierung CLEAR I_TAB. * .. QID setzen I_TAB-QID = I_APQI-QID. * .. Icon bestimmen CASE I_APQI-QSTATE. WHEN ''. I_TAB-ICON = ICON_LED_GREEN. WHEN 'E'. I_TAB-ICON = ICON_INCOMPLETE. WHEN 'F'. I_TAB-ICON = ICON_CHECKED. WHEN 'S'. I_TAB-ICON = ICON_TOOLS. WHEN 'C'. I_TAB-ICON = ICON_NEXT_OBJECT. WHEN 'R'. I_TAB-ICON = ICON_TOOLS. ENDCASE. * .. Mappenname, Datum, Zeit, Ersteller I_TAB-CNAME = I_APQI-CREATOR. I_TAB-MNAME = I_APQI-GROUPID. I_TAB-CDATE = I_APQI-CREDATE. I_TAB-CTIME = I_APQI-CRETIME. * .. Anzahl Transaktionen I_TAB-ANGES = I_APQI-TRANSCNT - I_APQI-TRANSCNTD. I_TAB-ANVER = I_APQI-TRANSCNTF. I_TAB-ANERR = I_APQI-TRANSCNTE. * .. für Mappen in Bearbeitung Mappen-Queue auslesen IF I_APQI-QSTATE CA 'SR'. CLEAR: I_TAB-ANVER, I_TAB-ANERR. SELECT * FROM APQD WHERE QID = I_APQI-QID. CHECK APQD-VARDATA(1) = 'S'. WA_BDCTH = APQD-VARDATA. TRANSLATE WA_BDCTH TO UPPER CASE. IF WA_BDCTH-STATE = 'F'. ADD 1 TO I_TAB-ANVER. ELSEIF WA_BDCTH-STATE = 'E'. ADD 1 TO I_TAB-ANERR. ENDIF. ENDSELECT. ENDIF. * .. Anzahl offene Transaktionen bestimmen I_TAB-ANOFF = I_TAB-ANGES - I_TAB-ANVER - I_TAB-ANERR. * .. Status-Indikator aufbereiten CASE I_APQI-QSTATE. WHEN ''. I_TAB-COL01 = '2'. I_TAB-LEN01 = 20. WHEN 'F'. I_TAB-COL01 = '5'. I_TAB-LEN01 = 20. WHEN 'C'. I_TAB-COL01 = '2'. I_TAB-LEN01 = 15. I_TAB-COL02 = '0'. I_TAB-LEN02 = 05. WHEN OTHERS. IF I_TAB-ANGES = 0. I_TAB-ANGES = 1. I_TAB-ANVER = 1. I_TAB-ANOFF = 0. I_TAB-ANERR = 0. ENDIF. I_TAB-COL01 = '5'. I_TAB-COL02 = '6'. I_TAB-COL03 = '2'. I_TAB-LEN01 = I_TAB-ANVER * 20 / I_TAB-ANGES. I_TAB-LEN02 = I_TAB-ANERR * 20 / I_TAB-ANGES. IF I_TAB-ANERR > 0 AND I_TAB-LEN02 = 0. I_TAB-LEN02 = 1. IF I_TAB-LEN01 > 1. I_TAB-LEN01 = I_TAB-LEN01 - 1. ENDIF. ENDIF. IF I_TAB-ANOFF > 0. I_TAB-LEN03 = 20 - I_TAB-LEN01 - I_TAB-LEN02. ELSE. I_TAB-LEN01 = 20 - I_TAB-LEN02. ENDIF. ENDCASE. * .. I_TAB anhängen APPEND I_TAB. ENDLOOP. ENDFORM. " MAPPEN_AUFBEREITEN *&---------------------------------------------------------------------* *& Form MAPPE_AUSGEBEN *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM MAPPE_AUSGEBEN. DATA: LSTR(20) TYPE C. * Iteration über Mappen LOOP AT I_TAB. WRITE:/ '|' NO-GAP, AT (2) I_TAB-ICON AS ICON NO-GAP HOTSPOT, '|' NO-GAP, I_TAB-MNAME COLOR 4 NO-GAP, '|' NO-GAP, I_TAB-CDATE NO-GAP, '|' NO-GAP, I_TAB-CTIME NO-GAP, '|' NO-GAP, AT (I_TAB-LEN01) LSTR COLOR = I_TAB-COL01 NO-GAP, AT (I_TAB-LEN02) LSTR COLOR = I_TAB-COL02 NO-GAP, AT (I_TAB-LEN03) LSTR COLOR = I_TAB-COL03 NO-GAP, '|' NO-GAP, AT (6) I_TAB-ANGES NO-SIGN NO-GAP COLOR 4, '|' NO-GAP, AT (6) I_TAB-ANVER NO-SIGN NO-GAP COLOR 5, '|' NO-GAP. IF I_TAB-ANERR > 0. WRITE: AT (6) I_TAB-ANERR NO-SIGN NO-GAP COLOR 6, '|' NO-GAP. ELSE. WRITE: AT (6) I_TAB-ANERR NO-SIGN NO-GAP, '|' NO-GAP. ENDIF. IF I_TAB-ANOFF > 0. WRITE: AT (6) I_TAB-ANOFF NO-SIGN NO-GAP COLOR 3, '|' NO-GAP. ELSE. WRITE: AT (6) I_TAB-ANOFF NO-SIGN NO-GAP, '|' NO-GAP. ENDIF. WRITE: I_TAB-CNAME NO-GAP, '|' NO-GAP. QID = I_TAB-QID. HIDE QID. ENDLOOP. ULINE. ENDFORM. " MAPPE_AUSGEBEN |
Suchen und Ersetzen mit Hilfe regulärer Ausdrücke.
* [...] aus Text entfernen REPLACE REGEX '\[.*\].*' IN ynd68-pr_vk_bez WITH ''. * Unterprogramm(Programm) splitten FIND REGEX '(.*)\((.*)\)' IN detail SUBMATCHES uform uprog. PERFORM (uform) IN PROGRAM (uprog) USING wa_field-tabindex. |
Releasewechsel, Hot-Packages (Prog - Matthias König)
- Transaktion SPAU - aktive Version mit letzter vom Entwickler modifizierter Version vergleichen - Folgende Fälle müssen unterschieden werden: o SAP hat Modifikationen nachgezogen, d.h. es wurde vom Entwickler eine Vorabkorrektur eingepflegt => Rückkehr SAP-Standard o Es gibt nur Modifikationen vom Entwickler, ohne das SAP etwas geändert hat => Letzte Version zurückholen und speichern (SE38) o Es gibt sowohl Modifikationen vom Entwickler, als auch Programmänderungen von SAP ? notwendige Modifikationen in aktiver Version nachziehen
Report per Programm generieren (Prog - Matthias König)
Mit Hilfe der folgenden Befehle, FBs kann der Quellcode eines Reports geladen, gelöscht, erzeugt bzw. generiert werden (siehe Datei)
DATA: BEGIN OF I_PTAB OCCURS 0, LINE(72) TYPE C, END OF I_PTAB. * Quellcode lesen READ REPORT 'ZTABPC01' INTO I_PTAB. * Report löschen CALL FUNCTION 'RS_DELETE_PROGRAM' EXPORTING PROGRAM = 'ZTABPC02' SUPPRESS_POPUP = 'X' EXCEPTIONS ENQUEUE_LOCK = 1 OBJECT_NOT_FOUND = 2 PERMISSION_FAILURE = 3 REJECT_DELETION = 4 OTHERS = 5. * Report erzeugen INSERT REPORT 'ZTABPC02' FROM I_PTAB. * Report generieren GENERATE REPORT 'ZTABPC02'. |
Report verlassen (Prog - Matthias König)
LEAVE PROGRAM: Programm wird verlassen, ohne daß auf den Selektionsbildschirm zurückgesprungen wird EXIT: Falls noch keine Liste erzeugt wurde, springt das Programm zum Selektionsbildschirm zurück LEAVE SCREEN: Falls mehrere Listen erzeugt wurden, springt das Programm zum Selektionsbildschirm zurück
RFC FB-Aufruf von Unix aus (Prog - Matthias König)
UNIX-Shellscript zum Aufrufen eines SAP-FBs
/sapmnt/V01/rfcdsk/bin/startrfc \ -3 \ -d V01 \ " System -u rfcdef \ " User -p openrfc \ " Passwort -l D \ " Anmeldesprache -h hdlcue16 \ " Host -s 14 \ " Systemnummer -t \ -g hdlcue16 \ -c 401 \ " Mandant -E DATEI=/usr/sap/V01/mappe/SERIEN/sapserie.txt \ " Exportparameter -F Z_LS_MVSDATEN_LADEN \ " FB-Name -x sapgw14 \ " Gateway > /usr/sap/V01/mappe/SERIEN/laden_ergebnis " Umleitung Ergebnis |
selbstprogrammierte Suchhilfe (Prog - Matthias König)
Liste mit Einzelauswahl anzeigen: FB HELP_VALUES_GET_NO_DD_NAME
Liste mit Mehrfachauswahl anzeigen: FB F4_SHOW_RESULT
FUNCTION Z_F4_EXIT. *"---------------------------------------------------------------------- *"*"Globale Schnittstelle: *" TABLES *" SHLP_TAB TYPE SHLP_DESCR_TAB_T *" RECORD_TAB STRUCTURE SEAHLPRES *" CHANGING *" VALUE(SHLP) TYPE SHLP_DESCR_T *" VALUE(CALLCONTROL) LIKE DDSHF4CTRL *" STRUCTURE DDSHF4CTRL *"---------------------------------------------------------------------- * Fallunterscheidung Zeitpunkt CASE CALLCONTROL-STEP. WHEN 'PRESEL1'. CLEAR: INTERFACE. CLEAR: KUNNR, I_KUNNR[], KZ_CHGN. READ TABLE SHLP-INTERFACE INTO INTERFACE WITH KEY SHLPFIELD = 'KUNNR'. PERFORM SUCHHILFE. IF KZ_CHGN = 'X'. CALLCONTROL-STEP = 'SELONE2'. EXIT. ENDIF. IF NOT ( KUNNR IS INITIAL AND I_KUNNR[] IS INITIAL ). LOOP AT SHLP-INTERFACE INTO INTERFACE WHERE SHLPFIELD = 'KUNNR'. INTERFACE-VALFIELD = 'KUNNR'. MODIFY SHLP-INTERFACE FROM INTERFACE. ENDLOOP. CLEAR: RECORD_TAB[], RECORD_TAB. IF CALLCONTROL-MULTISEL IS INITIAL. " Ein-/Mehrfachauswahl RECORD_TAB-STRING = KUNNR. APPEND RECORD_TAB. ELSE. LOOP AT I_KUNNR. RECORD_TAB-STRING = I_KUNNR-KUNNR. APPEND RECORD_TAB. ENDLOOP. ENDIF. CALLCONTROL-STEP = 'RETURN'. ELSE. CALLCONTROL-STEP = 'EXIT'. MESSAGE S100(EK). ENDIF. ENDCASE. ENDFUNCTION. |
SELECT-OPTION (Prog - Matthias König)
Cursor auf Feld einer SELECT-OPTION positionieren: SET CURSOR FIELD 'S_KUNNR-LOW'.
SELECTION-SCREEN (Prog - Matthias König)
Gestaltung des Selektionsbildes von Reports
************************************************************************ * Selektions-Bildschirm *********************** SELECTION-SCREEN BEGIN OF BLOCK BL1 WITH FRAME TITLE TEXT-BL1. SELECT-OPTIONS: S_KUNNR FOR KNA1-KUNNR MATCHCODE OBJECT DEBI, S_VKGRP FOR KNVV-VKGRP, S_VKBUR FOR KNVV-VKBUR, S_PERNR FOR KNVP-PERNR MATCHCODE OBJECT PREM, S_BRSCH FOR KNA1-BRSCH, S_PSTLZ FOR KNA1-PSTLZ. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 1(30) TEXT-015. SELECTION-SCREEN POSITION 33. PARAMETERS: KZEXP LIKE YBEZSTRUC-KZ. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN END OF BLOCK BL1. |
Spool Erzeugungsdatum bestimmen (Prog - Matthias König)
In der Tabelle TSP01 wird im Fled RQCRETIME nicht der aktuelle Zeitstempel bezogen auf CET abgelegt. Dieser kann aber mit CONVERT DATE ermittelt werden.
DATA: rqcretime LIKE tsp01-rqcretime, tstamp TYPE timestamp. GET TIME. CONVERT DATE sy-datum TIME sy-uzeit INTO TIME STAMP tstamp TIME ZONE sy-zonlo. rqcretime+00(14) = tstamp. rqcretime+14(02) = '00'. SELECT * INTO TABLE i_tsp01 FROM tsp01 where rqcretime >= rqcretime. |
SY-ONCOM (Prog - Matthias König)
Systemfeld um folgendes zu unterscheiden:
SY-ONCOM = 'V' => FUNCTION ... IN UPDATE TASK
SY-ONCOM = 'P' => PERFORM ... ON COMMIT
SY-ONCOM = 'T' => sonst ???
(siehe auch http://www.abap-fans.de/tipps/Systemfelder.htm)
Systemfelder (Prog - Matthias König)
SY-SYSID Applikationsserver, z.B. AT02 SY-BATCH Kz. ob Programm im Batch (Job) läuft SY-CALLD Call Modus aktiv (z.B. per CALL TRANSACTION) SY-BINPT Kz. ob Batch-Input aktiv SY-XCODE OK-Code SY-LSIND Nummer der aktuellen Liste SY-FDAYW Fabrikkalender-Wochentag
SYSTEM_CALLSTACK (Prog - Matthias König)
Callstack ermitteln Der ABAP-Aufrufstack wird ermittelt und in der gewünschten Tiefe zurückgeliefert. Nur damit dieser Funktionsbaustein abwärtskompatibel bleibt, hat er noch zwei EXPORTING-Parameter. Eigentlich sollte immer der Parameter
CALLSTACK verwendet werden. Darin sind auch die Aufrufstellen enthalten.
Tabelleneinträge protokollieren (Prog - Matthias König)
- Parameter rec/client muß gesetzt sein - Tabelle DBTABPRT enthält Protokollsätze - Programm RSTBPROT zum Auswerten
Tabellenpflegegenerator (Prog - Matthias König)
Um ab Release 4.6 beim Aufruf der SM30 zu einem View/Tabelle ein Werte-Popup zu erhalen, muss im Tabellenpflegegenerator SE54 der Zeitpunkt 19 versorgt werden.
*&---------------------------------------------------------------------* *& Form zz_zvjdtvausgb_19 *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM zz_zvjdtvausgb_19. DATA: i_sval LIKE sval OCCURS 0 WITH HEADER LINE, rcode LIKE sy-batch. * prüfen, ob Anwender bereits Abbrechen wollte IF function = canc. fcode = canc. EXIT. ENDIF. * Werte abfragen CLEAR i_sval. i_sval-tabname = 'JDTVAUSGB'. i_sval-fieldname = 'DRERZ'. i_sval-field_obl = 'X'. i_sval-fieldtext = 'Druckerzeugnis'. APPEND i_sval. CLEAR i_sval. i_sval-tabname = 'JDTVAUSGB'. i_sval-fieldname = 'PVA'. i_sval-field_obl = 'X'. i_sval-fieldtext = 'Planvertriebsausgabe'. APPEND i_sval. CLEAR i_sval. i_sval-tabname = 'JKAP'. i_sval-fieldname = 'GUELTIGVON'. i_sval-fieldtext = 'Erscheinungstab von'. i_sval-field_obl = 'X'. i_sval-value = sy-datum. APPEND i_sval. i_sval-tabname = 'JKAP'. i_sval-fieldname = 'GUELTIGBIS'. i_sval-fieldtext = 'Erscheinungstab bis'. i_sval-field_obl = 'X'. i_sval-value = '99991231'. APPEND i_sval. CALL FUNCTION 'POPUP_GET_VALUES' EXPORTING popup_title = 'Arbeitsbereich festlegen' IMPORTING returncode = rcode TABLES fields = i_sval EXCEPTIONS error_in_fields = 1 OTHERS = 2. IF rcode = 'A' OR sy-subrc <> 0. function = canc. fcode = canc. EXIT. ENDIF. * Werte hinzufügen READ TABLE i_sval INDEX 1. READ TABLE x_namtab WITH KEY viewfield = 'DRERZ'. CLEAR dba_sellist. dba_sellist-viewfield = x_namtab-viewfield. dba_sellist-operator = 'EQ'. dba_sellist-value = i_sval-value. dba_sellist-tabix = sy-tabix. dba_sellist-and_or = 'AND'. APPEND dba_sellist. READ TABLE i_sval INDEX 2. READ TABLE x_namtab WITH KEY viewfield = 'PVA'. CLEAR dba_sellist. dba_sellist-viewfield = x_namtab-viewfield. dba_sellist-operator = 'EQ'. dba_sellist-value = i_sval-value. dba_sellist-tabix = sy-tabix. dba_sellist-and_or = 'AND'. APPEND dba_sellist. READ TABLE i_sval INDEX 3. READ TABLE x_namtab WITH KEY viewfield = 'ERSCHDAT'. CLEAR dba_sellist. dba_sellist-viewfield = x_namtab-viewfield. dba_sellist-operator = 'GE'. dba_sellist-value+0(2) = i_sval-value+6(2). dba_sellist-value+2(1) = '.'. dba_sellist-value+3(2) = i_sval-value+4(2). dba_sellist-value+5(1) = '.'. dba_sellist-value+6(4) = i_sval-value+0(4). dba_sellist-tabix = sy-tabix. dba_sellist-and_or = 'AND'. APPEND dba_sellist. READ TABLE i_sval INDEX 4. READ TABLE x_namtab WITH KEY viewfield = 'ERSCHDAT'. CLEAR dba_sellist. dba_sellist-viewfield = x_namtab-viewfield. dba_sellist-operator = 'LE'. dba_sellist-value+0(2) = i_sval-value+6(2). dba_sellist-value+2(1) = '.'. dba_sellist-value+3(2) = i_sval-value+4(2). dba_sellist-value+5(1) = '.'. dba_sellist-value+6(4) = i_sval-value+0(4). dba_sellist-tabix = sy-tabix. APPEND dba_sellist. ENDFORM. " zz_zvjdtvausgb_19 |
Text in Texteditor anzeigen (Prog - Matthias König)
FB READ_TEXT, FB EDIT_TEXT
data: lwa_thead like THEAD, li_lines like tline occurs 0 with header line. * Text lesen CALL FUNCTION 'READ_TEXT' EXPORTING ID = 'ST' LANGUAGE = 'D' NAME = fu_tdname OBJECT = 'TEXT' IMPORTING HEADER = lwa_thead TABLES LINES = li_lines EXCEPTIONS ID = 1 LANGUAGE = 2 NAME = 3 NOT_FOUND = 4 OBJECT = 5 REFERENCE_CHECK = 6 WRONG_ACCESS_TO_ARCHIVE = 7 OTHERS = 8. check sy-subrc = 0. * Text anzeigen CALL FUNCTION 'EDIT_TEXT' EXPORTING HEADER = lwa_thead TABLES LINES = li_lines EXCEPTIONS ID = 1 LANGUAGE = 2 LINESIZE = 3 NAME = 4 OBJECT = 5 TEXTFORMAT = 6 COMMUNICATION = 7 OTHERS = 8. |
UNIX-Befehl ausführen (Prog - Matthias König)
In die interne Tabelle, die von UNIX als Ergebnis zurückgegeben wird, steht nur die Standardausgabe. Um auch die Fehlerausgabe zu erhalten, muß am Ende jedes UNIX-Kommandos folgende Umleitung stehen: '2>&1'
*&---------------------------------------------------------------------* *& Report ZUNIX * *& * *&---------------------------------------------------------------------* *& * *& * *&---------------------------------------------------------------------* REPORT ZUNIX MESSAGE-ID ZV NO STANDARD PAGE HEADING LINE-SIZE 102. DATA: BEGIN OF ERGTAB OCCURS 100, LINE(250) TYPE C. DATA: END OF ERGTAB. DATA: BEGIN OF TCOM OCCURS 100, COMMAND(250) TYPE C. DATA: END OF TCOM. DATA: LEN LIKE SY-TABIX, IND LIKE SY-TABIX, POS LIKE SY-TABIX, COM(250) TYPE C, ZEI(1) TYPE C. ************************************************************************ * SELECTION-SCREEN ****************** PARAMETERS: COMMAND(250) TYPE C LOWER CASE. SELECTION-SCREEN SKIP. SELECTION-SCREEN BEGIN OF BLOCK BL1 WITH FRAME. PARAMETERS: WRAP AS CHECKBOX DEFAULT 'X', FAUS AS CHECKBOX DEFAULT 'X'. SELECTION-SCREEN END OF BLOCK BL1. ************************************************************************ AT SELECTION-SCREEN ON VALUE-REQUEST FOR COMMAND. ************************************************* * interne Tabelle TCOM aus Memory lesen IMPORT TCOM[] FROM MEMORY ID 'TCOM'. * Historie anzeigen PERFORM HISTORIE_ANZEIGEN. ************************************************************************ START-OF-SELECTION. ******************* * Fehlerausgabe zur Standardausgabe umleiten IF FAUS = 'X'. CLEAR: COM, POS. LEN = STRLEN( COMMAND ). IND = LEN - 1. ZEI = COMMAND+IND(1). IF ZEI = ';'. COMMAND+IND(1) = ''. ENDIF. DO LEN TIMES. IND = SY-INDEX - 1. ZEI = COMMAND+IND(1). IF ZEI = ';'. CONCATENATE COM '2>&1;' INTO COM SEPARATED BY SPACE. ADD 6 TO POS. ELSE. COM+POS(1) = ZEI. ADD 1 TO POS. ENDIF. ENDDO. CONCATENATE COM '2>&1' INTO COM SEPARATED BY SPACE. ELSE. COM = COMMAND. ENDIF. * UNIX-Befehl absetzen CALL 'SYSTEM' ID 'COMMAND' FIELD COM ID 'TAB' FIELD ERGTAB[]. * Befehl in interner Tabelle merken IMPORT TCOM[] FROM MEMORY ID 'TCOM'. TCOM-COMMAND = COMMAND. INSERT TCOM INDEX 1. * interne Tabelle TCOM ins Memory schreiben EXPORT TCOM[] TO MEMORY ID 'TCOM'. * Ergebnis ausgeben LOOP AT ERGTAB. LEN = STRLEN( ERGTAB-LINE ). IF LEN <= 100 OR WRAP IS INITIAL. FORMAT INTENSIFIED ON. WRITE: / '>'. FORMAT INTENSIFIED OFF. WRITE: ERGTAB-LINE(100). ELSEIF LEN <= 200. FORMAT INTENSIFIED ON. WRITE: / '>'. FORMAT INTENSIFIED OFF. WRITE: ERGTAB-LINE(100), /3 ERGTAB-LINE+100(100). ELSE. FORMAT INTENSIFIED ON. WRITE: / '>'. FORMAT INTENSIFIED OFF. WRITE: ERGTAB-LINE(100), /3 ERGTAB-LINE+100(100), /3 ERGTAB-LINE+200(50). ENDIF. ENDLOOP. *&---------------------------------------------------------------------* *& Form HISTORIE_ANZEIGEN *&---------------------------------------------------------------------* * text * *----------------------------------------------------------------------* FORM HISTORIE_ANZEIGEN. DATA: BEGIN OF VTAB OCCURS 100, WERT(250) TYPE C. DATA: END OF VTAB. DATA: DFIELDS LIKE DYNPREAD OCCURS 1 WITH HEADER LINE, FIELDS LIKE HELP_VALUE OCCURS 1 WITH HEADER LINE, OLD_CHECKVALUE LIKE HELP_INFO-FLDVALUE, REPID LIKE SY-REPID, DYNNR LIKE SY-DYNNR. * Wertetabelle füllen LOOP AT TCOM. VTAB-WERT = TCOM-COMMAND(250). APPEND VTAB. ENDLOOP. * erlaubte Werte anzeigen CLEAR FIELDS. FIELDS-TABNAME = 'ZBEZSTRUC'. FIELDS-FIELDNAME = 'COMMAND'. FIELDS-SELECTFLAG = 'X'. APPEND FIELDS. CALL FUNCTION 'HELP_VALUES_GET_WITH_TABLE' EXPORTING DISPLAY = '' FIELDNAME = 'ZBEZSTRUC' TABNAME = 'COMMAND' NO_MARKING_OF_CHECKVALUE = 'X' TITEL = TEXT-001 SHOW_ALL_VALUES_AT_FIRST_TIME = 'X' IMPORTING SELECT_VALUE = COMMAND TABLES FIELDS = FIELDS VALUETAB = VTAB EXCEPTIONS FIELD_NOT_IN_DDIC = 1 MORE_THEN_ONE_SELECTFIELD = 2 NO_SELECTFIELD = 3 OTHERS = 4. IF SY-SUBRC <> 0. MESSAGE E103(ZK) WITH 'HELP_VALUES_GET_WITH_TABLE' SY-SUBRC. ENDIF. * prüfen, ob Wert zurückgegeben wurde IF COMMAND IS INITIAL. EXIT. ENDIF. * Dynpro-Felder definieren CLEAR DFIELDS. DFIELDS-FIELDNAME = 'COMMAND'. DFIELDS-FIELDVALUE = COMMAND. APPEND DFIELDS. * Werte auf Dynpro ausgeben CALL FUNCTION 'DYNP_VALUES_UPDATE' EXPORTING DYNAME = SY-REPID DYNUMB = SY-DYNNR TABLES DYNPFIELDS = DFIELDS EXCEPTIONS INVALID_ABAPWORKAREA = 1 INVALID_DYNPROFIELD = 2 INVALID_DYNPRONAME = 3 INVALID_DYNPRONUMMER = 4 INVALID_REQUEST = 5 NO_FIELDDESCRIPTION = 6 UNDEFIND_ERROR = 7 OTHERS = 8. IF SY-SUBRC <> 0. MESSAGE E103(ZK) WITH 'DYNP_VALUES_UPDATE' SY-SUBRC. ENDIF. ENDFORM. " HISTORIE_ANZEIGEN |
variable Werte in Varianten (Prog - Matthias König)
Für die variable Selektion mit Varianten gibt es drei verschiedene Möglichkeiten:
(1) Variable Datumsberechnung
Wenn Sie in einer Variante z.B. das Tagesdatum oder den letzten Tag des Monats verwenden möchten, können Sie die variable Datumsberechnung nutzen.
(2) Benutzerspezifische Festwerte
Sollen bestimmte Selektionskriterien mit Hilfe einer Variante benutzerspezifisch gefüllt werden, so verwenden Sie benutzerspezifische Festwerte.
(3) In Tabelle TVARV definierte Festwerte
Sollen bestimmte Selektionskriterien mit Hilfe einer Variante aufgabenspezifisch gefüllt werden, so legen Sie Festwerte in Tabelle TVARV ab. Um nicht für jede minimale Änderung der Selektionswerte eine neue Variante anlegen und diese für jeden Lauf im Hintergrund neu angeben zu müssen, können Sie einer Selektion einen Wert in der Tabelle TVARV zuordnen und dann jedesmal nur diesen Wert ändern. Dies ist besonders dann wichtig, wenn der entsprechende Wert auf dem Selektionsbild eingabegeschützt ist.
Varianten per Programm ändern (Prog - Matthias König)
FBs RS_VARIANT_CONTENTS und RS_CHANGE_CREATED_VARIANT verwenden
REPORT ZZJBREPX MESSAGE-ID ZJ NO STANDARD PAGE HEADING LINE-SIZE 170. TABLES: VARID. DATA: I_VTAB LIKE RSPARAMS OCCURS 0 WITH HEADER LINE. SELECT-OPTIONS: S_VARI FOR VARID-VARIANT. ************************************************************************ START-OF-SELECTION. ******************* * Iteration über Varianten SELECT * FROM VARID WHERE REPORT = 'ZJBLDFTP' AND VARIANT IN S_VARI. * .. Variante einlesen CALL FUNCTION 'RS_VARIANT_CONTENTS' EXPORTING REPORT = VARID-REPORT VARIANT = VARID-VARIANT TABLES VALUTAB = I_VTAB EXCEPTIONS VARIANT_NON_EXISTENT = 1 VARIANT_OBSOLETE = 2 OTHERS = 3. * .. Variantenwert ändern READ TABLE I_VTAB WITH KEY SELNAME = 'P_SCRIPT'. IF NOT ( SY-SUBRC = 0 AND I_VTAB-LOW CP '/data/bin*' ). CONTINUE. ENDIF. REPLACE '/data/bin' WITH '/data/F30/bin' INTO I_VTAB-LOW. MODIFY I_VTAB INDEX SY-TABIX. * .. Variante anpassen CALL FUNCTION 'RS_CHANGE_CREATED_VARIANT' EXPORTING CURR_REPORT = VARID-REPORT CURR_VARIANT = VARID-VARIANT VARI_DESC = VARID TABLES VARI_CONTENTS = I_VTAB EXCEPTIONS ILLEGAL_REPORT_OR_VARIANT = 1 ILLEGAL_VARIANTNAME = 2 NOT_AUTHORIZED = 3 NOT_EXECUTED = 4 REPORT_NOT_EXISTENT = 5 REPORT_NOT_SUPPLIED = 6 VARIANT_DOESNT_EXIST = 7 VARIANT_LOCKED = 8 SELECTIONS_NO_MATCH = 9 OTHERS = 10. ENDSELECT. |
Verbuchung (Prog - Matthias König)
- FB in UPDATE TASK kann in V1 und V2 Verbuchung ausgeführt werden - V1 Verbuchung: alle in einer LUW gestarteten FBs laufen in einer weiteren LUW ab - V2 Verbuchung: alle in einer LUW gestarteten FBs laufen in einer separaten LUW ab - SET UPDATE TASK LOCAL: alle in einer LUW gestarteten V1-FBs laufen in der gleichen LUW ab - FB in BACKGROUND TASK erlaubt CALL TRANSACTION
Währungsfeld (Prog - Matthias König)
Currency-Felder werden intern mit Nachkommastellen dargestellt. Um also Konvertierungs-fehler bei Zuweisungen zu Feldern eines anderen Types zu vermeiden, sollte man die zugehörige Domäne immer mit Nachkommastellen definieren. Wie die Anzahl der Nachkommastellen definiert ist, ist von der Währung abhängig. Defaultmäßig wird von 2 Nachkommastellen ausgegangen.
Währungsumstellung (Prog - Matthias König)
SAPREWU6 ist Report zum Umstellen der Währung im Vertrieb
zusätzliche Detailfunktionen für SM30 (Prog - Matthias König)
Übersichtsbild:
...
PROCESS AFTER INPUT.
...
ENDLOOP.
MODULE liste_okcode. " MK
MODULE liste_after_loop.
Detailbild
PROCESS BEFORE OUTPUT.
MODULE DETAIL_INIT.
MODULE DETAIL_PFSTATUS. " MK
*
PROCESS AFTER INPUT.
MODULE DETAIL_EXIT_COMMAND AT EXIT-COMMAND.
MODULE DETAIL_SET_PFSTATUS.
MODULE DETAIL_SHOW. " MK
...
MODULE LISTE_OKCODE INPUT. if function = 'DETA'. get cursor field w_fname value w_value. ... ENDMODULE. " LISTE_OKCODE INPUT MODULE DETAIL_PFSTATUS OUTPUT. * PF-Status setzen SET PF-STATUS 'ZUDG' OF PROGRAM 'SAPLSVIM'. ENDMODULE. " DETAIL_PFSTATUS OUTPUT MODULE DETAIL_SHOW INPUT. * Details anzeigen if sy-ucomm = 'SLCT'. get cursor field w_fname value w_value. case w_fname. ... ENDMODULE. " DETAIL_SHOW INPUT |
Ähnlichkeitsbestimmung zweier Strings (Prog - Matthias König)
Ähnlichkeitsbestimmung zweier Strings / Texte
FORM HB_NAME3_BESTIMMEN USING NAME3 LIKE JGTSADR-NAME3 STRAS LIKE JGTSADR-STRAS. DATA: BEGIN OF I_LCS OCCURS 0, ZEILE LIKE SY-TABIX, SPALTE LIKE SY-TABIX, WERT LIKE SY-TABIX, END OF I_LCS. DATA: STR1 LIKE JSTORTPRO-SUCHFELDO, STR2 LIKE JSTORTPRO-SUCHFELDO, WERT LIKE SY-TABIX, WERT1 LIKE SY-TABIX, WERT2 LIKE SY-TABIX, IND1 LIKE SY-TABIX, IND2 LIKE SY-TABIX, MIN1 LIKE SY-TABIX, MIN2 LIKE SY-TABIX, LEN1 LIKE SY-TABIX, LEN2 LIKE SY-TABIX, ANZ1 LIKE SY-TABIX, ANZ2 LIKE SY-TABIX, Z1 LIKE SY-BATCH, Z2 LIKE SY-BATCH. * Vergleichsstrings bestimmen CALL FUNCTION 'ISM_CONVERT_TO_NORMAL_FORM' EXPORTING INPUT = NAME3 IMPORTING OUTPUT = STR1. CALL FUNCTION 'ISM_CONVERT_TO_NORMAL_FORM' EXPORTING INPUT = STRAS IMPORTING OUTPUT = STR2. * Zeichen ersetzen TRANSLATE STR1 USING '0 1 2 3 4 5 6 7 8 9 . , / - + ( ) ; : < > | '. TRANSLATE STR2 USING '0 1 2 3 4 5 6 7 8 9 . , / - + ( ) ; : < > | '. CONDENSE STR1 NO-GAPS. CONDENSE STR2 NO-GAPS. * LCS-Tabelle initialisieren LEN1 = STRLEN( STR1 ). ANZ1 = LEN1 + 1. LEN2 = STRLEN( STR2 ). ANZ2 = LEN2 + 1. IND1 = 0. DO ANZ1 TIMES. IND2 = 0. DO ANZ2 TIMES. I_LCS-ZEILE = IND1. I_LCS-SPALTE = IND2. I_LCS-WERT = 0. APPEND I_LCS. ADD 1 TO IND2. ENDDO. ADD 1 TO IND1. ENDDO. * Länge des längsten gemeinsamen Substring bestimmen IND1 = 1. DO LEN1 TIMES. IND2 = 1. MIN1 = IND1 - 1. Z1 = STR1+MIN1(1). DO LEN2 TIMES. MIN2 = IND2 - 1. Z2 = STR2+MIN2(1). IF Z1 = Z2. READ TABLE I_LCS WITH KEY ZEILE = MIN1 SPALTE = MIN2 BINARY SEARCH. WERT = I_LCS-WERT + 1. READ TABLE I_LCS WITH KEY ZEILE = IND1 SPALTE = IND2 BINARY SEARCH. I_LCS-WERT = WERT. MODIFY I_LCS INDEX SY-TABIX. ELSE. READ TABLE I_LCS WITH KEY ZEILE = MIN1 SPALTE = IND2 BINARY SEARCH. WERT1 = I_LCS-WERT. READ TABLE I_LCS WITH KEY ZEILE = IND1 SPALTE = MIN2 BINARY SEARCH. WERT2 = I_LCS-WERT. IF WERT1 >= WERT2. READ TABLE I_LCS WITH KEY ZEILE = IND1 SPALTE = IND2 BINARY SEARCH. I_LCS-WERT = WERT1. MODIFY I_LCS INDEX SY-TABIX. ELSE. READ TABLE I_LCS WITH KEY ZEILE = IND1 SPALTE = IND2 BINARY SEARCH. I_LCS-WERT = WERT2. MODIFY I_LCS INDEX SY-TABIX. ENDIF. ENDIF. ADD 1 TO IND2. ENDDO. ADD 1 TO IND1. ENDDO. WERT = I_LCS-WERT. * Ähnlichkeitwert bestimmen (in Prozent) WERT = WERT * 200 / ( LEN1 + LEN2 ). * NAME3 nur übernehmen, wenn Ähnlichkeitswert < 75 % ist IF WERT >= 75. CLEAR NAME3. ENDIF. ENDFORM. " HB_NAME3_BESTIMMEN |
Änderungsbelege (Prog - Matthias König)
Der FB zum Erzeugen von Änderungsbelegen kann über die Workbench generiert werden: Entwicklung => weitere Werkzeuge => Änderungsbelege; steuernde Kennzeichen siehe Datei
ADDRESS (Script - Matthias König)
Adresse aufbereiten
/: ADDRESS PARAGRAPH A3 /: TITLE &VBDKR-ANRED& /: NAME &VBDKR-NAME1&, &VBDKR-NAME2&, &VBDKR-NAME3&, &VBDKR-NAME4& /: STREET &VBDKR-STRAS& /: POBOX &VBDKR-PFACH& CODE &VBDKR-PSTL2& CITY &VBDKR-PFORT& /: POSTCODE &VBDKR-PSTLZ& /: REGION &VBDKR-REGIO& /: CITY &VBDKR-ORT01&, &VBDKR-ORT02& /* /* *** Österreichische Adresse als deutsche Adresse aufbereiten /: IF &VBDKR-LAND1& = 'AT' /: COUNTRY 'DE' /: FROMCOUNTRY 'DE' /: ELSE /: COUNTRY &VBDKR-LAND1& /: FROMCOUNTRY &VBDKR-SLAND& /: ENDIF |
Allgemein (Script - Matthias König)
Wird eine neue Seite gestartet, werden zunächst alle Seitenfenster alphabetisch aufsteigend nach ihrem Namen nach aufgerufen. Es werden alle Textelemente gesetzt, die kein Absatzformat /E haben. Ausnahme Seitenfenster MAIN. Die Textelemente, die kein Absatzformat /E haben, werden nur auf der ersten Seite gesetzt.
Anzahl Seiten eines Dokuments (Script - Matthias König)
Die Gesamtsietenzahl eines SAP Script Dokuments kann mit der Variablen &SAPSCRIPT-FORMPAGES& ausgegeben werden.
Bilder laden (Script - Matthias König)
1) TIFF-Bild mit Reports RSTXLDMC in einen Standard-Text laden (Typ BMON)
2) Mit SAP-Script Befehl /: INCLUDE 'Z_QS9001' OBJECT TEXT ID ST wird Bild in das Formular eingebunden
/: POSITION XORIGIN '-0.02' CM YORIGIN '21.1' CM /: BOX YPOS '5.08' CM WIDTH 7 MM HEIGHT 0 TW FRAME 12 TW
DEFINE (Script - Matthias König)
/: IF &YYSCRIPT-KZ& = '' /: DEFINE &KOPIE& = '* Kopie *' /: ELSE /: DEFINE &KOPIE& = '' /: ENDIF
Duplexdruck (Script - Matthias König)
Für den betroffenen Gerätetypen müssen folgende zusätzlichen Print-Controls definiert werden (Die Hexwerte beziehen sich auf PCL-Drucker):
SPMSI 1B266C3053 (Simplex)
SPMDU 1B266C3153 (Duplex)
SPMTU 1B266C3253 (Tumple Duplex)
SPMFS 1B26613147 (Papiervorderseite)
SPMBS 1B26613247 (Papierrückseite)
WICHTIG: Damit der Duplexdruck korrekt funktioniert, darf im Formular auf der Seite, die auf der Rückseite gedruckt werden soll, kein Resourcenname angegeben werden. Ansonsten wird eine neue Seite begonnen und dort auf der Rückseite gedruckt.
eigene Standardsymbole hinzufügen (Script - Matthias König)
- in Tabelle TTDTG eigene Symbole hinzufügen (SM30, Z...)
- Symbol kann im Text sofort angesprochen werden
Geviert bzw. kleines Leerzeichen (Script - Matthias König)
Zunächst ein Zeichenformat (z.B. G = Geviert) im Font mit Größe 7pt definieren.
Anschließend wird das Geviert folgendermaßen verwendet: ...
Hinweis auf Folgeseite (Script - Matthias König)
Die Ermittlung der Folgeseite wird durch den SAP-Script Parameter &NEXTPAGE& gesteuert. Liegt die letzte Seite vor, hat &NEXTPAGE& den Wert 0.
Im Formular folgende Logik einbauen:
/: IF &NEXTPAGE& > '0'
* Fortsetzung auf Seite - &NEXTPAGE& -
/: ENDIF
http://www.trapp-it-consulting.com/ (Script - Maria Fernandez)
News zu aktuellen Messen, Tipps und Tricks rund um SAP, speziell Industrie 4.0 auf http://www.trapp-it-consulting.com/
http://www.trapp-it-consulting.com/ |
INCLUDE (Script - Matthias König)
/: INCLUDE &VBDKA-TDNAME& OBJECT VBBK ID Y008 PARAGRAPH H2 /: IF &SAPSCRIPT-SUBRC& <> ' 0' A2 ... /: ENDIF
POSITION (Script - Matthias König)
/: POSITION XORIGIN '-0.02' CM YORIGIN '21.1' CM /: BOX YPOS '5.08' CM WIDTH 7 MM HEIGHT 0 TW FRAME 12 TW
Softblank (Script - Matthias König)
Soll in SAPScript ein Leerzeichen verwendet werden, bei dem kein Zeilenumbruch erfolgen soll (Softblank, Non Breaking Space), so kann dies mit der Verwendung des ASCII-Zeichens <32> erfolgen.
* &YND88-PLZ_3&&'<32>'YND88-ORT_3& |
Symbole (Script - Matthias König)
- &ULINE(71)& Linie - &PAGE& Seitenzähler
virtueller Drucker (Script - Matthias König)
In der SPAD kann ein virtueller Drucker als Ausgabegerät angelegt werden, dem ein UNIX-Script mitgegeben werden kann, d.h. statt zu drucken, wird das Script ausgeführt (siehe OSS 6753).
Koppelart = L (Druck lokal via LP/LPR)
Kommandosatz-Kennung = [Zeichen] (=> Menü: bearbeiten - Kommandosatz)
Kommando Übergabe: /data/bin/print_script.sh &F &P '&T' &s (OSS 15355)
Kommando nachfrage: echo ""
Unix-Script: # # Datei: print_script.sh # Funktion: Weiterverarbeitung von R/3-Druckaufträgen per Script # Aufruf: do_print.sh &F &P '&T' &s # # Autor: Matthias König (FAZ-IT) # Datum: 06.04.2004 # # Bemerkungen: # - Das Drucken einer Druckdatei geschieht mit dem Befehl # lp -d [Drucker] -oudatatype=raw [Dateiname], z.B. # lp -d PR0411 -oudatatype=raw TEST.pcl # # Variablen bestimmen PRINTFILE=$1 PRINTER=$2 TITLE=$3 SUFFIX=$4 # GM-Consult if test "$PRINTER" = "V015" ; then cp $PRINTFILE /data/E40/010/vertr/mboxout/gmc/$4.pcl fi |
WRITE_FORM (Script - Matthias König)
prüfen, ob Element ausgegeben wurde
DATA: AUSKZ(1) TYPE C. CALL FUNCTION 'WRITE_FORM' EXPORTING ELEMENT = 'ITEM_SUM1' TYPE = 'BOTTOM' IMPORTING PENDING_LINES = AUSKZ EXCEPTIONS ELEMENT = 1 WINDOW = 2. IF NOT AUSKZ IS INITIAL. * .. keine Ausgabe ENDIF. |
Zähler (Script - Matthias König)
/* *** Zähler hochzählen, ohne ihn anzuzeigen L &SAPSCRIPT-COUNTER_9(+0)& /: IF &SAPSCRIPT-COUNTER_9& = '1'
auf Liste suchen
/$TAB (TCode - Matthias König)
Puffertabelle synchronisieren
Batch Input aufzeichnen (TCode - Matthias König)
Batch-Input Recorder, Batch-Input Befehle aufzeichnen:
Transaktion SHDB
SAP Erweiterungen
CODE_SCANNER (TCode - Matthias König)
Report AFX_CODE_SCANNER
Report zum Suchen nach Codingstellen.
Datenbankstatistik
Währungs-Umrechnung zum Stichtag (z.B. auf EURO) von Z-Feldern
Logische Dateipfade pflegen
Systemparameter pflegen (alle Parameter eines Applikationsservers mit Report RSPARAM)
Systemparameter anzeigen (alle Parameter eines Applikationsservers mit Report RSPARAM)
ABAP/4-Programm-Mengen-Bearbeitung; mit Hilfe dieser Transaktion kann eine Syntaxprüfung über eine definierte Menge von Programmen erfolgen.
Mandanten anzeigen (? Änderungen und Transporte)
Systemänderbarkeit ändern
Pflege der Textelemente
SE80 / SEU (TCode - Bernhard Diemer)
Repository Browser
Transaktionspflege, Parametertransaktion
Pflege Reportingbaum
Pflege logischer Dateinamen (mandantenabhängig)
Zusätzlich zu den mandantenübergreifenden Dateinamen (Transaktion FILE) können hier mandantenabhängige Namen gepflegt werden.
Systemnachricht erfassen
Benutzer anzeigen (=> Springen => Memory: Speicherverbrauch)
SYSLOG auswerten
Event erzeugen. Auslösen kann man einen Event mit den FB BP_EVENT_RAISE bzw.mit dem Report ZTSEVT00.
Kurznachricht als SAP-Mail senden
PC-Arbeitsverzeichnis pflegen
Modifikationen bei Releasewechsel
ST01 Berechtigungstrace (TCode - Matthias König)
ST01 für Berechtigungstrace
Datenbank Performance Analyse
- Oracle Session drücken
- nach Prozess-Id des Prozesses suchen (SM50 / SM51)
- Doppelclick
- Explain ausführen
fehlende Berechtigung ermitteln
Transaction LSMW (TCode - Holger Onnen)
Hallo,
SAP Bietet ab dem Rel. 4.6 alternativ eine Funktion zur Erstellung von Datenübernahmeprogrammen und Batch-Input Mappen.
Die Transaktion lautet LSMW *Legacy System Migration Workbench*.
Sollte die Funktion nicht mögliche sein, so steht der Download auf der SAP HP zur Verfügung.
ABAP Code verstecken (Trick - Bernhard Diemer)
In die erste Zeile tippen
*@#@@[SAP]
ABER VORSICHT ! Besser vorher eine Sicherungskopie machen !!!!
Batch-Input Daten nachträgich ändern (Trick - Matthias König)
Mit Hilfe des folgenden Programmes können die Batch-Input Daten nachträglich geändert werden. Im Beispiel wird das Datum 18.02.2003 in 21.03.2003 geändert.
Die QID kann mit Hilfe der Tabelle APQI ermittelt werden (GROUPID ist der Mappenname).
REPORT ZZJBREPX MESSAGE-ID ZJ LINE-SIZE 1000. TABLES: APQD. DATA: I_APQD LIKE APQD OCCURS 0 WITH HEADER LINE. SELECT * INTO TABLE I_APQD FROM APQD WHERE QID = '20030220195707674406'. LOOP AT I_APQD. REPLACE '21.02.2003' WITH '18.03.2003' INTO I_APQD-VARDATA. APQD = I_APQD. UPDATE APQD. WRITE:/ I_APQD-VARDATA(1000). ENDLOOP. COMMIT WORK. |
Befehle bei Batch-Input Verarbeitung (Trick - Matthias König)
/bend Batch-Input beenden
/bdel Laufende Batch-Input-Transaktion in der Mappe loeschen.
/bda Umschalten Anzeigemodus auf 'sichtbar abspielen'
/bde Umschalten Anzeigemodus auf 'nur Fehler anzeigen'
Blog zu Berechtigungen (Trick - Matthias König)
Das Technik-Blog zum Thema Berechtigungen hat den folgenden Link:
http://blog.technik.berechtigung.sybeklue.de
CONCATENATE mit Blanks als Zwischenraum (Trick - Matthias König)
CONCATENATE 'abc' ` ` 'def' 'ghi' INTO text.
liefert
text = 'abc defghi'.
CONCATENATE 'abc' ` ` 'def' 'ghi' INTO text. |
Customizing erweitern (Trick - Matthias König)
Release 4.7
- Transaktionen SIMGH: IMG-Struktur pflegen
- Transaktion S_IMG_EXTENSION: Erweiterung des (Standard-)
Einführungsleitfadens
================================================================================
vorherige Releases
- Tabelle anlegen und Pflegedialog mit Transaktion SE54 generieren
- Im Customizing neues Buch anlegen, ggf. neues Buch zu SAP-IMG hinzufügen
und IMGs generieren
- SPRO => Werkzeuge => Erweiterungen => SAP Referenz-IMG
- neues Buch anlegen: Struktur ZIMG_ALL, Sicht STANDARD ? Ändern; Knoten
hinzufügen (Vaterknoten: CHAP, ZCHAP_
ZIMG_
- für ausführbare Knoten müssen die Attribute gepflegt werden
(Titel pflegen => Attribute):
o Zuordnung zu Vorgehensmodell = 201
o Notwendigkeit der Bearbeitung = 1
o kritische Funktion = 1
o Aktivitätstyp = 0
o Anwendungskomponente pflegen
- Struktur => Status setzen => Endstatus
- ggf. neues Buch zu SAP-IMG hinzufügen: Struktur SIMG_ALL, Sicht STANDARD
- Unternehmens-IMG und Projekt-IMGs nachgenerieren
- Pflegeobjekte ändern (SE54 => Umfeld => Pflegeobjekte => Ändern => F3 =>
Objekt markieren => Subobjekte => Transaktionscode SM30, Buch ZIMG_ALL,
Doku-Name ZIMG_
--------------------------------------------------------------------------------
- Um eine Liste mit Aktivitäten zu bekommen, müssen mehrere Subobjekte zur
selben IMG Anbindung definiert werden (SE54 => Umfeld => Pflegeobjekte =>
Ändern => F3 => Objekt markieren => Subobjekte)
- andere Objekte als SM30 können über die Transaktion SOBJ gepflegt werden
Customizingtabelle abgleichen (Trick - Matthias König)
Transaktion SPRO: Werkzeuge => Customizing-Objekte => Umfeldvergleich => View/Tabelle (vor 4.0 gab es den Report RSTABCMP)
DB Index Statistikerstellung (Trick - Matthias König)
Mit Hilfe des Reports RSANAORA können die Statistikdaten zu einem Index bzw. allen Indezes neu erstellt werden.
Es genügt der Tabellenname und "Ausführen".
Fehlende Koppelarten zum Drucken (Trick - Hans-Peter Ruß)
SAP bietet zum Drucken verschiedene Koppelarten an. Es werden aber nicht alle im Pulldownmenü angezeigt und sind somit auch nicht auswählbar. Mit dem folgenden Report können Sie die fehlenden Koppelarten hinzufügen.
TA SE38 starten
Report "RSPO0075" eintragen
Die gewünschte Koppelart markieren
Mit F8 ausführen
Die Koppelart steht somit sofort zur Verfügung.
Format einer csv-Datei (Trick - Matthias König)
siehe Beispiel:
"Name","Vornme","Telefon","Zahl"
"König, Test","Matthias","",-20
"Maier","Sepp","1119",35.10
Diese Datei mit Dateinamen test.csv kann per Doppelklick automatisch im Excel geöffnet werden.
HTML Inplace Anzeige bleibt weiß (Trick - Hans-Peter Ruß)
Die SAP Inplace Anzeige zum Anzeigen von eingescannten oder abgelegten Dokumenten bleibt weiß.
Die im über den ContentServer auf einer SAPDB abgelegten Fotos/Bilder werden nicht angezeigt.
In vielen Fällen wird der Microsoft Standard Viewer geöffnet, möchte man aber nicht immer haben.
Hier die Lösung des Problems: Installieren Sie auf dem Rechner auf welchem die Bilder angezeigt werden sollen das unter folgendem LINK befindliche Tool.
http://www.alternatiff.com
Es werden 2 Registry Einträge gesetzt und eine *.ocx Datei installiert.
Danach sollte es problemlos funktionieren.
Job zu Report finden (Trick - Matthias König)
Tabelle TBTCP
Kurz-Dumps löschen (Trick - Matthias König)
Report RSNAPREO
Logo der Starttransaktion ändern (Trick - Matthias König)
- mit Transaktion SMW0 Bild (jpg/gif) laden; dazu "Binäre Daten" auswählen und F8; Selektionsbild freilassen; Objektname mit Z beginnen lassen und Bild hochladen (u.U. muss der MIME-Typ gepfelgt werden, z.B. jpg - *.jpg)
- SM30 Tabelle SSM_CUST Parameter START_IMAGE = Objektname und RESIZE_IMAGE = NO setzen
Lokal drucken (Trick - Matthias König)
Transaction SP01 => Drucker-Button => Lokal drucken Folgende Parameter müssen eingestellt werden: - Gerätetyp HPLJ4 - Programm W:\SAPGUI.W32\SAPLPD\SAPLPD.EXE Pfad für das Programm SAPLPD.EXE - Parameter -f c:\tmp\prntdata.lpd -p HP4Plus HP4Plus = Windows-Druckername - Dateiname c:\tmp\prntdata.lpd Die Parameter werden anschließend für das angegebene Terminal gespeichert.
Mail Absender ändern (Trick - Matthias König)
- FB SO_NEW_DOCUMENT_SEND_API1 (o.a.) geben Objid zurück
- in Tabelle SOUD Felder USRTP USRYR USRNO zu User suchen (über USRNAM)
- in Tabellen SOOD und SOOS OWNNO, OWNNAM, CRONO, CRONAM bzw. SNDNO, SNDNAM entsprecehend anpassen
mit SE16 Daten ändern (Trick - Matthias König)
1. Möglichkeit:
- zum Databrowser springen
- in Debugmodus wechseln (/h)
- Befehl AEN2 (ANVO, DEL5) eingeben oder ab 3.0G Funktion Anzeigen und im Debugger SY-XCODE = 'AEN2' setzen
- Breakpoint bei Sprachelement MESSAGE setzen
- Weiter
- Breakpoint in Zeile davor setzen
- Einträge markieren
- Befehl AEN2 eingeben oder ab 3.0G Funktion Anzeigen und im Debugger SY-XCODE = 'AEN2' setzen
- Dd02l-Mainflag = 'X' setzen
2. Möglichkeit:
- zum Databrowser springen
- in Debugmodus wechseln (/h)
- Breakpoint bei Ereignis/Unterprg. SET_STATUS_VAL setzen
- CODE = 'EDIT' setzen
Mit SE16N Daten ändern (Trick - Bigfoot)
Mit der Transaktion SE16N lassen sich Daten in nahezu allen Tebellen ändern, egal ob die Tabelle dies per Data-Dictionary Einstellung zulässt oder nicht:
- SE16N aufrufen
- Tabelle auswählen
- Funktionscode &SAP_EDIT eingeben
- die Checkbox "Einträge pflegen" ist nun gesetzt
- F8/Ausführen
- in der Tabellenansicht können nun Daten geändert werden
Neue Session eröffnen (Trick - Bernhard Diemer)
Einfach STRG + * drücken :-)
Pfad für Dateitransfer (Trick - Matthias König)
Mit Hilfe des Parameters GR8 kann der Dateipfad für den Download global vorbelegt werden
Probleme beim Transport (Trick - Matthias König)
Hängt ein Transportauftrag beim Importieren, kann dies durch das Löschen von überflüssigen Headersätzen in der Tabelle TRBAT behoben werden.
Report RPINCL10 - Stringsuche in Reports (Trick - Matthias König)
Mit Hilfe des Reports RPINCL10 kann in anderen Reports nach beliebigen Strings gesucht werden. Dabei können Includes und externe PERFORMs aufgelöst werden.
Report RSCONN01 (Trick - Matthias König)
Mit Hilfe des Reports kann der SAP-Connect Sendeprozeß gestartet werden.
Report zum Downloaden aller Includes eines Programms (Trick - Matthias König)
siehe Code
REPORT ZINCLUDE NO STANDARD PAGE HEADING. TABLES: TRDIR. DATA: PNAME LIKE RSEUX-CP_VALUE, FLAG LIKE SY-BATCH. DATA: BEGIN OF I_INCL OCCURS 0, PNAME LIKE RSEUX-CP_VALUE, END OF I_INCL. DATA: BEGIN OF I_DTAB OCCURS 0, LINE(72) TYPE C, END OF I_DTAB. DATA: BEGIN OF I_PTAB OCCURS 0, LINE(72) TYPE C, END OF I_PTAB. ************************************************************************ * Selektionsbild **************** SELECTION-SCREEN BEGIN OF BLOCK BL1 WITH FRAME TITLE TEXT-BL1. PARAMETERS: P_FUGRP LIKE RSEUX-CF_VALUE, P_PNAME LIKE RSEUX-CP_VALUE. SELECTION-SCREEN ULINE. PARAMETERS: P_PCDAT LIKE RLGRAP-FILENAME DEFAULT 'C:\tmp\'. SELECTION-SCREEN END OF BLOCK BL1. ************************************************************************ AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_PCDAT. ************************************************* * Datei auf PC auswählen CALL FUNCTION 'WS_FILENAME_GET' EXPORTING DEF_FILENAME = P_PCDAT MASK = ',*.txt,*.txt.' MODE = 'O' TITLE = 'Bitte Datei auswählen' IMPORTING FILENAME = P_PCDAT EXCEPTIONS INV_WINSYS = 1 NO_BATCH = 2 SELECTION_CANCEL = 3 SELECTION_ERROR = 4 OTHERS = 5. ************************************************************************ START-OF-SELECTION. ******************* * Programmname bestimmen IF NOT P_FUGRP IS INITIAL. CONCATENATE 'SAPL' P_FUGRP INTO PNAME. ELSE. PNAME = P_PNAME. ENDIF. * Dateinamen anhängen CONCATENATE P_PCDAT PNAME '.txt' INTO P_PCDAT. * Includes bestimmen CALL FUNCTION 'GET_INCLUDETAB' EXPORTING PROGNAME = PNAME TABLES INCLTAB = I_INCL EXCEPTIONS OTHERS = 1. * ggf. aktuelles Programm hinzufügen IF PNAME(3) <> 'SAP'. I_INCL-PNAME = PNAME. INSERT I_INCL INDEX 1. ENDIF. IF I_INCL[] IS INITIAL. WRITE:/ 'Es wurden keine Includes gefunden.'. EXIT. ENDIF. * Iteration über Includes LOOP AT I_INCL. * .. bestimmte Includes nicht berücksichtigen CHECK NOT I_INCL-PNAME(1) CA '><'. * .. Quellcode lesen READ REPORT I_INCL-PNAME INTO I_PTAB. * .. Attribute selektieren SELECT SINGLE * FROM TRDIR WHERE NAME = I_INCL-PNAME. IF SY-SUBRC <> 0. CLEAR TRDIR. ENDIF. * .. Kopf ausgeben IF FLAG IS INITIAL. FLAG = 'X'. ELSE. PERFORM HEAD USING '' ''. PERFORM HEAD USING '' ''. PERFORM HEAD USING '' ''. ENDIF. PERFORM HEAD USING '=' ''. PERFORM HEAD USING I_INCL-PNAME ''. PERFORM HEAD USING '=' ''. PERFORM HEAD USING 'Autor :' TRDIR-CNAM. PERFORM HEAD USING 'Datum :' TRDIR-CDAT. PERFORM HEAD USING '=' ''. PERFORM HEAD USING '' ''. * .. Quellcode anhängen APPEND LINES OF I_PTAB TO I_DTAB. * .. Include-Namen ausgeben WRITE:/ '..', I_INCL-PNAME, 'wurde in Datei geschrieben'. ENDLOOP. * gesamten Quellcode in Datei schreiben CALL FUNCTION 'WS_DOWNLOAD' EXPORTING FILENAME = P_PCDAT FILETYPE = 'ASC' TABLES DATA_TAB = I_DTAB EXCEPTIONS FILE_OPEN_ERROR = 1 FILE_WRITE_ERROR = 2 INVALID_FILESIZE = 3 INVALID_TABLE_WIDTH = 4 INVALID_TYPE = 5 NO_BATCH = 6 UNKNOWN_ERROR = 7 GUI_REFUSE_FILETRANSFER = 8 OTHERS = 9. *&---------------------------------------------------------------------* *& Form HEAD *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM HEAD USING MODUS TEXT. DATA: TEXT_H(72) TYPE C. * Fallunterscheidung Modus CASE MODUS. WHEN ''. CLEAR I_DTAB. WHEN '='. CLEAR I_DTAB. I_DTAB+00(40) = '*======================================='. I_DTAB+40(32) = '===============================*'. WHEN OTHERS. CLEAR I_DTAB. I_DTAB+00(01) = '*'. I_DTAB+71(01) = '*'. CONCATENATE MODUS TEXT INTO TEXT_H SEPARATED BY SPACE. I_DTAB+02(68) = TEXT_H. ENDCASE. APPEND I_DTAB. ENDFORM. " HEAD |
RFC Aufruf erkennen (Trick - Matthias König)
Um innerhalb eines ABAP Programms zu erkennen, ob dieses per RFC Aufruf aufgerufen wurde, kann folgender Befehl verwendet werden (s. auch FuGr URFC):
CALL 'RFCControl' ID 'CODE' FIELD 'B'.
IF SY-SUBRC = 0.
WRITE:/ 'Programm wurde per RFC aufgerufen.'.
ELSE.
WRITE:/ 'Programm wurde n i c h t per RFC aufgerufen.'.
ENDIF.
SAP-Mail löschen (Trick - Matthias König)
SOUD(SAPNAM, USRNAM) -> SOFM(FOLTP, FOLYR, FOLNO)
Schutz einer Variante aufheben (Trick - Matthias König)
Mit Hilfe des Reports RSVARENT kann der Schutz einer Variante aufgehoben werden.
SE16 mit Pflegeberechtigung (Trick - Matthias König)
Der folgende Report arbeitet wie die Transaktion SE16 mit Pflegeberechtigung.
REPORT ZTABGEN. TABLES: TRDIR. DATA: BEGIN OF I_CODING_IN OCCURS 0, TEXT(72), END OF I_CODING_IN. DATA: BEGIN OF I_TEXTPOOL OCCURS 0, ID(1), KEY(8), DDIC(1), LUFT(7), ENTRY(255), END OF I_TEXTPOOL. DATA: I_LINE LIKE TLINE OCCURS 0 WITH HEADER LINE, W_PROGNAME LIKE SY-REPID, W_INDEX LIKE SY-TABIX, W_TEXTTABLE LIKE DD08L-TABNAME. PARAMETERS: P_TABLE LIKE DATABROWSE-TABLENAME. ************************************************************************ START-OF-SELECTION. ******************* CONCATENATE '/1BCDWB/DB' P_TABLE INTO W_PROGNAME. W_PROGNAME+0(1) = 'Z'. DELETE REPORT W_PROGNAME. CALL FUNCTION 'RS_TABLE_REPORT_GENERATE' EXPORTING TABNAME = P_TABLE TEXTNAME = W_TEXTTABLE REPNAME = W_PROGNAME NEW_SEL = 'X' EXCEPTIONS CANCELLED = 1 EXECUTION_CANCELLED = 3 TABLEFIELD_TOO_LARGE = 4 OTHERS = 2. IF SY-SUBRC = 0. CALL FUNCTION 'RV_REPORT_READ' EXPORTING RR_REPORTNAME = W_PROGNAME IMPORTING RR_TRDIR = TRDIR TABLES RR_CODING = I_CODING_IN RR_DOCU = I_LINE RR_TEXTPOOL = I_TEXTPOOL EXCEPTIONS MODEL_CODE_NOT_FOUND = 1. IF SY-SUBRC NE 0. WRITE:/ 'Fehler beim Auslesen des Programms ', W_PROGNAME. STOP. ENDIF. LOOP AT I_CODING_IN. IF I_CODING_IN-TEXT CS 'sy-batch is initial'. W_INDEX = SY-TABIX. ENDIF. ENDLOOP. IF NOT W_INDEX IS INITIAL. CLEAR I_CODING_IN. I_CODING_IN-TEXT = ' INCLUDE ZVAE0300.'. W_INDEX = W_INDEX + 1. INSERT I_CODING_IN INDEX W_INDEX. ELSE. WRITE:/ 'Einfügestelle konnte nicht ermittelt werden.'. STOP. ENDIF. CALL FUNCTION 'RV_REPORT_WRITE' EXPORTING RW_REPORTNAME = TRDIR-NAME RW_TRDIR = TRDIR TABLES RW_CODING = I_CODING_IN RW_DOCU = I_LINE RW_TEXTPOOL = I_TEXTPOOL. IF SY-SUBRC EQ 0. SUBMIT (W_PROGNAME) VIA SELECTION-SCREEN AND RETURN. DELETE REPORT W_PROGNAME. ENDIF. ENDIF. *&---------------------------------------------------------------------* *& Form INSERT_LINE *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM INSERT_LINE USING W_VALUE W_INDEX. CLEAR I_CODING_IN. I_CODING_IN-TEXT = W_VALUE. W_INDEX = W_INDEX + 1. INSERT I_CODING_IN INDEX W_INDEX. ENDFORM. " INSERT_LINE |
Sperrmechanismus (Trick - Matthias König)
Reports zum Sperrmechanismus ein-/ausschalten: ZSENQON bzw. ZSENQOFF
Sprachentransporte (Trick - Bernhard Diemer)
SAP-Hinweis Nr. 95681 31.07.2003 Seite 1
Kundenübersetzungen sollen aus einem Entwicklungs-/Übersetzungssystem in
ein Test-/Produktivsystem transportiert werden.
Weitere Begriffe
Sprachentransport, Kundenübersetzung
Ursache und Voraussetzungen
o Ausgangssituation
In Kundensystemen werden einerseits Eigenentwicklungen in die
Produktivsprachen übersetzt und andererseits Modifikationen an
der Übersetzung des SAP-Standards vorgenommen.
o Ziel
Diese Übersetzungen sollen in Folgesysteme (Test, Produktion)
transportiert werden.
o Einschränkung
In 4.0 können Übersetzungen nur auf Basis von Entwicklunsklassen
transportiert werden. Erst ab 4.5 ist ein objektbezogener
Transport auf Basis von Transportaufträgen möglich.
o Voraussetzungen
Die Sprachentransporte müssen zwischen Systemen gleichen Release-
bzw. Korrekturstandes erfolgen !
o Weitere Informationen
Die aktuellste Information mit den meisten Details kann der
Online- Doku der SMLT (i-Button oder 'Umfeld' -> 'Infosystem')
entnommen werden. Unter dem Punkt 'Transportstrategien' wird das
im folgenden beschriebene nochmals zusammengefasst.
Lösung
Verfahren für 4.0
1. Übersetzungssystem
Die Übersetzung findet in einem beliebigen Mandanten des Systems
Seite 2
statt. Dies muß nicht zwangsläufig der Mandant 000 sein. Bei
Übersetzung in einem Mandanten <> 000 muß dafür gesorgt werden, daß
alle mandantenabhängigen Tabellen im Übersetzungsmandant aktuell
sind.
2. Sprachenexport
Der Sprachenexport wird mittels des Reports RSLTEXPO durchgeführt.
Legen Sie im Übersetzungsmandant eine Variante für den Report
RSLTEXPO mit dem Namen des Exportdirectories und den zu
exportierenden Sprachen an. Selektieren Sie danach als Transportart
'Kundenentwicklungen' und als Modus 'Entwicklungsklassen'. Über die
Drucktaste 'Auswahl' gelangen Sie auf ein Popup, in dem die zu
transportierenden Entwicklungensklassenangekreuzt werden können. Am
Ende finden Sie auch die mit Y* und Z* beginnenden
Entwicklungsklassen.
Sichern Sie Ihre Auswahl.
Starten Sie den Report RSLTEXPO mit der erzeugten Variante im
Hintergrund. Als Ergebnis werden mehrere Dateien (
Exportverzeichnis der Name des Hauptverzeichnis angegeben wird. Für
jede zu exportierende Sprache muß darin ein Unterverzeichnis
Im Standardfall exportiert der Report RSLTEXPO bei Tabellen, für die
eigene Kundenbereiche definiert werden können, nur die von SAP
modifizierbaren Tabelleneinträge. In Kundensystemen kann diese
Einschränkung aufgehoben werden, so daß ALLE Tabelleinräge
transportiert werden. Die Einschränkung kann durch setzen eines
Unconditional modes aufgehoben werden. Dazu muß nach Definition der
zu exportierenden Entwicklungsklassen die Funktion UCON in der
Kommandozeile eingegeben werden. Im danach angezeigten Popup wählen
Sie die Zeile "Customer - Ignoriere TRESC" aus.
In 4.0B werden beim Sprachenexport bei einigen Objekten nicht alle
Texte mitgenommen. Die bekannten Probleme sowie die jeweils
zugehörige Lösung sind detailliert in Hinweis 100168 beschrieben.
3. Sprachenimport
Für den Import der Files benutzen Sie im Zielsystem die Transaktion
SMLT.
Wählen Sie "Import einplanen" und geben Sie das Hauptverzeichnis der
Sprachenfiles an (vgl. Punkt 2.) Aus dem Menü wählen Sie
'Sonderimporte' -> 'Entwicklungsklassen' -> 'Exportbestand'. Danach
verfahren Sie wie bei der Einplanung eines Standardsprachenimports.
Sie können die Auffüllung implizit mit einplanen oder auch separat
nach Beendigung des Imports ausführen.
4. Customizing-Tabellen
Bitte beachten Sie, daß der Import der Customizing-Tabellen analog
zum Import von Standard-Übersetzungen verläuft, d.h.
Seite 3
Customizing-Einträge werden ausschließlich in den Mandanten 000
importiert (siehe auch Hinweis 28148). Falls Sie Customizing-Texte
übersetzt haben und diese auch im Zielsystem in Mandanten <> 000
importieren möchten, so können Sie diese mittels des Reports
RSREFILL auch in höhere Mandanten übernehmen. Details zu Anwendung
und Funktionsweise liefert die Dokumentation zu RSREFILL.
5. Hinweise
Beachten Sie auch die aktuellen Sprachenhinweise des jeweiligen
Releases (4.0A: 83997, etc.) sowie Hinweis 18601 mit häufig
gestellten Fragen zum Sprachtransport.
6. Einschränkungen
Bitte sorgen Sie dafür, daß die Tabelle NOTRA im Quell- und im
Zielsystem gepflegt ist. Die Tabelle NOTRA beinhaltet die Tabellen,
die beim Sprachenexport bzw. bei der Sprachenauffüllung ignoriert
werden.
Falls auch Tabellen von Ihnen nicht transportiert werden dürfen, so
müssen Sie diese per Hand in die Tabelle NOTRA eintragen. Benutzen
Sie dazu die Transaktion SM30 und tragen Sie als Grund für den
Ausshluß der jeweiligen Tabelle den Wert 'T' (= "aus technischem
Grund") ein.
Beachten Sie bitte, daß der Sprachenexport aus einem
Übersetzungsmandanten erfolgen muß (zu Konfigurieren über
Transaktion SE63), da ansonsten Sprachenfiles erzeugt werden, die
sich nicht in ein anderes System einspielen lassen.
Verfahren für 4.5 und 4.6A/B
Transport von Übersetzungen auf Basis von Objektlisten.
Seit 4.5 ist es zusätzlich zu dem oben beschriebenen Verfahren
möglich, Kundenübersetzungen objektweise auf der Basis von
Transportaufträgen oder Stücklisten zu transportieren.
Beachten Sie aber, daß damit nur der Transport von Übersetzungen zu
bereits existierenden Transportaufträgen möglich ist. Es werden auch
weiterhin keine Transportaufträge innerhalb der Übersetzungsumgebung
zur Protokollierung der Übersetzungen erzeugt !
Die Transportaufträge oder Stücklisten, auf denen der Sprachenexport
basiert, müssen mit den Mitteln des Transport Organizers
(Transaktion SE01) angelegt werden.
Ferner ist zu berücksichtigen, dass nur Übersetzungen zu
Systemobjekten (PROG, FUGR, DTEL, ...) transportiert werden können.
Es werden keine Übersetzungen zu logischen Objekten (Transaktion
SOBJ) sowie Objekten der View- und Textpflege (VDAT und TDAT)
transportiert werden.
Da zum Transport im wesentlichen das oben beschriebene Verfahren
auch hier angewendet wird, werden im folgenden nur die Unterschiede
beschrieben.
Seite 4
o Beim Export wird auf dem Selektionsbild des RSLTEXPO anstatt
'Entwicklunsklassen' der Modus 'Änderungsaufträge' ausgewählt.
Auf dem darauf folgenden Popup können bis zu zehn Aufträge
angegeben werden. Die Übersetzungen zu den Objekten der Aufträge
werden eportiert.
o Importiert werden die Übersetzungen per SMLT -> 'Import
einplanen' 'Sonderimporte' -> 'Exportbestand (auftragsbezogen)'.
Verfahren seit 4.6C
Seit 4.6C existiert ein Transportanschluss in SE63 und die SAP
Standard Transportprogramme (TP und R3trans) sind in der Lage,
Übersetzungen zu Objekten zu transportieren.
Für weitere Informationen ziehen Sie bitte die Online-Dokumentation
der Transaktionen SE63 zu Rate.
Reparaturen im Coding
________________________________________________________________________
Gültige Releases
Software Komponente Release
von bis
SAP_APPL R/3 Standard 46C - 46C X
46A - 46B
45A - 45B
40A - 40B
SAP_BASIS SAP Basiskomponente 46D - 46D
________________________________________________________________________
Hinweisattribute
altes Release 00146C SR1 R3STD 0095681
________________________________________________________________________
Verweise auf verwandte Hinweise
Nummer Kurztext
____________________________________________________________
490323 Falsche spanische Übersetzung standard Reisekostenformular
491522 REPT RPUREROL/ ES-Version: Textelement IP01 zu lang
138184 Fehlende Übersetzung (Tabelleninhalte)
429041 Missing translations of error Message >3 535 (Cash Desk)
18601 Häufige gestellte Fragen zum Sprachentransport
100168 Sprachenexport 4.0B
Tabellen dynamisch kopieren zwischen Systemen / Mandanten (Trick - Werner Dornacher)
Kopieren von Tabellen mittels dynamischem SELECT, von einem anderen System.
Aus dem Programm ZBCSAG_TABLECOPY wird der FuBaZ_BCSAG_TABLECOPY_REMOTE unterAngabe einerQuelldestination (Quellsystem) aufgerufen.
Der FuBa muss im Quellsystem vorhanden sein. Ferner muss die ausgewählte
Quelldestination existieren. Diese wird mit SM59 angelegt.
Ferner muss der aufrufende Benutzer Berechtigung (ACTVT=02) auf
die Berechtigungsgruppe der gewünschten Tabelle besitzen (Objekt S_TABU_DIS).
Soll z.B. ein Teil der Tabelle CSKS aus dem Prod-System P11 in das
System C11 kopiert werden, istdasProgrammimC11 mit folgenden Parametern
aufzurufen. Die Destination P11_002 muss vorher mit der Trx SM59
angelegt worden sein.
Tabelle: CSKS
Quellsystem: P11_002
Selektions-Bedingung:
Zeile 1 ( MANDT = '002' )
Zeile 2 AND
Zeile 3 ( KOSTL > '0005000000' )
Zeile 4 AND
Zeile 5 ( KOSTL < '0005040000' )
FUNCTION z_bcsag_tablecopy_remote. *"---------------------------------------------------------------------- *"*"Lokale Schnittstelle: *" IMPORTING *" VALUE(QUELL_TAB_NAME) LIKE DD02L-TABNAME *" VALUE(TAB_CONDITION) TYPE ZCHAR45 *" EXPORTING *" VALUE(TAB_RESULT) TYPE ZCHAR1000 *" EXCEPTIONS *" ERROR *"---------------------------------------------------------------------- SELECT * FROM (quell_tab_name) INTO TABLE tab_result WHERE (tab_condition). ENDFUNCTION. REPORT zbcsag_tablecopy LINE-SIZE 132 NO STANDARD PAGE HEADING. *"---------------------------------------------------------------------- *" Report to copy a table from another system. *"---------------------------------------------------------------------- SELECTION-SCREEN BEGIN OF BLOCK outer_block WITH FRAME. PARAMETERS: tabelle LIKE dd02l-tabname OBLIGATORY, "Tabellenname rfc_dest LIKE rfcdes-rfcdest, "Destination simu TYPE tst_on DEFAULT 'X'. "Simulation SELECTION-SCREEN BEGIN OF BLOCK cond_block WITH FRAME TITLE text-001. PARAMETERS: cond1(45), "Where-Klausel 1 cond2(45), "Where-Klausel 2 cond3(45), "Where-Klausel 3 cond4(45), "Where-Klausel 4 cond5(45). "Where-Klausel 5 SELECTION-SCREEN END OF BLOCK cond_block. SELECTION-SCREEN END OF BLOCK outer_block. DATA: it_condition TYPE zchar45. DATA: it_tab TYPE zchar1000. DATA: wa_it_tab(1000). DATA: d_ref TYPE REF TO data. FIELD-SYMBOLS: DATA: feldname(5), i TYPE n, count_commit TYPE i. TABLES: tddat. * Prüfung auf Berechtigung SELECT SINGLE * FROM tddat WHERE tabname = tabelle. AUTHORITY-CHECK OBJECT 'S_TABU_DIS' ID 'DICBERCLS' FIELD tddat-cclass ID 'ACTVT' FIELD '02'. if sy-subrc <> 0. MESSAGE ID 'ZS-ALLG' TYPE 'E' NUMBER 000 WITH 'Tabellenberechtigung fehlt!!!' . endif. * Kopiert werden darf nur in Testsysteme!!!!!! IF sy-sysid(1) <> 'C'. MESSAGE ID 'ZS-ALLG' TYPE 'E' NUMBER 000 WITH 'Report nur im Testsystem verwenden!!' . ENDIF. * Tabelle für Where-Bedingung zusammenbauen REFRESH it_condition. DO 5 TIMES. i = sy-index. CONCATENATE 'cond' i INTO feldname. ASSIGN (feldname) TO IF NOT ( INSERT ENDIF. ENDDO. * Daten aus dem Remote-System holen über RFC-Destination CALL FUNCTION 'Z_BCSAG_TABLECOPY_REMOTE' DESTINATION rfc_dest EXPORTING quell_tab_name = tabelle "Name der Tabelle tab_condition = it_condition "Where-Bedingung IMPORTING tab_result = it_tab "Result-Set EXCEPTIONS error = 1 OTHERS = 2. * Programmabbruch wenn remote-lesen nicht funktioniert hat. IF sy-subrc <> 0. IF simu = 'X'. WRITE: /'Returncode: ', sy-subrc. ELSE. MESSAGE ID 'ZS-ALLG' TYPE 'A' NUMBER 000 WITH 'Lesefehler in Funktionsbaustein' . ENDIF. ENDIF. * Datenreferenz auf Struktur der gewünschten Tabelle erstellen CREATE DATA d_ref TYPE (tabelle). ASSIGN d_ref->* TO * Result-Set satzweise im lokalen System wegschreiben. LOOP AT it_tab INTO * Bei Simulation Sätze nur ausgeben. WRITE: / IF simu NE 'X'. INSERT INTO (tabelle) VALUES IF sy-subrc NE 0 . UPDATE (tabelle) FROM ENDIF . ADD 1 TO count_commit . IF count_commit = '1000' . COMMIT WORK . count_commit = 0 . ENDIF. ENDIF. ENDLOOP. *----------------------------------------------------------------------* TOP-OF-PAGE. *----------------------------------------------------------------------* WRITE: sy-datum DD/MM/YYYY, 43 'Tabellen zw. Systemen kopieren', 'System:', sy-sysid, 123 'Seite:', (3) sy-pagno NO-SIGN. ULINE. WRITE: / 'Kopierte Sätze aus Tabelle ', tabelle. ULINE. |
Text zu Standard-Datenelementen ändern (Trick - Matthias König)
Transaktion CMOD, Menü Glob.Erweiterungen => Schlüsselworte ändern
Transaktion ZE16 (SE16 mit Vollzugriff) (Trick - Matthias König)
* FuGr SETB kopieren auf ZETB
* Transaktion ZE16 anlegen (Prg. SAPLZETB, Dynpro 230)
* FBs auf ZS_... umbenennen
* FBs ZS_DATABROWSE_INT_TABLE_EXP und ZS_TABLE_VIEW löschen
* folgende Änderungen durchführen
(dazu den untenstehenden Text in Editor übernehmen)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| Programm | Fundstellen/Kurzbeschreibung |
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| LZETBI00 | 41 CALL FUNCTION 'ZS_TABLE_LIST_CREATE' "MK |
| | EXPORTING |
| | TABLE_NAME = DATABROWSE-TABLENAME |
| | GENERATION_FORCED = DATABROWSE-GEN_FLAG. |
| | 49 CALL FUNCTION 'ZS_TABLE_LIST_CREATE' "MK |
| | EXPORTING |
| | ACTION = 'ANLE' |
| | TABLE_NAME = DATABROWSE-TABLENAME |
| | GENERATION_FORCED = DATABROWSE-GEN_FLAG. |
| | |
| LZETBO00 | 20 IF SY-UNAME NP 'FAZZOD*' AND "MK |
| | SY-UNAME NP 'SAPEXT'. "MK |
| | 22 MESSAGE E999(ZJ) "MK |
| | WITH 'Sie haben keine Berechtigung für diese Transaktion.'. "MK |
| | 24 ENDIF. "MK |
| | |
| LZETBU01 | 43 * perform authority_check_again using action. "MK |
| | 52 clear global_auth. "MK |
| | 233 DD02L-MAINFLAG = 'X'. "MK |
| | 314 call function 'ZS_TABLE_REPORT_GENERATE' "MK |
| | exporting |
| | tabname = databrowse-tablename |
| | textname = p_texttable |
| | repname = p_pname |
| | new_sel = 'X' |
| | exceptions |
| | others = 1. |
| | 407 sy-subrc = 4. "MK |
| | 574 call function 'ZS_TABLE_REPORT_GENERATE' "MK |
| | exporting |
| | tabname = databrowse-tablename |
| | textname = texttable |
| | repname = pname |
| | new_sel = space |
| | exceptions |
| | cancelled = 1 |
| | execution_cancelled = 3 |
| | tablefield_too_large = 4 |
| | others = 2. |
| | |
| LZETBU08 | 20 CALL FUNCTION 'ZS_TABLE_LIST_CREATE' "MK |
| | EXPORTING |
| | TABLE_NAME = TABNAME |
| | * ACTION = 'ANZE' |
| | WITHOUT_SUBMIT = 'X' |
| | GENERATION_FORCED = 'X' |
| | * NEW_SEL = |
| | NO_STRUCTURE_CHECK = 'X' |
| | IMPORTING |
| | PROGNAME = TBPROGREF-PROGNAME |
| | EXCEPTIONS |
| | TABLE_IS_STRUCTURE = 1 |
| | TABLE_NOT_EXISTS = 2 |
| | DB_NOT_EXISTS = 3 |
| | NO_PERMISSION = 4 |
| | NO_CHANGE_ALLOWED = 5 |
| | OTHERS = 6. |
| | |
| LZETBU09 | 21 CALL FUNCTION 'ZS_TABLE_LIST_CREATE' "MK |
| | EXPORTING |
| | TABLE_NAME = TABNAME |
| | * ACTION = 'ANZE' |
| | WITHOUT_SUBMIT = 'X' |
| | GENERATION_FORCED = 'X' |
| | * NEW_SEL = |
| | NO_STRUCTURE_CHECK = 'X' |
| | IMPORTING |
| | PROGNAME = TBPROGREF-PROGNAME |
| | EXCEPTIONS |
| | TABLE_IS_STRUCTURE = 1 |
| | TABLE_NOT_EXISTS = 2 |
| | DB_NOT_EXISTS = 3 |
| | NO_PERMISSION = 4 |
| | NO_CHANGE_ALLOWED = 5 |
| | OTHERS = 6. |
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Transport von Standardtexten (Trick - Jörg Engel)
Folgende Zeile in der Objektliste eintragen:
PgmID Obj Objektname
R3TR TEXT [Text-Object],[Textname],[Text-Id],[Sprache]
z.B.
R3TR TEXT TEXT,Z_DOKU,ST,D
siehe auch OSS-Hinweis 65253
oder mit Hilfe des SAP R/3 Standard-Reports RSTXTRAN
Transportauftrag, Transportaufgabe nachträglich ändern (Trick - Matthias König)
in Tabelle E070 Status TRSTATUS = 'D' setzen
Transportprobleme (Trick - Matthias König)
Beim Transportieren in SE10 bzw. SE01 kommt bei der Freigabe eine Transportauftrages die Meldung mit dem Inhalt ADO-Export. Um den Transport dennoch durchzuführen, muss die Jobklasse eines Jobs RD* (aber ungleich RDDIMPDP
), der nicht angestartet wird, auf A gesetzt werden.
Variable aus Hauptprogramm (Trick - Matthias König)
Mit folgendem "Trick" ist es möglich, innerhalb eines Unterprogramms, FB, etc. eine variable aus dem rufenden Programm aufzurufen, auch wenn diese nicht im aktuellen Gültigkeitsbereich liegt.
Dies kann sehr gut in User-Exits verwendet werden.
* Code innerhalb eines User-Exits in der Nachrichtensteuerung DATA: I_JKAP LIKE JKAP OCCURS 0 WITH HEADER LINE, FELDNAME(61) TYPE C VALUE '(SAPLV61B)XNAST', WA_NAST LIKE NAST. FIELD-SYMBOLS: ASSIGN (FELDNAME) TO WA_NAST = * Zugriff auf interne Tabelle (mit []!) ASSIGN ('(SAPMJ45A)XJKAP[]') TO I_JKAP[] = |
Wassertropfen beim SAPSTART deaktivieren (Trick - Hans-Peter Ruß)
Beim Starten von SAP wird eine kleine Animation eines Wassertropfens abgespielt. Dies kann zu Performanceproblemen führen.
Mit folgendem Eintrag kann diese Animation abgeschaltet werden.
HKEY_LOCAL_MACHINE\SOFTWARE\SAP\General\Appearance\SplashOff
Wert: 1
SAP Hinweis: 170770
Workflow-Eingangskorb löschen (Trick - Matthias König)
Report RSWWWIDE bzw. RSWWHIDE
Workflow-Items zu einem Benutzer bestimmen (Trick - Matthias König)
In Tabelle SWWUSERWI stehen die aktuellen Workitems eines Benutzers. Mit Transaktion SWUL können diese anschließend gelöscht werden.
REPORT ZWITEMDEL NO STANDARD PAGE HEADING. TABLES: SWWWIHEAD, SWWUSERWI. RANGES: R_ID FOR SWWWIHEAD-WI_ID, R_TYPE FOR SWWWIHEAD-WI_TYPE, R_STAT FOR SWWWIHEAD-WI_STAT. PARAMETERS: P_BNAME LIKE USR02-BNAME DEFAULT SY-UNAME, P_TEST AS CHECKBOX DEFAULT 'X'. * Workitems selektieren SELECT * FROM SWWUSERWI WHERE USER_ID = P_BNAME. CLEAR R_ID. R_ID-OPTION = 'EQ'. R_ID-SIGN = 'I'. R_ID-LOW = SWWUSERWI-WI_ID. APPEND R_ID. ENDSELECT. IF SY-SUBRC <> 0. WRITE:/ 'Es wurden keine Workitems gefunden.'. EXIT. ENDIF. * Workitems löschen SUBMIT RSWWWIDE WITH ID IN R_ID WITH TYPE IN R_TYPE WITH STAT IN R_STAT WITH DISP = P_TEST AND RETURN. |