Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

First Project - BCS

Former Member
0 Likes
522

*----------------------------------------------------------------------*
***INCLUDE LUCR_LSTF03 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&       Form  display_detail_list
*&---------------------------------------------------------------------*
FORM display_detail_list_subscreen.

  IF g_display_detail_again IS INITIAL.

    IF g_display_detail_next IS INITIAL.

* Header text is displayed as dyn. document
      IF go_dydo IS INITIAL.
        CREATE OBJECT go_dydo.
      ELSE.
        FREE  go_dydo.
        CLEAR go_dydo.
        CREATE OBJECT go_dydo.
        PERFORM free_create_screen_objects.
      ENDIF.

    ELSE.

      IF NOT go_dydo->html_control IS INITIAL.
        CALL METHOD go_splitter_container->remove_control
          EXPORTING
            row    = 1
            column = 1.
      ENDIF.

    ENDIF.
  ENDIF.

* Initialize document
  CALL METHOD go_dydo->initialize_document.

  IF  LINES( gt_header ) > 0.
* Build and display detail-header
    PERFORM build_header TABLES gt_header
                         USING  go_dydo
                                gs_header.

  ENDIF.


* Merge header-document
  CALL METHOD go_dydo->merge_document.

* set toolbar-added functions for detailed list
  REFRESH gt_toolbar.

  IF go_model->ds_tx_data_io_type-documents IS BOUND.       "mb210303

    PERFORM fill_tool_tab USING:
                 gt_toolbar gs_toolbar 'UCR_DUMMY'   '1',
                 gt_toolbar gs_toolbar 'UCR_ENTRIES' '2',
                 gt_toolbar gs_toolbar 'UCR_DUMMY'   '3',
                 gt_toolbar gs_toolbar 'UCR_PREV'    '4',
                 gt_toolbar gs_toolbar 'UCR_NEXT'    '5',
                 gt_toolbar gs_toolbar 'UCR_DUMMY'   '6'.
  ELSE.                                                   "mb210202 beg.
    PERFORM fill_tool_tab USING:
                 gt_toolbar gs_toolbar 'UCR_DUMMY'   '1',
                 gt_toolbar gs_toolbar 'UCR_PREV'    '2',
                 gt_toolbar gs_toolbar 'UCR_NEXT'    '3',
                 gt_toolbar gs_toolbar 'UCR_DUMMY'   '4'.
  ENDIF.                                                  "mb210202 end.

  SET HANDLER go_event_grid->handle_toolbar_comp   FOR go_grid.

* Display header
  CALL METHOD go_dydo->display_document
    EXPORTING
      parent = go_container_head.

* Set header-control visible with user set or
* predefined height

  IF NOT go_splitter_container IS INITIAL.
    IF g_height IS INITIAL.
      g_height = 27.
    ENDIF.

    CALL METHOD go_splitter_container->set_row_height
      EXPORTING
        id     = 1
        height = g_height.
  ENDIF.

* display detail-list

  CALL METHOD go_grid->set_table_for_first_display
    EXPORTING
      i_bypassing_buffer   = 'X'
      is_layout            = gs_layout_save
      it_toolbar_excluding = gt_exclude_toolbar
    CHANGING
      it_fieldcatalog      = gt_fieldcat_d
      it_outtab            = <gt_outtab_detail>.

  IF NOT g_display_detail_next IS INITIAL.
    CALL METHOD go_grid->refresh_table_display.
  ENDIF.

* Set cursor on selected row if necesary
  IF NOT gt_row_id_detail IS INITIAL.
    CALL METHOD go_grid->set_selected_rows
      EXPORTING
        it_index_rows = gt_row_id_detail.

    REFRESH gt_row_id_detail.
  ENDIF.

  CLEAR: g_display_detail_next,
         g_display_detail_again.

ENDFORM.                    " display_detail_list_subscreen
*&---------------------------------------------------------------------*
*&      Form  display_main_list
*&---------------------------------------------------------------------*
FORM display_main_list_subscreen. "using i_reporting_logic type uc_flg.

  CLEAR g_detail.

* set toolbar-added functions
  REFRESH gt_toolbar.

  IF go_model->ds_tx_data_io_type IS NOT INITIAL.

    IF go_model->ds_tx_data_io_type-documents IS BOUND.     "mb210303
*        and i_reporting_logic is initial.
      PERFORM fill_tool_tab USING:
                   gt_toolbar gs_toolbar 'UCR_DUMMY'   '1',
                   gt_toolbar gs_toolbar 'UCR_ENTRIES' '2',
                   gt_toolbar gs_toolbar 'UCR_DUMMY'   '3',
                   gt_toolbar gs_toolbar 'UCR_SEL_COND' '4',
                   gt_toolbar gs_toolbar 'UCR_DUMMY'   '5'.
    ELSE.
      PERFORM fill_tool_tab USING:
                   gt_toolbar gs_toolbar 'UCR_DUMMY'   '1',
                   gt_toolbar gs_toolbar 'UCR_SEL_COND' '2',
                   gt_toolbar gs_toolbar 'UCR_DUMMY'   '3'.

    ENDIF.                                                  "mb210303
    SET HANDLER go_event_grid->handle_toolbar_comp   FOR go_grid.
  ELSE    .
    PERFORM fill_tool_tab USING:
                 gt_toolbar gs_toolbar 'UCR_DUMMY'   '1',
                 gt_toolbar gs_toolbar 'UCR_SEL_COND' '2',
                 gt_toolbar gs_toolbar 'UCR_DUMMY'   '3'.

    SET HANDLER go_event_grid->handle_toolbar_comp   FOR go_grid.

  ENDIF.

* Set header-control invisible while main-list is displayed
  IF NOT go_splitter_container IS INITIAL.
* Header container can be set visible by user on main-screen
    CALL METHOD go_splitter_container->set_row_height
      EXPORTING
        id     = 1
        height = 0.
    IF NOT go_dydo IS INITIAL.
* Display last header if user wants to set it visible
      CALL METHOD go_dydo->display_document
        EXPORTING
          parent = go_container_head.
    ENDIF.
  ENDIF.

* subscreen with main list simply is started once again
* prepared with current user settings
  IF ( LINES( gt_fieldcat_save ) > 0 ) AND
     NOT g_display_main_again IS INITIAL.

    REFRESH gt_fieldcat.
    gt_fieldcat[] = gt_fieldcat_save[].
*    clear g_display_main_again.

* is necessary, because current_frontend_fieldcat must be set
    CALL METHOD go_grid->set_table_for_first_display
      EXPORTING
        i_bypassing_buffer   = 'X'
        i_save               = g_save
        is_layout            = gs_layout
        is_variant           = gs_variant
        it_special_groups    = gt_sgrp                      "mb110403
        it_toolbar_excluding = gt_exclude_toolbar
      CHANGING
        it_fieldcatalog      = gt_fieldcat
        it_outtab            = <gt_outtab>.

* set current fieldcat
    CALL METHOD go_grid->set_frontend_fieldcatalog
      EXPORTING
        it_fieldcatalog = gt_fieldcat.

* now reset other current layout-infos if necessary
    PERFORM set_current_layout USING go_grid
                                     gt_filter_save
                                     gt_sort_save
                                     gs_layout_save.


* display current main-list
    CALL METHOD go_grid->refresh_table_display.

    REFRESH: gt_fieldcat_save, gt_filter_save, gt_sort_save.
    CLEAR  : gs_layout_save.

  ELSE.

* Show ALV
    CALL METHOD go_grid->set_table_for_first_display
      EXPORTING
        i_bypassing_buffer   = 'X'
        i_save               = g_save
        is_layout            = gs_layout
        is_variant           = gs_variant
        it_special_groups    = gt_sgrp                      "mb110403
        it_toolbar_excluding = gt_exclude_toolbar
      CHANGING
        it_sort              = gt_sort
        it_fieldcatalog      = gt_fieldcat
        it_outtab            = <gt_outtab>.

    CLEAR g_display_detail_again.
    g_display_main_again = 'X'.

  ENDIF.

* Set cursor on selected row if necesary
  IF NOT gt_row_id IS INITIAL.
    CALL METHOD go_grid->set_selected_rows
      EXPORTING
        it_index_rows = gt_row_id.

  ENDIF.

ENDFORM.                    " display_main_list_subscreen

*&---------------------------------------------------------------------*
*&      Form  display_message
*&---------------------------------------------------------------------*
FORM display_message USING lo_grid_object TYPE REF TO cl_gui_alv_grid
                           lf_refresh_msg_table TYPE c.

  DATA: l_lines       TYPE i,
        ls_layout     TYPE lvc_s_layo.

* header_main is not used by Worbench
  IF g_subscreen IS INITIAL.
    PERFORM header_main.
  ENDIF.

  g_no_data = 'X'.

* if first data selection results no data gt_parameter_save must be
* filled  from lt_parameter to take care of further user changed
* parameters from list screen

  DESCRIBE TABLE gt_parameter_save LINES l_lines.
  IF l_lines =  0.
    gt_parameter_save[] = gt_parameter[].
  ENDIF.

  PERFORM no_data_selected IN PROGRAM (gc_progname)
                            USING      gt_fieldcat_mess
                                       gs_fieldcat_mess
                                       gt_message
                                       gs_message
                                       text-101
                                       text-102
                                       'TEXT'
                                       'LT_MESSAGE'
                                       lf_refresh_msg_table   " 'X'
                                       space.      "  'C610'. no color, accessibility

*** Start of Comment By Ramesh Babu N,IBM - C1DK900725 ***

* Set header-control invisible while main-list is displayed
*  IF NOT go_splitter_container IS INITIAL.

*    CALL METHOD go_splitter_container->set_row_height
*      EXPORTING
*        id     = 1
*        height = 0.
*    CALL METHOD go_splitter_container->set_row_sash
*      EXPORTING
*        id    = 1
*        type  = cl_gui_splitter_container=>type_sashvisible
*        value = cl_gui_splitter_container=>false.
*  ENDIF.

*** End of Comment By Ramesh Babu N,IBM - C1DK900725  ***

* display messages
*  ls_layout-no_toolbar = 'X'.

  CALL METHOD lo_grid_object->set_table_for_first_display
    EXPORTING
      i_bypassing_buffer   = 'X'
      it_toolbar_excluding = gt_exclude_toolbar_mess
      is_layout            = ls_layout
    CHANGING
      it_fieldcatalog      = gt_fieldcat_mess
      it_outtab            = gt_message.

*** Start of Comment By Ramesh Babu N,IBM - C1DK900725 ***

* Event-Handler for docking-container
*  IF go_event_dock IS INITIAL.
*    CREATE OBJECT go_event_dock.
*  ENDIF.

*** End of Comment By Ramesh Babu N,IBM - C1DK900725  ***

  IF go_parameter IS INITIAL.
    CALL METHOD cl_uc_parameter=>get_instance
      IMPORTING
        eo_instance = go_parameter.
  ENDIF.

