0% found this document useful (0 votes)
232 views9 pages

Z Commusage Update

This report updates communication usages (phone, fax, etc.) for addresses in SAP. It performs the following steps: 1. Selects address records from tables ADRC, ADRP, and ADCP to populate a work table for processing in packages of 1,000 records. 2. Loops through each communication type (phone, fax, etc.), calling subroutines to filter existing communication records in ADRU and update or add records. 3. Writes a message that the report ran successfully. The subroutines filter records already in ADRU to avoid duplicates, and update or add records to ADRU with the new communication type. Selection criteria and
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
232 views9 pages

Z Commusage Update

This report updates communication usages (phone, fax, etc.) for addresses in SAP. It performs the following steps: 1. Selects address records from tables ADRC, ADRP, and ADCP to populate a work table for processing in packages of 1,000 records. 2. Loops through each communication type (phone, fax, etc.), calling subroutines to filter existing communication records in ADRU and update or add records. 3. Writes a message that the report ran successfully. The subroutines filter records already in ADRU to avoid duplicates, and update or add records to ADRU with the new communication type. Selection criteria and
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 9

*&---------------------------------------------------------------------*

*& Report Z_COMMUSAGE_UPDATE


*&
*&---------------------------------------------------------------------*
*& Correction report - Address Communication Usages
*& SAP is not considered as responsible for any improper
*& use of this report.
*&*&--------------------------------------------------------------------

REPORT z_commusage_update.

TABLES: adrc, adru, adrp, adcp.

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

DATA : end_of_select LIKE c_yes,


seladr_flag LIKE c_yes,
sel_tab TYPE TABLE OF addr_addr_pers_cp_line,
ls_sel TYPE addr_addr_pers_cp_line,
lt_adru TYPE SORTED TABLE OF adru WITH UNIQUE KEY
addrnumber persnumber comm_type,
ls_adru TYPE adru.

IF seladr IS NOT INITIAL.


seladr_flag = 'X'.
ENDIF.

" update the communication usages.

PERFORM comm_update USING 'FLAGCOMM2' 'ADTEL' 'TEL'.


PERFORM comm_update USING 'FLAGCOMM3' 'ADFAX' 'FAX'.
PERFORM comm_update USING 'FLAGCOMM4' 'ADTTX' 'TTX'.
PERFORM comm_update USING 'FLAGCOMM5' 'ADTLX' 'TLX'.
PERFORM comm_update USING 'FLAGCOMM6' 'ADSMTP' 'INT'.
PERFORM comm_update USING 'FLAGCOMM7' 'ADRML' 'RML'.
PERFORM comm_update USING 'FLAGCOMM8' 'ADX400' 'X40'.
PERFORM comm_update USING 'FLAGCOMM9' 'ADRFC' 'RFC'.
PERFORM comm_update USING 'FLAGCOMM10' 'ADPRT' 'PRT'.
PERFORM comm_update USING 'FLAGCOMM11' 'ADSSF' 'SSF'.
PERFORM comm_update USING 'FLAGCOMM12' 'ADURI' 'URI'.
PERFORM comm_update USING 'FLAGCOMM13' 'ADPAG' 'PAG'.

WRITE: /, 'Report Run successfully.'.

*&---------------------------------------------------------------------*
*& Form COMM_UPDATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0025 text
*----------------------------------------------------------------------*
FORM comm_update USING value(iv_tabname)
value(iv_commtype)
value(iv_commusage).

DATA: lines_read LIKE sy-tabix,


package_no LIKE adrc_qu2-pckg_no_in.

DATA: lv_cursor TYPE cursor,


ls_addrnumber TYPE ad_addrnum,
ls_persnumber TYPE ad_persnum.

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.

DESCRIBE TABLE sel_tab LINES lines_read.


