REPORT zsdis_sorder_rc_update.
TABLES:s910,cdhdr.
TYPE-POOLS:slis.
*Types Decalration
TYPES:BEGIN OF ty_doc,
item TYPE posnr, "item no
no TYPE vbeln, "document no
END OF ty_doc,
*Document type structure
BEGIN OF ty_doc_auart,
vbeln TYPE vbeln,
auart TYPE vbak-auart,
erdat TYPE vbak-erdat,
audat TYPE vbak-audat,
vkorg TYPE vbak-vkorg,
vtweg TYPE vbak-vtweg,
END OF ty_doc_auart,
*Item category structure
BEGIN OF ty_doc_pstyv,
vbeln TYPE vbeln,
posnr TYPE posnr,
pstyv TYPE vbap-pstyv,
abgru TYPE vbap-abgru,
zzreason2 TYPE vbap-zzreason2,
vrkme TYPE vbap-vrkme,
waerk TYPE vbap-waerk,
gewei TYPE vbap-gewei,
kpein TYPE vbap-kpein,
netwr TYPE vbap-netwr,
ntgew TYPE vbap-ntgew,
zerrorqty TYPE vbap-kpein,
zerrorval TYPE vbap-netpr,
zerrorwt TYPE vbap-ntgew,
END OF ty_doc_pstyv,
*Chnage header
BEGIN OF ty_cdhdr,
objectclas TYPE cdhdr-objectclas,
objectid TYPE cdhdr-objectid,
changenr TYPE cdhdr-changenr,
udate TYPE cdhdr-udate,
utime TYPE cdhdr-utime,
END OF ty_cdhdr,
*Change details
BEGIN OF ty_cdpos,
objectclas TYPE cdhdr-objectclas,
objectid TYPE cdhdr-objectid,
changenr TYPE cdhdr-changenr,
tabname TYPE cdpos-tabname,
tabkey TYPE cdpos-tabkey,
fname TYPE cdpos-fname,
chngind TYPE cdpos-chngind,
value_new TYPE cdpos-value_new,
value_old TYPE cdpos-value_old,
END OF ty_cdpos,
*display structure
BEGIN OF ty_data,
vbeln TYPE vbeln,
posnr TYPE posnr,
abgru TYPE vbap-abgru,
zzreason2 TYPE vbap-zzreason2,
text(30),
END OF ty_data,
*log of last program run date and time
BEGIN OF ty_log,
zzdate TYPE zsd_log_time-zzdate,
zztime TYPE zsd_log_time-zztime,
END OF ty_log,
BEGIN OF ty_values,
zzprogname TYPE zsd_log_time-zzprogname,
zzdate TYPE zsd_log_time-zzdate,
zztime TYPE zsd_log_time-zztime,
END OF ty_values,
BEGIN OF ty_date,
vbeln TYPE vbeln,
date TYPE sy-datum,
time TYPE sy-uzeit,
END OF ty_date.
DATA:lw_repid TYPE sy-repid.
DATA:slis_ev_top_of_page TYPE slis_formname VALUE 'TOP_OF_PAGE'.
CONSTANTS:c_formname_top_of_page TYPE slis_formname
VALUE 'TOP_OF_PAGE'.
DATA:t_cdhdr TYPE STANDARD TABLE OF ty_cdhdr,
t_cdpos TYPE STANDARD TABLE OF ty_cdpos,
t_date TYPE STANDARD TABLE OF ty_date,
t_doc_auart TYPE STANDARD TABLE OF ty_doc_auart,
t_doc_pstyv TYPE STANDARD TABLE OF ty_doc_pstyv,
t_log TYPE STANDARD TABLE OF ty_log,
t_data TYPE STANDARD TABLE OF ty_data,
wa_date TYPE ty_date,
wa_log TYPE ty_log,
wa_s910 TYPE s910,
wa_cdhdr TYPE ty_cdhdr,
wa_cdpos TYPE ty_cdpos,
wa_doc_auart TYPE ty_doc_auart,
wa_doc_pstyv TYPE ty_doc_pstyv,
t_zbc_const TYPE STANDARD TABLE OF zbc_const,
t_doc TYPE STANDARD TABLE OF ty_doc,
wa_doc TYPE ty_doc,
wa_values TYPE ty_values,
wa_data TYPE ty_data,
wa_zbc_const TYPE zbc_const.
DATA:wa_fldcat TYPE slis_fieldcat_alv,
wa_layout TYPE slis_layout_alv.
DATA:t_events TYPE slis_t_event, " ALV events
t_fcat TYPE slis_t_fieldcat_alv.
RANGES:r_auart FOR vbak-auart,
r_date FOR sy-datum,
r_time FOR sy-uzeit,
r_category FOR vbap-pstyv.
DATA:w_date TYPE sy-datum,
w_tabix TYPE sy-tabix,
w_time TYPE sy-uzeit.
DATA:w_new(3) TYPE c,
w_old(3) TYPE c.
SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE text-s01.
*Initial run radiobutton
PARAMETERS:p_inlrun RADIOBUTTON GROUP g1 DEFAULT 'X',
*Latest Updates radiobutton
p_update RADIOBUTTON GROUP g1.
SELECTION-SCREEN: END OF BLOCK b1.
SELECTION-SCREEN: BEGIN OF BLOCK b2 WITH FRAME TITLE text-s02.
SELECT-OPTIONS:s_date FOR cdhdr-udate DEFAULT sy-datum, "date
s_time FOR cdhdr-utime. "time
SELECTION-SCREEN: END OF BLOCK b2.
START-OF-SELECTION.
SELECT zzdate zztime
FROM zsd_log_time
INTO TABLE t_log
WHERE zzprogname = sy-repid.
SORT t_log[] BY zzdate DESCENDING
zztime DESCENDING.
READ TABLE t_log INTO wa_log INDEX 1.
r_date-sign = 'I'.
r_date-option = 'BT'.
r_date-low = wa_log-zzdate.
r_date-high = sy-datum.
APPEND r_date.
r_time-sign = 'I'.
r_time-option = 'BT'.
r_time-low = wa_log-zztime.
r_time-high = sy-uzeit.
APPEND r_date.
IF p_inlrun = 'X'.
SELECT objectclas objectid changenr
udate utime
FROM cdhdr
INTO TABLE t_cdhdr
WHERE objectclas = 'VERKBELEG'
AND udate IN s_date
AND utime IN s_time
AND change_ind = 'U'.
ELSE.
SELECT objectclas objectid changenr
udate utime
FROM cdhdr
INTO TABLE t_cdhdr
WHERE objectclas = 'VERKBELEG'
AND udate IN r_date
AND utime IN r_time
AND change_ind = 'U'.
ENDIF.
SORT t_cdhdr[] BY objectid changenr.
IF t_cdhdr[] IS NOT INITIAL.
SELECT objectclas
objectid
changenr
tabname
tabkey
fname
chngind
value_new
value_old
FROM cdpos
INTO TABLE t_cdpos
FOR ALL ENTRIES IN t_cdhdr
WHERE objectid = t_cdhdr-objectid
AND changenr = t_cdhdr-changenr
AND objectclas = 'VERKBELEG'
AND tabname = 'VBAP'
AND fname IN ('ABGRU','ZZREASON2')
AND chngind = 'U'.
ENDIF.
LOOP AT t_cdpos INTO wa_cdpos.
IF wa_cdpos-value_new = '0' OR wa_cdpos-value_new = '00'.
CLEAR wa_cdpos-value_new.
ENDIF.
IF wa_cdpos-value_old = '0' OR wa_cdpos-value_old = '00'.
CLEAR wa_cdpos-value_old.
ENDIF.
IF wa_cdpos-value_new = wa_cdpos-value_old.
DELETE t_cdpos INDEX sy-tabix.
ENDIF.
wa_doc-no = wa_cdpos-tabkey+3(10).
wa_doc-item = wa_cdpos-tabkey+13(6).
APPEND wa_doc TO t_doc.
READ TABLE t_cdhdr INTO wa_cdhdr
WITH KEY objectid = wa_cdpos-objectid
changenr = wa_cdpos-changenr
BINARY SEARCH.
IF sy-subrc = 0.
wa_date-vbeln = wa_doc-no.
wa_date-date = wa_cdhdr-udate.
wa_date-time = wa_cdhdr-utime.
APPEND wa_date TO t_date.
ENDIF.
CLEAR:wa_cdpos,wa_cdhdr.
ENDLOOP.
SELECT * FROM zbc_const
INTO TABLE t_zbc_const
WHERE progname = 'ZSDIS_SORDER_RC_UPDATE'.
LOOP AT t_zbc_const INTO wa_zbc_const.
IF wa_zbc_const-fieldname = 'R_AUART'.
r_auart-sign = wa_zbc_const-sign.
r_auart-option = wa_zbc_const-opti.
r_auart-low = wa_zbc_const-low.
r_auart-high = wa_zbc_const-high.
APPEND r_auart.
ENDIF.
IF wa_zbc_const-fieldname = 'R_CATEGORY'.
r_category-sign = wa_zbc_const-sign.
r_category-option = wa_zbc_const-opti.
r_category-low = wa_zbc_const-low.
r_category-high = wa_zbc_const-high.
APPEND r_category.
ENDIF.
CLEAR wa_zbc_const.
ENDLOOP.
SORT t_doc[] BY no item.
DELETE ADJACENT DUPLICATES FROM t_doc
COMPARING ALL FIELDS.
IF t_doc[] IS NOT INITIAL.
SELECT vbeln
auart
erdat
audat
vkorg
vtweg
FROM vbak
INTO TABLE t_doc_auart
FOR ALL ENTRIES IN t_doc
WHERE vbeln = t_doc-no.
SELECT vbeln posnr pstyv
abgru zzreason2
vrkme waerk gewei
kpein netwr ntgew
FROM vbap
INTO TABLE t_doc_pstyv
FOR ALL ENTRIES IN t_doc
WHERE vbeln = t_doc-no
AND posnr = t_doc-item.
ENDIF.
LOOP AT t_doc_auart INTO wa_doc_auart.
IF wa_doc_auart-auart IN r_auart.
CONTINUE.
ELSE.
w_tabix = sy-tabix.
READ TABLE t_doc INTO wa_doc WITH
KEY no = wa_doc_auart-vbeln
BINARY SEARCH.
IF sy-subrc = 0.
DELETE t_doc INDEX sy-tabix.
DELETE t_doc_auart INDEX w_tabix.
ENDIF.
ENDIF.
CLEAR wa_doc_auart.
ENDLOOP.
LOOP AT t_doc_pstyv INTO wa_doc_pstyv.
IF wa_doc_pstyv-pstyv IN r_category.
CONTINUE.
ELSE.
w_tabix = sy-tabix.
READ TABLE t_doc INTO wa_doc WITH
KEY no = wa_doc_pstyv-vbeln
item = wa_doc_pstyv-posnr
BINARY SEARCH.
IF sy-subrc = 0.
DELETE t_doc INDEX sy-tabix.
DELETE t_doc_pstyv INDEX w_tabix.
ENDIF.
ENDIF.
CLEAR wa_doc_pstyv.
ENDLOOP.
SORT t_date BY vbeln.
LOOP AT t_doc INTO wa_doc.
READ TABLE t_doc_pstyv INTO wa_doc_pstyv
WITH KEY vbeln = wa_doc-no
posnr = wa_doc-item
BINARY SEARCH.
IF sy-subrc = 0.
READ TABLE t_doc_auart INTO wa_doc_auart
WITH KEY vbeln = wa_doc-no
BINARY SEARCH.
IF sy-subrc = 0.
READ TABLE t_date INTO wa_date
WITH KEY vbeln = wa_doc-no
BINARY SEARCH.
IF sy-subrc = 0.
UPDATE s910 SET zzreason1 = wa_doc_pstyv-abgru
zzreason2 = wa_doc_pstyv-zzreason2
aedat = wa_date-date
erzet = wa_date-time
WHERE vbeln = wa_doc_pstyv-vbeln
AND posnr = wa_doc_pstyv-posnr
AND vrsio = '000'
AND sptag = wa_doc_auart-erdat
AND auart = wa_doc_auart-auart
AND erdat = wa_doc_auart-erdat
AND vkorg = wa_doc_auart-vkorg
AND vtweg = wa_doc_auart-vtweg
AND ssour = ''.
IF sy-subrc = 0.
MOVE-CORRESPONDING wa_doc_pstyv TO wa_data.
wa_data-text = 'Updation'.
APPEND wa_data TO t_data.
ELSE.
wa_s910-ssour = ''.
wa_s910-vrsio = '000'.
wa_s910-sptag = wa_doc_auart-erdat.
wa_s910-vbeln = wa_doc_pstyv-vbeln.
wa_s910-posnr = wa_doc_pstyv-posnr.
wa_s910-auart = wa_doc_auart-auart.
wa_s910-erdat = wa_doc_auart-audat.
wa_s910-vkorg = wa_doc_auart-vkorg.
wa_s910-vtweg = wa_doc_auart-vtweg.
wa_s910-zzreason1 = wa_doc_pstyv-abgru.
wa_s910-zzreason2 = wa_doc_pstyv-zzreason2.
wa_s910-vrkme = wa_doc_pstyv-vrkme.
wa_s910-waerk = wa_doc_pstyv-waerk.
wa_s910-gewei = wa_doc_pstyv-gewei.
wa_s910-zerrorqty = wa_doc_pstyv-kpein.
wa_s910-zerrorval = wa_doc_pstyv-netwr.
wa_s910-zerrorwt = wa_doc_pstyv-ntgew.
wa_s910-aedat = sy-datum.
wa_s910-erzet = sy-uzeit.
INSERT s910 FROM wa_s910.
IF sy-subrc = 0.
MOVE-CORRESPONDING wa_s910 TO wa_data.
wa_data-abgru = wa_s910-zzreason1.
wa_data-text = 'Insertion'.
APPEND wa_data TO t_data.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
CLEAR:wa_data,wa_s910,wa_doc_pstyv,wa_doc_auart.
ENDLOOP.
END-OF-SELECTION.
DELETE FROM zsd_log_time
WHERE zzprogname = sy-repid.
wa_values-zzprogname = sy-repid.
wa_values-zzdate = sy-datum.
wa_values-zztime = sy-uzeit.
INSERT zsd_log_time FROM wa_values.
*assigning the program name
lw_repid = sy-repid.
PERFORM fill_field_catalog.
PERFORM eventtab_build
USING t_events[].
*optimizing the column width
wa_layout-colwidth_optimize = 'X'. "'X'.
DELETE ADJACENT DUPLICATES FROM t_data
COMPARING ALL FIELDS.
*dispalying the ALV in output as list
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = lw_repid
is_layout = wa_layout
it_fieldcat = t_fcat
it_events = t_events
TABLES
t_outtab = t_data
EXCEPTIONS
program_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.
*&---------------------------------------------------------------------*
*& Form FILL_FIELD_CATALOG
*&---------------------------------------------------------------------*
FORM fill_field_catalog .
CLEAR wa_fldcat .
*Sales Order no.
CLEAR wa_fldcat .
wa_fldcat-col_pos = 2.
wa_fldcat-tabname = 'T_DATA'.
wa_fldcat-fieldname = 'VBELN'.
wa_fldcat-seltext_m = 'Sales Order no.'(005) .
wa_fldcat-outputlen = '40'.
APPEND wa_fldcat TO t_fcat .
*Sales item no
CLEAR wa_fldcat .
wa_fldcat-col_pos = 3.
wa_fldcat-tabname = 'T_DATA'.
wa_fldcat-fieldname = 'POSNR'.
wa_fldcat-seltext_m = 'Sales Item no.'(006) .
wa_fldcat-outputlen = '45'.
APPEND wa_fldcat TO t_fcat .
*Reason code 1
CLEAR wa_fldcat .
wa_fldcat-col_pos = 3.
wa_fldcat-tabname = 'T_DATA'.
wa_fldcat-fieldname = 'ABGRU'.
wa_fldcat-seltext_m = 'Reason code 1'(007).
wa_fldcat-outputlen = '12'.
APPEND wa_fldcat TO t_fcat .
*Reason code 2
CLEAR wa_fldcat .
wa_fldcat-col_pos = 4.
wa_fldcat-tabname = 'T_DATA'.
wa_fldcat-fieldname = 'ZZREASON2'.
wa_fldcat-seltext_m = 'Reason code 2'(008).
wa_fldcat-outputlen = '45'.
APPEND wa_fldcat TO t_fcat .
*description of message
CLEAR wa_fldcat .
wa_fldcat-col_pos = 4.
wa_fldcat-tabname = 'T_DATA'.
wa_fldcat-fieldname = 'TEXT'.
wa_fldcat-seltext_m = 'Update/Insert'(009).
wa_fldcat-outputlen = '80'.
APPEND wa_fldcat TO t_fcat .
ENDFORM. " FILL_FIELD_CATALOG
*&---------------------------------------------------------------------*
*& Form EVENTTAB_BUILD
*&---------------------------------------------------------------------*
FORM eventtab_build USING lt_events TYPE slis_t_event.
* Temporary event work area
DATA: l_event TYPE slis_alv_event.
* Get events
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = lt_events.
* Read through event table for TOP_OF_PAGE
READ TABLE lt_events
WITH KEY name = slis_ev_top_of_page
INTO l_event.
* If event was found, set form name TOP_OF_PAGE
IF sy-subrc EQ 0.
l_event-form = c_formname_top_of_page. " TOP_OF_PAGE
APPEND l_event TO lt_events.
ENDIF.
ENDFORM. " EVENTTAB_BUILD
*&------------------------------------------------------------------*
*& Form TOP OF PAGE
*&------------------------------------------------------------------*
FORM top_of_page . "#EC CALLED
DATA : lt_list_header TYPE slis_t_listheader,
lwa_list_header TYPE slis_listheader,
lw_auart(20) TYPE c,
lw_success(60) TYPE c.
*dipslaying the total no of records
lwa_list_header-typ = 'S'.
lwa_list_header-key = 'Username'(013).
lwa_list_header-info = sy-uname.
APPEND lwa_list_header TO lt_list_header.
CLEAR lwa_list_header .
*displaying the date
lwa_list_header-typ = 'S'.
lwa_list_header-key = 'Date'(010).
WRITE sy-datum TO lwa_list_header-info.
APPEND lwa_list_header TO lt_list_header.
CLEAR lwa_list_header .
*displaying the time
lwa_list_header-typ = 'S'.
lwa_list_header-key = 'Time'(011).
WRITE sy-uzeit TO lwa_list_header-info.
APPEND lwa_list_header TO lt_list_header.
CLEAR lwa_list_header .
* Calling FM to display the data in the top of page
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = lt_list_header.
FREE : lt_list_header.
ENDFORM. "top_of_page
TABLES:s910,cdhdr.
TYPE-POOLS:slis.
*Types Decalration
TYPES:BEGIN OF ty_doc,
item TYPE posnr, "item no
no TYPE vbeln, "document no
END OF ty_doc,
*Document type structure
BEGIN OF ty_doc_auart,
vbeln TYPE vbeln,
auart TYPE vbak-auart,
erdat TYPE vbak-erdat,
audat TYPE vbak-audat,
vkorg TYPE vbak-vkorg,
vtweg TYPE vbak-vtweg,
END OF ty_doc_auart,
*Item category structure
BEGIN OF ty_doc_pstyv,
vbeln TYPE vbeln,
posnr TYPE posnr,
pstyv TYPE vbap-pstyv,
abgru TYPE vbap-abgru,
zzreason2 TYPE vbap-zzreason2,
vrkme TYPE vbap-vrkme,
waerk TYPE vbap-waerk,
gewei TYPE vbap-gewei,
kpein TYPE vbap-kpein,
netwr TYPE vbap-netwr,
ntgew TYPE vbap-ntgew,
zerrorqty TYPE vbap-kpein,
zerrorval TYPE vbap-netpr,
zerrorwt TYPE vbap-ntgew,
END OF ty_doc_pstyv,
*Chnage header
BEGIN OF ty_cdhdr,
objectclas TYPE cdhdr-objectclas,
objectid TYPE cdhdr-objectid,
changenr TYPE cdhdr-changenr,
udate TYPE cdhdr-udate,
utime TYPE cdhdr-utime,
END OF ty_cdhdr,
*Change details
BEGIN OF ty_cdpos,
objectclas TYPE cdhdr-objectclas,
objectid TYPE cdhdr-objectid,
changenr TYPE cdhdr-changenr,
tabname TYPE cdpos-tabname,
tabkey TYPE cdpos-tabkey,
fname TYPE cdpos-fname,
chngind TYPE cdpos-chngind,
value_new TYPE cdpos-value_new,
value_old TYPE cdpos-value_old,
END OF ty_cdpos,
*display structure
BEGIN OF ty_data,
vbeln TYPE vbeln,
posnr TYPE posnr,
abgru TYPE vbap-abgru,
zzreason2 TYPE vbap-zzreason2,
text(30),
END OF ty_data,
*log of last program run date and time
BEGIN OF ty_log,
zzdate TYPE zsd_log_time-zzdate,
zztime TYPE zsd_log_time-zztime,
END OF ty_log,
BEGIN OF ty_values,
zzprogname TYPE zsd_log_time-zzprogname,
zzdate TYPE zsd_log_time-zzdate,
zztime TYPE zsd_log_time-zztime,
END OF ty_values,
BEGIN OF ty_date,
vbeln TYPE vbeln,
date TYPE sy-datum,
time TYPE sy-uzeit,
END OF ty_date.
DATA:lw_repid TYPE sy-repid.
DATA:slis_ev_top_of_page TYPE slis_formname VALUE 'TOP_OF_PAGE'.
CONSTANTS:c_formname_top_of_page TYPE slis_formname
VALUE 'TOP_OF_PAGE'.
DATA:t_cdhdr TYPE STANDARD TABLE OF ty_cdhdr,
t_cdpos TYPE STANDARD TABLE OF ty_cdpos,
t_date TYPE STANDARD TABLE OF ty_date,
t_doc_auart TYPE STANDARD TABLE OF ty_doc_auart,
t_doc_pstyv TYPE STANDARD TABLE OF ty_doc_pstyv,
t_log TYPE STANDARD TABLE OF ty_log,
t_data TYPE STANDARD TABLE OF ty_data,
wa_date TYPE ty_date,
wa_log TYPE ty_log,
wa_s910 TYPE s910,
wa_cdhdr TYPE ty_cdhdr,
wa_cdpos TYPE ty_cdpos,
wa_doc_auart TYPE ty_doc_auart,
wa_doc_pstyv TYPE ty_doc_pstyv,
t_zbc_const TYPE STANDARD TABLE OF zbc_const,
t_doc TYPE STANDARD TABLE OF ty_doc,
wa_doc TYPE ty_doc,
wa_values TYPE ty_values,
wa_data TYPE ty_data,
wa_zbc_const TYPE zbc_const.
DATA:wa_fldcat TYPE slis_fieldcat_alv,
wa_layout TYPE slis_layout_alv.
DATA:t_events TYPE slis_t_event, " ALV events
t_fcat TYPE slis_t_fieldcat_alv.
RANGES:r_auart FOR vbak-auart,
r_date FOR sy-datum,
r_time FOR sy-uzeit,
r_category FOR vbap-pstyv.
DATA:w_date TYPE sy-datum,
w_tabix TYPE sy-tabix,
w_time TYPE sy-uzeit.
DATA:w_new(3) TYPE c,
w_old(3) TYPE c.
SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE text-s01.
*Initial run radiobutton
PARAMETERS:p_inlrun RADIOBUTTON GROUP g1 DEFAULT 'X',
*Latest Updates radiobutton
p_update RADIOBUTTON GROUP g1.
SELECTION-SCREEN: END OF BLOCK b1.
SELECTION-SCREEN: BEGIN OF BLOCK b2 WITH FRAME TITLE text-s02.
SELECT-OPTIONS:s_date FOR cdhdr-udate DEFAULT sy-datum, "date
s_time FOR cdhdr-utime. "time
SELECTION-SCREEN: END OF BLOCK b2.
START-OF-SELECTION.
SELECT zzdate zztime
FROM zsd_log_time
INTO TABLE t_log
WHERE zzprogname = sy-repid.
SORT t_log[] BY zzdate DESCENDING
zztime DESCENDING.
READ TABLE t_log INTO wa_log INDEX 1.
r_date-sign = 'I'.
r_date-option = 'BT'.
r_date-low = wa_log-zzdate.
r_date-high = sy-datum.
APPEND r_date.
r_time-sign = 'I'.
r_time-option = 'BT'.
r_time-low = wa_log-zztime.
r_time-high = sy-uzeit.
APPEND r_date.
IF p_inlrun = 'X'.
SELECT objectclas objectid changenr
udate utime
FROM cdhdr
INTO TABLE t_cdhdr
WHERE objectclas = 'VERKBELEG'
AND udate IN s_date
AND utime IN s_time
AND change_ind = 'U'.
ELSE.
SELECT objectclas objectid changenr
udate utime
FROM cdhdr
INTO TABLE t_cdhdr
WHERE objectclas = 'VERKBELEG'
AND udate IN r_date
AND utime IN r_time
AND change_ind = 'U'.
ENDIF.
SORT t_cdhdr[] BY objectid changenr.
IF t_cdhdr[] IS NOT INITIAL.
SELECT objectclas
objectid
changenr
tabname
tabkey
fname
chngind
value_new
value_old
FROM cdpos
INTO TABLE t_cdpos
FOR ALL ENTRIES IN t_cdhdr
WHERE objectid = t_cdhdr-objectid
AND changenr = t_cdhdr-changenr
AND objectclas = 'VERKBELEG'
AND tabname = 'VBAP'
AND fname IN ('ABGRU','ZZREASON2')
AND chngind = 'U'.
ENDIF.
LOOP AT t_cdpos INTO wa_cdpos.
IF wa_cdpos-value_new = '0' OR wa_cdpos-value_new = '00'.
CLEAR wa_cdpos-value_new.
ENDIF.
IF wa_cdpos-value_old = '0' OR wa_cdpos-value_old = '00'.
CLEAR wa_cdpos-value_old.
ENDIF.
IF wa_cdpos-value_new = wa_cdpos-value_old.
DELETE t_cdpos INDEX sy-tabix.
ENDIF.
wa_doc-no = wa_cdpos-tabkey+3(10).
wa_doc-item = wa_cdpos-tabkey+13(6).
APPEND wa_doc TO t_doc.
READ TABLE t_cdhdr INTO wa_cdhdr
WITH KEY objectid = wa_cdpos-objectid
changenr = wa_cdpos-changenr
BINARY SEARCH.
IF sy-subrc = 0.
wa_date-vbeln = wa_doc-no.
wa_date-date = wa_cdhdr-udate.
wa_date-time = wa_cdhdr-utime.
APPEND wa_date TO t_date.
ENDIF.
CLEAR:wa_cdpos,wa_cdhdr.
ENDLOOP.
SELECT * FROM zbc_const
INTO TABLE t_zbc_const
WHERE progname = 'ZSDIS_SORDER_RC_UPDATE'.
LOOP AT t_zbc_const INTO wa_zbc_const.
IF wa_zbc_const-fieldname = 'R_AUART'.
r_auart-sign = wa_zbc_const-sign.
r_auart-option = wa_zbc_const-opti.
r_auart-low = wa_zbc_const-low.
r_auart-high = wa_zbc_const-high.
APPEND r_auart.
ENDIF.
IF wa_zbc_const-fieldname = 'R_CATEGORY'.
r_category-sign = wa_zbc_const-sign.
r_category-option = wa_zbc_const-opti.
r_category-low = wa_zbc_const-low.
r_category-high = wa_zbc_const-high.
APPEND r_category.
ENDIF.
CLEAR wa_zbc_const.
ENDLOOP.
SORT t_doc[] BY no item.
DELETE ADJACENT DUPLICATES FROM t_doc
COMPARING ALL FIELDS.
IF t_doc[] IS NOT INITIAL.
SELECT vbeln
auart
erdat
audat
vkorg
vtweg
FROM vbak
INTO TABLE t_doc_auart
FOR ALL ENTRIES IN t_doc
WHERE vbeln = t_doc-no.
SELECT vbeln posnr pstyv
abgru zzreason2
vrkme waerk gewei
kpein netwr ntgew
FROM vbap
INTO TABLE t_doc_pstyv
FOR ALL ENTRIES IN t_doc
WHERE vbeln = t_doc-no
AND posnr = t_doc-item.
ENDIF.
LOOP AT t_doc_auart INTO wa_doc_auart.
IF wa_doc_auart-auart IN r_auart.
CONTINUE.
ELSE.
w_tabix = sy-tabix.
READ TABLE t_doc INTO wa_doc WITH
KEY no = wa_doc_auart-vbeln
BINARY SEARCH.
IF sy-subrc = 0.
DELETE t_doc INDEX sy-tabix.
DELETE t_doc_auart INDEX w_tabix.
ENDIF.
ENDIF.
CLEAR wa_doc_auart.
ENDLOOP.
LOOP AT t_doc_pstyv INTO wa_doc_pstyv.
IF wa_doc_pstyv-pstyv IN r_category.
CONTINUE.
ELSE.
w_tabix = sy-tabix.
READ TABLE t_doc INTO wa_doc WITH
KEY no = wa_doc_pstyv-vbeln
item = wa_doc_pstyv-posnr
BINARY SEARCH.
IF sy-subrc = 0.
DELETE t_doc INDEX sy-tabix.
DELETE t_doc_pstyv INDEX w_tabix.
ENDIF.
ENDIF.
CLEAR wa_doc_pstyv.
ENDLOOP.
SORT t_date BY vbeln.
LOOP AT t_doc INTO wa_doc.
READ TABLE t_doc_pstyv INTO wa_doc_pstyv
WITH KEY vbeln = wa_doc-no
posnr = wa_doc-item
BINARY SEARCH.
IF sy-subrc = 0.
READ TABLE t_doc_auart INTO wa_doc_auart
WITH KEY vbeln = wa_doc-no
BINARY SEARCH.
IF sy-subrc = 0.
READ TABLE t_date INTO wa_date
WITH KEY vbeln = wa_doc-no
BINARY SEARCH.
IF sy-subrc = 0.
UPDATE s910 SET zzreason1 = wa_doc_pstyv-abgru
zzreason2 = wa_doc_pstyv-zzreason2
aedat = wa_date-date
erzet = wa_date-time
WHERE vbeln = wa_doc_pstyv-vbeln
AND posnr = wa_doc_pstyv-posnr
AND vrsio = '000'
AND sptag = wa_doc_auart-erdat
AND auart = wa_doc_auart-auart
AND erdat = wa_doc_auart-erdat
AND vkorg = wa_doc_auart-vkorg
AND vtweg = wa_doc_auart-vtweg
AND ssour = ''.
IF sy-subrc = 0.
MOVE-CORRESPONDING wa_doc_pstyv TO wa_data.
wa_data-text = 'Updation'.
APPEND wa_data TO t_data.
ELSE.
wa_s910-ssour = ''.
wa_s910-vrsio = '000'.
wa_s910-sptag = wa_doc_auart-erdat.
wa_s910-vbeln = wa_doc_pstyv-vbeln.
wa_s910-posnr = wa_doc_pstyv-posnr.
wa_s910-auart = wa_doc_auart-auart.
wa_s910-erdat = wa_doc_auart-audat.
wa_s910-vkorg = wa_doc_auart-vkorg.
wa_s910-vtweg = wa_doc_auart-vtweg.
wa_s910-zzreason1 = wa_doc_pstyv-abgru.
wa_s910-zzreason2 = wa_doc_pstyv-zzreason2.
wa_s910-vrkme = wa_doc_pstyv-vrkme.
wa_s910-waerk = wa_doc_pstyv-waerk.
wa_s910-gewei = wa_doc_pstyv-gewei.
wa_s910-zerrorqty = wa_doc_pstyv-kpein.
wa_s910-zerrorval = wa_doc_pstyv-netwr.
wa_s910-zerrorwt = wa_doc_pstyv-ntgew.
wa_s910-aedat = sy-datum.
wa_s910-erzet = sy-uzeit.
INSERT s910 FROM wa_s910.
IF sy-subrc = 0.
MOVE-CORRESPONDING wa_s910 TO wa_data.
wa_data-abgru = wa_s910-zzreason1.
wa_data-text = 'Insertion'.
APPEND wa_data TO t_data.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
CLEAR:wa_data,wa_s910,wa_doc_pstyv,wa_doc_auart.
ENDLOOP.
END-OF-SELECTION.
DELETE FROM zsd_log_time
WHERE zzprogname = sy-repid.
wa_values-zzprogname = sy-repid.
wa_values-zzdate = sy-datum.
wa_values-zztime = sy-uzeit.
INSERT zsd_log_time FROM wa_values.
*assigning the program name
lw_repid = sy-repid.
PERFORM fill_field_catalog.
PERFORM eventtab_build
USING t_events[].
*optimizing the column width
wa_layout-colwidth_optimize = 'X'. "'X'.
DELETE ADJACENT DUPLICATES FROM t_data
COMPARING ALL FIELDS.
*dispalying the ALV in output as list
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = lw_repid
is_layout = wa_layout
it_fieldcat = t_fcat
it_events = t_events
TABLES
t_outtab = t_data
EXCEPTIONS
program_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.
*&---------------------------------------------------------------------*
*& Form FILL_FIELD_CATALOG
*&---------------------------------------------------------------------*
FORM fill_field_catalog .
CLEAR wa_fldcat .
*Sales Order no.
CLEAR wa_fldcat .
wa_fldcat-col_pos = 2.
wa_fldcat-tabname = 'T_DATA'.
wa_fldcat-fieldname = 'VBELN'.
wa_fldcat-seltext_m = 'Sales Order no.'(005) .
wa_fldcat-outputlen = '40'.
APPEND wa_fldcat TO t_fcat .
*Sales item no
CLEAR wa_fldcat .
wa_fldcat-col_pos = 3.
wa_fldcat-tabname = 'T_DATA'.
wa_fldcat-fieldname = 'POSNR'.
wa_fldcat-seltext_m = 'Sales Item no.'(006) .
wa_fldcat-outputlen = '45'.
APPEND wa_fldcat TO t_fcat .
*Reason code 1
CLEAR wa_fldcat .
wa_fldcat-col_pos = 3.
wa_fldcat-tabname = 'T_DATA'.
wa_fldcat-fieldname = 'ABGRU'.
wa_fldcat-seltext_m = 'Reason code 1'(007).
wa_fldcat-outputlen = '12'.
APPEND wa_fldcat TO t_fcat .
*Reason code 2
CLEAR wa_fldcat .
wa_fldcat-col_pos = 4.
wa_fldcat-tabname = 'T_DATA'.
wa_fldcat-fieldname = 'ZZREASON2'.
wa_fldcat-seltext_m = 'Reason code 2'(008).
wa_fldcat-outputlen = '45'.
APPEND wa_fldcat TO t_fcat .
*description of message
CLEAR wa_fldcat .
wa_fldcat-col_pos = 4.
wa_fldcat-tabname = 'T_DATA'.
wa_fldcat-fieldname = 'TEXT'.
wa_fldcat-seltext_m = 'Update/Insert'(009).
wa_fldcat-outputlen = '80'.
APPEND wa_fldcat TO t_fcat .
ENDFORM. " FILL_FIELD_CATALOG
*&---------------------------------------------------------------------*
*& Form EVENTTAB_BUILD
*&---------------------------------------------------------------------*
FORM eventtab_build USING lt_events TYPE slis_t_event.
* Temporary event work area
DATA: l_event TYPE slis_alv_event.
* Get events
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = lt_events.
* Read through event table for TOP_OF_PAGE
READ TABLE lt_events
WITH KEY name = slis_ev_top_of_page
INTO l_event.
* If event was found, set form name TOP_OF_PAGE
IF sy-subrc EQ 0.
l_event-form = c_formname_top_of_page. " TOP_OF_PAGE
APPEND l_event TO lt_events.
ENDIF.
ENDFORM. " EVENTTAB_BUILD
*&------------------------------------------------------------------*
*& Form TOP OF PAGE
*&------------------------------------------------------------------*
FORM top_of_page . "#EC CALLED
DATA : lt_list_header TYPE slis_t_listheader,
lwa_list_header TYPE slis_listheader,
lw_auart(20) TYPE c,
lw_success(60) TYPE c.
*dipslaying the total no of records
lwa_list_header-typ = 'S'.
lwa_list_header-key = 'Username'(013).
lwa_list_header-info = sy-uname.
APPEND lwa_list_header TO lt_list_header.
CLEAR lwa_list_header .
*displaying the date
lwa_list_header-typ = 'S'.
lwa_list_header-key = 'Date'(010).
WRITE sy-datum TO lwa_list_header-info.
APPEND lwa_list_header TO lt_list_header.
CLEAR lwa_list_header .
*displaying the time
lwa_list_header-typ = 'S'.
lwa_list_header-key = 'Time'(011).
WRITE sy-uzeit TO lwa_list_header-info.
APPEND lwa_list_header TO lt_list_header.
CLEAR lwa_list_header .
* Calling FM to display the data in the top of page
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = lt_list_header.
FREE : lt_list_header.
ENDFORM. "top_of_page
No comments:
Post a Comment