*** Start of Comment By Ramesh Babu N,IBM - C1DK900725 ***
*  SET HANDLER go_event_dock->handle_new_parameters FOR go_parameter.
*** End of Comment By Ramesh Babu N,IBM - C1DK900725  ***

ENDFORM.                    " display_message

*&---------------------------------------------------------------------*
*&      Form  sub_download_data
*&---------------------------------------------------------------------*
* Used for downloading BCS data to a TAB delimited file in Custom task *
*----------------------------------------------------------------------*
*      <--ct_data  HASHED TABLE
*----------------------------------------------------------------------*
FORM f_download_data  USING     ct_task     TYPE uc_task
                                ct_sel      TYPE uc0_ts_sel
                                gt_param    TYPE ucm_ts_parameter
                      CHANGING  ct_message  TYPE uc0_t_message
                                ct_data     TYPE HASHED TABLE..

*----------------------------------------------------------------------*
* SUBROUTINE DESCRIPION: Used for downloading BCS data to file in Custome Task
*
*           DEVELOPER: Ramesh Babu Nalla , IBM
*       CREATION DATE: 2007-10-11
*          DER NUMBER: None
* TRANSPORT NUMBER(S): C1DK900725
*----------------------------------------------------------------------*

* REVISION HISTORY-----------------------------------------------------*
*
*       REVISION NO: C1DK900725      REFERENCE NO:  None
*         DEVELOPER: Ramesh Babu N,IBM       DATE:  2007-10-11
*       DESCRIPTION: Copied from SAP FM UCR_LST_LOGIC *
*
*----------------------------------------------------------------------*

  CONSTANTS : c_task01 TYPE uc_task VALUE 'T2700',
              c_task02 TYPE uc_task VALUE 'T2490'.

  TYPES:  BEGIN OF ty_download,
**            /bic/zcs_comp   TYPE char08,      " Unilever-Company
**            /bic/zcs_item   TYPE char10,      " Unilever-Item
**            /1fb/move_type  TYPE char03,      " Unilever-Movement type
**            /bic/zcs_pcom   TYPE char08,      " Unilever-Partner Company
**            /bic/zcs_invc   TYPE char08,      " Unilever-Investee Company
**            /bic/zcs_cang   TYPE char03,      " Unilever-Cost Analysis Group
**            /bic/zcs_ad     TYPE char08,      " Unilever-Aquisitions/Disposals
**            /bic/zcs_cd     TYPE char08,      " Unilever-Continued/Discontinued Ops.
**            /bic/zcs_prgp   TYPE char08,      " Unilever-Product Category

            /bic/zfb_comp   TYPE char08,      " Unilever-Company
            /bic/zfb_item   TYPE char10,      " Unilever-Item
            /bic/zfb_move   TYPE char03,      " Unilever-Movement type
            /bic/zfb_pcom   TYPE char08,      " Unilever-Partner Company
            /bic/zfb_invc   TYPE char08,      " Unilever-Investee Company
            /bic/zfb_cang   TYPE char03,      " Unilever-Cost Analysis Group
            /bic/zfb_ad     TYPE char08,      " Unilever-Aquisitions/Disposals
            /bic/zfb_cd     TYPE char08,      " Unilever-Continued/Discontinued Ops.
            /bic/zfb_prgp   TYPE char08,      " Unilever-Product Category

            /1fb/cs_trn_lc  TYPE string,      " Unilever-Period value in Local currency
            /1fb/cs_trn_qty TYPE string,     " Unilever-Periodic quantity
            unit            type string,

          END OF ty_download.
* flag
  DATA flg_chk TYPE c.
*
  DATA: lr_s_data_out TYPE REF TO data,
        lr_t_data_out TYPE REF TO data,
        l_outtype     TYPE field_type VALUE 'UCR_SX_TX_DATA_LST',
        lr            TYPE REF TO data,
        lo_conv       TYPE REF TO lcl_convert_output,
        lt_char       TYPE lcl_convert_output=>th_comp,
        ls_comp       TYPE lcl_convert_output=>s_comp,
        lr_s_data     TYPE REF TO data,
        lr_t_data     TYPE REF TO data,
        l_filename    TYPE string,
        l_action      TYPE i,
        l_path        TYPE string,
        l_seperator   TYPE char01 VALUE 'X',
        l_fullpath    TYPE string,
        l_mmyy        TYPE string,
        lr_sel_data   TYPE REF TO data,
        lr_t_val      TYPE REF TO data,
        lr_t_final    TYPE REF TO data,
        lr_val        TYPE REF TO data,
        ls_download   TYPE REF TO data,
        lt_download   TYPE REF TO data,
        ls_sel        TYPE REF TO data,
        ls_msg        TYPE uc0_s_message.

** SOC by Dpak-------------------------------------------------------------------------------------------
** Changed by Deepak N Jain, IBM on 16/11/2006 as the corresponding field name assigned by Ramesh from
** the structure <LS_DATA_OUT> are not matching. This is because of the new cube from whch the Financial
** data is coming now. The new cube is ZFBCS_T1 which has replaced the old cube ZCS_T1.
** Hence, Short Dump on Execution.
**-------------------------------------------------------------------------------------------------------

**  DATA: l_comp        TYPE string VALUE '/BIC/ZCS_COMP',  " Unilever-Company
**        l_cgcomp      TYPE string VALUE '/1FB/SEM_CGCOMP'," Unilever-Consolidation Group
**        l_pcomp       TYPE string VALUE '/BIC/ZCS_PCOM',  " Unilever-Partner Company
**        l_doct        TYPE string VALUE '/BIC/ZCS_DOCT',  " Unilever-Document type
**        l_plevel      TYPE string VALUE 'CS_PLEVEL',      " Unilever-Posting Level
**        l_tc          TYPE string VALUE '/1FB/CS_TRN_TC', " Unilever-Period value in Transaction currency
**        l_qty         TYPE string VALUE '/1FB/CS_TRN_QTY'," Unilever-Periodic quantity
**        l_trn_lc      TYPE string VALUE '/1FB/CS_TRN_LC', " Unilever-Period value in Local currency
**        l_bu          TYPE string VALUE '/BIC/ZCS_PROF',  " Unilever-Business Unit/Cost Centre
**        l_low         TYPE string VALUE 'LOW'.

  DATA: l_comp        TYPE string VALUE '/BIC/ZFB_COMP',  " Unilever-Company
        l_cgcomp      TYPE string VALUE '/BIC/ZFB_CG1',   " Unilever-Consolidation Group
        l_pcomp       TYPE string VALUE '/BIC/ZFB_PCOM',  " Unilever-Partner Company
        l_doct        TYPE string VALUE '/BIC/ZFB_DOCT',  " Unilever-Document type
        l_invc        TYPE string VALUE '/BIC/ZFB_INVC',  " Unilever-Investee Company
        l_plevel      TYPE string VALUE 'CS_PLEVEL',      " Unilever-Posting Level
        l_tc          TYPE string VALUE '/1FB/CS_TRN_TC', " Unilever-Period value in Transaction currency
        l_qty         TYPE string VALUE '/1FB/CS_TRN_QTY'," Unilever-Periodic quantity
        l_trn_lc      TYPE string VALUE '/1FB/CS_TRN_LC', " Unilever-Period value in Local currency
        l_bu          TYPE string VALUE '/BIC/ZCS_PROF',  " Unilever-Business Unit/Cost Centre
        l_low         TYPE string VALUE 'LOW',
        l_unit        TYPE string  VALUE 'UNIT'.
** EOC by Dpak-----------------------------------------------------------------------------------------------

** future use **
**  FISCVARNT TYPE L0002FISCVARNT,
**  FISCPERIOD TYPE L0002FISCPERIOD,
**  /BIC/ZFB_VERS TYPE L0002/BIC/ZFB_VERS,
**  /BIC/ZFB_CG1 TYPE L0002/BIC/ZFB_CG1,
**  /BIC/ZFB_COMP TYPE L0002/BIC/ZFB_COMP,
**  /1FB/CS_CHART TYPE L0002/1FB/CS_CHART,
**  /BIC/ZFB_MOVE TYPE L0002/BIC/ZFB_MOVE,
**  /BIC/ZFB_PCOM TYPE L0002/BIC/ZFB_PCOM,
**  ACQ_YEAR TYPE L0002ACQ_YEAR,
**  ACQ_PER TYPE L0002ACQ_PER,
**  /BIC/ZFB_INVC TYPE L0002/BIC/ZFB_INVC,
**  /BIC/ZFB_ALCO TYPE L0002/BIC/ZFB_ALCO,
**  CS_PLEVEL TYPE L0002CS_PLEVEL,
**  /BIC/ZFB_DOCT TYPE L0002/BIC/ZFB_DOCT,
**  BCS_CTFLG TYPE L0002BCS_CTFLG,
**  UNIT TYPE L0002UNIT,
**  /1FB/CURKEY_TC TYPE L0002/1FB/CURKEY_TC,
**  /1FB/CURKEY_LC TYPE L0002/1FB/CURKEY_LC,
**  /1FB/CURKEY_GC TYPE L0002/1FB/CURKEY_GC,
**  /BIC/ZFB_PRGP TYPE L0002/BIC/ZFB_PRGP,
**  /BIC/ZFB_COUN TYPE L0002/BIC/ZFB_COUN,
**  /BIC/ZFB_CANG TYPE L0002/BIC/ZFB_CANG,
**  /1FB/FUNC_AREA TYPE L0002/1FB/FUNC_AREA,
**  /BIC/ZFB_CT TYPE L0002/BIC/ZFB_CT,
**  /BIC/ZFB_CD TYPE L0002/BIC/ZFB_CD,
**  /BIC/ZFB_AD TYPE L0002/BIC/ZFB_AD,
**  /BIC/ZFB_FR01 TYPE L0002/BIC/ZFB_FR01,
**  /BIC/ZFB_FR02 TYPE L0002/BIC/ZFB_FR02,
**  FISCYEAR TYPE L0002FISCYEAR,
**  /BIC/ZFB_ITEM TYPE L0002/BIC/ZFB_ITEM,
** future use **

  FIELD-SYMBOLS: <lt_data_out> TYPE STANDARD TABLE,
                 <ls_data_out> TYPE ANY,
                 <ls_data>     TYPE ANY,
                 <ls_data_cop> TYPE ANY,
                 <lt_data_std> TYPE STANDARD TABLE,
                 <ls_data_std> TYPE ANY,
                 <ls_download>  TYPE ANY,
                 <lt_download> TYPE STANDARD TABLE,
                 <comp>        TYPE ANY,
                 <cgcomp>      TYPE ANY,
                 <pcomp>       TYPE ANY,
                 <doct>        TYPE ANY,
                 <plevel>      TYPE ANY,
                 <tc>          TYPE ANY,
                 <invc>        TYPE ANY,
                 <qty>         TYPE ANY,
                 <unit>        TYPE ANY,
                 <trn_lc>      TYPE ANY,
                 <comp1>       TYPE ANY,
                 <cgcomp1>     TYPE ANY,
                 <pcomp1>      TYPE ANY,
                 <doct1>       TYPE ANY,
                 <plevel1>     TYPE ANY,
                 <tc1>         TYPE ANY,
                 <invc1>       TYPE ANY,
                 <qty1>        TYPE ANY,
                 <trn_lc1>     TYPE ANY,
                 <unit1>       TYPE ANY,
                 <bu>          TYPE ANY,
                 <bu1>         TYPE ANY,
                 <low>         TYPE ANY,
                 <l_year>      TYPE ANY ,
                 <l_period>    TYPE ANY ,
                 <l_mmyy>      TYPE ANY,
                 <ls_sel_data> TYPE ANY,
                 <ls_val>      TYPE zbcs_check_val,
                 <lt_t_val>    TYPE STANDARD TABLE,
                 <lt_t_final>  TYPE STANDARD TABLE.

