Sie sind auf Seite 1von 124

ABAP/4 Basis

Funktionsbausteine

ABAP/4 Basis

Funktionsbausteine

Dokument-Historie

Version

Datum

Author

Änderungsgrund

1.0

Jan. 2013

Erhard Horak

Ersterstellung

1.1

Apr. 2014

Erhard Horak

Feiertag prüfen

1.2

Sept. 2014

Erhard Horak

Fubas für Nachrichten aufgenommen

Haftungsausschluss

Wir haben dieses Dokument zur internen Verwendung erstellt und stellen dieses Dokument via Homepage unseren Mitarbeitern zur Verfügung.

Falls sie dieses Dokument oder Auszüge aus diesem Dokument verwenden möchten, tun sie dies auf ihr eigenes Risiko.

Wir übernehmen keinerlei Gewähr für die Richtigkeit der Dokumentation und Verwendung in ihrem Coding und den daraus evtl. entstehenden Schäden.

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 BERECHTIGUNGSPRÜFUNG

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 MATERIALRÜCKMELDUNG

20

3.10 ZEITEN FÜR INSTANDHALTUNGS-/SERVICEAUFTRAG RÜCKMELDEN

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/PRÜFEN

25

5 BONUSABSPRACHEN (AGREEMENTS)

26

5.1 VERKNÜPFUNGEN 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 FÜR DYNPRO LESEN

32

8 ALLGEMEINE

35

8.1 ÜBERSICHT FUNKTIONSBAUSTEINE

35

8.2 MAßEINHEITEN

37

8.3 MAßEINHEITEN IM MATERIAL

39

8.4 BETRAG IN UNTERSCHIEDLICHEN WÄHRUNGEN

40

8.5 WÄHRUNGSFELD KONVERTIEREN

41

RFC

8.6 CLOSE

42

RFC

8.7 TABELLEN 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

ABAP/4 Basis

Funktionsbausteine

8.10.3 Datum ins interne Format umwandeln

46

8.10.4 Wochen

 

47

8.10.5 Berechnen Datum

49

8.10.6 Berechnen

Arbeitstage

49

8.10.7 Berechnen Wochentage

51

8.10.8 Wochenanfang (Montag) ermitteln

51

8.10.9 Datum prüfen

51

8.10.10 Wochentag ermitteln

52

8.10.11 Letzter Tag des Monats ermitteln

52

8.10.12 Nächsten/vorherigen Werktag ermitteln

53

8.10.13 Periode ermitteln

56

8.10.14 Letzten und ersten Tag in Periode ermitteln

57

8.10.15 Letzten/ersten Tag in Vormonat ermitteln

57

8.10.16 Monatsname ermitteln

58

8.10.17 Beginn Fiscal Jahr ermitteln

58

8.10.18 Datum in Fiscal Periode umwandeln

58

8.10.19 Feiertag prüfen

59

8.11 PROGRAMMVARIANTEN

61

8.12 FELDER KONVERTIEREN

62

8.13 TEXT KONVERTIEREN

63

8.14 AUFRUF TRANSAKTIONEN

64

8.15 COMMAND AUSFÜHREN

65

8.16 ADRESSEN

 

67

8.16.1 Adresse lesen

67

8.16.2 Adresszusatz lesen

68

8.17

ADRESSDATEN USER ERMITTELN

73

8.17.1

Anrede/Titel ermitteln

74

8.18

BELEGDATEN

 

75

8.18.1

Partnerdaten zum Beleg

75

8.19

F4

HILFE

76

8.19.1 Anzeige F4 zu einer Tabelle aus dem Data

76

8.19.2 Anzeige F4 zu einer internen

76

8.19.3 Anzeige F4 zu einer internen Tabelle mit Update von Dynprofeldern

80

8.19.4 F4 in PBO belegen

82

8.20 F4

FÜR PARAMETER

84

8.21 F4 HILFE FÜR SELECT-OPTIONS

85

8.22 F4

HILFE

ZU FELD KSCHL

86

8.23 ERMITTELN SAP STANDARD PFAD

86

8.24 DATA DICTIONARY

87

8.24.1

Feldinformationen zu Tabellen/Strukturen lesen

87

8.25 DYNPRO DATEN LESEN

90

8.26 POPUPS

 

91

8.26.1

Selektion Zeile aus interner Tabelle

91

8.27 APPLICATION LOG ANZEIGEN

95

8.28 APPLICATION LOG SCHREIBEN

96

8.29 TEXTE ANZEIGEN

 

99

8.30 BELEGFLUSS LESEN

100

8.31 PRÜFEN OB EIN FUNKTIONSBAUSTEIN EXISTIERT

102

8.32 PRÜFZIFFER FÜR EAN ERMITTELN

103

8.33 READ STATUS LINE

104

8.34 POPUP AUSGEBEN

 

105

8.35 ÄNDERUNGSBELEGE LESEN

107

8.36 IDOC AUSGABE

 

108

8.36.1 Ausgang

108

8.36.2 Eingang

108

8.37 EXCEL DATEI EINLESEN

110

8.38 FEHLERMELDUNGEN IM POPUP AUSGEBEN

111

8.38.1 BAL Fubas

 

111

8.38.2 Show Popup

114

ABAP/4 Basis

Funktionsbausteine

8.39 RFC VERBIDNUNG TESTEN

116

8.40 LESEN TEXTE

117

8.41 NACHRICHTEN

118

8.42 WEB LINK

119

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.

kann man feststellen ob es sich um einen RFC Fuba handelt. Die Funktionsgruppe zu den Fubas

Die Funktionsgruppe zu den Fubas sind in der Tabelle ENLFDIR.

ABAP/4 Basis

Funktionsbausteine

ABAP/4 Basis Funktionsbausteine 1.1 Berechtigungsprüfung Die Berechtigungsprüfung erfolgt über den Fuba

1.1 Berechtigungsprüfung

Die Berechtigungsprüfung erfolgt über den Fuba AUTHORITY_CHECK_RFC.

DATA: l_fname TYPE tfdir-funcname, l_fugr TYPE authb-rfc_name.

SELECT SINGLE funcname INTO l_fname FROM tfdir WHERE pname EQ sy-repid. SELECT SINGLE area INTO l_fugr FROM enlfdir WHERE funcname = l_fname.

CALL FUNCTION 'AUTHORITY_CHECK_RFC' EXPORTING userid

= sy-uname

= '/SIE/AD_ZAVGSDTABVF0000' = l_fugr