IF sel_tab IS NOT INITIAL.
IF lines_read < pckgsize.
end_of_select = 'X'.
ENDIF.
READ TABLE sel_tab INTO ls_sel INDEX lines_read.
ls_addrnumber = ls_sel-addrnumber.
IF adru_cre IS NOT INITIAL.
PERFORM filter_adru TABLES sel_tab USING iv_commusage.
ENDIF.
IF sel_tab IS NOT INITIAL.
PERFORM adru_adj TABLES sel_tab USING iv_commtype.
ENDIF.
ELSE.
EXIT.
ENDIF.

ENDDO.

* type 2 & 3 addresses.


CLEAR: end_of_select, ls_persnumber , ls_addrnumber, lines_read .
DO.

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.

DESCRIBE TABLE sel_tab LINES lines_read.

IF sel_tab IS NOT INITIAL.


IF lines_read < pckgsize.
end_of_select = 'X'.
ENDIF.
READ TABLE sel_tab INTO ls_sel INDEX lines_read.
ls_persnumber = ls_sel-persnumber.
IF adru_cre IS NOT INITIAL.
PERFORM filter_adru TABLES sel_tab USING iv_commusage.
ENDIF.
IF sel_tab IS NOT INITIAL.
PERFORM adru_adj TABLES sel_tab USING iv_commtype.
ENDIF.
ELSE.
EXIT.
ENDIF.

ENDDO.
CLEAR: sel_tab, end_of_select, ls_persnumber , ls_addrnumber,
lines_read.

ENDFORM. " COMM_UPDATE

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

SELECT DISTINCT addrnumber persnumber comm_type FROM adru INTO


CORRESPONDING FIELDS OF TABLE lt_adru FOR ALL ENTRIES
IN sel_tab WHERE addrnumber = sel_tab-addrnumber AND
persnumber = sel_tab-persnumber AND
comm_type = iv_commusage.
LOOP AT sel_tab INTO ls_sel.
READ TABLE lt_adru INTO ls_adru WITH KEY
addrnumber = ls_sel-addrnumber
persnumber = ls_sel-persnumber
comm_type = iv_commusage
BINARY SEARCH.
IF sy-subrc = 0.
DELETE TABLE sel_tab FROM ls_sel.
ENDIF.
ENDLOOP.

ENDFORM. " FILTER_ADRU


*&---------------------------------------------------------------------*
*& Form ADRU_ADJ
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_SEL_TAB text
* -->P_IV_COMMTYPE text
*----------------------------------------------------------------------*
FORM adru_adj TABLES sel_tab STRUCTURE addr_addr_pers_cp_line
USING iv_commtype.

TYPES:BEGIN OF adcp_struc,
addrnumber TYPE ad_addrnum,
persnumber TYPE ad_persnum,
comp_pers TYPE ad_cmp_prs,
END OF adcp_struc.

FIELD-SYMBOLS: <lt_commtype> TYPE table,


<ls_commtype> TYPE ANY,
<lv_addrnumber> TYPE adrc-addrnumber,
<lv_persnumber> TYPE adrp-persnumber,
<lv_updateflag> TYPE c.

DATA: lt_adcp TYPE SORTED TABLE OF adcp_struc WITH NON-UNIQUE KEY


addrnumber persnumber,
ls_adr TYPE addr_addr_pers_cp_line,
ls_adcp TYPE adcp_struc,
lv_addrnumber TYPE adrc-addrnumber,
lv_persnumber TYPE adrp-persnumber,
lr_data TYPE REF TO data,
et_error LIKE TABLE OF addr_error,
lv_xerro LIKE boole-boole.

CREATE DATA lr_data TYPE TABLE OF (iv_commtype).


ASSIGN lr_data->* TO <lt_commtype>.

LOOP AT sel_tab INTO ls_adr.

* for the TYPE 1 addresses.


IF ls_adr-persnumber IS INITIAL.
CALL FUNCTION 'ADDR_COMM_GET'
EXPORTING
address_number = ls_adr-addrnumber
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
internal_error = 3
OTHERS = 4.
IF sy-subrc EQ 0 AND lv_xerro <> 'E'.