**************** Begin Of Addtion - ASIF MAQBOOL ******************
  Data: BEGIN OF l_s_tab,
        values TYPE C LENGTH 400,
       end OF l_s_tab,
      gs_param LIKE LINE OF gt_param,
      l_temp_store LIKE gt_param.

  Field-SYMBOLS: <gt_param> TYPE ANY TABLE,
                 <final_gt> TYPE any ,
                 <gs_fieldname> TYPE any,
                 <gs_value> TYPE any.

  Data: l_t_tab TYPE TABLE OF string INITIAL SIZE 0,
       str TYPE string,
       str1 TYPE string.
**************** End Of Addtion - ASIF MAQBOOL ******************

* create Line-structure of data table
  CREATE DATA lr_s_data LIKE LINE OF ct_data.
  ASSIGN lr_s_data->* TO <ls_data_std>.

** create cumulation table
  CREATE DATA lr_t_data LIKE STANDARD TABLE OF <ls_data_std>.
  ASSIGN lr_t_data->* TO <lt_data_std>.

  LOOP AT ct_data INTO <ls_data_std>.
    COLLECT <ls_data_std> INTO <lt_data_std>.
  ENDLOOP.

  FREE ct_data.

* get reference for outtab / create outtab
  CALL METHOD go_model->create_data_reference
    EXPORTING
      io_tx_data_io_type = go_model->ds_tx_data_io_type-totals
      i_type             = l_outtype "'UCR_SX_TX_DATA_LST'
    IMPORTING
      er_data            = lr_s_data_out.

  ASSIGN lr_s_data_out->* TO <ls_data_out>.
  ASSIGN lr_s_data_out->* TO <ls_data_cop>.

  CREATE DATA lr_t_data_out LIKE STANDARD TABLE OF <ls_data_out>.
  ASSIGN lr_t_data_out->* TO <lt_data_out>.

  CREATE DATA lr LIKE LINE OF <lt_data_std>.

  ASSIGN lr->* TO <ls_data>.

  CALL METHOD lcl_convert_output=>get_instance
    EXPORTING
      io_model    = go_model
      it_char     = lt_char
    IMPORTING
      eo_instance = lo_conv
    CHANGING
      cs_data     = <ls_data>.

  ASSIGN: l_comp   TO <comp>,
          l_cgcomp TO <cgcomp>,
          l_pcomp  TO <pcomp>,
          l_invc   TO <invc>,
          l_doct   TO <doct>,
          l_plevel TO <plevel>,
          l_tc     TO <tc>,
          l_qty    TO <qty>,
          l_trn_lc TO <trn_lc>,
          l_bu     TO <bu>,
          l_mmyy   TO <l_mmyy>,
          l_low    TO <low>,
          l_unit   TO <unit>.


  LOOP AT <lt_data_std> INTO <ls_data>.    "  loop

    CALL METHOD lo_conv->convert_output.      "end of "wis240605

*     fill outtab
    ASSIGN COMPONENT if_uc_model=>gc_type_comp_s_char
    OF STRUCTURE <ls_data> TO <ls_data_cop>.
    MOVE-CORRESPONDING <ls_data_cop> TO <ls_data_out>.
    ASSIGN COMPONENT if_uc_model=>gc_type_comp_s_kfig
    OF STRUCTURE <ls_data> TO <ls_data_cop>.
    MOVE-CORRESPONDING <ls_data_cop> TO <ls_data_out>.


    IF ct_task = c_task01 OR ct_task = space . "'it can be T2700 or blank

*************************************************************
*****  aggregate the transactionaldata for given Rules  *****
*************************************************************

      ASSIGN COMPONENT : <comp>   OF STRUCTURE <ls_data_out> TO <comp1>,
                         <cgcomp> OF STRUCTURE <ls_data_out> TO <cgcomp1>,
                         <pcomp>  OF STRUCTURE <ls_data_out> TO <pcomp1>,
                         <doct>   OF STRUCTURE <ls_data_out> TO <doct1>,
                         <invc>   OF STRUCTURE <ls_data_out> TO <invc1>, "added by Asif M.
                         <plevel> OF STRUCTURE <ls_data_out> TO <plevel1>,
                         <tc>     OF STRUCTURE <ls_data_out> TO <tc1>,
                         <qty>    OF STRUCTURE <ls_data_out> TO <qty1>,
                         <trn_lc> OF STRUCTURE <ls_data_out> TO <trn_lc1>.

**** 1st Rule ****
* dont include records where '/1FB/CS_TRN_QTY' and '/1FB/CS_TRN_LC' are blank
      IF <trn_lc1> = 0 AND <qty1> = 0.
        CONTINUE.
      ENDIF.

**** 2nd Rule ****
* delete the Posting levels if it is > 1 and clear to blank  CS_PLEVEL
      CHECK <plevel1> LE 1.
      CLEAR <plevel1>.

**** 3rd Rule ****
* replace the Unilever Company with CG without prefix G and compare with Partner comp for deletion
* /BIC/ZCS_COMP with   /1FB/SEM_CGCOMP and check with /BIC/ZCS_PCOM

      IF ct_task <> space.
***  code added by Ramesh for the removal GBRNCH  records while downloading the file.
**********************************************************************
**** code for removal of GBRNCH records only - Hardcode - sample code
*        IF <cgcomp1> <> 'GBRNCH'.   " to avoid BRNCH records
** replace Company with CG without prefix G when task name is not blank
*          <comp1> = <cgcomp1>+1.
*        ELSE.
*          CONTINUE.
*        ENDIF.
**** code for removal of GBRNCH records only - Hardcode - sample code
**********************************************************************

***  the assumption here,is consider only records with Legal entity as numeric excepting the first character
        IF <cgcomp1>+1 CN sy-abcde.   " to avoid BRNCH records
* replace Company with CG without prefix G when task name is not blank
          <comp1> = <cgcomp1>+1.
        ELSE.
          CONTINUE.
        ENDIF.


      ENDIF.

* removing leading zero's as SAP sometimes adding them to <pcomp1>.
*      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
*        EXPORTING
*          input  = <pcomp1>
*        IMPORTING
*          output = <pcomp1>.
      PERFORM f_alpha_conversion USING <comp1>
                                      CHANGING <comp1>.

      PERFORM f_alpha_conversion USING <pcomp1>
                                 CHANGING <pcomp1>.

      " removing leading zero's from Investee Unit company - Added By Asif Maqbool, IBM/Unilever, 25/01/2008.

      PERFORM f_alpha_conversion USING <invc1>
                                 CHANGING <invc1>.

      CHECK <comp1> <> <pcomp1>.

**** 4rth Rule ****
* initialise Document type & PV TC to blank   /BIC/ZCS_DOCT & /1FB/CS_TRN_TC
      CLEAR: <doct1>,<tc1>.




    ENDIF.

    COLLECT: <ls_data_out> INTO <lt_data_out>.

  ENDLOOP.          " end loop


  IF <lt_data_out> IS INITIAL.
    PERFORM f_build_msgs USING 'UCM0'
                               'W'
                               '053'
                               text-102
                               space "ct_task
                               space
                               space
                      CHANGING ct_message.
    RETURN.
    MESSAGE e208(00) WITH text-102.
    EXIT.
  ENDIF.


* perform various steps based on task name
  CASE ct_task.

    WHEN c_task01 OR space.              " 'T2700' or blank


* download the data into a tab delimited file
*****************************************************
****             start of Task 0001              ****
*****************************************************
* create Line-structure of download table
      CREATE DATA ls_download TYPE ty_download.
      ASSIGN ls_download->* TO <ls_download>.

** create Download data internal table for task T2700
      CREATE DATA lt_download LIKE STANDARD TABLE OF <ls_download>.
      ASSIGN lt_download->* TO <lt_download>.

      LOOP AT <lt_data_out> INTO <ls_data_out>.

        MOVE-CORRESPONDING <ls_data_out> TO <ls_download>.

        ASSIGN COMPONENT <trn_lc> OF STRUCTURE <ls_download> TO <trn_lc1>.

*** 6th Rule **********************

        " Check for values, if present remove decimals, if not present clear it of (blank).
        UNASSIGN <qty1>.
        ASSIGN COMPONENT <qty> of STRUCTURE <ls_download> to <qty1>.
        ASSIGN COMPONENT <unit> of STRUCTURE <ls_download> to <unit1>.

        if <unit1> = '' OR <unit1> <> '%'.
          REPLACE ALL OCCURRENCES OF '.' in <qty1> WITH '' RESPECTING CASE.
          <qty1> = ''.

        endif.

        if <unit1> <> '' And <qty1> <> ''.
          <unit1> = ''. " We dont need unit downloaded.
          REPLACE ALL OCCURRENCES OF '.' in <qty1> WITH '' RESPECTING CASE.
          <qty1> = <qty1>+0(2).
        endif.

*************************************
**** 5th Rule ****
* Move the Negative sign to front

        PERFORM f_put_sign_in_front CHANGING <trn_lc1>.
        INSERT <ls_download>  INTO TABLE <lt_download>.

      ENDLOOP.






* move the aggregated data to final table for display
      FREE ct_data.
      ct_data = <lt_data_out>.

      CLEAR: l_path,l_filename,l_fullpath,l_action.

      CALL FUNCTION 'GUI_FILE_SAVE_DIALOG'
       EXPORTING
         window_title            = 'Download aggregated BCS data to Tab Delimited file'
         default_extension       = 'txt'
*   DEFAULT_FILE_NAME       = dynamic file name as like ALE settings
         file_filter             = 'Text files (*.txt)'
       IMPORTING
         filename                = l_filename
         path                    = l_path
         fullpath                = l_fullpath
         user_action             = l_action .

      CALL METHOD cl_gui_cfw=>flush.

      " *************************** START OF CHANGE - ASIF MAQBOOL ************************
      IF l_action = 0 OR l_action = 1.


        ASSIGN gt_param TO <gt_param>.
        APPEND '100' to l_t_tab.
        READ TABLE gt_param INDEX 6 INTO gs_param.
        ASSIGN COMPONENT 2 OF STRUCTURE gs_param to <gs_value>.
        APPEND <gs_value> to l_t_tab.
        Clear gs_param.
        READ TABLE gt_param INDEX 4 INTO gs_param.
        ASSIGN COMPONENT 2 OF STRUCTURE gs_param to <gs_value>.
        APPEND <gs_value> to l_t_tab.
