Assist-Klasse
Vollständiger Code der Klasse ZCL_FI_BILENDO_ASSIST_V2 mit Erklärung.
Übersicht
Die ZCL_FI_BILENDO_ASSIST_V2 ist die zentrale Helferklasse für die Bilendo-Integration in SAP. Sie wird von beiden Hauptberichten (Extractor und Re-Integrate) verwendet und verwaltet die Datenextraktion, -verarbeitung und Stammdatenverwaltung. Version 2.1, Copyright Bilendo GmbH.
Methoden-Übersicht
| Methode | Sichtbarkeit | Import | Export | Ändern | Beschreibung |
|---|---|---|---|---|---|
| BSEG_FILE_TO_SERVER | public | if_dataset, it_bseg | ef_msg | - | Schreibt BSEG-Daten in eine Textdatei auf den Server |
| CLEAR | public | - | - | - | Löscht alle internen Tabellen |
| CONSTRUCTOR | public | it_seltab | - | - | Initialisiert die Klasse mit Selektionsparametern |
| CREDIT_LIMIT_CHANGE | public | is_credit_info, is_credit_limit | - | - | Aktualisiert Kreditlimit und Rating im Kundenstamm |
| CUSTOMER_CHANGE | public | - | - | - | Aktualisiert Kundenstammdaten (Mahnung, Sicherheiten) |
| DELETE_FILES | public | - | - | - | Löscht Dateien aus dem Anwendungsverzeichnis |
| DOC_CHANGE | public | is_journal | - | - | Ändert Dokumentfelder (Mahnung, Mahnstufe, Mahnatum) |
| GET_ADDITIONAL | public | - | - | ct_bseg | Ermittelt zusätzliche Daten zu Buchhaltungssegmenten |
| GET_BSAD | public | - | - | - | Liest alte Buchhaltungssätze (ausgegebene Rechnungen) |
| GET_BSEG | public | - | - | - | Liest kombinierte Buchhaltungssätze (BSAD + BSID) |
| GET_BSID | public | - | - | - | Liest offene Buchhaltungssätze (Debitorenbuchhaltung) |
| GET_DELTA_RESTRICTION | public | - | - | - | Filtert Änderungen basierend auf Zeitstempel |
| GET_FILES | public | - | - | - | Liest Dateiliste aus Anwendungsverzeichnis |
| GET_KNA1 | public | - | - | - | Liest Kundenstammdaten mit Verkaufsorganisationen |
| GET_MANSP_CHANGES | public | - | - | - | Ermittelt Änderungen an Mahnsperrdaten |
| GET_VKORG | public | - | - | ct_bseg | Weist Verkaufsorganisationen zu Kunden zu |
| KNA1_FILE_TO_SERVER | public | - | ef_msg | - | Schreibt KNA1-Kundendaten in Textdatei |
| READ_CSV | public | - | - | - | Liest CSV-Dateien für Kundendaten-Updates |
| SEND_EMAIL | public | i_message | - | - | Versendet E-Mail bei Fehlern |
| SET_BUKRS | public | if_bukrs | - | - | Setzt den Buchungskreis für Verarbeitung |
Klassendefinition
CLASS zcl_fi_bilendo_assist_v2 DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
TYPES:
BEGIN OF ty_s_vkorg,
bukrs TYPE bukrs,
kunnr TYPE kunnr,
vkorg TYPE vkorg,
END OF ty_s_vkorg .
TYPES:
BEGIN OF ty_s_credit_info,
bukrs TYPE bukrs,
kunnr TYPE kunnr,
dbrtg TYPE dbrtg_cm,
date TYPE sydatum,
END OF ty_s_credit_info .
TYPES:
BEGIN OF ty_s_credit_limit,
bukrs TYPE bukrs,
kunnr TYPE kunnr,
klimk TYPE klimk,
ctlpc TYPE ctlpc_cm,
END OF ty_s_credit_limit .
TYPES:
BEGIN OF ty_s_securities,
bukrs TYPE bukrs,
kunnr TYPE kunnr,
vlibb TYPE vlibb,
END OF ty_s_securities .
TYPES:
BEGIN OF ty_s_journal,
bukrs TYPE bukrs,
belnr TYPE belnr_d,
gjahr TYPE gjahr,
manst TYPE mahns_d,
mansp TYPE mansp,
madat TYPE madat,
buzei TYPE buzei,
END OF ty_s_journal .
TYPES:
BEGIN OF ty_s_customer,
bukrs TYPE bukrs,
kunnr TYPE kunnr,
mahns TYPE mahns_d,
mansp TYPE mansp,
madat TYPE madat,
vlibb TYPE vlibb,
END OF ty_s_customer .
TYPES:
BEGIN OF ty_bkpf,
bukrs TYPE bkpf-bukrs,
belnr TYPE bkpf-belnr,
gjahr TYPE bkpf-gjahr,
cpudt TYPE bkpf-cpudt,
cputm TYPE bkpf-cputm,
aedat TYPE bkpf-aedat,
END OF ty_bkpf .
DATA af_dataset_bseg TYPE string .
DATA af_dataset_kna1 TYPE string .
DATA at_bseg TYPE zfi_t_bilendo_bseg .
DATA at_kna1 TYPE zfi_t_bilendo_kna1 .
DATA at_bsad TYPE zfi_t_bilendo_bseg .
DATA at_bsid TYPE zfi_t_bilendo_bseg .
DATA af_dataset_bsid TYPE string .
DATA af_dataset_bsad TYPE string .
DATA:
at_vkorg TYPE TABLE OF ty_s_vkorg .
DATA:
at_credit_info TYPE TABLE OF ty_s_credit_info .
DATA:
at_credit_limit TYPE TABLE OF ty_s_credit_limit .
DATA:
at_securities TYPE TABLE OF ty_s_securities .
DATA:
at_journal TYPE TABLE OF ty_s_journal .
DATA:
at_customer TYPE TABLE OF ty_s_customer .
DATA at_adrnr TYPE zfi_adr6 .
DATA ap_dir TYPE epsdirnam .
DATA:
at_dir_list TYPE TABLE OF epsfili .
DATA at_bseg_final TYPE zfi_t_bilendo_bseg .
DATA at_bsid_final TYPE zfi_t_bilendo_bseg .
DATA at_bsad_final TYPE zfi_t_bilendo_bseg .
DATA at_kna1_final TYPE zfi_t_bilendo_kna1 .
DATA af_zone TYPE string .
DATA:
at_bkpf TYPE STANDARD TABLE OF ty_bkpf .
DATA ar_cputm TYPE piq_selopt_t .
METHODS credit_limit_change
IMPORTING
!is_credit_info TYPE ty_s_credit_info OPTIONAL
!is_credit_limit TYPE ty_s_credit_limit OPTIONAL .
METHODS customer_change .
METHODS doc_change
IMPORTING
!is_journal TYPE ty_s_journal OPTIONAL .
METHODS delete_files .
METHODS read_csv .
METHODS get_additional
CHANGING
!ct_bseg TYPE zfi_t_bilendo_bseg .
METHODS get_vkorg
CHANGING
!ct_bseg TYPE zfi_t_bilendo_bseg .
METHODS set_bukrs
IMPORTING
!if_bukrs TYPE bukrs .
METHODS get_mansp_changes .
METHODS bseg_file_to_server
IMPORTING
!if_dataset TYPE string
!it_bseg TYPE zfi_t_bilendo_bseg
EXPORTING
!ef_msg TYPE string .
METHODS get_bsad .
METHODS get_bseg .
METHODS get_bsid .
METHODS kna1_file_to_server
EXPORTING
!ef_msg TYPE string .
METHODS get_kna1 .
METHODS constructor
IMPORTING
!it_seltab TYPE figen_t_rsparamsl_255 .
METHODS clear .
METHODS get_files .
METHODS get_delta_restriction .
METHODS send_email
IMPORTING
!i_message TYPE string .
protected section.
data AF_BUKRS type BUKRS .
data AF_KKBER type KKBER .
private section.
data AR_BUKRS type PIQ_SELOPT_T .
data AR_BLDAT type PIQ_SELOPT_T .
data AR_AUGDT type PIQ_SELOPT_T .
data AR_BUDAT type PIQ_SELOPT_T .
data AR_CPUDT type PIQ_SELOPT_T .
data AT_SELTAB type FIGEN_T_RSPARAMSL_255 .
data AP_ALL type XFELD .
data AP_JOURNAL type STRING .
data AP_CREDIT_LIMIT type STRING .
data AP_SECURITIES type STRING .
data AP_CREDIT_INFO type STRING .
data AP_CUSTOMERS type STRING .
ENDCLASS.Implementierung
METHOD BSEG_FILE_TO_SERVER
Konvertiert BSEG-Buchhaltungsdaten in ein durch Pipe-Zeichen separiertes Textformat und schreibt sie auf den Anwendungsserver. Die Methode führt Datenbereinigungen durch, konvertiert numerische Werte, ersetzt Sonderzeichen und berücksichtigt Kontierungsrichtungen bei der Formatierung von Beträgen.
METHOD BSEG_FILE_TO_SERVER.
DATA: lf_string TYPE string,
lt_string TYPE TABLE OF string,
ls_bseg TYPE zfi_s_bilendo_bseg,
lf_dmbtr(20),
lf_wrbtr(20),
lf_zbd1t(20),
lf_zbd2t(20),
lf_zbd3t(20),
lf_xblnr(29),
lf_madat(8),
lf_dataset_bseg TYPE string.
CONCATENATE 'NAME'
'KUNNR'
'BELNR'
'BLDAT'
'XBLNR'
'ZUONR'
'BLART'
'SGTXT'
'BUKRS'
'VKORG'
'DUEDATE'
'VKGRP'
'AUFNR'
'MANST'
'MANSP'
'ZTERM'
'AUGBL'
'BKTXT'
'PENRC'
'CPUDT'
'MADAT'
'BUZEI'
'BUSAB'
'AUGGJ'
'AUGDT'
'GJAHR'
'DMSHB'
'HWAER'
'WRBTR'
'WAERS'
'GSBER'
'AKONT'
'UMSKZ'
'KKBER'
'SHKZG'
'BSCHL'
INTO lf_string SEPARATED BY '|'.
APPEND lf_string TO lt_string.
LOOP AT it_bseg INTO ls_bseg.
CLEAR: lf_dmbtr,
lf_wrbtr,
lf_madat,
lf_zbd1t,
lf_zbd2t,
lf_zbd3t,
lf_xblnr,
lf_string.
lf_dmbtr = ls_bseg-dmbtr.
CONDENSE lf_dmbtr.
IF ls_bseg-shkzg = 'H'.
CONCATENATE '-' lf_dmbtr INTO lf_dmbtr.
ENDIF.
lf_wrbtr = ls_bseg-wrbtr.
CONDENSE lf_wrbtr.
IF ls_bseg-shkzg = 'H'.
CONCATENATE '-' lf_wrbtr INTO lf_wrbtr.
ENDIF.
IF ls_bseg-madat IS INITIAL.
lf_madat = ''.
ELSE.
lf_madat = ls_bseg-madat.
ENDIF.
lf_zbd1t = ls_bseg-zbd1t.
CONDENSE lf_zbd1t.
lf_zbd2t = ls_bseg-zbd2t.
CONDENSE lf_zbd2t.
lf_zbd3t = ls_bseg-zbd3t.
CONDENSE lf_zbd3t.
IF ls_bseg-maber IS NOT INITIAL.
ls_bseg-spezber = ls_bseg-maber.
ELSE.
IF ls_bseg-gsber IS NOT INITIAL.
ls_bseg-spezber = ls_bseg-gsber.
ENDIF.
ENDIF.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = ls_bseg-kunnr
IMPORTING
output = ls_bseg-kunnr.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = ls_bseg-akont
IMPORTING
output = ls_bseg-akont.
REPLACE ALL OCCURRENCES OF REGEX '[;:",|#]' IN ls_bseg-name1 WITH '_'.
REPLACE ALL OCCURRENCES OF REGEX '[;:",|#]' IN ls_bseg-sgtxt WITH '_'.
REPLACE ALL OCCURRENCES OF REGEX '[;:",|#]' IN ls_bseg-xref1 WITH '_'.
REPLACE ALL OCCURRENCES OF REGEX '[;:",|#]' IN ls_bseg-xref2 WITH '_'.
REPLACE ALL OCCURRENCES OF REGEX '[;:",|#]' IN ls_bseg-zuonr WITH '_'.
REPLACE ALL OCCURRENCES OF REGEX '[;:"|#]' IN ls_bseg-xblnr WITH space.
IF ls_bseg-xblnr IS NOT INITIAL AND ls_bseg-xblnr CA ','.
CONCATENATE '"' ls_bseg-xblnr '"' INTO lf_xblnr.
ELSE.
lf_xblnr = ls_bseg-xblnr.
ENDIF.
CONCATENATE ls_bseg-name1
ls_bseg-kunnr
ls_bseg-belnr
ls_bseg-bldat
lf_xblnr
ls_bseg-zuonr
ls_bseg-blart
ls_bseg-sgtxt
ls_bseg-bukrs
ls_bseg-vkorg
ls_bseg-zfbdt
ls_bseg-vkgrp
ls_bseg-aufnr
ls_bseg-manst
ls_bseg-mansp
ls_bseg-zterm
ls_bseg-augbl
ls_bseg-bktxt
ls_bseg-penrc
ls_bseg-cpudt
lf_madat
ls_bseg-buzei
ls_bseg-busab
ls_bseg-auggj
ls_bseg-augdt
ls_bseg-gjahr
lf_dmbtr
ls_bseg-hwaer
lf_wrbtr
ls_bseg-waers
ls_bseg-gsber
ls_bseg-akont
ls_bseg-umskz
ls_bseg-kkber
ls_bseg-shkzg
ls_bseg-bschl
INTO lf_string SEPARATED BY '|'.
APPEND lf_string TO lt_string.
ENDLOOP.
lf_dataset_bseg = if_dataset.
REPLACE FIRST OCCURRENCE OF 'CC' IN lf_dataset_bseg WITH af_zone.
OPEN DATASET lf_dataset_bseg FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
IF sy-subrc = 0.
LOOP AT lt_string INTO lf_string.
TRANSFER lf_string TO lf_dataset_bseg.
ENDLOOP.
CLOSE DATASET lf_dataset_bseg.
ef_msg = 'Datei & erfolgreich erzeugt'.
REPLACE '&' IN ef_msg WITH lf_dataset_bseg.
ELSE.
ef_msg = 'Fehler beim Schreiben der Datei &'.
REPLACE '&' IN ef_msg WITH lf_dataset_bseg.
ENDIF.
ENDMETHOD.METHOD CLEAR
Löscht alle Daten aus den internen Tabellen der Klasse. Dies wird typischerweise aufgerufen, wenn eine neue Iteration der Datenverarbeitung beginnt.
METHOD CLEAR.
REFRESH :
at_kna1,
at_bsad,
at_bsid,
at_bseg,
at_vkorg,
at_bkpf.
ENDMETHOD.METHOD CONSTRUCTOR
Initialisiert die Klasse und verarbeitet die vom Bericht übergebenen Selektionsparameter. Extrahiert Dateiname, Bukrs, Datumsbereichs und Zonenparameter aus der Selektionstafel.
METHOD constructor.
DATA: ls_seltab TYPE rsparamsl_255,
lr_s_range TYPE selopt.
at_seltab = it_seltab.
LOOP AT at_seltab INTO ls_seltab WHERE selname = 'S_BUDAT'.
IF ls_seltab-sign IS NOT INITIAL.
CLEAR lr_s_range.
MOVE-CORRESPONDING ls_seltab TO lr_s_range.
APPEND lr_s_range TO ar_budat.
ENDIF.
ENDLOOP.
LOOP AT at_seltab INTO ls_seltab WHERE selname = 'S_BLDAT'.
IF ls_seltab-sign IS NOT INITIAL.
CLEAR lr_s_range.
MOVE-CORRESPONDING ls_seltab TO lr_s_range.
APPEND lr_s_range TO ar_bldat.
ENDIF.
ENDLOOP.
LOOP AT at_seltab INTO ls_seltab WHERE selname = 'S_CPUDT'.
IF ls_seltab-sign IS NOT INITIAL.
CLEAR lr_s_range.
MOVE-CORRESPONDING ls_seltab TO lr_s_range.
APPEND lr_s_range TO ar_cpudt.
ENDIF.
ENDLOOP.
IF sy-subrc <> 0.
ar_cpudt = ar_budat.
ENDIF.
LOOP AT at_seltab INTO ls_seltab WHERE selname = 'S_AUGDT'.
IF ls_seltab-sign IS NOT INITIAL.
CLEAR lr_s_range.
MOVE-CORRESPONDING ls_seltab TO lr_s_range.
APPEND lr_s_range TO ar_augdt.
ENDIF.
ENDLOOP.
LOOP AT at_seltab INTO ls_seltab WHERE selname = 'S_BUKRS'.
IF ls_seltab-sign IS NOT INITIAL.
CLEAR lr_s_range.
MOVE-CORRESPONDING ls_seltab TO lr_s_range.
APPEND lr_s_range TO ar_bukrs.
ENDIF.
ENDLOOP.
LOOP AT at_seltab INTO ls_seltab WHERE selname = 'S_CPUTM'.
IF ls_seltab-sign IS NOT INITIAL.
CLEAR lr_s_range.
MOVE-CORRESPONDING ls_seltab TO lr_s_range.
APPEND lr_s_range TO ar_cputm.
ENDIF.
ENDLOOP.
READ TABLE at_seltab INTO ls_seltab WITH KEY selname = 'P_F_KNA1'.
af_dataset_kna1 = ls_seltab-low.
READ TABLE at_seltab INTO ls_seltab WITH KEY selname = 'P_F_BSEG'.
af_dataset_bseg = ls_seltab-low.
READ TABLE at_seltab INTO ls_seltab WITH KEY selname = 'P_F_BSID'.
af_dataset_bsid = ls_seltab-low.
READ TABLE at_seltab INTO ls_seltab WITH KEY selname = 'P_F_BSAD'.
af_dataset_bsad = ls_seltab-low.
READ TABLE at_seltab INTO ls_seltab WITH KEY selname = 'P_ALL'.
ap_all = ls_seltab-low.
READ TABLE at_seltab INTO ls_seltab WITH KEY selname = 'P_DIR'.
ap_dir = ls_seltab-low.
READ TABLE at_seltab INTO ls_seltab WITH KEY selname = 'P_C_INFO'.
ap_credit_info = ls_seltab-low.
READ TABLE at_seltab INTO ls_seltab WITH KEY selname = 'P_C_LIM'.
ap_credit_limit = ls_seltab-low.
READ TABLE at_seltab INTO ls_seltab WITH KEY selname = 'P_SEC'.
ap_securities = ls_seltab-low.
READ TABLE at_seltab INTO ls_seltab WITH KEY selname = 'P_CUST'.
ap_customers = ls_seltab-low.
READ TABLE at_seltab INTO ls_seltab WITH KEY selname = 'P_JOURN'.
ap_journal = ls_seltab-low.
READ TABLE at_seltab INTO ls_seltab WITH KEY selname = 'P_EURO'
kind = 'P' low = 'X'.
IF sy-subrc = 0.
af_zone = 'EUROPE'.
ENDIF.
READ TABLE at_seltab INTO ls_seltab WITH KEY selname = 'P_ASIA'
kind = 'P' low = 'X'.
IF sy-subrc = 0.
af_zone = 'ASIA' .
ENDIF.
READ TABLE at_seltab INTO ls_seltab WITH KEY selname = 'P_US'
kind = 'P' low = 'X'.
IF sy-subrc = 0.
af_zone = 'US'.
ENDIF.
READ TABLE at_seltab INTO ls_seltab WITH KEY selname = 'P_OTHR'
kind = 'P' low = 'X'.
IF sy-subrc = 0.
af_zone = 'OTHERS'.
ENDIF.
ENDMETHOD.METHOD CREDIT_LIMIT_CHANGE
Aktualisiert die Kreditlimit und Bonitätsrating-Daten im Kundenstamm (Tabellen KNKK und KNKA). Die Methode verarbeitet sowohl Kreditlimit-Einträge als auch separate Bonitätsinformationen über die Funktion CREDITLIMIT_CHANGE.
METHOD CREDIT_LIMIT_CHANGE.
DATA: ls_yknka TYPE knka,
ls_yknkk TYPE knkk,
ls_message TYPE string,
ls_klimk TYPE string.
LOOP AT at_credit_limit INTO DATA(ls_credit_limit).
CLEAR: ls_yknka, ls_yknkk.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = ls_credit_limit-kunnr
IMPORTING
output = ls_credit_limit-kunnr.
SELECT SINGLE * FROM knkk INTO @DATA(ls_knkk)
WHERE kunnr = @ls_credit_limit-kunnr
AND kkber = @ls_credit_limit-bukrs.
SELECT SINGLE * FROM knka INTO @DATA(ls_knka)
WHERE kunnr = @ls_credit_limit-kunnr.
IF ls_credit_limit IS NOT INITIAL.
ls_knkk-klimk = ls_credit_limit-klimk.
ENDIF.
READ TABLE at_credit_info INTO DATA(ls_credit_info) WITH KEY
bukrs = ls_credit_limit-bukrs
kunnr = ls_credit_limit-kunnr.
IF sy-subrc = 0.
ls_knkk-dbrtg = ls_credit_info-dbrtg.
ENDIF.
CALL FUNCTION 'CREDITLIMIT_CHANGE'
EXPORTING
i_knka = ls_knka
i_knkk = ls_knkk
upd_knka = ' '
upd_knkk = 'U'
yknka = ls_yknka
yknkk = ls_yknkk.
IF sy-subrc EQ 0.
COMMIT WORK.
CONCATENATE 'Customer' ls_credit_limit-kunnr
ls_credit_limit-bukrs
'Master Data Updated for : Credit Limit &1, Rating &2'(003)
INTO ls_message SEPARATED BY space.
MOVE ls_knkk-klimk to ls_klimk.
REPLACE '&1' IN ls_message WITH ls_klimk.
REPLACE '&2' IN ls_message WITH ls_knkk-dbrtg.
MESSAGE ls_message TYPE 'S' DISPLAY LIKE 'I'.
ELSE.
CONCATENATE 'Error in Customer' ls_credit_limit-kunnr
ls_credit_limit-bukrs
'Master Data Updated for : Credit Limit &1, Rating &2'(003)
INTO ls_message SEPARATED BY space.
MOVE ls_knkk-klimk to ls_klimk.
REPLACE '&1' IN ls_message WITH ls_klimk.
REPLACE '&2' IN ls_message WITH ls_knkk-dbrtg.
MESSAGE ls_message TYPE 'I' DISPLAY LIKE 'I'.
CALL METHOD me->SEND_EMAIL
EXPORTING
I_MESSAGE = ls_message
.
ENDIF.
CLEAR : ls_message, ls_klimk.
ENDLOOP.
LOOP AT at_credit_info INTO ls_credit_info.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = ls_credit_info-kunnr
IMPORTING
output = ls_credit_info-kunnr.
READ TABLE at_credit_limit INTO ls_credit_limit WITH KEY
bukrs = ls_credit_info-bukrs
kunnr = ls_credit_info-kunnr.
IF sy-subrc <> 0.
SELECT SINGLE * FROM knkk INTO @ls_knkk
WHERE kunnr = @ls_credit_info-kunnr
AND kkber = @ls_credit_info-bukrs.
SELECT SINGLE * FROM knka INTO @ls_knka
WHERE kunnr = @ls_credit_info-kunnr.
ls_knkk-dbrtg = ls_credit_info-dbrtg.
CALL FUNCTION 'CREDITLIMIT_CHANGE'
EXPORTING
i_knka = ls_knka
i_knkk = ls_knkk
upd_knka = ' '
upd_knkk = 'U'
yknka = ls_yknka
yknkk = ls_yknkk.
IF sy-subrc EQ 0.
COMMIT WORK.
CONCATENATE 'Customer' ls_credit_info-kunnr
ls_credit_info-bukrs
'Master Data Updated for : Rating &1'(005)
INTO ls_message SEPARATED BY space.
REPLACE '&1' IN ls_message WITH ls_knkk-dbrtg.
MESSAGE ls_message TYPE 'S' DISPLAY LIKE 'I'.
ELSE.
CONCATENATE 'Error in Customer' ls_credit_info-kunnr
ls_credit_info-bukrs
'Master Data Updated for : Rating &1'(005)
INTO ls_message SEPARATED BY space.
REPLACE '&1' IN ls_message WITH ls_knkk-dbrtg.
MESSAGE ls_message TYPE 'I' DISPLAY LIKE 'I'.
CALL METHOD me->SEND_EMAIL
EXPORTING
I_MESSAGE = ls_message
.
ENDIF.
CLEAR : ls_message.
ENDIF.
ENDLOOP.
ENDMETHOD.METHOD CUSTOMER_CHANGE
Aktualisiert Kundenstammdaten einschließlich Mahnstufe, Mahnsperr-Status, Mahnatum und Sicherheiten. Nutzt die Funktion SD_CUSTOMER_MAINTAIN_ALL zur Stammdatenverwaltung.
METHOD CUSTOMER_CHANGE.
DATA: ls_master_data TYPE cmds_ei_main,
lt_customer TYPE cmds_ei_extern_t,
ls_company_data TYPE cmds_ei_cmd_company,
lt_company TYPE cmds_ei_company_t,
ls_company TYPE cmds_ei_company,
ls_dunning TYPE cmds_ei_dunning,
lt_dunning TYPE cmds_ei_dunning_t,
ls_master_data_correct TYPE cmds_ei_main,
ls_message_correct TYPE cvis_message,
ls_master_data_defective TYPE cmds_ei_main,
ls_message_defective TYPE cvis_message,
ls_knb5 TYPE fknb5,
lt_yknb5 TYPE TABLE OF fknb5,
lt_xknb5 TYPE TABLE OF fknb5,
ls_kna1 TYPE kna1,
ls_knb1 TYPE knb1,
ls_message TYPE string,
ls_vlibb TYPE string,
lf_save TYPE abap_bool.
FIELD-SYMBOLS: <ls_customer> TYPE ty_s_customer.
LOOP AT at_securities INTO DATA(ls_sec).
UNASSIGN <ls_customer>.
READ TABLE at_customer ASSIGNING <ls_customer>
WITH KEY kunnr = ls_sec-kunnr
bukrs = ls_sec-bukrs.
IF sy-subrc = 0.
<ls_customer>-vlibb = ls_sec-vlibb.
ELSE.
APPEND INITIAL LINE TO at_customer ASSIGNING <ls_customer>.
IF <ls_customer> IS ASSIGNED.
<ls_customer>-kunnr = ls_sec-kunnr.
<ls_customer>-bukrs = ls_sec-bukrs.
<ls_customer>-vlibb = ls_sec-vlibb.
ENDIF.
ENDIF.
ENDLOOP.
LOOP AT at_customer INTO DATA(ls_customer).
CLEAR : ls_kna1, ls_knb5 , ls_knb1, lf_save.
REFRESH : lt_xknb5, lt_yknb5.
SELECT SINGLE * FROM kna1 INTO ls_kna1
WHERE kunnr = ls_customer-kunnr.
SELECT SINGLE * FROM knb1 INTO ls_knb1
WHERE kunnr = ls_customer-kunnr
AND bukrs = ls_customer-bukrs.
IF sy-subrc <> 0.
CONCATENATE 'Error : Customer' ls_customer-kunnr ls_customer-bukrs
'Master Data Updated for : Dunning level &1, Dunning Block &2 , Last dunned On &3 , Amount Insured &4'(004)
INTO ls_message SEPARATED BY space.
REPLACE '&1' IN ls_message WITH ls_customer-mahns .
REPLACE '&2' IN ls_message WITH ls_customer-mansp .
REPLACE '&3' IN ls_message WITH ls_customer-madat .
MOVE ls_customer-vlibb TO ls_vlibb.
REPLACE '&4' IN ls_message WITH ls_vlibb .
MESSAGE ls_message TYPE 'I' DISPLAY LIKE 'I'.
CALL METHOD me->SEND_EMAIL
EXPORTING
I_MESSAGE = ls_message
.
CLEAR : ls_message, ls_vlibb.
CONTINUE.
ENDIF.
IF ls_customer-mahns IS NOT INITIAL
OR ls_customer-mansp IS NOT INITIAL
OR ls_customer-madat IS NOT INITIAL.
lf_save = 'X'.
SELECT SINGLE * FROM knb5 INTO CORRESPONDING FIELDS OF ls_knb5
WHERE kunnr = ls_customer-kunnr
AND bukrs = ls_customer-bukrs.
IF sy-subrc = 0.
APPEND ls_knb5 TO lt_yknb5.
ls_knb5-kz = 'U'.
ls_knb5-mahns = ls_customer-mahns.
ls_knb5-mansp = ls_customer-mansp.
ls_knb5-madat = ls_customer-madat.
APPEND ls_knb5 TO lt_xknb5.
ELSE.
ls_knb5-kunnr = ls_customer-kunnr.
ls_knb5-bukrs = ls_customer-bukrs.
ls_knb5-kz = 'I'.
ls_knb5-mahns = ls_customer-mahns.
ls_knb5-mansp = ls_customer-mansp.
ls_knb5-madat = ls_customer-madat.
APPEND ls_knb5 TO lt_xknb5.
ENDIF.
ENDIF.
IF ls_customer-vlibb IS NOT INITIAL .
ls_knb1-vlibb = ls_customer-vlibb.
ENDIF.
CALL FUNCTION 'SD_CUSTOMER_MAINTAIN_ALL'
EXPORTING
i_kna1 = ls_kna1
i_knb1 = ls_knb1
pi_postflag = 'X'
TABLES
t_xknb5 = lt_xknb5
t_yknb5 = lt_yknb5
EXCEPTIONS
client_error = 1
kna1_incomplete = 2
knb1_incomplete = 3
knb5_incomplete = 4
knvv_incomplete = 5
kunnr_not_unique = 6
sales_area_not_unique = 7
sales_area_not_valid = 8
insert_update_conflict = 9
number_assignment_error = 10
number_not_in_range = 11
number_range_not_extern = 12
number_range_not_intern = 13
account_group_not_valid = 14
parnr_invalid = 15
bank_address_invalid = 16
tax_data_not_valid = 17
no_authority = 18
company_code_not_unique = 19
dunning_data_not_valid = 20
knb1_reference_invalid = 21
cam_error = 22
OTHERS = 23.
IF sy-subrc <> 0.
CONCATENATE 'Error : Customer' ls_customer-kunnr ls_customer-bukrs
'Master Data Updated for : Dunning level &1, Dunning Block &2 , Last dunned On &3 , Amount Insured &4'(004)
INTO ls_message SEPARATED BY space.
REPLACE '&1' IN ls_message WITH ls_customer-mahns .
REPLACE '&2' IN ls_message WITH ls_customer-mansp .
REPLACE '&3' IN ls_message WITH ls_customer-madat .
MOVE ls_customer-vlibb TO ls_vlibb.
REPLACE '&4' IN ls_message WITH ls_vlibb .
MESSAGE ls_message TYPE 'I' DISPLAY LIKE 'I'.
CALL METHOD me->SEND_EMAIL
EXPORTING
I_MESSAGE = ls_message
.
CLEAR : ls_message, ls_vlibb.
ELSE.
COMMIT WORK.
CONCATENATE 'Customer' ls_customer-kunnr ls_customer-bukrs
'Master Data Updated for : Dunning level &1, Dunning Block &2 , Last dunned On &3 , Amount Insured &4'(004)
INTO ls_message SEPARATED BY space.
REPLACE '&1' IN ls_message WITH ls_customer-mahns .
REPLACE '&2' IN ls_message WITH ls_customer-mansp .
REPLACE '&3' IN ls_message WITH ls_customer-madat .
MOVE ls_customer-vlibb TO ls_vlibb.
REPLACE '&4' IN ls_message WITH ls_vlibb .
MESSAGE ls_message TYPE 'S' DISPLAY LIKE 'I'.
CLEAR : ls_message, ls_vlibb.
ENDIF.
ENDLOOP.
ENDMETHOD.METHOD DELETE_FILES
Löscht alle Dateien aus dem Anwendungsverzeichnis, die in der Dateiliste (at_dir_list) aufgelistet sind. Dies wird typischerweise am Ende eines Verarbeitungslaufs aufgerufen, um temporäre Dateien zu bereinigen.
METHOD DELETE_FILES.
DATA: lf_file TYPE string.
LOOP AT at_dir_list INTO DATA(ls_dir).
CONCATENATE ap_dir ls_dir-name INTO lf_file.
DELETE DATASET lf_file.
ENDLOOP.
ENDMETHOD.METHOD DOC_CHANGE
Ändert Belegfelder (Mahnstufe, Mahnsperr-Status und Mahnatum) in offenen Debitorenposten über die Funktion FI_DOCUMENT_CHANGE. Wird verwendet, um Änderungen an Mahndaten auf bestehende Belege anzuwenden.
METHOD doc_change.
DATA: lt_accchg TYPE TABLE OF accchg,
ls_accchg TYPE accchg,
ls_message TYPE string,
ls_bsegc TYPE bsegc,
lf_belnr TYPE belnr_d.
CHECK at_journal IS NOT INITIAL.
SORT at_journal BY bukrs belnr gjahr.
LOOP AT at_journal INTO DATA(ls_journal).
IF sy-tabix <> 1.
IF lf_belnr <> ls_journal-belnr.
COMMIT WORK.
ENDIF.
ENDIF.
lf_belnr = ls_journal-belnr.
REFRESH : lt_accchg .
CLEAR : ls_accchg,ls_message.
SELECT SINGLE * FROM bsid INTO @DATA(ls_bsid)
WHERE belnr = @ls_journal-belnr
AND bukrs = @ls_journal-bukrs
AND gjahr = @ls_journal-gjahr.
IF sy-subrc = 0.
ls_accchg-fdname = 'MANST'.
ls_accchg-newval = ls_journal-manst.
ls_accchg-oldval = ls_bsid-manst.
APPEND ls_accchg TO lt_accchg.
ls_accchg-fdname = 'MANSP'.
ls_accchg-newval = ls_journal-mansp.
ls_accchg-oldval = ls_bsid-mansp.
APPEND ls_accchg TO lt_accchg.
ls_accchg-fdname = 'MADAT'.
ls_accchg-newval = ls_journal-madat.
ls_accchg-oldval = ls_bsid-madat.
APPEND ls_accchg TO lt_accchg.
CALL FUNCTION 'FI_DOCUMENT_CHANGE'
EXPORTING
i_buzei = ls_bsid-buzei
i_bukrs = ls_bsid-bukrs
i_belnr = ls_bsid-belnr
i_gjahr = ls_bsid-gjahr
TABLES
t_accchg = lt_accchg
EXCEPTIONS
no_reference = 1
no_document = 2
many_documents = 3
wrong_input = 4
overwrite_creditcard = 5
OTHERS = 6.
IF sy-subrc EQ 0.
CONCATENATE 'Journal Entry' ls_journal-belnr
ls_journal-bukrs
'Updated for : Dunning level &1 , Dunning Block &2, last dunned &3'(006)
INTO ls_message SEPARATED BY space.
REPLACE '&1' IN ls_message WITH ls_journal-manst.
REPLACE '&2' IN ls_message WITH ls_journal-mansp.
REPLACE '&3' IN ls_message WITH ls_journal-madat.
MESSAGE ls_message TYPE 'S' DISPLAY LIKE 'I'.
ELSE.
CONCATENATE 'Error:' ls_journal-belnr
ls_journal-bukrs
'Updated for : Dunning level &1 , Dunning Block &2, last dunned &3'(006)
INTO ls_message SEPARATED BY space.
REPLACE '&1' IN ls_message WITH ls_journal-manst.
REPLACE '&2' IN ls_message WITH ls_journal-mansp.
REPLACE '&3' IN ls_message WITH ls_journal-madat.
MESSAGE ls_message TYPE 'I' DISPLAY LIKE 'I'.
CALL METHOD me->send_email
EXPORTING
i_message = ls_message.
ENDIF.
ENDIF.
ENDLOOP.
ENDMETHOD.METHOD GET_ADDITIONAL
Erweitert BSEG-Daten mit zusätzlichen Informationen aus KNA1, BKPF, KNVV und VBRK. Bestimmt die Fälligkeitsdaten, fügt Kundennamen, Geschäftsbereich und Verkaufsorganisationsinformationen hinzu.
METHOD get_additional.
DATA: lt_kna1 TYPE TABLE OF kna1,
ls_kna1 TYPE kna1,
ls_faede TYPE faede,
lt_bkpf TYPE TABLE OF bkpf,
ls_bkpf TYPE bkpf,
lt_knb1 TYPE TABLE OF knb1,
ls_knb1 TYPE knb1,
lt_vbrk TYPE TABLE OF vbrk,
ls_vbrk TYPE vbrk,
lt_vbrp TYPE TABLE OF vbrp,
ls_vbrp TYPE vbrp,
lt_vbfa TYPE TABLE OF vbfa,
ls_vbfa TYPE vbfa,
lt_vbak TYPE TABLE OF vbak,
ls_vbak TYPE vbak.
IF ct_bseg IS NOT INITIAL.
SELECT kunnr name1 kukla FROM kna1 INTO CORRESPONDING FIELDS OF TABLE lt_kna1
FOR ALL ENTRIES IN ct_bseg WHERE kunnr = ct_bseg-kunnr.
SELECT kunnr bukrs akont busab FROM knb1 INTO CORRESPONDING FIELDS OF TABLE lt_knb1
FOR ALL ENTRIES IN ct_bseg WHERE kunnr = ct_bseg-kunnr AND bukrs = ct_bseg-bukrs.
SELECT bukrs belnr gjahr hwaer bktxt penrc FROM bkpf INTO CORRESPONDING FIELDS OF TABLE lt_bkpf
FOR ALL ENTRIES IN ct_bseg WHERE bukrs = ct_bseg-bukrs AND belnr = ct_bseg-belnr AND gjahr = ct_bseg-gjahr.
SELECT vbeln vkorg FROM vbrk INTO CORRESPONDING FIELDS OF TABLE lt_vbrk
FOR ALL ENTRIES IN ct_bseg
WHERE vbeln = ct_bseg-vbeln.
SELECT DISTINCT vbeln vkgrp FROM vbrp INTO CORRESPONDING FIELDS OF TABLE lt_vbrp
FOR ALL ENTRIES IN ct_bseg
WHERE aubel = ct_bseg-vbeln.
ENDIF.
LOOP AT ct_bseg ASSIGNING FIELD-SYMBOL(<ls_bseg>).
CLEAR : ls_faede, ls_kna1, ls_knb1, ls_bkpf, ls_vbrk, ls_vbrp, ls_vbfa, ls_vbak.
READ TABLE lt_kna1 INTO ls_kna1 WITH KEY kunnr = <ls_bseg>-kunnr.
<ls_bseg>-name1 = ls_kna1-name1.
<ls_bseg>-kukla = ls_kna1-kukla.
READ TABLE lt_knb1 INTO ls_knb1 WITH KEY kunnr = <ls_bseg>-kunnr bukrs = <ls_bseg>-bukrs.
<ls_bseg>-busab = ls_knb1-busab.
ls_faede-rebzg = <ls_bseg>-belnr.
ls_faede-shkzg = <ls_bseg>-shkzg.
ls_faede-zbd1t = <ls_bseg>-zbd1t.
ls_faede-zbd2t = <ls_bseg>-zbd2t.
ls_faede-zfbdt = <ls_bseg>-zfbdt.
ls_faede-bldat = <ls_bseg>-bldat.
ls_faede-koart = 'D'.
CALL FUNCTION 'DETERMINE_DUE_DATE'
EXPORTING
i_faede = ls_faede
i_gl_faede = 'X'
IMPORTING
e_faede = ls_faede
EXCEPTIONS
account_type_not_supported = 1
OTHERS = 2.
IF sy-subrc = 0.
<ls_bseg>-zfbdt = ls_faede-netdt.
ENDIF.
READ TABLE lt_bkpf INTO ls_bkpf
WITH KEY bukrs = <ls_bseg>-bukrs belnr = <ls_bseg>-belnr gjahr = <ls_bseg>-gjahr.
IF sy-subrc = 0.
<ls_bseg>-bktxt = ls_bkpf-bktxt.
<ls_bseg>-hwaer = ls_bkpf-hwaer.
<ls_bseg>-penrc = ls_bkpf-penrc.
ENDIF.
IF <ls_bseg>-vbeln IS NOT INITIAL.
READ TABLE lt_vbrk INTO ls_vbrk WITH KEY vbeln = <ls_bseg>-vbeln.
<ls_bseg>-vkorg = ls_vbrk-vkorg.
READ TABLE lt_vbrp INTO ls_vbrp WITH KEY vbeln = <ls_bseg>-vbeln.
<ls_bseg>-vkgrp = ls_vbrp-vkgrp.
ENDIF.
APPEND <ls_bseg> TO at_bseg_final.
ENDLOOP.
ENDMETHOD.METHOD GET_BSAD
Liest alte/ausgeglichene Buchhaltungssätze aus der Tabelle BSAD (Financial Accounting Document - Reconciliation Line Items - Paid/Cleared). Berücksichtigt Selektionsparameter für Datumsbereichs und Zeitintervalle.
METHOD get_bsad.
DATA: lf_where TYPE string,
lt_bkpf TYPE TABLE OF bkpf.
IF ap_all = 'X'.
SELECT bukrs kunnr umskz augdt augbl zuonr gjahr belnr buzei xblnr
blart auggj sgtxt budat bldat dmbtr waers wrbtr shkzg zterm
zfbdt cpudt gsber xref1 xref2 rstgr mansp manst madat zbd1t
zbd2t zbd3t zlsch maber kkber vbeln aufnr bschl hkont AS akont
FROM bsad
INTO CORRESPONDING FIELDS OF TABLE at_bsad
WHERE bukrs = af_bukrs
AND umskz IN ('B', 'E', 'L', 'G', 'W', '5', '')
AND xcpdd = ''.
ELSE.
IF ar_cpudt IS NOT INITIAL.
SELECT bukrs belnr gjahr bldat budat cpudt cputm aedat
FROM bkpf INTO CORRESPONDING FIELDS OF TABLE lt_bkpf
WHERE bukrs = af_bukrs
AND ( cpudt IN ar_cpudt AND cputm IN ar_cputm ) OR aedat IN ar_cpudt.
IF lt_bkpf IS NOT INITIAL.
SELECT bukrs kunnr umskz augdt augbl zuonr gjahr belnr buzei xblnr
blart auggj sgtxt budat bldat dmbtr waers wrbtr shkzg zterm
zfbdt cpudt gsber xref1 xref2 rstgr mansp manst madat zbd1t
zbd2t zbd3t zlsch maber kkber vbeln aufnr bschl hkont AS akont
FROM bsad
INTO CORRESPONDING FIELDS OF TABLE at_bsad
FOR ALL ENTRIES IN lt_bkpf
WHERE bukrs = af_bukrs
AND auggj = lt_bkpf-gjahr
AND augbl = lt_bkpf-belnr
AND umskz IN ('B', 'E', 'L', 'G', 'W', '5', '')
AND xcpdd = ''.
SELECT bukrs kunnr umskz augdt augbl zuonr gjahr belnr buzei xblnr
blart auggj sgtxt budat bldat dmbtr waers wrbtr shkzg zterm
zfbdt cpudt gsber xref1 xref2 rstgr mansp manst madat zbd1t
zbd2t zbd3t zlsch maber kkber vbeln aufnr bschl hkont AS akont
FROM bsad
APPENDING CORRESPONDING FIELDS OF TABLE at_bsad
FOR ALL ENTRIES IN lt_bkpf
WHERE bukrs = af_bukrs
AND gjahr = lt_bkpf-gjahr
AND belnr = lt_bkpf-belnr
AND umskz IN ('B', 'E', 'L', 'G', 'W', '5', '')
AND xcpdd = ''.
ENDIF.
ELSEIF ar_augdt IS NOT INITIAL.
lf_where = '( a~augdt IN ar_augdt OR k~aedat IN ar_augdt )'.
SELECT a~bukrs
a~kunnr
a~umskz
a~augdt
a~augbl
a~zuonr
a~gjahr
a~belnr
a~buzei
a~xblnr
a~blart
a~auggj
a~sgtxt
a~budat
a~bldat
a~dmbtr
a~waers
a~wrbtr
a~shkzg
a~zterm
a~zfbdt
a~cpudt
a~gsber
a~xref1
a~xref2
a~rstgr
a~mansp
a~manst
a~madat
a~zbd1t
a~zbd2t
a~zbd3t
a~zlsch
a~maber
a~kkber
a~vbeln
a~aufnr
a~bschl
a~hkont AS akont
FROM bsad AS a
INNER JOIN bkpf AS k ON a~bukrs = k~bukrs AND a~gjahr = k~gjahr AND a~belnr = k~belnr
INTO CORRESPONDING FIELDS OF TABLE at_bsad
WHERE a~bukrs = af_bukrs
AND a~umskz IN ('B', 'E', 'L', 'G', 'W', '5', '')
AND (lf_where)
AND a~xcpdd = ''.
ENDIF.
ENDIF.
SORT at_bsad.
DELETE ADJACENT DUPLICATES FROM at_bsad COMPARING ALL FIELDS.
ENDMETHOD.METHOD GET_BSEG
Liest kombinierte Buchhaltungssätze aus BSAD (Ausgegebene Rechnungen) und BSID (Offene Posten). Dies ist die Hauptmethode zur Datenextraktion und wird von Extractor-Reports aufgerufen.
METHOD GET_BSEG.
CALL METHOD me->get_bsad.
CALL METHOD me->get_bsid.
APPEND LINES OF at_bsad TO at_bseg.
APPEND LINES OF at_bsid TO at_bseg.
ENDMETHOD.METHOD GET_BSID
Liest offene Debitorenbuchhaltungssätze aus der Tabelle BSID (Financial Accounting Document - Reconciliation Line Items - Open). Berücksichtigt selektive Eingrenzungen nach Buchungskreis, Dokumenttyp und Datumsbereichs.
METHOD get_bsid.
DATA: lf_where TYPE string.
IF ap_all = 'X'.
SELECT bukrs
kkber
kunnr
gjahr
belnr
buzei
xblnr
zuonr
blart
sgtxt
budat
bldat
dmbtr
wrbtr
waers
shkzg
zfbdt
cpudt
gsber
xref1
xref2
rstgr
aufnr
mansp
manst
maber
madat
zterm
augbl
auggj
augdt
zbd1t
zbd2t
zbd3t
zlsch
vbeln
umskz
bschl
hkont AS akont
FROM bsid
INTO CORRESPONDING FIELDS OF TABLE at_bsid
WHERE bukrs = af_bukrs
AND umskz IN ('B', 'E', 'L', 'G', 'W', '5','')
AND xcpdd = ''.
ELSE.
IF ar_cpudt IS NOT INITIAL.
READ TABLE ar_cpudt INTO DATA(lr_s_cpudt) INDEX 1.
IF lr_s_cpudt-sign = 'I' AND lr_s_cpudt-option = 'EQ'.
IF ar_cputm IS NOT INITIAL.
lf_where = '( ( k~cpudt IN ar_cpudt AND k~cputm IN ar_cputm ) OR k~aedat IN ar_cpudt )'.
ELSE.
lf_where = '( k~cpudt IN ar_cpudt OR k~aedat IN ar_cpudt )'.
ENDIF.
ELSE.
lf_where = '( k~cpudt IN ar_cpudt OR k~aedat IN ar_cpudt )'.
ENDIF.
ELSEIF ar_budat IS NOT INITIAL.
lf_where = '( i~budat IN ar_budat OR k~aedat IN ar_budat )'.
ENDIF.
SELECT i~bukrs
i~kkber
i~kunnr
i~gjahr
i~belnr
i~buzei
i~xblnr
i~zuonr
i~blart
i~sgtxt
i~budat
i~bldat
i~dmbtr
i~wrbtr
i~waers
i~shkzg
i~zfbdt
i~cpudt
i~gsber
i~xref1
i~xref2
i~rstgr
i~aufnr
i~mansp
i~manst
i~maber
i~madat
i~zterm
i~augbl
i~auggj
i~augdt
i~zbd1t
i~zbd2t
i~zbd3t
i~zlsch
i~vbeln
i~umskz
i~bschl
i~hkont AS akont
FROM bsid AS i
INNER JOIN bkpf AS k ON i~bukrs = k~bukrs AND i~gjahr = k~gjahr AND i~belnr = k~belnr
INTO CORRESPONDING FIELDS OF TABLE at_bsid
WHERE i~bukrs = af_bukrs
AND i~umskz IN ('B', 'E', 'L', 'G', 'W', '5','')
AND (lf_where)
AND i~xcpdd = ''.
SORT at_bsid BY bukrs kunnr umskz augdt augbl zuonr gjahr belnr buzei.
DELETE ADJACENT DUPLICATES FROM at_bsid COMPARING ALL FIELDS.
ENDIF.
ENDMETHOD.METHOD GET_DELTA_RESTRICTION
Filtert Änderungen in der BKPF-Tabelle basierend auf Zeitstempeln und Datumsbereichen. Wird verwendet, um nur die neuesten Änderungen zur Verarbeitung zu extrahieren.
method GET_DELTA_RESTRICTION.
DATA : creatd_dt TYPE PIQ_SELOPT_T,
changd_dt TYPE PIQ_SELOPT_T,
creatd_tm TYPE PIQ_SELOPT_T,
ls_s_range TYPE selopt,
lt_date TYPE sy-datum,
lt_time TYPE sy-uzeit,
ls_flag TYPE i.
IF ar_budat[] IS NOT INITIAL .
READ TABLE ar_budat INTO ls_s_range INDEX 1.
ls_s_range-high = sy-datum.
ls_s_range-option = 'BT'.
APPEND ls_s_range TO creatd_dt.
ENDIF.
IF ar_augdt[] IS NOT INITIAL.
READ TABLE ar_augdt INTO ls_s_range INDEX 1.
ls_s_range-high = sy-datum.
ls_s_range-option = 'BT'.
APPEND ls_s_range TO creatd_dt.
ENDIF.
ls_flag = sy-uzeit+0(2) MOD 6.
IF ls_flag = 0.
SELECT bukrs belnr gjahr cpudt cputm aedat
FROM bkpf INTO TABLE at_bkpf
WHERE ( CPUDT IN creatd_dt AND CPUTM IN ar_cputm ) OR
( AEDAT IN creatd_dt ) .
ELSE.
SELECT bukrs belnr gjahr cpudt cputm aedat
FROM bkpf INTO TABLE at_bkpf
WHERE ( CPUDT IN creatd_dt AND CPUTM IN ar_cputm ) .
ENDIF.
DELETE at_bkpf WHERE bukrs <> af_bukrs.
endmethod.METHOD GET_FILES
Liest die Liste der Dateien aus dem Anwendungsverzeichnis, das in ap_dir angegeben ist. Verwendet die Standardfunktion EPS_GET_DIRECTORY_LISTING.
method GET_FILES.
DATA : ls_message TYPE string.
CALL FUNCTION 'EPS_GET_DIRECTORY_LISTING'
EXPORTING
dir_name = ap_dir
TABLES
dir_list = at_dir_list
EXCEPTIONS
invalid_eps_subdir = 1
sapgparam_failed = 2
build_directory_failed = 3
no_authorization = 4
read_directory_failed = 5
too_many_read_errors = 6
empty_directory_list = 7
OTHERS = 8.
IF sy-subrc <> 0.
MESSAGE 'Error in fetching files from Application server'
TYPE 'I' DISPLAY LIKE 'I'.
ENDIF.
endmethod.METHOD GET_KNA1
Liest Kundenstammdaten aus KNA1 und KNB1 mit erweiterten Informationen aus KNVV, TVGRT und KNKK. Berücksichtigt Erstellen- und Änderungsdatum. Generiert auch strukturierte Verkaufsgruppen-Strings.
METHOD get_kna1.
DATA: ls_seltab TYPE rsparams,
lt_knvv TYPE TABLE OF knvv,
lt_knkk TYPE TABLE OF knkk.
DATA: lt_cdhdr TYPE TABLE OF cdhdr,
lr_kunnr TYPE trgr_kunnr,
lr_s_kunnr TYPE trgs_kunnr.
READ TABLE at_seltab INTO ls_seltab WITH KEY selname = 'P_ALL'.
IF ls_seltab-low = 'X'.
SELECT b~bukrs,
b~kunnr,
a~anred,
a~pstlz,
a~ort01,
a~land1,
a~stras,
a~name1,
a~name2,
a~name3,
a~name4,
a~telf1,
a~telf2,
a~stceg,
b~zwels,
b~zterm,
b~vrsnr,
b~vlibb,
b~akont,
a~erdat,
a~adrnr,
b~intad,
b~busab
FROM knb1 AS b
INNER JOIN kna1 AS a ON b~kunnr = a~kunnr
INTO CORRESPONDING FIELDS OF TABLE @at_kna1
WHERE bukrs = @af_bukrs
AND a~xcpdk = ''.
ELSE.
SELECT DISTINCT b~bukrs,
b~kunnr,
a~anred,
a~pstlz,
a~ort01,
a~land1,
a~stras,
a~name1,
a~name2,
a~name3,
a~name4,
a~telf1,
a~telf2,
a~stceg,
b~zwels,
b~zterm,
b~vrsnr,
b~vlibb,
b~akont,
a~erdat,
a~adrnr,
b~intad,
b~busab
FROM knb1 AS b
INNER JOIN kna1 AS a ON b~kunnr = a~kunnr
INTO CORRESPONDING FIELDS OF TABLE @at_kna1
WHERE b~bukrs = @af_bukrs
AND a~xcpdk = ''
AND ( a~erdat IN @ar_cpudt OR b~erdat IN @ar_cpudt ).
SELECT DISTINCT objectid FROM cdhdr INTO CORRESPONDING FIELDS OF TABLE lt_cdhdr
WHERE objectclas = 'DEBI'
AND udate IN ar_cpudt
AND change_ind = 'U'.
lr_s_kunnr-option = 'EQ'.
lr_s_kunnr-sign = 'I'.
LOOP AT lt_cdhdr INTO DATA(ls_cdhdr).
lr_s_kunnr-low = ls_cdhdr-objectid.
APPEND lr_s_kunnr TO lr_kunnr.
ENDLOOP.
SELECT DISTINCT b~bukrs,
b~kunnr,
a~anred,
a~pstlz,
a~ort01,
a~land1,
a~stras,
a~name1,
a~name2,
a~name3,
a~name4,
a~telf1,
a~telf2,
a~stceg,
b~zwels,
b~zterm,
b~vrsnr,
b~vlibb,
b~akont,
a~erdat,
a~adrnr,
b~intad,
b~busab
FROM knb1 AS b
INNER JOIN kna1 AS a ON b~kunnr = a~kunnr
APPENDING CORRESPONDING FIELDS OF TABLE @at_kna1
WHERE b~bukrs = @af_bukrs
AND a~xcpdk = ''
AND b~kunnr IN @lr_kunnr.
ENDIF.
SORT at_kna1 BY kunnr.
DELETE ADJACENT DUPLICATES FROM at_kna1 COMPARING ALL FIELDS.
IF at_kna1 IS NOT INITIAL.
SELECT * FROM knvv INTO TABLE lt_knvv
FOR ALL ENTRIES IN at_kna1
WHERE kunnr = at_kna1-kunnr
AND vkgrp <> ''.
IF lt_knvv IS NOT INITIAL.
SELECT * FROM tvgrt INTO TABLE @DATA(lt_tvgrt)
FOR ALL ENTRIES IN @lt_knvv WHERE vkgrp = @lt_knvv-vkgrp.
ENDIF.
SELECT * FROM knkk INTO TABLE lt_knkk
FOR ALL ENTRIES IN at_kna1
WHERE kunnr = at_kna1-kunnr
AND kkber = af_kkber.
ENDIF.
LOOP AT at_kna1 ASSIGNING FIELD-SYMBOL(<ls_kna1>).
DATA(lt_knvv_kunnr) = lt_knvv.
DELETE lt_knvv_kunnr WHERE kunnr <> <ls_kna1>-kunnr.
IF lt_knvv_kunnr IS NOT INITIAL.
<ls_kna1>-vkgrp_string = '{'.
DATA(lf_count) = 0.
DATA(lf_lines) = lines( lt_knvv_kunnr ).
CLEAR lf_count.
LOOP AT lt_knvv_kunnr INTO DATA(ls_knvv).
lf_count = lf_count + 1.
IF <ls_kna1>-vkgrp IS INITIAL.
<ls_kna1>-vkgrp = ls_knvv-vkgrp.
ENDIF.
READ TABLE lt_tvgrt INTO DATA(ls_tvgrt) WITH KEY vkgrp = ls_knvv-vkgrp.
<ls_kna1>-vkgrp_string = <ls_kna1>-vkgrp_string && ls_knvv-vkorg && ':' && ls_knvv-vkgrp.
IF ls_tvgrt IS NOT INITIAL.
<ls_kna1>-vkgrp_string = <ls_kna1>-vkgrp_string && ':' && ls_tvgrt-bezei.
ENDIF.
IF lf_count < lf_lines.
<ls_kna1>-vkgrp_string = <ls_kna1>-vkgrp_string && ';'.
ENDIF.
ENDLOOP.
IF sy-subrc = 0.
<ls_kna1>-vkgrp_string = <ls_kna1>-vkgrp_string && '}'.
ENDIF.
ENDIF.
READ TABLE lt_knkk INTO DATA(ls_knkk) WITH KEY kunnr = <ls_kna1>-kunnr.
IF sy-subrc = 0.
<ls_kna1>-klimk = ls_knkk-klimk.
<ls_kna1>-knkli = ls_knkk-knkli.
<ls_kna1>-ctlpc = ls_knkk-ctlpc.
<ls_kna1>-dbrtg = ls_knkk-dbrtg.
ENDIF.
IF <ls_kna1>-busab IS NOT INITIAL.
CONCATENATE <ls_kna1>-bukrs '-' <ls_kna1>-busab INTO <ls_kna1>-ccbusab.
CONDENSE <ls_kna1>-ccbusab.
ENDIF.
APPEND <ls_kna1> TO at_kna1_final.
ENDLOOP.
ENDMETHOD.METHOD GET_MANSP_CHANGES
Identifiziert Änderungen an Mahnsperr-Daten (MANSP) in Belegen, auch wenn das Belegdatum nicht im Selektionsbereich liegt. Wird verwendet, um retroaktive Änderungen zu erfassen.
method GET_MANSP_CHANGES.
DATA: lt_cdhdr TYPE TABLE OF cdhdr,
lt_cdpos TYPE TABLE OF cdpos,
ls_cdpos TYPE cdpos,
lt_bsid TYPE TABLE OF bsid,
ls_bsid TYPE bsid,
lt_bseg TYPE zfi_t_bilendo_bseg,
lt_bkpf TYPE TABLE OF bkpf,
lt_kna1 TYPE TABLE OF kna1,
ls_kna1 TYPE kna1,
ls_faede TYPE faede.
FIELD-SYMBOLS: <ls_bseg> TYPE zfi_s_bilendo_bseg.
SELECT objectid FROM cdhdr
INTO CORRESPONDING FIELDS OF TABLE lt_cdhdr
WHERE objectclas = 'BELEG'
AND udate IN ar_budat
AND change_ind = 'U'.
IF sy-subrc = 0.
SELECT * FROM cdpos INTO TABLE lt_cdpos
FOR ALL ENTRIES IN lt_cdhdr
WHERE objectclas = 'BELEG'
AND objectid = lt_cdhdr-objectid
AND tabname = 'BSEG'
AND fname = 'MANSP'.
ENDIF.
LOOP AT lt_cdpos INTO ls_cdpos.
ls_bsid-bukrs = ls_cdpos-objectid+3(3).
ls_bsid-belnr = ls_cdpos-objectid+7(10).
ls_bsid-gjahr = ls_cdpos-objectid+17(4).
APPEND ls_bsid TO lt_bsid.
ENDLOOP.
IF lt_bsid IS NOT INITIAL.
SELECT bukrs belnr gjahr bldat budat cpudt FROM bkpf
INTO CORRESPONDING FIELDS OF TABLE lt_bkpf
FOR ALL ENTRIES IN lt_bsid
WHERE bukrs = lt_bsid-bukrs
AND belnr = lt_bsid-belnr
AND gjahr = lt_bsid-gjahr
AND budat NOT IN ar_budat.
ENDIF.
SELECT bukrs kunnr gjahr belnr xblnr zuonr blart augbl gjahr augdt sgtxt budat
bldat dmbtr shkzg zfbdt cpudt gsber xref1 xref2 rstgr mansp manst
madat buzei zbd1t zbd2t zbd3t auggj zlsch
FROM bsid
INTO CORRESPONDING FIELDS OF TABLE lt_bseg
FOR ALL ENTRIES IN lt_bkpf
WHERE bukrs = lt_bkpf-bukrs
AND belnr = lt_bkpf-belnr
AND gjahr = lt_bkpf-gjahr.
IF lt_bseg IS NOT INITIAL.
SELECT kunnr name1 kukla FROM kna1 INTO CORRESPONDING FIELDS OF TABLE lt_kna1
FOR ALL ENTRIES IN lt_bseg WHERE kunnr = lt_bseg-kunnr.
ENDIF.
LOOP AT lt_bseg ASSIGNING <ls_bseg>.
READ TABLE lt_kna1 INTO ls_kna1 WITH KEY kunnr = <ls_bseg>-kunnr.
<ls_bseg>-name1 = ls_kna1-name1.
<ls_bseg>-kukla = ls_kna1-kukla.
MOVE-CORRESPONDING <ls_bseg> TO ls_faede.
ls_faede-koart = 'D'.
CALL FUNCTION 'DETERMINE_DUE_DATE'
EXPORTING
i_faede = ls_faede
i_gl_faede = 'X'
IMPORTING
e_faede = ls_faede
EXCEPTIONS
account_type_not_supported = 1
OTHERS = 2.
IF sy-subrc = 0.
<ls_bseg>-zfbdt = ls_faede-netdt.
ENDIF.
ENDLOOP.
APPEND LINES OF lt_bseg TO at_bseg.
endmethod.METHOD GET_VKORG
Weist Verkaufsorganisationen zu Buchhaltungssätzen zu basierend auf Kundenstammdaten aus KNVV und VBAK. Verwendet Zwischenspeicherung zur Optimierung.
METHOD GET_VKORG.
DATA: lt_knvv TYPE TABLE OF knvv,
lf_count TYPE i,
lf_tabix TYPE i.
LOOP AT ct_bseg ASSIGNING FIELD-SYMBOL(<ls_bseg>) WHERE vkorg IS INITIAL.
CLEAR lf_tabix.
CLEAR lf_count.
READ TABLE at_vkorg INTO DATA(ls_vkorg) WITH KEY bukrs = af_bukrs kunnr = <ls_bseg>-kunnr.
IF sy-subrc = 0.
<ls_bseg>-vkorg = ls_vkorg-vkorg.
CONTINUE.
ENDIF.
SELECT knvv~vkorg FROM knvv INNER JOIN tvko ON knvv~vkorg = tvko~vkorg INTO CORRESPONDING FIELDS OF TABLE lt_knvv
WHERE knvv~kunnr = <ls_bseg>-kunnr
AND tvko~bukrs = af_bukrs.
IF lines( lt_knvv ) = 1.
<ls_bseg>-vkorg = lt_knvv[ 1 ]-vkorg.
ELSEIF lines( lt_knvv ) > 1.
LOOP AT lt_knvv INTO DATA(ls_knvv).
SELECT COUNT(*) FROM vbak WHERE kunnr = <ls_bseg>-kunnr AND vkorg = ls_knvv-vkorg.
IF sy-dbcnt > lf_count.
lf_tabix = sy-tabix.
lf_count = sy-dbcnt.
ENDIF.
ENDLOOP.
IF lf_tabix > 0.
<ls_bseg>-vkorg = lt_knvv[ lf_tabix ]-vkorg.
ENDIF.
ENDIF.
IF <ls_bseg>-vkorg IS NOT INITIAL.
ls_vkorg-bukrs = af_bukrs.
ls_vkorg-vkorg = <ls_bseg>-vkorg.
ls_vkorg-kunnr = <ls_bseg>-kunnr.
APPEND ls_vkorg TO at_vkorg.
ENDIF.
ENDLOOP.
ENDMETHOD.METHOD KNA1_FILE_TO_SERVER
Konvertiert KNA1-Kundendaten mit erweiterten Informationen in eine Textdatei mit Pipe-Trennzeichen. Bereitet Daten auf für die externe Verarbeitung vor.
METHOD kna1_file_to_server.
DATA: lf_string TYPE string,
lt_string TYPE TABLE OF string,
ls_kna1 TYPE zfi_s_bilendo_kna1,
lf_vlibb TYPE char30,
lf_klimk TYPE char30,
lf_dataset_kna1 TYPE string.
CONCATENATE 'BUKRS' 'KUNNR' 'ANRED' 'PSTLZ' 'ORT01' 'LAND1' 'INTAD' 'STRAS'
'NAME1' 'NAME2' 'NAME3' 'NAME4' 'TELF1' 'TELF2' 'STCEG'
'ZWELS' 'VRSNR' 'VLIBB' 'KLIMK' 'CTLPC' 'DBRTG' 'AKONT' 'VKGRP'
'ERDAT' 'KDGRP' 'ZTERM' 'BUSAB' 'CCBUSAB' 'KNKLI' 'VKGRP_STRING'
INTO lf_string SEPARATED BY '|'.
APPEND lf_string TO lt_string.
LOOP AT at_kna1_final INTO ls_kna1.
CLEAR: lf_string,
lf_vlibb,
lf_klimk.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = ls_kna1-kunnr
IMPORTING
output = ls_kna1-kunnr.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = ls_kna1-akont
IMPORTING
output = ls_kna1-akont.
REPLACE ALL OCCURRENCES OF REGEX '[;:",|#]' IN ls_kna1-stras WITH '_'.
REPLACE ALL OCCURRENCES OF REGEX '[;:",|#]' IN ls_kna1-name1 WITH '_'.
REPLACE ALL OCCURRENCES OF REGEX '[;:",|#]' IN ls_kna1-name2 WITH '_'.
REPLACE ALL OCCURRENCES OF REGEX '[;:",|#]' IN ls_kna1-name3 WITH '_'.
REPLACE ALL OCCURRENCES OF REGEX '[;:",|#]' IN ls_kna1-name4 WITH '_'.
REPLACE ALL OCCURRENCES OF REGEX '[;:",|#]' IN ls_kna1-telf1 WITH '_'.
REPLACE ALL OCCURRENCES OF REGEX '[;:",|#]' IN ls_kna1-telf2 WITH '_'.
REPLACE ALL OCCURRENCES OF REGEX '[;:",|#]' IN ls_kna1-intad WITH ''.
WRITE ls_kna1-vlibb TO lf_vlibb.
WRITE ls_kna1-klimk TO lf_klimk.
CONCATENATE ls_kna1-bukrs ls_kna1-kunnr ls_kna1-anred ls_kna1-pstlz ls_kna1-ort01 ls_kna1-land1 ls_kna1-intad ls_kna1-stras
ls_kna1-name1 ls_kna1-name2 ls_kna1-name3 ls_kna1-name4 ls_kna1-telf1 ls_kna1-telf2 ls_kna1-stceg
ls_kna1-zwels ls_kna1-vrsnr lf_vlibb lf_klimk ls_kna1-ctlpc ls_kna1-dbrtg ls_kna1-akont
ls_kna1-vkgrp ls_kna1-erdat ls_kna1-kdgrp ls_kna1-zterm ls_kna1-busab ls_kna1-ccbusab ls_kna1-knkli
ls_kna1-vkgrp_string "v2"
INTO lf_string SEPARATED BY '|'.
APPEND lf_string TO lt_string.
ENDLOOP.
lf_dataset_kna1 = af_dataset_kna1.
REPLACE FIRST OCCURRENCE OF 'CC' IN lf_dataset_kna1 WITH af_zone.
OPEN DATASET lf_dataset_kna1 FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
IF sy-subrc = 0.
LOOP AT lt_string INTO lf_string.
TRANSFER lf_string TO lf_dataset_kna1.
ENDLOOP.
CLOSE DATASET lf_dataset_kna1.
ef_msg = 'Datei & erfolgreich erzeugt'(001).
REPLACE '&' IN ef_msg WITH lf_dataset_kna1.
ELSE.
ef_msg = 'Fehler beim Schreiben der Datei &'(002).
REPLACE '&' IN ef_msg WITH lf_dataset_kna1.
ENDIF.
ENDMETHOD.METHOD READ_CSV
Liest CSV-Dateien aus dem Anwendungsverzeichnis und parst diese für verschiedene Kundendaten-Update-Szenarien: Bonitätsinformation, Kreditlimit, Sicherheiten, Journaleinträge und Kundenstamm-Mahnungen.
METHOD read_csv.
DATA: lt_split TYPE TABLE OF string,
lf_bukrs TYPE bukrs,
ls_credit_info TYPE ty_s_credit_info,
ls_credit_limit TYPE ty_s_credit_limit,
ls_securities TYPE ty_s_securities,
ls_journal TYPE ty_s_journal,
ls_customer TYPE ty_s_customer,
lt_string TYPE TABLE OF string,
lf_file TYPE string.
DATA: lf_string TYPE string,
lf_type TYPE string.
LOOP AT at_dir_list INTO DATA(ls_dir).
CLEAR lt_string.
CONCATENATE ap_dir ls_dir-name INTO lf_file.
IF ls_dir-name CS 'bilendo_credit_informations'.
lf_type = 'CREDIT_INFO'.
ELSEIF ls_dir-name CS 'bilendo_customers'.
lf_type = 'CUSTOMER'.
ELSEIF ls_dir-name CS 'bilendo_journal_entries'.
lf_type = 'JOURNAL'.
ELSEIF ls_dir-name CS 'bilendo_securities'.
lf_type = 'SECURITIES'.
ELSEIF ls_dir-name CS 'bilendo_credit_limit'.
lf_type = 'CREDIT_LIMIT'.
ENDIF.
OPEN DATASET lf_file FOR INPUT IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc = 0.
DO.
READ DATASET lf_file INTO lf_string.
IF lf_string CS 'Company' OR lf_string CS 'Buchungskreis'.
CONTINUE.
ELSE.
IF lf_string IS INITIAL.
EXIT.
ENDIF.
APPEND lf_string TO lt_string.
ENDIF.
ENDDO.
CLOSE DATASET lf_file.
ENDIF.
CASE lf_type.
WHEN 'CREDIT_INFO'.
LOOP AT lt_string INTO lf_string.
SPLIT lf_string AT ';' INTO TABLE lt_split.
READ TABLE lt_split INTO DATA(ls_split) INDEX 1.
ls_credit_info-kunnr = ls_split.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = ls_credit_info-kunnr
IMPORTING
output = ls_credit_info-kunnr.
READ TABLE lt_split INTO ls_split INDEX 2.
ls_credit_info-bukrs = ls_split.
READ TABLE lt_split INTO ls_split INDEX 3.
ls_credit_info-dbrtg = ls_split.
READ TABLE lt_split INTO ls_split INDEX 4.
REPLACE ALL OCCURRENCES OF '-' IN ls_split WITH space.
CONDENSE ls_split.
ls_credit_info-date = ls_split.
LOOP AT at_credit_info ASSIGNING FIELD-SYMBOL(<ls_credit_info>)
WHERE bukrs = ls_credit_info-bukrs
AND kunnr = ls_credit_info-kunnr
AND date >= ls_credit_info-date.
IF sy-subrc = 0.
CLEAR ls_credit_info-kunnr.
EXIT.
ENDIF.
ENDLOOP.
IF ls_credit_info-kunnr IS NOT INITIAL.
APPEND ls_credit_info TO at_credit_info.
ENDIF.
ENDLOOP.
SORT at_credit_info BY bukrs kunnr date DESCENDING.
DELETE ADJACENT DUPLICATES FROM at_credit_info COMPARING bukrs kunnr.
WHEN 'CREDIT_LIMIT'.
LOOP AT lt_string INTO lf_string.
SPLIT lf_string AT ';' INTO TABLE lt_split.
READ TABLE lt_split INTO ls_split INDEX 1.
ls_credit_limit-kunnr = ls_split.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = ls_credit_limit-kunnr
IMPORTING
output = ls_credit_limit-kunnr.
READ TABLE lt_split INTO ls_split INDEX 2.
ls_credit_limit-klimk = ls_split.
READ TABLE lt_split INTO ls_split INDEX 2.
ls_credit_limit-ctlpc = ls_split.
READ TABLE lt_split INTO ls_split INDEX 3.
ls_credit_limit-bukrs = ls_split.
APPEND ls_credit_limit TO at_credit_limit.
ENDLOOP.
WHEN 'SECURITIES'.
LOOP AT lt_string INTO lf_string.
SPLIT lf_string AT ';' INTO TABLE lt_split.
READ TABLE lt_split INTO ls_split INDEX 1.
ls_securities-kunnr = ls_split.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = ls_securities-kunnr
IMPORTING
output = ls_securities-kunnr.
READ TABLE lt_split INTO ls_split INDEX 2.
ls_securities-bukrs = ls_split.
CLEAR : ls_split.
READ TABLE lt_split INTO ls_split INDEX 3.
IF ls_split IS NOT INITIAL OR ls_split NE space.
ls_securities-vlibb = ls_split.
ENDIF.
APPEND ls_securities TO at_securities.
ENDLOOP.
WHEN 'JOURNAL'.
LOOP AT lt_string INTO lf_string.
SPLIT lf_string AT ';' INTO TABLE lt_split.
READ TABLE lt_split INTO ls_split INDEX 1.
ls_journal-bukrs = ls_split.
READ TABLE lt_split INTO ls_split INDEX 2.
ls_journal-belnr = ls_split.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = ls_journal-belnr
IMPORTING
output = ls_journal-belnr.
READ TABLE lt_split INTO ls_split INDEX 4.
ls_journal-gjahr = ls_split.
READ TABLE lt_split INTO ls_split INDEX 5.
ls_journal-manst = ls_split.
READ TABLE lt_split INTO ls_split INDEX 6.
IF ls_split = 'Yes' OR ls_split = 'Ja'.
ls_journal-mansp = 'A'.
ELSEIF ls_split = 'No' OR ls_split = 'Nein'.
CLEAR ls_journal-mansp.
ENDIF.
READ TABLE lt_split INTO ls_split INDEX 7.
REPLACE ALL OCCURRENCES OF '-' IN ls_split WITH space.
CONDENSE ls_split .
ls_journal-madat = ls_split.
READ TABLE lt_split INTO ls_split INDEX 8.
ls_journal-buzei = ls_split.
APPEND ls_journal TO at_journal.
ENDLOOP.
WHEN 'CUSTOMER'.
LOOP AT lt_string INTO lf_string.
SPLIT lf_string AT ';' INTO TABLE lt_split.
READ TABLE lt_split INTO ls_split INDEX 1.
ls_customer-kunnr = ls_split.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = ls_customer-kunnr
IMPORTING
output = ls_customer-kunnr.
READ TABLE lt_split INTO ls_split INDEX 2.
ls_customer-bukrs = ls_split.
READ TABLE lt_split INTO ls_split INDEX 3.
IF ls_split = 'Yes' OR ls_split = 'true'.
ls_customer-mansp = 'A'.
ELSEIF ls_split = 'No' OR ls_split = 'false'.
CLEAR ls_customer-mansp.
ENDIF.
READ TABLE lt_split INTO ls_split INDEX 4.
REPLACE ALL OCCURRENCES OF '-' IN ls_split WITH space.
CONDENSE ls_split.
ls_customer-madat = ls_split.
READ TABLE lt_split INTO ls_split INDEX 5.
ls_customer-mahns = ls_split.
APPEND ls_customer TO at_customer.
ENDLOOP.
WHEN OTHERS.
ENDCASE.
ENDLOOP.
ENDMETHOD.METHOD SEND_EMAIL
Versendet E-Mail-Benachrichtigungen bei Fehlern über den SAP-Versand-Framework. Die Empfänger werden aus der benutzerdefinierten Tabelle ZFI_BILENDO_MAIL gelesen.
method SEND_EMAIL.
TYPES : BEGIN OF ty_recipient,
seq_num TYPE char2,
smtp_addr TYPE ad_smtpadr,
END OF ty_recipient.
data send_request type ref to cl_bcs.
data document type ref to cl_document_bcs.
data recipient type ref to if_recipient_bcs.
data bcs_exception type ref to cx_bcs.
data main_text type bcsy_text.
data binary_content type solix_tab.
data size type so_obj_len.
data sent_to_all type os_boolean.
data mailto TYPE ad_smtpadr.
data : it_recipient TYPE STANDARD TABLE OF ty_recipient,
wa_rec TYPE ty_recipient.
try.
send_request = cl_bcs=>create_persistent( ).
append i_message to main_text.
document = cl_document_bcs=>create_document(
i_type = 'RAW'
i_text = main_text
i_subject = 'Bilendo Import Error' ).
send_request->set_document( document ).
SELECT * FROM ZFI_BILENDO_MAIL INTO CORRESPONDING FIELDS OF TABLE it_recipient .
loop at it_recipient INTO wa_rec.
translate wa_rec-smtp_addr to lower case.
recipient = cl_cam_address_bcs=>create_internet_address( wa_rec-smtp_addr ).
call method send_request->add_recipient
exporting
i_recipient = recipient
i_express = ' '
i_copy = ' '
i_blind_copy = ' '
i_no_forward = ' '.
endloop.
sent_to_all = send_request->send( i_with_error_screen = 'X' ).
commit work.
if sent_to_all is initial.
message i500(sbcoms) with mailto.
else.
message s022(so).
endif.
catch cx_bcs into bcs_exception.
message i865(so) with bcs_exception->error_type.
endtry.
endmethod.METHOD SET_BUKRS
Setzt den Buchungskreis für die Datenverarbeitung und liest den zugehörigen Kreditkontrollbereich aus T001.
METHOD SET_BUKRS.
af_bukrs = if_bukrs.
SELECT SINGLE kkber FROM t001 INTO af_kkber WHERE bukrs = af_bukrs.
ENDMETHOD.