* functiongroup

functiongroup

EXCEPTIONS rfc_no_authority = 1

OTHERS

= 2.

IF sy-subrc NE 0. raise rfc_no_authority. ELSE.

ABAP/4 Basis

Funktionsbausteine

1.2 FB Aufruf Fehler abfangen

Mit dem Befehl CATCH CX_SY_DYN_CALL_ILLEGAL_FUNC kann man einen Programmabbruch vermeiden.

DATA:

l_ref

TYPE REF TO cx_root,

l_text

TYPE string.

"#EC NEEDED

IF ls_zamewcm1-fnam IS NOT INITIAL. TRY.

CALL FUNCTION ls_zamewcm1-fnam EXPORTING i_idoc_control = i_idoc_control CHANGING

ch_tcode

= ch_tcode

ch_imkpf

= ch_imkpf

cht_imseg

= cht_imseg.

CATCH cx_sy_dyn_call_illegal_func INTO l_ref. l_text = l_ref->get_text( ).

ENDTRY.

ENDIF.

ABAP/4 Basis

Funktionsbausteine

1.3 RFC Funktionsbausteine

Bei einem RFC Funtkionsbaustein wird immer die Struktur des SAP Systems gezogen. Um die Strukturen gleich zu halten, sollte man mit eigenen Strukturen arbeiten.

Beispiel Die Range Tabelle IMT_MATNR_RANGE ist im Sende- und Empfangssystem unterschiedlich definiert.

Im Sendesystem ist die Materialnummer 18-stellig 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

SELECT * FROM mara INTO TABLE ext_mara WHERE matnr IN imt_matnr_range.

ENDFUNCTION.

TYPE MARA_TT SELECT * FROM mara INTO TABLE ext_mara WHERE matnr IN imt_matnr_range . ENDFUNCTION .

ABAP/4 Basis

Funktionsbausteine

Im Empfangssystem ist die Materialnummer 10-stellig definiert.

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

SELECT * FROM mara

INTO TABLE ext_mara WHERE matnr IN imt_matnr_range.

ENDFUNCTION.

TYPE MARA_TT SELECT * FROM mara INTO TABLE ext_mara WHERE matnr IN imt_matnr_range. ENDFUNCTION. Seite 5

ABAP/4 Basis

Funktionsbausteine

Test

Sendesystem Die Materialnummer wird in korrekter Länge gefüllt.

Die Materialnummer wird in korrekter Länge gefüllt. Empfangssystem Die Materialnummer wird entsprechend

Empfangssystem Die Materialnummer wird entsprechend abgeschnitten.

wird in korrekter Länge gefüllt. Empfangssystem Die Materialnummer wird entsprechend abgeschnitten. Seite 6 / 120

ABAP/4 Basis

Funktionsbausteine

1.4 Fubas variabel aufrufen

Mit folgendem Coding kann man die Parameter variabel an den Fuba übergeben.

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, p_lin type ABAP_FUNC_PARMBIND, e_tab type ABAP_FUNC_EXCPBIND_TAB, e_lin type ABAP_FUNC_EXCPBIND.

, p_lin type ABAP_FUNC_PARMBIND , e_tab type ABAP_FUNC_EXCPBIND_TAB , e_lin type ABAP_FUNC_EXCPBIND .

"sorted table

"hashed table

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

ERROR

*"

*"

*" CHANGING VALUE(C_VFKOMV) TYPE REF TO DATA OPTIONAL *" EXCEPTIONS *"

*"

*"----------------------------------------------------------------------

* import communication structures komk = comm_head_i. komp = comm_item_i.

* initialization refresh xkomv. refresh: p_tab, e_tab.

clear

old_calc_type.

* publication of global field symbol if c_vfkomv is requested. assign c_vfkomv->* to <vfkomv>. else. unassign <vfkomv>. endif.

* provide the global variable with a definitive value gv_no_display = ctrl_no_display.

* transfer table of document conditions TKOMV into item condition table

* XKOMV. Use standard pricing routines included in function pool V61A

* to do this. if ctrl_grey is initial.

ABAP/4 Basis

Funktionsbausteine

* build parameter list if <vfkomv> is assigned. p_lin-kind = ABAP_FUNC_CHANGING. p_lin-name = 'C_VFKOMV'. p_lin-value = C_VFKOMV. insert p_lin into table p_tab. endif.

"reference of <vfkomv>

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

insert p_lin into table p_tab.

into p_lin-tables_wa.

endif. p_lin-name = 'TKOMV'. get reference of TKOMV[] into p_lin-value.

get reference of TKOMV

insert p_lin into table p_tab.

p_lin-name = 'YKOMV'.

get reference of XKOMV[] into p_lin-value. insert p_lin into table p_tab.

into p_lin-tables_wa.

"XKOMV --> YKOMV

* build exception list e_lin-name = 'ERROR'. e_lin-value = 1. insert e_lin into table e_tab.

* call subscreen preparation call function 'PRICING_SUBSCREEN_PBO' parameter-table p_tab exception-table e_tab.

endif.

ABAP/4 Basis

Funktionsbausteine

1.5 Übergabe RANGE Tabelle

Es können RANGE Tabellen bzw. SELECT-OPTIONS an die Funktionsbausteine übergeben werden.

Als Bezugstyp für diese Tabellen kann man die SAP Tabellentypen RANGE* verwenden.

1.6 BAPI Fubas testen

Testet man einen BAPI Funktionsbaustein über SE37 wird zwar eine Meldung „Beleg xx angelegt“ erzeugt aber der Beleg ist nicht auf der DB, da der COMMIT WORK in dem Fuba fehlt.

Um den Beleg anzulegen, kann man wie folgt vorgehen:

SE37 -> Testen -> Testsequenz

Hier wird der Fuba z.B. BAPI_PO_CREATE1 und der Fuba BAPI_TRANSACTION_COMMIT eingetragen.

Anschließend kann wie bisher weiter getestet werden. Siehe auch OSS Hinweis 420646.

ABAP/4 Basis

Funktionsbausteine

2 Materialstamm

2.1 Verbrauchswerte lesen

CALL FUNCTION 'WOD1_READ_CONSUMPTIONS' EXPORTING

i_matnr

= <matnr>

i_werks

= <l_werks>

i_perkz

= p_perkz “Periodenkennzeichen

i_provb

= ‘G’ “’U’)

TABLES

t_ges_verb = li_consval EXCEPTIONS

error

= 1

not_found

= 2

OTHERS

= 3.

