Z Commusage Update
Z Commusage Update
REPORT z_commusage_update.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF BLOCK one WITH FRAME TITLE text1.
SELECTION-SCREEN SKIP 1.
* Parameters for selection
PARAMETERS: pckgsize TYPE ad_pc_size DEFAULT '1000' OBLIGATORY.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN COMMENT /1(70) comm1.
SELECTION-SCREEN COMMENT /1(70) comm2.
SELECT-OPTIONS: seladr FOR adrc-addrnumber.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN COMMENT /1(70) comm3.
PARAMETERS: adru_cre LIKE szad_field-flag DEFAULT space.
SELECTION-SCREEN: END OF BLOCK one.
AT SELECTION-SCREEN OUTPUT.
comm1 = 'Address Number selection.'.
comm2 = 'If blank, picks up all address numbers.'.
comm3 = 'Create ADRU entries only.'.
INITIALIZATION.
text1 = 'Correction report - Address Communication Usages'.
START-OF-SELECTION.
CONSTANTS : c_yes VALUE 'X',
c_no VALUE ' '.
*&---------------------------------------------------------------------*
*& Form COMM_UPDATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0025 text
*----------------------------------------------------------------------*
FORM comm_update USING value(iv_tabname)
value(iv_commtype)
value(iv_commusage).
CLEAR: end_of_select.
DEFINE select_db_adrc.
if seladr_flag ne space.
select distinct addrnumber from adrc
into corresponding fields of table sel_tab
up to pckgsize rows where addrnumber in seladr and
addrnumber gt ls_addrnumber and &1 eq 'X' order by addrnumber
ascending.
else.
select distinct addrnumber from adrc
into corresponding fields of table sel_tab
up to pckgsize rows where addrnumber gt ls_addrnumber and
&1 eq 'X' order by addrnumber ascending.
endif.
END-OF-DEFINITION.
DEFINE select_db_adcp.
if seladr_flag ne space.
select distinct s~persnumber p~addrnumber p~comp_pers
into corresponding fields of table sel_tab up to pckgsize rows
from adrp as s inner join adcp as p on p~persnumber = s~persnumber
where p~addrnumber in seladr and s~persnumber ge ls_persnumber
and &1 eq 'X' order by s~persnumber ascending .
else.
select distinct s~persnumber p~addrnumber p~comp_pers
into corresponding fields of table sel_tab up to pckgsize rows
from adrp as s inner join adcp as p on p~persnumber = s~persnumber
where s~persnumber ge ls_persnumber and &1 eq 'X'
order by s~persnumber ascending .
endif.
END-OF-DEFINITION.
*TYPE 1 addresses.
DO.
CLEAR: sel_tab.
IF end_of_select = 'X'.
EXIT.
ENDIF.
CASE iv_tabname.
WHEN 'FLAGCOMM2'. select_db_adrc flagcomm2.
WHEN 'FLAGCOMM3'. select_db_adrc flagcomm3.
WHEN 'FLAGCOMM4'. select_db_adrc flagcomm4.
WHEN 'FLAGCOMM5'. select_db_adrc flagcomm5.
WHEN 'FLAGCOMM6'. select_db_adrc flagcomm6.
WHEN 'FLAGCOMM7'. select_db_adrc flagcomm7.
WHEN 'FLAGCOMM8'. select_db_adrc flagcomm8.
WHEN 'FLAGCOMM9'. select_db_adrc flagcomm9.
WHEN 'FLAGCOMM10'. select_db_adrc flagcomm10.
WHEN 'FLAGCOMM11'. select_db_adrc flagcomm11.
WHEN 'FLAGCOMM12'. select_db_adrc flagcomm12.
WHEN 'FLAGCOMM13'. select_db_adrc flagcomm13.
ENDCASE.
ENDDO.
CLEAR: sel_tab.
IF end_of_select = 'X'.
EXIT.
ENDIF.
CASE iv_tabname.
WHEN 'FLAGCOMM2'. select_db_adcp flagcomm2.
WHEN 'FLAGCOMM3'. select_db_adcp flagcomm3.
WHEN 'FLAGCOMM4'. select_db_adcp flagcomm4.
WHEN 'FLAGCOMM5'. select_db_adcp flagcomm5.
WHEN 'FLAGCOMM6'. select_db_adcp flagcomm6.
WHEN 'FLAGCOMM7'. select_db_adcp flagcomm7.
WHEN 'FLAGCOMM8'. select_db_adcp flagcomm8.
WHEN 'FLAGCOMM9'. select_db_adcp flagcomm9.
WHEN 'FLAGCOMM10'. select_db_adcp flagcomm10.
WHEN 'FLAGCOMM11'. select_db_adcp flagcomm11.
WHEN 'FLAGCOMM12'. select_db_adcp flagcomm12.
WHEN 'FLAGCOMM13'. select_db_adcp flagcomm13.
ENDCASE.
ENDDO.
CLEAR: sel_tab, end_of_select, ls_persnumber , ls_addrnumber,
lines_read.
*&---------------------------------------------------------------------*
*& Form FILTER_ADRU
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_SEL_TAB text
* -->P_IV_COMMUSAGE text
*----------------------------------------------------------------------*
FORM filter_adru TABLES sel_tab STRUCTURE addr_addr_pers_cp_line
USING value(iv_commusage).
TYPES:BEGIN OF adcp_struc,
addrnumber TYPE ad_addrnum,
persnumber TYPE ad_persnum,
comp_pers TYPE ad_cmp_prs,
END OF adcp_struc.
"if internal error then subsitute all the comm data. This will delete
" existing ADRU and creates again. But the exsisting default dates in
" if maintained, will be lost.
IF sy-subrc = 3.
ENDIF.
ENDIF.
ENDIF.
WHEN 'C'.
CALL FUNCTION 'ADDR_PERS_COMP_COMM_GET'
EXPORTING
address_number = ls_adr-addrnumber
person_number = ls_adr-persnumber
table_type = iv_commtype
iv_current_state = c_no
IMPORTING
returncode = lv_xerro
TABLES
comm_table = <lt_commtype>
error_table = et_error
EXCEPTIONS
parameter_error = 1
address_not_exist = 2
person_not_exist = 3
internal_error = 4
OTHERS = 5.
IF sy-subrc = 4.
ENDIF.
ENDIF.
WHEN 'P'.
IF sy-subrc = 4.
ENDIF.
ENDIF.
ENDCASE.
ENDIF.
ENDLOOP.
IF sy-subrc EQ 0.
CALL FUNCTION 'ADDR_MEMORY_CLEAR_COMMIT_WORK'.
ENDIF.