*        LOOP AT <gt_param> INTO gs_param.
*
*          ASSIGN COMPONENT 1 OF STRUCTURE gs_param to <gs_fieldname>.
*
*          CASE <gs_fieldname>.
*             WHEN '/BIC/ZFB_VERS'.
*
*              APPEND '100' to l_t_tab.
*
*             WHEN 'FISCPERIOD'.
*                ASSIGN COMPONENT 2 OF STRUCTURE gs_param to <gs_value>.
*                APPEND <gs_value> to l_t_tab.
*
*             WHEN 'FISCYEAR'.
*                ASSIGN COMPONENT 2 OF STRUCTURE gs_param to <gs_value>.
*                APPEND <gs_value> to l_t_tab.
*
*
*              WHEN OTHERS.
*                ENDCASE.
*
*
*        ENDLOOP.

        CONCATENATE LINES OF l_t_tab INTO str1 SEPARATED BY cl_abap_char_utilities=>horizontal_tab.
        CLEAR l_t_tab.
        INSERT str1 INTO TABLE l_t_tab.
        ASSIGN l_t_tab TO <final_gt>.



        "  To Start by adding the Header Data.
        CALL METHOD cl_gui_frontend_services=>gui_download
          EXPORTING
            filename              = l_fullpath
            write_field_separator = l_seperator "SPACE
          CHANGING
            data_tab              = <final_gt>
          EXCEPTIONS
            file_write_error      = 1.

        " Now append the Data after the header data insertion.
        CALL METHOD cl_gui_frontend_services=>gui_download
          EXPORTING
            filename                = l_fullpath
            write_field_separator   = l_seperator "SPACE
            append                  = 'X'
          CHANGING
            data_tab                = <lt_download>
          EXCEPTIONS
            file_write_error        = 1
            no_batch                = 2
            gui_refuse_filetransfer = 3
            invalid_type            = 4
            no_authority            = 5
            unknown_error           = 6
            header_not_allowed      = 7
            separator_not_allowed   = 8
            filesize_not_allowed    = 9
            header_too_long         = 10
            dp_error_create         = 11
            dp_error_send           = 12
            dp_error_write          = 13
            unknown_dp_error        = 14
            access_denied           = 15
            dp_out_of_memory        = 16
            disk_full               = 17
            dp_timeout              = 18
            file_not_found          = 19
            dataprovider_exception  = 20
            control_flush_error     = 21
            not_supported_by_gui    = 22
            error_no_gui            = 23
            OTHERS                  = 24.


        " *************************** END OF CHANGE - ASIF MAQBOOL ************************

        IF sy-subrc <> 0.
*          MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
*                     WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
          PERFORM f_build_msgs USING sy-msgid
                                     sy-msgty
                                     sy-msgno
                                     sy-msgv1
                                     sy-msgv2
                                     sy-msgv3
                                     sy-msgv4
                            CHANGING ct_message.
          RETURN.

        ENDIF.

      ENDIF.

*****************************************************
****               End of Task 0001              ****
*****************************************************

    WHEN c_task02.                                          "'T2490'.

* switch to validations on aggregated transactional data
*****************************************************
**** Start of Task 0002 validations ****
*****************************************************

* create Line-structure of gt_sel(selection) data table
      CREATE DATA lr_sel_data LIKE LINE OF ct_sel." zbcs_check_val
      ASSIGN lr_sel_data->* TO <ls_sel_data>.

* create validation table
      CREATE DATA lr_t_val TYPE STANDARD TABLE OF  zbcs_check_val.
      ASSIGN lr_t_val->* TO <lt_t_val>.


* create data table that does not fulfill rules after validation
      CREATE DATA lr_t_final LIKE STANDARD TABLE OF  <ls_data_out>.
      ASSIGN lr_t_final->* TO <lt_t_final>.


* concatenate year & month to query custom table
      READ TABLE ct_sel INTO <ls_sel_data> WITH KEY fieldname = 'FISCYEAR'.  "YYYY
      CHECK sy-subrc = 0.

      ASSIGN COMPONENT <low> OF STRUCTURE <ls_sel_data> TO <l_year>.

      <l_mmyy> = <l_year>.

      READ TABLE ct_sel INTO <ls_sel_data> WITH KEY fieldname = 'FISCPERIOD'."MM
      CHECK sy-subrc = 0.
      ASSIGN COMPONENT <low> OF STRUCTURE <ls_sel_data> TO <l_period>. " via BADI
**      ASSIGN COMPONENT 5 OF STRUCTURE <ls_sel_data> TO <l_period>.  " via report

      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
        EXPORTING
          input  = <l_period>
        IMPORTING
          output = <l_period>.

      CONCATENATE <l_mmyy> <l_period>  INTO <l_mmyy>.

** get data for given criteria
      SELECT * INTO TABLE <lt_t_val> FROM zbcs_check_val
      WHERE valid_from LE <l_mmyy> AND
            valid_to   GE <l_mmyy>.
      IF sy-subrc <> 0.
*   error message
        PERFORM f_build_msgs USING 'UCM0'
                                   'E'
                                   '053'
                                   text-103
                                   space
                                   space
                                   space
                          CHANGING ct_message.
        RETURN.

      ENDIF.

      LOOP AT <lt_t_val> ASSIGNING <ls_val>.

        CASE <ls_val>-valid_rules.

          WHEN 'VAL_001'.
* meant for parallal cursor
*            READ TABLE <lt_data_out> INTO <ls_data_out> WITH KEY (l_comp) = <ls_val>-company
*                                                                 (l_bu)   = <ls_val>-bus_cost_unit.
*            CHECK sy-subrc = 0.
*            LOOP AT <lt_data_out> INTO <ls_data_out> FROM sy-tabix.

            LOOP AT <lt_data_out> INTO <ls_data_out>.

              ASSIGN COMPONENT: <bu>   OF STRUCTURE <ls_data_out> TO <bu1>,
                                <comp> OF STRUCTURE <ls_data_out> TO <comp1>.

*** inserting all error records which does not match 'VAL_001'
              CHECK <comp1> <> <ls_val>-company AND <bu1> <> <ls_val>-bus_cost_unit.
              flg_chk = abap_true.
              COLLECT <ls_data_out>  INTO <lt_t_final>.
              PERFORM f_build_msgs USING 'UCM0'
                                         'E'
                                         '053'
                                         <ls_val>-valid_rules
                                         text-104
                                         <ls_val>-company
                                         <ls_val>-bus_cost_unit
                                CHANGING ct_message.

            ENDLOOP.
*** future use of further validation
***            CHECK flg_chk = abap_true.
***            flg_chk = abap_false.
***            PERFORM f_build_msgs USING 'UCM0'
***                           'E'
***                           '053'
***                           <ls_val>-valid_rules
***                           text-104
***                           <ls_val>-company
***                           <ls_val>-bus_cost_unit
***                  CHANGING ct_message.

***          WHEN 'VAL_002'.
*** Etc
*** future use of further validation

          WHEN OTHERS.

        ENDCASE.

      ENDLOOP.

* move the aggregated data to final table for display
      FREE ct_data.
      ct_data = <lt_t_final>.

*****************************************************
**** End of Task  0002 validations ****
*****************************************************

    WHEN OTHERS.

** move the aggregated data to final table for display
      FREE ct_data.
      ct_data = <lt_data_out>.

  ENDCASE.


ENDFORM.                    " sub_download_data
*&---------------------------------------------------------------------*
*&      Form  f_put_sign_in_front
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_value  text
*----------------------------------------------------------------------*
FORM f_put_sign_in_front  CHANGING p_value TYPE string.

  DATA: text1(1) TYPE c.

  SEARCH p_value FOR '-'.
  IF sy-subrc = 0 AND sy-fdpos <> 0.
    SPLIT p_value AT '-' INTO p_value text1.
    CONDENSE p_value.
    CONCATENATE '-' p_value INTO p_value.
  ELSE.
    CONDENSE p_value.
  ENDIF.

ENDFORM.                    " f_put_sign_in_front


*----------------------------------------------------------------------*
* PROGRAM DESCRIPTION: Resuable Aplha Conversion routine
*
*           DEVELOPER: Asif Maqbool ,IBM/Unilever *
*       CREATION DATE: 2008-01-25
*          DER NUMBER: None
* TRANSPORT NUMBER(S): C1DK901293
*----------------------------------------------------------------------*



FORM f_alpha_conversion USING l_import_comp TYPE ANY
                        CHANGING l_export_comp TYPE ANY.

  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
    EXPORTING
      input  = l_import_comp
    IMPORTING
      output = l_export_comp.




ENDFORM.                    "f_alpha_conversion



*&---------------------------------------------------------------------*
*&      Form  f_build_msgs
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_SY_MSGID  text
*      -->P_SY_MSGTY  text
*      -->P_SY_MSGNO  text
*      -->P_SY_MSGV1  text
*      -->P_SY_MSGV2  text
*      -->P_SY_MSGV3  text
*      -->P_SY_MSGV4  text
*      <--P_CT_MESSAGE  text
*----------------------------------------------------------------------*
FORM f_build_msgs  USING     p_msgid   TYPE symsgid
                             p_msgty   TYPE symsgty
                             p_msgno   TYPE symsgno
                             p_msgv1   TYPE any
                             p_msgv2   TYPE any
                             p_msgv3   TYPE any
                             p_msgv4   TYPE any
                   CHANGING pt_message TYPE uc0_t_message.

  DATA  ls_msg TYPE uc0_s_message.

  ls_msg-msgid = p_msgid.
  ls_msg-msgty = p_msgty.
  ls_msg-msgno = p_msgno.
  ls_msg-msgv1 = p_msgv1.
  ls_msg-msgv2 = p_msgv2.
  ls_msg-msgv3 = p_msgv3.
  ls_msg-msgv4 = p_msgv4.
  INSERT ls_msg INTO TABLE pt_message.

ENDFORM.                    "f_build_msgs


*&---------------------------------------------------------------------*
*&      Form  f_download_data_YBBCSDOWNLOAD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM f_download_data_YBBCSDOWNLOAD
                         USING
                                ct_task     TYPE uc_task
                                ct_sel      TYPE uc0_ts_sel
                                gt_param    TYPE ucm_ts_parameter
                                chk_params  TYPE ANY
                                Aggr_swt    TYPE STRING

                      CHANGING  ct_message  TYPE uc0_t_message
                                ct_data     TYPE HASHED TABLE
                                lo_dataref  TYPE ref to data


                       .