3 Kundenservice

3.1 Codes lesen

Das Eingabefeld (i_notif_cat) setzt sich zusammen aus Meldungsart (QMART) und Berichtsschma (RBNR). Diese Werte erhält man aus der Tabelle TQ80.

Die Katalogart (z.B. FEKAT, SAKAT) ist ebenfalls in der Tabelle TQ80.

Concatenate tq80-qmart tq80-rbnr Into i_notif_cat. *-Lesen aller Codes refresh: t_code2.

CALL FUNCTION 'ALM_MEREP_015_GETDETAIL' DESTINATION pros-dest EXPORTING notif_catprofile = i_notif_cat TABLES

codes

= t_code2

return

= lt_ret.

READ TABLE lt_ret TRANSPORTING NO FIELDS WITH KEY type = 'E'. IF sy-subrc EQ 0. RAISE EXCEPTION TYPE zcx_gto_ex EXPORTING textid = zcx_gto_ex=>no_codes. ENDIF. *-selektieren relevante Codegruppen für ValueHelp DELETE t_code2 WHERE katalogart NE i_katalogart.

ABAP/4 Basis

Funktionsbausteine

3.2 Meldung lesen

Eine bestehende Meldung kann über den nachfolgenden Fuba gelesen werden.

CALL FUNCTION 'ALM_MEREP_011_GETDETAIL' DESTINATION pros-dest EXPORTING

user

= sy-uname

notif_no

= lf_qmnum

IMPORTING

notification_header

= notifheader

TABLES

notification_item

= t_notifitem

notification_cause

= t_notifcause

notification_partner = t_partner

notification_longtext = lt_notiftext

NOTIFICATION_STATUS

= t_notifstatus

return

= lt_ret.

User Status

= t_notifstatus return = lt_ret. User Status Das Lesen kann auch via BAPI_SERVNOT_GET_DETAIL

Das Lesen kann auch via BAPI_SERVNOT_GET_DETAIL durchgeführt werden.

Achtung:

Bei beiden Fubas werden nicht alle Daten aus den Positionen übergeben.

3.3 Liste Servicemeldungen lesen

Die Liste der Servicemeldungen wird mit dem Fuba ALM_PM_NOTIFICATION_GETLIST gelesen. Dazu muss vorher eine Variante (siehe Transaktion IW58) angelegt werden.

REFRESH: t_notif_list.

if not notif_header-contact is initial and notif_header-contact ne '0000000000'. la_parvw = 'ZG'. la_parnr = notif_header-contact. endif.

CALL FUNCTION 'ALM_PM_NOTIFICATION_GETLIST' DESTINATION pros-dest EXPORTING

I_PARTN_ROLE

= la_parvw

I_PARTNER

= la_parnr

I_WORK_CNTR

= notif_header-arbpl " Arbeitsplatz

i_sel_variant

= 'HH_ANLBAU'

i_inventory_prof = la_c070 TABLES

et_sel_tab

= t_notif_list

return

= lt_ret.

ABAP/4 Basis

Funktionsbausteine

if not lt_ret is initial. read table lt_ret into ls_ret index 1. la_msg1 = ls_ret-message. RAISE EXCEPTION TYPE zcx_gto_ex EXPORTING textid = zcx_gto_ex=>message msg1 = la_msg1.

endif.

* Nicht relevanter Status wird entfernt if not t_notif_list is initial. delete t_notif_list where ustxt ns i_ustxt. endif. if t_notif_list is initial. RAISE EXCEPTION TYPE zcx_gto_ex EXPORTING textid = zcx_gto_ex=>NO_ENTRY_ANLBAU. endif.

Möchte man nur bestimmte User Status anzeigen, muss man den nicht relevanten Status aus der Liste entfernen.

* Nicht relevanter Status wird entfernt if not t_notif_list is initial. delete t_notif_list where ustxt ns i_ustxt. endif.

Status wird entfernt if not t_notif_list is initial. delete t_notif_list where ustxt ns i_ustxt. endif. Seite

ABAP/4 Basis

Funktionsbausteine

3.4 Systemstatus lesen

Für den Status zu den Meldungen gibt es keinen SAP Fuba. Mit dem nachfolgenden Fuba kann man den System Status zu jeder Meldung lesen.

FUNCTION zw_gto_get_notifstat.

*"----------------------------------------------------------------------

*"*"Lokale Schnittstelle:

*" IMPORTING

VALUE(I_SPRAS) TYPE *" TABLES *"

*"

SPRAS

JEST

*"

IT_QMNUM STRUCTURE OT_JEST STRUCTURE

JEST

*"

OT_STAT STRUCTURE

TJ02T

*"----------------------------------------------------------------------

DATA: lt_jest TYPE TABLE OF jest, lt_stat TYPE TABLE OF tj02t.

CHECK NOT it_qmnum[] IS INITIAL.

SELECT * FROM jest INTO TABLE lt_jest FOR ALL ENTRIES IN it_qmnum WHERE objnr EQ it_qmnum-objnr

AND

inact EQ space.

CHECK sy-subrc EQ 0. ot_jest[] = lt_jest[]. SORT lt_jest BY stat. DELETE ADJACENT DUPLICATES FROM lt_jest COMPARING stat.

SELECT * FROM tj02t INTO TABLE ot_stat FOR ALL ENTRIES IN lt_jest WHERE istat = lt_jest-stat

ENDFUNCTION.

Fuba Aufruf:

AND

spras = i_spras.

*-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.

i_SPRAS = sy-langu TABLES it_qmnum = lt_jesto ot_jest = lt_jestn ot_stat = lt_stat EXCEPTIONS others =

ABAP/4 Basis

Funktionsbausteine

ABAP/4 Basis Funktionsbausteine 3.5 User Status in Meldung Der User Status wird beim Lesen der Meldung

3.5 User Status in Meldung

Der User Status wird beim Lesen der Meldung mit zurückgeliefert.

3.6 User-Status in Meldung setzen

method SET_USSTAT. data: ls_usstat ls_return lt_return lf_str

type ZWS_GTO_NOTUSRSTATI, type bapiret2, type standard table of bapiret2, type string.

* Alten Status löschen ls_usstat-STATUS_EXT = i_usstat_old.

CALL FUNCTION 'BAPI_SERVNOT_CHANGEUSRSTAT' DESTINATION pros-dest EXPORTING

number

= i_qmnum

usr_status

= ls_usstat

set_inactive = 'X'

IMPORTING

systemstatus = o_systat

= o_usstat

