Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Funktionsbausteine
ABAP/4 Basis Funktionsbausteine
Dokument-Historie
Haftungsausschluss
Wir haben dieses Dokument zur internen Verwendung erstellt und stellen dieses Dokument via
Homepage unseren Mitarbeitern zur Verfgung.
Falls sie dieses Dokument oder Auszge aus diesem Dokument verwenden mchten, tun sie dies auf ihr
eigenes Risiko.
Wir bernehmen keinerlei Gewhr fr die Richtigkeit der Dokumentation und Verwendung in ihrem
Coding und den daraus evtl. entstehenden Schden.
Urheberrechte
SAP und ABAP sind eingetragene Warenzeichen und Eigentum der SAP AG.
Kontakt
B.O.A. Unternehmensberatung GmbH
Web www.boa-soft.de
ABAP/4 Basis Funktionsbausteine
Inhaltsverzeichnis
1 KURZBESCHREIBUNG ........................................................................................................................... 1
1.1 BERECHTIGUNGSPRFUNG ..................................................................................................................... 2
1.2 FB AUFRUF FEHLER ABFANGEN ............................................................................................................. 3
1.3 RFC FUNKTIONSBAUSTEINE .................................................................................................................. 4
1.4 FUBAS VARIABEL AUFRUFEN .................................................................................................................. 7
1.5 BERGABE RANGE TABELLE ............................................................................................................... 9
1.6 BAPI FUBAS TESTEN ............................................................................................................................. 9
2 MATERIALSTAMM.................................................................................................................................10
2.1 VERBRAUCHSWERTE LESEN ..................................................................................................................10
3 KUNDENSERVICE...................................................................................................................................10
3.1 CODES LESEN .......................................................................................................................................10
3.2 MELDUNG LESEN ..................................................................................................................................11
3.3 LISTE SERVICEMELDUNGEN LESEN ........................................................................................................11
3.4 SYSTEMSTATUS LESEN ..........................................................................................................................13
3.5 USER STATUS IN MELDUNG ..................................................................................................................14
3.6 USER-STATUS IN MELDUNG SETZEN ......................................................................................................14
3.7 USERSTATUS IN AUFTRAG SETZEN ........................................................................................................15
3.8 MELDUNG NDERN ..............................................................................................................................17
3.9 MATERIALRCKMELDUNG ....................................................................................................................20
3.10 ZEITEN FR INSTANDHALTUNGS-/SERVICEAUFTRAG RCKMELDEN ........................................................21
4 KLASSIFIZIERUNG.................................................................................................................................23
4.1 MERKMALE LESEN ...............................................................................................................................23
4.2 MERKMALSWERTE LESEN .....................................................................................................................24
4.3 TABELLEN ZUR KLASSE LESEN ..............................................................................................................25
4.4 KLASSENART LESEN/PRFEN .................................................................................................................25
5 BONUSABSPRACHEN (AGREEMENTS) ..............................................................................................26
5.1 VERKNPFUNGEN LESEN ......................................................................................................................26
5.2 ABSPRACHE KOPIEREN ..........................................................................................................................26
6 SALES & DISTRIBUTION .......................................................................................................................29
6.1 STATUS IN BELEGEN SETZEN .................................................................................................................29
6.2 KUNDENHIERARCHIE LESEN ..................................................................................................................29
7 KONDITIONEN ........................................................................................................................................31
7.1 KOPFKONDITIONEN LESEN ....................................................................................................................31
7.2 POSITIONSKONDITIONEN LESEN.............................................................................................................31
7.3 KONDITIONEN FR DYNPRO LESEN .......................................................................................................32
8 ALLGEMEINE ..........................................................................................................................................35
8.1 BERSICHT FUNKTIONSBAUSTEINE .......................................................................................................35
8.2 MAEINHEITEN .....................................................................................................................................37
8.3 MAEINHEITEN IM MATERIAL ...............................................................................................................39
8.4 BETRAG IN UNTERSCHIEDLICHEN WHRUNGEN .....................................................................................40
8.5 WHRUNGSFELD KONVERTIEREN ..........................................................................................................41
8.6 RFC CLOSE ........................................................................................................................................42
8.7 RFC T ABELLEN LESEN .........................................................................................................................42
8.8 STATUS ZU OBJEKTEN LESEN ................................................................................................................43
8.9 TERMINAL ERMITTELN ..........................................................................................................................44
8.10 DATUM ................................................................................................................................................44
8.10.1 Monate ermitteln .........................................................................................................................44
8.10.2 Datum ins externe Format umwandeln .........................................................................................46
Seite i
ABAP/4 Basis Funktionsbausteine
Seite ii
ABAP/4 Basis Funktionsbausteine
Seite iii
ABAP/4 Basis Funktionsbausteine
1 Kurzbeschreibung
Die Funktionsbausteine befinden sich in der Tabelle TFDIR. Diese Tabelle kann man z.B. ber
den Rahmenprogrammname (SY-REPID) lesen.
ber den Modus kann man feststellen ob es sich um einen RFC Fuba handelt.
Seite 1 / 120
ABAP/4 Basis Funktionsbausteine
1.1 Berechtigungsprfung
Die Berechtigungsprfung erfolgt ber den Fuba AUTHORITY_CHECK_RFC.
IF sy-subrc NE 0.
raise rfc_no_authority.
ELSE.
Seite 2 / 120
ABAP/4 Basis Funktionsbausteine
DATA:
l_ref TYPE REF TO cx_root,
l_text TYPE string. "#EC NEEDED
ENDTRY.
ENDIF.
Seite 3 / 120
ABAP/4 Basis Funktionsbausteine
Beispiel
Die Range Tabelle IMT_MATNR_RANGE ist im Sende- und Empfangssystem unterschiedlich
definiert.
FUNCTION /sie/ad_zamewc_stock_a2p.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" VALUE(IMT_MATNR_RANGE) TYPE WDFR_MATNR_RANG_TYP
*" EXPORTING
*" VALUE(EXT_MARA) TYPE MARA_TT
*"----------------------------------------------------------------------
ENDFUNCTION.
Seite 4 / 120
ABAP/4 Basis Funktionsbausteine
FUNCTION /sie/ad_zamewc_stock_a2p.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" VALUE(IMT_MATNR_RANGE) TYPE /SIE/AD_ZAM_MATNR_RANGE_T
*" EXPORTING
*" VALUE(EXT_MARA) TYPE MARA_TT
*"----------------------------------------------------------------------
ENDFUNCTION.
Seite 5 / 120
ABAP/4 Basis Funktionsbausteine
Test
Sendesystem
Die Materialnummer wird in korrekter Lnge gefllt.
Empfangssystem
Die Materialnummer wird entsprechend abgeschnitten.
Seite 6 / 120
ABAP/4 Basis Funktionsbausteine
Beispiel
Der Fuba PRICING_SUBSCREEN_SET_DATA baut die Parameter dynamisch auf und
bergibt diese ber Tabellen.
type-pools: abap.
data: p_tab type ABAP_FUNC_PARMBIND_TAB, "sorted table
p_lin type ABAP_FUNC_PARMBIND,
e_tab type ABAP_FUNC_EXCPBIND_TAB, "hashed table
e_lin type ABAP_FUNC_EXCPBIND.
function pricing_subscreen_set_data .
*"----------------------------------------------------------------------
*"*"Globale Schnittstelle:
*" IMPORTING
*" REFERENCE(COMM_HEAD_I) LIKE KOMK STRUCTURE KOMK
*" REFERENCE(COMM_ITEM_I) LIKE KOMP STRUCTURE KOMP
*" VALUE(TRTYP_I) TYPE TRTYP OPTIONAL
*" VALUE(DISPLAY_ONLY) TYPE C DEFAULT ' '
*" VALUE(CTRL_NO_DISPLAY) TYPE X OPTIONAL
*" VALUE(CTRL_GREY) TYPE XFELD OPTIONAL
*" TABLES
*" SVBAP STRUCTURE VBAPU OPTIONAL
*" TKOMV STRUCTURE KOMV
*" YKOMV STRUCTURE KOMV OPTIONAL
*" CHANGING
*" VALUE(C_VFKOMV) TYPE REF TO DATA OPTIONAL
*" EXCEPTIONS
*" ERROR
*"----------------------------------------------------------------------
* initialization
refresh xkomv.
refresh: p_tab,
e_tab.
clear old_calc_type.
Seite 7 / 120
ABAP/4 Basis Funktionsbausteine
p_lin-kind = ABAP_FUNC_EXPORTING.
p_lin-name = 'COMM_HEAD_I'.
get reference of KOMK into p_lin-value.
insert p_lin into table p_tab.
p_lin-name = 'COMM_ITEM_I'.
get reference of KOMP into p_lin-value.
insert p_lin into table p_tab.
p_lin-kind = ABAP_FUNC_IMPORTING.
p_lin-name = 'COMM_HEAD_E'.
get reference of KOMK into p_lin-value.
insert p_lin into table p_tab.
p_lin-name = 'COMM_ITEM_E'.
get reference of KOMP into p_lin-value.
insert p_lin into table p_tab.
p_lin-kind = ABAP_FUNC_TABLES.
if SVBAP is supplied.
p_lin-name = 'SVBAP'.
get reference of SVBAP[] into p_lin-value.
get reference of SVBAP into p_lin-tables_wa.
insert p_lin into table p_tab.
endif.
p_lin-name = 'TKOMV'.
get reference of TKOMV[] into p_lin-value.
get reference of TKOMV into p_lin-tables_wa.
insert p_lin into table p_tab.
p_lin-name = 'YKOMV'. "XKOMV --> YKOMV
get reference of XKOMV[] into p_lin-value.
insert p_lin into table p_tab.
Seite 8 / 120
ABAP/4 Basis Funktionsbausteine
Als Bezugstyp fr diese Tabellen kann man die SAP Tabellentypen RANGE* verwenden.
Anschlieend kann wie bisher weiter getestet werden. Siehe auch OSS Hinweis 420646.
Seite 9 / 120
ABAP/4 Basis Funktionsbausteine
2 Materialstamm
3 Kundenservice
Die Katalogart (z.B. FEKAT, SAKAT) ist ebenfalls in der Tabelle TQ80.
Seite 10 / 120
ABAP/4 Basis Funktionsbausteine
User Status
Achtung: Bei beiden Fubas werden nicht alle Daten aus den Positionen bergeben.
REFRESH: t_notif_list.
Seite 11 / 120
ABAP/4 Basis Funktionsbausteine
Mchte man nur bestimmte User Status anzeigen, muss man den nicht relevanten Status aus
der Liste entfernen.
Seite 12 / 120
ABAP/4 Basis Funktionsbausteine
FUNCTION zw_gto_get_notifstat.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*" IMPORTING
*" VALUE(I_SPRAS) TYPE SPRAS
*" TABLES
*" IT_QMNUM STRUCTURE JEST
*" OT_JEST STRUCTURE JEST
*" OT_STAT STRUCTURE TJ02T
*"----------------------------------------------------------------------
ENDFUNCTION.
Fuba Aufruf:
*-Status lesen
loop at t_notif_list into la_list.
la_jest-objnr = la_list-objnr.
append la_jest to lt_jesto.
endloop.
call function 'ZW_GTO_GET_NOTIFSTAT' DESTINATION pros-dest
EXPORTING
i_SPRAS = sy-langu
TABLES
it_qmnum = lt_jesto
ot_jest = lt_jestn
ot_stat = lt_stat
EXCEPTIONS
others = 1.
Seite 13 / 120
ABAP/4 Basis Funktionsbausteine
method SET_USSTAT.
data: ls_usstat type ZWS_GTO_NOTUSRSTATI,
ls_return type bapiret2,
lt_return type standard table of bapiret2,
lf_str type string.
Seite 14 / 120
ABAP/4 Basis Funktionsbausteine
else.
call function 'BAPI_TRANSACTION_COMMIT' destination pros-dest.
ENDIF.
ENDIF.
endmethod.
Beispiel
Es soll der Status ZOFF gelscht und der Status ZAAB gesetzt werden.
Der Status muss im internen Format (siehe Tabelle TJ30T) mitgegeben werden.
Seite 15 / 120
ABAP/4 Basis Funktionsbausteine
Seite 16 / 120
ABAP/4 Basis Funktionsbausteine
BAPI Fubas
FUNCTION zw_gto_change_notif_bapi.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*" IMPORTING
*" VALUE(I_HEAD) LIKE MAM_20_NOTIF_HEADER STRUCTURE
*" MAM_20_NOTIF_HEADER
*" TABLES
*" I_ITEM STRUCTURE ZWS_GTO_NOTIF_ITEM
*" I_PARTN STRUCTURE ALM_ME_PARTNER_KEY_STRUCT
*" O_RETURN2 STRUCTURE BAPIRET2
*"----------------------------------------------------------------------
REFRESH: o_return2.
* Kurztext
IF i_head-short_text NE g_wviqmel-qmtxt.
Seite 17 / 120
ABAP/4 Basis Funktionsbausteine
g_head_bapi-short_text = i_head-short_text.
g_headx_bapi-short_text = 'X'.
ENDIF.
* Starttermin
IF i_head-desstdate NE g_wviqmel-strmn.
g_head_bapi-desstdate = i_head-desstdate.
g_headx_bapi-desstdate = 'X'.
ENDIF.
IF i_head-dessttime NE g_wviqmel-strur.
g_head_bapi-dessttime = i_head-dessttime.
g_headx_bapi-dessttime = 'X'.
ENDIF.
* Endtermin
IF i_head-desenddate NE g_wviqmel-ltrmn.
g_head_bapi-desenddate = i_head-desenddate.
g_headx_bapi-desenddate = 'X'.
ENDIF.
IF i_head-desendtm NE g_wviqmel-ltrur.
g_head_bapi-desendtm = i_head-desendtm.
g_headx_bapi-desendtm = 'X'.
ENDIF.
* Arbeitsplatz (Techniker)
IF i_head-mn_wk_ctr NE g_riwo03-arbpl.
perform get_arbpl using i_head-mn_wk_ctr
i_head-plant
changing g_head_bapi-pm_wkctr.
g_headx_bapi-pm_wkctr = 'X'.
ENDIF.
* Codegruppe/Codes
IF i_head-code_group NE g_wviqmel-qmgrp.
g_head_bapi-code_group = i_head-code_group.
g_headx_bapi-code_group = 'X'.
ENDIF.
IF i_head-coding NE g_wviqmel-qmcod.
g_head_bapi-coding = i_head-coding.
g_headx_bapi-coding = 'X'.
ENDIF.
* Projektleiter
REFRESH: it_partn_bapi, it_partnx_bapi.
READ TABLE i_partn WITH KEY partner_role = 'ZG'.
IF sy-subrc EQ 0.
READ TABLE it_partner INTO wa_partner
WITH KEY parvw = 'ZG'.
IF sy-subrc NE 0 OR
i_partn-partner_key NE wa_partner-parnr.
wa_partn_bapi-refobjectkey = g_wviqmel-objnr.
wa_partn_bapi-partn_role = 'ZG'.
wa_partn_bapi-partn_role_old = 'ZG'.
wa_partn_bapi-partner = i_partn-partner_key.
wa_partn_bapi-partner_old = wa_partner-parnr.
APPEND wa_partn_bapi TO it_partn_bapi.
wa_partnx_bapi-partner = 'X'.
wa_partnx_bapi-partn_role_old = 'ZG'.
wa_partnx_bapi-partner_old = wa_partner-parnr.
APPEND wa_partnx_bapi TO it_partnx_bapi.
ENDIF.
ENDIF.
Seite 18 / 120
ABAP/4 Basis Funktionsbausteine
* Positionen
REFRESH: it_item_bapi, it_itemx_bapi.
LOOP AT i_item.
READ TABLE it_itemfe INTO wa_itemfe
WITH KEY fenum = i_item-item_key.
CHECK sy-subrc EQ 0.
IF i_item-d_codegrp NE wa_itemfe-fegrp.
wa_item_bapi-d_codegrp = i_item-d_codegrp.
wa_itemx_bapi-d_codegrp = 'X'.
ENDIF.
IF i_item-d_code NE wa_itemfe-fecod.
wa_item_bapi-d_code = i_item-d_code.
wa_itemx_bapi-d_code = 'X'.
ENDIF.
ENDLOOP.
IF i_item-anzfehler NE wa_qmfe-anzfehler.
UPDATE qmfe
SET anzfehler = i_item-anzfehler
WHERE qmnum EQ wa_qmfe-qmnum
AND fenum EQ wa_qmfe-fenum.
Seite 19 / 120
ABAP/4 Basis Funktionsbausteine
IF sy-subrc NE 0.
CLEAR wa_return2.
wa_return2-type = 'E'.
wa_return2-id = '38'.
wa_return2-number = '001'.
wa_return2-message_v1 = 'Fehler beim UPDATE QMFE'(003).
wa_return2-message_v2 = wa_qmfe-qmnum.
wa_return2-message_v3 = wa_qmfe-fenum.
APPEND wa_return2 TO it_return2.
ENDIF.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDIF.
ELSE.
o_return2[] = it_return2.
ENDIF.
ELSE.
o_return2[] = it_return2.
ENDIF.
ENDFUNCTION.
3.9 Materialrckmeldung
FUNCTION zw_gto_create_matconf.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*" IMPORTING
*" VALUE(I_ORDERID) TYPE AUFNR
*" VALUE(I_PLANT) TYPE WERKS_D
*" VALUE(I_STGE_LOC) TYPE LGORT_D
*" VALUE(I_CODE) TYPE BAPI2017_GM_CODE DEFAULT '03'
*" EXPORTING
*" VALUE(O_GOODSMVTDOC) TYPE BAPI2017_GM_HEAD_RET
*" TABLES
*" IT_MATCONF STRUCTURE BAPI2017_GM_ITEM_CREATE OPTIONAL
*" RETURN STRUCTURE BAPIRET2 OPTIONAL
*"----------------------------------------------------------------------
**
DATA: la_header TYPE bapi2017_gm_head_01,
lt_matser TYPE TABLE OF bapi2017_gm_serialnumber.
Seite 20 / 120
ABAP/4 Basis Funktionsbausteine
return = return.
ENDFUNCTION.
METHOD send_timeconf .
Seite 21 / 120
ABAP/4 Basis Funktionsbausteine
ENDMETHOD.
Seite 22 / 120
ABAP/4 Basis Funktionsbausteine
4 Klassifizierung
Die Merkmale knnen ber den Fuba CLSE_SELECT_CABN gelesen werden. Dazu muss man
man aber die ATINN bereits wissen.
In der Tabelle IN_CABN mssen die ATINN als Range Tabelle bergeben werden.
Die Bezeichnung zu den Merkmalen werden ber den Fuba CLSE_SELECT_CABNT gelesen.
Beispiel
In diesem Beispiel wird die Tabelle CABN direkt gelesen, da die interne Nummer ATINN
noch nicht bekannt war.
FORM READ_CABNT.
RANGES L_R_CABN FOR CABN-ATINN.
refresh it_cabn.
loop at editpos_with_header.
SELECT * FROM CABN into wa_cabn up to 1 rows
WHERE ATNAM = editpos_with_header-tabkey+21.
ENDSELECT.
if sy-subrc eq 0.
append wa_cabn to it_cabn.
l_r_cabn-sign = 'I'.
l_r_cabn-option = 'EQ'.
l_r_cabn-low = wa_cabn-atinn.
append l_r_cabn.
endif.
endloop.
sort it_cabn by atinn.
delete adjacent duplicates from it_cabn comparing atinn.
sort l_r_cabn by low.
delete adjacent duplicates from l_r_cabn comparing low.
Seite 23 / 120
ABAP/4 Basis Funktionsbausteine
Beispiel
In diesem Beispiel werden die Tabellen direkt gelesen, da zuerst ber die Anmeldesprache
gelesen wird. Ist fr diese Sprache keine Bezeichnung zum Wert vorhanden, wird die
Bezeichnung in einer anderen Sprache gelesen.
clear cawnt.
endif.
endform.
Seite 24 / 120
ABAP/4 Basis Funktionsbausteine
CASE sy-subrc.
WHEN 1.
MESSAGE e014(cl) WITH p_klart.
WHEN 2.
MESSAGE e545(cl) WITH p_klart.
ENDCASE.
ENDFORM. "check_klart
Seite 25 / 120
ABAP/4 Basis Funktionsbausteine
5 Bonusabsprachen (Agreements)
Transaktionen VBO1, VBO2 etc.
* Baustein aufrufen
call function 'MM_ARRANG_EXTENSIONS_READ'
EXPORTING
arrangement = kona
perform_only_check = no
TABLES
extended_arrangements = xmebog
EXCEPTIONS
no_extension_for_arrangement = 1
internal_error_arrangements = 2
arrangement_not_found = 3
arrang_already_new_period = 4
others = 5.
Beispiel
FORM new_agreement.
* Initialisierung
CLEAR error_auto_extend.
CLEAR warn_auto_extend.
REFRESH error_messages.
CLEAR: old_kschl, old_kotabnr.
* Lesen der Konditionen
IF auto_extend = no.
PERFORM bonus_record_read.
ELSE.
CHECK error_auth_check = 0.
* BADI for Maintenance Check
DATA: badi_instance TYPE REF TO if_ex_agr_maintenance_chck.
DATA: badi_active TYPE xfeld.
Seite 26 / 120
ABAP/4 Basis Funktionsbausteine
FORM update_kona.
DATA: w_mode(1),
w_date_to TYPE aedat_bi.
Seite 27 / 120
ABAP/4 Basis Funktionsbausteine
w_mode = 'N'.
Seite 28 / 120
ABAP/4 Basis Funktionsbausteine
Position
Fuba RV_XVBUP_MAINTAIN
ENDIF.
Seite 29 / 120
ABAP/4 Basis Funktionsbausteine
Seite 30 / 120
ABAP/4 Basis Funktionsbausteine
7 Konditionen
Beispiel
Kopfkonditionen fr Rechnung lesen.
FORM get_header_prices.
IF komk-knumv NE vbdkr-knumv.
CLEAR komk.
komk-mandt = sy-mandt.
komk-kalsm = vbdkr-kalsm.
komk-fkart = vbdkr-fkart.
komk-kappl = pr_kappl.
IF vbdkr-kappl NE space.
komk-kappl = vbdkr-kappl.
ENDIF.
komk-bukrs = vbdkr-bukrs.
komk-waerk = h_waerk.
komk-hwaer = h_t001_waers.
komk-knumv = vbdkr-knumv.
komk-vbtyp = vbdkr-vbtyp.
komk-knuma = vbdkr-knuma.
komk-land1 = vbdkr-lland.
komk-vkorg = vbdkr-vkorg.
komk-vtweg = vbdkr-vtweg.
komk-spart = vbdkr-spart.
komk-prsdt = vbdkr-erdat.
komk-kurst = vbdkr-kurst.
komk-kurrf = vbdkr-kurrf.
komk-kurrf_dat = vbdkr-kurrf_dat.
ENDIF.
CALL FUNCTION 'RV_PRICE_PRINT_HEAD' " Kopfkonditionen lesen
EXPORTING comm_head_i = komk
language = object-spras
IMPORTING comm_head_e = komk
TABLES tkomv = ikomv
tkomvd = ikomvd.
ENDFORM. "get_header_prices
Beispiel
Kopfkonditionen fr Rechnung lesen.
Seite 31 / 120
ABAP/4 Basis Funktionsbausteine
FORM get_item_prices
USING posnr.
CLEAR komp.
CLEAR ikomv.
CLEAR ikomvd.
IF komk-knumv NE vbdkr-knumv.
CLEAR komk.
komk-mandt = sy-mandt.
komk-kalsm = vbdkr-kalsm.
komk-fkart = vbdkr-fkart.
komk-kappl = pr_kappl.
IF vbdkr-kappl NE space.
komk-kappl = vbdkr-kappl.
ENDIF.
komk-bukrs = vbdkr-bukrs.
komk-waerk = h_waerk.
komk-hwaer = h_t001_waers.
komk-knumv = vbdkr-knumv.
komk-vbtyp = vbdkr-vbtyp.
komk-land1 = vbdkr-lland.
komk-vkorg = vbdkr-vkorg.
komk-vtweg = vbdkr-vtweg.
komk-spart = vbdkr-spart.
komk-prsdt = vbdkr-erdat.
komk-kurst = vbdkr-kurst.
komk-kurrf = vbdkr-kurrf.
komk-kurrf_dat = vbdkr-kurrf_dat.
ENDIF.
komp-kposn = posnr.
komp-mglme = tvbdpr-fklmg.
komp-lagme = tvbdpr-meins.
komp-kursk = tvbdpr-kursk.
komp-kursk_dat = tvbdpr-kursk_dat.
ENDFORM. "get_item_prices
Seite 32 / 120
ABAP/4 Basis Funktionsbausteine
Die interne Tabelle XKOMV aus dem Fuba PRICING_SUBSCREEN_SET_DATA enthlt die
gesamten Konditionen der Positionen.
Seite 33 / 120
ABAP/4 Basis Funktionsbausteine
Seite 34 / 120
ABAP/4 Basis Funktionsbausteine
8 Allgemeine
CALL FUNCTION
'RV_CALL_CHANGE_TRANSACTION'
EXPORTING
* POSNR = <i>-posnr
vbeln = <i>-vbeln.
Seite 35 / 120
ABAP/4 Basis Funktionsbausteine
der Verarbeitung
CONTROL_FLUSH Flush, SyncPoint
Seite 36 / 120
ABAP/4 Basis Funktionsbausteine
8.2 Maeinheiten
Die Maeinheiten sind in der Tabelle T006 sprachunabhngig gespeichert.
Beispiel
ST Stck
Es ist zu beachten das im Programm bei einigen Befehlen (z.B. bei WRITE mit UNIT) die
sprachunabhngige Einheit bentigt wird.
Seite 37 / 120
ABAP/4 Basis Funktionsbausteine
IF sy-subrc NE 0.
ENDIF.
ENDFORM. " EINHEITEN_KONV
Die sprachabhngige Einheit muss nur bei Ausgabe von Batch Input genutzt werden, da es
sonst beim Abspielen der Mappe zu einem Fehler kommt.
Seite 38 / 120
ABAP/4 Basis Funktionsbausteine
IF <s_gi>-meins NE 'ST'.
CALL FUNCTION 'MATERIAL_UNIT_CONVERSION'
EXPORTING
input = <s_gi>-rfmng
* kzmeinh = 'X'
matnr = <s_gi>-matnr
meinh = 'ST'
meins = <s_gi>-meins
IMPORTING
output = <s_gi>-rfmng
EXCEPTIONS
conversion_not_found = 1
input_invalid = 2
material_not_found = 3
meinh_not_found = 4
meins_missing = 5
no_meinh = 6
output_invalid = 7
overflow = 8
OTHERS = 99.
IF sy-subrc NE 0.
ENDIF.
ENDIF.
Seite 39 / 120
ABAP/4 Basis Funktionsbausteine
l_date = sy-datum.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
Seite 40 / 120
ABAP/4 Basis Funktionsbausteine
DATA:
betr TYPE wrbtr. (Type P decimals 2)
PARAMETERS:
p_char17 TYPE char17,
p_waers TYPE waers DEFAULT 'USD'.
Beispiele
Charfeld 108000.00
Whrung USD (mit 2 Dezimalstellen)
Dec Feld 108000.00
Charfeld 108000.00
Whrung JPY (mit 0 Dezimalstellen)
Dec Feld 1080.00
ISOC
CURRENCY_AMOUNT_BAPI_TO_SAP
CURRENCY_AMOUNT_IDOC_TO_SAP
CURRENCY_AMOUNT_SAP_TO_BAPI
CURRENCY_AMOUNT_SAP_TO_IDOC
WMTO
CURRENCY_AMOUNT_DISPLAY_TO_SAP
CURRENCY_AMOUNT_SAP_TO_DISPLAY
Seite 41 / 120
ABAP/4 Basis Funktionsbausteine
method CLOSE_RFC .
*-beim erneuten Sichern ist das Memory in Q11 etc. noch gefllt
data: lf_str type string.
*->Abbruch beim Sichern, da duplicate key
CALL FUNCTION 'RFC_CONNECTION_CLOSE'
EXPORTING
destination = pros-dest
* TASKNAME =
EXCEPTIONS
destination_not_open = 1
OTHERS = 2.
IF sy-subrc <> 0.
lf_str = pros-dest.
raise exception type zcx_gto_ex
exporting textid = zcx_gto_ex=>close_rfc
msg1 = lf_str.
ENDIF.
endmethod.
method READ_JEST.
data: lf_opt type RFC_DB_OPT,
lt_opt type table of RFC_DB_OPT,
lt_data type table of TAB512,
lwa_data type tab512,
ls_jest type jest.
if sy-subrc eq 0.
e_jest = lt_data.
else.
clear e_jest.
endif.
endmethod.
Seite 42 / 120
ABAP/4 Basis Funktionsbausteine
FUNCTION zw_gto_get_notifstat.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*" IMPORTING
*" VALUE(I_SPRAS) TYPE SPRAS
*" TABLES
*" IT_QMNUM STRUCTURE JEST
*" OT_JEST STRUCTURE JEST
*" OT_STAT STRUCTURE TJ02T
*" OT_USSTAT STRUCTURE TJ30T OPTIONAL
*"----------------------------------------------------------------------
ENDFUNCTION.
Seite 43 / 120
ABAP/4 Basis Funktionsbausteine
Fuba TERMINAL_ID_GET
8.10 Datum
Seite 44 / 120
ABAP/4 Basis Funktionsbausteine
Seite 45 / 120
ABAP/4 Basis Funktionsbausteine
* Date
CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
EXPORTING
date_internal = sy-datlo
IMPORTING
date_external = date
EXCEPTIONS
date_internal_is_invalid = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
Seite 46 / 120
ABAP/4 Basis Funktionsbausteine
8.10.4 Wochen
INITIALIZATION.
8.10.4.2 F4 fr Woche
FORM f4_week.
DATA: l_week TYPE scal-week.
Seite 47 / 120
ABAP/4 Basis Funktionsbausteine
factory_calendar_not_found = 5
holiday_calendar_not_found = 6
parameter_conflict = 7
OTHERS = 8.
FORM get_start_end_date.
DATA: l_week TYPE scal-week,
l_date TYPE d.
DATA: l_periods TYPE i.
l_week = s_week-low.
IF sy-subrc = 1.
MESSAGE e102 WITH l_week.
ENDIF.
IF s_week-option EQ 'EQ'.
g_end_date = g_start_date + 6.
ELSE.
l_week = s_week-high.
Seite 48 / 120
ABAP/4 Basis Funktionsbausteine
IF sy-subrc EQ 0.
g_end_date = l_date + 6.
ELSE.
MESSAGE e102 WITH l_week.
ENDIF.
ENDIF.
l_date = g_start_date.
CALL FUNCTION 'DATE_GET_PERIOD'
EXPORTING
iv_date = l_date
iv_periodid = 'W'
iv_periods = '1'
IMPORTING
ev_periodstart = g_start_date
ev_periodend = g_end_date
EXCEPTIONS
error = 1
OTHERS = 2.
ENDFORM. "get_start_end_date
Beispiel
Es soll von einem Datum 6 Monate abgezogen werden und der letzte Tag des Monats ermittelt
werden.
Parameter
i_iprkz 2 fr Monat
i_rdmhd + fr letzten Tag im Monat.
Seite 49 / 120
ABAP/4 Basis Funktionsbausteine
Seite 50 / 120
ABAP/4 Basis Funktionsbausteine
data:
weekday type i,
start type d,
end type d.
parameters:
p_datum type d default sy-datum.
start-of-selection.
Hat man als Eingabe die Woche kann man sich den Montag ber die Funktionsbausteine
PERIOD_AND_DATE_CONVERT_INPUT oder
WEEK_GET_FIRST_DAY
ermitteln.
do 31 times.
Tagn = sy-index.
zac09-edatu+0(4) = zac00-monat+3(4).
Seite 51 / 120
ABAP/4 Basis Funktionsbausteine
zac09-edatu+4(2) = zac00-monat(2).
zac09-edatu+6(2) = tagn.
case w_tag.
when 1. ttag-wtag = 'Mo,'.
when 2. ttag-wtag = 'Di,'.
when 3. ttag-wtag = 'Mi,'.
when 4. ttag-wtag = 'Do,'.
when 5. ttag-wtag = 'Fr,'.
when 6. ttag-wtag = 'Sa,'.
when 7. ttag-wtag = 'So,'.
endcase.
Seite 52 / 120
ABAP/4 Basis Funktionsbausteine
CLEAR op_date.
ENDFORM.
Seite 53 / 120
ABAP/4 Basis Funktionsbausteine
DATA:
g_date TYPE sy-datum.
g_date = '20080323'.
WRITE: / g_date.
PERFORM check_work_day USING '2200'
CHANGING g_date.
WRITE: / g_date.
*&---------------------------------------------------------------------*
*& Form check_work_day
*&---------------------------------------------------------------------*
* Check is the date a work day
* Yes -> OK
* No -> Get the previous work day
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
FORM check_work_day USING fp_vkorg TYPE vkorg
CHANGING fp_date TYPE scal-date.
DATA: l_fabkl TYPE scal-fcalid,
l_datn(8) TYPE n,
l_datc TYPE sy-datum,
l_scal_dati TYPE scal-date,
l_scal_dato TYPE scal-date.
DATA: lt_tagattr TYPE STANDARD TABLE OF casdayattr,
ls_tagattr TYPE casdayattr.
l_datn = fp_date.
DO 7 TIMES.
l_datc = l_datn.
CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'
EXPORTING
date = l_datc
EXCEPTIONS
plausibility_check_failed = 01.
IF sy-subrc EQ 0.
EXIT.
ELSE.
l_datn = l_datn - 1.
ENDIF.
ENDDO.
l_scal_dati = l_datn.
Seite 54 / 120
ABAP/4 Basis Funktionsbausteine
date_after_range = 3
date_before_range = 4
date_invalid = 5
factory_calendar_not_found = 6
OTHERS = 7.
IF sy-subrc EQ 0.
fp_date = l_scal_dato.
ENDIF.
ENDFORM. "check_work_day
Gleichen Tage zurckgeben, wenn dieser ein Arbeitstag ist sonst vorherigen Arbeitstag
ermitteln.
l_datn = fp_date.
DO 7 TIMES.
l_datc = l_datn.
CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'
EXPORTING
date = l_datc
EXCEPTIONS
plausibility_check_failed = 01.
IF sy-subrc EQ 0.
EXIT.
ELSE.
l_datn = l_datn - 1.
ENDIF.
ENDDO.
fp_date = l_datn.
DO 7 TIMES.
CLEAR lt_tagattr. REFRESH lt_tagattr.
CALL FUNCTION 'DAY_ATTRIBUTES_GET'
EXPORTING
factory_calendar = l_fabkl
holiday_calendar = ' '
date_from = fp_date
date_to = fp_date
language = sy-langu
TABLES
day_attributes = lt_tagattr
EXCEPTIONS
factory_calendar_not_found = 1
holiday_calendar_not_found = 2
Seite 55 / 120
ABAP/4 Basis Funktionsbausteine
date_has_invalid_format = 3
date_inconsistency = 4
OTHERS = 5.
IF sy-subrc <> 0.
ls_tagattr-freeday = 'X'.
APPEND ls_tagattr TO lt_tagattr.
ENDIF.
Seite 56 / 120
ABAP/4 Basis Funktionsbausteine
t009b_fehlerhaft = 01
t009_nicht_gefunden = 02.
" in note 60402 it's i_marc-periv, can be replaced.
IF sy-subrc = 0.
READ TABLE int_pper INDEX 1.
MOVE int_pper-prper TO priod.
ENDIF.
ENDCASE.
ENDFORM. "periode
Seite 57 / 120
ABAP/4 Basis Funktionsbausteine
p_intrange = i_rsintrange.
APPEND s_erdat.
Fuba IDWT_READ_MONTH_TEXT
MONTH_NAMES_GET
Seite 58 / 120
ABAP/4 Basis Funktionsbausteine
Den Text fr den Feiertag kann man aus der Tabelle THOLT lesen.
Beispiel
Es werden die Feiertage fr das Bundesland Baden Wrttemberg geprft.
Seite 59 / 120
ABAP/4 Basis Funktionsbausteine
Seite 60 / 120
ABAP/4 Basis Funktionsbausteine
8.11 Programmvarianten
Programmvarianten knnen mit dem Fuba RS_VARIANT_CONTENTS gelesen und
geschrieben werden.
Seite 61 / 120
ABAP/4 Basis Funktionsbausteine
Fuba
Beispiel
Das Ausgabefeld darf max. 22 stellig sein. Da hier das Feld wa_values-atwtb 30-stellig ist,
muss ber ein Zwischenfeld gearbeit werden.
Seite 62 / 120
ABAP/4 Basis Funktionsbausteine
DATA:
lw_string_in TYPE string,
lw_string_ot TYPE string,
lw_is_ok TYPE scpuserec.
lw_string_in = pw_string.
CHECK sy-subrc = 0.
IF NOT lw_is_ok = 'X'.
pw_string = lw_string_ot.
ENDIF.
Beispiel
Dieser Fuba konvertiert z.B. die deutschen Umlaute bei Ausgabe in Sprache EN entsprechend
der Codepage.
Seite 63 / 120
ABAP/4 Basis Funktionsbausteine
Z.B. VA02
Seite 64 / 120
ABAP/4 Basis Funktionsbausteine
* Example parameters:
* wr:5300 Plant
* pa:test Path on the FTP Server
* fn:MB52 Filename
* sid:Q01 SID SAP
lw_command = 'ZBC_FTP'.
concatenate 'wr:' p_plant into lw_para1.
concatenate 'pa:' p_path into lw_para2.
concatenate 'fn:' p_file into lw_para3.
concatenate 'sid:' p_sid into lw_para4.
concatenate lw_para1 lw_para2 lw_para3 lw_para4
into lw_params separated by space.
Seite 65 / 120
ABAP/4 Basis Funktionsbausteine
ws_errmsg-name = 'File-Transfer'(104).
if ( lw_status = 'O' ) and ( sy-subrc = 0 ).
ws_errmsg-value = 'ohne Fehler'(105).
else.
ws_errmsg-value = 'Fehler bei Ausfhrung'(106).
endif.
ENDFORM.
Seite 66 / 120
ABAP/4 Basis Funktionsbausteine
8.16 Adressen
* Adresse lesen
ls_addr1_sel-addrnumber = l_adrnr.
CALL FUNCTION 'ADDR_GET'
EXPORTING
address_selection = ls_addr1_sel
IMPORTING
address_value = ls_addr1_val
EXCEPTIONS
parameter_error = 01
address_not_exist = 02
version_not_exist = 03
internal_error = 04
OTHERS = 99.
fps_addr = ls_addr1_val.
ENDFORM.
Seite 67 / 120
ABAP/4 Basis Funktionsbausteine
Beispiel
Bei nachfolgendem Beispiel wird die Adresse und E-Mail-Adresse zum Kunden gelesen.
Der Fuba ADDR_COMM_GET liefert die E-Mail Adressen aus der ADR6 und das Feld
REMARK (aus der ADRT) zurck.
* E-Mail-Adressen lesen
CALL FUNCTION 'ADDR_COMM_GET'
EXPORTING
address_number = l_adrnr
table_type = 'ADSMTP'
TABLES
comm_table = li_adr6
EXCEPTIONS
parameter_error = 1
address_not_exist = 2
internal_error = 3
OTHERS = 4.
IF sy-subrc = 0.
LOOP AT li_adr6 ASSIGNING <ls_adr6>
WHERE flgdefault NE space.
fps_email = <ls_adr6>-smtp_addr.
EXIT.
ENDLOOP.
ENDIF.
IF fps_email IS INITIAL.
IF sy-batch IS INITIAL.
MESSAGE e024(zsd_allg) WITH fp_kunnr.
ELSE.
MESSAGE s024(zsd_allg) WITH fp_kunnr.
ENDIF.
* E-Mail Adresse fr Kunde &1 fehlt
ENDIF.
ENDFORM. "call_addr_get
Weitere Beispiele
Seite 68 / 120
ABAP/4 Basis Funktionsbausteine
FIELD-SYMBOLS:
<ls_comm_tel> TYPE adtel.
CLEAR fp_telf1.
l_address_number = fp_adrnr.
Seite 69 / 120
ABAP/4 Basis Funktionsbausteine
ENDIF.
ENDLOOP.
IF l_tel_extens IS INITIAL.
fp_telf1 = l_tel_number.
ELSE.
IF l_tel_extens(1) EQ '-'.
CONCATENATE l_tel_number l_tel_extens
INTO fp_telf1.
ELSE.
CONCATENATE l_tel_number '-' l_tel_extens
INTO fp_telf1.
ENDIF.
ENDIF.
ENDFORM. " PHONE_NUMBER_GET
*&---------------------------------------------------------------------*
*& Form FAX_NUMBER_GET
*&---------------------------------------------------------------------*
* Read fax number and return fax number plus extension
* e.g. +41 52 883-3800 (-3800 is the extension)
*----------------------------------------------------------------------*
* -->FP_ADRNR Address number
* <--FP_TELFX Fax number
*----------------------------------------------------------------------*
FORM fax_number_get USING fp_adrnr TYPE kna1-adrnr
CHANGING fp_telfx TYPE char40.
DATA:
l_address_number TYPE adrc-addrnumber,
li_comm_fax TYPE STANDARD TABLE OF adfax.
FIELD-SYMBOLS:
<ls_comm_fax> TYPE adfax.
CLEAR fp_telfx.
l_address_number = fp_adrnr.
Seite 70 / 120
ABAP/4 Basis Funktionsbausteine
CHECK sy-subrc EQ 0.
IF <ls_comm_fax>-fax_extens IS INITIAL.
fp_telfx = <ls_comm_fax>-fax_number.
ELSE.
IF <ls_comm_fax>-fax_extens(1) EQ '-'.
CONCATENATE <ls_comm_fax>-fax_number <ls_comm_fax>-fax_extens
INTO fp_telfx.
ELSE.
CONCATENATE <ls_comm_fax>-fax_number '-' <ls_comm_fax>-fax_extens
INTO fp_telfx.
ENDIF.
ENDIF.
ENDFORM. " FAX_NUMBER_GET
*&---------------------------------------------------------------------*
*& Form MAIL_ADDRESS_GET
*&---------------------------------------------------------------------*
* Read eMail address
*----------------------------------------------------------------------*
* -->FP_ADRNR Address number
* <--FP_SMTP_ADDR Mail address
*----------------------------------------------------------------------*
FORM mail_address_get USING fp_adrnr TYPE kna1-adrnr
CHANGING fp_smtp_addr TYPE adsmtp-smtp_addr.
DATA:
l_address_number TYPE adrc-addrnumber,
li_comm_smtp TYPE STANDARD TABLE OF adsmtp.
FIELD-SYMBOLS:
<ls_comm_smtp> TYPE adsmtp.
CLEAR fp_smtp_addr.
l_address_number = fp_adrnr.
Seite 71 / 120
ABAP/4 Basis Funktionsbausteine
CHECK sy-subrc EQ 0.
fp_smtp_addr = <ls_comm_smtp>-smtp_addr.
FIELD-SYMBOLS:
<ls_comm_uri> TYPE aduri.
CLEAR fp_url.
l_address_number = fp_adrnr.
CHECK sy-subrc EQ 0.
fp_url = <ls_comm_uri>-uri_addr.
Seite 72 / 120
ABAP/4 Basis Funktionsbausteine
Fr die Adresse muss die Adressnummer der Firma und Personalnummer des Users ermittelt
werden. Diese Nummern finden Sie in der Tabelle USR21. Man kann diese Nummern auch
ber den Funktionsbaustein SUSR_USER_READ ermitteln.
Die Adressdaten der Firma knnen ber den Funktionsbaustein ADDR_GET gelesen werden.
Weitere Komponenten wie z.B. E-Mail oder Fax knnen mit den Funktionsbaustein
ADDR_PERS_COMP_COMM_GET gelesen werden.
Beispiel
DATA:
l_addrnum TYPE usaddress,
l_addrpers TYPE addr3_sel,
l_uname TYPE usr02-bname,
li_adr6 TYPE STANDARD TABLE OF adsmtp.
* Adress-/Personalnummer ermitteln
CALL FUNCTION 'SUSR_USER_READ'
EXPORTING
user_name = ip_uname
IMPORTING
user_address = l_addrnum
EXCEPTIONS
user_name_not_exists = 1
internal_error = 2
OTHERS = 3.
IF sy-subrc EQ 0.
* Firmen-/Adressdaten ermitteln
l_addrpers-persnumber = l_addrnum-persnumber.
l_addrpers-addrnumber = l_addrnum-addrnumber.
CALL FUNCTION 'ADDR_PERS_COMP_GET'
EXPORTING
address_pers_in_comp_selection = l_addrpers
IMPORTING
ADDRESS_PERS_IN_COMP_VALUE = op_addr3.
* Internetadresse ermitteln
CALL FUNCTION 'ADDR_PERS_COMP_COMM_GET'
EXPORTING
address_number = l_addrnum-addrnumber
person_number = l_addrnum-persnumber
table_type = 'ADSMTP'
TABLES
comm_table = li_adsmtp
EXCEPTIONS
parameter_error = 1
address_not_exist = 2
person_not_exist = 3
internal_error = 4
OTHERS = 5.
IF sy-subrc <> 0.
ENDIF.
Seite 73 / 120
ABAP/4 Basis Funktionsbausteine
Funktionsbaustein ADDR_TSAD3T_READ.
Seite 74 / 120
ABAP/4 Basis Funktionsbausteine
8.18 Belegdaten
Seite 75 / 120
ABAP/4 Basis Funktionsbausteine
8.19 F4 Hilfe
* Ausgabe Werte
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
DDIC_STRUCTURE = 'ZZUH_TKNUMA'
RETFIELD = 'KNUMA'
VALUE_ORG = 'S'
TABLES
VALUE_TAB = TKNUMA_TAB
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3.
ENDMODULE. " zz_knuma_PI INPUT
FORM f4_atnam.
TYPES:
BEGIN OF ts_cabx,
atnam TYPE cabn-atnam,
atbez TYPE cabnt-atbez,
END OF ts_cabx.
DATA:
l_dyname TYPE d020s-prog,
l_dynumb TYPE d020s-dnum.
DATA:
li_ksml TYPE tt_ksml,
li_cabn TYPE tt_cabn,
li_cabnt TYPE tt_cabnt,
li_cawn TYPE tt_cawn,
li_cabx TYPE STANDARD TABLE OF ts_cabx,
li_dynpfields TYPE cms_tab_search_fields,
lr_atinn TYPE RANGE OF cabn-atinn.
DATA:
ls_klah TYPE klah,
ls_ksml TYPE ksml,
ls_cabx TYPE ts_cabx,
ls_atinn LIKE LINE OF lr_atinn,
ls_dynpfields TYPE dynpread.
DATA:
Seite 76 / 120
ABAP/4 Basis Funktionsbausteine
l_dyname = sy-repid.
l_dynumb = sy-dynnr.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = l_dyname
dynumb = l_dynumb
TABLES
dynpfields = li_dynpfields
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.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CLEAR ls_ksml.
Seite 77 / 120
ABAP/4 Basis Funktionsbausteine
ls_ksml-clint = ls_klah-clint.
APPEND ls_ksml TO li_ksml.
ls_atinn-sign = 'I'.
ls_atinn-option = 'EQ'.
LOOP AT li_ksml ASSIGNING <ls_ksml>.
ls_atinn-low = <ls_ksml>-imerk.
APPEND ls_atinn TO lr_atinn.
ENDLOOP.
l_dynprog = sy-repid.
l_dynpnr = sy-dynnr.
l_dynprofield = 'P_ATNAM'.
ls_cabx-atnam = <ls_cabn>-atnam.
ls_cabx-atbez = <ls_cabnt>-atbez.
APPEND ls_cabx TO li_cabx.
ENDLOOP.
Seite 78 / 120
ABAP/4 Basis Funktionsbausteine
dynpnr = l_dynpnr
dynprofield = l_dynprofield
value_org = 'S'
TABLES
value_tab = li_cabx.
ENDFORM. "f4_atnam
Seite 79 / 120
ABAP/4 Basis Funktionsbausteine
PROCESS ON VALUE-REQUEST.
FIELD w_antr_pos-wms_group MODULE wms_group_f4.
FORM wms_group_f4 .
DATA:
ls_wms_grpval TYPE zmm_wms_grpval,
ls_dynpfields TYPE dynpread,
li_wms_grpt TYPE ti_wms_grpt,
li_wms_grpval TYPE STANDARD TABLE OF zmm_wms_grpval,
li_return TYPE STANDARD TABLE OF ddshretval,
li_dynpfields TYPE STANDARD TABLE OF dynpread.
FIELD-SYMBOLS:
<ls_return> TYPE ddshretval,
<ls_wms_grpt> TYPE ts_wms_grpt.
* Ausgabe Werte
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
* ddic_structure = 'ZMM_WMS_GRPT'
retfield = 'WMS_GROUP'
value_org = 'S'
TABLES
value_tab = li_wms_grpt
return_tab = li_return
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc EQ 0.
READ TABLE li_return ASSIGNING <ls_return> INDEX 1.
* Set value for field WMS Group and Storage location
IF sy-subrc EQ 0.
w_antr_pos-wms_group = <ls_return>-fieldval.
Seite 80 / 120
ABAP/4 Basis Funktionsbausteine
w_antr_pos-begru
CHANGING ls_wms_grpval.
IF ls_wms_grpval-lgpro IS NOT INITIAL.
ls_dynpfields-fieldname = 'W_ANTR_POS-LGPRO'.
ls_dynpfields-fieldvalue = ls_wms_grpval-lgpro.
APPEND ls_dynpfields TO li_dynpfields.
READ TABLE li_wms_grpt ASSIGNING <ls_wms_grpt>
WITH KEY wms_group = w_antr_pos-wms_group.
IF sy-subrc EQ 0.
ls_dynpfields-fieldname = 'GS_WMS_GRPT-WMS_GROUP_DESC'.
ls_dynpfields-fieldvalue = <ls_wms_grpt>-wms_group_desc.
APPEND ls_dynpfields TO li_dynpfields.
ENDIF.
CALL FUNCTION 'DYNP_VALUES_UPDATE'
EXPORTING
dyname = sy-repid
dynumb = sy-dynnr
TABLES
dynpfields = li_dynpfields.
ENDIF.
ENDIF.
ENDIF.
Seite 81 / 120
ABAP/4 Basis Funktionsbausteine
PERFORM pov_bwart.
FORM pov_bwart .
IF lt_val[] IS INITIAL.
l_val-key = '101'.
Seite 82 / 120
ABAP/4 Basis Funktionsbausteine
l_val-key = '103'.
l_val-text = 'Wareneingang zur Bestellung in Sperrbestand'.
APPEND l_val TO lt_val.
l_val-key = '105'.
l_val-text = 'Freigeben des Sperrbestandes ans Lager'.
APPEND l_val TO lt_val.
ENDIF.
Seite 83 / 120
ABAP/4 Basis Funktionsbausteine
8.20 F4 fr Parameter
Parameter
Aufbau F4 in PBO
**********************************************************************
AT SELECTION-SCREEN OUTPUT.
**********************************************************************
PERFORM output_modify.
IF lt_val[] IS INITIAL.
l_val-key = '0080'.
l_val-text = 'Lagerort1'.
APPEND l_val TO lt_val.
l_val-key = 'P092'.
l_val-text = 'Lagerort2'.
APPEND l_val TO lt_val.
l_val-key = 'P093'.
l_val-text = 'Lagerort3'.
APPEND l_val TO lt_val.
SORT lt_val BY key.
Seite 84 / 120
ABAP/4 Basis Funktionsbausteine
SELECT-OPTIONS
SELECT-OPTIONS s_lgort FOR g_lgort.
**********************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_lgort-low.
**********************************************************************
PERFORM lgort_f4 USING s_lgort-low
s_lgort[].
FIELD-SYMBOLS:
<ls_t001l> TYPE ts_t001l,
<ls_return> TYPE ddshretval.
Seite 85 / 120
ABAP/4 Basis Funktionsbausteine
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
Seite 86 / 120
ABAP/4 Basis Funktionsbausteine
DDIF_TABL_GET
Offset der Felder wird nicht zurckgegeben.
Seite 87 / 120
ABAP/4 Basis Funktionsbausteine
DDIF_NAMETAB_GET
Offset ist vorhanden aber nicht fr Programm zu benutzen.
Seite 88 / 120
ABAP/4 Basis Funktionsbausteine
DDIF_FIELDINFO_GET
Mit Texten pro Feld in DFIES_TAB.
Hinweis Werden die Texte nicht bentigt sollte man den effizientieren Fuba
DDIF_NAMETAB_GET verwenden.
Seite 89 / 120
ABAP/4 Basis Funktionsbausteine
Fuba DYNP_VALUES_READ
ls_dynpfields-fieldname = 'VBAK-LIFSK'.
APPEND ls_dynpfields TO li_dynpfields.
Seite 90 / 120
ABAP/4 Basis Funktionsbausteine
8.26 Popups
* Hilfsstruktur fr Spaltenberschriften
DATA: BEGIN OF help_coltitle,
matnr TYPE zmms_alv_info_records-matnr,
maktx TYPE zmms_alv_info_records-maktx,
lifnr TYPE zmms_alv_info_records-lifnr,
name1 TYPE zmms_alv_info_records-name1,
ekorg TYPE zmms_alv_info_records-ekorg,
werks TYPE zmms_alv_info_records-werks,
infnr TYPE zmms_alv_info_records-infnr,
END OF help_coltitle.
Seite 91 / 120
ABAP/4 Basis Funktionsbausteine
ls_popup-infnr = <ls_eina>-infnr.
* Aufruf Universal-Popup
help_title = 'More than one info record (please select one)'(005).
PERFORM tab_fields_get USING 'zmms_alv_info_records'
CHANGING li_dfies.
PERFORM field_read USING 'MATNR'
li_dfies
CHANGING help_coltitle-matnr.
PERFORM field_read USING 'MAKTX'
li_dfies
CHANGING help_coltitle-maktx.
PERFORM field_read USING 'LIFNR'
li_dfies
CHANGING help_coltitle-lifnr.
PERFORM field_read USING 'NAME1'
li_dfies
CHANGING help_coltitle-name1.
PERFORM field_read USING 'EKORG'
li_dfies
CHANGING help_coltitle-ekorg.
PERFORM field_read USING 'WERKS'
li_dfies
Seite 92 / 120
ABAP/4 Basis Funktionsbausteine
CHANGING help_coltitle-werks.
PERFORM field_read USING 'INFNR'
li_dfies
CHANGING help_coltitle-infnr.
CALL FUNCTION 'G_DISPLAY_SELECTION_DYNPRO'
EXPORTING
dynp_title = help_title
sel_title1 = help_coltitle
first_index = 1
key_columns = 3
number_of_rows = 8
show_also_1 = 'X'
start_column = 20
start_row = 10
width_of_titles = 'X'
allow_sort = 'X'
IMPORTING
sel_index = l_index
TABLES
sel_table = li_popup
EXCEPTIONS
no_lines = 1
no_line_picked = 2
OTHERS = 3.
IF sy-subrc = 0.
READ TABLE fpi_eina INTO fps_eina INDEX l_index.
ELSEIF sy-subrc = 2.
MESSAGE e000 WITH 'Process canceled'(004).
ENDIF.
ENDFORM. "tab_fields_get
*&---------------------------------------------------------------------*
*& Form field_read
*&---------------------------------------------------------------------*
Seite 93 / 120
ABAP/4 Basis Funktionsbausteine
* text
*----------------------------------------------------------------------*
* -->FP_FIELDNAME text
* -->FP_REPTEXT text
*----------------------------------------------------------------------*
FORM field_read USING fp_fieldname TYPE fieldname
fpi_dfies TYPE dfies_tab
CHANGING fp_reptext TYPE any.
FIELD-SYMBOLS:
<ls_dfies> TYPE dfies.
Seite 94 / 120
ABAP/4 Basis Funktionsbausteine
if ps_auto-vbeln is initial.
l_vbeln = ps_auto-aufnr.
else.
l_vbeln = ps_auto-vbeln.
endif.
l_flog_dat = fp_flog.
call function 'APPL_LOG_DISPLAY'
exporting
external_number = l_vbeln
date_from = l_flog_dat
title_list_screen = 'Error Autom. processing'
suppress_selection_dialog = 'X'.
Seite 95 / 120
ABAP/4 Basis Funktionsbausteine
METHOD applog_create .
DATA:
ls_log TYPE bal_s_log.
IF im_extid IS INITIAL.
* set in constructor
ls_log-extnumber = get_extid( ).
ELSE.
ls_log-extnumber = im_extid.
ENDIF.
ls_log-object = get_object( ).
ls_log-subobject = get_subobject( ).
ls_log-alprog = get_progname( ).
ls_log-aldate_del = sy-datum + im_nrofdays. "keep no of days
ls_log-del_before = 'X'.
* CASE get_highest_error( ).
* WHEN 'E'
* OR 'A'.
* ls_log-alstate = '1'.
* WHEN 'W'.
* ls_log-alstate = '2'.
* WHEN OTHERS.
* ls_log-alstate = '3'.
* ENDCASE.
CALL FUNCTION 'BAL_LOG_CREATE'
EXPORTING
i_s_log = ls_log
IMPORTING
e_log_handle = g_handle
EXCEPTIONS
log_header_inconsistent = 1
OTHERS = 2.
IF sy-subrc <> 0.
* just stop it.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDMETHOD.
METHOD output_to_applog .
* Show messages in pop up
DATA:
* l_handle TYPE balloghndl,
l_tmstmp TYPE char20,
l_logged TYPE boolean,
ls_log TYPE bal_s_log,
ls_msg TYPE bal_s_msg,
li_handle TYPE bal_t_logh,
l_handle TYPE balloghndl.
FIELD-SYMBOLS:
<s_err> TYPE ts_error.
* fp_proglog_func:
* A Show All Messages
* E Show Errors Only (E & A)
* Check if the program log has to be written
CHECK fp_applog_func = 'A' "ALL
OR ( fp_applog_func = 'E' AND "ERRORS ONLY
Seite 96 / 120
ABAP/4 Basis Funktionsbausteine
IF get_handle( ) IS INITIAL.
CALL METHOD me->applog_create
EXPORTING
im_extid = fp_extid
im_nrofdays = fp_nrofdays.
l_handle = get_handle( ).
APPEND l_handle TO li_handle.
ELSE.
l_handle = get_handle( ).
APPEND l_handle TO li_handle.
* load the existing log from the database
CALL FUNCTION 'BAL_DB_LOAD'
EXPORTING
i_t_log_handle = li_handle
* i_do_not_load_messages = 'X'
EXCEPTIONS
no_logs_specified = 1
log_not_found = 2
log_already_loaded = 3
OTHERS = 4.
IF sy-subrc <> 0.
* we don't care about this. The first time the log is not found
ENDIF.
ENDIF.
* Problem class
CASE ls_msg-msgty.
WHEN 'A'.
ls_msg-probclass = '1'. "very important
WHEN 'E'.
ls_msg-probclass = '2'. "important
WHEN 'W'.
ls_msg-probclass = '3'. "medium
WHEN OTHERS.
ls_msg-probclass = '4'. "Additional information
ENDCASE.
* Timestamp
l_tmstmp = <s_err>-date.
l_tmstmp+8(6) = <s_err>-time.
ls_msg-time_stmp = l_tmstmp.
ls_msg-msg_count = <s_err>-row.
Seite 97 / 120
ABAP/4 Basis Funktionsbausteine
IMPORTING
* E_S_MSG_HANDLE =
e_msg_was_logged = l_logged
* E_MSG_WAS_DISPLAYED =
EXCEPTIONS
log_not_found = 1
msg_inconsistent = 2
log_is_full = 3
OTHERS = 4.
IF sy-subrc = 1
OR sy-subrc = 3.
EXIT. "no use to continue
ENDIF.
ENDLOOP.
CHECK sy-subrc = 0.
Seite 98 / 120
ABAP/4 Basis Funktionsbausteine
Beispiel
Internal note for equipment.
CHECK sy-subrc = 0.
Seite 99 / 120
ABAP/4 Basis Funktionsbausteine
Dieser Fuba liest den Belegfluss. Je nach Einstiegsbeleg wird der Belegfluss zurckgeliefert.
Wenn man den Belegfluss via Lieferung liest bekommt man die gesamte bersicht.
Der Belegfluss wird je Position zurckgegeben. Der Belegfluss ist sortiert nach Datum/Uhrzeit.
*&---------------------------------------------------------------------*
*& Form EAN_CHECK_DIGIT_DETERMINE
*&---------------------------------------------------------------------*
* Determine check digit at position 13
* Note: Function module EAN_DETERMINE_CHECKDIGIT shift leading 0.
* In: 069876430701
* Out: 698764307017
*----------------------------------------------------------------------*
* -->FP_EAN11 EAN number from MARA
* <--FP_EAN11_OUT EAN number with check digit
*----------------------------------------------------------------------*
FORM ean_check_digit_determine USING fp_ean11 TYPE mara-ean11
CHANGING fp_ean11_out TYPE e1maram-ean11.
DATA:
l_len_in TYPE i,
l_len_out TYPE i,
l_ean11_in TYPE mara-ean11,
l_ean11_out TYPE e1maram-ean11.
Beispiel
Fr den Produktionsauftrag. Zuerst muss die Objektnummer ermittelt werden:
In dem Parameter LINE stehen dann die Statusinformationen, die z.B. in der CO03 angezeigt
werden.
DATA:
l_end_line TYPE i,
l_lines TYPE i,
ls_popup TYPE zpps_co41_reqcov,
ls_reqtype TYPE LINE OF tr_reqtype,
li_popup TYPE STANDARD TABLE OF zpps_co41_reqcov,
lr_reqtype TYPE tr_reqtype.
FIELD-SYMBOLS:
<ls_reqcov> TYPE zpps_co41_reqcov.
ls_reqtype-sign = 'I'.
ls_reqtype-option = 'EQ'.
IF fp_fieldname NE 'Others'.
ls_reqtype-low = fp_fieldname+5(2).
ENDIF.
APPEND ls_reqtype TO lr_reqtype.
IF fp_all EQ 'X'.
LOOP AT gis_reqcov ASSIGNING <ls_reqcov>
WHERE matnr EQ fp_matnr
AND werks EQ fp_werks.
ls_popup = <ls_reqcov>.
PERFORM alpha_conversion USING <ls_reqcov>-delnr_req
'OUT'
CHANGING ls_popup-delnr_req.
IF <ls_reqcov>-del12_cov IS INITIAL.
PERFORM alpha_conversion USING <ls_reqcov>-delnr_cov
'OUT'
CHANGING ls_popup-delnr_cov.
ELSE.
PERFORM alpha_conversion USING <ls_reqcov>-del12_cov
'OUT'
CHANGING ls_popup-del12_cov.
ENDIF.
APPEND ls_popup TO li_popup.
ENDLOOP.
ELSE.
LOOP AT gis_reqcov ASSIGNING <ls_reqcov>
WHERE matnr EQ fp_matnr
AND werks EQ fp_werks
AND delkz_cov EQ 'PA'
AND delnr_cov EQ fp_plnum
AND reqtype IN lr_reqtype.
ls_popup = <ls_reqcov>.
PERFORM alpha_conversion USING <ls_reqcov>-delnr_req
'OUT'
CHANGING ls_popup-delnr_req.
IF <ls_reqcov>-del12_cov IS INITIAL.
PERFORM alpha_conversion USING <ls_reqcov>-delnr_cov
'OUT'
CHANGING ls_popup-delnr_cov.
ELSE.
PERFORM alpha_conversion USING <ls_reqcov>-del12_cov
'OUT'
CHANGING ls_popup-del12_cov.
ENDIF.
APPEND ls_popup TO li_popup.
ENDLOOP.
ENDIF.
CHECK sy-subrc EQ 0.
Parameter
OBJECTCLAS z.B. COND_A fr nderungsbelege Agreements (VBO3)
OBJECTID Nummer des Beleges (z.B. Konditionsnummern (lesen via KONH-
KNUMA_BO) zum Agreement).
8.36.1 Ausgang
Mit den folgenden Funktionsbausteinen kann man IDOCs ausgeben.
8.36.2 Eingang
IF sy-subrc <> 0.
$akt_fehler = 'X'.
ROLLBACK WORK. "z_lvravi zurcksetzen
ENDIF.
Beispiel
if GV_FILENAME cs 'XLS'.
call function 'ALSM_EXCEL_TO_INTERNAL_TABLE'
exporting
FILENAME = P_ITFILE
I_BEGIN_COL = 1
I_BEGIN_ROW = 1
I_END_COL = 132
I_END_ROW = 9999
tables
INTERN = GT_MATPREISE_EXCEL
exceptions
INCONSISTENT_PARAMETERS = 1
UPLOAD_OLE = 2
others = 3.
if SY-SUBRC <> 0.
message id SY-MSGID type SY-MSGTY number SY-MSGNO
with SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
else.
loop at GT_MATPREISE_EXCEL.
case GT_MATPREISE_EXCEL-COL.
when 1.
GT_MATPREISE-MATNR = GT_MATPREISE_EXCEL-VALUE.
when 2.
GT_MATPREISE-WERKS = GT_MATPREISE_EXCEL-VALUE.
when 3.
GT_MATPREISE-PEINH = GT_MATPREISE_EXCEL-VALUE.
when 4.
GT_MATPREISE-PREIS = GT_MATPREISE_EXCEL-VALUE.
when 5.
GT_MATPREISE-BUKRS = GT_MATPREISE_EXCEL-VALUE.
append GT_MATPREISE.
endcase.
endloop.
INCLUDE sbal_constants.
l_s_msg-msgty = v_ret-type.
l_s_msg-msgid = v_ret-id.
l_s_msg-msgno = v_ret-number.
l_s_msg-msgv1 = v_ret-message_v1.
l_s_msg-msgv2 = v_ret-message_v2.
l_s_msg-msgv3 = v_ret-message_v3.
l_s_msg-msgv4 = v_ret-message_v4.
* Meldungen anhngen
CALL FUNCTION 'BAL_LOG_MSG_ADD'
EXPORTING
i_s_msg = l_s_msg
i_log_handle = gv_log_handle
EXCEPTIONS
log_not_found = 0
OTHERS = 1.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDLOOP.
FUNCTION /SIE/AD_ZAM_MESSAGE_SHOW_POPUP.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*" IMPORTING
*" REFERENCE(I_MESSAGE_TAB) TYPE GM_TY_MESG
*" REFERENCE(I_TITLE) TYPE SYST-MSGV1
*"----------------------------------------------------------------------
* Ausgabe der Nachrichten in einem POPUP.
*
* Dies ist eine Kopie des FUBAs C14Z_MESSAGES_SHOW_AS_POPUP.
* Diesem FUBA kann man keinen Titel mitgeben, deshalb
* wurde der FUBA kopiert.
*
*-----------------------------------------------------------------------
ENDFUNCTION.
FIELD-SYMBOLS:
<ls_message> TYPE mesg.
DATA:
Lv_ewm_destination type rfcdest.
Lv_ewm_destination = TEST.
CHECK sy-subrc = 0.
STXH Kopfdaten
STXL Textinformationen.
ENDFORM. "text_read
8.41 Nachrichten
Mit den nachfolgenden Fubas knnen Sie Nachrichten aufbereitet in der Struktur BAPIRET2
zurckgeben lassen.
http://www.sap-basis-abap.com/sapabap01.htm