*----------------------------------------------------------------------*
* SUBROUTINE DESCRIPION: Used for downloading BCS data to file in Custome Task
*
*           DEVELOPER: Asif Maqbool , IBM/Unilever
*       CREATION DATE: 2007-10-11
*          DER NUMBER: None
* TRANSPORT NUMBER(S):  C1DK901380
*----------------------------------------------------------------------*

  " 1) 5 Rules of validation has to be removed.
  " 2) Global Currency Key  was requried in download
  " 3) Extra Header column required in the Download file.


  CONSTANTS : c_task01 TYPE uc_task VALUE 'T2700',
              c_task02 TYPE uc_task VALUE 'T2490'.

  TYPES:  BEGIN OF ty_download,
**            /bic/zcs_comp   TYPE char08,      " Unilever-Company
**            /bic/zcs_item   TYPE char10,      " Unilever-Item
**            /1fb/move_type  TYPE char03,      " Unilever-Movement type
**            /bic/zcs_pcom   TYPE char08,      " Unilever-Partner Company
**            /bic/zcs_invc   TYPE char08,      " Unilever-Investee Company
**            /bic/zcs_cang   TYPE char03,      " Unilever-Cost Analysis Group
**            /bic/zcs_ad     TYPE char08,      " Unilever-Aquisitions/Disposals
**            /bic/zcs_cd     TYPE char08,      " Unilever-Continued/Discontinued Ops.
**            /bic/zcs_prgp   TYPE char08,      " Unilever-Product Category

            /bic/zfb_comp   TYPE char08,      " Unilever-Company
            /bic/zfb_item   TYPE char10,      " Unilever-Item
            /bic/zfb_move   TYPE char03,      " Unilever-Movement type
            /bic/zfb_pcom   TYPE char08,      " Unilever-Partner Company
            /bic/zfb_invc   TYPE char08,      " Unilever-Investee Company
            /bic/zfb_cang   TYPE char03,      " Unilever-Cost Analysis Group
            /bic/zfb_ad     TYPE char08,      " Unilever-Aquisitions/Disposals
            /bic/zfb_cd     TYPE char08,      " Unilever-Continued/Discontinued Ops.
            /bic/zfb_prgp   TYPE char08,      " Unilever-Product Category

            /1fb/cs_trn_lc  TYPE string,      " Unilever-Period value in Local currency
            /1fb/cs_trn_gc type string,       "Unilever -Period Value in Global Currency
            /1fb/cs_trn_qty TYPE p DECIMALS 3," Unilever-Periodic quantity
            /bic/zfb_doct   TYPE CHAR03,
            /bic/zfb_ALCO   TYPE CHAR08,
            /1fb/curkey_lc  type CHAR05,
            /bic/zfb_ct     TYPE N LENGTH 2,
          END OF ty_download.


* flag
  DATA flg_chk TYPE c.
*
  DATA: lr_s_data_out TYPE REF TO data,
        lr_t_data_out TYPE REF TO data,
        l_outtype     TYPE field_type VALUE 'UCR_SX_TX_DATA_LST',
        lr            TYPE REF TO data,
        lo_conv       TYPE REF TO lcl_convert_output,
        lt_char       TYPE lcl_convert_output=>th_comp,
        ls_comp       TYPE lcl_convert_output=>s_comp,
        lr_s_data     TYPE REF TO data,
        lr_t_data     TYPE REF TO data,
        l_filename    TYPE string,
        l_action      TYPE i,
        l_path        TYPE string,
        l_seperator   TYPE char01 VALUE 'X',
        l_fullpath    TYPE string,
        l_mmyy        TYPE string,
        lr_sel_data   TYPE REF TO data,
        lr_t_val      TYPE REF TO data,
        lr_t_final    TYPE REF TO data,
        lr_val        TYPE REF TO data,
        ls_download   TYPE REF TO data,
        lt_download   TYPE REF TO data,
        ls_sel        TYPE REF TO data,
        ls_msg        TYPE uc0_s_message.

** SOC by Dpak-------------------------------------------------------------------------------------------
** Changed by Deepak N Jain, IBM on 16/11/2006 as the corresponding field name assigned by Ramesh from
** the structure <LS_DATA_OUT> are not matching. This is because of the new cube from whch the Financial
** data is coming now. The new cube is ZFBCS_T1 which has replaced the old cube ZCS_T1.
** Hence, Short Dump on Execution.
**-------------------------------------------------------------------------------------------------------

**  DATA: l_comp        TYPE string VALUE '/BIC/ZCS_COMP',  " Unilever-Company
**        l_cgcomp      TYPE string VALUE '/1FB/SEM_CGCOMP'," Unilever-Consolidation Group
**        l_pcomp       TYPE string VALUE '/BIC/ZCS_PCOM',  " Unilever-Partner Company
**        l_doct        TYPE string VALUE '/BIC/ZCS_DOCT',  " Unilever-Document type
**        l_plevel      TYPE string VALUE 'CS_PLEVEL',      " Unilever-Posting Level
**        l_tc          TYPE string VALUE '/1FB/CS_TRN_TC', " Unilever-Period value in Transaction currency
**        l_qty         TYPE string VALUE '/1FB/CS_TRN_QTY'," Unilever-Periodic quantity
**        l_trn_lc      TYPE string VALUE '/1FB/CS_TRN_LC', " Unilever-Period value in Local currency
**        l_bu          TYPE string VALUE '/BIC/ZCS_PROF',  " Unilever-Business Unit/Cost Centre
**        l_low         TYPE string VALUE 'LOW'.

  DATA: l_comp        TYPE string VALUE '/BIC/ZFB_COMP',  " Unilever-Company
        l_cgcomp      TYPE string VALUE '/BIC/ZFB_CG1',   " Unilever-Consolidation Group
        l_pcomp       TYPE string VALUE '/BIC/ZFB_PCOM',  " Unilever-Partner Company
        l_doct        TYPE string VALUE '/BIC/ZFB_DOCT',  " Unilever-Document type
        l_invc        TYPE string VALUE '/BIC/ZFB_INVC',  " Unilever-Investee Company
        l_plevel      TYPE string VALUE 'CS_PLEVEL',      " Unilever-Posting Level
        l_tc          TYPE string VALUE '/1FB/CS_TRN_TC', " Unilever-Period value in Transaction currency
        l_qty         TYPE string VALUE '/1FB/CS_TRN_QTY'," Unilever-Periodic quantity
        l_trn_lc      TYPE string VALUE '/1FB/CS_TRN_LC', " Unilever-Period value in Local currency
        l_trn_gc      TYPE string VALUE '/1FB/CS_TRN_GC', "Unilever -Period Vallue in Global Currency
        l_bu          TYPE string VALUE '/BIC/ZCS_PROF',  " Unilever-Business Unit/Cost Centre
        l_low         TYPE string VALUE 'LOW',
        l_alco        TYPE string VALUE '/bic/zfb_ALCO',
        l_curkey      TYPE string VALUE '/1fb/curkey_lc',
        l_zfb_ct      TYPE string VALUE '/bic/zfb_ct',
        l_move        TYPE string VALUE '/BIC/ZFB_MOVE',
        l_cang        TYPE string VALUE '/BIC/ZFB_CANG',
        l_ad          TYPE string VALUE '/BIC/ZFB_AD',
        l_cd          TYPE string VALUE '/BIC/ZFB_CD',
        l_csplevel    TYPE string VALUE 'CS_PLEVEL',
        l_prgp        TYPE string VALUE '/BIC/ZFB_PRGP'.



  FIELD-SYMBOLS: <lth_data> TYPE HASHED TABLE,
                 <lts_data> TYPE STANDARD TABLE,
                 <ls_wa>   TYPE ANY.

  DATA: lp_data TYPE REF TO DATA.

** EOC by Dpak-----------------------------------------------------------------------------------------------