userstatus

TABLES

t_error

= lt_return.

READ TABLE lt_return INTO ls_return WITH KEY type = co_e. IF sy-subrc EQ 0. lf_str = ls_return-message. RAISE EXCEPTION TYPE zcx_gto_ex EXPORTING textid = zcx_gto_ex=>message msg1 = lf_str.

* Neuen Status einfügen else. ls_usstat-STATUS_EXT = i_usstat_new.

CALL FUNCTION 'BAPI_SERVNOT_CHANGEUSRSTAT' DESTINATION pros-dest EXPORTING

number

= i_qmnum

usr_status

= ls_usstat

IMPORTING systemstatus = o_systat

= o_usstat

TABLES

userstatus

t_error

= lt_return.

READ TABLE lt_return INTO ls_return WITH KEY type = co_e. IF sy-subrc EQ 0. lf_str = ls_return-message. RAISE EXCEPTION TYPE zcx_gto_ex EXPORTING textid = zcx_gto_ex=>message msg1 = lf_str.

ABAP/4 Basis

Funktionsbausteine

else. call function 'BAPI_TRANSACTION_COMMIT' destination pros-dest. ENDIF. ENDIF. endmethod.

3.7 Userstatus in Auftrag setzen

Ändern User Status im Auftrag (Transaktion IW32).

setzen Ändern User Status im Auftrag (Transaktion IW32). Beispiel Es soll der Status ZOFF gelöscht und

Beispiel Es soll der Status ZOFF gelöscht und der Status ZAAB gesetzt werden.

Fuba

ALM_ME_ORDER_CHANGE (Rel. 4.6C) BAPI_TRANSACTION_COMMIT

Der Status muss im internen Format (siehe Tabelle TJ30T) mitgegeben werden.

im internen Format (siehe Tabelle TJ30T) mitgegeben werden. Bei dem Status ZOFF muss das Kennz. „I“

Bei dem Status ZOFF muss das Kennz. „I“ gesetzt werden.

TJ30T) mitgegeben werden. Bei dem Status ZOFF muss das Kennz. „I“ gesetzt werden. Status zum Auftrag

Status zum Auftrag

ABAP/4 Basis

Funktionsbausteine

ABAP/4 Basis Funktionsbausteine Seite 16 / 120

ABAP/4 Basis

Funktionsbausteine

3.8 Meldung ändern

Zum Ändern der Meldungen gibt es BAPI Funktionsbausteine und ALM Fubas. Beide Fubas haben den Nachteil, dass nicht alle Felder (z.B. ANZFEHLER) geändert werden können.

BAPI Fubas

FUNCTION zw_gto_change_notif_bapi.

*"----------------------------------------------------------------------

*"*"Lokale Schnittstelle:

*" IMPORTING VALUE(I_HEAD) LIKE MAM_20_NOTIF_HEADER STRUCTURE

*"

*" TABLES I_ITEM STRUCTURE ZWS_GTO_NOTIF_ITEM I_PARTN STRUCTURE ALM_ME_PARTNER_KEY_STRUCT O_RETURN2 STRUCTURE BAPIRET2

*"

*"

*"

*"----------------------------------------------------------------------

*"

MAM_20_NOTIF_HEADER

REFRESH: o_return2.

*

Alte Daten zur Meldung lesen

CALL FUNCTION 'IQS1_FILL_WA_FROM_BUFFER' EXPORTING

i_qmnum

= i_head-notif_no

i_aktyp

= 'A'

IMPORTING

e_wviqmel

= g_wviqmel

d_viqmel

= g_viqmel

*

E_RIWO02

= RIWO02

e_riwo03

= g_riwo03

*

E_RIWO00

= RIWO00

*

E_RQM00

= RQM00

TABLES e_iviqmfe

= it_itemfe

*

E_IVIQMMA

= IVIQMMA

*

E_FOACT

= IFOACT

*

E_IVIQMSM

= IVIQMSM

*

E_IVIQMUR

= IVIQMUR

*

D_IVIQMFE

= *IVIQMFE

*

D_IVIQMMA

= *IVIQMMA

*

D_IVIQMSM

= *IVIQMSM

*

D_IVIQMUR

= *IVIQMUR

*

E_WORKPAPER

= IWORKPAPER

*

E_RIWO020TAB

= G_RIWO020TAB

EXCEPTIONS

number_initial = 1

OTHERS

= 2.

IF NOT g_wviqmel-objnr IS INITIAL. CALL FUNCTION 'PM_PARTNER_GET' EXPORTING

objnr

= g_wviqmel-objnr

*

IMPORTING

*

diadr_wa = h_diadr_wa

TABLES ihpa_tab = it_partner.

ENDIF.

*

Kurztext IF i_head-short_text NE g_wviqmel-qmtxt.

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

wa_partn_bapi-partn_role

wa_partn_bapi-partn_role_old = 'ZG'.

wa_partn_bapi-partner

wa_partn_bapi-partner_old

APPEND wa_partn_bapi TO it_partn_bapi.

= g_wviqmel-objnr. = 'ZG'.

= i_partn-partner_key. = wa_partner-parnr.

wa_partnx_bapi-partner

wa_partnx_bapi-partn_role_old = 'ZG'.

wa_partnx_bapi-partner_old

= 'X'.

= wa_partner-parnr.

APPEND wa_partnx_bapi TO it_partnx_bapi. ENDIF. ENDIF.

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.

CLEAR: wa_item_bapi, wa_itemx_bapi.

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.

CALL FUNCTION 'BAPI_SERVNOT_MODIFY_DATA' EXPORTING

number notifheader notifheader_x

* IMPORTING

= i_head-notif_no = g_head_bapi = g_headx_bapi

* NOTIFHEADER_EXPORT

=

TABLES notifitem

= it_item_bapi

notifitem_x

= it_itemx_bapi

* NOTIFCAUS

=

* NOTIFCAUS_X

=

* NOTIFACTV

=

* NOTIFACTV_X

=

* NOTIFTASK

=

* NOTIFTASK_X

=

notifpartnr

= it_partn_bapi

notifpartnr_x

= it_partnx_bapi

return IF it_return2 IS INITIAL.

= it_return2.

CALL FUNCTION 'BAPI_SERVNOT_SAVE' EXPORTING

number

* IMPORTING

* NOTIFHEADER

TABLES

return

= i_head-notif_no

=

= it_return2.

IF it_return2 IS INITIAL.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.

* Restliche Felder direkt ändern

SELECT

