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.