** future use **
**  FISCVARNT TYPE L0002FISCVARNT,
**  FISCPERIOD TYPE L0002FISCPERIOD,
**  /BIC/ZFB_VERS TYPE L0002/BIC/ZFB_VERS,
**  /BIC/ZFB_CG1 TYPE L0002/BIC/ZFB_CG1,
**  /BIC/ZFB_COMP TYPE L0002/BIC/ZFB_COMP,
**  /1FB/CS_CHART TYPE L0002/1FB/CS_CHART,
**  /BIC/ZFB_MOVE TYPE L0002/BIC/ZFB_MOVE,
**  /BIC/ZFB_PCOM TYPE L0002/BIC/ZFB_PCOM,
**  ACQ_YEAR TYPE L0002ACQ_YEAR,
**  ACQ_PER TYPE L0002ACQ_PER,
**  /BIC/ZFB_INVC TYPE L0002/BIC/ZFB_INVC,
**  /BIC/ZFB_ALCO TYPE L0002/BIC/ZFB_ALCO,
**  CS_PLEVEL TYPE L0002CS_PLEVEL,
**  /BIC/ZFB_DOCT TYPE L0002/BIC/ZFB_DOCT,
**  BCS_CTFLG TYPE L0002BCS_CTFLG,
**  UNIT TYPE L0002UNIT,
**  /1FB/CURKEY_TC TYPE L0002/1FB/CURKEY_TC,
**  /1FB/CURKEY_LC TYPE L0002/1FB/CURKEY_LC,
**  /1FB/CURKEY_GC TYPE L0002/1FB/CURKEY_GC,
**  /BIC/ZFB_PRGP TYPE L0002/BIC/ZFB_PRGP,
**  /BIC/ZFB_COUN TYPE L0002/BIC/ZFB_COUN,
**  /BIC/ZFB_CANG TYPE L0002/BIC/ZFB_CANG,
**  /1FB/FUNC_AREA TYPE L0002/1FB/FUNC_AREA,
**  /BIC/ZFB_CT TYPE L0002/BIC/ZFB_CT,
**  /BIC/ZFB_CD TYPE L0002/BIC/ZFB_CD,
**  /BIC/ZFB_AD TYPE L0002/BIC/ZFB_AD,
**  /BIC/ZFB_FR01 TYPE L0002/BIC/ZFB_FR01,
**  /BIC/ZFB_FR02 TYPE L0002/BIC/ZFB_FR02,
**  FISCYEAR TYPE L0002FISCYEAR,
**  /BIC/ZFB_ITEM TYPE L0002/BIC/ZFB_ITEM,
** future use **

  TYPES: BEGIN OF screen_params,
    ZCONGRP_CHK type string,
    ZCOMP_CHK type string,
    ZFSITEM_CHK type string,
    ZMOV_CHK type string,
    ZFUNC_CHK type string,
    ZACTDISP_CHK type string,
    ZCOSTANAL_CHK type string,
    ZCONTDIS_CHK type string,
    ZPROCAT_CHK type string,
    ZPARTCOMP_CHK type string,
    ZINV_CHK type string,
    ZDOCTYPE_CHK type string,
    ZPOST_CHK type string,
    ZCURKEY4T_CHK type string,
    ZCURKEY_I_CHK type string,
    END OF screen_params.

  Data: param_struct type screen_params.

  FIELD-SYMBOLS: <lt_data_out> TYPE STANDARD TABLE,
                 <ls_data_out> TYPE ANY,
                 <ls_data>     TYPE ANY,
                 <ls_data_cop> TYPE ANY,
                 <lt_data_std> TYPE STANDARD TABLE,
                 <ls_data_std> TYPE ANY,
                 <ls_download>  TYPE ANY,
                 <lt_download> TYPE STANDARD TABLE,
                 <comp>        TYPE ANY,
                 <cgcomp>      TYPE ANY,
                 <pcomp>       TYPE ANY,
                 <doct>        TYPE ANY,
                 <plevel>      TYPE ANY,
                 <tc>          TYPE ANY,
                 <invc>        TYPE ANY,
                 <alco>        TYPE ANY,
                 <ct>          TYPE ANY,
                 <CURKEY>      TYPE ANY,
                 <qty>         TYPE ANY,
                 <prgp>        TYPE ANY,
                 <trn_lc>      TYPE ANY,
                 <trn_gc>      TYPE ANY,
                 <comp1>       TYPE ANY,
                 <mov>         TYPE ANY,
                 <cang>        TYPE ANY,
                 <ad>          TYPE ANY,
                 <cd>          TYPE ANY,
                 <csplevel>    TYPE ANY,
                 <mov1>         TYPE ANY,
                 <cang1>        TYPE ANY,
                 <ad1>          TYPE ANY,
                 <cd1>          TYPE ANY,
                 <csplevel1>    TYPE ANY,
                 <cgcomp1>     TYPE ANY,
                 <pcomp1>      TYPE ANY,
                 <doct1>       TYPE ANY,
                 <plevel1>     TYPE ANY,
                 <tc1>         TYPE ANY,
                 <invc1>       TYPE ANY,
                 <alco1>        TYPE ANY,
                 <prgp1>         TYPE ANY,
                 <ct1>          TYPE ANY,
                 <CURKEY1>      TYPE ANY,
                 <qty1>        TYPE ANY,
                 <trn_lc1>     TYPE ANY,
                 <trn_gc1>      TYPE ANY,
                  <Rcomp>       TYPE ANY,
                 <Rcgcomp>     TYPE ANY,
                 <Rpcomp>      TYPE ANY,
                 <Rdoct>       TYPE ANY,
                 <Rplevel>     TYPE ANY,
                 <Rtc>         TYPE ANY,
                 <Rinvc>       TYPE ANY,
                 <Rqty>        TYPE ANY,
                 <Rtrn_lc>     TYPE ANY,
                 <Rtrn_gc>      TYPE ANY,
                 <RCURKEY>      TYPE ANY,
                 <Ralco>        TYPE ANY,
                 <Rmov>         TYPE ANY,
                 <Rcang>        TYPE ANY,
                 <Rad>          TYPE ANY,
                 <Rcd>          TYPE ANY,
                 <Rcsplevel>    TYPE ANY,
                 <Rprgp>        TYPE ANY,
                 <Rct>          TYPE ANY,
                 <bu>          TYPE ANY,
                 <bu1>         TYPE ANY,
                 <low>         TYPE ANY,
                 <l_year>      TYPE ANY ,
                 <l_period>    TYPE ANY ,
                 <l_mmyy>      TYPE ANY,
                 <ls_sel_data> TYPE ANY,
                 <ls_val>      TYPE zbcs_check_val,
                 <lt_t_val>    TYPE STANDARD TABLE,
                 <lt_t_final>  TYPE STANDARD TABLE.
**************** Begin Of Addtion - ASIF MAQBOOL ******************
  Data: BEGIN OF l_s_tab,
        values TYPE C LENGTH 400,
       end OF l_s_tab,
      gs_param LIKE LINE OF gt_param,
      l_temp_store LIKE gt_param.

  Field-SYMBOLS: <gt_param> TYPE ANY TABLE,
                 <final_gt> TYPE any ,
                 <gs_fieldname> TYPE any,
                 <gs_value> TYPE any.

  Data: l_t_tab TYPE TABLE OF string INITIAL SIZE 0,
       str TYPE string,
       str1 TYPE string.
**************** End Of Addtion - ASIF MAQBOOL ******************
* create Line-structure of data table
  CREATE DATA lr_s_data LIKE LINE OF ct_data.
  ASSIGN lr_s_data->* TO <ls_data_std>.

** create cumulation table
  CREATE DATA lr_t_data LIKE STANDARD TABLE OF <ls_data_std>.
  ASSIGN lr_t_data->* TO <lt_data_std>.

  LOOP AT ct_data INTO <ls_data_std>.
    COLLECT <ls_data_std> INTO <lt_data_std>.
  ENDLOOP.

  FREE ct_data.

* get reference for outtab / create outtab
  CALL METHOD go_model->create_data_reference
    EXPORTING
      io_tx_data_io_type = go_model->ds_tx_data_io_type-totals
      i_type             = l_outtype "'UCR_SX_TX_DATA_LST'
    IMPORTING
      er_data            = lr_s_data_out.

  ASSIGN lr_s_data_out->* TO <ls_data_out>.
  ASSIGN lr_s_data_out->* TO <ls_data_cop>.

  CREATE DATA lr_t_data_out LIKE STANDARD TABLE OF <ls_data_out>.
  ASSIGN lr_t_data_out->* TO <lt_data_out>.

  CREATE DATA lr LIKE LINE OF <lt_data_std>.

  ASSIGN lr->* TO <ls_data>.

  CALL METHOD lcl_convert_output=>get_instance
    EXPORTING
      io_model    = go_model
      it_char     = lt_char
    IMPORTING
      eo_instance = lo_conv
    CHANGING
      cs_data     = <ls_data>.

  ASSIGN: l_comp   TO <comp>,
          l_cgcomp TO <cgcomp>,
          l_pcomp  TO <pcomp>,
          l_invc   TO <invc>,
          l_doct   TO <doct>,
          l_plevel TO <plevel>,
          l_tc     TO <tc>,
          l_qty    TO <qty>,
          l_trn_lc TO <trn_lc>,
          l_trn_gc TO <trn_gc>,
          l_alco   TO <alco>,
          l_curkey TO <CURKEY>,
          l_zfb_ct TO <CT>,
          l_doct   TO <doct>,
          l_bu     TO <bu>,
          l_mmyy   TO <l_mmyy>,
          l_low    TO <low>,
          l_move   TO <mov>,
          l_cang   TO <cang>,
          l_ad     TO <ad>,
          l_cd     TO <cd>,
          l_csplevel TO <csplevel>,
          l_prgp     TO <prgp>    .


  LOOP AT <lt_data_std> INTO <ls_data>.    "  loop

    CALL METHOD lo_conv->convert_output.      "end of "wis240605

*     fill outtab
    ASSIGN COMPONENT if_uc_model=>gc_type_comp_s_char
    OF STRUCTURE <ls_data> TO <ls_data_cop>.
    MOVE-CORRESPONDING <ls_data_cop> TO <ls_data_out>.
    ASSIGN COMPONENT if_uc_model=>gc_type_comp_s_kfig
    OF STRUCTURE <ls_data> TO <ls_data_cop>.
    MOVE-CORRESPONDING <ls_data_cop> TO <ls_data_out>.

    " --------------------- START OF COMMENT BY ASIF MAQBOOL --------------------------------------------
    " REASON :  WE DONT NEED 4 RULE VALIDATION for aggregated data FOR ONLY YBBCSDOWNLOAD Transaction. --------------

*    IF ct_task = c_task01 OR ct_task = space . "'it can be T2700 or blank
*
**************************************************************
******  aggregate the transactionaldata for given Rules  *****
**************************************************************
*
    ASSIGN COMPONENT : <comp>   OF STRUCTURE <ls_data_out> TO <comp1>,
                       <cgcomp> OF STRUCTURE <ls_data_out> TO <cgcomp1>,
                       <pcomp>  OF STRUCTURE <ls_data_out> TO <pcomp1>,
                       <doct>   OF STRUCTURE <ls_data_out> TO <doct1>,
                       <invc>   OF STRUCTURE <ls_data_out> TO <invc1>, "added by Asif M.
                       <plevel> OF STRUCTURE <ls_data_out> TO <plevel1>,
                       <tc>     OF STRUCTURE <ls_data_out> TO <tc1>,
                       <qty>    OF STRUCTURE <ls_data_out> TO <qty1>,
                       <trn_lc> OF STRUCTURE <ls_data_out> TO <trn_lc1>,
                       <trn_gc> OF STRUCTURE <ls_data_out> TO <trn_gc1>,
                       <alco> OF STRUCTURE <ls_data_out> TO <alco1>,
                       <CURKEY> OF STRUCTURE <ls_data_out> TO <CURKEY1>,
                       <CT> OF STRUCTURE <ls_data_out> TO <CT1>,
                       <DOCT> OF STRUCTURE <ls_data_out> TO <doct1>.

***** 1st Rule ****
** dont include records where '/1FB/CS_TRN_QTY' and '/1FB/CS_TRN_LC' are blank
*      IF <trn_lc1> = 0 AND <qty1> = 0.
*        CONTINUE.
*      ENDIF.
*
***** 2nd Rule ****
** delete the Posting levels if it is > 1 and clear to blank  CS_PLEVEL
*      CHECK <plevel1> LE 1.
*      CLEAR <plevel1>.
*
***** 3rd Rule ****
** replace the Unilever Company with CG without prefix G and compare with Partner comp for deletion
** /BIC/ZCS_COMP with   /1FB/SEM_CGCOMP and check with /BIC/ZCS_PCOM
*
*      IF ct_task <> space.
****  code added by Ramesh for the removal GBRNCH  records while downloading the file.
***********************************************************************
***** code for removal of GBRNCH records only - Hardcode - sample code
**        IF <cgcomp1> <> 'GBRNCH'.   " to avoid BRNCH records
*** replace Company with CG without prefix G when task name is not blank
**          <comp1> = <cgcomp1>+1.
**        ELSE.
**          CONTINUE.
**        ENDIF.
***** code for removal of GBRNCH records only - Hardcode - sample code
***********************************************************************
*
****  the assumption here,is consider only records with Legal entity as numeric excepting the first character
*        IF <cgcomp1>+1 CN sy-abcde.   " to avoid BRNCH records
** replace Company with CG without prefix G when task name is not blank
*          <comp1> = <cgcomp1>+1.
*        ELSE.
*          CONTINUE.
*        ENDIF.
*
*
*      ENDIF.
*
** removing leading zero's as SAP sometimes adding them to <pcomp1>.
**      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
**        EXPORTING
**          input  = <pcomp1>
**        IMPORTING
**          output = <pcomp1>.

    PERFORM f_alpha_conversion USING <comp1>
                                CHANGING <comp1>.

    PERFORM f_alpha_conversion USING <pcomp1>
                               CHANGING <pcomp1>.

    " removing leading zero's from Investee Unit company - Added By Asif Maqbool, IBM/Unilever, 25/01/2008.

    PERFORM f_alpha_conversion USING <invc1>
                               CHANGING <invc1>.