* FROM qmfe INTO TABLE it_qmfe WHERE qmnum = i_head-notif_no.

IF sy-subrc EQ 0. LOOP AT i_item. LOOP AT it_qmfe INTO wa_qmfe WHERE fenum = i_item-item_key.

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.

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 Materialrückmeldung

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.

CALL FUNCTION 'ALM_ME_GOODSMVT_CREATE' EXPORTING

 

orderid

= i_orderid

plant

= i_plant

stge_loc

= i_stge_loc

*

CUSTOMER

=

goodsmvt_header

= la_header

goodsmvt_code

= i_code

IMPORTING

goodsmvt_doc

= o_goodsmvtdoc

TABLES

goodsmvt_item

= it_matconf

goodsmvt_serialnumber

= lt_matser

ABAP/4 Basis

Funktionsbausteine

return

= return.

CALL FUNCTION 'ALM_ME_COMMIT_OR_ROLLBACK' TABLES return = return.

ENDFUNCTION.

3.10 Zeiten für Instandhaltungs-/Serviceauftrag rückmelden

METHOD send_timeconf .

FIELD-SYMBOLS: <timeconf> TYPE zws_gto_timeconf.

DATA: la_ret

TYPE bapiret2,

lt_timeconf TYPE TABLE OF zws_gto_timeconf, la_timeconf TYPE zws_gto_timeconf,

lt_detret

TYPE TABLE OF zws_gto_almret,

la_detret

TYPE zws_gto_almret,

lf_str

TYPE string,

lf_time

type tims.

*-Zeit in QR1 beschaffen CALL FUNCTION 'GET_SYSTEM_TIME_REMOTE' DESTINATION pros-dest IMPORTING l_time = lf_time.

*-Zeiten in BAPI-Struktur umfüllen

LOOP AT t_timeconf INTO la_timeconf WHERE actual_dur NE 0 AND fin_conf EQ space.

la_timeconf-orderid

la_timeconf-operation = co_vorg. la_timeconf-act_work = la_timeconf-actual_dur. IF la_timeconf-act_type EQ co_gsinka.

la_timeconf-un_act_dur = 'H'. "Inkasso immer in H ENDIF.

la_timeconf-un_work

= order_header-orderid.

= la_timeconf-un_act_dur.

la_timeconf-work_cntr = la_timeconf-ex_created_by. la_timeconf-fin_conf = i_final. *-Datum setzen

la_timeconf-EXEC_START_DATE = la_timeconf-postg_date.

= la_timeconf-postg_date.

la_timeconf-EXEC_FIN_DATE

la_timeconf-EXEC_START_TIME = lf_time.

la_timeconf-EXEC_FIN_TIME

= lf_time.

la_timeconf-postg_date

= sy-datum.

APPEND la_timeconf TO lt_timeconf. ENDLOOP. *-Zeiten rückmelden

IF NOT lt_timeconf[] IS INITIAL. CALL FUNCTION 'BAPI_ALM_CONF_CREATE' DESTINATION pros-dest EXPORTING testrun IMPORTING

=

'

'

return

TABLES

= la_ret

timetickets

detail_return = lt_detret.

= lt_timeconf

ENDIF. *-Fehlerhandling LOOP AT lt_detret INTO la_detret WHERE type = 'E'. lf_str = la_detret-message. RAISE EXCEPTION TYPE zcx_gto_ex

ABAP/4 Basis

Funktionsbausteine

EXPORTING textid = zcx_gto_ex=>order_timeitem msg1 = lf_str.

ENDLOOP. *-wenn alles o.k. -> Einträge sperren LOOP AT t_timeconf ASSIGNING <timeconf> WHERE actual_dur NE 0. <timeconf>-fin_conf = co_x. ENDLOOP.

ENDMETHOD.

ABAP/4 Basis

Funktionsbausteine

4 Klassifizierung

4.1 Merkmale lesen

Die Merkmale können über den Fuba CLSE_SELECT_CABN gelesen werden. Dazu muss man man aber die ATINN bereits wissen.

In der Tabelle IN_CABN müssen 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

WHERE ATNAM = editpos_with_header-tabkey+21. ENDSELECT. if sy-subrc eq 0. append wa_cabn to it_cabn.

* FROM

CABN into wa_cabn up to 1 rows

l_r_cabn-sign

l_r_cabn-option = 'EQ'.

= 'I'.

= 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.

l_r_cabn-low

CALL FUNCTION 'CLSE_SELECT_CABNT' TABLES

IN_CABN

= l_r_cabn

T_CABNT

= it_cabnt

EXCEPTIONS

NO_ENTRY_FOUND = 1

OTHERS IF SY-SUBRC <> 0.

= 2.

* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

*

WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

ENDFORM.

" READ_CABNT

ABAP/4 Basis

Funktionsbausteine

4.2 Merkmalswerte lesen

Die Merkmalswerte befinden sich in den Tabellen CAWN und CAWNT und können mit den Fubas CLSE_SELECT_CAWN und CLSE_SELECT_CAWNT gelesen werden.

Die Übergabe erfolgt über die Range Tabelle IN_CABN.

Beispiel In diesem Beispiel werden die Tabellen direkt gelesen, da zuerst über die Anmeldesprache gelesen wird. Ist für diese Sprache keine Bezeichnung zum Wert vorhanden, wird die Bezeichnung in einer anderen Sprache gelesen.

form read_cawnt using ip_atinn ip_atwrt. data: l_cawn type cawn.

clear cawnt.

select * from cawn into l_cawn up to 1 rows where atinn eq ip_atinn and atwrt eq ip_atwrt. endselect. if sy-subrc eq 0. SELECT single * FROM CAWNT WHERE ATINN = l_cawn-atinn

AND

ATZHL = l_cawn-atzhl

AND

SPRAS = sy-langu

AND

ADZHL = l_cawn-adzhl.

if sy-subrc ne 0. SELECT * FROM

CAWNT up to 1 rows

WHERE ATINN = l_cawn-atinn

AND

ATZHL = l_cawn-atzhl

AND

ADZHL = l_cawn-adzhl.

endselect.

endif.

endif.

endform.

ABAP/4 Basis

Funktionsbausteine

4.3 Tabellen zur Klasse lesen

Zu einer Klasse können Tabellen zugeordnet werden. Diese Zuordnung ist in der Tabelle TCLAO.

zugeordnet werden. Diese Zuordnung ist in der Tabelle TCLAO. CALL FUNCTION 'CLOB_SELECT_TABLE_FOR_CLASSTYP'

