Dynamic Structures and Components
Error rendering macro 'code': Invalid value specified for parameter 'com.atlassian.confluence.ext.code.render.InvalidValueException'*&---------------------------------------------------------------------* *& Report ZVARTABDYNFINAL *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* * PROGRAM DESCRIPTION: Variant Table and Content Upload Interface. * * DEVELOPER: Aveek Ghose * CREATION DATE: 2008-08-25 * RDD NUMBER: DCDD027 * TRANSPORT NUMBER(S): RD2K902769 * *- REVISION HISTORY -------------------------------------------------* * * DEVELOPER: * DATE APPLIED: YYYY-MM-DD * SCR NUMBER: <Scope Change Request ID> * RDD NUMBER: <Toolset Object ID> * TRANSPORT NUMBER(S): * DESCRIPTION: * *----------------------------------------------------------------------* REPORT zvartabdynfinal NO STANDARD PAGE HEADING LINE-SIZE 150 LINE-COUNT 55 MESSAGE-ID /factglb/gta_custdev. *&---------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Include ZGTDMI_VARTAB_TOP *&---------------------------------------------------------------------* *----------------------------------------------------------------------* * PROGRAM DESCRIPTION: Variant Table and Content Upload Interface. * * DEVELOPER: Aveek Ghose * CREATION DATE: 2008-08-25 * RDD NUMBER: DCDD027 * TRANSPORT NUMBER(S): RD2K902769 * *- REVISION HISTORY -------------------------------------------------* * * DEVELOPER: * DATE APPLIED: YYYY-MM-DD * SCR NUMBER: <Scope Change Request ID> * RDD NUMBER: <Toolset Object ID> * TRANSPORT NUMBER(S): * DESCRIPTION: * *----------------------------------------------------------------------* ************************************************************************ * TYPE POOLS ************************************************************************ ************************************************************************ * TYPE POOLS ************************************************************************ ************************************************************************ * TYPE POOLS ************************************************************************ *Type declaration for ALV display TYPE-POOLS : slis. INCLUDE <icon>. TYPE-POOLS: col, "#EC * icon, "#EC * sym, "#EC * abap. "#EC * * Target structure definitions TABLES: e1cuvtm, "#EC * e1datem, "#EC * e1cuv1m, "#EC * edp21, "#EC * edi_dc40, "#EC * edi_dd40, "#EC * edi_ds40. "#EC * ************************************************************************ * GLOBAL TYPES ************************************************************************ TYPES : BEGIN OF ty_vartab. INCLUDE STRUCTURE e1cuvtm. TYPES: END OF ty_vartab. TYPES : BEGIN OF ty_vartabdate. INCLUDE STRUCTURE e1datem. TYPES : END OF ty_vartabdate. *Structure for data retreived TYPES : BEGIN OF ty_vardetails. INCLUDE STRUCTURE e1cuv1m. TYPES : END OF ty_vardetails. *Structure for data retreived from table tabinput. TYPES : BEGIN OF ty_tabinput, lines TYPE string, END OF ty_tabinput. *Structure for data retreived from Table dsn_input. TYPES : BEGIN OF ty_dsninput, "#EC * line(101) TYPE c, END OF ty_dsninput. *Structure for data retreived from Table dsn_input. TYPES : BEGIN OF ty_newinput, "#EC * line(101) TYPE c, flag(1) TYPE c, END OF ty_newinput. *Structure for keeping the values of all the custom tables TYPES : BEGIN OF ty_custom_tabs, matnr TYPE matnr, "Material Number werks TYPE werks_d, "Plant lgort TYPE lgort_d, "Storage Location qunty TYPE p DECIMALS 2, "Standard Order Quantity det_loc TYPE char6, "Detail Location class TYPE char2, "Class rate TYPE p DECIMALS 2, "Rate END OF ty_custom_tabs. *Type declared for the internal table and work area which will store *fields for error log TYPES : BEGIN OF ty_error_log, matnr TYPE matnr, "Material Number mtart TYPE mtart, "Material Type sel_data TYPE char10, "No of selectyed data END OF ty_error_log. *Structure for keeping the output data TYPES : BEGIN OF ty_final, vtnam(018) TYPE c, char1(030) TYPE c, char2(030) TYPE c, char3(030) TYPE c, char4(030) TYPE c, char5(030) TYPE c, char6(030) TYPE c, char7(030) TYPE c, char8(030) TYPE c, char9(030) TYPE c, char10(030) TYPE c, char11(030) TYPE c, char12(030) TYPE c, char13(030) TYPE c, char14(030) TYPE c, char15(030) TYPE c, flag(001) TYPE c, END OF ty_final. TYPES: BEGIN OF ty_contenthd, vtnam(018) TYPE c, flag(001) TYPE c, END OF ty_contenthd. TYPES: BEGIN OF ty_content, vtnam(018) TYPE c, char1(030) TYPE c, char2(030) TYPE c, char3(030) TYPE c, char4(030) TYPE c, char5(030) TYPE c, char6(030) TYPE c, char7(030) TYPE c, char8(030) TYPE c, char9(030) TYPE c, char10(030) TYPE c, char11(030) TYPE c, char12(030) TYPE c, char13(030) TYPE c, char14(030) TYPE c, char15(030) TYPE c, flag(001) TYPE c, z_varcond TYPE varcond. TYPES: END OF ty_content. TYPES: BEGIN OF ty_contenttab, vtnam(018) TYPE c, comp1(30) TYPE c, char1(030) TYPE c, comp2(30) TYPE c, char2(030) TYPE c, comp3(30) TYPE c, char3(030) TYPE c, comp4(30) TYPE c, char4(030) TYPE c, comp5(30) TYPE c, char5(030) TYPE c, comp6(30) TYPE c, char6(030) TYPE c, comp7(30) TYPE c, char7(030) TYPE c, comp8(30) TYPE c, char8(030) TYPE c, comp9(30) TYPE c, char9(030) TYPE c, comp10(30) TYPE c, char10(030) TYPE c, comp11(30) TYPE c, char11(030) TYPE c, comp12(30) TYPE c, char12(030) TYPE c, comp13(30) TYPE c, char13(030) TYPE c, comp14(30) TYPE c, char14(030) TYPE c, comp15(30) TYPE c, char15(030) TYPE c, flag(001) TYPE c. TYPES: END OF ty_contenttab. TYPES: BEGIN OF ty_e1cuvtm, msgfn TYPE msgfn, var_tab TYPE apitabl, status TYPE rcutbst, vtgroup TYPE rcutbgr, authstruc TYPE rcutbbe, authentry TYPE rcufnbi, fldelete TYPE fllkenz, dbtabname TYPE tabname16, dbconactive TYPE dbcon_acti, presdec TYPE vtdct, END OF ty_e1cuvtm. TYPES: BEGIN OF ty_e1cuv1m, msgfn TYPE msgfn, vtlineno TYPE vtlineno, vtcharact TYPE atnam, atwrt TYPE atwrt, atflv TYPE atflv, atawe TYPE msehi, atflb TYPE atflb, ataw1 TYPE msehi, atcod TYPE atcod, attlv TYPE attlv, attlb TYPE attlb, atprz TYPE atprz, atinc TYPE atinc, vtlineno5 TYPE vtlineno5, END OF ty_e1cuv1m. TYPES: BEGIN OF ty_e1datem, msgfn TYPE msgfn, key_date TYPE sydatum, aennr TYPE aennr, effectivity TYPE cc_mteff, END OF ty_e1datem. TYPES: BEGIN OF ty_vtnam, vtint TYPE vtint, " Internal number of variant table vtnam TYPE vtnam, " Name of variant table dbtab_name TYPE tabname16, "Custom table Name error TYPE char1, " Indicates error in data format reas TYPE char50, " Reason for failure END OF ty_vtnam. * Get data type for characteristic TYPES: BEGIN OF ty_cabn, atinn TYPE atinn, "Internal characteristic atnam TYPE atnam, "Characteristic Name atfor TYPE atfor, "Data type of characteristic atson TYPE atson, "Indicator: Additional Values atprt TYPE atprt, "Check table atprr TYPE atprr, "Name of Check Report Program atprf TYPE atprf, "Function Module for Checking Values anzdz TYPE anzdz, "Number of Decimal Places check TYPE char1, "Indicates check required or not END OF ty_cabn. * Get field names of variant table TYPES: BEGIN OF ty_cuvtab_fld, vtint TYPE vtint, " Internal number of variant table atinn TYPE atinn, " Internal characteristic vtpos TYPE vtpos, " Item number of characteristic in variant *********************************************************************** *mod-012 *********************************************************************** dbfld TYPE name_feld, *********************************************************************** *mod-012 *********************************************************************** exist TYPE char1, " X Indictaes characteristic is part of fil END OF ty_cuvtab_fld. * Store all data in internal table TYPES: BEGIN OF ty_file, vtnam TYPE vtnam, char1 TYPE atwrt, char2 TYPE atwrt, char3 TYPE atwrt, char4 TYPE atwrt, char5 TYPE atwrt, char6 TYPE atwrt, char7 TYPE atwrt, char8 TYPE atwrt, char9 TYPE atwrt, char10 TYPE atwrt, char11 TYPE atwrt, char12 TYPE atwrt, char13 TYPE atwrt, char14 TYPE atwrt, char15 TYPE atwrt, flag TYPE char1, error TYPE char50, END OF ty_file. * To check for duplicates TYPES: BEGIN OF ty_dupl, vtnam TYPE vtnam, char1 TYPE atwrt, char2 TYPE atwrt, char3 TYPE atwrt, char4 TYPE atwrt, char5 TYPE atwrt, char6 TYPE atwrt, char7 TYPE atwrt, char8 TYPE atwrt, char9 TYPE atwrt, char10 TYPE atwrt, char11 TYPE atwrt, char12 TYPE atwrt, char13 TYPE atwrt, char14 TYPE atwrt, char15 TYPE atwrt, slnid TYPE slnid, END OF ty_dupl. * Get previously loaded characteristic values for internal table (CHAR) TYPES: BEGIN OF ty_cuvtab_valc, vtint TYPE vtint, " Internal number of variant table slnid TYPE slnid, " Key for value combination in variant tab atinn TYPE atinn, " Internal characteristic valc TYPE atwrt, " Characteristic Value END OF ty_cuvtab_valc. * Get previously loaded characteristic values for internal table (NUM) TYPES: BEGIN OF ty_cuvtab_valn, vtint TYPE vtint, " Internal number of variant table slnid TYPE slnid, " Key for value combination in variant tab atinn TYPE atinn, " Internal characteristic val_from TYPE atflv, " Internal floating point from END OF ty_cuvtab_valn. * Store column positions of characteristics TYPES: BEGIN OF ty_col_pos, vtint TYPE vtint, " Internal number of variant table vtnam TYPE vtnam, " Variant table name atinn TYPE atinn, "Internal characteristic atnam TYPE atnam, "Characteristic Name field TYPE fieldname, "Field name req TYPE char1, " Required or not vtpos TYPE vtpos, " Item number of characteristics END OF ty_col_pos. * Store valid values for characteristics TYPES: BEGIN OF ty_cawn, atinn TYPE atinn, " Internal characteristic atzhl TYPE atzhl, " Int counter atwrt TYPE atwrt, " Characteristic Value atflv TYPE atflv, " Internal floating point from lkenz TYPE lkenz, " Deletion indicator END OF ty_cawn. * Store error messages for individual lines TYPES: BEGIN OF ty_error, vtnam TYPE vtnam, " Variant table name fname TYPE fieldname, " Fieldname atnam TYPE atnam, " Characteristic name atwrt TYPE atwrt, " Characteristic value row TYPE char5, " Row id END OF ty_error. * Begin TPR# 4618 * To store unique number for variant TYPES: BEGIN OF ty_vnt_ma, vtnam TYPE vtnam, unique_no TYPE zgtdm_unqn, no_chr TYPE zgtdm_no_chr, END OF ty_vnt_ma. TYPES: BEGIN OF ty_dbtab, vtint TYPE vtint, vtnam TYPE vtnam, dbtab_name TYPE tabname16, END OF ty_dbtab. * To find out concatenated number for TYPES: BEGIN OF ty_split, f1 TYPE char6, END OF ty_split. TYPES: BEGIN OF ty_charval, char TYPE char30, END OF ty_charval. TYPES: BEGIN OF ty_data, name TYPE string, value(15) TYPE c, END OF ty_data. DATA: i_datatab TYPE STANDARD TABLE OF ty_data. "#EC NEEDED TYPES: tumls_messtype TYPE /sapdmc/ls_messtype, tumls_messtypetxt TYPE edi_text60, tumls_messcode TYPE edipmescod. TYPES: tumls_tabname TYPE tabname, "#EC * tumls_segment TYPE tabname. "#EC * TYPES: tumls_pathfile TYPE /sapdmc/ls_filename, tumls_filename TYPE /sapdmc/ls_filename, tumls_filetext TYPE /sapdmc/ls_filetext. TYPES: BEGIN OF type_errorline, msgty TYPE symsgty, id TYPE symsgid, msgno TYPE symsgno, par1 TYPE symsgv, par2 TYPE symsgv, par3 TYPE symsgv, par4 TYPE symsgv, END OF type_errorline. TYPES: type_errortab TYPE SORTED TABLE OF type_errorline WITH NON-UNIQUE KEY id msgno par1 par2 par3 par4. DATA: lv_line2 TYPE REF TO data. *********************************************************************** * GLOBAL INTERNAL TABLES ************************************************************************ DATA : i_newinput TYPE STANDARD TABLE OF ty_newinput INITIAL SIZE 0. "#EC * DATA : i_contentheader1 TYPE STANDARD TABLE OF ty_contenthd INITIAL SIZE 0. "#EC * DATA : i_contenttab1 TYPE STANDARD TABLE OF ty_content INITIAL SIZE 0. "#EC * DATA : i_contenttab2 TYPE STANDARD TABLE OF ty_content INITIAL SIZE 0. "#EC * DATA : i_contenttab3 TYPE STANDARD TABLE OF ty_content INITIAL SIZE 0. "#EC * DATA : i_contenttab4 TYPE STANDARD TABLE OF ty_content INITIAL SIZE 0. "#EC * DATA : i_contenttab5 TYPE STANDARD TABLE OF ty_contenttab INITIAL SIZE 0 . "#EC * DATA : i_e1cuv1m TYPE STANDARD TABLE OF e1cuv1m INITIAL SIZE 0. "#EC * DATA : i_errortab TYPE STANDARD TABLE OF solisti1 INITIAL SIZE 0. "#EC * ************************************************************************ * GLOBAL WORK AREAS ************************************************************************ **Internal Table for the structure TY_T001L DATA : wa_vartab TYPE ty_vartab. "#EC * DATA : wa_vartabdate TYPE ty_vartabdate. "#EC * DATA : wa_vardetails TYPE ty_vardetails. "#EC * DATA : wa_tabinput TYPE ty_tabinput. "#EC * DATA : wa_dsninput TYPE ty_dsninput. "#EC * DATA : wa_newinput TYPE ty_newinput. "#EC * DATA : wa_gnewinput TYPE ty_newinput. "#EC * DATA : wa_ginput_data TYPE ty_newinput. "#EC * DATA : wa_final TYPE ty_final. "#EC * DATA : wa_content TYPE ty_content. "#EC * DATA : wa_contenthd TYPE ty_contenthd. "#EC * DATA : wa_contentheader TYPE ty_contenthd. "#EC * DATA : wa_contenttab TYPE ty_content. "#EC * DATA : wa_content1 TYPE ty_content. "#EC * DATA : wa_contenthd1 TYPE ty_contenthd. "#EC * DATA : wa_contentheader1 TYPE ty_contenthd. "#EC * DATA : wa_contenttab1 TYPE ty_content. "#EC * DATA : wa_contenttab2 TYPE ty_content. "#EC * DATA : wa_contenttab3 TYPE ty_content. "#EC * DATA : wa_contenttab4 TYPE ty_content. "#EC * DATA : wa_contenttab5 TYPE ty_contenttab. "#EC * DATA : wa_e1cuvtm TYPE e1cuvtm. "#EC * DATA : wa_e1cuv1m TYPE e1cuv1m. "#EC * DATA : wa_e1datem TYPE e1datem. "#EC * DATA : wa_error_tab TYPE solisti1. "#EC * ************************************************************************ * INTERNAL TABLES AND WORK AREAS FOR BDC ************************************************************************ *Internal Table to store the data to display the error message DATA : i_errormsg TYPE STANDARD TABLE OF solisti1 INITIAL SIZE 0. "#EC * *Internal Table to store the data to display the error message DATA : i_error TYPE STANDARD TABLE OF solisti1 INITIAL SIZE 0. "#EC * DATA : itab_error TYPE STANDARD TABLE OF solisti1 INITIAL SIZE 0. "#EC * **Work area to store the data to display the error message DATA : wa_errormsg TYPE solisti1. "#EC * **Internal table which will store data for the error log DATA:i_error_log TYPE STANDARD TABLE OF ty_error_log INITIAL SIZE 0. "#EC * ************************************************************************ * GLOBAL VARIABLES ************************************************************************ DATA: g_file TYPE string. "#EC * DATA : g_ctr_input_recs(5) TYPE c. "#EC * DATA: g_ctr_output_recs(5) TYPE p. "#EC * DATA : g_msg(100) TYPE c. "#EC * DATA: g_struct_file TYPE string. "#EC * DATA: g_login TYPE fileintern. "#EC * DATA: g_phyin TYPE string. "#EC * DATA: g_lprnt TYPE rspopshort. "#EC * DATA: g_fname1 TYPE string. "#EC * DATA : g_repid TYPE repid, "#EC * g_exit(1) TYPE c, "#EC * gx_variant TYPE disvariant. "#EC * DATA : g_lines TYPE i . "#EC * DATA : g_save(1) TYPE c. "#EC * DATA : g_splid TYPE rspoid . "#EC * DATA: p_login TYPE fileintern. "#EC * DATA: p_phyin TYPE string. "#EC * ************************************************************************ * GLOBAL CONSTANTS ************************************************************************ CONSTANTS c_msgar TYPE rslgarea VALUE 'F8'. "#EC * CONSTANTS c_msgid TYPE rslgsubid VALUE 'E'. "#EC * CONSTANTS c_urgnc TYPE char04 VALUE 'HIGH'. "#EC * CONSTANTS c_x(1) TYPE c VALUE 'X'. "#EC * CONSTANTS c_y(1) TYPE c VALUE 'Y'. "#EC * CONSTANTS c_z(1) TYPE c VALUE 'Z'. "#EC * CONSTANTS c_e(1) TYPE c VALUE 'E'. "#EC * CONSTANTS c_sap(3) TYPE c VALUE 'SAP'. "#EC * CONSTANTS c_mod(3) TYPE c VALUE 'MOD'. "#EC * CONSTANTS c_md1(3) TYPE c VALUE 'MD1'. "#EC * CONSTANTS c_md2(3) TYPE c VALUE 'MD2'. "#EC * CONSTANTS c_md3(3) TYPE c VALUE 'MD3'. "#EC * CONSTANTS c_md4(3) TYPE c VALUE 'MD4'. "#EC * CONSTANTS c_md5(3) TYPE c VALUE 'MD5'. "#EC * CONSTANTS: c_000001(6) TYPE c VALUE '000001', "#EC * c_e1cuv1m(7) TYPE c VALUE 'E1CUV1M', "#EC * c_02(2) TYPE c VALUE '02', "#EC * c_009(3) TYPE c VALUE '009', "#EC * c_0001(4) TYPE c VALUE '0001'. "#EC * CONSTANTS: c_e1datem(7) TYPE c VALUE 'E1DATEM'. "#EC * CONSTANTS: c_e1cuvtm(7) TYPE c VALUE 'E1CUVTM'. "#EC * ************************************************************************ * GLOBAL INTERNAL TABLES FOR ALV DISPLAY ************************************************************************ *Internal tables for ALV Field cat DATA : i_fieldcat_ov TYPE STANDARD TABLE OF slis_fieldcat_alv INITIAL SIZE 0, "#EC * i_fieldcat_dtl TYPE STANDARD TABLE OF slis_fieldcat_alv INITIAL SIZE 0, "#EC * i_fieldcat_ov1 TYPE lvc_t_fcat, "#EC * i_events TYPE slis_t_event. "#EC * ************************************************************************ * GLOBAL WORK AREAS FOR ALV DISPLAY ************************************************************************ *Work area for ALV Field layout DATA : wa_layout TYPE slis_layout_alv. "#EC * *Work area for Field Cat. Table DATA : wa_fieldcat TYPE slis_fieldcat_alv. "#EC * ************************************************************************ * GLOBAL VARIABLES FOR ALV DISPLAY ************************************************************************ DATA : g_event TYPE slis_t_event. "#EC * DATA : g_top_of_page TYPE slis_t_listheader. "#EC * DATA : g_ok_code TYPE char4. "#EC * DATA : g_variant TYPE disvariant. "#EC * ************************************************************************ * GLOBAL CONSTANTS FOR ALV DISPLAY ************************************************************************ * BAL handling DATA: iv_log_handle TYPE balloghndl. "#EC * DATA: is_log_header TYPE bal_s_log. "#EC * DATA: iv_object TYPE bal_s_log-object VALUE 'CAPI'. "#EC * DATA: iv_subobject TYPE bal_s_log-subobject VALUE 'CAPI_LOG'. "#EC * DATA: iv_tcode TYPE bal_s_log-altcode VALUE 'SE38'. "#EC * ******************************************************************** *MOD-005 ******************************************************************** RANGES: r_mestyp FOR edidc-mestyp, "#EC * r_credat FOR edidc-credat, "#EC * r_cretim FOR edidc-cretim, "#EC * r_sndprt FOR edidc-sndprt, "#EC * r_sndprn FOR edidc-sndprn. "#EC * DATA: l_messtype TYPE tumls_messtype. "#EC * ******************************************************************** *MOD-005 ******************************************************************** DATA: p_sndprn TYPE edi_sndprn, "#EC * p_sndprt TYPE edi_sndprt, "#EC * p_sndpor TYPE edi_sndpor. "#EC * DATA: p_rcvprn TYPE edi_rcvprn, "#EC * p_rcvprt TYPE edi_rcvprt, "#EC * p_rcvpor TYPE edi_rcvpor. "#EC * DATA: init_e1cuvtm TYPE e1cuvtm, "#EC * prev_e1cuvtm TYPE e1cuvtm, "#EC * init_e1datem TYPE e1datem, "#EC * prev_e1datem TYPE e1datem, "#EC * init_e1cuv1m TYPE e1cuv1m, "#EC * prev_e1cuv1m TYPE e1cuv1m. "#EC * * Source structure definitions DATA: BEGIN OF lsmw_tab_content, "#EC * vtnam(018) TYPE c, char1(030) TYPE c, char2(030) TYPE c, char3(030) TYPE c, char4(030) TYPE c, char5(030) TYPE c, char6(030) TYPE c, char7(030) TYPE c, char8(030) TYPE c, char9(030) TYPE c, char10(030) TYPE c, char11(030) TYPE c, char12(030) TYPE c, char13(030) TYPE c, char14(030) TYPE c, char15(030) TYPE c, flag(001) TYPE c, END OF lsmw_tab_content. * Counters DATA: g_cnt_var_tab TYPE i, "#EC * g_cnt_tab_content TYPE i. "#EC * * Counter ct_xxxxxxxxxx: number of transferred records DATA: ct_edi_dc40 TYPE i, "#EC * cs_edi_dc40 TYPE i, "#EC * ct_e1cuvtm TYPE i, "#EC * cs_e1cuvtm TYPE i, "#EC * ct_e1datem TYPE i, "#EC * cs_e1datem TYPE i, "#EC * ct_e1cuv1m TYPE i, "#EC * cs_e1cuv1m TYPE i. "#EC * * Global data definitions and data declarations DATA: wa_cabn TYPE ty_cabn, wa_cawn TYPE ty_cawn, wa_file TYPE ty_file, wa_vtnam TYPE ty_vtnam, wa_cuvtab_fld TYPE ty_cuvtab_fld, wa_cuvtab_valn TYPE ty_cuvtab_valn, wa_cuvtab_valc TYPE ty_cuvtab_valc, wa_col_pos TYPE ty_col_pos, wa_error TYPE ty_error, wa_dupl TYPE ty_dupl, wa_dupl_file TYPE ty_dupl. DATA: wa_vnt_ma TYPE ty_vnt_ma, wa_split TYPE ty_split. DATA: wa_charval TYPE ty_charval. "#EC * *----------Internal table DATA: i_cabn TYPE STANDARD TABLE OF ty_cabn, "#EC * i_cabn_temp TYPE STANDARD TABLE OF ty_cabn, "#EC * i_cabn_atinn TYPE STANDARD TABLE OF ty_cabn, "#EC * i_file TYPE STANDARD TABLE OF ty_file, "#EC * i_file_tmp TYPE STANDARD TABLE OF ty_file, "#EC * i_vtnam TYPE STANDARD TABLE OF ty_vtnam, "#EC * i_cuvtab TYPE STANDARD TABLE OF ty_vtnam, "#EC * i_cuvtab_fld TYPE STANDARD TABLE OF ty_cuvtab_fld, "#EC * i_cuvtab_valn TYPE STANDARD TABLE OF ty_cuvtab_valn, "#EC * i_cuvtab_valc TYPE STANDARD TABLE OF ty_cuvtab_valc, "#EC * i_col_pos TYPE STANDARD TABLE OF ty_col_pos, "#EC * i_cawn TYPE STANDARD TABLE OF ty_cawn, "#EC * i_cawn_n TYPE STANDARD TABLE OF ty_cawn, "#EC * i_cawn_c TYPE STANDARD TABLE OF ty_cawn, "#EC * i_cawn_i TYPE STANDARD TABLE OF ty_cawn, "#EC * i_cuv_error TYPE STANDARD TABLE OF ty_vtnam, "#EC * i_dupl TYPE STANDARD TABLE OF ty_dupl, "#EC * i_dbtab TYPE STANDARD TABLE OF ty_dbtab. "#EC * DATA: i_vnt_ma TYPE STANDARD TABLE OF ty_vnt_ma, "#EC * i_split TYPE STANDARD TABLE OF ty_split. "#EC * DATA: i_dupl_file TYPE STANDARD TABLE OF ty_dupl. "#EC * DATA: i_charval TYPE STANDARD TABLE OF ty_charval. "#EC * *---------- Constants CONSTANTS: c_char TYPE atfor VALUE 'CHAR', "#EC * c_date TYPE atfor VALUE 'DATE', "#EC * c_time TYPE atfor VALUE 'TIME', "#EC * c_varcond TYPE atnam VALUE 'Z_VARCOND'. "#EC * *--------- Field Symbols FIELD-SYMBOLS: <fs_vtnam> TYPE ty_vtnam, "#EC * <fs_cabn> TYPE ty_cabn, "#EC * <fs_cuvtab_fld> TYPE ty_cuvtab_fld, "#EC * <fs_dupl> TYPE ty_dupl. "#EC * FIELD-SYMBOLS: <fs_dyn_wa> TYPE any. *-------- Variables DATA: g_raw(500) TYPE c, "#EC * g_invalid TYPE char1, "#EC * g_error TYPE char1, "#EC * g_message TYPE char50, "#EC * g_slnid_c TYPE slnid, "#EC * g_slnid_n TYPE slnid, "#EC * g_row TYPE char5. "#EC * DATA: g_varcond TYPE varcond, "Variant condition "#EC NEEDED g_split_var TYPE i, "#EC * g_split_var1 TYPE i. "#EC * TYPES: BEGIN OF ty_charname, name TYPE atnam, END OF ty_charname. DATA: wa_charname TYPE ty_charname, "#EC * i_charname TYPE STANDARD TABLE OF ty_charname. "#EC * DATA: cnt_i TYPE i, "#EC * g_tabix TYPE char10. "#EC * TYPES: BEGIN OF ty_itab_zedidc40. INCLUDE STRUCTURE edi_dc40. TYPES: END OF ty_itab_zedidc40. TYPES: BEGIN OF ty_itab_zedidd40. INCLUDE STRUCTURE edi_dd40. TYPES: END OF ty_itab_zedidd40. DATA: itab_zedidc40 TYPE STANDARD TABLE OF ty_itab_zedidc40 INITIAL SIZE 0. "#EC * DATA: itab_zedidd40 TYPE STANDARD TABLE OF ty_itab_zedidd40 INITIAL SIZE 0. "#EC * DATA: wa_itab_zedidc40 TYPE ty_itab_zedidc40. "#EC NEEDED DATA: wa_itab_zedidd40 TYPE ty_itab_zedidd40. **************************************************************** *MOD-009 **************************************************************** DATA: itab_ze1cuvtm TYPE e1cuvtm, "#EC * itab_ze1datem TYPE e1datem, "#EC * itab_ze1cuv1m TYPE e1cuv1m. "#EC * DATA: wdocnum(16) TYPE n VALUE 0. "#EC * DATA: wsegnum(6) TYPE n VALUE 0. "#EC * DATA: witemno(10) TYPE n VALUE 0. "#EC * DATA: witemno_new(10) TYPE n VALUE 0. "#EC * DATA: witemno_gst(10) TYPE n VALUE 0. "#EC * DATA: witemno_qst(10) TYPE n VALUE 0. "#EC * TYPES: BEGIN OF ty_input_data1, "#EC * line(560) TYPE c, flag(1) TYPE c, END OF ty_input_data1. DATA: i_input_data TYPE STANDARD TABLE OF ty_input_data1 INITIAL SIZE 0. "with header line. DATA: i_input_data1 TYPE STANDARD TABLE OF ty_input_data1 INITIAL SIZE 0. "with header line. DATA: wa_input_data TYPE ty_input_data1. "#EC * DATA: g_cnt_input_recs TYPE i. "#EC * DATA: g_flg_error TYPE c. "#EC * DATA: l_lines TYPE i. "#EC * DATA: l_lines1 TYPE i. "#EC * DATA: l_tabix TYPE i. "#EC * DATA: wa_input_data1 TYPE ty_input_data1. "#EC * DATA: file TYPE string. * Fields that are made available to the user: DATA: g_cnt_records_read TYPE i, "#EC * g_cnt_records_transferred TYPE i, "#EC * g_cnt_transactions_read TYPE i, "#EC * g_cnt_transactions_transferred TYPE i, "#EC * g_cnt_idocs_package TYPE i. "#EC * DATA: v_log_handle TYPE balloghndl. "#EC * DATA: gt_curr_edi_dc40 TYPE STANDARD TABLE OF edi_dc40 INITIAL SIZE 0. "#EC * DATA: gt_curr_edi_dd40 TYPE STANDARD TABLE OF edi_dd40 INITIAL SIZE 0. "#EC * DATA: wa_curr_edi_dc40 TYPE edi_dc40. "#EC * DATA: wa_curr_edi_dd40 TYPE edi_dd40. "#EC * * internal table for error messages during conversion DATA: g_error_tab TYPE type_errortab, "#EC * wa_errortab TYPE type_errorline. "#EC * DATA: g_edidd_segnam TYPE edi4segnam, "#EC * g_edidd_hlevel TYPE edi4hlevec. "#EC * DATA: g_segnum(6) TYPE n. DATA: g_objecttype(2) TYPE c. DATA: p_fname(128) TYPE c VALUE '/usr/sap/put/vartabheader'. " MODIF ID MD1 OBLIGATORY. DATA: p_fname1(128) TYPE c VALUE '/usr/sap/put/vartabcontent'. " MODIF ID MD1 OBLIGATORY. FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE, <dyn_table1> TYPE STANDARD TABLE, <dyn_wa>, <dyn_wa1> TYPE any. DATA: dy_table TYPE REF TO data, dy_line TYPE REF TO data, xfc TYPE lvc_s_fcat, ifc TYPE lvc_t_fcat. DATA: l_tabname TYPE tabname. DATA: l_len_slnid TYPE i, "#EC NEEDED l_len_varcond TYPE i, "#EC NEEDED l_temp_slnid TYPE i, "#EC NEEDED l_temp_slnc TYPE char5, "#EC NEEDED l_temp_varcond TYPE varcond, "#EC NEEDED l_sub_var TYPE i, "#EC NEEDED l_val_split TYPE char10. "#EC NEEDED DATA: l_invalid. "#EC NEEDED *Include for Global Data Declaration *INCLUDE ZGTDMI_VARTAB_TOPDYN. *INCLUDE /FACTGLB/GTDMI_VARTAB_TOP02. *Include for Selection Screen *INCLUDE ZGTDMI_VARTAB_SELDYN. *INCLUDE /FACTGLB/GTDMI_VARTAB_SEL02. *Include for Sub Routines *INCLUDE ZGTDMI_VARTAB_FORMSDYN. *INCLUDE /FACTGLB/GTDMI_VARTAB_FORMS02. *&---------------------------------------------------------------------* *& Include ZGTDMI_VARTAB_SEL *&---------------------------------------------------------------------* *----------------------------------------------------------------------* * PROGRAM DESCRIPTION: Variant Table and Content Upload Interface. * * DEVELOPER: Aveek Ghose * CREATION DATE: 2008-08-25 * RDD NUMBER: DCDD027 * TRANSPORT NUMBER(S): RD2K902769 * *- REVISION HISTORY -------------------------------------------------* * * DEVELOPER: * DATE APPLIED: YYYY-MM-DD * SCR NUMBER: <Scope Change Request ID> * RDD NUMBER: <Toolset Object ID> * TRANSPORT NUMBER(S): * DESCRIPTION: * *----------------------------------------------------------------------* ************************************************************************ * DECLARATION FOR SELECTION SCREEN ************************************************************************ *--------------------------------------------------------------------- *selection-screen skip 1. *--------------------------------------------------------------------- *For all the input field entries SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE text-001. *Parameter for Input File Name: PARAMETERS: p_inpt TYPE rlgrap-filename MODIF ID mod . " Presentation server File Variant table PARAMETERS: p_inpt1 TYPE rlgrap-filename MODIF ID mod . " Presentation server File variant Content SELECTION-SCREEN END OF BLOCK bl1. ** IDoc creation SELECTION-SCREEN BEGIN OF BLOCK idocpars WITH FRAME TITLE text-006. PARAMETERS: p_trfcpt AS CHECKBOX DEFAULT c_x MODIF ID md3, p_packge(5) TYPE n DEFAULT 1 MODIF ID md3. SELECTION-SCREEN END OF BLOCK idocpars. SELECTION-SCREEN BEGIN OF BLOCK bl3 WITH FRAME TITLE text-032. * Radio Buttons : PARAMETERS: rb_apsrv RADIOBUTTON GROUP rb1 DEFAULT 'X' USER-COMMAND ucom, rb_convt RADIOBUTTON GROUP rb1, rb_idoc RADIOBUTTON GROUP rb1. * rb_proc RADIOBUTTON GROUP RB1. SELECTION-SCREEN END OF BLOCK bl3. ************************************************************************ * INITIALIZATION ************************************************************************ INITIALIZATION. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_inpt. CALL FUNCTION 'KD_GET_FILENAME_ON_F4' EXPORTING static = c_x CHANGING file_name = p_inpt EXCEPTIONS mask_too_long = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE e241. ENDIF. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_inpt1. CALL FUNCTION 'KD_GET_FILENAME_ON_F4' EXPORTING static = c_x CHANGING file_name = p_inpt1 EXCEPTIONS mask_too_long = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE e241. ENDIF. *&---------------------------------------------------------------------* * At Selection Screen Output *&---------------------------------------------------------------------* AT SELECTION-SCREEN OUTPUT. * IF rb_apsrv = 'X'. LOOP AT SCREEN. IF screen-group1 = c_md1. screen-input = 0. ENDIF. IF screen-group1 = c_md2. screen-input = 0. ENDIF. IF screen-group1 = c_md3. screen-input = 0. ENDIF. MODIFY SCREEN. ENDLOOP. * endif. ************************************************************************ * START-OF-SELECTION ************************************************************************ START-OF-SELECTION. *Subroutines for start of selection event PERFORM sub_start_selection. IF rb_apsrv = 'X'. PERFORM sub_upload_data_app. MESSAGE i255. LEAVE LIST-PROCESSING. EXIT. ELSE. PERFORM sub_upload_data. ENDIF. * PERFORM sub_upload_data. * Get characteristic details PERFORM sub_get_cabn. * Get value for characteristics PERFORM sub_get_cawn. ************************************************************** *MOD-008 ************************************************************** PERFORM sub_convert_transaction. END-OF-SELECTION. ************************************************************************ * END OF SELECTION ************************************************************************ * Final message * perform sub_final_message_idoc. * Display errorneous variant tables. PERFORM sub_display_variant. * Display lines with incorrect data PERFORM sub_display_errorlines. *Subroutines for end of selection event PERFORM sub_end_selection. PERFORM sub_clear_source_tables. *&---------------------------------------------------------------------* *& Include ZGTDMI_VARTAB_FORMS02 * *&---------------------------------------------------------------------* *----------------------------------------------------------------------* * PROGRAM DESCRIPTION: Variant Table and Content Upload Interface. * * DEVELOPER: Aveek Ghose * CREATION DATE: 2008-08-25 * RDD NUMBER: DCDD027 * TRANSPORT NUMBER(S): RD2K902769 * *- REVISION HISTORY -------------------------------------------------* * * DEVELOPER: * DATE APPLIED: YYYY-MM-DD * SCR NUMBER: <Scope Change Request ID> * RDD NUMBER: <Toolset Object ID> * TRANSPORT NUMBER(S): * DESCRIPTION: * *----------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Form sub_refresh_variables *&---------------------------------------------------------------------* * This Subroutien Rfreshes all the Global Variables, Internal Tables * and Work Areas usd in this program *----------------------------------------------------------------------* FORM sub_refresh_variables . ********************************** ** REFRESH GLOBAL INTERNAL TABLES ********************************** **************************** * REFRESH GLOBAL WORK AREAS **************************** *Work Area for the structure I_MESSTAB CLEAR: wa_vartab, wa_vartabdate, wa_vardetails, wa_tabinput, wa_dsninput, wa_dsninput, wa_newinput, wa_gnewinput, wa_ginput_data , wa_final, wa_content, wa_contenthd , wa_contentheader, wa_contenttab, wa_content1, wa_contenthd1, wa_contentheader1, wa_contenttab1, wa_e1cuvtm , wa_e1cuv1m , wa_e1datem . ************************************************* * REFRESH INTERNAL TABLES AND WORK AREAS FOR BDC ************************************************* *Internal Table to store the data to display the error message REFRESH i_errormsg[] . *Internal Table to store the data to display the error message REFRESH i_error[]. **Work area to store the data to display the error message CLEAR wa_errormsg. *Internal table which will store data for the error log REFRESH i_error_log[] . *************************** * REFRESH GLOBAL VARIABLES *************************** CLEAR: g_ctr_input_recs, g_ctr_output_recs, g_msg, g_struct_file, g_login, g_phyin , g_fname1, g_repid, g_exit, gx_variant, g_lines , g_save, g_splid , p_login , p_phyin. ************************************************* * REFRESH GLOBAL INTERNAL TABLES FOR ALV DISPLAY ************************************************* *Refresh Internal tables for ALV Field cat REFRESH i_fieldcat_ov[]. REFRESH i_fieldcat_dtl[]. REFRESH i_fieldcat_ov1[]. REFRESH i_events[]. ******************************************** * REFRESH GLOBAL WORK AREAS FOR ALV DISPLAY ******************************************** *Work area for ALV Field layout CLEAR wa_layout. *Work area for Field Cat. Table CLEAR wa_fieldcat. CLEAR: g_cnt_records_read, g_cnt_records_transferred, g_cnt_transactions_read, g_cnt_transactions_transferred. ENDFORM. " sub_refresh_variables *&---------------------------------------------------------------------* *& Form SUB_UPLOAD_DATA *&---------------------------------------------------------------------* FORM sub_upload_data . CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' "#EC * EXPORTING percentage = 0 text = text-038. * Upload from presentation server * perform sub_upload_from_preserver. PERFORM sub_upload_from_appserver1. ENDFORM. " SUB_UPLOAD_DATA *&---------------------------------------------------------------------* *& Form sub_get_physical_file *&---------------------------------------------------------------------* FORM sub_get_physical_file USING p_lfile TYPE fileintern "#EC * p_pfile TYPE localfile. "#EC * IF NOT p_lfile IS INITIAL. CALL FUNCTION 'FILE_GET_NAME' EXPORTING client = sy-mandt logical_filename = p_lfile operating_system = sy-opsys IMPORTING file_name = p_pfile EXCEPTIONS file_not_found = 1 OTHERS = 2. IF sy-subrc NE 0. p_pfile = '' . MESSAGE e237 WITH p_lfile. ENDIF. ENDIF. ENDFORM. " sub_get_physical_file **&--------------------------------------------------------------------- *& Form sub_end_selection *&---------------------------------------------------------------------* FORM sub_end_selection . *Population of Error Log * IF g_error_tab[] IS NOT INITIAL. * PERFORM sub_create_erortab. "#EC * * PERFORM sub_populate_syslog. "tables i_errortab. "#EC * * ENDIF. * IF NOT G_ERROR_TAB[] IS INITIAL. * perform sub_application_log. * ENDIF. ** Population of Application Log* * IF NOT G_ERROR_TAB[] IS INITIAL. * PERFORM sub_app_log_init CHANGING v_log_handle. "#EC * * PERFORM sub_app_log_add USING v_log_handle. "#EC * * PERFORM sub_data_save USING v_log_handle. "#EC * * PERFORM sub_log_show USING v_log_handle. "#EC * * ENDIF. ENDFORM. " sub_end_selection *&---------------------------------------------------------------------* *& Form sub_start_selection *&---------------------------------------------------------------------* FORM sub_start_selection . SET PF-STATUS '/FACTGLB/DMIVART'. "EXCLUDING rt_extab. *Initialization of all the Global Variables PERFORM sub_refresh_variables. CONCATENATE c_sap sy-sysid INTO p_rcvpor. CONCATENATE c_sap sy-sysid INTO p_rcvprn. CALL FUNCTION 'OWN_LOGICAL_SYSTEM_GET' "#EC * IMPORTING own_logical_system = p_rcvprn EXCEPTIONS own_logical_system_not_defined = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE i088. "Invalid Logical System LEAVE LIST-PROCESSING. ENDIF. IF rb_apsrv = c_x. IF p_inpt IS INITIAL. MESSAGE i196. LEAVE LIST-PROCESSING. ENDIF. IF p_inpt1 IS INITIAL. MESSAGE i197. LEAVE LIST-PROCESSING. ENDIF. ENDIF. g_objecttype = '04'. ENDFORM. " sub_start_selection *&---------------------------------------------------------------------* *& Form SUB_GET_PHYSICAL_FILE1 *&---------------------------------------------------------------------* FORM sub_get_physical_file1 USING p_lfile1 TYPE fileintern "#EC * p_pfile1 TYPE localfile. "#EC * IF NOT p_lfile1 IS INITIAL. CALL FUNCTION 'FILE_GET_NAME' EXPORTING client = sy-mandt logical_filename = p_lfile1 operating_system = sy-opsys IMPORTING file_name = p_pfile1 EXCEPTIONS file_not_found = 1 OTHERS = 2. IF sy-subrc NE 0. p_pfile1 = '' . MESSAGE e237 WITH p_lfile1. ENDIF. ENDIF. ENDFORM. " sub_get_physical_file1 *&---------------------------------------------------------------------* *& Form SUB_GET_PHYSICAL_FILE1 *&---------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Form get_internal_char *&---------------------------------------------------------------------* FORM get_internal_char USING p_charac TYPE atnam CHANGING p_cabn TYPE ty_cabn p_vtnam TYPE ty_vtnam. * sort i_cabn by atinn atnam. READ TABLE i_cabn INTO p_cabn WITH KEY atnam = p_charac. " BINARY SEARCH. IF sy-subrc <> 0. p_vtnam-error = c_x. CONCATENATE p_charac text-012 "#EC NOTEXT INTO p_vtnam-reas SEPARATED BY space. * p_vtnam-reas = 'Characteristic name is not valid'. g_error = c_x. CLEAR wa_vtnam. wa_vtnam = p_vtnam. APPEND wa_vtnam TO i_cuv_error. wa_errortab-msgty = c_e. wa_errortab-id = '/factglb/gta_custdev'. wa_errortab-msgno = 008. wa_errortab-par1 = wa_vtnam-reas. INSERT wa_errortab INTO TABLE g_error_tab. * APPEND WA_ERRORTAB TO G_ERROR_TAB. ENDIF. ENDFORM. "get_internal_char *&---------------------------------------------------------------------* *& Form find_char_exist *&---------------------------------------------------------------------* FORM find_char_exist USING p_file TYPE ty_file "#EC * p_vtnam TYPE ty_vtnam "#EC * p_cabn TYPE ty_cabn. "#EC * DATA: l_quot TYPE char2, "#EC NEEDED l_pos TYPE char3. "#EC * IF p_vtnam-error IS INITIAL. ********************************************************* *MOD-012 ********************************************************* * sort i_cuvtab_fld by vtint atinn. READ TABLE i_cuvtab_fld ASSIGNING <fs_cuvtab_fld> WITH KEY vtint = p_vtnam-vtint atinn = p_cabn-atinn BINARY SEARCH. IF sy-subrc = 0. <fs_cuvtab_fld>-exist = c_x. READ TABLE i_charname INTO wa_charname WITH KEY name = p_cabn-atnam. IF sy-subrc = 0. g_tabix = sy-tabix. SHIFT g_tabix LEFT DELETING LEADING space. l_quot = g_tabix+0(2). ENDIF. wa_col_pos-vtint = p_vtnam-vtint. wa_col_pos-vtnam = p_vtnam-vtnam. wa_col_pos-atnam = p_cabn-atnam. wa_col_pos-atinn = p_cabn-atinn. wa_col_pos-field = l_quot. wa_col_pos-vtpos = <fs_cuvtab_fld>-vtpos. APPEND wa_col_pos TO i_col_pos. CLEAR wa_col_pos. ENDIF. ENDIF. ENDFORM. "find_char_exist *&---------------------------------------------------------------------* *& Form transfer_e1cuv1m *&---------------------------------------------------------------------* FORM transfer_e1cuv1m. " USING p_e1cuv1m TYPE e1cuv1m. "#EC * CONSTANTS: c_000001(6) TYPE c VALUE '000001', c_e1cuv1m(7) TYPE c VALUE 'E1CUV1M', c_02(2) TYPE c VALUE '02', c_009(3) TYPE c VALUE '009', c_0001(4) TYPE c VALUE '0001'. CLEAR e1cuv1m. e1cuv1m = wa_e1cuv1m. "#EC NEEDED wa_itab_zedidd40-docnum = wdocnum. wa_itab_zedidd40-segnum = c_000001. wa_itab_zedidd40-segnam = c_e1cuv1m. wa_itab_zedidd40-hlevel = c_02. e1cuv1m-msgfn = c_009. e1cuv1m-vtlineno = c_0001. wa_itab_zedidd40-sdata = e1cuv1m. *append itab_zedidd40. " *e1cuvtm witemno = 0. "#EC NEEDED witemno_gst = 0. "#EC NEEDED . witemno_qst = 0. "#EC NEEDED witemno_new = 0. "#EC NEEDED wsegnum = 1. "#EC NEEDED CLEAR: wa_e1cuv1m. "#EC NEEDED CLEAR: itab_ze1cuv1m. "#EC NEEDED IF p_trfcpt = c_x. wa_curr_edi_dd40 = wa_itab_zedidd40. APPEND wa_curr_edi_dd40 TO gt_curr_edi_dd40. ENDIF. **************************************************** *MOD-009 **************************************************** ENDFORM. "transfer_e1cuv1m *&---------------------------------------------------------------------* *& Form transfer_e1cuvtm *&---------------------------------------------------------------------* FORM transfer_e1cuvtm USING p_e1cuvtm TYPE e1cuvtm. "#EC CALLED CLEAR e1cuvtm. e1cuvtm = p_e1cuvtm. *MOD-009 * perform transfer_record_idoc. *MOD-009 CLEAR edi_dd40. edi_dd40-segnam = g_edidd_segnam. edi_dd40-mandt = edi_dc40-mandt. edi_dd40-docnum = edi_dc40-docnum. ADD 1 TO g_segnum. edi_dd40-segnum = g_segnum. edi_dd40-hlevel = g_edidd_hlevel. edi_dd40-sdata = e1cuvtm. IF p_trfcpt = c_x. wa_curr_edi_dd40 = edi_dd40. APPEND wa_curr_edi_dd40 TO gt_curr_edi_dd40. ENDIF. ENDFORM. "transfer_e1cuvtm "#EC CALLED *&---------------------------------------------------------------------* *& Form transfer_e1datem *&---------------------------------------------------------------------* FORM transfer_e1datem. "#EC CALLED CLEAR e1datem. e1datem-msgfn = '009'. e1datem-key_date = sy-datum. PERFORM transfer_record_idoc. CLEAR edi_dd40. edi_dd40-segnam = g_edidd_segnam. edi_dd40-mandt = edi_dc40-mandt. edi_dd40-docnum = edi_dc40-docnum. ADD 1 TO g_segnum. edi_dd40-segnum = g_segnum. edi_dd40-hlevel = g_edidd_hlevel. edi_dd40-sdata = e1datem. IF p_trfcpt = c_x. wa_curr_edi_dd40 = edi_dd40. APPEND wa_curr_edi_dd40 TO gt_curr_edi_dd40. ENDIF. ENDFORM. "transfer_e1cuvtm "#EC CALLED *&---------------------------------------------------------------------* *& Form errror_line *&---------------------------------------------------------------------* FORM errror_line USING p_vtnam TYPE vtnam p_fieldname TYPE fieldname p_atnam TYPE atnam p_val TYPE atwrt p_row TYPE char5. CLEAR wa_error. wa_error-vtnam = p_vtnam. wa_error-fname = p_fieldname. wa_error-atnam = p_atnam. wa_error-atwrt = p_val. wa_error-row = p_row. APPEND wa_error TO i_error. APPEND wa_error TO itab_error. ENDFORM. "errror_line *&---------------------------------------------------------------------* *& Form delete_duplicates *&---------------------------------------------------------------------* FORM sub_delete_duplicates. "#EC CALLED SORT i_file. DELETE ADJACENT DUPLICATES FROM i_file. ENDFORM. "sub_delete_duplicates "#EC CALLED *&---------------------------------------------------------------------* *& Form pop_dupl *&---------------------------------------------------------------------* FORM pop_dupl USING p_vtnam TYPE vtnam p_slnid TYPE slnid p_atnam TYPE atnam p_val TYPE any. DATA: l_field TYPE fieldname. FIELD-SYMBOLS: <fs_val> TYPE any. * Do not populate value for characteristic Z_VARCOND as it will not be * part of duplicate check IF p_atnam NE c_varcond. * assign p_val to <fs_val>. CLEAR wa_col_pos. ***************************************************** *MOD-012 ***************************************************** * SORT i_col_pos BY vtint * vtnam * atinn * atnam. ****************************************************** *MOD-012 ***************************************************** READ TABLE i_col_pos INTO wa_col_pos WITH KEY vtnam = p_vtnam atnam = p_atnam. * No need to check sy-subrc here CLEAR l_field. READ TABLE i_dupl ASSIGNING <fs_dupl> WITH KEY vtnam = p_vtnam slnid = p_slnid. IF sy-subrc = 0. CONCATENATE '<FS_DUPL>-CHAR' wa_col_pos-field INTO l_field. ASSIGN (l_field) TO <fs_val>. <fs_val> = p_val. ELSE. CLEAR wa_dupl. wa_dupl-vtnam = p_vtnam. wa_dupl-slnid = p_slnid. CONCATENATE 'WA_DUPL-CHAR' wa_col_pos-field INTO l_field. ASSIGN (l_field) TO <fs_val>. <fs_val> = p_val. APPEND wa_dupl TO i_dupl. ENDIF. ENDIF. ENDFORM. "pop_dupl *&---------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Form TRANSFER_RECORD_IDOC *&---------------------------------------------------------------------* FORM transfer_record_idoc . "#EC CALLED * READ TABLE itab_zedidc40 into wa_itab_zedidc40 index 1. CASE g_objecttype. WHEN '03' OR '04'. ********************************************* CLEAR: wa_curr_edi_dd40. ********************************************** *MOD-012 ********************************************** CLEAR edi_dd40. edi_dd40-segnam = g_edidd_segnam. edi_dd40-mandt = edi_dc40-mandt. edi_dd40-docnum = edi_dc40-docnum. ADD 1 TO g_segnum. edi_dd40-segnum = g_segnum. edi_dd40-hlevel = g_edidd_hlevel. edi_dd40-sdata = wa_itab_zedidd40. IF p_trfcpt = c_x. wa_curr_edi_dd40 = wa_itab_zedidd40. APPEND wa_curr_edi_dd40 TO gt_curr_edi_dd40. ENDIF. ********************************************** *MOD-012 ********************************************** * ENDIF. ********************************************** *MOD-012 ********************************************** * ENDIF. ENDCASE. ********************************************** *MOD-012 ********************************************** CLEAR: wa_itab_zedidc40. ********************************************** *MOD-012 ********************************************** ENDFORM. " TRANSFER_RECORD_IDOC "#EC CALLED ********************************************************************* *MOD-008 ********************************************************************* *&---------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Form FILL_EDIDD_SEGMENTS *&---------------------------------------------------------------------* FORM fill_edidd_segments USING p_e1cuv1m TYPE e1cuv1m. "#EC CALLED LOOP AT i_contenttab1 INTO wa_contenttab1. IF sy-tabix = 1. wa_contenttab2 = wa_contenttab1. APPEND wa_contenttab2 TO i_contenttab2. CLEAR: wa_contenttab2. ENDIF. ENDLOOP. LOOP AT i_contenttab1 INTO wa_contenttab1. l_tabix = sy-tabix. IF l_tabix > 1. READ TABLE i_contenttab2 INTO wa_contenttab2 WITH KEY vtnam = wa_contenttab1-vtnam BINARY SEARCH. IF sy-subrc = 0. *--- E1CUV1M-VTCHARACT *if not WA_CONTENTTAB1-VTCHARACT is initial. IF NOT wa_contenttab1-char1 IS INITIAL. * E1CUV1M-VTCHARACT = TAB_CONTENT-ATNAM. **--- E1CUV1M-VTLINENO e1cuv1m-msgfn = c_009. e1cuv1m-vtlineno = c_0001. ** --- E1CUV1M-MSGFN e1cuv1m-vtcharact = wa_contenttab2-char1. e1cuv1m-atwrt = wa_contenttab1-char1. wa_itab_zedidd40-docnum = wdocnum. wa_itab_zedidd40-segnum = c_000001. wa_itab_zedidd40-segnam = p_e1cuv1m. wa_itab_zedidd40-hlevel = c_02. wa_itab_zedidd40-sdata = e1cuv1m. APPEND wa_itab_zedidd40 TO itab_zedidd40. " e1cuvtm witemno = 0. "#EC NEEDED witemno_gst = 0. "#EC NEEDED . witemno_qst = 0. "#EC NEEDED witemno_new = 0. "#EC NEEDED wsegnum = 1. "#EC NEEDED CLEAR: wa_e1cuv1m. "#EC NEEDED CLEAR: itab_ze1cuv1m. "#EC NEEDED ENDIF. IF NOT wa_contenttab1-char2 IS INITIAL. * E1CUV1M-VTCHARACT = TAB_CONTENT-ATNAM. e1cuv1m-msgfn = '009'. e1cuv1m-vtlineno = '0001'. ** --- E1CUV1M-MSGFN e1cuv1m-vtcharact = wa_contenttab2-char2. e1cuv1m-atwrt = wa_contenttab1-char2. wa_itab_zedidd40-docnum = wdocnum. wa_itab_zedidd40-segnum = c_000001. wa_itab_zedidd40-segnam = p_e1cuv1m. wa_itab_zedidd40-hlevel = c_02. wa_itab_zedidd40-sdata = e1cuv1m. APPEND wa_itab_zedidd40 TO itab_zedidd40. " e1cuvtm witemno = 0. "#EC NEEDED witemno_gst = 0. "#EC NEEDED . witemno_qst = 0. "#EC NEEDED witemno_new = 0. "#EC NEEDED wsegnum = 1. "#EC NEEDED CLEAR: wa_e1cuv1m. "#EC NEEDED CLEAR: itab_ze1cuv1m. "#EC NEEDED ENDIF. IF NOT wa_contenttab1-char3 IS INITIAL. * E1CUV1M-VTCHARACT = TAB_CONTENT-ATNAM. e1cuv1m-msgfn = '009'. e1cuv1m-vtlineno = '0001'. ** --- E1CUV1M-MSGFN e1cuv1m-vtcharact = wa_contenttab2-char3. e1cuv1m-atwrt = wa_contenttab1-char3. wa_itab_zedidd40-docnum = wdocnum. wa_itab_zedidd40-segnum = c_000001. wa_itab_zedidd40-segnam = p_e1cuv1m. wa_itab_zedidd40-hlevel = c_02. wa_itab_zedidd40-sdata = e1cuv1m. APPEND wa_itab_zedidd40 TO itab_zedidd40. " e1cuvtm witemno = 0. "#EC NEEDED witemno_gst = 0. "#EC NEEDED . witemno_qst = 0. "#EC NEEDED witemno_new = 0. "#EC NEEDED wsegnum = 1. "#EC NEEDED CLEAR: wa_e1cuv1m. "#EC NEEDED CLEAR: itab_ze1cuv1m. "#EC NEEDED ENDIF. IF NOT wa_contenttab1-char4 IS INITIAL. * E1CUV1M-VTCHARACT = TAB_CONTENT-ATNAM. e1cuv1m-msgfn = '009'. e1cuv1m-vtlineno = '0001'. ** --- E1CUV1M-MSGFN e1cuv1m-vtcharact = wa_contenttab2-char4. e1cuv1m-atwrt = wa_contenttab1-char4. wa_itab_zedidd40-docnum = wdocnum. wa_itab_zedidd40-segnum = c_000001. wa_itab_zedidd40-segnam = p_e1cuv1m. wa_itab_zedidd40-hlevel = c_02. wa_itab_zedidd40-sdata = e1cuv1m. APPEND wa_itab_zedidd40 TO itab_zedidd40. " e1cuvtm witemno = 0. "#EC NEEDED witemno_gst = 0. "#EC NEEDED . witemno_qst = 0. "#EC NEEDED witemno_new = 0. "#EC NEEDED wsegnum = 1. "#EC NEEDED CLEAR: wa_e1cuv1m. "#EC NEEDED CLEAR: itab_ze1cuv1m. "#EC NEEDED ENDIF. IF NOT wa_contenttab1-char5 IS INITIAL. * E1CUV1M-VTCHARACT = TAB_CONTENT-ATNAM. e1cuv1m-msgfn = '009'. e1cuv1m-vtlineno = '0001'. ** --- E1CUV1M-MSGFN e1cuv1m-vtcharact = wa_contenttab2-char5. e1cuv1m-atwrt = wa_contenttab1-char5. wa_itab_zedidd40-docnum = wdocnum. wa_itab_zedidd40-segnum = c_000001. wa_itab_zedidd40-segnam = p_e1cuv1m. wa_itab_zedidd40-hlevel = c_02. wa_itab_zedidd40-sdata = e1cuv1m. APPEND wa_itab_zedidd40 TO itab_zedidd40. " e1cuvtm witemno = 0. "#EC NEEDED witemno_gst = 0. "#EC NEEDED . witemno_qst = 0. "#EC NEEDED witemno_new = 0. "#EC NEEDED wsegnum = 1. "#EC NEEDED CLEAR: wa_e1cuv1m. "#EC NEEDED CLEAR: itab_ze1cuv1m. "#EC NEEDED ENDIF. IF NOT wa_contenttab1-char6 IS INITIAL. * E1CUV1M-VTCHARACT = TAB_CONTENT-ATNAM. e1cuv1m-msgfn = '009'. e1cuv1m-vtlineno = '0001'. ** --- E1CUV1M-MSGFN e1cuv1m-vtcharact = wa_contenttab2-char6. e1cuv1m-atwrt = wa_contenttab1-char6. wa_itab_zedidd40-docnum = wdocnum. wa_itab_zedidd40-segnum = c_000001. wa_itab_zedidd40-segnam = p_e1cuv1m. wa_itab_zedidd40-hlevel = c_02. wa_itab_zedidd40-sdata = e1cuv1m. APPEND wa_itab_zedidd40 TO itab_zedidd40. " e1cuvtm witemno = 0. "#EC NEEDED witemno_gst = 0. "#EC NEEDED . witemno_qst = 0. "#EC NEEDED witemno_new = 0. "#EC NEEDED wsegnum = 1. "#EC NEEDED CLEAR: wa_e1cuv1m. "#EC NEEDED CLEAR: itab_ze1cuv1m. "#EC NEEDED ENDIF. IF NOT wa_contenttab1-char7 IS INITIAL. * E1CUV1M-VTCHARACT = TAB_CONTENT-ATNAM. e1cuv1m-msgfn = '009'. e1cuv1m-vtlineno = '0001'. ** --- E1CUV1M-MSGFN e1cuv1m-vtcharact = wa_contenttab2-char7. e1cuv1m-atwrt = wa_contenttab1-char7. wa_itab_zedidd40-docnum = wdocnum. wa_itab_zedidd40-segnum = c_000001. wa_itab_zedidd40-segnam = p_e1cuv1m. wa_itab_zedidd40-hlevel = c_02. wa_itab_zedidd40-sdata = e1cuv1m. APPEND wa_itab_zedidd40 TO itab_zedidd40. " e1cuvtm witemno = 0. "#EC NEEDED witemno_gst = 0. "#EC NEEDED . witemno_qst = 0. "#EC NEEDED witemno_new = 0. "#EC NEEDED wsegnum = 1. "#EC NEEDED CLEAR: wa_e1cuv1m. "#EC NEEDED CLEAR: itab_ze1cuv1m. "#EC NEEDED ENDIF. IF NOT wa_contenttab1-char8 IS INITIAL. * E1CUV1M-VTCHARACT = TAB_CONTENT-ATNAM. e1cuv1m-msgfn = '009'. e1cuv1m-vtlineno = '0001'. ** --- E1CUV1M-MSGFN e1cuv1m-vtcharact = wa_contenttab2-char8. e1cuv1m-atwrt = wa_contenttab1-char8. wa_itab_zedidd40-docnum = wdocnum. wa_itab_zedidd40-segnum = c_000001. wa_itab_zedidd40-segnam = p_e1cuv1m. wa_itab_zedidd40-hlevel = c_02. wa_itab_zedidd40-sdata = e1cuv1m. APPEND wa_itab_zedidd40 TO itab_zedidd40. " e1cuvtm witemno = 0. "#EC NEEDED witemno_gst = 0. "#EC NEEDED . witemno_qst = 0. "#EC NEEDED witemno_new = 0. "#EC NEEDED wsegnum = 1. "#EC NEEDED CLEAR: wa_e1cuv1m. "#EC NEEDED CLEAR: itab_ze1cuv1m. "#EC NEEDED ENDIF. IF NOT wa_contenttab1-char9 IS INITIAL. * E1CUV1M-VTCHARACT = TAB_CONTENT-ATNAM. e1cuv1m-msgfn = '009'. e1cuv1m-vtlineno = '0001'. ** --- E1CUV1M-MSGFN e1cuv1m-vtcharact = wa_contenttab2-char9. e1cuv1m-atwrt = wa_contenttab1-char9. wa_itab_zedidd40-docnum = wdocnum. wa_itab_zedidd40-segnum = c_000001. wa_itab_zedidd40-segnam = p_e1cuv1m. wa_itab_zedidd40-hlevel = c_02. wa_itab_zedidd40-sdata = e1cuv1m. APPEND wa_itab_zedidd40 TO itab_zedidd40. " e1cuvtm witemno = 0. "#EC NEEDED witemno_gst = 0. "#EC NEEDED . witemno_qst = 0. "#EC NEEDED witemno_new = 0. "#EC NEEDED wsegnum = 1. "#EC NEEDED CLEAR: wa_e1cuv1m. "#EC NEEDED CLEAR: itab_ze1cuv1m. "#EC NEEDED ENDIF. IF NOT wa_contenttab1-char10 IS INITIAL. * E1CUV1M-VTCHARACT = TAB_CONTENT-ATNAM. e1cuv1m-msgfn = '009'. e1cuv1m-vtlineno = '0001'. ** --- E1CUV1M-MSGFN e1cuv1m-vtcharact = wa_contenttab2-char10. e1cuv1m-atwrt = wa_contenttab1-char10. wa_itab_zedidd40-docnum = wdocnum. wa_itab_zedidd40-segnum = c_000001. wa_itab_zedidd40-segnam = p_e1cuv1m. wa_itab_zedidd40-hlevel = c_02. wa_itab_zedidd40-sdata = e1cuv1m. APPEND wa_itab_zedidd40 TO itab_zedidd40. witemno = 0. "#EC NEEDED witemno_gst = 0. "#EC NEEDED . witemno_qst = 0. "#EC NEEDED witemno_new = 0. "#EC NEEDED wsegnum = 1. "#EC NEEDED CLEAR: wa_e1cuv1m. "#EC NEEDED CLEAR: itab_ze1cuv1m. "#EC NEEDED ENDIF. IF NOT wa_contenttab1-char11 IS INITIAL. * E1CUV1M-VTCHARACT = TAB_CONTENT-ATNAM. e1cuv1m-msgfn = '009'. e1cuv1m-vtlineno = '0001'. ** --- E1CUV1M-MSGFN e1cuv1m-vtcharact = wa_contenttab2-char11. e1cuv1m-atwrt = wa_contenttab1-char11. wa_itab_zedidd40-docnum = wdocnum. wa_itab_zedidd40-segnum = c_000001. wa_itab_zedidd40-segnam = p_e1cuv1m. wa_itab_zedidd40-hlevel = c_02. wa_itab_zedidd40-sdata = e1cuv1m. APPEND wa_itab_zedidd40 TO itab_zedidd40. " e1cuvtm witemno = 0. "#EC NEEDED witemno_gst = 0. "#EC NEEDED . witemno_qst = 0. "#EC NEEDED witemno_new = 0. "#EC NEEDED wsegnum = 1. "#EC NEEDED CLEAR: wa_e1cuv1m. "#EC NEEDED CLEAR: itab_ze1cuv1m. "#EC NEEDED ENDIF. IF NOT wa_contenttab1-char12 IS INITIAL. * E1CUV1M-VTCHARACT = TAB_CONTENT-ATNAM. e1cuv1m-msgfn = '009'. e1cuv1m-vtlineno = '0001'. ** --- E1CUV1M-MSGFN e1cuv1m-vtcharact = wa_contenttab2-char12. e1cuv1m-atwrt = wa_contenttab1-char12. wa_itab_zedidd40-docnum = wdocnum. wa_itab_zedidd40-segnum = c_000001. wa_itab_zedidd40-segnam = p_e1cuv1m. wa_itab_zedidd40-hlevel = c_02. wa_itab_zedidd40-sdata = e1cuv1m. APPEND wa_itab_zedidd40 TO itab_zedidd40. " e1cuvtm witemno = 0. "#EC NEEDED witemno_gst = 0. "#EC NEEDED . witemno_qst = 0. "#EC NEEDED witemno_new = 0. "#EC NEEDED wsegnum = 1. "#EC NEEDED CLEAR: wa_e1cuv1m. "#EC NEEDED CLEAR: itab_ze1cuv1m. "#EC NEEDED ENDIF. IF NOT wa_contenttab1-char13 IS INITIAL. * E1CUV1M-VTCHARACT = TAB_CONTENT-ATNAM. e1cuv1m-msgfn = '009'. e1cuv1m-vtlineno = '0001'. ** --- E1CUV1M-MSGFN e1cuv1m-vtcharact = wa_contenttab2-char13. e1cuv1m-atwrt = wa_contenttab1-char13. wa_itab_zedidd40-docnum = wdocnum. wa_itab_zedidd40-segnum = c_000001. wa_itab_zedidd40-segnam = p_e1cuv1m. wa_itab_zedidd40-hlevel = c_02. wa_itab_zedidd40-sdata = e1cuv1m. APPEND wa_itab_zedidd40 TO itab_zedidd40. " e1cuvtm witemno = 0. "#EC NEEDED witemno_gst = 0. "#EC NEEDED . witemno_qst = 0. "#EC NEEDED witemno_new = 0. "#EC NEEDED wsegnum = 1. "#EC NEEDED CLEAR: wa_e1cuv1m. "#EC NEEDED CLEAR: itab_ze1cuv1m. "#EC NEEDED ENDIF. IF NOT wa_contenttab1-char14 IS INITIAL. * E1CUV1M-VTCHARACT = TAB_CONTENT-ATNAM. e1cuv1m-msgfn = '009'. e1cuv1m-vtlineno = '0001'. ** --- E1CUV1M-MSGFN e1cuv1m-vtcharact = wa_contenttab2-char14. e1cuv1m-atwrt = wa_contenttab1-char14. wa_itab_zedidd40-docnum = wdocnum. wa_itab_zedidd40-segnum = c_000001. wa_itab_zedidd40-segnam = p_e1cuv1m. wa_itab_zedidd40-hlevel = c_02. wa_itab_zedidd40-sdata = e1cuv1m. APPEND wa_itab_zedidd40 TO itab_zedidd40. " e1cuvtm witemno = 0. "#EC NEEDED witemno_gst = 0. "#EC NEEDED . witemno_qst = 0. "#EC NEEDED witemno_new = 0. "#EC NEEDED wsegnum = 1. "#EC NEEDED CLEAR: wa_e1cuv1m. "#EC NEEDED CLEAR: itab_ze1cuv1m. "#EC NEEDED ENDIF. IF NOT wa_contenttab1-char15 IS INITIAL. * E1CUV1M-VTCHARACT = TAB_CONTENT-ATNAM. e1cuv1m-msgfn = '009'. e1cuv1m-vtlineno = '0001'. ** --- E1CUV1M-MSGFN e1cuv1m-vtcharact = wa_contenttab2-char15. e1cuv1m-atwrt = wa_contenttab1-char15. wa_itab_zedidd40-docnum = wdocnum. wa_itab_zedidd40-segnum = c_000001. wa_itab_zedidd40-segnam = p_e1cuv1m. wa_itab_zedidd40-hlevel = c_02. wa_itab_zedidd40-sdata = e1cuv1m. APPEND wa_itab_zedidd40 TO itab_zedidd40. " e1cuvtm witemno = 0. "#EC NEEDED witemno_gst = 0. "#EC NEEDED . witemno_qst = 0. "#EC NEEDED witemno_new = 0. "#EC NEEDED wsegnum = 1. "#EC NEEDED CLEAR: wa_e1cuv1m. "#EC NEEDED CLEAR: itab_ze1cuv1m. "#EC NEEDED ENDIF. CLEAR: wa_contenttab2. ENDIF. CLEAR: l_tabix. ENDIF. CLEAR: wa_contenttab1. ENDLOOP. PERFORM transfer_record_idoc. ENDFORM. " FILL_EDIDD_SEGMENTS *&---------------------------------------------------------------------* *& Form SUB_GET_CABN *&---------------------------------------------------------------------* FORM sub_get_cabn . DATA: i_cabn_char TYPE STANDARD TABLE OF ty_content INITIAL SIZE 0. "#EC NEEDED DATA: wa_cabn_char TYPE ty_content. READ TABLE i_contenttab1 INTO wa_contenttab1 INDEX 1. MOVE-CORRESPONDING wa_contenttab1 TO wa_cabn_char. APPEND wa_cabn_char TO i_cabn_char. CLEAR: wa_cabn_char. SELECT atinn atnam atfor atson atprt atprr atprf anzdz FROM cabn INTO TABLE i_cabn FOR ALL ENTRIES IN i_cabn_char WHERE ( atnam = i_cabn_char-char1 OR atnam = i_cabn_char-char2 OR atnam = i_cabn_char-char3 OR atnam = i_cabn_char-char4 OR atnam = i_cabn_char-char5 OR atnam = i_cabn_char-char6 OR atnam = i_cabn_char-char7 OR atnam = i_cabn_char-char8 OR atnam = i_cabn_char-char9 OR atnam = i_cabn_char-char10 OR atnam = i_cabn_char-char11 OR atnam = i_cabn_char-char12 OR atnam = i_cabn_char-char13 OR atnam = i_cabn_char-char14 OR atnam = i_cabn_char-char15 ). IF sy-subrc = 0. SORT i_cabn BY atinn atnam. DELETE i_cabn WHERE atnam IS INITIAL. i_cabn_temp[] = i_cabn[]. i_cabn_atinn[] = i_cabn[]. * Sort IT by internal characteristic number SORT i_cabn_atinn BY atinn atnam. DELETE ADJACENT DUPLICATES FROM i_cabn_atinn COMPARING atinn atnam. DELETE i_cabn_temp WHERE atson IS NOT INITIAL AND atprt IS NOT INITIAL AND atprr IS NOT INITIAL AND atprf IS NOT INITIAL. ENDIF. ENDFORM. " SUB_GET_CABN *&---------------------------------------------------------------------* *& Form SUB_GET_CAWN *&---------------------------------------------------------------------* FORM sub_get_cawn . IF NOT i_cabn_temp[] IS INITIAL. SELECT atinn atzhl atwrt atflv lkenz FROM cawn INTO TABLE i_cawn FOR ALL ENTRIES IN i_cabn_temp WHERE atinn = i_cabn_temp-atinn. IF sy-subrc = 0. i_cawn_c[] = i_cawn[]. DELETE i_cawn_c WHERE atwrt IS INITIAL. SORT i_cawn_c BY atinn atwrt. i_cawn_n = i_cawn. DELETE i_cawn_n WHERE atflv IS INITIAL. SORT i_cawn_n BY atinn atflv. i_cawn_i = i_cawn. SORT i_cawn_i BY atinn. DELETE ADJACENT DUPLICATES FROM i_cawn_i COMPARING atinn. ENDIF. ENDIF. ENDFORM. " SUB_GET_CAWN *&---------------------------------------------------------------------* *& Form SUB_CONVERT_TRANSACTION *&---------------------------------------------------------------------* FORM sub_convert_transaction . DATA: l_table TYPE apitabl. "#EC * DATA: l_change_number TYPE aennr. "#EC * DATA: l_dlock TYPE dlock, "#EC * itab_vt_basic_data TYPE vtbasdat, "#EC * l_date TYPE vondatx, "#EC * l_line_no TYPE i. "#EC * DATA: wa_var_tab_entries TYPE vtentries. "#EC * DATA: itab_var_tab_entries TYPE STANDARD TABLE OF vtentries. "#EC * PERFORM sub_clear_tables. ********************************************************************** *MOD-012 ********************************************************************** ********************************************************************* **MOD-012 ********************************************************************* LOOP AT i_contentheader1 INTO wa_contentheader1. CALL FUNCTION 'CARD_TABLE_READ_STRUCTURE' EXPORTING var_tab = wa_contentheader1-vtnam change_no = l_change_number date = l_date IMPORTING basic_data = itab_vt_basic_data EXCEPTIONS error = 1 OTHERS = 2. CHECK sy-subrc IS INITIAL. CALL FUNCTION 'CARD_TABLE_READ_ENTRIES' "#EC * EXPORTING var_table = wa_contentheader1-vtnam change_no = l_change_number date = l_date TABLES var_tab_entries = itab_var_tab_entries EXCEPTIONS error = 1 OTHERS = 2. ENDLOOP. *********************************************************************** *MOD-012 ************************************************************************ ** SORT itab_var_tab_entries BY vtcharact vtvalue. LOOP AT i_contenttab1 INTO wa_contenttab1. IF sy-tabix = 1. CONTINUE. ENDIF. IF wa_contenttab1-char1 NE ' '. READ TABLE itab_var_tab_entries INTO wa_var_tab_entries WITH KEY vtvalue = wa_contenttab1-char1 BINARY SEARCH. IF sy-subrc = 0. wa_contenttab1-flag = c_y. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. ELSE. IF wa_var_tab_entries-vtcharact = c_varcond. wa_contenttab1-flag = c_y. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. ELSE. wa_contenttab1-flag = c_z. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. CONTINUE. ENDIF. ENDIF. ENDIF. IF wa_contenttab1-char2 NE ' '. READ TABLE itab_var_tab_entries INTO wa_var_tab_entries WITH KEY vtvalue = wa_contenttab1-char2. IF sy-subrc = 0. wa_contenttab1-flag = c_y. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. ELSE. IF wa_var_tab_entries-vtcharact = c_varcond. wa_contenttab1-flag = c_y. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. ELSE. wa_contenttab1-flag = c_z. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. CONTINUE. ENDIF. ENDIF. ENDIF. IF wa_contenttab1-char3 NE ' '. READ TABLE itab_var_tab_entries INTO wa_var_tab_entries WITH KEY vtvalue = wa_contenttab1-char3. IF sy-subrc = 0. wa_contenttab1-flag = c_y. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. ELSE. IF wa_var_tab_entries-vtcharact = c_varcond. wa_contenttab1-flag = c_y. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. ELSE. wa_contenttab1-flag = c_z. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. CONTINUE. ENDIF. ENDIF. ENDIF. IF wa_contenttab1-char4 NE ' '. READ TABLE itab_var_tab_entries INTO wa_var_tab_entries WITH KEY vtvalue = wa_contenttab1-char4. IF sy-subrc = 0. wa_contenttab1-flag = c_y. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. ELSE. IF wa_var_tab_entries-vtcharact = c_varcond. wa_contenttab1-flag = c_y. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. ELSE. wa_contenttab1-flag = c_z. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. CONTINUE. ENDIF. ENDIF. ENDIF. IF wa_contenttab1-char5 NE ' '. READ TABLE itab_var_tab_entries INTO wa_var_tab_entries WITH KEY vtvalue = wa_contenttab1-char5. IF sy-subrc = 0. wa_contenttab1-flag = c_y. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. ELSE. IF wa_var_tab_entries-vtcharact = c_varcond. wa_contenttab1-flag = c_y. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. ELSE. wa_contenttab1-flag = c_z. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. CONTINUE. ENDIF. ENDIF. ENDIF. IF wa_contenttab1-char6 NE ' '. READ TABLE itab_var_tab_entries INTO wa_var_tab_entries WITH KEY vtvalue = wa_contenttab1-char6. IF sy-subrc = 0. wa_contenttab1-flag = c_y. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. ELSE. IF wa_var_tab_entries-vtcharact = c_varcond. wa_contenttab1-flag = c_y. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. ELSE. wa_contenttab1-flag = c_z. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. CONTINUE. ENDIF. ENDIF. ENDIF. IF wa_contenttab1-char7 NE ' '. READ TABLE itab_var_tab_entries INTO wa_var_tab_entries WITH KEY vtvalue = wa_contenttab1-char7. IF sy-subrc = 0. wa_contenttab1-flag = c_y. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. ELSE. IF wa_var_tab_entries-vtcharact = c_varcond. wa_contenttab1-flag = c_y. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. ELSE. wa_contenttab1-flag = c_z. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. CONTINUE. ENDIF. ENDIF. ENDIF. IF wa_contenttab1-char8 NE ' '. READ TABLE itab_var_tab_entries INTO wa_var_tab_entries WITH KEY vtvalue = wa_contenttab1-char8. IF sy-subrc = 0. wa_contenttab1-flag = c_y. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. ELSE. IF wa_var_tab_entries-vtcharact = c_varcond. wa_contenttab1-flag = c_y. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. ELSE. wa_contenttab1-flag = c_z. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. CONTINUE. ENDIF. ENDIF. ENDIF. IF wa_contenttab1-char9 NE ' '. READ TABLE itab_var_tab_entries INTO wa_var_tab_entries WITH KEY vtvalue = wa_contenttab1-char9. IF sy-subrc = 0. wa_contenttab1-flag = c_y. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. ELSE. IF wa_var_tab_entries-vtcharact = c_varcond. wa_contenttab1-flag = c_y. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. ELSE. wa_contenttab1-flag = c_z. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. CONTINUE. ENDIF. ENDIF. ENDIF. IF wa_contenttab1-char10 NE ' '. READ TABLE itab_var_tab_entries INTO wa_var_tab_entries WITH KEY vtvalue = wa_contenttab1-char10. IF sy-subrc = 0. wa_contenttab1-flag = c_y. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. ELSE. IF wa_var_tab_entries-vtcharact = c_varcond. wa_contenttab1-flag = c_y. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. ELSE. wa_contenttab1-flag = c_z. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. CONTINUE. ENDIF. ENDIF. ENDIF. IF wa_contenttab1-char11 NE ' '. READ TABLE itab_var_tab_entries INTO wa_var_tab_entries WITH KEY vtvalue = wa_contenttab1-char11. IF sy-subrc = 0. wa_contenttab1-flag = c_y. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. ELSE. IF wa_var_tab_entries-vtcharact = c_varcond. wa_contenttab1-flag = c_y. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. ELSE. wa_contenttab1-flag = c_z. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. CONTINUE. ENDIF. ENDIF. ENDIF. IF wa_contenttab1-char12 NE ' '. READ TABLE itab_var_tab_entries INTO wa_var_tab_entries WITH KEY vtvalue = wa_contenttab1-char12. IF sy-subrc = 0. wa_contenttab1-flag = c_y. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. ELSE. IF wa_var_tab_entries-vtcharact = c_varcond. wa_contenttab1-flag = c_y. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. ELSE. wa_contenttab1-flag = c_z. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. CONTINUE. ENDIF. ENDIF. ENDIF. IF wa_contenttab1-char13 NE ' '. READ TABLE itab_var_tab_entries INTO wa_var_tab_entries WITH KEY vtvalue = wa_contenttab1-char13. IF sy-subrc = 0. wa_contenttab1-flag = c_y. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. ELSE. IF wa_var_tab_entries-vtcharact = c_varcond. wa_contenttab1-flag = c_y. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. ELSE. wa_contenttab1-flag = c_z. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. CONTINUE. ENDIF. ENDIF. ENDIF. IF wa_contenttab1-char14 NE ' '. READ TABLE itab_var_tab_entries INTO wa_var_tab_entries WITH KEY vtvalue = wa_contenttab1-char14. IF sy-subrc = 0. wa_contenttab1-flag = c_y. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. ELSE. IF wa_var_tab_entries-vtcharact = c_varcond. wa_contenttab1-flag = c_y. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. ELSE. wa_contenttab1-flag = c_z. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. CONTINUE. ENDIF. ENDIF. ENDIF. IF wa_contenttab1-char15 NE ' '. READ TABLE itab_var_tab_entries INTO wa_var_tab_entries WITH KEY vtvalue = wa_contenttab1-char15. IF sy-subrc = 0. wa_contenttab1-flag = c_y. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. ELSE. IF wa_var_tab_entries-vtcharact = c_varcond. wa_contenttab1-flag = c_y. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. ELSE. wa_contenttab1-flag = c_z. MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. CONTINUE. ENDIF. ENDIF. ENDIF. ENDLOOP. * Delete i_contenttab1 where flag = C_Y. * I_CONTENTTAB3[] = I_CONTENTTAB1[]. * SORT I_CONTENTTAB3 BY VTNAM. DELETE i_contenttab3 WHERE vtnam IS INITIAL. * DELETE ADJACENT DUPLICATES FROM I_CONTENTTAB1. CLEAR: l_lines. DESCRIBE TABLE i_contenttab3 LINES l_lines. IF l_lines = 1. g_error = c_x. CLEAR wa_vtnam. MESSAGE i164. LEAVE LIST-PROCESSING. ENDIF. ********************************************************************** *MOD-0112 ********************************************************************** * perform sub_clear_tables. ********************************************************************** *MOD-012 ********************************************************************** * IF G_ERROR <> C_X. ********************************************************************** *MOD-009 ********************************************************************** CLEAR: wa_contentheader1. LOOP AT i_contentheader1 INTO wa_contentheader1. * perform sub_convert_0001. " E1CUVTM * perform sub_convert_0002. " E1DATEM' ************************************************************************ ** ***MOD-009 ************************************************************************ ** READ TABLE i_contenttab1 INTO wa_contenttab1 INDEX 1. IF wa_contenttab1-vtnam NE wa_contentheader1-vtnam. MOVE-CORRESPONDING wa_contenttab1 TO wa_file. IF ( wa_file-flag = 'X' OR wa_file-flag = 'x' ) . ***************************************************** *MOD-012 *************************************************** cnt_i = 18. g_raw = wa_file. DO 15 TIMES. wa_charname-name = g_raw+cnt_i(30). APPEND wa_charname TO i_charname. cnt_i = cnt_i + 30. ENDDO. ***************************************************** *MOD-012 ***************************************************** APPEND wa_file TO i_file_tmp. CLEAR: wa_file. * Check duplicate columns for characteristics * PERFORM sub_dupl_columns. ENDIF. ENDIF. ************************************************************************ ** ***MOD-009 ************************************************************************ ** LOOP AT i_contenttab1 INTO wa_contenttab1 WHERE vtnam = wa_contentheader1-vtnam. PERFORM sub_convert_0003. " E1CUV1M CLEAR: wa_contenttab1. ENDLOOP. * Get internal variant table number, store in internal table I_CUVTAB PERFORM sub_get_cuvtab. * Get unique number for variant table from table /FACTGLB/DVNT_MA PERFORM sub_get_vnt_ma. * Get internal table fields and their order PERFORM sub_get_cuvtab_fld. * Find out if check is required for characteristic, if no value * exists in CAWN, no check is required * IF g_error <> 'X'. PERFORM sub_check_cabn. * Get already uploaded characteristic values (Character, date, time) PERFORM sub_get_cuvtab_valc. * Get already uploaded characteristic values (Numeric) PERFORM sub_get_cuvtab_valn. * Find table name and characteristic names PERFORM sub_validate_table_fields. * Check if all characteristics of table are defined in file PERFORM sub_charac_exist. * Validate characteristic values PERFORM sub_validate_charac_values. * IF g_error <> c_x. IF rb_idoc = c_x. PERFORM sub_create_idocs. ENDIF. MESSAGE i260. * LEAVE LIST-PROCESSING. * ENDIF. PERFORM sub_clear_variables. DELETE i_contenttab1 WHERE vtnam = wa_contentheader1-vtnam. * ENDIF. ENDLOOP. ENDFORM. " SUB_CONVERT_TRANSACTION *&---------------------------------------------------------------------* *& Form SUB_CREATE_IDOCS *&---------------------------------------------------------------------* FORM sub_create_idocs . * CONSTANTS: C_VTMMAS TYPE EDI_MESTYP VALUE 'VTMMAS'. * CONSTANTS: C_EDI_DC40(8) TYPE C VALUE 'EDI_DC40'. * CONSTANTS: C_2(1) TYPE C VALUE '2'. * CONSTANTS: C_LS(2) TYPE C VALUE 'LS'. * CONSTANTS: C_VTMMAS02(8) TYPE C VALUE 'VTMMAS02'. * CONSTANTS: l_c_x TYPE char1 VALUE 'X'. "#EC * ** Local Data Declaration * DATA: l_logsys TYPE logsys, "#EC * * l_i_model TYPE TABLE OF bdi_mmodel, "#EC * * l_rec_model TYPE bdi_mmodel, "#EC * * l_rec_edidc TYPE edidc, "#EC * * l_rec_edidd TYPE edidd, "#EC * * l_v_cnt TYPE i VALUE 0. "#EC * * * DATA: wa_i_mmodel type bdi_mmodel. "#EC * * * DATA: * l_text(132), "#EC * * l_lines TYPE i, "#EC * * l_idoc_nr_from TYPE i, "#EC * * l_idoc_nr_to TYPE i, "#EC * * l_idoc_nr_from_char(10) type c, "#EC * * l_idoc_nr_to_char(10) type c, "#EC * * l_edkp1 type edkp1, "#EC * * l_edk21 type edk21. "#EC * * DATA: * l_flg_tranferred_something. "#EC * * * FIELD-SYMBOLS: * <buffer>. "#EC * TYPES: BEGIN OF ty_dd03l, tabname TYPE tabname, fieldname TYPE fieldname, END OF ty_dd03l. DATA: itab_dd03l TYPE STANDARD TABLE OF ty_dd03l. "#EC * DATA: wa_dd03l TYPE ty_dd03l. "#EC * *************************************************************** *MOD-015 *************************************************************** SELECT SINGLE dbtab_name "#EC * INTO l_tabname FROM cuvtab WHERE vtnam = wa_contentheader1-vtnam. CHECK sy-subrc = 0. IF NOT l_tabname IS INITIAL. PERFORM get_structure. PERFORM create_dynamic_itab. PERFORM get_data. ENDIF. ENDFORM. " SUB_CREATE_IDOCS *&---------------------------------------------------------------------* *& Form SUB_START_IDOC_PROCESS *&---------------------------------------------------------------------* *FORM SUB_START_IDOC_PROCESS . * * CONSTANTS: C_I(1) TYPE C VALUE 'I'. * CONSTANTS: C_EQ(2) TYPE C VALUE 'EQ'. * CONSTANTS: C_VTMMAS(6) TYPE C VALUE 'VTMMAS'. * ** RBDAPP01 aufrufen * R_CREDAT-SIGN = C_I. * R_CREDAT-OPTION = C_EQ. * R_CREDAT-LOW = SY-DATUM. * APPEND R_CREDAT. * * R_CRETIM-SIGN = C_I. * R_CRETIM-OPTION = C_EQ. * R_CRETIM-LOW = SY-UZEIT. * APPEND R_CRETIM. * * R_MESTYP-SIGN = C_I. * R_MESTYP-OPTION = C_EQ. * R_MESTYP-LOW = C_VTMMAS. * APPEND R_MESTYP. * * LOOP AT itab_zedidc40 into wa_itab_zedidc40. * R_SNDPRT-SIGN = C_I. * R_SNDPRT-OPTION = C_EQ. * R_SNDPRT-LOW = wa_itab_zedidc40-sndprt. * APPEND R_SNDPRT. * * R_SNDPRN-SIGN = C_I. * R_SNDPRN-OPTION = C_EQ. * R_SNDPRN-LOW = wa_itab_zedidc40-sndprn. * APPEND R_SNDPRN. * ENDLOOP. * * SUBMIT RBDAPP01 "#EC CI_SUBMIT * WITH CREDAT IN R_CREDAT * WITH CRETIM IN R_CRETIM * WITH MESTYP IN R_MESTYP * WITH SNDPRN IN R_SNDPRN * WITH SNDPRT IN R_SNDPRT * VIA SELECTION-SCREEN * AND RETURN. * * ** Rufe RBDINPUT * R_MESTYP-SIGN = C_I. * R_MESTYP-OPTION = C_EQ. * R_MESTYP-LOW = L_MESSTYPE. * APPEND R_MESTYP. * * SUBMIT RBDINPUT "#EC CI_SUBMIT * VIA SELECTION-SCREEN * AND RETURN. * * ***CALL TRANSACTION 'WE02' * SUBMIT RSEIDOC2 "#EC CI_SUBMIT * WITH CREDAT EQ R_CREDAT-LOW SIGN C_I * WITH MESTYP EQ C_VTMMAS SIGN 'I' * AND RETURN. * * REFRESH: R_CREDAT, * R_CRETIM, * R_MESTYP. * * *ENDFORM. " SUB_START_IDOC_PROCESS **&--------------------------------------------------------------------- ** *& Form SUB_UPLOAD_FROM_APPSERVER *&---------------------------------------------------------------------* FORM sub_upload_from_appserver . DATA: l_timestamp TYPE timestamp. DATA: l_time(15) TYPE c. DATA: wa_dvnt_tm TYPE zdvnt_tm. DATA: l_counter TYPE numc04. SELECT MAX( counter ) INTO l_counter FROM zdvnt_tm. l_counter = l_counter + 1. GET TIME STAMP FIELD l_timestamp. WRITE l_timestamp TO l_time. CONCATENATE p_fname sy-uname l_time '.txt' INTO p_fname. wa_dvnt_tm-mandt = sy-mandt. wa_dvnt_tm-bname = sy-uname. wa_dvnt_tm-counter = l_counter. wa_dvnt_tm-filetype = c_x. wa_dvnt_tm-fileintern = p_fname. wa_dvnt_tm-date_time_stmp = l_time. INSERT INTO zdvnt_tm VALUES wa_dvnt_tm. GET TIME STAMP FIELD l_timestamp. WRITE l_timestamp TO l_time. CONCATENATE p_fname1 sy-uname l_time '.txt' INTO p_fname1. wa_dvnt_tm-mandt = sy-mandt. wa_dvnt_tm-bname = sy-uname. wa_dvnt_tm-counter = l_counter. wa_dvnt_tm-filetype = c_y. wa_dvnt_tm-fileintern = p_fname1. wa_dvnt_tm-date_time_stmp = l_time. INSERT INTO zdvnt_tm VALUES wa_dvnt_tm. CLEAR: l_counter. IF rb_apsrv = 'X'. OPEN DATASET p_fname FOR OUTPUT IN TEXT MODE ENCODING DEFAULT. LOOP AT i_input_data INTO wa_input_data. IF sy-subrc = 0. TRANSFER wa_input_data TO p_fname. ENDIF. ENDLOOP. OPEN DATASET p_fname1 FOR OUTPUT IN TEXT MODE ENCODING DEFAULT. LOOP AT i_input_data1 INTO wa_input_data1. IF sy-subrc = 0. TRANSFER wa_input_data1 TO p_fname1. ENDIF. ENDLOOP. ENDIF. ENDFORM. " SUB_UPLOAD_FROM_APPSERVER *&---------------------------------------------------------------------* *& Form SUB_UPLOAD_FROM_PRESERVER *&---------------------------------------------------------------------* FORM sub_upload_from_preserver . CONSTANTS: c_asc(10) TYPE c VALUE 'ASC'. "#EC * * Read file from NT server into a table file = p_inpt. CALL FUNCTION 'GUI_UPLOAD' EXPORTING filename = file filetype = 'ASC' TABLES data_tab = i_input_data EXCEPTIONS file_open_error = 1 file_read_error = 2 no_batch = 3 gui_refuse_filetransfer = 4 invalid_type = 5 no_authority = 6 unknown_error = 7 bad_data_format = 8 header_not_allowed = 9 separator_not_allowed = 10 header_too_long = 11 unknown_dp_error = 12 access_denied = 13 dp_out_of_memory = 14 disk_full = 15 dp_timeout = 16 OTHERS = 17. IF sy-subrc NE 0. WRITE: / text-036:, p_inpt. SKIP 2. STOP. ENDIF. * Read file from NT server into a table CLEAR: file. file = p_inpt1. CALL FUNCTION 'GUI_UPLOAD' EXPORTING filename = file filetype = 'ASC' TABLES data_tab = i_input_data1 EXCEPTIONS file_open_error = 1 file_read_error = 2 no_batch = 3 gui_refuse_filetransfer = 4 invalid_type = 5 no_authority = 6 unknown_error = 7 bad_data_format = 8 header_not_allowed = 9 separator_not_allowed = 10 header_too_long = 11 unknown_dp_error = 12 access_denied = 13 dp_out_of_memory = 14 disk_full = 15 dp_timeout = 16 OTHERS = 17. IF sy-subrc NE 0. WRITE: / text-036:, p_inpt. SKIP 2. STOP. ENDIF. ENDFORM. " SUB_UPLOAD_FROM_PRESERVER *&---------------------------------------------------------------------* *& Form SUB_FINAL_MESSAGE_IDOC *&---------------------------------------------------------------------* *FORM SUB_FINAL_MESSAGE_IDOC . * * DATA: * l_tabix type sy-tabix, "#EC * * l_filename_read TYPE tumls_filename, "#EC * * l_filename_conv TYPE tumls_filename. "#EC * * * DATA: * l_cnt_records_read(10) type c, "#EC * * l_cnt_transactions_read(10) type c, "#EC * * l_cnt_records_transferred(10) type c, "#EC * * l_cnt_transactions_transferred(10) type c. "#EC * * * DATA: * l_messagetext(130), "#EC * * wa_errortab TYPE type_errorline. "#EC * * * * l_cnt_records_read = g_cnt_records_read. * l_cnt_transactions_read = g_cnt_transactions_read. * l_cnt_records_transferred = g_cnt_records_transferred. * l_cnt_transactions_transferred = g_cnt_transactions_transferred. * * * WRITE: / 'DATE:', sy-datum DD/MM/YYYY, * '-', * 'TIME:', sy-uzeit USING EDIT MASK '_::_ h'. * * ULINE. * * * ULINE. * * * WRITE: / 'Transactions Read.'(024), "#EC * * 30 g_cnt_transactions_read. * WRITE: / 'Transactions Transferred:'(026), "#EC * * 30 g_cnt_transactions_transferred. * WRITE: / 'Records Transferred:'(027), "#EC * * 30 g_cnt_records_transferred. * * ULINE. * * * *ENDFORM. " SUB_FINAL_MESSAGE_IDOC **&--------------------------------------------------------------------- ** *& Form SUB_DISPLAY_VARIANT *&---------------------------------------------------------------------* FORM sub_display_variant . IF NOT i_cuv_error IS INITIAL. SKIP 2. WRITE:/ 'Following tables have incorrect characteristic names'(013). * WRITE:/ text-013. "#EC NOTEXT WRITE:/ sy-uline(72). FORMAT COLOR 1 ON. WRITE:/1 sy-vline, 2 text-014, "#EC NOTEXT 20 sy-vline, 21 text-015, "#EC NOTEXT 72 sy-vline. FORMAT COLOR 1 OFF. WRITE:/ sy-uline(72). LOOP AT i_cuv_error INTO wa_vtnam. WRITE:/1 sy-vline, 2 wa_vtnam-vtnam, 20 sy-vline, 21 wa_vtnam-reas, 72 sy-vline. WRITE:/ sy-uline(72). ENDLOOP. ENDIF. ENDFORM. " SUB_DISPLAY_VARIANT *&---------------------------------------------------------------------* *& Form SUB_DISPLAY_ERRORLINES *&---------------------------------------------------------------------* FORM sub_display_errorlines . SKIP 2. IF NOT itab_error IS INITIAL. FORMAT COLOR 1 ON. WRITE:/ 'Following lines have invalid/blank values'. "#EC NOTEXT WRITE:/ text-016. "#EC NOTEXT SKIP. WRITE:/ sy-uline(120). WRITE:/1 sy-vline, 2 'Variant table'(017), "#EC NOTEXT 20 sy-vline, 21 'Fieldname'(018), "#EC NOTEXT 51 sy-vline, 52 'Characteristic name'(019), "#EC NOTEXT 82 sy-vline, 83 'Characteristic value'(020), "#EC NOTEXT 113 sy-vline, 114 'Row no'(021), "#EC NOTEXT 120 sy-vline. FORMAT COLOR 1 OFF. WRITE:/ sy-uline(120). LOOP AT itab_error INTO wa_error. WRITE:/1 sy-vline, 2 wa_error-vtnam, 20 sy-vline, 21 wa_error-fname+8(6), 51 sy-vline, 52 wa_error-atnam, 82 sy-vline, 83 wa_error-atwrt, 113 sy-vline, 114 wa_error-row, 120 sy-vline. WRITE:/ sy-uline(120). ENDLOOP. ENDIF. ENDFORM. " SUB_DISPLAY_ERRORLINES *&--------------------------------------------------------------------- *& Form SUB_CLEAR_SOURCE_TABLES *&---------------------------------------------------------------------* FORM sub_clear_source_tables . REFRESH: i_contentheader1, i_contenttab1. **************************** * REFRESH GLOBAL WORK AREAS **************************** *Work Area for the structure I_MESSTAB CLEAR: wa_vartab, wa_vartabdate, wa_vardetails, wa_tabinput, wa_dsninput, wa_dsninput, wa_newinput, wa_gnewinput, wa_ginput_data , wa_final, wa_content, wa_contenthd , wa_contentheader, wa_contenttab, wa_content1, wa_contenthd1, wa_contentheader1, wa_contenttab1, wa_e1cuvtm , wa_e1cuv1m , wa_e1datem . ************************************************* * REFRESH INTERNAL TABLES AND WORK AREAS FOR BDC ************************************************* *Internal Table to store the data to display the error message REFRESH i_errormsg[] . *Internal Table to store the data to display the error message REFRESH i_error[]. **Work area to store the data to display the error message CLEAR wa_errormsg. *Internal table which will store data for the error log REFRESH i_error_log[] . *************************** * REFRESH GLOBAL VARIABLES *************************** CLEAR: g_ctr_input_recs, g_ctr_output_recs, g_msg, g_struct_file, g_login, g_phyin , g_fname1, g_repid, g_exit, gx_variant, g_lines , g_save, g_splid , p_login , p_phyin. ************************************************* * REFRESH GLOBAL INTERNAL TABLES FOR ALV DISPLAY ************************************************* *Refresh Internal tables for ALV Field cat REFRESH i_fieldcat_ov[]. REFRESH i_fieldcat_dtl[]. REFRESH i_fieldcat_ov1[]. REFRESH i_events[]. REFRESH: itab_zedidc40, itab_zedidd40, gt_curr_edi_dc40, gt_curr_edi_dd40. CLEAR: i_file, i_file_tmp, i_cuvtab_fld, i_cuvtab_valn, i_cuvtab, i_cuvtab_valc, i_col_pos, g_slnid_c, g_slnid_n, g_split_var. ENDFORM. " SUB_CLEAR_SOURCE_TABLES *&---------------------------------------------------------------------* *& Form SUB_CLEAR_TABLES *&---------------------------------------------------------------------* FORM sub_clear_tables . CLEAR: i_file, i_cuvtab_fld, i_cuvtab_valn, i_cuvtab, i_cuvtab_valc, i_col_pos, g_slnid_c, g_slnid_n, g_split_var. ENDFORM. " SUB_CLEAR_TABLES *&---------------------------------------------------------------------* *& Form SUB_CONVERT_0001 *&---------------------------------------------------------------------* *FORM SUB_CONVERT_0001 . * * constants: c_01(2) type c value '01'. * * clear itab_ze1cuvtm. * clear itab_zedidd40. * wdocnum = wdocnum + 1. * itab_ze1cuvtm-msgfn = c_009. * if not wa_contentheader1-vtnam is initial. * itab_ze1cuvtm-VAR_TAB = wa_contentheader1-vtnam. * endif. * * wa_itab_zedidd40-docnum = wdocnum. "#EC NEEDED * wa_itab_zedidd40-segnum = c_000001. * wa_itab_zedidd40-segnam = 'E2CUVTM001'. * wa_itab_zedidd40-psgnum = '000000'. ** itab_zedidd40-segnam = c_E1CUVTM. * wa_itab_zedidd40-hlevel = c_01. * wa_itab_zedidd40-sdata = itab_ze1cuvtm. * append wa_itab_zedidd40 to itab_zedidd40. * * perform transfer_record_idoc. * *ENDFORM. " SUB_CONVERT_0001 **&--------------------------------------------------------------------- ** *& Form SUB_CONVERT_0002 *&---------------------------------------------------------------------* *FORM SUB_CONVERT_0002 . * ** ze1datem * witemno = witemno + 1. "#EC NEEDED * wsegnum = wsegnum + 1. "#EC NEEDED * clear itab_ze1datem. * itab_ze1datem-msgfn = c_009. * itab_ze1datem-key_date = sy-datum. * * wa_itab_zedidd40-segnam = 'E2DATEM001'. * wa_itab_zedidd40-segnum = '0002'. * wa_itab_zedidd40-psgnum = '000001'. ******************************************** **MOD-009 ******************************************** ** itab_zedidd40-hlevel = '02'. ** itab_zedidd40-docnum = wdocnum. "#EC *NEEDED ** itab_zedidd40-segnum = wsegnum. ** itab_zedidd40-segnam = c_E1DATEM. ******************************************** **MOD-009 ******************************************** * wa_itab_zedidd40-hlevel = c_02. * wa_itab_zedidd40-sdata = itab_ze1datem. * append wa_itab_zedidd40 to itab_zedidd40. " E1DATEM * witemno = 0. "#EC NEEDED * witemno_gst = 0. "#EC NEEDED * witemno_qst = 0. "#EC NEEDED * witemno_new = 0. "#EC NEEDED * wsegnum = 1. "#EC NEEDED * * perform transfer_record_idoc. * *ENDFORM. " SUB_CONVERT_0002 *&--------------------------------------------------------------------- *& Form SUB_CONVERT_0003 *&---------------------------------------------------------------------* FORM sub_convert_0003 . PERFORM sub_store_file. ENDFORM. " SUB_CONVERT_0003 *&---------------------------------------------------------------------* *& Form SUB_GET_CUVTAB *&---------------------------------------------------------------------* FORM sub_get_cuvtab . CLEAR g_error. *********************************************************** *MOD-012 *********************************************************** * LOOP AT I_CONTENTHEADER1 INTO WA_CONTENTHEADER1. *********************************************************** *MOD-012 *********************************************************** SELECT vtint vtnam FROM cuvtab INTO CORRESPONDING FIELDS OF TABLE i_cuvtab WHERE vtnam = wa_contentheader1-vtnam. IF sy-subrc <> 0. g_error = c_x. CLEAR wa_vtnam. wa_vtnam-vtnam = wa_contentheader1-vtnam. wa_vtnam-reas = text-008. APPEND wa_vtnam TO i_cuv_error. wa_errortab-msgty = 'E'. wa_errortab-id = '/factglb/gta_custdev'. wa_errortab-msgno = 075. wa_errortab-par1 = wa_vtnam-reas. * INSERT wa_errortab INTO TABLE g_error_tab. INSERT wa_errortab INTO TABLE g_error_tab. CLEAR: wa_vtnam, wa_errortab. ENDIF. *********************************************************** *MOD-012 *********************************************************** * clear: WA_CONTENTHEADER1. *********************************************************** *MOD-012 *********************************************************** ENDFORM. " SUB_GET_CUVTAB *&---------------------------------------------------------------------* *& Form SUB_GET_VNT_MA *&---------------------------------------------------------------------* FORM sub_get_vnt_ma . CONSTANTS: c_e(1) TYPE c VALUE 'E', "#EC * c_001(3) TYPE c VALUE '001'. "#EC * CLEAR wa_vnt_ma. SELECT SINGLE vtnam unique_no no_chr FROM zdvnt_ma INTO wa_vnt_ma WHERE vtnam = wa_contentheader1-vtnam. IF sy-subrc <> 0. g_error = 'X'. CLEAR wa_vtnam. wa_vtnam-vtnam = wa_contentheader1-vtnam. wa_vtnam-error = c_x. wa_vtnam-reas = text-023 . "#EC NOTEXT APPEND wa_vtnam TO i_cuv_error. wa_errortab-msgty = c_e. wa_errortab-id = '/factglb/gta_custdev'. wa_errortab-msgno = 076. wa_errortab-par1 = wa_vtnam-reas. * INSERT wa_errortab INTO TABLE g_error_tab. INSERT wa_errortab INTO TABLE g_error_tab. CLEAR: wa_vtnam, wa_errortab. ENDIF. ENDFORM. " SUB_GET_VNT_MA *&---------------------------------------------------------------------* *& Form SUB_GET_CUVTAB_VALN *&---------------------------------------------------------------------* FORM sub_get_cuvtab_valn . IF NOT i_cuvtab[] IS INITIAL. SELECT vtint slnid atinn val_from FROM cuvtab_valn INTO TABLE i_cuvtab_valn FOR ALL ENTRIES IN i_cuvtab WHERE vtint = i_cuvtab-vtint. IF sy-subrc = 0. SORT i_cuvtab_valn BY vtint slnid. ENDIF. ENDIF. ENDFORM. " SUB_GET_CUVTAB_VALN *&---------------------------------------------------------------------* *& Form SUB_GET_CUVTAB_FLD *&---------------------------------------------------------------------* FORM sub_get_cuvtab_fld . IF g_error <> c_x. IF NOT i_cuvtab[] IS INITIAL. SELECT vtint atinn vtpos dbfld FROM cuvtab_fld INTO TABLE i_cuvtab_fld FOR ALL ENTRIES IN i_cuvtab WHERE vtint = i_cuvtab-vtint. IF sy-subrc = 0. SORT i_cuvtab_fld BY vtint atinn. ELSE. * LOOP AT I_CONTENTHEADER1 INTO WA_CONTENTHEADER1. SORT i_cuvtab BY vtint vtnam. READ TABLE i_cuvtab INTO wa_vtnam WITH KEY vtnam = wa_contentheader1-vtnam BINARY SEARCH. IF sy-subrc = 0. g_error = c_x. CLEAR wa_vtnam. wa_vtnam-vtnam = wa_contentheader1-vtnam. wa_vtnam-reas = text-009. APPEND wa_vtnam TO i_cuv_error. wa_errortab-msgty = c_e. wa_errortab-id = '/factglb/gta_custdev'. wa_errortab-msgno = 077. wa_errortab-par2 = wa_vtnam-reas. * INSERT wa_errortab INTO TABLE g_error_tab. INSERT wa_errortab INTO TABLE g_error_tab. CLEAR: wa_vtnam, wa_errortab. ENDIF. * ENDLOOP. ENDIF. ENDIF. ENDIF. ENDFORM. " SUB_GET_CUVTAB_FLD *&---------------------------------------------------------------------* *& Form SUB_CHECK_CABN *&---------------------------------------------------------------------* FORM sub_check_cabn . LOOP AT i_cabn ASSIGNING <fs_cabn>. READ TABLE i_cawn_i INTO wa_cawn WITH KEY atinn = <fs_cabn>-atinn. IF sy-subrc <> 0. <fs_cabn>-check = c_x. ENDIF. ENDLOOP. ENDFORM. " SUB_CHECK_CABN *&---------------------------------------------------------------------* *& Form SUB_GET_CUVTAB_VALC *&---------------------------------------------------------------------* FORM sub_get_cuvtab_valc . IF NOT i_cuvtab[] IS INITIAL. SELECT vtint slnid atinn valc FROM cuvtab_valc INTO TABLE i_cuvtab_valc FOR ALL ENTRIES IN i_cuvtab WHERE vtint = i_cuvtab-vtint. IF sy-subrc = 0. SORT i_cuvtab_valc BY vtint slnid. ENDIF. ENDIF. ENDFORM. " SUB_GET_CUVTAB_VALC *&---------------------------------------------------------------------* *& Form SUB_VALIDATE_TABLE_FIELDS *&---------------------------------------------------------------------* FORM sub_validate_table_fields . SORT i_file_tmp BY vtnam. LOOP AT i_cuvtab ASSIGNING <fs_vtnam>. READ TABLE i_file_tmp INTO wa_file WITH KEY flag = 'X'. IF sy-subrc <> 0. * Row containing characteristic names might have 'x' instead of 'X' READ TABLE i_file_tmp INTO wa_file WITH KEY flag = 'x'. IF sy-subrc <> 0. <fs_vtnam>-error = c_x. <fs_vtnam>-reas = text-011. "#EC NOTEXT g_error = 'X'. CLEAR wa_vtnam. wa_vtnam = <fs_vtnam>. APPEND wa_vtnam TO i_cuv_error. wa_errortab-msgty = c_e. wa_errortab-id = '/factglb/gta_custdev'. wa_errortab-msgno = 078. wa_errortab-par2 = wa_vtnam-reas. * INSERT wa_errortab INTO TABLE g_error_tab. INSERT wa_errortab INTO TABLE g_error_tab. CLEAR: wa_vtnam, wa_errortab. EXIT. ENDIF. ELSE. * Check for characteristic name 1 IF wa_file-char1 IS NOT INITIAL. CLEAR wa_cabn. PERFORM get_internal_char USING wa_file-char1 CHANGING wa_cabn <fs_vtnam>. * Find out if characteristic name exists in variant table definitio PERFORM find_char_exist USING wa_file <fs_vtnam> wa_cabn. ENDIF. CHECK <fs_vtnam>-error IS INITIAL. * Check for characteristic name 2 IF wa_file-char2 IS NOT INITIAL. CLEAR wa_cabn. PERFORM get_internal_char USING wa_file-char2 CHANGING wa_cabn <fs_vtnam>. * Find out if characteristic name exists in variant table definitio PERFORM find_char_exist USING wa_file <fs_vtnam> wa_cabn. ENDIF. CHECK <fs_vtnam>-error IS INITIAL. * Check for characteristic name 3 IF wa_file-char3 IS NOT INITIAL. CLEAR wa_cabn. PERFORM get_internal_char USING wa_file-char3 CHANGING wa_cabn <fs_vtnam>. * Find out if characteristic name exists in variant table definitio PERFORM find_char_exist USING wa_file <fs_vtnam> wa_cabn. ENDIF. * Check for characteristic name 4 IF wa_file-char4 IS NOT INITIAL. CLEAR wa_cabn. PERFORM get_internal_char USING wa_file-char4 CHANGING wa_cabn <fs_vtnam>. * Find out if characteristic name exists in variant table definitio PERFORM find_char_exist USING wa_file <fs_vtnam> wa_cabn. ENDIF. CHECK <fs_vtnam>-error IS INITIAL. * Check for characteristic name 5 IF wa_file-char5 IS NOT INITIAL. CLEAR wa_cabn. PERFORM get_internal_char USING wa_file-char5 CHANGING wa_cabn <fs_vtnam>. * Find out if characteristic name exists in variant table definitio PERFORM find_char_exist USING wa_file <fs_vtnam> wa_cabn. ENDIF. CHECK <fs_vtnam>-error IS INITIAL. * Check for characteristic name 6 IF wa_file-char6 IS NOT INITIAL. CLEAR wa_cabn. PERFORM get_internal_char USING wa_file-char6 CHANGING wa_cabn <fs_vtnam>. * Find out if characteristic name exists in variant table definitio PERFORM find_char_exist USING wa_file <fs_vtnam> wa_cabn. ENDIF. CHECK <fs_vtnam>-error IS INITIAL. * Check for characteristic name 7 IF wa_file-char7 IS NOT INITIAL. CLEAR wa_cabn. PERFORM get_internal_char USING wa_file-char7 CHANGING wa_cabn <fs_vtnam>. * Find out if characteristic name exists in variant table definitio PERFORM find_char_exist USING wa_file <fs_vtnam> wa_cabn. ENDIF. CHECK <fs_vtnam>-error IS INITIAL. * Check for characteristic name 8 IF wa_file-char8 IS NOT INITIAL. CLEAR wa_cabn. PERFORM get_internal_char USING wa_file-char8 CHANGING wa_cabn <fs_vtnam>. * Find out if characteristic name exists in variant table definitio PERFORM find_char_exist USING wa_file <fs_vtnam> wa_cabn. ENDIF. CHECK <fs_vtnam>-error IS INITIAL. * Check for characteristic name 9 IF wa_file-char9 IS NOT INITIAL. CLEAR wa_cabn. PERFORM get_internal_char USING wa_file-char9 CHANGING wa_cabn <fs_vtnam>. * Find out if characteristic name exists in variant table definitio PERFORM find_char_exist USING wa_file <fs_vtnam> wa_cabn. ENDIF. CHECK <fs_vtnam>-error IS INITIAL. * Check for characteristic name 10 IF wa_file-char10 IS NOT INITIAL. CLEAR wa_cabn. PERFORM get_internal_char USING wa_file-char10 CHANGING wa_cabn <fs_vtnam>. * Find out if characteristic name exists in variant table definitio PERFORM find_char_exist USING wa_file <fs_vtnam> wa_cabn. ENDIF. CHECK <fs_vtnam>-error IS INITIAL. * Check for characteristic name 11 IF wa_file-char11 IS NOT INITIAL. CLEAR wa_cabn. PERFORM get_internal_char USING wa_file-char11 CHANGING wa_cabn <fs_vtnam>. * Find out if characteristic name exists in variant table definitio PERFORM find_char_exist USING wa_file <fs_vtnam> wa_cabn. ENDIF. CHECK <fs_vtnam>-error IS INITIAL. * Check for characteristic name 12 IF wa_file-char12 IS NOT INITIAL. CLEAR wa_cabn. PERFORM get_internal_char USING wa_file-char12 CHANGING wa_cabn <fs_vtnam>. * Find out if characteristic name exists in variant table definitio PERFORM find_char_exist USING wa_file <fs_vtnam> wa_cabn. ENDIF. CHECK <fs_vtnam>-error IS INITIAL. * Check for characteristic name 13 IF wa_file-char13 IS NOT INITIAL. CLEAR wa_cabn. PERFORM get_internal_char USING wa_file-char13 CHANGING wa_cabn <fs_vtnam>. * Find out if characteristic name exists in variant table definitio PERFORM find_char_exist USING wa_file <fs_vtnam> wa_cabn. ENDIF. CHECK <fs_vtnam>-error IS INITIAL. * Check for characteristic name 14 IF wa_file-char14 IS NOT INITIAL. CLEAR wa_cabn. PERFORM get_internal_char USING wa_file-char14 CHANGING wa_cabn <fs_vtnam>. * Find out if characteristic name exists in variant table definitio PERFORM find_char_exist USING wa_file <fs_vtnam> wa_cabn. ENDIF. CHECK <fs_vtnam>-error IS INITIAL. * Check for characteristic name 15 IF wa_file-char15 IS NOT INITIAL. CLEAR wa_cabn. PERFORM get_internal_char USING wa_file-char15 CHANGING wa_cabn <fs_vtnam>. * Find out if characteristic name exists in variant table definitio PERFORM find_char_exist USING wa_file <fs_vtnam> wa_cabn. ENDIF. ENDIF. ENDLOOP. ENDFORM. " SUB_VALIDATE_TABLE_FIELDS *&---------------------------------------------------------------------* *& Form SUB_CHARAC_EXIST *&---------------------------------------------------------------------* FORM sub_charac_exist . IF g_error <> 'X'. LOOP AT i_cuvtab_fld INTO wa_cuvtab_fld WHERE exist = space. g_error = 'X'. CLEAR wa_vtnam. READ TABLE i_cuvtab INTO wa_vtnam WITH KEY vtint = wa_cuvtab_fld-vtint. * No need to check sy-subrc here READ TABLE i_cabn INTO wa_cabn WITH KEY atinn = wa_cuvtab_fld-atinn. * No need to check sy-subrc here CONCATENATE wa_cabn-atnam text-022 "#EC NOTEXT INTO wa_vtnam-reas SEPARATED BY space. APPEND wa_vtnam TO i_cuv_error. wa_errortab-msgty = c_e. wa_errortab-id = '/factglb/gta_custdev'. wa_errortab-msgno = 079. wa_errortab-par1 = wa_vtnam-reas. * INSERT wa_errortab INTO TABLE g_error_tab. INSERT wa_errortab INTO TABLE g_error_tab. CLEAR: wa_vtnam, wa_errortab. ENDLOOP. ENDIF. ENDFORM. " SUB_CHARAC_EXIST *&---------------------------------------------------------------------* *& Form SUB_VALIDATE_CHARAC_VALUES *&---------------------------------------------------------------------* FORM sub_validate_charac_values . LOOP AT i_cuvtab INTO wa_vtnam WHERE error <> c_x. CLEAR i_dupl_file. "A * Clear internal table for duplicate entries CLEAR i_dupl. * Transfer already stored characteristic values (CHAR, DATE and TIME) PERFORM sub_transfer_st_char. * Transfer already stored characteristic values (Numeric) PERFORM sub_transfer_st_num. * Check if Internal table for duplicate records is populated or not IF NOT i_dupl IS INITIAL. ************************************************* *MOD-012 ************************************************* SORT i_dupl. " BY vtnam char1 char2 char3 " char4 char5 char6 char7 " char8 char9 char10 char11 " char12 char13 char14 char15. ************************************************* *MOD-012 ************************************************* ENDIF. ************************************************* *MOD-012 ************************************************* * SORT i_col_pos BY vtint * vtnam * atinn * atnam. ************************************************* *MOD-012 ************************************************* * Check current sequence number for SLNID * We would only use G_SLNID_C from here onwards for sequnce purpose IF g_slnid_c < g_slnid_n. g_slnid_c = g_slnid_n. ENDIF. ************************************************************** *MOD-016 ************************************************************** * g_split_var = 0. ************************************************************** *MOD-016 ************************************************************** LOOP AT i_file INTO wa_file WHERE vtnam = wa_vtnam-vtnam. CLEAR wa_dupl_file. CLEAR i_e1cuv1m. * Increment Sequence counter for each record g_slnid_c = g_slnid_c + 1. * Increment Sequnce counter for concatenation g_split_var = g_split_var + 1. * Counter for each row g_row = g_row + 1. CLEAR g_invalid. ******************************************* *MOD-008 ******************************************* PERFORM sub_check_char_values. ******************************************* *MOD-008 ******************************************* * Check for duplicate values READ TABLE i_dupl INTO wa_dupl WITH KEY vtnam = wa_dupl_file-vtnam char1 = wa_dupl_file-char1 char2 = wa_dupl_file-char2 char3 = wa_dupl_file-char3 char4 = wa_dupl_file-char4 char5 = wa_dupl_file-char5 char6 = wa_dupl_file-char6 char7 = wa_dupl_file-char7 char8 = wa_dupl_file-char8 char9 = wa_dupl_file-char9 char10 = wa_dupl_file-char10 char11 = wa_dupl_file-char11 char12 = wa_dupl_file-char12 char13 = wa_dupl_file-char13 char14 = wa_dupl_file-char14 char15 = wa_dupl_file-char15. IF sy-subrc = 0. g_invalid = c_x. * Reduce counter by 1 to maintain sequence g_split_var = g_split_var - 1. ELSE. CLEAR wa_dupl. wa_dupl = wa_dupl_file. APPEND wa_dupl TO i_dupl. CLEAR wa_dupl. ENDIF. ***************************************************** **mod-012 **************************************************** * wa_e1cuv1m-msgfn = C_009. * wa_e1cuv1m-vtlineno5 = g_slnid_c. * wa_e1cuv1m-vtcharact = c_varcond. * wa_e1cuv1m-atwrt = g_varcond. * APPEND wa_e1cuv1m TO i_e1cuv1m. * ************************************************************** **MOD-012 ************************************************************** * IF g_invalid IS INITIAL. * LOOP AT i_e1cuv1m INTO wa_e1cuv1m. ** perform fill_edidd_segments USING wa_e1cuv1m. * PERFORM transfer_e1cuv1m. " USING wa_e1cuv1m. "#EC * * ENDLOOP. * ENDIF. * ******************************************************************** ***MOD-012 ******************************************************************** CLEAR: g_invalid. ******************************************************************* **MOD-012 ****************************************************************** ***************************************************** **MOD-009 ***************************************************** ENDLOOP. ENDLOOP. ENDFORM. " SUB_VALIDATE_CHARAC_VALUES *&---------------------------------------------------------------------* *& Form SUB_TRANSFER_ST_CHAR *&---------------------------------------------------------------------* FORM sub_transfer_st_char . DATA: l_lines TYPE i. LOOP AT i_cuvtab_valc INTO wa_cuvtab_valc WHERE vtint = wa_vtnam-vtint. CLEAR wa_cabn. READ TABLE i_cabn_atinn INTO wa_cabn WITH KEY atinn = wa_cuvtab_valc-atinn BINARY SEARCH. * No need to check sy-subrc here CLEAR wa_e1cuv1m. wa_e1cuv1m-msgfn = c_009. wa_e1cuv1m-vtlineno5 = wa_cuvtab_valc-slnid. wa_e1cuv1m-vtcharact = wa_cabn-atnam. wa_e1cuv1m-atwrt = wa_cuvtab_valc-valc. **************************************************** *MOD-008 **************************************************** PERFORM transfer_e1cuv1m. " USING wa_e1cuv1m. "#EC * **************************************************** *MOD-008 **************************************************** * store last value g_slnid_c = wa_cuvtab_valc-slnid. * Find concatenated number at the end of variant IF wa_cabn-atnam = c_varcond. CLEAR i_split. SPLIT wa_cuvtab_valc-valc AT '_' INTO TABLE i_split. CLEAR l_lines. DESCRIBE TABLE i_split LINES l_lines. * Read last line of table as it contains concatenated number READ TABLE i_split INTO wa_split INDEX l_lines. SHIFT wa_split-f1 LEFT DELETING LEADING space. IF wa_split-f1 CO '0123456789 '. CLEAR l_lines. l_lines = wa_split-f1. IF l_lines > g_split_var. g_split_var = l_lines. ENDIF. ENDIF. ENDIF. * Check for duplicate records PERFORM pop_dupl USING wa_vtnam-vtnam g_slnid_c wa_cabn-atnam wa_cuvtab_valc-valc. ENDLOOP. ENDFORM. " SUB_TRANSFER_ST_CHAR *&---------------------------------------------------------------------* *& Form SUB_TRANSFER_ST_NUM *&---------------------------------------------------------------------* FORM sub_transfer_st_num . DATA: l_val TYPE p, "#EC NEEDED l_val1 TYPE p DECIMALS 1, "#EC NEEDED l_val2 TYPE p DECIMALS 2, "#EC NEEDED l_val3 TYPE p DECIMALS 3, "#EC NEEDED l_char TYPE char16. "#EC NEEDED LOOP AT i_cuvtab_valn INTO wa_cuvtab_valn WHERE vtint = wa_vtnam-vtint. CLEAR wa_cabn. READ TABLE i_cabn_atinn INTO wa_cabn WITH KEY atinn = wa_cuvtab_valn-atinn BINARY SEARCH. CLEAR wa_e1cuv1m. wa_e1cuv1m-msgfn = c_009. wa_e1cuv1m-vtlineno5 = wa_cuvtab_valn-slnid. wa_e1cuv1m-vtcharact = wa_cabn-atnam. wa_e1cuv1m-atflv = wa_cuvtab_valn-val_from. **************************************************** *MOD-008 **************************************************** PERFORM transfer_e1cuv1m. " USING wa_e1cuv1m. "#EC * **************************************************** *MOD-008 **************************************************** * store last value g_slnid_n = wa_cuvtab_valn-slnid. * Convert characteristic value from Exp format to normal format CLEAR: l_val, l_char, l_val1, l_val2, l_val3. CASE wa_cabn-anzdz. WHEN 0. l_val = wa_cuvtab_valn-val_from. l_char = l_val. WHEN 1. l_val1 = wa_cuvtab_valn-val_from. l_char = l_val1. WHEN 2. l_val2 = wa_cuvtab_valn-val_from. l_char = l_val2. WHEN 3. l_val = wa_cuvtab_valn-val_from. l_char = l_val. ENDCASE. SHIFT l_char LEFT DELETING LEADING space. * Check for duplicate records PERFORM pop_dupl USING wa_vtnam-vtnam g_slnid_n wa_cabn-atnam l_char. ENDLOOP. ENDFORM. " SUB_TRANSFER_ST_NUM *&---------------------------------------------------------------------* *& Form SUB_CHECK_CHAR_VALUES *&---------------------------------------------------------------------* FORM sub_check_char_values . DATA: l_fieldname TYPE fieldname, l_field_dup TYPE fieldname. FIELD-SYMBOLS: <fs_val> TYPE any, <fs_val1> TYPE any. * DATA: l_len_slnid TYPE i, "#EC NEEDED * l_len_varcond TYPE i, "#EC NEEDED * l_temp_slnid TYPE i, "#EC NEEDED * l_temp_slnc TYPE char5, "#EC NEEDED * l_temp_varcond TYPE varcond, "#EC NEEDED * l_sub_var TYPE i, "#EC NEEDED * l_val_split TYPE char10. "#EC NEEDED * * DATA: l_invalid. "#EC NEEDED * We are sorting it to concatenate characteristics value into Variant CLEAR g_varcond. CONCATENATE 'V' wa_vnt_ma-unique_no INTO g_varcond. ************************************************************************ ** **MOD-012 ************************************************************************ ** LOOP AT i_col_pos INTO wa_col_pos WHERE vtnam = wa_file-vtnam. CLEAR l_fieldname. * Dynamically assign value to field l_value for validation CONCATENATE 'WA_FILE-CHAR' wa_col_pos-field INTO l_fieldname. ASSIGN (l_fieldname) TO <fs_val>. * Put values in work area to check for duplicates IF wa_col_pos-atnam <> c_varcond. " Variant condition CLEAR l_field_dup. wa_dupl_file-vtnam = wa_file-vtnam. CONCATENATE 'WA_DUPL_FILE-CHAR' wa_col_pos-field INTO l_field_dup. ASSIGN (l_field_dup) TO <fs_val1>. ************************************************ *MOD-008 ************************************************ * <fs_val1> = <fs_val>. IF NOT <fs_val> IS INITIAL. <fs_val1> = <fs_val>. * ASSIGN <fs_val> TO <fs_val1>. ENDIF. ************************************************ *MOD-008 ************************************************ CONCATENATE g_varcond <fs_val> INTO g_varcond SEPARATED BY '_'. * ENDIF commented out, It will be taken to the end just before endloop * Value for Z_VARCOND will be generated by program as per new logic * ENDIF. IF <fs_val> IS NOT INITIAL. SORT i_cabn BY atinn atnam. CLEAR wa_cabn. READ TABLE i_cabn INTO wa_cabn WITH KEY atnam = wa_col_pos-atnam. " BINARY SEARCH. * Validate values against function module stored in field ATPRF CLEAR l_invalid. IF wa_cabn-atprf IS NOT INITIAL. CATCH SYSTEM-EXCEPTIONS OTHERS = 1. CALL FUNCTION wa_cabn-atprf EXPORTING charact_no = wa_cabn-atinn charact = wa_cabn-atnam value = <fs_val> EXCEPTIONS not_found = 1. IF sy-subrc <> 0. l_invalid = c_x. g_invalid = c_x. ENDIF. ENDCATCH. ENDIF. ************************************************************************ ********* **MOD-012 ************************************************************************ ********* IF l_invalid <> c_x. * SY-SUBRC should not fail here because check has already been done * We need to validate value only if following fields are blank IF wa_cabn-atson IS INITIAL " Indicator: Additional Values AND wa_cabn-atprt IS INITIAL " Check table AND wa_cabn-atprr IS INITIAL " Name of Check Report Program AND wa_cabn-atprf IS INITIAL " Function Module for Checking AND wa_cabn-check IS INITIAL. " No value found in CAWN table * Check value CLEAR wa_cawn. CASE wa_cabn-atfor. WHEN c_char OR c_date OR c_time. READ TABLE i_cawn_c INTO wa_cawn WITH KEY atinn = wa_cabn-atinn atwrt = <fs_val>. IF sy-subrc = 0. IF wa_cawn-lkenz = c_x. PERFORM errror_line USING wa_file-vtnam l_fieldname wa_cabn-atnam <fs_val> g_row. g_invalid = c_x. wa_file-error = c_x. MODIFY i_file FROM wa_file TRANSPORTING error. ELSE. CLEAR wa_e1cuv1m. wa_e1cuv1m-msgfn = c_009. wa_e1cuv1m-vtlineno5 = g_slnid_c. wa_e1cuv1m-vtcharact = wa_cabn-atnam. wa_e1cuv1m-atwrt = <fs_val>. APPEND wa_e1cuv1m TO i_e1cuv1m. **************************************************** *MOD-008 **************************************************** * perform fill_edidd_segments USING wa_e1cuv1m. *PERFORM transfer_e1cuv1m. " USING wa_e1cuv1m. "#EC * CLEAR: wa_e1cuv1m. **************************************************** *MOD-008 **************************************************** ENDIF. ELSE. PERFORM errror_line USING wa_file-vtnam l_fieldname wa_cabn-atnam <fs_val> g_row. g_invalid = c_x. wa_file-error = c_x. MODIFY i_file FROM wa_file TRANSPORTING error. ENDIF. WHEN OTHERS. ************************************************************ *MOD-008 *********************************************************** READ TABLE i_cawn_n INTO wa_cawn WITH KEY atinn = wa_cabn-atinn atflv = <fs_val>. IF sy-subrc = 0. IF wa_cawn-lkenz = c_x. PERFORM errror_line USING wa_file-vtnam l_fieldname wa_cabn-atnam <fs_val> g_row. g_invalid = c_x. wa_file-error = c_x. MODIFY i_file FROM wa_file TRANSPORTING error. ELSE. CLEAR wa_e1cuv1m. wa_e1cuv1m-msgfn = c_009. wa_e1cuv1m-vtlineno5 = g_slnid_c. wa_e1cuv1m-vtcharact = wa_cabn-atnam. wa_e1cuv1m-atflv = <fs_val>. APPEND wa_e1cuv1m TO i_e1cuv1m. ***************************************************** **MOD-008 ***************************************************** * perform fill_edidd_segments USING wa_e1cuv1m. *PERFORM transfer_e1cuv1m. " USING wa_e1cuv1m. "#EC * CLEAR: wa_e1cuv1m. ***************************************************** **MOD-008 ***************************************************** ENDIF. ELSE. PERFORM errror_line USING wa_file-vtnam l_fieldname wa_cabn-atnam <fs_val> g_row. g_invalid = c_x. wa_file-error = c_x. MODIFY i_file FROM wa_file TRANSPORTING error. ENDIF. ************************************************************* *MOD-008 ************************************************************ ENDCASE. ELSE. CASE wa_cabn-atfor. WHEN c_char OR c_date OR c_time. CLEAR wa_e1cuv1m. wa_e1cuv1m-msgfn = c_009. wa_e1cuv1m-vtlineno5 = g_slnid_c. wa_e1cuv1m-vtcharact = wa_cabn-atnam. wa_e1cuv1m-atwrt = <fs_val>. APPEND wa_e1cuv1m TO i_e1cuv1m. **************************************************** *MOD-008 **************************************************** * perform fill_edidd_segments USING wa_e1cuv1m. *PERFORM transfer_e1cuv1m. " USING wa_e1cuv1m. "#EC * CLEAR: wa_e1cuv1m. **************************************************** *MOD-008 **************************************************** WHEN OTHERS. CLEAR wa_e1cuv1m. wa_e1cuv1m-msgfn = c_009. wa_e1cuv1m-vtlineno5 = g_slnid_c. wa_e1cuv1m-vtcharact = wa_cabn-atnam. wa_e1cuv1m-atflv = <fs_val>. APPEND wa_e1cuv1m TO i_e1cuv1m. **************************************************** *MOD-008 **************************************************** *PERFORM transfer_e1cuv1m. " USING wa_e1cuv1m. "#EC * CLEAR: wa_e1cuv1m. **************************************************** *MOD-008 **************************************************** ENDCASE. ENDIF. ELSE. PERFORM errror_line USING wa_file-vtnam l_fieldname wa_col_pos-atnam <fs_val> g_row. g_invalid = 'X'. wa_file-error = c_x. MODIFY i_file FROM wa_file TRANSPORTING error. ENDIF. ELSE. PERFORM errror_line USING wa_file-vtnam l_fieldname wa_col_pos-atnam <fs_val> g_row. g_invalid = 'X'. wa_file-error = c_x. MODIFY i_file FROM wa_file TRANSPORTING error. ENDIF. ENDIF. CLEAR: wa_col_pos. ENDLOOP. * Assign value to type i variable to find length CLEAR: l_len_slnid, l_len_varcond, l_temp_slnid, l_temp_slnc, l_temp_varcond, l_sub_var . * Put i type value in variable with 10 characters CLEAR l_val_split. l_val_split = g_split_var. SHIFT l_val_split LEFT DELETING LEADING space. l_temp_slnid = g_split_var. l_temp_slnc = l_val_split+0(5). * SHIFT l_temp_slnc LEFT DELETING LEADING space. l_len_slnid = strlen( l_temp_slnc ). l_len_varcond = strlen( g_varcond ). l_sub_var = 26 - l_len_slnid. l_sub_var = l_sub_var - 1. l_temp_varcond = g_varcond+0(l_sub_var). CLEAR g_varcond. CONCATENATE l_temp_varcond l_temp_slnc INTO g_varcond SEPARATED BY '_'. ************************************************************************ ** *MOD-015 ************************************************************************ ** IF g_split_var = 1. * I_CONTENTTAB3[] = I_CONTENTTAB1[]. DELETE i_contenttab1 INDEX 1. ENDIF. READ TABLE i_contenttab1 INTO wa_contenttab1 INDEX g_split_var. READ TABLE i_contenttab1 INTO wa_contenttab1 WITH KEY vtnam = wa_file-vtnam char1 = wa_file-char1 char2 = wa_file-char2 char3 = wa_file-char3 char4 = wa_file-char4 char5 = wa_file-char5 char6 = wa_file-char6 char7 = wa_file-char7 char8 = wa_file-char8 char9 = wa_file-char9 char10 = wa_file-char10 char11 = wa_file-char11 char12 = wa_file-char12 char13 = wa_file-char13 char14 = wa_file-char14 char15 = wa_file-char15. IF sy-subrc = 0. g_split_var = sy-tabix. wa_contenttab1-z_varcond = g_varcond. MODIFY i_contenttab1 INDEX g_split_var FROM wa_contenttab1 TRANSPORTING z_varcond. ENDIF. *MODIFY I_CONTENTTAB1 FROM WA_CONTENTTAB1 TRANSPORTING Z_VARCOND *where vtnam = wa_file-vtnam and * char1 = wa_file-char1 and * char2 = wa_file-char2 and * char3 = wa_file-char3 and * char4 = wa_file-char4 and * char5 = wa_file-char5 and * char6 = wa_file-char6 and * char7 = wa_file-char7 and * char8 = wa_file-char8 and * char9 = wa_file-char9 and * char10 = wa_file-char10 and * char11 = wa_file-char11 and * char12 = wa_file-char12 and * char13 = wa_file-char13 and * char14 = wa_file-char14 and * char15 = wa_file-char15. * ** g_split_var = g_split_var + 1. ************************************************************************ ** *MOD-015 ************************************************************************ ** ************************************************************************ ** *MOD-012 ************************************************************************ ** IF g_invalid <> c_x. * REFRESH: I_E1CUV1M. CLEAR wa_e1cuv1m. wa_e1cuv1m-msgfn = c_009. wa_e1cuv1m-vtlineno5 = g_slnid_c. wa_e1cuv1m-vtcharact = c_varcond. wa_e1cuv1m-atwrt = g_varcond. APPEND wa_e1cuv1m TO i_e1cuv1m. ENDIF. ************************************************************************ ** *MOD-012 ************************************************************************ ** * PERFORM transfer_e1cuv1m. " USING wa_e1cuv1m. "#EC * ENDFORM. " SUB_CHECK_CHAR_VALUES *&---------------------------------------------------------------------* *& Form SUB_DUPL_COLUMNS *&---------------------------------------------------------------------* FORM sub_dupl_columns . DATA: l_fieldname TYPE fieldname, "#EC NEEDED l_counter TYPE char2. "#EC NEEDED FIELD-SYMBOLS: <fs_char_val> TYPE any. "#EC * CONSTANTS: c_field TYPE char12 VALUE 'WA_FILE-CHAR'. "#EC NEEDED DO 15 TIMES. l_counter = l_counter + 1. CONCATENATE c_field l_counter INTO l_fieldname. IF l_fieldname IS NOT INITIAL. ASSIGN (l_fieldname) TO <fs_char_val>. IF <fs_char_val> IS ASSIGNED. wa_charval-char = <fs_char_val>. APPEND wa_charval TO i_charval. ENDIF. ENDIF. ENDDO. IF i_charval IS NOT INITIAL. DELETE i_charval WHERE char IS INITIAL. SORT i_charval. DELETE ADJACENT DUPLICATES FROM i_charval. IF sy-subrc = 0. MESSAGE i243. LEAVE LIST-PROCESSING. ENDIF. ENDIF. ENDFORM. " SUB_DUPL_COLUMNS *&---------------------------------------------------------------------* *& Form SUB_STORE_FILE *&---------------------------------------------------------------------* FORM sub_store_file . DATA: g_raw(500) TYPE c, cnt_i TYPE i. MOVE-CORRESPONDING wa_contenttab1 TO wa_file. IF NOT ( wa_file-flag = 'X' OR wa_file-flag = 'x' ) . *********************************************************** *MOD-012 *********************************************************** * LOOP AT I_CONTENTTAB1 INTO WA_CONTENTTAB1. * L_TABIX = SY-TABIX. * IF L_TABIX = 1. * wa_contenttab2 = wa_contenttab1. * append wa_contenttab2 to i_contenttab2. * clear: wa_contenttab2. * clear: l_tabix. * continue. * ENDIF. * ENDLOOP. *********************************************************** *MOD-012 ********************************************************** APPEND wa_file TO i_file. CLEAR: wa_file. ELSE. ***************************************************** *MOD-012 *************************************************** cnt_i = 18. g_raw = wa_file. DO 15 TIMES. wa_charname-name = g_raw+cnt_i(30). APPEND wa_charname TO i_charname. cnt_i = cnt_i + 30. ENDDO. ************************************************** *MOD-012 ***************************************************** APPEND wa_file TO i_file_tmp. * Check duplicate columns for characteristics PERFORM sub_dupl_columns. CLEAR: wa_file. ENDIF. ************************************************** *MOD-012 ***************************************************** ENDFORM. " SUB_STORE_FILE *&---------------------------------------------------------------------* *& Form SUB_CLEAR_VARIABLES *&---------------------------------------------------------------------* FORM sub_clear_variables . CLEAR: wa_contentheader1. CLEAR: g_cnt_idocs_package, itab_zedidc40[], itab_zedidd40[]. CLEAR: itab_zedidd40[], itab_zedidd40[]. REFRESH: gt_curr_edi_dd40, i_error. CLEAR : gt_curr_edi_dd40. CLEAR : g_segnum, g_error. *Work Area for the structure I_MESSTAB CLEAR: wa_vartab, wa_vartabdate, wa_vardetails, wa_tabinput, wa_dsninput, wa_dsninput, wa_newinput, wa_gnewinput, wa_ginput_data , wa_final, wa_content, wa_contenthd , wa_contentheader, wa_contenttab, wa_content1, wa_contenthd1, wa_contentheader1, wa_contenttab1, wa_e1cuvtm , wa_e1cuv1m , wa_e1datem . ENDFORM. " SUB_CLEAR_VARIABLES *&---------------------------------------------------------------------* *& Form sub_upload_data_app *&---------------------------------------------------------------------* FORM sub_upload_data_app. CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' "#EC * EXPORTING percentage = 0 text = text-037. PERFORM sub_upload_from_preserver. PERFORM sub_upload_from_appserver. ENDFORM. " sub_upload_data_app *&---------------------------------------------------------------------* *& Form sub_upload_from_appserver1 *&---------------------------------------------------------------------* FORM sub_upload_from_appserver1. DATA: l_timestamp TYPE timestamp. "#EC * DATA: l_time(15) TYPE c. "#EC * DATA: l_counter TYPE numc04. "#EC * DATA: wa_dvnt_tm TYPE zdvnt_tm. "#EC * SELECT MAX( counter ) INTO l_counter FROM zdvnt_tm. SELECT SINGLE fileintern "#EC * INTO p_fname FROM zdvnt_tm WHERE bname = sy-uname AND filetype = c_x AND counter = l_counter. CHECK sy-subrc = 0. SELECT SINGLE fileintern "#EC * INTO p_fname1 FROM zdvnt_tm WHERE bname = sy-uname AND filetype = c_y AND counter = l_counter. CHECK sy-subrc = 0. OPEN DATASET p_fname FOR INPUT IN TEXT MODE ENCODING DEFAULT. IF sy-subrc = 0. DO. READ DATASET p_fname INTO wa_input_data. IF sy-subrc NE 0. IF g_cnt_input_recs = 0. MESSAGE i242. g_flg_error = c_y. STOP. ENDIF. EXIT. ELSE. APPEND wa_input_data TO i_input_data. ADD 1 TO g_cnt_input_recs. CLEAR: wa_input_data. ENDIF. ENDDO. ELSE. MESSAGE e246. " with text-003. ENDIF. CLOSE DATASET p_fname. * delete dataset p_fname. OPEN DATASET p_fname1 FOR INPUT IN TEXT MODE ENCODING DEFAULT. IF sy-subrc = 0. DO. READ DATASET p_fname1 INTO wa_input_data1. IF sy-subrc NE 0. IF g_cnt_input_recs = 0. * MESSAGE s000 WITH 'Input file is empty'. MESSAGE i242. g_flg_error = c_y. STOP. ENDIF. EXIT. ELSE. APPEND wa_input_data1 TO i_input_data1. ADD 1 TO g_cnt_input_recs. CLEAR: wa_input_data1. ENDIF. ENDDO. ELSE. MESSAGE e246. "with text-003. ENDIF. CLOSE DATASET p_fname1. * delete dataset p_fname1. DELETE i_input_data INDEX 1. DELETE i_input_data1 INDEX 1. LOOP AT i_input_data INTO wa_input_data. SPLIT wa_input_data AT cl_abap_char_utilities=>horizontal_tab INTO wa_contenthd-vtnam wa_contenthd-flag. APPEND wa_contenthd TO i_contentheader1. CLEAR: wa_contenthd. ENDLOOP. LOOP AT i_input_data1 INTO wa_input_data1. SPLIT wa_input_data1 AT cl_abap_char_utilities=>horizontal_tab INTO wa_content1-vtnam wa_content1-char1 wa_content1-char2 wa_content1-char3 wa_content1-char4 wa_content1-char5 wa_content1-char6 wa_content1-char7 wa_content1-char8 wa_content1-char9 wa_content1-char10 wa_content1-char11 wa_content1-char12 wa_content1-char13 wa_content1-char14 wa_content1-char15 wa_content1-flag. APPEND wa_content1 TO i_contenttab1. CLEAR: wa_content1. ENDLOOP. i_contenttab3[] = i_contenttab1[]. ENDFORM. " sub_upload_from_appserver1 *&---------------------------------------------------------------------* *& Form GET_STRUCTURE *&---------------------------------------------------------------------* FORM get_structure. DATA : idetails TYPE abap_compdescr_tab, xdetails TYPE abap_compdescr. DATA : ref_table_des TYPE REF TO cl_abap_structdescr. REFRESH: ifc. ref_table_des ?= cl_abap_typedescr=>describe_by_name( l_tabname ). idetails[] = ref_table_des->components[]. LOOP AT idetails INTO xdetails. CLEAR xfc. xfc-fieldname = xdetails-name . xfc-datatype = xdetails-type_kind. xfc-inttype = xdetails-type_kind. xfc-intlen = xdetails-length. xfc-decimals = xdetails-decimals. xfc-ref_table = l_tabname. xfc-ref_field = xdetails-name. APPEND xfc TO ifc. ENDLOOP. ENDFORM. "get_structure *&---------------------------------------------------------------------* *& Form CREATE_DYNAMIC_ITAB *&---------------------------------------------------------------------* FORM create_dynamic_itab. CLEAR: dy_table. UNASSIGN <dyn_table>. UNASSIGN <dyn_table1>. UNASSIGN <dyn_wa>. UNASSIGN <fs_dyn_wa>. * Create dynamic internal table and assign to FS CALL METHOD cl_alv_table_create=>create_dynamic_table EXPORTING it_fieldcatalog = ifc IMPORTING ep_table = dy_table. ASSIGN dy_table->* TO <dyn_table>. ASSIGN dy_table->* TO <dyn_table1>. * Create dynamic work area and assign to FS CREATE DATA dy_line LIKE LINE OF <dyn_table>. ASSIGN dy_line->* TO <dyn_wa>. * Create dynamic work area and assign to the dynamic table CREATE DATA lv_line2 LIKE LINE OF <dyn_table>. ASSIGN lv_line2->* TO <fs_dyn_wa>. ENDFORM. "create_dynamic_itab *&---------------------------------------------------------------------* *& Form GET_DATA *&---------------------------------------------------------------------* FORM get_data. DATA: wa_content TYPE ty_content. DATA: itab_content TYPE STANDARD TABLE OF ty_content. DATA: l_comp1(30) TYPE c, l_comp2(30) TYPE c, l_comp3(30) TYPE c, l_comp4(30) TYPE c, l_comp5(30) TYPE c, l_comp6(30) TYPE c, l_comp7(30) TYPE c, l_comp8(30) TYPE c, l_comp9(30) TYPE c, l_comp10(30) TYPE c, l_comp11(30) TYPE c, l_comp12(30) TYPE c, l_comp13(30) TYPE c, l_comp14(30) TYPE c, l_comp15(30) TYPE c. DATA: l_value(15) TYPE c. DATA: l_value1(30) TYPE c. DATA: l_lines TYPE i, l_lines_varcond TYPE i, l_index1 TYPE sy-index. FIELD-SYMBOLS: <fs_field2> TYPE any, <fs_field3> TYPE any. FIELD-SYMBOLS: <fs_field> TYPE any, <fs_field1> TYPE any. * * Local variable declaration * DATA: l_tabname TYPE tabname. "Table name TYPES: BEGIN OF ty_charac, char(30) TYPE c, END OF ty_charac. TYPES: BEGIN OF ty_dd03l, tabname TYPE tabname, fieldname TYPE fieldname, END OF ty_dd03l. DATA: itab_dd03l TYPE STANDARD TABLE OF ty_dd03l. DATA: wa_dd03l TYPE ty_dd03l. DATA: l_wa_content1(30) TYPE c. "#EC NEEDED DATA: l_tabix(2) TYPE c. DATA : xfc1 TYPE lvc_s_fcat, xfc TYPE lvc_s_fcat, ifc1 TYPE lvc_t_fcat, dy_table5 TYPE REF TO data, dy_line5 TYPE REF TO data, dy_line6 TYPE REF TO data. FIELD-SYMBOLS : <dyn_table2> TYPE STANDARD TABLE, <dyn_table3> TYPE STANDARD TABLE, <dyn_wa5> TYPE any, <dyn_wa6> TYPE any. TYPES: BEGIN OF ty_field, field(30) TYPE c. TYPES: END OF ty_field. CONSTANTS c_final(20) TYPE c VALUE 'L_WA_FINAL'. "#EC * TYPES: BEGIN OF ty_comp, comp(30) TYPE c, END OF ty_comp. TYPES: BEGIN OF ty_char, char(30) TYPE c, END OF ty_char. *************************************************************** *MOD-015 *************************************************************** SELECT SINGLE dbtab_name "#EC * INTO l_tabname FROM cuvtab WHERE vtnam = wa_contentheader1-vtnam. CHECK sy-subrc = 0. CLEAR: xfc1. REFRESH: ifc1. READ TABLE i_contenttab1 INTO wa_contenttab1 INDEX 1. IF sy-subrc IS INITIAL. xfc1-datatype = 'C'. xfc1-inttype = 'C'. xfc1-intlen = 30. IF NOT wa_contenttab1-char1 IS INITIAL. xfc1-fieldname = 'VTNAM'. xfc1-datatype = 'CHAR'. xfc1-inttype = 'C'. xfc1-intlen = 18. * xfc1-ref_table = wa_contentheader1-vtnam. * xfc1-ref_field = wa_contenttab1-char1. ELSE. xfc1-fieldname = 'VTNAM'. xfc1-datatype = 'CHAR'. xfc1-inttype = 'C'. xfc1-intlen = 18. * xfc-ref_table = wa_contentheader1-vtnam. * xfc-ref_field = wa_contenttab1-char1. ENDIF. APPEND xfc1 TO ifc1. CLEAR: xfc1. IF NOT wa_contenttab1-char1 IS INITIAL. xfc1-fieldname = 'CHAR1'. xfc1-datatype = 'CHAR'. xfc1-inttype = 'C'. xfc1-intlen = 30. * xfc1-ref_table = wa_contentheader1-vtnam. * xfc1-ref_field = wa_contenttab1-char1. ELSE. xfc1-fieldname = 'CHAR1'. xfc1-datatype = 'CHAR'. xfc1-inttype = 'C'. xfc1-intlen = 30. * xfc-ref_table = wa_contentheader1-vtnam. * xfc-ref_field = wa_contenttab1-char1. ENDIF. APPEND xfc1 TO ifc1. CLEAR: xfc1. IF NOT wa_contenttab1-char2 IS INITIAL. xfc1-fieldname = 'CHAR2'. xfc1-datatype = 'CHAR'. xfc1-inttype = 'C'. xfc1-intlen = 30. * xfc1-ref_table = wa_contentheader1-vtnam. * xfc1-ref_field = wa_contenttab1-char2. ELSE. xfc1-fieldname = 'CHAR2'. xfc1-datatype = 'CHAR'. xfc1-inttype = 'C'. xfc1-intlen = 30. * xfc-ref_table = wa_contentheader1-vtnam. * xfc-ref_field = wa_contenttab1-char2. ENDIF. APPEND xfc1 TO ifc1. CLEAR: xfc1. IF NOT wa_contenttab1-char3 IS INITIAL. xfc1-fieldname = 'CHAR3'. xfc1-datatype = 'CHAR'. xfc1-inttype = 'C'. xfc1-intlen = 30. * xfc1-ref_table = wa_contentheader1-vtnam. * xfc1-ref_field = wa_contenttab1-char3. ELSE. xfc1-fieldname = 'CHAR3'. xfc1-datatype = 'CHAR'. xfc1-inttype = 'C'. xfc1-intlen = 30. * xfc-ref_table = wa_contentheader1-vtnam. * xfc-ref_field = wa_contenttab1-char3. ENDIF. APPEND xfc1 TO ifc1. CLEAR: xfc1. IF NOT wa_contenttab1-char4 IS INITIAL. xfc1-fieldname = wa_contenttab1-char4. xfc1-datatype = 'CHAR4'. xfc1-inttype = 'C'. xfc1-intlen = 30. * xfc1-ref_table = wa_contentheader1-vtnam. * xfc1-ref_field = wa_contenttab1-char4. ELSE. xfc1-fieldname = 'CHAR4'. xfc1-datatype = 'CHAR'. xfc1-inttype = 'C'. xfc1-intlen = 30. * xfc-ref_table = wa_contentheader1-vtnam. * xfc-ref_field = wa_contenttab1-char4. ENDIF. APPEND xfc1 TO ifc1. CLEAR: xfc1. IF NOT wa_contenttab1-char5 IS INITIAL. xfc1-fieldname = wa_contenttab1-char5. xfc1-datatype = 'CHAR5'. xfc1-inttype = 'C'. xfc1-intlen = 30. * xfc1-ref_table = wa_contentheader1-vtnam. * xfc1-ref_field = wa_contenttab1-char5.* ELSE. xfc1-fieldname = 'CHAR5'. xfc1-datatype = 'CHAR'. xfc1-inttype = 'C'. xfc1-intlen = 30. * xfc-ref_table = wa_contentheader1-vtnam. * xfc-ref_field = wa_contenttab1-char5. ENDIF. APPEND xfc1 TO ifc1. CLEAR: xfc1. IF NOT wa_contenttab1-char6 IS INITIAL. xfc1-fieldname = 'CHAR6'. xfc1-datatype = 'CHAR'. xfc1-inttype = 'C'. xfc1-intlen = 30. * xfc1-ref_table = wa_contentheader1-vtnam. * xfc1-ref_field = wa_contenttab1-char6. ELSE. xfc1-fieldname = 'CHAR6'. xfc1-datatype = 'CHAR'. xfc1-inttype = 'C'. xfc1-intlen = 30. * xfc-ref_table = wa_contentheader1-vtnam. * xfc-ref_field = wa_contenttab1-char6. ENDIF. APPEND xfc1 TO ifc1. CLEAR: xfc1. IF NOT wa_contenttab1-char7 IS INITIAL. xfc1-fieldname = 'CHAR7'. xfc1-datatype = 'CHAR'. xfc1-inttype = 'C'. xfc1-intlen = 30. * xfc1-ref_table = wa_contentheader1-vtnam. * xfc1-ref_field = wa_contenttab1-char7. ELSE. xfc1-fieldname = 'CHAR7'. xfc1-datatype = 'CHAR'. xfc1-inttype = 'C'. xfc1-intlen = 30. * xfc-ref_table = wa_contentheader1-vtnam. * xfc-ref_field = wa_contenttab1-char7. ENDIF. APPEND xfc1 TO ifc1. CLEAR: xfc1. IF NOT wa_contenttab1-char8 IS INITIAL. xfc1-fieldname = 'CHAR8'. xfc1-datatype = 'CHAR'. xfc1-inttype = 'C'. xfc1-intlen = 30. * xfc1-ref_table = wa_contentheader1-vtnam. * xfc1-ref_field = wa_contenttab1-char8. * ELSE. xfc1-fieldname = 'CHAR8'. xfc1-datatype = 'CHAR'. xfc1-inttype = 'C'. xfc1-intlen = 30. * xfc-ref_table = wa_contentheader1-vtnam. * xfc-ref_field = wa_contenttab1-char8. ENDIF. APPEND xfc1 TO ifc1. CLEAR: xfc1. IF NOT wa_contenttab1-char9 IS INITIAL. xfc1-fieldname = 'CHAR9'. xfc1-datatype = 'CHAR'. xfc1-inttype = 'C'. xfc1-intlen = 30. * xfc1-ref_table = wa_contentheader1-vtnam. * xfc1-ref_field = wa_contenttab1-char9. ELSE. xfc1-fieldname = 'CHAR9'. xfc1-datatype = 'CHAR'. xfc1-inttype = 'C'. xfc1-intlen = 30. * xfc-ref_table = wa_contentheader1-vtnam. * xfc-ref_field = wa_contenttab1-char9. ENDIF. APPEND xfc1 TO ifc1. CLEAR: xfc1. IF NOT wa_contenttab1-char10 IS INITIAL. xfc1-fieldname = 'CHAR10'. xfc1-datatype = 'CHAR'. xfc1-inttype = 'C'. xfc1-intlen = 30. * xfc1-ref_table = wa_contentheader1-vtnam. * xfc1-ref_field = wa_contenttab1-char10. ELSE. xfc1-fieldname = 'CHAR10'. xfc1-datatype = 'CHAR'. xfc1-inttype = 'C'. xfc1-intlen = 30. * xfc-ref_table = wa_contentheader1-vtnam. * xfc-ref_field = wa_contenttab1-char10. ENDIF. APPEND xfc1 TO ifc1. CLEAR: xfc1. IF NOT wa_contenttab1-char11 IS INITIAL. xfc1-fieldname = 'CHAR11'. xfc1-datatype = 'CHAR'. xfc1-inttype = 'C'. xfc1-intlen = 30. * xfc1-ref_table = wa_contentheader1-vtnam. * xfc1-ref_field = wa_contenttab1-char11. ELSE. xfc1-fieldname = 'CHAR11'. xfc1-datatype = 'CHAR'. xfc1-inttype = 'C'. xfc1-intlen = 30. * xfc-ref_table = wa_contentheader1-vtnam. * xfc-ref_field = wa_contenttab1-char11. * ENDIF. APPEND xfc1 TO ifc1. CLEAR: xfc1. IF NOT wa_contenttab1-char12 IS INITIAL. xfc1-fieldname = 'CHAR12'. xfc1-datatype = 'CHAR'. xfc1-inttype = 'C'. xfc1-intlen = 30. * xfc1-ref_table = wa_contentheader1-vtnam. * xfc1-ref_field = wa_contenttab1-char12. ELSE. xfc1-fieldname = 'CHAR12'. xfc1-datatype = 'CHAR'. xfc1-inttype = 'C'. xfc1-intlen = 30. * xfc-ref_table = wa_contentheader1-vtnam. * xfc-ref_field = wa_contenttab1-char12. ENDIF. APPEND xfc1 TO ifc1. CLEAR: xfc1. IF NOT wa_contenttab1-char13 IS INITIAL. xfc1-fieldname = 'CHAR13'. xfc1-datatype = 'CHAR'. xfc1-inttype = 'C'. xfc1-intlen = 30. * xfc1-ref_table = wa_contentheader1-vtnam. * xfc1-ref_field = wa_contenttab1-char13. ELSE. xfc1-fieldname = 'CHAR13'. xfc1-datatype = 'CHAR'. xfc1-inttype = 'C'. xfc1-intlen = 30. * xfc-ref_table = wa_contentheader1-vtnam. * xfc-ref_field = wa_contenttab1-char13. ENDIF. APPEND xfc1 TO ifc1. CLEAR: xfc1. IF NOT wa_contenttab1-char14 IS INITIAL. xfc1-fieldname = 'CHAR14'. xfc1-datatype = 'CHAR'. xfc1-inttype = 'C'. xfc1-intlen = 30. * xfc1-ref_table = wa_contentheader1-vtnam. * xfc1-ref_field = wa_contenttab1-char14. ELSE. xfc1-fieldname = 'CHAR14'. xfc1-datatype = 'CHAR'. xfc1-inttype = 'C'. xfc1-intlen = 30. * xfc-ref_table = wa_contentheader1-vtnam. * xfc-ref_field = wa_contenttab1-char14. * ENDIF. APPEND xfc1 TO ifc1. CLEAR: xfc1. IF NOT wa_contenttab1-char15 IS INITIAL. xfc1-fieldname = 'CHAR15'. xfc1-datatype = 'CHAR'. xfc1-inttype = 'C'. xfc1-intlen = 30. * xfc1-ref_table = wa_contentheader1-vtnam. * xfc1-ref_field = wa_contenttab1-char15. ELSE. xfc1-fieldname = 'CHAR15'. xfc1-datatype = 'CHAR'. xfc1-inttype = 'C'. xfc1-intlen = 30. * xfc-ref_table = wa_contentheader1-vtnam. * xfc-ref_field = wa_contenttab1-char15. ENDIF. APPEND xfc1 TO ifc1. CLEAR: xfc1. ENDIF. CLEAR: dy_table5. UNASSIGN <dyn_table2>. UNASSIGN <dyn_table3>. UNASSIGN <dyn_wa5>. UNASSIGN <dyn_wa6>. CALL METHOD cl_alv_table_create=>create_dynamic_table EXPORTING it_fieldcatalog = ifc1 IMPORTING ep_table = dy_table5. ASSIGN dy_table5->* TO <dyn_table2>. ASSIGN dy_table5->* TO <dyn_table3>. * Create dynamic work area and assign to FS CREATE DATA dy_line5 LIKE LINE OF <dyn_table2>. ASSIGN dy_line5->* TO <dyn_wa5>. CHECK ( <dyn_wa5> IS ASSIGNED ). * Create dynamic work area and assign to FS CREATE DATA dy_line6 LIKE LINE OF <dyn_table3>. ASSIGN dy_line6->* TO <dyn_wa6>. CHECK ( <dyn_wa6> IS ASSIGNED ). * DELETE i_contenttab1 INDEX 1. *try to condense the fields and move all data. LOOP AT i_contenttab1 INTO wa_contenttab1. MOVE wa_contenttab1 TO <dyn_wa5>. APPEND <dyn_wa5> TO <dyn_table2>. ENDLOOP. ******************************************************** *MOD-012 ******************************************************** * go_sdescr ?= cl_abap_structdescr=>describe_by_name( l_tabname ). * gd_tabnam = go_sdescr->get_relative_name( ). * * DO 5 TIMES. *READ TABLE go_sdescr->components INTO gs_component INDEX syst-index. * * CONCATENATE gd_tabnam gs_component-name INTO gd_tabfield * SEPARATED BY '-'. * * CLEAR: gs_comp. * gs_comp-type ?= cl_abap_datadescr=>describe_by_name( gd_tabfield ). * gs_comp-name = gs_component-name. * APPEND gs_comp TO gt_components. * ENDDO. ******************************************************** *MOD-012 ******************************************************** LOOP AT <dyn_table2> ASSIGNING <dyn_wa5>. MOVE-CORRESPONDING <dyn_wa5> TO wa_content. APPEND wa_content TO itab_content. ENDLOOP. ******************************************************** *MOD-012 ******************************************************** DATA: wa_datatab TYPE ty_data. * DELETE GT_COMPONENTS INDEX 1. SELECT tabname fieldname INTO TABLE itab_dd03l FROM dd03l WHERE tabname = l_tabname. CHECK sy-subrc = 0. DELETE itab_dd03l INDEX 1. LOOP AT i_contenttab3 INTO wa_contenttab3. MOVE-CORRESPONDING wa_contenttab3 TO wa_contenttab5. APPEND wa_contenttab5 TO i_contenttab5. CLEAR: wa_contenttab5. ENDLOOP. READ TABLE i_contenttab3 INTO wa_contenttab3 INDEX 1. IF sy-subrc = 0. APPEND wa_contenttab3 TO i_contenttab4. CLEAR wa_contenttab3. ENDIF. DELETE itab_content WHERE vtnam IS INITIAL. LOOP AT i_contenttab5 INTO wa_contenttab5. READ TABLE i_contenttab4 INTO wa_contenttab4 WITH KEY vtnam = wa_contenttab5-vtnam char1 = wa_contenttab5-char1. IF sy-subrc = 0. l_comp1 = wa_contenttab4-char1. wa_contenttab5-comp1 = wa_contenttab4-char1. MODIFY i_contenttab5 FROM wa_contenttab5 TRANSPORTING comp1. ENDIF. ENDLOOP. LOOP AT i_contenttab5 INTO wa_contenttab5. READ TABLE i_contenttab4 INTO wa_contenttab4 WITH KEY vtnam = wa_contenttab5-vtnam char2 = wa_contenttab5-char2. IF sy-subrc = 0. l_comp2 = wa_contenttab4-char2. wa_contenttab5-comp2 = wa_contenttab4-char2. MODIFY i_contenttab5 FROM wa_contenttab5 TRANSPORTING comp2. ENDIF. ENDLOOP. LOOP AT i_contenttab5 INTO wa_contenttab5. READ TABLE i_contenttab4 INTO wa_contenttab4 WITH KEY vtnam = wa_contenttab5-vtnam char3 = wa_contenttab5-char3. IF sy-subrc = 0. l_comp3 = wa_contenttab4-char3. wa_contenttab5-comp3 = wa_contenttab4-char3. MODIFY i_contenttab5 FROM wa_contenttab5 TRANSPORTING comp3. ENDIF. ENDLOOP. LOOP AT i_contenttab5 INTO wa_contenttab5. READ TABLE i_contenttab4 INTO wa_contenttab4 WITH KEY vtnam = wa_contenttab5-vtnam char4 = wa_contenttab5-char4. IF sy-subrc = 0. l_comp4 = wa_contenttab4-char4. wa_contenttab5-comp4 = wa_contenttab4-char4. MODIFY i_contenttab5 FROM wa_contenttab5 TRANSPORTING comp4. ENDIF. ENDLOOP. LOOP AT i_contenttab5 INTO wa_contenttab5. READ TABLE i_contenttab4 INTO wa_contenttab4 WITH KEY vtnam = wa_contenttab5-vtnam char5 = wa_contenttab5-char5. IF sy-subrc = 0. l_comp5 = wa_contenttab4-char5. wa_contenttab5-comp5 = wa_contenttab4-char5. MODIFY i_contenttab5 FROM wa_contenttab5 TRANSPORTING comp5. ENDIF. ENDLOOP. LOOP AT i_contenttab5 INTO wa_contenttab5. READ TABLE i_contenttab4 INTO wa_contenttab4 WITH KEY vtnam = wa_contenttab5-vtnam char6 = wa_contenttab5-char6. IF sy-subrc = 0. l_comp6 = wa_contenttab4-char6. wa_contenttab5-comp6 = wa_contenttab4-char6. MODIFY i_contenttab5 FROM wa_contenttab5 TRANSPORTING comp6. ENDIF. ENDLOOP. LOOP AT i_contenttab5 INTO wa_contenttab5. READ TABLE i_contenttab4 INTO wa_contenttab4 WITH KEY vtnam = wa_contenttab5-vtnam char7 = wa_contenttab5-char7. IF sy-subrc = 0. l_comp7 = wa_contenttab4-char7. wa_contenttab5-comp7 = wa_contenttab4-char7. MODIFY i_contenttab5 FROM wa_contenttab5 TRANSPORTING comp7. ENDIF. ENDLOOP. LOOP AT i_contenttab5 INTO wa_contenttab5. READ TABLE i_contenttab4 INTO wa_contenttab4 WITH KEY vtnam = wa_contenttab5-vtnam char8 = wa_contenttab5-char8. IF sy-subrc = 0. l_comp8 = wa_contenttab4-char8. wa_contenttab5-comp8 = wa_contenttab4-char8. MODIFY i_contenttab5 FROM wa_contenttab5 TRANSPORTING comp8. ENDIF. ENDLOOP. LOOP AT i_contenttab5 INTO wa_contenttab5. READ TABLE i_contenttab4 INTO wa_contenttab4 WITH KEY vtnam = wa_contenttab5-vtnam char9 = wa_contenttab5-char9. IF sy-subrc = 0. l_comp9 = wa_contenttab4-char9. wa_contenttab5-comp9 = wa_contenttab4-char9. MODIFY i_contenttab5 FROM wa_contenttab5 TRANSPORTING comp9. ENDIF. ENDLOOP. LOOP AT i_contenttab5 INTO wa_contenttab5. READ TABLE i_contenttab4 INTO wa_contenttab4 WITH KEY vtnam = wa_contenttab5-vtnam char10 = wa_contenttab5-char10. IF sy-subrc = 0. l_comp10 = wa_contenttab4-char10. wa_contenttab5-comp10 = wa_contenttab4-char10. MODIFY i_contenttab5 FROM wa_contenttab5 TRANSPORTING comp10. ENDIF. ENDLOOP. LOOP AT i_contenttab5 INTO wa_contenttab5. READ TABLE i_contenttab4 INTO wa_contenttab4 WITH KEY vtnam = wa_contenttab5-vtnam char11 = wa_contenttab5-char11. IF sy-subrc = 0. l_comp11 = wa_contenttab4-char11. wa_contenttab5-comp11 = wa_contenttab4-char11. MODIFY i_contenttab5 FROM wa_contenttab5 TRANSPORTING comp11. ENDIF. ENDLOOP. LOOP AT i_contenttab5 INTO wa_contenttab5. READ TABLE i_contenttab4 INTO wa_contenttab4 WITH KEY vtnam = wa_contenttab5-vtnam char12 = wa_contenttab5-char12. IF sy-subrc = 0. l_comp12 = wa_contenttab4-char12. wa_contenttab5-comp12 = wa_contenttab4-char12. MODIFY i_contenttab5 FROM wa_contenttab5 TRANSPORTING comp12. ENDIF. ENDLOOP. LOOP AT i_contenttab5 INTO wa_contenttab5. READ TABLE i_contenttab4 INTO wa_contenttab4 WITH KEY vtnam = wa_contenttab5-vtnam char13 = wa_contenttab5-char13. IF sy-subrc = 0. l_comp13 = wa_contenttab4-char13. wa_contenttab5-comp13 = wa_contenttab4-char13. MODIFY i_contenttab5 FROM wa_contenttab5 TRANSPORTING comp13. ENDIF. ENDLOOP. LOOP AT i_contenttab5 INTO wa_contenttab5. READ TABLE i_contenttab4 INTO wa_contenttab4 WITH KEY vtnam = wa_contenttab5-vtnam char14 = wa_contenttab5-char14. IF sy-subrc = 0. l_comp14 = wa_contenttab4-char14. wa_contenttab5-comp14 = wa_contenttab4-char14. MODIFY i_contenttab5 FROM wa_contenttab5 TRANSPORTING comp14. ENDIF. ENDLOOP. LOOP AT i_contenttab5 INTO wa_contenttab5. READ TABLE i_contenttab4 INTO wa_contenttab4 WITH KEY vtnam = wa_contenttab5-vtnam char15 = wa_contenttab5-char15. IF sy-subrc = 0. l_comp15 = wa_contenttab4-char15. wa_contenttab5-comp15 = wa_contenttab4-char15. MODIFY i_contenttab5 FROM wa_contenttab5 TRANSPORTING comp15. ENDIF. ENDLOOP. LOOP AT i_contenttab5 INTO wa_contenttab5. wa_contenttab5-comp1 = l_comp1. wa_contenttab5-comp2 = l_comp2. wa_contenttab5-comp3 = l_comp3. wa_contenttab5-comp4 = l_comp4. wa_contenttab5-comp5 = l_comp5. wa_contenttab5-comp6 = l_comp6. wa_contenttab5-comp7 = l_comp7. wa_contenttab5-comp8 = l_comp8. wa_contenttab5-comp9 = l_comp9. wa_contenttab5-comp10 = l_comp10. wa_contenttab5-comp11 = l_comp11. wa_contenttab5-comp12 = l_comp12. wa_contenttab5-comp13 = l_comp13. wa_contenttab5-comp14 = l_comp14. wa_contenttab5-comp15 = l_comp15. MODIFY i_contenttab5 FROM wa_contenttab5 TRANSPORTING comp1 comp2 comp3 comp4 comp5 comp6 comp7 comp8 comp9 comp10 comp11 comp12 comp13 comp14 comp15. ENDLOOP. DELETE i_contenttab5 INDEX 1. LOOP AT itab_dd03l INTO wa_dd03l. LOOP AT i_contenttab5 INTO wa_contenttab5 WHERE vtnam = wa_dd03l-tabname AND comp1 = wa_dd03l-fieldname OR comp2 = wa_dd03l-fieldname OR comp3 = wa_dd03l-fieldname OR comp4 = wa_dd03l-fieldname OR comp5 = wa_dd03l-fieldname OR comp6 = wa_dd03l-fieldname OR comp7 = wa_dd03l-fieldname OR comp8 = wa_dd03l-fieldname OR comp9 = wa_dd03l-fieldname OR comp10 = wa_dd03l-fieldname OR comp11 = wa_dd03l-fieldname OR comp12 = wa_dd03l-fieldname OR comp13 = wa_dd03l-fieldname OR comp14 = wa_dd03l-fieldname OR comp15 = wa_dd03l-fieldname. CHECK sy-subrc = 0. l_tabix = sy-tabix. CONCATENATE 'CHAR' l_tabix INTO l_wa_content1. l_value = wa_contenttab5-char1. l_value1 = wa_contenttab5-comp1. ASSIGN wa_contenttab5-comp1 TO <fs_field>. ASSIGN l_value TO <fs_field1>. wa_datatab-name = l_value1. wa_datatab-value = l_value. APPEND wa_datatab TO i_datatab. CLEAR:wa_datatab. l_value = wa_contenttab5-char2. l_value1 = wa_contenttab5-comp2. ASSIGN wa_contenttab5-comp2 TO <fs_field>. ASSIGN l_value TO <fs_field1>. wa_datatab-name = l_value1. wa_datatab-value = l_value. APPEND wa_datatab TO i_datatab. CLEAR:wa_datatab. l_value = wa_contenttab5-char3. l_value1 = wa_contenttab5-comp3. ASSIGN wa_contenttab5-comp3 TO <fs_field>. ASSIGN l_value TO <fs_field1>. wa_datatab-name = l_value1. wa_datatab-value = l_value. APPEND wa_datatab TO i_datatab. CLEAR:wa_datatab. l_value = wa_contenttab5-char4. l_value1 = wa_contenttab5-comp4. ASSIGN wa_contenttab5-comp3 TO <fs_field>. ASSIGN l_value TO <fs_field1>. wa_datatab-name = l_value1. wa_datatab-value = l_value. APPEND wa_datatab TO i_datatab. CLEAR:wa_datatab. l_value = wa_contenttab5-char5. l_value1 = wa_contenttab5-comp5. ASSIGN wa_contenttab5-comp3 TO <fs_field>. ASSIGN l_value TO <fs_field1>. wa_datatab-name = l_value1. wa_datatab-value = l_value. APPEND wa_datatab TO i_datatab. CLEAR:wa_datatab. l_value = wa_contenttab5-char6. l_value1 = wa_contenttab5-comp6. ASSIGN wa_contenttab5-comp3 TO <fs_field>. ASSIGN l_value TO <fs_field1>. wa_datatab-name = l_value1. wa_datatab-value = l_value. APPEND wa_datatab TO i_datatab. CLEAR:wa_datatab. l_value = wa_contenttab5-char7. l_value1 = wa_contenttab5-comp7. ASSIGN wa_contenttab5-comp3 TO <fs_field>. ASSIGN l_value TO <fs_field1>. wa_datatab-name = l_value1. wa_datatab-value = l_value. APPEND wa_datatab TO i_datatab. CLEAR:wa_datatab. l_value = wa_contenttab5-char8. l_value1 = wa_contenttab5-comp8. ASSIGN wa_contenttab5-comp3 TO <fs_field>. ASSIGN l_value TO <fs_field1>. wa_datatab-name = l_value1. wa_datatab-value = l_value. APPEND wa_datatab TO i_datatab. CLEAR:wa_datatab. l_value = wa_contenttab5-char9. l_value1 = wa_contenttab5-comp9. ASSIGN wa_contenttab5-comp3 TO <fs_field>. ASSIGN l_value TO <fs_field1>. wa_datatab-name = l_value1. wa_datatab-value = l_value. APPEND wa_datatab TO i_datatab. CLEAR:wa_datatab. l_value = wa_contenttab5-char10. l_value1 = wa_contenttab5-comp10. ASSIGN wa_contenttab5-comp3 TO <fs_field>. ASSIGN l_value TO <fs_field1>. wa_datatab-name = l_value1. wa_datatab-value = l_value. APPEND wa_datatab TO i_datatab. CLEAR:wa_datatab. l_value = wa_contenttab5-char11. l_value1 = wa_contenttab5-comp11. ASSIGN wa_contenttab5-comp3 TO <fs_field>. ASSIGN l_value TO <fs_field1>. wa_datatab-name = l_value1. wa_datatab-value = l_value. APPEND wa_datatab TO i_datatab. CLEAR:wa_datatab. l_value = wa_contenttab5-char12. l_value1 = wa_contenttab5-comp12. ASSIGN wa_contenttab5-comp3 TO <fs_field>. ASSIGN l_value TO <fs_field1>. wa_datatab-name = l_value1. wa_datatab-value = l_value. APPEND wa_datatab TO i_datatab. CLEAR:wa_datatab. l_value = wa_contenttab5-char13. l_value1 = wa_contenttab5-comp13. ASSIGN wa_contenttab5-comp3 TO <fs_field>. ASSIGN l_value TO <fs_field1>. wa_datatab-name = l_value1. wa_datatab-value = l_value. APPEND wa_datatab TO i_datatab. CLEAR:wa_datatab. l_value = wa_contenttab5-char14. l_value1 = wa_contenttab5-comp14. ASSIGN wa_contenttab5-comp3 TO <fs_field>. ASSIGN l_value TO <fs_field1>. wa_datatab-name = l_value1. wa_datatab-value = l_value. APPEND wa_datatab TO i_datatab. CLEAR:wa_datatab. l_value = wa_contenttab5-char15. l_value1 = wa_contenttab5-comp15. ASSIGN wa_contenttab5-comp3 TO <fs_field>. ASSIGN l_value TO <fs_field1>. wa_datatab-name = l_value1. wa_datatab-value = l_value. APPEND wa_datatab TO i_datatab. CLEAR:wa_datatab. ************************************************************************ ******** ** ASSIGN COMPONENT GS_COMP-NAME OF STRUCTURE GS_COMP TO *<fs_field>. ** IF <fs_field> IS ASSIGNED. ** ASSIGN COMPONENT L_WA_CONTENT1 OF STRUCTURE <dyn_wa5> TO *<fs_field1>. ** IF <fs_field1> IS ASSIGNED. ** <fs_field> = <fs_field1>. ** ENDIF. ** ENDIF. ** INSERT <dyn_wa> INTO TABLE <dyn_table>. ************************************************************************ ******** ENDLOOP. ENDLOOP. ************************************************************************ ** *MOD-012 ************************************************************************ ** * Creating the Internal table with the structure of the * current table. SELECT * FROM (l_tabname) INTO TABLE <dyn_table1>. SORT <dyn_table1>. SORT i_contenttab1. * DELETE I_CONTENTTAB1 WHERE CHAR1 IS INITIAL. DESCRIBE TABLE <dyn_table1> LINES l_lines1. * if l_lines1 > 0. * loop at i_contenttab1 into wa_contenttab1. * LOOP AT <dyn_table1> ASSIGNING <dyn_wa1>. * l_index1 = 2. * *assign component l_index1 of structure wa_contenttab1 to <fs_field2>. *assign component l_index1 of structure <dyn_wa1> to <fs_field3>. * if <fs_field3> = <fs_field2>. * clear: <dyn_wa1>. * wa_contenttab1-flag = c_x. * MODIFY i_contenttab1 FROM wa_contenttab1 TRANSPORTING flag. * endif. * UNASSIGN <fs_field2>. * UNASSIGN <fs_field3>. * l_index1 = l_index1 + 1. * endloop. * endloop. * endif. * clear: l_index1. * ************************************************************************ ******************************** *MOD-015 ************************************************************************ ******************************** * if l_lines1 > 0. * loop at i_contenttab1 into wa_contenttab1. * LOOP AT <dyn_table1> ASSIGNING <dyn_wa1>. * *read table i_contenttab3 into wa_contenttab3 with key vtnam = *wa_contenttab1-vtnam binary search. * if sy-subrc = 0. *READ TABLE i_col_pos INTO wa_col_pos with key vtnam = *wa_contenttab1-vtnam *atnam = wa_contenttab3-char1 binary search. * * if sy-subrc = 0. *READ TABLE I_CUVTAB_FLD INTO WA_CUVTAB_FLD WITH KEY VTINT = *WA_COL_POS-VTINT *ATINN = WA_COL_POS-ATINN *VTPOS = WA_COL_POS-VTPOS BINARY SEARCH. * * if sy-subrc = 0. * l_index1 = wa_col_pos-field + 1. * l_dbfld = wa_cuvtab_fld-dbfld. *assign component l_index1 of structure wa_contenttab1 to <fs_field2>. *assign component l_dbfld of structure <dyn_wa> to <fs_field3>. * <fs_field3> = <fs_field2>. * endif. * endif. * endif. * endloop. * endif. ************************************************************************ ******************************** *MOD-015 ************************************************************************ ******************************** DELETE i_contenttab1 WHERE flag = c_x. SORT i_contenttab1. DELETE ADJACENT DUPLICATES FROM i_contenttab1. * DELETE I_CONTENTTAB1 WHERE CHAR1 IS INITIAL. ************************************************************************ ** *MOD-012 ************************************************************************ ** * UNASSIGN <dyn_table>. ************************************************************************ *** **MOD-012 ************************************************************************ *** * describe table itab_dd03l lines l_lines. * loop at i_contenttab1 into wa_contenttab1. * l_index1 = 2. * do l_lines times. *assign component l_index1 of structure wa_contenttab1 to <fs_field2>. * assign component l_index1 of structure <dyn_wa> to <fs_field3>. * <fs_field3> = <fs_field2>. * l_index1 = l_index1 + 1. * enddo. * append <dyn_wa> to <dyn_table>. * endloop. ************************************************************************ **** ***MOD-012 ************************************************************************ ****** * describe table itab_dd03l lines l_lines. * l_lines_varcond = l_lines + 1. * loop at i_contenttab1 into wa_contenttab1. * l_index1 = 2. * do l_lines times. *assign component l_index1 of structure wa_contenttab1 to <fs_field2>. * assign component l_index1 of structure <dyn_wa> to <fs_field3>. * <fs_field3> = <fs_field2>. * l_index1 = l_index1 + 1. * enddo. * UNASSIGN <fs_field2>. * UNASSIGN <fs_field3>. *assign component 'Z_VARCOND' of structure wa_contenttab1 to *<fs_field2>. *assign component l_lines_varcond of structure <dyn_wa> to <fs_field3>. * <fs_field3> = <fs_field2>. * append <dyn_wa> to <dyn_table>. * endloop. ************************************************************************ ** ***MOD-016 ************************************************************************ *** * loop at i_contenttab1 into wa_contenttab1 * where vtnam = wa_contentheader1-vtnam. * * read table i_file into wa_file * with key vtnam = wa_contentheader1-vtnam * char1 = wa_contenttab1-char1 * char2 = wa_contenttab1-char2 * char3 = wa_contenttab1-char3 * char4 = wa_contenttab1-char4 * char5 = wa_contenttab1-char5 * char6 = wa_contenttab1-char6 * char7 = wa_contenttab1-char7 * char8 = wa_contenttab1-char8 * char9 = wa_contenttab1-char9 * char10 = wa_contenttab1-char10 * char11 = wa_contenttab1-char11 * char12 = wa_contenttab1-char12 * char13 = wa_contenttab1-char13 * char14 = wa_contenttab1-char14 * char15 = wa_contenttab1-char15 * . * if sy-subrc = 0. * wa_contenttab1-flag = c_x. * modify i_contenttab1 from wa_contenttab1 transporting flag. * endif. * endloop. * * delete i_contenttab1 where flag = c_x. ************************************************************************ **** ***MOD-016 ************************************************************************ ***** DATA: l_dbfld TYPE name_feld. DESCRIBE TABLE itab_dd03l LINES l_lines. LOOP AT i_contenttab1 INTO wa_contenttab1 WHERE vtnam = wa_contentheader1-vtnam. *read table i_contenttab3 into wa_contenttab3 with key vtnam = *wa_contenttab1-vtnam binary search. READ TABLE i_contenttab3 INTO wa_contenttab3 INDEX 1. IF sy-subrc = 0. READ TABLE i_col_pos INTO wa_col_pos WITH KEY vtnam = wa_contenttab1-vtnam atnam = wa_contenttab3-char1. * . " binary search. IF sy-subrc = 0. READ TABLE i_cuvtab_fld INTO wa_cuvtab_fld WITH KEY vtint = wa_col_pos-vtint atinn = wa_col_pos-atinn vtpos = wa_col_pos-vtpos BINARY SEARCH. IF sy-subrc = 0. l_index1 = wa_col_pos-field + 1. * l_index1 = wa_col_pos-field. l_dbfld = wa_cuvtab_fld-dbfld. ASSIGN COMPONENT l_index1 OF STRUCTURE wa_contenttab1 TO <fs_field2>. ASSIGN COMPONENT l_dbfld OF STRUCTURE <dyn_wa> TO <fs_field3>. <fs_field3> = <fs_field2>. ENDIF. ENDIF. ************************************************************************ **** ***MOD-015 ************************************************************************ **** READ TABLE i_col_pos INTO wa_col_pos WITH KEY vtnam = wa_contenttab1-vtnam atnam = wa_contenttab3-char2 . " binary search. IF sy-subrc = 0. READ TABLE i_cuvtab_fld INTO wa_cuvtab_fld WITH KEY vtint = wa_col_pos-vtint atinn = wa_col_pos-atinn vtpos = wa_col_pos-vtpos BINARY SEARCH. IF sy-subrc = 0. l_index1 = wa_col_pos-field + 1. * l_index1 = wa_col_pos-field. l_dbfld = wa_cuvtab_fld-dbfld. ASSIGN COMPONENT l_index1 OF STRUCTURE wa_contenttab1 TO <fs_field2>. ASSIGN COMPONENT l_dbfld OF STRUCTURE <dyn_wa> TO <fs_field3>. <fs_field3> = <fs_field2>. ENDIF. ENDIF. READ TABLE i_col_pos INTO wa_col_pos WITH KEY vtnam = wa_contenttab1-vtnam atnam = wa_contenttab3-char3 . " binary search. IF sy-subrc = 0. READ TABLE i_cuvtab_fld INTO wa_cuvtab_fld WITH KEY vtint = wa_col_pos-vtint atinn = wa_col_pos-atinn vtpos = wa_col_pos-vtpos BINARY SEARCH. IF sy-subrc = 0. l_index1 = wa_col_pos-field + 1. * l_index1 = wa_col_pos-field. l_dbfld = wa_cuvtab_fld-dbfld. ASSIGN COMPONENT l_index1 OF STRUCTURE wa_contenttab1 TO <fs_field2>. ASSIGN COMPONENT l_dbfld OF STRUCTURE <dyn_wa> TO <fs_field3>. <fs_field3> = <fs_field2>. ENDIF. ENDIF. . READ TABLE i_col_pos INTO wa_col_pos WITH KEY vtnam = wa_contenttab1-vtnam atnam = wa_contenttab3-char4. " binary search. IF sy-subrc = 0. READ TABLE i_cuvtab_fld INTO wa_cuvtab_fld WITH KEY vtint = wa_col_pos-vtint atinn = wa_col_pos-atinn vtpos = wa_col_pos-vtpos BINARY SEARCH. IF sy-subrc = 0. l_index1 = wa_col_pos-field + 1. * l_index1 = wa_col_pos-field. l_dbfld = wa_cuvtab_fld-dbfld. ASSIGN COMPONENT l_index1 OF STRUCTURE wa_contenttab1 TO <fs_field2>. ASSIGN COMPONENT l_dbfld OF STRUCTURE <dyn_wa> TO <fs_field3>. <fs_field3> = <fs_field2>. ENDIF. ENDIF. READ TABLE i_col_pos INTO wa_col_pos WITH KEY vtnam = wa_contenttab1-vtnam atnam = wa_contenttab3-char5. " binary search. IF sy-subrc = 0. READ TABLE i_cuvtab_fld INTO wa_cuvtab_fld WITH KEY vtint = wa_col_pos-vtint atinn = wa_col_pos-atinn vtpos = wa_col_pos-vtpos BINARY SEARCH. IF sy-subrc = 0. l_index1 = wa_col_pos-field + 1. * l_index1 = wa_col_pos-field. l_dbfld = wa_cuvtab_fld-dbfld. ASSIGN COMPONENT l_index1 OF STRUCTURE wa_contenttab1 TO <fs_field2>. ASSIGN COMPONENT l_dbfld OF STRUCTURE <dyn_wa> TO <fs_field3>. <fs_field3> = <fs_field2>. ENDIF. ENDIF. READ TABLE i_col_pos INTO wa_col_pos WITH KEY vtnam = wa_contenttab1-vtnam atnam = wa_contenttab3-char6 . " binary search. IF sy-subrc = 0. READ TABLE i_cuvtab_fld INTO wa_cuvtab_fld WITH KEY vtint = wa_col_pos-vtint atinn = wa_col_pos-atinn vtpos = wa_col_pos-vtpos BINARY SEARCH. IF sy-subrc = 0. l_index1 = wa_col_pos-field + 1. * l_index1 = wa_col_pos-field. l_dbfld = wa_cuvtab_fld-dbfld. ASSIGN COMPONENT l_index1 OF STRUCTURE wa_contenttab1 TO <fs_field2>. ASSIGN COMPONENT l_dbfld OF STRUCTURE <dyn_wa> TO <fs_field3>. <fs_field3> = <fs_field2>. ENDIF. ENDIF. READ TABLE i_col_pos INTO wa_col_pos WITH KEY vtnam = wa_contenttab1-vtnam atnam = wa_contenttab3-char7 . " binary search. IF sy-subrc = 0. READ TABLE i_cuvtab_fld INTO wa_cuvtab_fld WITH KEY vtint = wa_col_pos-vtint atinn = wa_col_pos-atinn vtpos = wa_col_pos-vtpos BINARY SEARCH. IF sy-subrc = 0. l_index1 = wa_col_pos-field + 1. * l_index1 = wa_col_pos-field. l_dbfld = wa_cuvtab_fld-dbfld. ASSIGN COMPONENT l_index1 OF STRUCTURE wa_contenttab1 TO <fs_field2>. ASSIGN COMPONENT l_dbfld OF STRUCTURE <dyn_wa> TO <fs_field3>. <fs_field3> = <fs_field2>. ENDIF. ENDIF. READ TABLE i_col_pos INTO wa_col_pos WITH KEY vtnam = wa_contenttab1-vtnam atnam = wa_contenttab3-char8 . "binary search. IF sy-subrc = 0. READ TABLE i_cuvtab_fld INTO wa_cuvtab_fld WITH KEY vtint = wa_col_pos-vtint atinn = wa_col_pos-atinn vtpos = wa_col_pos-vtpos BINARY SEARCH. IF sy-subrc = 0. l_index1 = wa_col_pos-field + 1. * l_index1 = wa_col_pos-field. l_dbfld = wa_cuvtab_fld-dbfld. ASSIGN COMPONENT l_index1 OF STRUCTURE wa_contenttab1 TO <fs_field2>. ASSIGN COMPONENT l_dbfld OF STRUCTURE <dyn_wa> TO <fs_field3>. <fs_field3> = <fs_field2>. ENDIF. ENDIF. READ TABLE i_col_pos INTO wa_col_pos WITH KEY vtnam = wa_contenttab1-vtnam atnam = wa_contenttab3-char9 . " binary search. IF sy-subrc = 0. READ TABLE i_cuvtab_fld INTO wa_cuvtab_fld WITH KEY vtint = wa_col_pos-vtint atinn = wa_col_pos-atinn vtpos = wa_col_pos-vtpos BINARY SEARCH. IF sy-subrc = 0. l_index1 = wa_col_pos-field + 1. * l_index1 = wa_col_pos-field. l_dbfld = wa_cuvtab_fld-dbfld. ASSIGN COMPONENT l_index1 OF STRUCTURE wa_contenttab1 TO <fs_field2>. ASSIGN COMPONENT l_dbfld OF STRUCTURE <dyn_wa> TO <fs_field3>. <fs_field3> = <fs_field2>. ENDIF. ENDIF. READ TABLE i_col_pos INTO wa_col_pos WITH KEY vtnam = wa_contenttab1-vtnam atnam = wa_contenttab3-char10. " binary search. IF sy-subrc = 0. READ TABLE i_cuvtab_fld INTO wa_cuvtab_fld WITH KEY vtint = wa_col_pos-vtint atinn = wa_col_pos-atinn vtpos = wa_col_pos-vtpos BINARY SEARCH. IF sy-subrc = 0. l_index1 = wa_col_pos-field + 1. * l_index1 = wa_col_pos-field. l_dbfld = wa_cuvtab_fld-dbfld. ASSIGN COMPONENT l_index1 OF STRUCTURE wa_contenttab1 TO <fs_field2>. ASSIGN COMPONENT l_dbfld OF STRUCTURE <dyn_wa> TO <fs_field3>. <fs_field3> = <fs_field2>. ENDIF. ENDIF. READ TABLE i_col_pos INTO wa_col_pos WITH KEY vtnam = wa_contenttab1-vtnam atnam = wa_contenttab3-char11. " binary search. IF sy-subrc = 0. READ TABLE i_cuvtab_fld INTO wa_cuvtab_fld WITH KEY vtint = wa_col_pos-vtint atinn = wa_col_pos-atinn vtpos = wa_col_pos-vtpos BINARY SEARCH. IF sy-subrc = 0. l_index1 = wa_col_pos-field + 1. * l_index1 = wa_col_pos-field. l_dbfld = wa_cuvtab_fld-dbfld. ASSIGN COMPONENT l_index1 OF STRUCTURE wa_contenttab1 TO <fs_field2>. ASSIGN COMPONENT l_dbfld OF STRUCTURE <dyn_wa> TO <fs_field3>. <fs_field3> = <fs_field2>. ENDIF. ENDIF. . READ TABLE i_col_pos INTO wa_col_pos WITH KEY vtnam = wa_contenttab1-vtnam atnam = wa_contenttab3-char12. " binary search. IF sy-subrc = 0. READ TABLE i_cuvtab_fld INTO wa_cuvtab_fld WITH KEY vtint = wa_col_pos-vtint atinn = wa_col_pos-atinn vtpos = wa_col_pos-vtpos BINARY SEARCH. IF sy-subrc = 0. l_index1 = wa_col_pos-field + 1. * l_index1 = wa_col_pos-field. l_dbfld = wa_cuvtab_fld-dbfld. ASSIGN COMPONENT l_index1 OF STRUCTURE wa_contenttab1 TO <fs_field2>. ASSIGN COMPONENT l_dbfld OF STRUCTURE <dyn_wa> TO <fs_field3>. <fs_field3> = <fs_field2>. ENDIF. ENDIF. READ TABLE i_col_pos INTO wa_col_pos WITH KEY vtnam = wa_contenttab1-vtnam atnam = wa_contenttab3-char13. " binary search. IF sy-subrc = 0. READ TABLE i_cuvtab_fld INTO wa_cuvtab_fld WITH KEY vtint = wa_col_pos-vtint atinn = wa_col_pos-atinn vtpos = wa_col_pos-vtpos BINARY SEARCH. IF sy-subrc = 0. l_index1 = wa_col_pos-field + 1. * l_index1 = wa_col_pos-field. l_dbfld = wa_cuvtab_fld-dbfld. ASSIGN COMPONENT l_index1 OF STRUCTURE wa_contenttab1 TO <fs_field2>. ASSIGN COMPONENT l_dbfld OF STRUCTURE <dyn_wa> TO <fs_field3>. <fs_field3> = <fs_field2>. ENDIF. ENDIF. READ TABLE i_col_pos INTO wa_col_pos WITH KEY vtnam = wa_contenttab1-vtnam atnam = wa_contenttab3-char14. " binary search. IF sy-subrc = 0. READ TABLE i_cuvtab_fld INTO wa_cuvtab_fld WITH KEY vtint = wa_col_pos-vtint atinn = wa_col_pos-atinn vtpos = wa_col_pos-vtpos BINARY SEARCH. IF sy-subrc = 0. l_index1 = wa_col_pos-field + 1. * l_index1 = wa_col_pos-field. l_dbfld = wa_cuvtab_fld-dbfld. ASSIGN COMPONENT l_index1 OF STRUCTURE wa_contenttab1 TO <fs_field2>. ASSIGN COMPONENT l_dbfld OF STRUCTURE <dyn_wa> TO <fs_field3>. <fs_field3> = <fs_field2>. ENDIF. ENDIF. READ TABLE i_col_pos INTO wa_col_pos WITH KEY vtnam = wa_contenttab1-vtnam atnam = wa_contenttab3-char15. " binary search. IF sy-subrc = 0. READ TABLE i_cuvtab_fld INTO wa_cuvtab_fld WITH KEY vtint = wa_col_pos-vtint atinn = wa_col_pos-atinn vtpos = wa_col_pos-vtpos BINARY SEARCH. IF sy-subrc = 0. l_index1 = wa_col_pos-field + 1. l_dbfld = wa_cuvtab_fld-dbfld. ASSIGN COMPONENT l_index1 OF STRUCTURE wa_contenttab1 TO <fs_field2>. ASSIGN COMPONENT l_dbfld OF STRUCTURE <dyn_wa> TO <fs_field3>. <fs_field3> = <fs_field2>. ENDIF. ENDIF. DATA: l_lines1 TYPE i. DESCRIBE TABLE i_col_pos LINES l_lines1. READ TABLE i_col_pos INTO wa_col_pos INDEX l_lines1. IF sy-subrc = 0. READ TABLE i_cuvtab_fld INTO wa_cuvtab_fld WITH KEY vtint = wa_col_pos-vtint atinn = wa_col_pos-atinn vtpos = wa_col_pos-vtpos BINARY SEARCH. IF sy-subrc = 0. l_index1 = wa_col_pos-field. l_dbfld = wa_cuvtab_fld-dbfld. ASSIGN COMPONENT 'Z_VARCOND' OF STRUCTURE wa_contenttab1 TO <fs_field2>. *assign component l_index1 of structure wa_contenttab1 to <fs_field2>. ASSIGN COMPONENT l_dbfld OF STRUCTURE <dyn_wa> TO <fs_field3>. <fs_field3> = <fs_field2>. ENDIF. APPEND <dyn_wa> TO <dyn_table>. ENDIF. ENDIF. ENDLOOP. ******************************************************************* *MOD-015 ********************************************************************* * SORT <dyn_table>. ******************************************************************** **MOD-015 ********************************************************************* * IF I_CONTENTTAB1 IS INITIAL. * UNASSIGN <dyn_table>. * ENDIF. IF <dyn_table> IS ASSIGNED. * INSERT (l_tabname) FROM TABLE <dyn_table>. MODIFY (l_tabname) FROM TABLE <dyn_table>. ENDIF. UNASSIGN <dyn_table>. ************************************************************************ *** *MOD-015 ************************************************************************ *** MESSAGE i261 WITH l_tabname. ************************************************************************ ****** *MOD-015 ************************************************************************ ****** DELETE i_contenttab1 WHERE vtnam = wa_contentheader1-vtnam. ************************************************************************ ****** *MOD-015 ************************************************************************ ****** * leave list-processing. ************************************************************************ ********** *MOD-015 ************************************************************************ ********** ** Append last line for brand name subtotal * IF <FS_DYN_WA_BNAME> IS NOT INITIAL. * CONCATENATE LC_TOTAL <FS_DYN_WA_BNAME>+30(LC_BRANDNAME_LEN) * INTO <FS_DYN_WA_BNAME>+70(40) SEPARATED BY SPACE. ** <DYN_WA1>+4(4) = <DYN_WA1>+LV_OFFSET1(4). * APPEND <FS_DYN_WA_BNAME> TO <FS_DYN_TABLE>. * ENDIF. * ******************************************************** *MOD-012 ******************************************************** * LOOP AT <dyn_table2> ASSIGNING <dyn_wa5>. * MOVE-CORRESPONDING <dyn_wa5> TO wa_content. * APPEND wa_content TO itab_content. * ENDLOOP. ******************************************************** *MOD-012 ******************************************************** * LOOP AT ITAB_CONTENT INTO WA_CONTENT. * L_TABIX = SY-TABIX. * LOOP AT GT_COMPONENTS INTO GS_COMP. *CONCATENATE 'L_WA_FINAL' GS_COMP-NAME INTO L_WA_FINAL SEPARATED BY '-'. * CONCATENATE 'L_WA_CONTENT-CHAR' L_TABIX INTO L_WA_CONTENT1. * ASSIGN L_WA_FINAL TO <WA_FINAL>. * <dyn_wa> = <WA_FINAL>. * INSERT <dyn_wa> INTO TABLE <dyn_table>. * UNASSIGN <WA_FINAL>. * UNASSIGN <dyn_wa>. * ASSIGN L_WA_CONTENT1 TO <WA_FINAL>. * <dyn_wa> = <WA_FINAL>. * INSERT <dyn_wa> INTO TABLE <dyn_table>. * UNASSIGN <WA_FINAL>. * UNASSIGN <dyn_wa>. * ENDLOOP. * ENDLOOP. * IF NOT <itab_final> IS INITIAL. * INSERT (l_tabname) FROM TABLE <itab_final>. * ENDIF. ******************************************************************** **MOD-012 ******************************************************************** ENDFORM. "get_data **&--------------------------------------------------------------------- ** **&--------------------------------------------------------------------- ** *&---------------------------------------------------------------------*