ABAP/4 How-To Compendium

ABAP/4 How-To Compendium (Matthias König)


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

UPLOAD (FB - Matthias König)

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 . " Pointer zeigt auf Feld KNA1-NAME1
= 'Meier'.
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.

Datei (Prog - Matthias König)

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_HEAD2.
I_HEAD3 = '

'.
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 TYPE 'X'.
IF = '0D'.
= '0A'.
ENDIF.
ENDDO.

HIDE (Prog - Matthias König)

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.


Join (Prog - Matthias König)

- 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

REGEX (Prog - Matthias König)

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

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

BOX (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

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: ...<32>... bzw. .

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'

%SC (TCode - Matthias König)

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

CMOD (TCode - Matthias König)

SAP Erweiterungen

CODE_SCANNER (TCode - Matthias König)

Report AFX_CODE_SCANNER

Report zum Suchen nach Codingstellen.

DB02 (TCode - Matthias König)

Datenbankstatistik

EWK3 (TCode - Matthias König)

Währungs-Umrechnung zum Stichtag (z.B. auf EURO) von Z-Feldern

FILE (TCode - Matthias König)

Logische Dateipfade pflegen

RZ10 (TCode - Matthias König)

Systemparameter pflegen (alle Parameter eines Applikationsservers mit Report RSPARAM)

RZ11 (TCode - Matthias König)

Systemparameter anzeigen (alle Parameter eines Applikationsservers mit Report RSPARAM)

SAMT (TCode - Matthias König)

ABAP/4-Programm-Mengen-Bearbeitung; mit Hilfe dieser Transaktion kann eine Syntaxprüfung über eine definierte Menge von Programmen erfolgen.

SCC4 (TCode - Matthias König)

Mandanten anzeigen (? Änderungen und Transporte)

SE06 (TCode - Matthias König)

Systemänderbarkeit ändern

SE32 (TCode - Matthias König)

Pflege der Textelemente

SE80 / SEU (TCode - Bernhard Diemer)

Repository Browser

SE93 (TCode - Matthias König)

Transaktionspflege, Parametertransaktion

SERP (TCode - Andreas Lorenz)

Pflege Reportingbaum

SF01 (TCode - Andreas Lorenz)

Pflege logischer Dateinamen (mandantenabhängig)
Zusätzlich zu den mandantenübergreifenden Dateinamen (Transaktion FILE) können hier mandantenabhängige Namen gepflegt werden.

SM02 (TCode - Matthias König)

Systemnachricht erfassen

SM04 (TCode - Matthias König)

Benutzer anzeigen (=> Springen => Memory: Speicherverbrauch)

SM22 (TCode - Matthias König)

SYSLOG auswerten

SM62 (TCode - Matthias König)

Event erzeugen. Auslösen kann man einen Event mit den FB BP_EVENT_RAISE bzw.mit dem Report ZTSEVT00.

SO00 (TCode - Matthias König)

Kurznachricht als SAP-Mail senden

SO21 (TCode - Matthias König)

PC-Arbeitsverzeichnis pflegen

SPAU (TCode - Matthias König)

Modifikationen bei Releasewechsel

ST01 Berechtigungstrace (TCode - Matthias König)

ST01 für Berechtigungstrace

ST04 (TCode - Matthias König)

Datenbank Performance Analyse

- Oracle Session drücken
- nach Prozess-Id des Prozesses suchen (SM50 / SM51)
- Doppelclick
- Explain ausführen

SU53 (TCode - Matthias König)

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_; ausführbarer Knoten: SIMG,
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 (TX.EXT,
DC.EXT, ... ) erzeugt, wobei das Sprachkennzeichen und
der ISO-Code sein soll. Bitte beachten Sie, daß als
Exportverzeichnis der Name des Hauptverzeichnis angegeben wird. Für
jede zu exportierende Sprache muß darin ein Unterverzeichnis
_ existieren.

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: TYPE c,
TYPE ANY.

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 ( IS INITIAL ).
INSERT INTO TABLE it_condition.
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: / (70).
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.

powered in 0.68s by baseportal.de
Erstellen Sie Ihre eigene Web-Datenbank - kostenlos!