CALL FUNCTION 'CLOB_SELECT_TABLE_FOR_CLASSTYP' EXPORTING classtype = p_klart

spras

with_text = c_x

= sy-langu

TABLES

itable

= fpi_object

EXCEPTIONS

OTHERS

= 0.

4.4 Klassenart lesen/prüfen

FORM check_klart CHANGING fp_artxt TYPE rmclf-artxt fps_tcla TYPE tcla.

CALL FUNCTION 'CLCA_PROCESS_CLASSTYPE' EXPORTING

classtype

= p_klart

dynpros

= space

spras

= sy-langu

IMPORTING

classtype

= p_klart

typetext

= fp_artxt

imptcla

= fps_tcla

EXCEPTIONS

not_found

= 1

no_auth_klart = 2

OTHERS

= 3.

CASE sy-subrc. WHEN 1. MESSAGE e014(cl) WITH p_klart.

WHEN 2. MESSAGE e545(cl) WITH p_klart. ENDCASE.

ENDFORM.

"check_klart

ABAP/4 Basis

Funktionsbausteine

5 Bonusabsprachen (Agreements)

Transaktionen VBO1, VBO2 etc.

5.1 Verknüpfungen lesen

* Baustein aufrufen call function 'MM_ARRANG_EXTENSIONS_READ' EXPORTING

arrangement

perform_only_check

TABLES

extended_arrangements

EXCEPTIONS

= kona

= no

= xmebog

no_extension_for_arrangement = 1 internal_error_arrangements = 2

arrangement_not_found

= 3

arrang_already_new_period

= 4

others

= 5.

5.2 Absprache kopieren

CALL FUNCTION 'MM_ARRANGEMENT_NEW_PERIOD' EXPORTING

arrangement

= xkona

i_periods_ahead

= perio

use_outbound_call = bool

IMPORTING

arrangement_new

= *kona "Verlängerte Absprache

TABLES variable_key_new = xvake

error_messages

EXCEPTIONS

OTHERS

= error_messages

= 1.

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.

CALL FUNCTION 'AGR_MNT_BADI_INSTANCE_GET' IMPORTING e_badi_instance = badi_instance

e_badi_active

= badi_active.

IF NOT badi_active IS INITIAL.

ABAP/4 Basis

Funktionsbausteine

* Check whether copying this agreement is allowed CALL METHOD badi_instance->agr_mnt_copy_check EXPORTING i_knuma = kona-knuma EXCEPTIONS

= 1.

error_auto_extend = sy-subrc. ENDIF. IF error_auto_extend IS INITIAL.

OTHERS

* Verlängerung gemäß Kalender durchführen bool = yes.

CALL FUNCTION 'MM_ARRANGEMENT_NEW_PERIOD' EXPORTING

arrangement

= xkona

i_periods_ahead

= perio

use_outbound_call = bool

IMPORTING

arrangement_new

= *kona "Verlängerte Absprache

TABLES variable_key_new = xvake

error_messages

EXCEPTIONS

OTHERS

= error_messages

= 1.

* Fehler merken error_auto_extend = sy-subrc. LOOP AT error_messages WHERE msgty <> 'S'.

ENDLOOP. IF sy-subrc = 0.

* Es gab vermutlich Warnungen -> merken. warn_auto_extend = 1. ENDIF. IF *kona-vkorg(1) = '5' AND *kona-knuma(2) NE '$$' AND error_auto_extend IS INITIAL. COMMIT WORK. PERFORM update_kona. ENDIF. ENDIF. ENDIF.

FORM update_kona.

DATA: w_mode(1), w_date_to TYPE aedat_bi.

TYPE tab_bdcmsgcoll, TYPE bdcmsgcoll,

li_bdcdata TYPE bdcdata_tab. DATA: l_balance TYPE kona-zzbalance,

DATA: li_msg

lws_msg

l_balance_c(26) TYPE c.

DATA: lcl_messages TYPE REF TO zbc_messages.

CREATE OBJECT lcl_messages.

REFRESH: li_msg, li_bdcdata.

PERFORM det_date_to CHANGING w_date_to.

ABAP/4 Basis

Funktionsbausteine

PERFORM bdc_dynpro

PERFORM bdc_field

PERFORM bdc_field

PERFORM bdc_field

PERFORM bdc_dynpro

PERFORM bdc_field

PERFORM bdc_field

PERFORM bdc_field

PERFORM bdc_field

USING 'SAPMV13A' '0401' CHANGING li_bdcdata. USING 'BDC_CURSOR'

'RV13A-KNUMA_BO'

CHANGING li_bdcdata. USING 'BDC_OKCODE'

'/00'

CHANGING li_bdcdata. USING 'RV13A-KNUMA_BO' *kona-knuma CHANGING li_bdcdata. USING 'SAPMV13A' '0410' CHANGING li_bdcdata. USING 'BDC_CURSOR' 'KONA-ZZBALANCE' CHANGING li_bdcdata. USING 'BDC_OKCODE' '=SICH' CHANGING li_bdcdata. USING 'KONA-IDENT2'

ident2-low

CHANGING li_bdcdata. USING 'KONA-DATBI'

w_date_to CHANGING li_bdcdata. * Calculate begin balance from original agreement

PERFORM calculate_balance USING

kona

CHANGING l_balance.

WRITE l_balance TO l_balance_c.

PERFORM bdc_field

*

w_mode = 'N'.

USING 'KONA-ZZBALANCE' ' l_balance_c CHANGING li_bdcdata.

'

CALL TRANSACTION 'VBO2' USING li_bdcdata MODE w_mode UPDATE 'S' MESSAGES INTO li_msg.

ABAP/4 Basis

Funktionsbausteine

6 Sales & Distribution

6.1 Status in Belegen setzen

Kopf

Fuba

RV_XVBUK_MAINTAIN

Position

Fuba

RV_XVBUP_MAINTAIN

6.2 Kundenhierarchie lesen

Bei Eingabe eines neun Kunden „AG“ soll die Kundenhierarchie für die Bildschirmausgabe gelesen werden.

DATA: li_hpath TYPE vbpa_tab, ls_hpath TYPE vbpavb.

READ TABLE tpar_tab INTO tpar_wa WITH KEY parvw = 'AG'. IF sy-subrc = 0.

PERFORM get_customer_hier_path USING

tpar_wa-parnr

vbak-vtweg vbak-spart vbak-vkorg CHANGING li_hpath.

ENDIF.