*      CHECK <comp1> <> <pcomp1>.
*
***** 4rth Rule ****
** initialise Document type & PV TC to blank   /BIC/ZCS_DOCT & /1FB/CS_TRN_TC
*      CLEAR: <doct1>,<tc1>.
*
*    ENDIF.


    " ----------- END OF COMMENT BY ASIF MAQBOOL -----------------------------------------------------------------------
    COLLECT: <ls_data_out> INTO <lt_data_out>.

  ENDLOOP.          " end loop


  IF <lt_data_out> IS INITIAL.
    PERFORM f_build_msgs USING 'UCM0'
                               'W'
                               '053'
                               text-102
                               space "ct_task
                               space
                               space
                      CHANGING ct_message.
    RETURN.
    MESSAGE e208(00) WITH text-102.
    EXIT.
  ENDIF.


* perform various steps based on task name
  CASE ct_task.

    WHEN c_task01 OR space.              " 'T2700' or blank


* download the data into a tab delimited file
*****************************************************
****             start of Task 0001              ****
*****************************************************
* create Line-structure of download table
      CREATE DATA ls_download TYPE ty_download.
      ASSIGN ls_download->* TO <ls_download>.

** create Download data internal table for task T2700
      CREATE DATA lt_download LIKE STANDARD TABLE OF <ls_download>.
      ASSIGN lt_download->* TO <lt_download>.

      LOOP AT <lt_data_out> INTO <ls_data_out>.

        MOVE-CORRESPONDING <ls_data_out> TO <ls_download>.

        ASSIGN COMPONENT <trn_lc> OF STRUCTURE <ls_download> TO <trn_lc1>.
        ASSIGN COMPONENT <trn_gc> OF STRUCTURE <ls_download> TO <trn_gc1>.
**** 5th Rule ****
* Move the Negative sign to front

        PERFORM f_put_sign_in_front CHANGING <trn_lc1>.
        PERFORM f_put_sign_in_front CHANGING <trn_gc1>.
        INSERT <ls_download>  INTO TABLE <lt_download>.

      ENDLOOP.

* move the aggregated data to final table for display
      FREE ct_data.
      ct_data = <lt_data_out>.




      FIELD-SYMBOLS: <fs1> type ANY TABLE,
                     <fs_Struct> type any.



      Data: fs_Struct type ref to data,
            fs_table TYPE REF TO data.



      CREATE DATA fs_Struct like <ls_data_out>.
      ASSIGN fs_Struct->* to <fs_Struct>.

      CREATE DATA fs_table like TABLE OF <fs_Struct>.
      ASSIGN fs_table->* TO <fs1>.

      CLEAR: l_path,l_filename,l_fullpath,l_action.
*
*      CALL FUNCTION 'GUI_FILE_SAVE_DIALOG'
*       EXPORTING
*         window_title            = 'Download aggregated BCS data to Tab Delimited file'
*         default_extension       = 'txt'
**   DEFAULT_FILE_NAME       = dynamic file name as like ALE settings
*         file_filter             = 'Text files (*.txt)'
*       IMPORTING
*         filename                = l_filename
*         path                    = l_path
*         fullpath                = l_fullpath
*         user_action             = l_action .

      CALL METHOD cl_gui_cfw=>flush.



      " *************************** START OF CHANGE - ASIF MAQBOOL ************************
      IF l_action = 0 OR l_action = 1.

        " Create Header Data for Download
        ASSIGN gt_param TO <gt_param>.

        APPEND '100' to l_t_tab.
        READ TABLE gt_param INDEX 6 INTO gs_param.
        ASSIGN COMPONENT 2 OF STRUCTURE gs_param to <gs_value>.
        APPEND <gs_value> to l_t_tab.
        Clear gs_param.
        READ TABLE gt_param INDEX 4 INTO gs_param.
        ASSIGN COMPONENT 2 OF STRUCTURE gs_param to <gs_value>.
        APPEND <gs_value> to l_t_tab.



        CONCATENATE LINES OF l_t_tab INTO str1 SEPARATED BY cl_abap_char_utilities=>horizontal_tab.
        CLEAR l_t_tab.
        INSERT str1 INTO TABLE l_t_tab.
        ASSIGN l_t_tab TO <final_gt>.
        "If atleast one of the aggregation checkoxes are on.
        IF Aggr_swt = 'X'.
******************************** TEST *******************************
          DATA: l_s_download type REF TO DATA.
          FIELD-SYMBOLS: <ls> type any.

          CREATE DATA l_s_download TYPE ty_download.
          ASSIGN l_s_download->* TO <LS>.

          DATA: R_s_download type REF TO DATA.
          FIELD-SYMBOLS: <Rs> type any,
                         <Wa> type any.

          CREATE DATA R_s_download TYPE ty_download.
          ASSIGN R_s_download->* TO <RS>.

          DATA: TOTALLINES TYPE I,
                Initial TYPE I VALUE 1.

          FIELD-SYMBOLS: <t_Hashed> type any.
          DATA: g_struct type REF TO cl_abap_structdescr,
                g_table type ref to CL_ABAP_TABLEDESCR,
                tkeys type ABAP_KEYDESCR_TAB.



          move-CORRESPONDING chk_params to param_struct.

          CALL FUNCTION 'Z_RTTI_STRUCTURE'
            EXPORTING
              I_ZCONGRP_CHK   = param_struct-ZCONGRP_CHK
              I_ZCOMP_CHK     = param_struct-ZCOMP_CHK
              I_ZFSITEM_CHK   = param_struct-ZFSITEM_CHK
              I_ZMOV_CHK      = param_struct-ZMOV_CHK
              I_ZFUNC_CHK     = param_struct-ZFUNC_CHK
              I_ZACTDISP_CHK  = param_struct-ZACTDISP_CHK
              I_ZCOSTANAL_CHK = param_struct-ZCOSTANAL_CHK
              I_ZCONTDIS_CHK  = param_struct-ZCONTDIS_CHK
              I_ZPROCAT_CHK   = param_struct-ZPROCAT_CHK
              I_ZPARTCOMP_CHK = param_struct-ZPARTCOMP_CHK
              I_ZINV_CHK      = param_struct-ZINV_CHK
              I_ZDOCTYPE_CHK  = param_struct-ZDOCTYPE_CHK
              I_ZPOST_CHK     = param_struct-ZPOST_CHK
              I_ZCURKEY4T_CHK = param_struct-ZCURKEY4T_CHK
              I_ZCURKEY_I_CHK = param_struct-ZCURKEY_I_CHK
            IMPORTING
              E_T_STRUCT      = g_struct
              T_KEYS          = tkeys.

          DATA : WA TYPE REF TO DATA.
          CREATE DATA WA TYPE HANDLE g_struct.
          ASSIGN WA->* TO <WA>.

          CALL FUNCTION 'Z_RTTI_HASHEDTABLE'
            EXPORTING
              G_STRUCT    = g_struct
              G_T_KEYS    = tkeys
              I_TempTable = <fs1>
            IMPORTING
              G_T_TYPE    = g_table.


          FIELD-SYMBOLS: <t_wa> type ANY TABLE.

          DATA gr_itab TYPE REF TO DATA.
          CREATE DATA gr_itab TYPE HANDLE g_table.
          ASSIGN gr_itab->* TO <T_WA>.

          DATA: OBJ1 type REF TO data.
          FIELD-SYMBOLS: <fs_temp> type ANY.
          CREATE DATA obj1 LIKE LINE OF <T_Wa>.
          ASSIGN OBJ1->* TO <fs_temp>.

          " ASSIGN FIELD SYMBOLS TO EACH COMP OF LS.
          ASSIGN COMPONENT :     <comp>   OF STRUCTURE <lS> TO <comp1>,
                                 <cgcomp> OF STRUCTURE <ls> TO <cgcomp1>,
                                 <pcomp>  OF STRUCTURE <ls> TO <pcomp1>,
                                 <doct>   OF STRUCTURE <ls> TO <doct1>,
                                 <invc>   OF STRUCTURE <ls> TO <invc1>,
                                 <plevel> OF STRUCTURE <ls> TO <plevel1>,
                                 <alco> OF STRUCTURE <ls> TO <alco1>,
                                 <CURKEY> OF STRUCTURE <ls> TO <CURKEY1>,
                                 <CT> OF STRUCTURE <lS> TO <CT1>,
                                 <mov> OF STRUCTURE <ls> TO <mov1>,
                                 <ad> OF STRUCTURE <ls> TO <ad1>,
                                 <cd> OF STRUCTURE <ls> TO <cd1>,
                                 <cang> OF STRUCTURE <ls> TO <cang1>,
                                 <csplevel> OF STRUCTURE <ls> TO <csplevel1>,
                                 <prgp> OF STRUCTURE <ls> TO <prgp1>

                                .
          " ASSIGN FIELD SYMBOLS TO EACH COMP OF RS.

          ASSIGN COMPONENT :     <comp>   OF STRUCTURE <RS> TO <Rcomp>,
                                 <cgcomp> OF STRUCTURE <Rs> TO <Rcgcomp>, "
                                 <pcomp>  OF STRUCTURE <Rs> TO <Rpcomp>,
                                 <doct>   OF STRUCTURE <Rs> TO <Rdoct>,
                                 <invc>   OF STRUCTURE <Rs> TO <Rinvc>,
                                 <plevel> OF STRUCTURE <Rs> TO <Rplevel>, "
                                 <alco> OF STRUCTURE <Rs> TO <Ralco>,
                                 <CURKEY> OF STRUCTURE <Rs> TO <RCURKEY>,
                                 <CT> OF STRUCTURE <RS> TO <RCT>,
                                 <mov> OF STRUCTURE <Rs> TO <Rmov>,
                                 <ad> OF STRUCTURE <Rs> TO <Rad>,
                                 <cd> OF STRUCTURE <Rs> TO <Rcd>,
                                 <cang> OF STRUCTURE <Rs> TO <Rcang>,
                                 <csplevel> OF STRUCTURE <Rs> TO <Rcsplevel>,
                                 <prgp> OF STRUCTURE <Rs> TO <Rprgp>
                                 .

          DESCRIBE TABLE <lt_download> LINES TOTALLINES.

          LOOP AT <LT_DOWNLOAD> INTO <LS>.

            Initial = 1. " Initialize to 1 cuz

            WHILE Initial <> TOTALLINES. " Do it until end of ltdownload lines

              READ TABLE <LT_DOWNLOAD> INDEX Initial INTO <rs>.


              IF ( <comp1> = <Rcomp> AND  <mov1> = <Rmov> AND <pcomP1> = <Rpcomp> AND
                   <invc1> = <Rinvc> AND <cang1> = <Rcang> AND <ad1> = <Rad> AND <cd1> = <Rcd> AND
                   <prgp1> = <Rprgp> AND <DOCT1> = <RDOCT>
                  ).

                MOVE-CORRESPONDING <RS> TO <WA>.
                MOVE-CORRESPONDING <RS> TO <fs_temp>.
                COLLECT <fs_temp> inTO <T_wA>.
                " COLLECT <fs_Struct> into <fs1>.
                " COLLECT <fs_Struct> into <t_Wa>.


              endif.


              Initial = Initial + 1.

            ENDWHILE.



          ENDLOOP.

          get REFERENCE OF <t_wa> INTO lo_dataref.

          FREE ct_Data.
          "ct_data = <T_wa>.

