0% found this document useful (0 votes)
47 views3 pages

Zxslllegcdpir3u02 1

This document contains sample code for processing address data in SAP. It includes: 1) Declarations of data types and field symbols used to access internal tables containing address and partner data 2) Logic to read an address record, split the remark field into two names, add a new address record, and append it to the internal table 3) A FORM routine to split the remark field into the first and last names

Uploaded by

shankar ven
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)
47 views3 pages

Zxslllegcdpir3u02 1

This document contains sample code for processing address data in SAP. It includes: 1) Declarations of data types and field symbols used to access internal tables containing address and partner data 2) Logic to read an address record, split the remark field into two names, add a new address record, and append it to the internal table 3) A FORM routine to split the remark field into the first and last names

Uploaded by

shankar ven
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/ 3

Sample code

FIELD-SYMBOLS : <fs_address> LIKE LINE OF cs_api6800-addr,


<fs_headerpar> LIKE LINE OF cs_api6800-header-par.
data : lwa_header TYPE /sapsll/api6800_hdr_ref_r3_s,
w_addr_ag TYPE adrnr,
w_name1 TYPE ad_name1,
w_name2 TYPE ad_name2,
wa_par LIKE LINE OF cs_api6800-header-par,
wa_addr LIKE LINE OF cs_api6800-addr.
CONSTANTS : c_ag(2) TYPE c VALUE 'AG',
c_we(2) TYPE c VALUE 'WE',
c_z9(2) TYPE c VALUE 'Z9',
c_x TYPE c VALUE 'X',
c_zgt1(4) TYPE c VALUE 'ZGT1'.

READ TABLE cs_api6800-header-ref into lwa_header INDEX 1.


*BREAK 06CGI57.
IF cs_api6800-addr IS NOT INITIAL and
cs_api6800-header-par IS NOT INITIAL and
it_sd_partner_new IS NOT INITIAL AND cs_api6800-header-gen-document_type =
c_zgt1.
IF SY-SUBRC IS INITIAL.
READ TABLE it_sd_partner_new WITH KEY parvw = c_ag.
IF sy-subrc IS INITIAL.
w_addr_ag = it_sd_partner_new-adrnr.
READ TABLE cs_api6800-addr WITH KEY addr_no = w_addr_ag ASSIGNING <fs_address>.
IF sy-subrc = 0 AND <fs_address>-country IS NOT INITIAL AND <fs_address>-
adr_notes IS NOT INITIAL.
PERFORM split_remark USING <fs_address>-adr_notes
CHANGING w_name1
w_name2.
LOOP AT cs_api6800-header-par ASSIGNING <fs_headerpar> WHERE partner_function
= c_ag.
wa_par = <fs_headerpar>.
wa_par-partner_function = c_z9.
wa_par-addr_no = 123456."w_addr_ag + 1.
wa_par-addr_manipulated = c_x.
APPEND wa_par TO cs_api6800-header-par.
ENDLOOP.
wa_addr-addr_no = 123456. "w_addr_ag + 1.
wa_addr-name = w_name1.
wa_addr-str_suppl1 = w_name2.
wa_addr-street = <fs_address>-street.
wa_addr-street_no = <fs_address>-street_no.
wa_addr-house_no = <fs_address>-house_no .
wa_addr-city = <fs_address>-city .
wa_addr-district = <fs_address>-district .
wa_addr-country = <fs_address>-country .
wa_addr-region = <fs_address>-region .
wa_addr-postl_cod1 = <fs_address>-postl_cod1 .
APPEND wa_addr TO cs_api6800-addr.
ENDIF.
ENDIF.
ENDIF.
ENDIF.

FORM split_remark USING p_w_remark TYPE ad_remark1


CHANGING p_w_name1 TYPE ad_name1
p_w_name2 TYPE ad_name2.
DATA : lw_tempold(40) TYPE c,
lw_num_wds TYPE i,
lw_strlen TYPE i,
lw_strlen2 TYPE i,
lw_temp TYPE string,
lw_itab TYPE string,
lw_name TYPE i,
lw_name2 TYPE i,
lw_api_addr TYPE /sapsll/api6800_addr_r3_s.
****internal tables********************
DATA : lt_itab TYPE TABLE OF string.

SPLIT p_w_remark AT '' INTO TABLE lt_itab.

DESCRIBE FIELD lw_api_addr-name LENGTH lw_name IN CHARACTER MODE.


DESCRIBE FIELD lw_api_addr-name_2 LENGTH lw_name2 IN CHARACTER MODE.

DESCRIBE TABLE lt_itab LINES lw_num_wds.


IF lw_num_wds > 1.
LOOP AT lt_itab INTO lw_itab.
lw_tempold = lw_temp.
IF lw_temp IS NOT INITIAL.
CONCATENATE lw_temp lw_itab INTO lw_temp
SEPARATED BY space.
ELSE.
MOVE lw_itab TO lw_temp.
ENDIF.
IF ( ( lw_strlen LT lw_name AND p_w_name1 IS INITIAL ) OR
( lw_strlen LT lw_name2 AND p_w_name2 IS INITIAL ) ).
CONTINUE.
ELSEIF lw_strlen GT lw_name.
IF p_w_name1 IS INITIAL AND lw_tempold IS NOT INITIAL.
MOVE lw_tempold TO p_w_name1.
CLEAR lw_tempold.
ELSEIF p_w_name1 IS INITIAL AND lw_tempold IS INITIAL.
MOVE lw_temp+0(lw_name) TO p_w_name1.
MOVE p_w_remark+lw_name TO p_w_name2.
EXIT.
ENDIF.
lw_temp = lw_itab.
ELSE.
IF p_w_name1 IS INITIAL.
MOVE lw_temp TO p_w_name1.
ENDIF.
CLEAR lw_temp.
ENDIF.
CLEAR : lw_strlen,lw_itab.
ENDLOOP.
IF p_w_name1 IS INITIAL AND lw_temp IS NOT INITIAL .
MOVE lw_temp TO p_w_name1.
ELSEIF p_w_name2 IS INITIAL AND lw_temp IS NOT INITIAL.
MOVE lw_temp TO p_w_name2.
ENDIF.
ELSE .
READ TABLE lt_itab INTO lw_itab INDEX 1.
IF sy-subrc = 0.
lw_strlen = strlen( lw_itab ).
IF lw_strlen <= lw_name.
MOVE lw_itab TO p_w_name1.
ELSE.
lw_strlen2 = lw_strlen - lw_name.
MOVE lw_itab+0(lw_name) TO p_w_name1.
MOVE lw_itab+lw_name(lw_strlen2) TO p_w_name2.
CLEAR lw_strlen2.
ENDIF.
ENDIF.
ENDIF.

ENDFORM.

You might also like