FORM get_customer_hier_path USING

fp_parnr TYPE kunnr

fp_vtweg TYPE vtweg fp_spart TYPE spart fp_vkorg TYPE vkorg CHANGING fpi_hpath TYPE vbpa_tab.

CALL FUNCTION 'SD_CUSTOMER_HIERARCHY_PATH' EXPORTING

customer

* DATE htype sales_channel sales_division sales_org * IMPORTING

= fp_parnr

= SY-DATUM = 'A' "Standard Hierarchy = fp_vtweg = fp_spart = fp_vkorg

*

CUSTOMER_HZUOR

=

TABLES hpath

= fpi_hpath

EXCEPTIONS hityp_not_exist

= 1

node_not_exist

= 2

parvw_not_exist

= 3

OTHERS

= 4

.

IF sy-subrc <> 0.

ABAP/4 Basis

Funktionsbausteine

CALL FUNCTION 'SD_CUSTOMER_HIERARCHY_PATH' EXPORTING

customer

* DATE

htype sales_channel sales_division sales_org * IMPORTING

= fp_parnr

= SY-DATUM = 'B' "Standard Hierarchy = fp_vtweg = fp_spart = fp_vkorg

*

CUSTOMER_HZUOR

=

TABLES hpath

= fpi_hpath

EXCEPTIONS hityp_not_exist

= 1

node_not_exist

= 2

parvw_not_exist

= 3

OTHERS

= 4

.

ENDIF.

ENDFORM.

" GET_CUSTOMER_HIER_PATH

ABAP/4 Basis

Funktionsbausteine

7 Konditionen

7.1 Kopfkonditionen lesen

Beispiel Kopfkonditionen für Rechnung lesen.

DATA: PR_KAPPL(01) TYPE C VALUE 'V'.

MOVE vbdkr-waerk TO h_waerk.

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

IMPORTING comm_head_e = komk

= object-spras

TABLES tkomv

= ikomv

tkomvd

= ikomvd.

ENDFORM.

"get_header_prices

7.2 Positionskonditionen lesen

Beispiel Kopfkonditionen für Rechnung lesen.

DATA: PR_KAPPL(01) TYPE C VALUE 'V'.

MOVE vbdkr-waerk TO h_waerk.

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.

CALL FUNCTION 'RV_PRICE_PRINT_ITEM' EXPORTING comm_head_i = komk comm_item_i = komp

language

= object-spras

IMPORTING comm_head_e = komk comm_item_e = komp TABLES

tkomv

= ikomv

tkomvd

= ikomvd.

ENDFORM.

"get_item_prices

7.3 Konditionen für Dynpro lesen

Mit den nachfolgenden Fubas werden die Konditionen für das Konditionsdynpro gelesen.

ABAP/4 Basis

Funktionsbausteine

CALL FUNCTION 'RV_INVOICE_PRICE_PBO' EXPORTING

t185f_i

= t185f

t185v_i

= t185v

t185_i

= t185

vbrk_i

= vbrk

vbrp_i

= vbrp

IMPORTING comm_head_e = tkomk comm_item_e = tkomp TABLES

xkomv

= xkomv

xvbpa

= xvbpa

xvbrk

= xvbrk

xvbrp

= xvbrp

xkomfk

= xkomfk

xvbfs

= xvbfs.

* Fakturaseitig sind die Daten jetzt aufbereitet, jetzt kommt die

* Übergabe an die Preisfindungsbilder

CALL FUNCTION 'PRICING_SUBSCREEN_SET_DATA' EXPORTING comm_head_i = tkomk comm_item_i = tkomp

trtyp_i

ctrl_grey

TABLES

tkomv

EXCEPTIONS

error

OTHERS

= t185f-trtyp = da_ctrl_grey

= xkomv

= 1

= 2.

Die interne Tabelle XKOMV aus dem Fuba PRICING_SUBSCREEN_SET_DATA enthält die gesamten Konditionen der Positionen.

Tabelle XKOMV aus dem Fuba PRICING_SUBSCREEN_SET_DATA enthält die gesamten Konditionen der Positionen. Seite 33 / 120

ABAP/4 Basis

Funktionsbausteine

Die interne Tabelle XKOMV in dem Fuba PRICING_SUBSCREEN_SET_DATA(SAPLV69A) enthält die Daten wie auf dem Konditionsdynpro angezeigt.

in dem Fuba PRICING_SUBSCREEN_SET_DATA(SAPLV69A) enthält die Daten wie auf dem Konditionsdynpro angezeigt. Seite 34 / 120

ABAP/4 Basis

Funktionsbausteine

8 Allgemeine

8.1 Übersicht Funktionsbausteine

RS_TOOL_ACCESS

Aufruf der Werkzeuge der Abap Development Workbench (z.B. für Anzeige Programmdokumentation)

BAPI_MESSAGE_GETDETAIL

Aufbereiten von Nachrichten

SAPGUI_PROGRESS_INDICATOR

Hinweise in der Statuszeile ausgeben

UNIT_CONVERSION_SIMPLE

Gewichte umrechnen

 

RFC_READ_TABLE

Lesen Tabelle via RFC (Beschreibung sieh unter RFC)

NUMBER_GET_NEXT

Nummernkreisvergabe

DYNP_VALUES_READ

Dynprodaten lesen

 

DYNP_VALUES_UPDATE

Dynprodaten ändern

 

F4IF_FIELD_VALUE_REQUEST

Eingabehilfe für F4-Taste

KOKRS_GET_FROM_BUKRS

Kostenrechnungskreis ermitteln

RK_KOKRS_FIND

Ermitteln Kostenrechnungskreis über den Buchungskreis

RV_CALL_CHANGE_TRANSACTION

Aufruf der RV-Transaktionen (z.B. VA22)

 

CALL FUNCTION

'RV_CALL_CHANGE_TRANSACTION'

 

EXPORTING

*

POSNR

= <i>-posnr

vbeln

= <i>-vbeln.

UNIT_OF_MEASURE_SAP_TO_ISO

Mengeneinheit von SAP nach ISO umwandeln.

Mengeneinheit von SAP nach ISO umwandeln. Wird z.B. bei der Datenmigration benötigt. SYSTEM_FORMAT

Wird z.B. bei der Datenmigration benötigt.

SYSTEM_FORMAT

Liefert Codepage und Zahlenformat des Systems zurück.

TR_OBJECT_INSERT

Mit diesem Fuba kann man Objekte in Transportaufträge (TA) aufnehmen.