LOOP AT <lt_commtype> ASSIGNING <ls_commtype>.

ASSIGN COMPONENT 'UPDATEFLAG' OF STRUCTURE


<ls_commtype> TO <lv_updateflag>.
<lv_updateflag> = 'U'.
MODIFY <lt_commtype> FROM <ls_commtype>.
ENDLOOP.

CALL FUNCTION 'ADDR_COMM_MAINTAIN'


EXPORTING
address_number = ls_adr-addrnumber
table_type = iv_commtype
IMPORTING
returncode = lv_xerro
TABLES
comm_table = <lt_commtype>
error_table = et_error
EXCEPTIONS
parameter_error = 1
address_not_exist = 2
internal_error = 3
OTHERS = 4.

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

CALL FUNCTION 'ADDR_COMM_MAINTAIN'


EXPORTING
address_number = ls_adr-addrnumber
table_type = iv_commtype
substitute_all_comm_data = c_yes
IMPORTING
returncode = lv_xerro
TABLES
comm_table = <lt_commtype>
error_table = et_error.

ENDIF.

ENDIF.
ENDIF.

* for Typw 2 & 3 addresses.


IF ls_adr-addrnumber IS NOT INITIAL AND
ls_adr-persnumber IS NOT INITIAL.
CASE ls_adr-comp_pers .

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 EQ 0 AND lv_xerro <> 'E'.


LOOP AT <lt_commtype> ASSIGNING <ls_commtype>.

ASSIGN COMPONENT 'UPDATEFLAG' OF STRUCTURE


<ls_commtype> TO <lv_updateflag>.
<lv_updateflag> = 'U'.
MODIFY <lt_commtype> FROM <ls_commtype>.
ENDLOOP.

CALL FUNCTION 'ADDR_PERS_COMP_COMM_MAINTAIN'


EXPORTING
address_number = ls_adr-addrnumber
person_number = ls_adr-persnumber
table_type = iv_commtype
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.

CALL FUNCTION 'ADDR_PERS_COMP_COMM_MAINTAIN'


EXPORTING
address_number = ls_adr-addrnumber
person_number = ls_adr-persnumber
table_type = iv_commtype
substitute_all_comm_data = c_yes
IMPORTING
returncode = lv_xerro
TABLES
comm_table = <lt_commtype>
error_table = et_error.

ENDIF.

ENDIF.

WHEN 'P'.

CALL FUNCTION 'ADDR_PERSONAL_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 EQ 0 AND lv_xerro <> 'E'.

LOOP AT <lt_commtype> ASSIGNING <ls_commtype>.

ASSIGN COMPONENT 'UPDATEFLAG' OF STRUCTURE


<ls_commtype> TO <lv_updateflag>.
<lv_updateflag> = 'U'.
MODIFY <lt_commtype> FROM <ls_commtype>.
ENDLOOP.

CALL FUNCTION 'ADDR_PERSONAL_COMM_MAINTAIN'


EXPORTING
address_number = ls_adr-addrnumber
person_number = ls_adr-persnumber
table_type = iv_commtype
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.

CALL FUNCTION 'ADDR_PERSONAL_COMM_MAINTAIN'


EXPORTING
address_number = ls_adr-addrnumber
person_number = ls_adr-persnumber
table_type = iv_commtype
substitute_all_comm_data = c_yes
IMPORTING
returncode = lv_xerro
TABLES
comm_table = <lt_commtype>
error_table = et_error.

ENDIF.
ENDIF.
ENDCASE.
ENDIF.
ENDLOOP.

CALL FUNCTION 'ADDR_MEMORY_SAVE'


EXCEPTIONS
address_number_missing = 1
person_number_missing = 2
internal_error = 3
database_error = 4
reference_missing = 5
OTHERS = 6.

IF sy-subrc EQ 0.
CALL FUNCTION 'ADDR_MEMORY_CLEAR_COMMIT_WORK'.
ENDIF.

ENDFORM. " ADRU_ADJ

You might also like