You are on page 1of 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