SAPGUI_SET_FUNCTIONCODE

Setzen eines Funktionscodes und Fortsetzen

ABAP/4 Basis

Funktionsbausteine

 

der Verarbeitung

CONTROL_FLUSH

Flush, SyncPoint

ABAP/4 Basis

Funktionsbausteine

8.2 Maßeinheiten

Die Maßeinheiten sind in der Tabelle T006 sprachunabhängig gespeichert.

Beispiel

ST Stück

Selektion der Tabelle T006 Anmeldesprache DE Selektion ST Anzeige Übersicht ST Anzeige Detail ST Anmeldesprache EN Selektion PCE Anzeige Übersicht ST Anzeige Detail PCE

Die sprachabhängigen Texte sind in den Tabellen T006A und T006B.

Es ist zu beachten das im Programm bei einigen Befehlen (z.B. bei WRITE mit UNIT) die sprachunabhängige Einheit benötigt wird.

mit UNIT) die sprachunabhängige Einheit benötigt wird. Bei dem Funktionsbaustein UNIT_CONVERSATION_SIMPLE muss
mit UNIT) die sprachunabhängige Einheit benötigt wird. Bei dem Funktionsbaustein UNIT_CONVERSATION_SIMPLE muss

Bei dem Funktionsbaustein UNIT_CONVERSATION_SIMPLE muss ebenfalls die sprachunabhängige Einheit übergeben werden, da es sonst zu einem Fehler in dem Fuba kommt.

FORM einheiten_konv USING

p_value_in

p_unit_in p_unit_out CHANGING p_value_out. DATA: unit_in LIKE t006-msehi, unit_out LIKE t006-msehi.

CHECK NOT p_value_in IS INITIAL.

*

Die sprachabhängige Einheit muss für den Fuba UNIT_CONVERSION_SIMPLE

*

in das interne Format gewandelt werden (z.B. PCE in ST ändern) unit_in = p_unit_in. unit_out = p_unit_out.

READ TABLE t006_tab TRANSPORTING NO FIELDS

 

WITH KEY msehi = p_unit_in. IF sy-subrc NE 0.

CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT' EXPORTING

 

input

= p_unit_in

language

= sy-langu

IMPORTING

output

= unit_in

EXCEPTIONS

unit_not_found = 1

 

OTHERS

= 2.

IF sy-subrc <> 0. unit_in = p_unit_in. ENDIF. ENDIF.

 

*

READ TABLE t006_tab TRANSPORTING NO FIELDS

ABAP/4 Basis

Funktionsbausteine

WITH KEY msehi = p_unit_out. IF sy-subrc NE 0.

CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT' EXPORTING

input

language

IMPORTING

output

EXCEPTIONS

= p_unit_out

= sy-langu

= unit_out

unit_not_found = 1

OTHERS

= 2.

IF sy-subrc <> 0. unit_out = p_unit_out. ENDIF. ENDIF.

CALL FUNCTION 'UNIT_CONVERSION_SIMPLE' EXPORTING

input

unit_in

unit_out

IMPORTING

output

EXCEPTIONS

= p_value_in

= unit_in

= unit_out

= p_value_out

conversion_not_found = 1

division_by_zero

= 2

input_invalid

= 3

output_invalid

= 4

overflow

= 5

type_invalid

= 6

units_missing

= 7

unit_in_not_found

= 8

unit_out_not_found

= 9

OTHERS

= 10.

IF sy-subrc NE 0. ENDIF. ENDFORM.

" EINHEITEN_KONV

Die sprachabhängige Einheit muss nur bei Ausgabe von Batch Input genutzt werden, da es sonst beim Abspielen der Mappe zu einem Fehler kommt.

ABAP/4 Basis

Funktionsbausteine

8.3 Maßeinheiten im Material

Im Materialstamm (MARM) können pro Material unterschiedliche Mengeneinheiten angegeben werden.

Material unterschiedliche Mengeneinheiten angegeben werden. Diese können mit dem nachfolgenden Funktionsbaustein

Diese können mit dem nachfolgenden Funktionsbaustein umgerechnet werden:

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.

ABAP/4 Basis

Funktionsbausteine

8.4 Betrag in unterschiedlichen Währungen

FORM currency_convert USING

fp_curr_in

TYPE konwa

fp_curr_out

TYPE konwa

fp_amount_in

TYPE kbetr

CHANGING fp_amount_out TYPE kbetr.

DATA:

l_date

TYPE sy-datum.

CHECK fp_curr_in IS NOT INITIAL AND fp_curr_out IS NOT INITIAL.

l_date = sy-datum.

CALL FUNCTION 'CONVERT_TO_FOREIGN_CURRENCY' EXPORTING

date

foreign_currency = fp_curr_out

local_amount

local_currency

= l_date

= fp_amount_in = fp_curr_in

IMPORTING

foreign_amount

= fp_amount_out

EXCEPTIONS

no_rate_found

= 1

overflow

= 2

no_factors_found = 3 no_spread_found = 4 derived_2_times = 5

OTHERS

= 6.

IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

ENDFORM.

" convert_kbetr

ABAP/4 Basis

Funktionsbausteine

8.5 Währungsfeld konvertieren

Bei Währungswerten aus Eingabedateien muss je nach Währung der Wert in ein Dezimalfeld gestellt werden.

DATA:

betr

TYPE wrbtr. (Type P decimals 2)

PARAMETERS:

p_char17 TYPE char17, p_waers TYPE waers DEFAULT 'USD'.

CALL FUNCTION 'CURRENCY_AMOUNT_IDOC_TO_SAP' EXPORTING

currency

idoc_amount = p_char17

= p_waers

IMPORTING sap_amount = betr.

Beispiele

Charfeld

108000.00

Währung

USD (mit 2 Dezimalstellen)

Dec Feld

108000.00

Charfeld

108000.00

Währung

JPY (mit 0 Dezimalstellen)

Dec Feld

1080.00

Hierzu gibt es noch weitere Funktionsbausteine:

Function group Function Module Name

Function group short text Short text for function module

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

ABAP/4 Basis

Funktionsbausteine

8.6 RFC CLOSE

method CLOSE_RFC .

*-beim erneuten Sichern ist das Memory in Q11 etc. noch gefüllt 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.

8.7 RFC Tabellen lesen

method READ_JEST. data: lf_opt lt_opt lt_data

type RFC_DB_OPT,

type table of RFC_DB_OPT, type table of TAB512,

lwa_data type tab512,

ls_jest

type jest.