*---------------------------------------------------------------------* * FORM VIM_PROCESS_ASSIGNS * *---------------------------------------------------------------------* * process assigns * *---------------------------------------------------------------------* FORM vim_process_assigns. DATA: length TYPE i, keydate_alr_assigned(1) TYPE c, tablength TYPE i, texttablength TYPE i, keylen_bef_date TYPE i, xlength type i. TRANSLATE vim_prtfky_assigned USING 'XY'. ASSIGN: TO CASTING, total TO CASTING TYPE c, total TO CASTING TYPE (x_header-maintview), total to casting, extract TO CASTING TYPE c, extract TO CASTING TYPE (x_header-maintview), extract to casting, corr_keytab-tabkey to casting. tablength = x_header-after_tabc / cl_abap_char_utilities=>charsize. texttablength = x_header-aft_txttbc / cl_abap_char_utilities=>charsize. IF x_header-bastab NE space AND x_header-texttbexst NE space. length = tablength + texttablength. xlength = x_header-texttablen + x_header-tablen. ASSIGN: +tablength(texttablength) TO , +x_header-after_tabc(x_header-texttablen) to , to casting type (x_header-texttab), (tablength) TO , +tablength(texttablength) TO , +x_header-after_tabc(x_header-texttablen) to , to casting type (x_header-texttab). ELSE. length = tablength. xlength = x_header-tablen. ENDIF. ASSIGN: +length(1) TO , +1(1) TO , (length) TO , (xlength) to , (x_header-tablen) to , +length(1) TO , +1(1) TO , (vim_ctabkeylen) TO , (vim_ctabkeylen) TO , (x_header-keylen) TO , (x_header-keylen) TO . IF x_header-bastab NE space AND x_header-texttbexst NE space. ASSIGN: +1(1) TO , +1(1) TO . ENDIF. IF x_header-adrnbrflag NE space. assign vim_addresses_to_save-handle to casting. LOOP AT x_namtab WHERE domname IN adrnbr_domain. ASSIGN COMPONENT x_namtab-viewfield OF STRUCTURE TO . EXIT. ENDLOOP. ENDIF. IF x_header-delmdtflag NE space. LOOP AT x_namtab WHERE domname EQ vim_delim_date_domain AND ( rollname in vim_begda_types or rollname in vim_endda_types ). IF x_namtab-rollname in vim_begda_types. * begin date IF x_header-delmdtflag EQ 'E'. * end date is key field IF x_namtab-texttabfld EQ space. ASSIGN COMPONENT x_namtab-viewfield OF STRUCTURE TO . * ASSIGN total+x_namtab-position(x_namtab-flength) * TO TYPE 'D'. ENDIF. ELSE. "begin date is key field CHECK keydate_alr_assigned EQ space OR keydate_alr_assigned EQ 'E' AND x_namtab-texttabfld NE space OR keydate_alr_assigned EQ 'T' AND x_namtab-texttabfld EQ space. IF x_namtab-texttabfld EQ space. TRANSLATE keydate_alr_assigned USING ' ETX'. ASSIGN COMPONENT x_namtab-viewfield OF STRUCTURE TO . * ASSIGN total+x_namtab-position(x_namtab-flength) * TO TYPE 'D'. IF x_namtab-position GT 0. ASSIGN: (x_namtab-position) TO casting, (x_namtab-position) TO casting. * for downward compatibility only: keylen_bef_date = x_namtab-position DIV cl_abap_char_utilities=>charsize. ASSIGN: (keylen_bef_date) TO TYPE 'C', (keylen_bef_date) TO TYPE 'C'. ELSE. ASSIGN: * begin correction if position <= 0, should be fitted to unicode. vim_dummy_mainkey TO casting , vim_dummy_mainkey TO casting , * end correction von XB am 22.03.02 for csn int1332679 2002 vim_dummy_mainkey TO TYPE 'C', TO TYPE 'C'. ENDIF. IF vim_mkey_after_exists NE space. PERFORM vim_assign_mkey_after_2 USING sy-tabix. ENDIF. ELSE. TRANSLATE keydate_alr_assigned USING ' TEX'. ASSIGN COMPONENT x_namtab-viewfield OF STRUCTURE TO . * ASSIGN total+x_namtab-position(x_namtab-flength) * TO TYPE 'D'. ENDIF. ENDIF. "x_header-delmdtflag eq 'E' ELSE. * end date IF x_header-delmdtflag EQ 'E'. * end date is key field CHECK keydate_alr_assigned EQ space OR keydate_alr_assigned EQ 'E' AND x_namtab-texttabfld NE space OR keydate_alr_assigned EQ 'T' AND x_namtab-texttabfld EQ space. IF x_namtab-texttabfld EQ space. TRANSLATE keydate_alr_assigned USING ' ETX'. ASSIGN COMPONENT x_namtab-viewfield OF STRUCTURE TO . * ASSIGN total+x_namtab-position(x_namtab-flength) * TO TYPE 'D'. IF x_namtab-position GT 0. ASSIGN: (x_namtab-position) TO casting, (x_namtab-position) TO casting. * for downward compatibility only: keylen_bef_date = x_namtab-position DIV cl_abap_char_utilities=>charsize. ASSIGN: (keylen_bef_date) TO TYPE 'C', (keylen_bef_date) TO TYPE 'C'. * ASSIGN: total(x_namtab-position) * TO TYPE 'C', * extract(x_namtab-position) * TO TYPE 'C'. ELSE. ASSIGN: * begin correction if position <= 0, should be fitted to unicode. vim_dummy_mainkey TO casting , vim_dummy_mainkey TO casting , * end correction von XB am 22.03.02 for csn int1332679 2002 vim_dummy_mainkey TO TYPE 'C', TO TYPE 'C'. ENDIF. IF vim_mkey_after_exists NE space. PERFORM vim_assign_mkey_after_2 USING sy-tabix. ENDIF. ELSE. TRANSLATE keydate_alr_assigned USING ' TEX'. ASSIGN COMPONENT x_namtab-viewfield OF STRUCTURE TO . * ASSIGN total+x_namtab-position(x_namtab-flength) * TO TYPE 'D'. ENDIF. ELSE. "begin date is key field IF x_namtab-texttabfld EQ space. ASSIGN COMPONENT x_namtab-viewfield OF STRUCTURE TO . * ASSIGN total+x_namtab-position(x_namtab-flength) * TO TYPE 'D'. ENDIF. ENDIF. "x_header-delmdtflag eq 'E' ENDIF. ENDLOOP. ENDIF. ENDFORM. "vim_process_assigns