*" THis is needed to convert the hashed table to
          " standard table as Gui_download only accepts standard table
*CREATE DATA lp_data LIKE LINE OF <t_wa>.
*ASSIGN lp_data->* TO <ls_wa>.
*
*CREATE DATA lp_data LIKE STANDARD TABLE OF <ls_Wa>.
*ASSIGN lp_data->* TO <lts_data>.
*
*<lts_data> = <t_wa>.
          FIELD-SYMBOLS: <fs> type any,
                         <fs2> type any.

          DATA: fs type REF TO data.
          DATA: fs2 type REF TO data.
          CREATE DATA fs like LINE OF <lt_data_out>.
          ASSIGN fs->* to <fs>.

          CREATE DATA fs2 like LINE OF <t_Wa>.
          ASSIGN fs2->* to <fs2>.


          clear <lt_data_out>.
          loop at <t_Wa> into <fs2>.

            move-CORRESPONDING <fs2> to <fs>.
            insert <fs> into  TABLE <lt_data_out>.

          endloop.


          ct_data = <lt_data_out>.



*
*" Get the header data downloaded
*CALL METHOD cl_gui_frontend_services=>gui_download
*          EXPORTING
*            filename              = l_fullpath
*            write_field_separator = l_seperator "SPACE
*          CHANGING
*            data_tab              = <final_gt>
*          EXCEPTIONS
*            file_write_error      = 1.

          " Now the checkboxes aggregated Data.
*CALL FUNCTION 'Z_DOWNLOAD_DATA'
*          EXPORTING
*               I_FULLPATH = l_fullpath
*               I_SEPERATOR = l_seperator
*               I_DATA = <lts_data>.


*********************** TEST *****************************

        ELSEIF Aggr_swt <> 'X'.
*
*CALL METHOD cl_gui_frontend_services=>gui_download
*          EXPORTING
*            filename              = l_fullpath
*            write_field_separator = l_seperator "SPACE
*          CHANGING
*            data_tab              = <final_gt>
*          EXCEPTIONS
*            file_write_error      = 1.
          " NON-Checkbox Data Download
*CALL FUNCTION 'Z_DOWNLOAD_DATA'
*          EXPORTING
*               I_FULLPATH = l_fullpath
*               I_SEPERATOR = l_seperator
*               I_DATA = <lt_download>.


        endif.

*" Create Header Data for Download
*        ASSIGN gt_param TO <gt_param>.
*
*        APPEND '100' to l_t_tab.
*          READ TABLE gt_param INDEX 6 INTO gs_param.
*          ASSIGN COMPONENT 2 OF STRUCTURE gs_param to <gs_value>.
*        APPEND <gs_value> to l_t_tab.
*        Clear gs_param.
*          READ TABLE gt_param INDEX 4 INTO gs_param.
*          ASSIGN COMPONENT 2 OF STRUCTURE gs_param to <gs_value>.
*        APPEND <gs_value> to l_t_tab.
*
*
*
*        CONCATENATE LINES OF l_t_tab INTO str1 SEPARATED BY cl_abap_char_utilities=>horizontal_tab.
*        CLEAR l_t_tab.
*        INSERT str1 INTO TABLE l_t_tab.
*        ASSIGN l_t_tab TO <final_gt>.

        "  To Start by adding the Header Data.
*        CALL METHOD cl_gui_frontend_services=>gui_download
*          EXPORTING
*            filename              = l_fullpath
*            write_field_separator = l_seperator "SPACE
*          CHANGING
*            data_tab              = <final_gt>
*          EXCEPTIONS
*            file_write_error      = 1.
*



        " Now append the Data after the header data insertion.
*        CALL METHOD cl_gui_frontend_services=>gui_download
*          EXPORTING
*            filename                = l_fullpath
*            write_field_separator   = l_seperator "SPACE
*            append                  = 'X'
*          CHANGING
*            data_tab                = <lt_download>
*          EXCEPTIONS
*            file_write_error        = 1
*            no_batch                = 2
*            gui_refuse_filetransfer = 3
*            invalid_type            = 4
*            no_authority            = 5
*            unknown_error           = 6
*            header_not_allowed      = 7
*            separator_not_allowed   = 8
*            filesize_not_allowed    = 9
*            header_too_long         = 10
*            dp_error_create         = 11
*            dp_error_send           = 12
*            dp_error_write          = 13
*            unknown_dp_error        = 14
*            access_denied           = 15
*            dp_out_of_memory        = 16
*            disk_full               = 17
*            dp_timeout              = 18
*            file_not_found          = 19
*            dataprovider_exception  = 20
*            control_flush_error     = 21
*            not_supported_by_gui    = 22
*            error_no_gui            = 23
*            OTHERS                  = 24.


        " *************************** END OF CHANGE - ASIF MAQBOOL ************************






        IF sy-subrc <> 0.
*          MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
*                     WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
          PERFORM f_build_msgs USING sy-msgid
                                     sy-msgty
                                     sy-msgno
                                     sy-msgv1
                                     sy-msgv2
                                     sy-msgv3
                                     sy-msgv4
                            CHANGING ct_message.
          RETURN.

        ENDIF.

      ENDIF.

*****************************************************
****               End of Task 0001              ****
*****************************************************

    WHEN c_task02.                                          "'T2490'.

* switch to validations on aggregated transactional data
*****************************************************
**** Start of Task 0002 validations ****
*****************************************************

* create Line-structure of gt_sel(selection) data table
      CREATE DATA lr_sel_data LIKE LINE OF ct_sel." zbcs_check_val
      ASSIGN lr_sel_data->* TO <ls_sel_data>.

* create validation table
      CREATE DATA lr_t_val TYPE STANDARD TABLE OF  zbcs_check_val.
      ASSIGN lr_t_val->* TO <lt_t_val>.


* create data table that does not fulfill rules after validation
      CREATE DATA lr_t_final LIKE STANDARD TABLE OF  <ls_data_out>.
      ASSIGN lr_t_final->* TO <lt_t_final>.


* concatenate year & month to query custom table
      READ TABLE ct_sel INTO <ls_sel_data> WITH KEY fieldname = 'FISCYEAR'.  "YYYY
      CHECK sy-subrc = 0.

      ASSIGN COMPONENT <low> OF STRUCTURE <ls_sel_data> TO <l_year>.

      <l_mmyy> = <l_year>.

      READ TABLE ct_sel INTO <ls_sel_data> WITH KEY fieldname = 'FISCPERIOD'."MM
      CHECK sy-subrc = 0.
      ASSIGN COMPONENT <low> OF STRUCTURE <ls_sel_data> TO <l_period>. " via BADI
**      ASSIGN COMPONENT 5 OF STRUCTURE <ls_sel_data> TO <l_period>.  " via report

      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
        EXPORTING
          input  = <l_period>
        IMPORTING
          output = <l_period>.

      CONCATENATE <l_mmyy> <l_period>  INTO <l_mmyy>.

** get data for given criteria
      SELECT * INTO TABLE <lt_t_val> FROM zbcs_check_val
      WHERE valid_from LE <l_mmyy> AND
            valid_to   GE <l_mmyy>.
      IF sy-subrc <> 0.
*   error message
        PERFORM f_build_msgs USING 'UCM0'
                                   'E'
                                   '053'
                                   text-103
                                   space
                                   space
                                   space
                          CHANGING ct_message.
        RETURN.

      ENDIF.

      LOOP AT <lt_t_val> ASSIGNING <ls_val>.

        CASE <ls_val>-valid_rules.

          WHEN 'VAL_001'.
* meant for parallal cursor
*            READ TABLE <lt_data_out> INTO <ls_data_out> WITH KEY (l_comp) = <ls_val>-company
*                                                                 (l_bu)   = <ls_val>-bus_cost_unit.
*            CHECK sy-subrc = 0.
*            LOOP AT <lt_data_out> INTO <ls_data_out> FROM sy-tabix.

            LOOP AT <lt_data_out> INTO <ls_data_out>.

              ASSIGN COMPONENT: <bu>   OF STRUCTURE <ls_data_out> TO <bu1>,
                                <comp> OF STRUCTURE <ls_data_out> TO <comp1>.

*** inserting all error records which does not match 'VAL_001'
              CHECK <comp1> <> <ls_val>-company AND <bu1> <> <ls_val>-bus_cost_unit.
              flg_chk = abap_true.
              COLLECT <ls_data_out>  INTO <lt_t_final>.
              PERFORM f_build_msgs USING 'UCM0'
                                         'E'
                                         '053'
                                         <ls_val>-valid_rules
                                         text-104
                                         <ls_val>-company
                                         <ls_val>-bus_cost_unit
                                CHANGING ct_message.

            ENDLOOP.
*** future use of further validation
***            CHECK flg_chk = abap_true.
***            flg_chk = abap_false.
***            PERFORM f_build_msgs USING 'UCM0'
***                           'E'
***                           '053'
***                           <ls_val>-valid_rules
***                           text-104
***                           <ls_val>-company
***                           <ls_val>-bus_cost_unit
***                  CHANGING ct_message.

***          WHEN 'VAL_002'.
*** Etc
*** future use of further validation

          WHEN OTHERS.

        ENDCASE.

      ENDLOOP.

* move the aggregated data to final table for display
      FREE ct_data.
      ct_data = <lt_t_final>.

*****************************************************
**** End of Task  0002 validations ****
*****************************************************

    WHEN OTHERS.

** move the aggregated data to final table for display
      FREE ct_data.
      ct_data = <lt_data_out>.

  ENDCASE.

ENDFORM.                    " f_download_data_YBBCSDOWNLOAD
1 REPLY 1
Read only

Former Member
0 Likes
418

Hi,

I am also from same project.

We are facing a problem with this code.

How can I increase the length of the field obtained by this method.

CALL METHOD go_model->create_data_reference

EXPORTING

io_tx_data_io_type = go_model->ds_tx_data_io_type-totals

i_type = l_outtype "'UCR_SX_TX_DATA_LST'

IMPORTING

er_data = lr_s_data_out.

ASSIGN lr_s_data_out->* TO <ls_data_out>.

We are getting data overflow error when we try to move some large value to one of the field in <ls_data_out>.

we can avoid this if the field length is increased.

Waiting for your reply.

Regards

Madhu G S