Kurztext
Einträge f. Transaktion OKB9 generieren
Verwendung
Der Report generiert automatisch CO-Vorschlagskontierungen (OKB9) und stellt die Einträge auf Wunsch in einen Transportauftrag.
Funktionsumfang
Ab einer bestimmten Anzahl von Werken (bzw. Betrieben im IS-Retail) und Kostenarten, gestaltet sich die Pflege von werksabhängigen Vorschlagskontierungen in der Standardtransaktion OKB9 mitunter recht aufwändig, zumindest die 'Erstpflege'. Das vorliegende Programm erzeugt für eine vorgegebene Menge von Kostenarten und Werken automatisch Einträge in den entsprechenden Anwendungstabellen und erzeugt auf Wunsch auch gleich einen Transportauftrag, so dass die so generierten Einträge in die Folgesysteme transportiert werden können. Alternativ können Sie den Report auch in QS- bzw. Produktivsystemen laufen lassen, jedoch ist die Nutzung des Transportanschlusses die empfohlene Vorgehensweise.
Selektion
Objektabgrenzungen
Geben Sie die zu berücksichtigenden Kostenarten, Werke und ggf. Buchungskreise vor, für die Vorschlagskontierungen generiert werden sollen.
Kreuzen Sie bei Bedarf die Option 'Kostenarten aus MM-Kontenfindung' an. Es werden in diesem Fall alle Kostenarten hinzugelesen, die in der MM-Kontenfindung zum Kontenplan des ausgewählten Kostenrechnungskreises hinterlegt sind.
Tipp: um nur diese MM-Kostenarten zu selektieren, geben Sie einfach im Selektionsparameter Kostenart einen nicht existenten Wert ein (z.B. XXXXXXXXX).
Steuerung der Kostenstellenfindung
Vielfach gilt in Unternehmen: Werk = Bewertungskreis = Kostenstelle. Wählen Sie in diesem Fall die Option 'Kostenstelle = Bewertungskreis' aus.
Andernfalls können Sie eine zweispaltige Umsetztabelle in Excel anlegen, die folgendem Aufbau genügen muss:
Werk | Kostenstelle |
4711 | KST4711 |
4712 | 6969 |
... | ... |
Hinweis: Die Tabelle kann dabei unkonvertiert verwendet werden, d.h. ein vorheriges Abspeichern im .txt-Format o.ä. ist nicht erforderlich.
Sofern die Option 'nur Werke in Excel-Tab. berücksichtigen' ausgewählt wurde, werden nur die Werke betrachtet, zu denen entsprechende Einträge in der vorliegenden Excel-Tabelle hinterlegt sind, ungeachtet der Vorgaben im Bereich 'Objektabgrenzungen'.
Verarbeitungssteuerung
Hier können Sie u.a. festlegen, ob bereits vorhandene Einträge in der OKB9 ggf. überschrieben werden sollen. Verwenden Sie diese Option mit Vorsicht, da hierbei u.U. Tabellenschiefstände erzeugt werden können, insbesondere, wenn z.B. schon Geschäftsbereich- und/oder Profitcenterabhängige Einträge vorhanden sind.
Deaktivieren Sie die Option 'Testlauf', um die generierten Vorschlagskontierungen in die Tabellen zu schreiben. Jedoch sollten Sie zuvor einen Testlauf durchführen, um anhand des Protokolls die korrekte Arbeitsweise des Programms im Sinne der Anforderung zu überprüfen.
Wenn Sie den Transportanschluss nutzen möchten, aktivieren Sie im 'Echtlauf' zudem die Option 'Transportauftrag anlegen'. Sie werden in diesem Fall dazu aufgefordert, einen Customizingauftrag anzulegen bzw. einen bereits vorhandenen Auftrag auszuwählen.
Ausgabe
Die generierten (bzw. im Testlauf: zu generierenden) Einträge werden in übersichtlicher Form aufgelistet. Die Ausgabeliste ist dabei in bestimmten Grenzen konfigurierbar, d.h. es können bspw. Felder aus der Anzeige entfernt oder die Sortierung geändert werden. Zuvor werden etwaig aufgetretene Fehlersituationen in Form eines Fehlerprotokolls ausgegeben.
Selektionsbild:
Texte:
Quelltext:
*&---------------------------------------------------------------------*
*& Report YYOKB9
*&
*&---------------------------------------------------------------------*
*& Der Report generiert für eine Menge von Kostenarten und Werken/Betr.
*& Einträge zur automatisierten Kostenstellenfindung (TA OKB9)
*& Details s. Reportdokumentation
*&---------------------------------------------------------------------*
report yyokb9.
type-pools: slis.
tables: t001w, cskb, tka3a, tka3c, tka02, t001k.
tables: t030.
ranges: gr_mmkoa for cskb-kstar.
data: begin of gt_xl occurs 0,
werks type t001w-werks,
kostl type kostl,
end of gt_xl,
gt_tka3a type table of tka3a,
gt_tka3c type table of tka3c,
gv_dummy,
gv_message_occured,
gv_repid type sy-repid value sy-repid.
selection-screen begin of block bl1 with frame title text-bl1.
parameters: pa_kokrs type cskb-kokrs obligatory memory id cac.
select-options: so_bukrs for tka3a-bukrs.
select-options: so_kstar for cskb-kstar,
so_katyp for cskb-katyp,
so_werks for t001w-werks.
selection-screen skip.
parameters: pa_mmkoa as checkbox default 'X'.
selection-screen end of block bl1.
selection-screen begin of block bl2 with frame title text-bl2.
parameters:
* Kostenstelle = Bewertungskreis = Werk
pa_xequa radiobutton group r1 default 'X'
user-command r1,
* Excel-Umsetztabelle verwenden
pa_xexcl radiobutton group r1.
selection-screen begin of block bu2 with frame title text-bu2.
parameters: pa_xhead as checkbox default 'X',
pa_fnam like rlgrap-filename.
parameters: pa_xonly as checkbox default space.
selection-screen end of block bu2.
selection-screen end of block bl2.
selection-screen begin of block bl3 with frame title text-bl3.
parameters: pa_xovwr as checkbox.
parameters: pa_test as checkbox default 'X'
user-command t1.
parameters: pa_xtran as checkbox default ' '.
selection-screen end of block bl3.
* PBO Selection Screen
*&---------------------------------------------------------------------*
at selection-screen output.
*&---------------------------------------------------------------------*
loop at screen.
if screen-name = 'PA_XHEAD' or screen-name = 'PA_FNAM' or
screen-name = 'PA_XONLY'.
if pa_xexcl = 'X'.
screen-input = '1'.
else.
screen-input = '0'.
endif.
modify screen.
endif.
endloop.
*&---------------------------------------------------------------------*
at selection-screen on value-request for pa_fnam.
*&---------------------------------------------------------------------*
perform f4_excelfile.
*
*&---------------------------------------------------------------------*
start-of-selection.
*&---------------------------------------------------------------------*
perform check_parameters.
perform init_log.
if pa_xexcl = 'X'.
perform upload_table.
endif.
if pa_mmkoa = 'X'.
perform read_mm_costelements.
endif.
perform generate_okb9_entries.
if pa_test is initial.
perform update_tables.
if pa_xtran = 'X'.
perform create_transport.
endif.
endif.
perform generation_log.
*&---------------------------------------------------------------------*
*& Form F4_EXCELFILE
*&---------------------------------------------------------------------*
* Werthilfe Excel-Datei
*----------------------------------------------------------------------*
form f4_excelfile .
call function 'FAA_FILE_F4'
exporting
i_default_extension = 'XLS'
importing
e_filename = pa_fnam
exceptions
interface_error = 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.
endform. " F4_EXCELFILE
*&---------------------------------------------------------------------*
*& Form CHECK_PARAMETERS
*&---------------------------------------------------------------------*
* Selektionsparameter auf Plausibilität prüfen
*----------------------------------------------------------------------*
form check_parameters .
if pa_xexcl = 'X' and pa_fnam is initial.
message e600(fr) with 'Bitte Namen der Excel-Datei angeben'.
endif.
call function 'K_KOKRS_READ'
exporting
kokrs = pa_kokrs
exceptions
not_found = 1
not_found_gjahr = 2
others = 3.
if sy-subrc <> 0.
message e600(fr) with 'Kostenrechnungskreis' pa_kokrs 'fehlerhaft'.
endif.
endform. " CHECK_PARAMETERS
*&---------------------------------------------------------------------*
*& Form UPLOAD_TABLE
*&---------------------------------------------------------------------*
* Excel-Umsetztabelle laden
*----------------------------------------------------------------------*
form upload_table .
* Daten in internes SAP-Format konvertieren
define konvertiere.
call function 'RS_CONV_EX_2_IN_DTEL'
exporting
input_external = &1
dtel = '&2'
importing
output_internal = &1.
end-of-definition.
data: lt_buf type table of string,
l_buf type string.
* Upload der Excel-Datei
call function 'FAA_FILE_UPLOAD_EXCEL'
exporting
i_filename = pa_fnam
tables
et_filecontent = lt_buf
exceptions
error_accessing_file = 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.
* Strukturiert ablegen
loop at lt_buf into l_buf.
if pa_xhead = 'X'. "ggf. Überschrift überlesen
check sy-tabix gt 1.
endif.
split l_buf at ',' into gt_xl-werks gt_xl-kostl.
konvertiere gt_xl-werks werks_d.
konvertiere gt_xl-kostl kostl.
append gt_xl.
endloop.
sort gt_xl by werks. "Für BINARY SEARCH
endform. " UPLOAD_TABLE
*&---------------------------------------------------------------------*
*& Form GENERATE_OKB9_ENTRIES
*&---------------------------------------------------------------------*
* OKB9-Einträge generieren
*----------------------------------------------------------------------*
form generate_okb9_entries .
* Kostenarten selektieren
select * from cskb
where kokrs = pa_kokrs
and katyp in so_katyp
and datbi ge sy-datum.
if pa_mmkoa = 'X'.
if cskb-kstar in gr_mmkoa.
else.
check cskb-kstar in so_kstar.
endif.
else.
check cskb-kstar in so_kstar.
endif.
* Buchungskreise
select * from tka02 where kokrs = pa_kokrs.
check tka02-bukrs in so_bukrs.
select single * from tka3a
where bukrs = tka02-bukrs
and kstar = cskb-kstar.
if sy-subrc = 0.
perform entry_kstar_exists.
endif.
if pa_xovwr = 'X' or sy-subrc ne 0.
perform generate_tka3a_entry.
endif.
* Werk / Bewertungskreis lesen
select * from t001w where werks in so_werks.
select single * from t001k where bwkey = t001w-bwkey.
check sy-subrc = 0.
check t001k-bukrs = tka02-bukrs.
if pa_xexcl = 'X' and pa_xonly = 'X'.
read table gt_xl with key werks = t001w-werks
binary search.
check sy-subrc = 0.
endif.
select single * from tka3c
where bukrs = t001k-bukrs
and kstar = cskb-kstar
and bwkey = t001k-bwkey.
if sy-subrc = 0.
perform entry_werks_exists.
endif.
if pa_xovwr = 'X' or sy-subrc ne 0.
perform generate_tka3c_entry.
endif.
endselect.
endselect.
endselect.
perform remove_redundant_entries.
endform. " GENERATE_OKB9_ENTRIES
*&---------------------------------------------------------------------*
*& Form CREATE_TRANSPORT
*&---------------------------------------------------------------------*
* Zuvor generierte OKB9-Einträge in Transportauftrag aufnehmen
*----------------------------------------------------------------------*
form create_transport .
data: lit_e071 type tr_objects,
lwa_e071 like line of lit_e071,
lit_e071k type tr_keys,
lwa_e071k like line of lit_e071k.
data: lv_order type e070-trkorr,
lv_task type e070-trkorr.
* Arbeitstabellen f. Transportanschluss füllen
clear lwa_e071.
lwa_e071-pgmid = 'R3TR'.
lwa_e071-object = 'CDAT'.
lwa_e071-obj_name = 'V_TKA3'.
lwa_e071-objfunc = 'K'.
lwa_e071-as4pos = 1.
append lwa_e071 to lit_e071.
loop at gt_tka3a into tka3a.
clear lwa_e071k.
lwa_e071k-pgmid = 'R3TR'.
lwa_e071k-object = 'TABU'.
lwa_e071k-objname = 'TKA3A'.
lwa_e071k-as4pos = 1.
lwa_e071k-mastertype = 'CDAT'.
lwa_e071k-mastername = 'V_TKA3'.
lwa_e071k-viewname = 'V_TKA3A'.
lwa_e071k-tabkey(3) = tka3a-mandt.
lwa_e071k-tabkey+3(4) = tka3a-bukrs.
lwa_e071k-tabkey+7(10) = tka3a-kstar.
lwa_e071k-sortflag = '2'.
append lwa_e071k to lit_e071k.
endloop.
loop at gt_tka3c into tka3c.
clear lwa_e071k.
lwa_e071k-pgmid = 'R3TR'.
lwa_e071k-object = 'TABU'.
lwa_e071k-objname = 'TKA3C'.
lwa_e071k-as4pos = 1.
lwa_e071k-mastertype = 'CDAT'.
lwa_e071k-mastername = 'V_TKA3'.
lwa_e071k-viewname = 'V_TKA3C'.
lwa_e071k-tabkey(3) = tka3c-mandt.
lwa_e071k-tabkey+3(4) = tka3c-bukrs.
lwa_e071k-tabkey+7(10) = tka3c-kstar.
lwa_e071k-tabkey+17(4) = tka3c-bwkey.
lwa_e071k-sortflag = '2'.
append lwa_e071k to lit_e071k.
endloop.
* Transportauftrag / Aufgabe anfordern
call function 'TR_ORDER_CHOICE_CORRECTION'
* EXPORTING
* IV_CATEGORY = 'CUST'
* IV_CLI_DEP = 'X'
importing
ev_order = lv_order
ev_task = lv_task
exceptions
invalid_category = 1
no_correction_selected = 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.
exit.
endif.
* Transporteinträge schreiben
call function 'TR_APPEND_TO_COMM_OBJS_KEYS'
exporting
* WI_SIMULATION = ' '
* WI_SUPPRESS_KEY_CHECK = ' '
wi_trkorr = lv_task
tables
wt_e071 = lit_e071
wt_e071k = lit_e071k
exceptions
key_char_in_non_char_field = 1
key_check_keysyntax_error = 2
key_inttab_table = 3
key_longer_field_but_no_generc = 4
key_missing_key_master_fields = 5
key_missing_key_tablekey = 6
key_non_char_but_no_generic = 7
key_no_key_fields = 8
key_string_longer_char_key = 9
key_table_has_no_fields = 10
key_table_not_activ = 11
key_unallowed_key_function = 12
key_unallowed_key_object = 13
key_unallowed_key_objname = 14
key_unallowed_key_pgmid = 15
key_without_header = 16
ob_check_obj_error = 17
ob_devclass_no_exist = 18
ob_empty_key = 19
ob_generic_objectname = 20
ob_ill_delivery_transport = 21
ob_ill_lock = 22
ob_ill_parts_transport = 23
ob_ill_source_system = 24
ob_ill_system_object = 25
ob_ill_target = 26
ob_inttab_table = 27
ob_local_object = 28
ob_locked_by_other = 29
ob_modif_only_in_modif_order = 30
ob_name_too_long = 31
ob_no_append_of_corr_entry = 32
ob_no_append_of_c_member = 33
ob_no_consolidation_transport = 34
ob_no_original = 35
ob_no_shared_repairs = 36
ob_no_systemname = 37
ob_no_systemtype = 38
ob_no_tadir = 39
ob_no_tadir_not_lockable = 40
ob_privat_object = 41
ob_repair_only_in_repair_order = 42
ob_reserved_name = 43
ob_syntax_error = 44
ob_table_has_no_fields = 45
ob_table_not_activ = 46
tr_enqueue_failed = 47
tr_errors_in_error_table = 48
tr_ill_korrnum = 49
tr_lockmod_failed = 50
tr_lock_enqueue_failed = 51
tr_not_owner = 52
tr_no_systemname = 53
tr_no_systemtype = 54
tr_order_not_exist = 55
tr_order_released = 56
tr_order_update_error = 57
tr_wrong_order_type = 58
ob_invalid_target_system = 59
tr_no_authorization = 60
ob_wrong_tabletyp = 61
ob_wrong_category = 62
ob_system_error = 63
ob_unlocal_objekt_in_local_ord = 64
tr_wrong_client = 65
ob_wrong_client = 66
key_wrong_client = 67
others = 68
.
if sy-subrc <> 0.
message id sy-msgid type sy-msgty number sy-msgno
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
else.
message i600(fr) with
'Generierte Einträge in Transport'
lv_order
'aufgenommen'.
endif.
endform. " CREATE_TRANSPORT
*&---------------------------------------------------------------------*
*& Form ENTRY_KSTAR_EXISTS
*&---------------------------------------------------------------------*
* Eintrag in TKA3A für Kostenart gibt's schon!
*----------------------------------------------------------------------*
form entry_kstar_exists .
message w600(fr) with
'Eintrag für Kostenart schon vorhanden:'
cskb-kstar
'Buchungskreis'
tka02-bukrs into gv_dummy.
perform msg_log.
endform. " ENTRY_KSTAR_EXISTS
*&---------------------------------------------------------------------*
*& Form GENERATE_TKA3A_ENTRY
*&---------------------------------------------------------------------*
* Eintrag TKA3A generieren und merken
*----------------------------------------------------------------------*
form generate_tka3a_entry .
clear tka3a.
tka3a-mandt = sy-mandt.
tka3a-bukrs = tka02-bukrs.
tka3a-kstar = cskb-kstar.
tka3a-kokrs = pa_kokrs.
tka3a-regel = '1'.
append tka3a to gt_tka3a.
endform. " GENERATE_TKA3A_ENTRY
*&---------------------------------------------------------------------*
*& Form ENTRY_WERKS_EXISTS
*&---------------------------------------------------------------------*
* Eintrag in TKA3C für Werk x gibts schon
*----------------------------------------------------------------------*
form entry_werks_exists .
message w600(fr) with
'Eintrag für Werk'
t001w-werks
'schon vorhanden:'
tka3c-kostl into gv_dummy.
perform msg_log.
endform. " ENTRY_WERKS_EXISTS
*&---------------------------------------------------------------------*
*& Form GENERATE_TKA3C_ENTRY
*&---------------------------------------------------------------------*
* Eintrag TKA3C generieren und merken
*----------------------------------------------------------------------*
form generate_tka3c_entry .
clear tka3c.
tka3c-mandt = sy-mandt.
tka3c-bukrs = tka02-bukrs.
tka3c-kstar = cskb-kstar.
tka3c-bwkey = t001w-bwkey.
tka3c-kokrs = pa_kokrs.
* Werk = Bewertungskreis = Kostenstelle
if pa_xequa = 'X'.
call function 'RS_CONV_EX_2_IN_DTEL'
exporting
input_external = t001w-bwkey
dtel = 'KOSTL'
importing
output_internal = tka3c-kostl.
else.
* Kostenstelle anhand Excel-Tab. umsetzen
read table gt_xl with key werks = t001w-bwkey
binary search.
if sy-subrc = 0.
tka3c-kostl = gt_xl-kostl.
else.
message e600(fr) with 'Fehler: zu Werk' t001w-bwkey
'konnte keine KoSt.' 'ermittelt werden'
into gv_dummy.
perform msg_log.
exit.
endif.
endif.
* Ermittelte Kostenstelle prüfen
call function 'RK_KOSTL_READ'
exporting
datum = sy-datum
kokrs = pa_kokrs
kostl = tka3c-kostl
exceptions
* KOSTL_NOT_COMPLETE = 1
kostl_not_found = 2
* TEXT_NOT_FOUND = 3
kokrs_missing = 4
others = 5.
if sy-subrc <> 0.
message e600(fr) with 'Ermittelte Kostenstelle'
tka3c-kostl 'ungültig'
into gv_dummy.
perform msg_log.
else.
append tka3c to gt_tka3c.
endif.
endform. " GENERATE_TKA3C_ENTRY
*&---------------------------------------------------------------------*
*& Form GENERATION_LOG
*&---------------------------------------------------------------------*
* Generierte Einträge ausgeben
*----------------------------------------------------------------------*
form generation_log .
data: ls_keyinfo type slis_keyinfo_alv.
clear ls_keyinfo.
ls_keyinfo-header01 = ls_keyinfo-item01 = 'BUKRS'.
ls_keyinfo-header02 = ls_keyinfo-item02 = 'KSTAR'.
ls_keyinfo-header03 = ls_keyinfo-item03 = 'KOKRS'.
if gv_message_occured = 'X'.
call function 'MESSAGES_SHOW'.
endif.
call function 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
exporting
i_callback_program = gv_repid
i_tabname_header = 'GT_TKA3A'
i_tabname_item = 'GT_TKA3C'
i_structure_name_header = 'TKA3A'
i_structure_name_item = 'TKA3C'
is_keyinfo = ls_keyinfo
tables
t_outtab_header = gt_tka3a
t_outtab_item = gt_tka3c.
endform. " GENERATION_LOG
*&---------------------------------------------------------------------*
*& Form UPDATE_TABLES
*&---------------------------------------------------------------------*
* Sichern der generierten Einträge in die Datenbank
*----------------------------------------------------------------------*
form update_tables .
modify tka3a from table gt_tka3a.
if sy-subrc ne 0.
rollback work.
message a600(fr) with 'Fehler beim Update auf TKA3A'.
else.
modify tka3c from table gt_tka3c.
if sy-subrc ne 0.
rollback work.
message a600(fr) with 'Fehler beim Update auf TKA3C'.
else.
commit work.
message i600(fr) with 'Update OKB9 ausgeführt'.
endif.
endif.
endform. " UPDATE_TABLES
*&---------------------------------------------------------------------*
*& Form REMOVE_REDUNDANT_ENTRIES
*&---------------------------------------------------------------------*
* Wenn keine Einträge in der untergeordneten Tab. TKA3C
* enthalten sind, ist der korrespondierende, übergeordnete
* Eintrag in der TKA3A natürlich obsolet
*----------------------------------------------------------------------*
form remove_redundant_entries .
data: lv_tabix type sy-tabix.
loop at gt_tka3a into tka3a.
lv_tabix = sy-tabix.
read table gt_tka3c into tka3c
with key bukrs = tka3a-bukrs
kstar = tka3a-kstar
kokrs = tka3a-kokrs.
if sy-subrc ne 0.
delete gt_tka3a index lv_tabix.
endif.
endloop.
endform. " REMOVE_REDUNDANT_ENTRIES
*&---------------------------------------------------------------------*
*& Form INIT_LOG
*&---------------------------------------------------------------------*
* Message-Handler anfordern und initialisieren
*----------------------------------------------------------------------*
form init_log .
call function 'MESSAGES_INITIALIZE'.
endform. " INIT_LOG
*&---------------------------------------------------------------------*
*& Form MSG_LOG
*&---------------------------------------------------------------------*
* Fehlermeldung ins Log eintragen
*----------------------------------------------------------------------*
form msg_log .
gv_message_occured = 'X'.
call function 'MESSAGE_STORE'
exporting
arbgb = sy-msgid
msgty = sy-msgty
msgv1 = sy-msgv1
msgv2 = sy-msgv2
msgv3 = sy-msgv3
msgv4 = sy-msgv4
txtnr = sy-msgno.
endform. " MSG_LOG
*&---------------------------------------------------------------------*
*& Form READ_MM_COSTELEMENTS
*&---------------------------------------------------------------------*
* Kostenarten aus MM-Kontenfindung lesen
*----------------------------------------------------------------------*
form read_mm_costelements .
data: lv_ktopl type tka01-ktopl,
lv_cskb type cskbv.
* Kontenplan des Kostenrechnungskreises besorgen
select single ktopl from tka01 into lv_ktopl where kokrs = pa_kokrs.
check sy-subrc = 0 and not lv_ktopl is initial.
* MM-Kofi auslesen
select * from t030 where ktopl = lv_ktopl.
* Ist Soll-Konto gültige Kostenart
call function 'RK_KSTAR_CHECK'
exporting
datum = sy-datum
kokrs = pa_kokrs
kstar = t030-konts
importing
v_cskb = lv_cskb
exceptions
kstar_not_allowed = 1
kstar_not_found = 2
kstar_not_primary = 3
kokrs_not_valid = 4
others = 5.
* Wenn ja: hinzufügen
if sy-subrc = 0 and lv_cskb-katyp = '01'.
gr_mmkoa-sign = 'I'.
gr_mmkoa-option = 'EQ'.
gr_mmkoa-low = t030-konts.
collect gr_mmkoa.
endif.
* Dito f. Haben-Konto
call function 'RK_KSTAR_CHECK'
exporting
datum = sy-datum
kokrs = pa_kokrs
kstar = t030-konth
importing
v_cskb = lv_cskb
exceptions
kstar_not_allowed = 1
kstar_not_found = 2
kstar_not_primary = 3
kokrs_not_valid = 4
others = 5.
if sy-subrc = 0 and lv_cskb-katyp = '01'.
gr_mmkoa-sign = 'I'.
gr_mmkoa-option = 'EQ'.
gr_mmkoa-low = t030-konth.
collect gr_mmkoa.
endif.
endselect.
endform. " READ_MM_COSTELEMENTS