Fields present in the saved layout of ALV

Hi All,
I have a report which has 20 fields in output.
I have saved a layout with only 10 fields and I am using these default layout while executing the program.
Is there any possibility to get the fields in the layout without actually going to the report output?
When I run this report in background mode I am downloading the fields into an excel and sending it to an email.Though the layout has ten fields, all the 20 fields are downloaded into the excel.This is because I have taken all the possible fileds into the excel.
Is there any possibilty to look at the fields present in the layout and pass only those fields data to the excel?
Thanks
Sandeep

You should be able to do this as the data is obviously held inside SAP - but the approach may differ a little depending on how your table catalog is defined.  The best starting point would probably be function REUSE_ALV_VARIANT_SELECT - have a look at include RJITMON_DOWNLOAD for example (if it's in your system) that uses this to read the variant and assemble a download.  Otherwise you may need to delve down a layer or two into the function modules that REUSE_ALV_VARIANT_SELECT calls (e.g.   LT_VARIANT_LOAD, LT_DBDATA_READ_FROM_LTDX, &  LT_FC_LOAD) - if you do a where-used on these you will probably find an example you can copy the logic for determining the variant column attributes from.
Jonathan

Similar Messages

  • How to refer a field created at the paper layout?

    Hi,
    I created a field for total pages of a report in the paper layout.
    How do I refer to it in the formattrigger since I don't want to show it if there is only 1 page.
    I tried putting & or : in front of the field name but it is not valid since the field is not created in data model.
    Thanks for any help in advanced.

    You can't reference the total number of pages in any way (an often heard complaint on this forum).
    The workaround is to use srw.get_page_num on a format trigger of a field that you put at the end of the report. Then you know you are at the end of the report. If the page number is 1, you know there is only 1 page. Still a bit tricky how to use this in your case, but you may find a solution.
    I knew I posted something about this before. Here it is:
    Re: Print Condition of a margin object
    Edited by: InoL on Apr 7, 2011 3:23 PM

  • Changing color of a field after changing the data using OOPS ALV.

    Hi Experts,
    I have displayed three fields (price, no. of products and total amount) in my ALV grid using OOPS.
    Then am changing the data in either price or no. of products fields. When I click ENTER key the value in total amount changes correspondingly. Am able to achieve till this point.
    Now I have to change the color of the three fields( price, products and total amount) of the affected row alone and not the entire set of rows in the output grid.
    Please provide suggestions.
    Thanks in advance.

    Hi,
    You have to use Layout and Output data in your OO ALV. The below code is using FM you can replicate it in OO ALV
    types: begin of t_data,
             flg(3) type c,
             sty    type lvc_t_styl,
             col    type lvc_t_scol,
           end of t_data,
           t_tdata type table of t_data.
    constants: c_red type i value '255',
              c_g   type i value '1'.
    DATA: i_fcat type LVC_T_FCAT,
          s_fcat type lvc_s_fcat,
          s_lay  type lvc_s_layo,
          s_sty  type lvc_s_styl,
          s_col  type lvc_s_scol,
          i_data type t_tdata,
          s_data type t_data.
    s_lay-stylefname = 'STY'.
    s_lay-CTAB_FNAME = 'COL'.
    s_fcat-FIELDNAME = 'FLG'.
    APPEND s_fcat to i_fcat.
    CLEAR: s_data.
    s_data-flg = 'Yes'.
    s_sty-FIELDNAME = 'FLG'.
    s_sty-style = CL_GUI_ALV_GRID=>MC_STYLE_HOTSPOT.
    insert s_sty into TABLE s_data-sty.
    s_col-fname = 'FLG'.
    s_col-color-col = 6.
    s_col-color-inv = 1.
    insert s_col into table s_data-col.
    APPEND s_data to i_data.
    CLEAR: s_data.
    s_data-flg = 'No'.
    s_sty-FIELDNAME = 'FLG'.
    s_sty-style = CL_GUI_ALV_GRID=>MC_STYLE_HOTSPOT_NO.
    insert s_sty into TABLE s_data-sty.
    APPEND s_data to i_data.
    CLEAR: s_data.
    s_data-flg = 'No'.
    s_sty-FIELDNAME = 'FLG'.
    s_sty-style = CL_GUI_ALV_GRID=>MC_STYLE_HOTSPOT_NO.
    s_col-fname = 'FLG'.
    s_col-color-col = 6.
    insert s_col into table s_data-col.
    insert s_sty into TABLE s_data-sty.
    APPEND s_data to i_data.
    CLEAR: s_data.
    s_data-flg = 'Yes'.
    s_sty-FIELDNAME = 'FLG'.
    s_sty-style = CL_GUI_ALV_GRID=>MC_STYLE_HOTSPOT.
    insert s_sty into TABLE s_data-sty.
    APPEND s_data to i_data.
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
       IS_LAYOUT_LVC                     = s_lay
       IT_FIELDCAT_LVC                   = i_fcat
      TABLES
        T_OUTTAB                          = i_data
    EXCEPTIONS
       PROGRAM_ERROR                     = 1
       OTHERS                            = 2
    IF SY-SUBRC <> 0.
    ENDIF.
    Thanks,
    Kiruba

  • Column field to be added in Layouts of ALV Display.

    Dear Expert,
    I need to add one column field in IW37 transaction layout.IW37 transaction output is diplayed in ALV where i need to add one field in layout set of column.This layout of column can be found under the menu settings> layouts>curent in the ALV output of transaction IW37.Please suggest how to accomplish this?
    Thanks

    Seem you have to find the exit to add field in standard program then find enhancement spot to put your field to gt_fieldcat.
    Otherwise, should copy the standard program and edit by yourself.
    How about your result now? Can you please post your solution?
    Regards,
    Hung Tran

  • Adobe forms:Data view palette not showing any fields present in the context

    Hi Experts,
    I am trying to create a static adobe form by following a step-by-step tutorial.The steps I have followed are:
    1. Created an Interface with just one field in the Import parameters (apart from the default one).
    2. Created a form by using that interface and included that field in the context .
    3. Activated the form and wennt to the layout of the form.
    4. I should be seeing that field added and activated in the context in the form but its not there.
    What could possibly be the reason for it.Please guide me.
    Thanks and Regards
    Abhishek

    Hi,
    I am working on Adobe Form when I open it in change mode I am unable to see the below options in it.
    Always I could see only the preview of pdf output. I tried for the option in Palette by right click on the pdf form->Right Click->Palette but it has options Border,Accessibility etc but no option is related to DataView or Hierarchy palettes.
    I am looking for Dataview and Hierarchy Palettes to be displayed on the left side of the form.
    Please share if any ideas.
    Regards,
    Rafi

  • Problem in saving layout in ALV's

    Hi all!
         I am getting a strange problem in ALV's .For an ALV report some users are able to save the layouts where as some are not able to save .Why is it happening so? I have mentioned IS_SAVE = 'X' in my func.module REUSE_ALV_GRID_DISPLAY.Please help.

    Hi,
    You Have to call the Fm Reuse_alv_variant_f4
    SELECTION-SCREEN : BEGIN OF BLOCK blk3 WITH FRAME TITLE text-003.
    PARAMETER:p_var TYPE disvariant-variant MODIF ID p2.                    "Variant Part
    SELECTION-SCREEN:END OF BLOCK blk3.
    Data: wa_variant   TYPE   disvariant,
             wa_variant1  TYPE   disvariant.
    CONSTANTS:c_x(1)             TYPE c VALUE'X',
                        lc_a(1)            TYPE c VALUE 'A',
    FORM alv_variant .
      wa_variant-username = sy-uname.
      wa_variant-report = sy-repid.
    *For variant Part
      CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
        EXPORTING
          is_variant    = wa_variant
          i_save        = lc_a
        IMPORTING
          es_variant    = wa_variant1
        EXCEPTIONS
          not_found     = 1
          program_error = 2
          OTHERS        = 3.
      IF sy-subrc <> 0.
        p_var = wa_variant-variant.
      ELSE.
        p_var = wa_variant1-variant.
      ENDIF.
    ENDFORM.                       " alv_variant
    After That
    *display variant
      wa_variant-report = sy-repid.
      IF NOT p_var IS INITIAL.
        wa_variant-variant = p_var.
      ENDIF.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
        EXPORTING
          i_callback_program       = sy-repid
          i_callback_pf_status_set = 'PF_STATUS'
          i_callback_user_command  = 'USER_COMMAND'
          is_layout                = lwa_layout
          it_fieldcat              = gi_fieldcat
          is_variant               = wa_variant
          i_default                = c_x
          i_save                   = lc_a
        TABLES
          t_outtab                 = gi_final
        EXCEPTIONS
          program_error            = 1
          OTHERS                   = 2.
    Regards
    Sandipan

  • Saving layout in ALV display

    Hi,
    I am using both is_variant, i_save parameters in this method, but still am not getting save layout button on my grid.
    ls_variant-REPORT = sy-repid.
      CALL METHOD w_alv1->set_table_for_first_display
        EXPORTING
          is_variant                    = ls_variant
          i_save                        = 'A'
          i_default                     = 'X'
          is_layout                     = it_layout
        CHANGING
          it_outtab                     = <fs1>
          it_fieldcatalog               = it_fcat
          it_sort                       = it_sort
        EXCEPTIONS
          invalid_parameter_combination = 1
          program_error                 = 2
          too_many_lines                = 3
          OTHERS                        = 4.
    Please sujjest me.
    Thanks,
    Prathap

    sample code:
    gs_variant-report = g_repid.        "Program name
    CALL METHOD grid1->set_table_for_first_display         
         EXPORTING it_toolbar_excluding = gt_ui_functions  
                   is_print             = gs_print         
                   is_layout            = gs_layout        
                   i_save               = x_save           
                   is_variant           = gs_variant       
         CHANGING  it_outtab            = gt_deldef        
                   it_fieldcatalog      = pt_fieldcat.     
    Also c
    heck if you have authorization to all basic ALV functiobnalities.

  • Layout in ALV Grid in OO ABAP

    Hello friends,
    I want the ALV Grid to be displayed with a default layout. I am able to get the saved layout on the selection screen but when I select that layout still the output layout is not taking it.
    Please refer the code which I have written.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_layout.
      PERFORM variant_search CHANGING p_layout.
    FORM variant_search  CHANGING p_layout TYPE slis_vari.
      DATA : lv_exit      TYPE c,
             ls_variant   TYPE disvariant.
      ls_variant-report = syst-repid.
      CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
        EXPORTING
          is_variant    = ls_variant
          i_save        = 'A'
        IMPORTING
          e_exit        = lv_exit
          es_variant    = ls_variant
        EXCEPTIONS
          not_found     = 1
          program_error = 2
          OTHERS        = 3.
      IF sy-subrc EQ 0 AND lv_exit IS INITIAL.
        p_layout = ls_variant-variant.
      ENDIF.
    ENDFORM.                    " variant_search
    *-------The above piece of code helps me to save a layout.
    Now when I enter the saved layout in my parameter, I want the output to take this layout and display the grid, but I dont know why it is not taking this layout. Please refer the code which I have written.
            lr_layout = gr_alv->get_layout( ).
            key-report = sy-repid.
            lr_layout->set_key( key ).
            lr_layout->set_save_restriction( cl_salv_layout=>restrict_none ).
    Please let me know how can I achieve this.
    Regards,
    Salil

    Salil,
    Here is some code that uses a default variant.
    *& SELECTION-SCREEN
    SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
    SELECT-OPTIONS: s_werks FOR  marc-werks,
                    s_matnr FOR  mara-matnr,
                    s_uname FOR  sy-uname,
                    s_datum FOR  sy-datum,
                    s_uzeit FOR  sy-uzeit,
                    s_mtart FOR  mara-mtart,
                    s_matkl FOR  mara-matkl.
    PARAMETERS:     p_toler(3) TYPE n.
    SELECTION-SCREEN: END OF BLOCK b1.
    SELECTION-SCREEN BEGIN OF BLOCK v1 WITH FRAME.
    PARAMETERS: p_vari LIKE disvariant-variant.
    SELECTION-SCREEN END OF BLOCK v1.
    *& Event INITIALIZATION
    INITIALIZATION.
      PERFORM set_defaults.
      PERFORM default_variant CHANGING p_vari.
    Event AT SELECTION-SCREEN ON VALUE-REQUEST
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.
      PERFORM f4_for_variant CHANGING p_vari.
    *&      Form  default_variant
          text
         <--PL_VARI  variant
    FORM default_variant  CHANGING pl_vari.
      g_repid = sy-repid.
    set options: save variants userspecific or general
      g_save = 'A'. " 'A' = standard and user-specific saving
    initialize variant
      CLEAR gs_variant.
      gs_variant-report = g_repid.
    get default variant
      gs_xvariant = gs_variant.
      CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
        EXPORTING
          i_save     = g_save
        CHANGING
          cs_variant = gs_xvariant
        EXCEPTIONS
          not_found  = 2.
      IF sy-subrc = 0.
        pl_vari = gs_xvariant-variant.
      ENDIF.
    ENDFORM.                    " default_variant
    *&      Form  f4_for_variant
          text
         <--PL_VARI  variant
    FORM f4_for_variant  CHANGING pl_vari.
    display variant selection dialog box
      CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
           EXPORTING
                is_variant          = gs_variant
                i_save              = g_save
              it_default_fieldcat =
           IMPORTING
                e_exit              = g_exit
                es_variant          = gs_xvariant
           EXCEPTIONS
                not_found = 2.
      IF sy-subrc = 2.
        MESSAGE ID sy-msgid TYPE 'S'      NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ELSE.
        IF g_exit = space.
          pl_vari = gs_xvariant-variant.
        ENDIF.
      ENDIF.
    ENDFORM.                    " f4_for_variant
    MODULE status_0100 OUTPUT
    MODULE status_0100 OUTPUT.
      SET PF-STATUS '100'.
      SET TITLEBAR '100'.
      IF o_container IS INITIAL.
        REFRESH: t_fieldcat,
                 t_sortcat,
                 t_groupcat,
                 gt_exclude.
        CREATE OBJECT o_container
          EXPORTING container_name = 'CONTAINER'.
    Create TOP-Document
        CREATE OBJECT o_dyndoc_id
        EXPORTING style = 'ALV_GRID'.
    Create Splitter for custom_container
        CREATE OBJECT o_splitter
        EXPORTING parent  = o_container
        rows    = 2
        columns = 1.
        CALL METHOD o_splitter->get_container
          EXPORTING
            row       = 1
            column    = 1
          RECEIVING
            container = o_parent_top.
        CALL METHOD o_splitter->get_container
          EXPORTING
            row       = 2
            column    = 1
          RECEIVING
            container = o_parent_grid.
    Set height for g_parent_html
        CALL METHOD o_splitter->set_row_height
          EXPORTING
            id     = 1
            height = 12.
        CREATE OBJECT o_grid
          EXPORTING i_parent = o_parent_grid.
        gs_layout-smalltitle = 'X'.
        gs_layout-no_rowmark = ' '.
        gs_layout-cwidth_opt = 'X'.
        gs_layout-zebra      = 'X'.
        gs_layout-sel_mode   = 'D'.
        gs_variant-report    = sy-cprog.
        gs_variant-variant   = p_vari.
        gs_exclude = cl_gui_alv_grid=>mc_fc_info.
        APPEND gs_exclude TO gt_exclude.
        gs_exclude = cl_gui_alv_grid=>mc_fc_graph.
        APPEND gs_exclude TO gt_exclude.
        CALL METHOD o_grid->set_3d_border
          EXPORTING
            border = 1.
        SET HANDLER lcl_event_handler=>hotspot_click FOR o_grid.
        SET HANDLER lcl_event_handler=>top_of_page FOR o_grid.
        SET HANDLER lcl_event_handler=>print_top_of_page FOR o_grid.
        CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
          EXPORTING
            i_structure_name = 'Z1271'
          CHANGING
            ct_fieldcat      = t_fieldcat.
        LOOP AT t_fieldcat INTO h_fieldcat.
          CASE h_fieldcat-fieldname.
            WHEN 'MATNR'.
              h_fieldcat-hotspot   = 'X'.
            WHEN 'VBELN'.
              h_fieldcat-hotspot   = 'X'.
            WHEN 'UNAME'.
              h_fieldcat-coltext   = 'Maint. By'.
              h_fieldcat-tooltip   = 'Material maintained by'.
            WHEN 'DATUM'.
              h_fieldcat-coltext   = 'Maint. Date'.
              h_fieldcat-tooltip   = 'Material maintenance date'.
            WHEN 'UZEIT'.
              h_fieldcat-coltext   = 'Maint. Time'.
              h_fieldcat-tooltip   = 'Material maintenance time'.
            WHEN 'EDAYS'.
              h_fieldcat-coltext   = 'EDays'.
              h_fieldcat-tooltip   = 'Elapsed days'.
            WHEN 'ETIME'.
              h_fieldcat-coltext   = 'ETime'.
              h_fieldcat-tooltip   = 'Elapsed time same day'.
            WHEN 'EDATU'.
              h_fieldcat-coltext   = 'Delivery Date'.
              h_fieldcat-tooltip   = 'Delivery date'.
          ENDCASE.
          MODIFY t_fieldcat FROM h_fieldcat.
          CLEAR h_fieldcat.
        ENDLOOP.
        CALL METHOD o_grid->set_table_for_first_display
          EXPORTING
            is_layout            = gs_layout
            i_save               = 'A'
            is_variant           = gs_variant
            it_toolbar_excluding = gt_exclude
          CHANGING
            it_fieldcatalog      = t_fieldcat
            it_sort              = t_sortcat
            it_outtab            = t_rpt.
        CALL METHOD o_grid->list_processing_events
          EXPORTING
            i_event_name = 'TOP_OF_PAGE'
            i_dyndoc_id  = o_dyndoc_id.
      ENDIF.
    ENDMODULE.                    "status_0100 OUTPUT

  • Changing the output layout of standard transaction FPWLM

    Hi All,
    We have a requirement where we need to change the output layout of the standard transaction FPWLM which is used fo the management of worklist for collecion management.
    In this transaction under the current worklist if we select the worklist ID and display it , work items are displayed in the Grid display. We want to add certain fields here in the output layout of this transaction. We tried adding the fields by selecting the change layout option which displays the list of hidden fields which can be added . But the problem is the field which we want to add is not present in this list.
    Is there any other way to add the fields to the output layout of standard transaction.
    thanks
    regards
    manipal

    Hi Manipal,
    Maybe check IMG under Basic Settings for Collections Management.
    This node contains the sub-node Worklist.
    Two enhancements are availaable here:
    BAdI: Enhancement of Worklist Items on Creation
    BAdI: Enhancement of Worklist Items on Display
    Maybe read the documentation for the nodes to determine if the enhancements will accomplish what you are looking for!?
    Since this component is not active in our installation, I have no experience with this functionality.
    Kind regards,
    Robert

  • Identify the planning layout used to enter data.

    Hi,
      I am using BI - IP Planning solution. I have a planning solution with 5 different templates. I have a Infoobject ZSOURCE in my planning cube. I would like to update this field based on the planning layout I used to enter the data.
    I cannot include this field in the planning query or Filter because the actuals do not have this field. I am planning to use Characteristic Derivations to update this field. Does any have any idea on how to access input query parameters during the Charateristic Derivation Exit class?
    Or, Is there a better way to achieve this functionality ?
    Thanks 
    Murthy

    Hi Murthy,
    whether a field is filled or not should only depend on the data model, not on a query. This is why characteristic relationships are assigned to real-time InfoCubes, not aggregation levels or queries.
    So my questions is, what is the 'real' criterion to fill ZSOURCE (in some queries and in others not). As I understand, ZSOURCE is not in the aggregation levels so it can be derived based on some criterion. But why is this criterion the used query?
    By design of characteristic relationships you don't get this information in an exit class; though you might 'abuse' a variable exit implementation to read the query name from I_S_RKB1D-COMPID, store in ABAP memory and read the value in your exit implementation. This may work in your case but is not very nice.
    Regards,
    Gregor

  • SharePoint Bug? Conflict Error when saving a Page with a "Required" DateTime field in the page layout

    Hello,
    I've just recently encountered a weird error / bug in SharePoint. Here is the scenario:
    - I have a custom column "Test Date" that is of DateTime field type. The field is configured as REQUIRED.
    - It is added to a custom Content Type "Test CT" that is based on a "Publishing Page" content type
    - I have created a Page Layout "Test PL" which is based on that particular content type.
    Now here is what happens:
    1. I try to create a page based on both that Content Type and Page Layout in the Pages Library. I manage to create it successfully.
    2. However, when I go to try and edit the page, fill-in the required values and try to save it using the PAGE TAB -> SAVE BUTTON, I get the below error/s. Note that this happens no matter what I choose in the drop-down menu for Save Button.
    "The file XXX has been modified by USER on DATE"
    But I know I am the ONLY user modifying the page. 
    If I try to save again it gives me options to whether Discard my Changes, Keep Editing, Overwrite Changes, or Merge.
    3. HOWEVER, if I use the Save button on the UPPER RIGHT corner of the screen (the shortcut). I am able to save successfully without any errors!
    The only thing I've tried that made it work was if I made the DateTime OPTIONAL. But I need it to be REQUIRED.
    Is there any workaround to this error / bug?
    Thanks

    I have some additional info but nothing really good. 
    If you click the Save in the left side of the Ribbon then it looks like that is when you get the message. If you click the Save in the top right corner you won't get the message. They must be calling different saving functions. 
    There really is no way around it other than making the field optional which probably removes some server side validation checks causing that message.
    We've chosen to remove that field from the page as I needed it required, then they can't publish the page until they go to the properties and set the article date. By removing the field from the page layout the message goes away.
    I hope MS will fix this at some point.
    -tom daly

  • How to get the layout field setting from the oo ALV

    Hi:
        My user want me to save the data to the email attachment when he change the alv layout.
        For example there are 10 fields in a alv report ,and the user change the layout setting to 5 fields,I need to know which field is he need first, how can I get it ?
        Pls help me ,thanks a lot !

    Hello Jerry
    When you call method go_grid->GET_FRONTEND_FIELDCATALOG you can retrieve the current layout of the ALV list.
    LVC_S_FCAT-COL_POS = Position of column
    LVC_S_FCAT-NO_OUT = 'X' = not visible
    LVC_S_FCAT-TECH = 'X' = technical column, neither visible nor selectable
    Regards
      Uwe

  • Field not present in the Field Catalog also getting displayed in the ALV

    Hi Experts,
    I am trying to display some to an ALV grid. But since i don't need all the fields from the internal table, i have deleted those fields from the field catalog. But in-spite of doing this the field heading is still getting displayed. I am not able to figure out the reason for this. Also note that the i have not deleted that field from my internal table which contains the actual data.
    Regards,
    Kush

    Hi,
    If your giving your internal table to the below field then ALV try to disply those many coloumn.
    wa_fcat-tabname    = 'IT_OUTPUT'.
    You can add for that field name.
    wa_fcat--NO_OUT = 'X'.
    Please check the field name on the output will be same as before column name .

  • When clic in the field "i_ekpo-ebeln" tab exit in report ALV

    Good Afternoon! *********************************************************
    Coloquei all the code, I believe for better clarification. When clico in the field i_ekpo-ebeln in the report is called transaction ME23 c/o GRID this functioning normally, but with the reports List and Hierarquico it does not happen the same and it prints in the baseboard the message "Invalid Function". when standard use buttons, functions of course.
    obs.: I had that to create a SET Pf-status for each type of report pos I wanted that when clicar in the field box and clicar in the button "TO PRINT REPORT" it printed sapscript. How I make to solve such problem?
    Att, Carlos Eduardo.
    REPORT ztreino NO STANDARD PAGE HEADING LINE-SIZE 220.
    ************************declarações*********************
    DATA: BEGIN OF y_ekko OCCURS 0,
            ebeln TYPE ekko-ebeln,  "Nº documento de compra
            bukrs TYPE ekko-bukrs,  "Empresa
            bsart TYPE ekko-bsart,  "Documento de compra
            loekz TYPE ekko-loekz,  "Código de eliminação
            aedat TYPE ekko-aedat,  "Data de criação do registro
            ernam TYPE ekko-ernam,  "Nome do responsável que criou o objeto
            lifnr TYPE ekko-lifnr,  "Nº conta do fornecedor
            ekgrp TYPE ekko-ekgrp,  "Grupo de compradores
            waers TYPE ekko-waers,  "Chave da moeda
            BOX   TYPE ptrv_approval-box, "campo para chekinbox
          END OF y_ekko,
          BEGIN OF y_ekpo OCCURS 0,
            ebeln TYPE ekpo-ebeln,  "Nº documento de compra
            ebelp TYPE ekpo-ebelp,  "Nº item do documento de compra
            loekz TYPE ekpo-loekz,  "Código de eliminação
            txz01 TYPE ekpo-txz01,  "Texto breve
            matnr TYPE ekpo-matnr,  "Nº material
            bukrs TYPE ekpo-bukrs,  "Empresa
            werks TYPE ekpo-werks,  "Centro
            menge TYPE ekpo-menge,  "Quantidade do pedido
            netpr TYPE ekpo-netpr,  "Preço líquido no documento de compra
            BOX   TYPE ptrv_approval-box, "campo para chekinbox
          END OF y_ekpo.
    *início seleção de dados
    SELECTION-SCREEN BEGIN OF BLOCK bl2 WITH FRAME TITLE text-000.
    SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE text-001.
    SELECTION-SCREEN SKIP.
                                    *Nº documento de compra
    SELECT-OPTIONS : s_ebeln FOR ekko-ebeln NO INTERVALS OBLIGATORY,
                     s_bukrs FOR ekko-bukrs OBLIGATORY,  "Empresa
                     s_bsart FOR ekko-bsart.  "Documento de compra
    SELECTION-SCREEN END OF BLOCK bl1.
    SELECTION-SCREEN END OF BLOCK bl2.
    **fim da seleção de dados----
    **início da variante
    SELECTION-SCREEN BEGIN OF BLOCK bl4 WITH FRAME TITLE text-000.
    SELECTION-SCREEN BEGIN OF BLOCK bl3 WITH FRAME TITLE text-002.
    PARAMETERS : p_vari LIKE disvariant-variant.
    SELECTION-SCREEN END OF BLOCK bl3.
    SELECTION-SCREEN END OF BLOCK bl4.
    ***fim variante -
    ***início modo relatório
    SELECTION-SCREEN BEGIN OF BLOCK bl5 WITH FRAME TITLE text-000.
    SELECTION-SCREEN BEGIN OF BLOCK bl6 WITH FRAME TITLE text-003.
    SELECTION-SCREEN SKIP.
      PARAMETERS : rb1 RADIOBUTTON GROUP TIPO DEFAULT 'X',
                   rb2 RADIOBUTTON GROUP TIPO,
                   rb3 RADIOBUTTON GROUP TIPO.
    SELECTION-SCREEN END OF BLOCK bl6.
    SELECTION-SCREEN END OF BLOCK bl5.
    ****fim modo relatório
    *******início da opção de download
    Dados do arquivo texto de saída.
    SELECTION-SCREEN BEGIN OF BLOCK bl9 WITH FRAME TITLE text-004.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(15) text-005.
    PARAMETERS: p_gerar  AS CHECKBOX.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(15) text-006.
    PARAMETERS: p_dir  LIKE rlgrap-filename DEFAULT 'c:'.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(15) text-007.
    PARAMETERS: p_arq  LIKE rlgrap-filename DEFAULT 'nota-geral.txt'.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN SKIP.
    SELECTION-SCREEN END OF BLOCK bl9.
    DATA :
          i_ekko  LIKE     y_ekko OCCURS 0 WITH HEADER LINE,
          i_ekpo  LIKE     y_ekpo OCCURS 0 WITH HEADER LINE.
         i_tabsaida LIKE  y_saida OCCURS 0 WITH HEADER LINE.
    *********************Fim Declarações*******************************
    *********************Declarações ALV*******************************
    TYPE-POOLS : slis.
    DATA :
           s_layout    TYPE  slis_layout_alv,
           t_sort      TYPE  slis_t_sortinfo_alv WITH HEADER LINE,
           t_fieldcat  TYPE  slis_t_fieldcat_alv WITH HEADER LINE,
           s_grupos    TYPE  slis_t_sp_group_alv WITH HEADER LINE,
           s_keyinfo   TYPE  slis_keyinfo_alv,
           extab       TYPE  slis_t_extab.
    DATA :
           variant_exit(1) TYPE  c,
           def_variant(1)  TYPE  c,
           s_print      TYPE  slis_print_alv,
           s_top        TYPE  slis_t_listheader,
           variante     TYPE  disvariant,
           def_variante TYPE  disvariant,
           v_repid      LIKE  sy-repid,
    *------pega a data que esta rodando a transação
           v_datasaida(10)  TYPE C,
    *------para saber quantos Pedidos na EKKO
           v_exibe      TYPE I,
           s_selfield type slis_selfield,
           v_ucomm like sy-ucomm.
    **********************Fim declarações ALV*************************
                   Contants para Sapscript e declarações                 *
    TABLES: ITCPO.
    CONSTANTS:  c_on(1)  TYPE  C  VALUE  'X',    "Parâmetro para o Sapscript
                c_off(1) TYPE  C  VALUE  ''.     "Parâmetro para o Sapscript
    Data:
          v_element(15) TYPE C,  "Elemento de texto do Sap Script
          v_type(15)    TYPE C,  "BODY
          v_window(15)  TYPE C,  "Janela
          flag          TYPE I,  "Uma condição para impressão do sapscript
          resp          TYPE C,  "resposta para confirmação do download tab
          zlen          TYPE I,  "Para verificar o um diretório válido
    Para a função WS_DOWNLOAD só em declarar as variaveis deste tipo já *
    seria o bastante para passar o caminho para a função
    TABLES : ekko, ekpo.
                       initialization                                    *
    INITIALIZATION.
      PERFORM zf_verifica_variante.
                   at selection-screen on value-request                  *
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.
      PERFORM zf_busca_variante_existente.
                 at seletion-screen                                      *
    AT SELECTION-SCREEN.
      PERFORM zf_valida_variante.
    validar os campo antes de fazer download do arquivo
      PERFORM zf_trata_parametros_gerar_arqu.
                start-of-selection                                       *
    START-OF-SELECTION.
      PERFORM zf_seleciona_dados.
                       Criando ALV                                       *
      PERFORM zf_alv.
    *&      Form  zf_verifica_variante
          text
    -->  Verifica se a variante selecionada é existente
    FORM zf_verifica_variante.
      CLEAR variante.
      v_repid = sy-repid.
      variante-report = v_repid.
    Buscar variante default
      def_variante = variante.
      CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
           EXPORTING
                i_save        = 'A'
           CHANGING
                cs_variant    = def_variante
           EXCEPTIONS
                wrong_input   = 1
                not_found     = 2
                program_error = 3
                OTHERS        = 4.
      IF sy-subrc EQ 0.
        p_vari = def_variante-variant.
      ENDIF.
    ENDFORM.                    " zf_verifica_variante
    *&      Form  zf_busca_variante_existente
    *-       text
    *-  --> Vai buscar a variante existente
    FORM zf_busca_variante_existente.
      CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
           EXPORTING
                is_variant          = variante      " Report com as
                i_save              = 'A'           " Variantes Salvas
                i_tabname_header    = 'I_EKPO'      " Tabela interna saida
                it_default_fieldcat = t_fieldcat[]  " Tabela de formatação
                i_display_via_grid  = 'X'  " Dispara POPUP em ALV
           IMPORTING
                e_exit           = variant_exit  " Se não existir variante X
                es_variant       = def_variante     " Variante default
           EXCEPTIONS
                not_found           = 1
                program_error       = 2
                OTHERS              = 3.
      IF sy-subrc = 2.
          MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ELSE.
        IF variant_exit = space.
          p_vari = def_variante-variant. " Recebe variante escolhida
        ENDIF.
      ENDIF.
    ENDFORM.                    " zf_busca_variante_existente
    *-&      Form  zf_valida_variante
    *-       text
    *-  -->  Verifica se a variante digitada é válida.
    FORM zf_valida_variante.
      IF NOT p_vari IS INITIAL.
        variante             =     def_variante.    "nome do report
        def_variante-variant =     p_vari.          "nome que foi digitado
        CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'
             EXPORTING
                  i_save     = 'A'
             CHANGING
                  cs_variant = def_variante
                  variante   = def_variante.
      ELSE.
        clear variante.
        variante-report = v_repid.
      ENDIF.
    ENDFORM.                    " zf_valida_variante
    -&      Form  zf_seleciona_dados
    *-       text
    -->  Seleciona os dados da ekko e ekpo
    FORM zf_seleciona_dados.
      SELECT ebeln
           bukrs
           bsart
           loekz
           aedat
           ernam
           lifnr
           ekgrp
           waers
            FROM ekko
            INTO TABLE i_ekko
            WHERE
                 ( ebeln IN s_ebeln AND
                   bsart EQ 'NB' ).
    SORT I_EKKO ASCENDING.
      IF sy-subrc EQ 0.
        SELECT ebeln
               ebelp
               loekz
               txz01
               matnr
               bukrs
               werks
               menge
               netpr
                FROM ekpo
                INTO TABLE i_ekpo
                FOR ALL ENTRIES IN i_ekko
                WHERE
                     ( ebeln EQ i_ekko-ebeln ).
      ENDIF.
    SORT I_EKPO ASCENDING.
    Para exibir no topo do relatório no grid
    DESCRIBE TABLE I_EKKO LINES v_exibe.
    ENDFORM.                    " zf_seleciona_dados
    *-&      Form  zf_ALV
    *-       text
    -->  Opções de alv
    FORM zf_alv.
    IF rb1 = 'X'.
              PERFORM zf_gri.
    ENDIF.
    IF rb2 = 'X'.
              PERFORM ZF_HIERARQUICO.
    ENDIF.
    IF rb3  =  'X'.
              PERFORM ZF_LIST.
    ENDIF.
    ENDFORM.                    " zf_ALV
    *&      Form  zf_gri
    *-       text
    *-  -->  Seqüência para gerar o alv grid
    FORM zf_gri.
      PERFORM zf_layout.
      PERFORM zf_ordena_campos.
      PERFORM zf_monta_campos_alv.
      PERFORM zf_print.
      PERFORM zf_grupo.
      PERFORM zf_top  USING  s_top.
      IF  NOT  I_EKPO[] IS INITIAL.
        PERFORM zf_imprime_alv.
      ELSE.
        MESSAGE s000(zcl001)  WITH  'Nenhum registro encontrado.'.
        STOP.
      ENDIF.
    ENDFORM.                    " zf_gri
    *-&      Form  zf_layout
    *-       text
    -->  cria o layout do alv
    FORM zf_layout.
      s_layout-box_tabname          = 'I_EKPO'.
      s_layout-box_fieldname        = 'BOX'.
      s_layout-get_selinfos         =  'X'.
      s_layout-detail_popup         =  'X'.
      s_layout-detail_initial_lines =  'X'.
      s_layout-zebra                =  'X'.
      s_layout-colwidth_optimize    =  'X'.
    ENDFORM.                    " zf_layout
    *-&      Form  zf_ordena_campos
    *-       text
    -->  Ordenação dos campos
    FORM zf_ordena_campos.
      CLEAR t_sort.
      t_sort-spos      =  '1'.          "prioridade de ordenação
      t_sort-fieldname =  'EBELN'.      "campo da tab int. de saida
      t_sort-tabname   =  'I_EKPO'.     "tab inter de saida
      t_sort-up        =  'X'.          "ordenação do maior para o menor
      APPEND t_sort.
    ENDFORM.                    " zf_ordena_campos
    *-&      Form  zf_monta_campos_alv
          text
    -->  è passado os campos de acordo com a ordem de exibição inicial
    FORM zf_monta_campos_alv.
    IF rb2  =  'X'.
      CLEAR t_FIELDCAT.
      t_FIELDCAT-FIELDNAME      =  'BOX'.
      t_FIELDCAT-TABNAME        =  'I_EKKO'.
      t_FIELDCAT-CHECKBOX       =  'X'.
      t_FIELDCAT-INPUT          =  'X'.
      APPEND t_FIELDCAT.
      CLEAR t_fieldcat.
      t_fieldcat-fieldname      =  'EBELN'.
      t_fieldcat-tabname        =  'I_EKKO'.
      t_fieldcat-ref_fieldname  =  'EBELN'.
      t_fieldcat-ref_tabname    =  'EKKO'.
      APPEND t_fieldcat.
      CLEAR t_fieldcat.
      t_fieldcat-fieldname      =  'BUKRS'.
      t_fieldcat-tabname        =  'I_EKKO'.
      t_fieldcat-ref_fieldname  =  'BUKRS'.
      t_fieldcat-ref_tabname    =  'EKKO'.
      APPEND t_fieldcat.
      CLEAR t_fieldcat.
      t_fieldcat-fieldname      =  'BSART'.
      t_fieldcat-tabname        =  'I_EKKO'.
      t_fieldcat-ref_fieldname  =  'BSART'.
      t_fieldcat-ref_tabname    =  'EKKO'.
      APPEND t_fieldcat.
      CLEAR t_fieldcat.
      t_fieldcat-fieldname      =  'AEDAT'.
      t_fieldcat-tabname        =  'I_EKKO'.
      t_fieldcat-ref_fieldname  =  'AEDAT'.
      t_fieldcat-ref_tabname    =  'EKKO'.
      APPEND t_fieldcat.
      CLEAR t_fieldcat.
      t_fieldcat-fieldname      =  'ERNAM'.
      t_fieldcat-tabname        =  'I_EKKO'.
      t_fieldcat-ref_fieldname  =  'ERNAM'.
      t_fieldcat-ref_tabname    =  'EKKO'.
      APPEND t_fieldcat.
      CLEAR t_fieldcat.
      t_fieldcat-fieldname      =  'LIFNR'.
      t_fieldcat-tabname        =  'I_EKKO'.
      t_fieldcat-ref_fieldname  =  'LIFNR'.
      t_fieldcat-ref_tabname    =  'EKKO'.
      APPEND t_fieldcat.
      CLEAR t_fieldcat.
      t_fieldcat-fieldname      =  'EKGRP'.
      t_fieldcat-tabname        =  'I_EKKO'.
      t_fieldcat-ref_fieldname  =  'EKGRP'.
      t_fieldcat-ref_tabname    =  'EKKO'.
      APPEND t_fieldcat.
    ENDIF.
      CLEAR t_fieldcat.
      t_fieldcat-fieldname      =  'EBELN'.
      t_fieldcat-tabname        =  'I_EKPO'.
      t_fieldcat-ref_fieldname  =  'EBELN'.
      t_fieldcat-ref_tabname    =  'EKPO'.
      t_fieldcat-key            =  'X'.
      t_fieldcat-Hotspot        =  'X'.
      APPEND t_fieldcat.
      CLEAR t_fieldcat.
      T_fieldcat-fieldname     = 'EBELP'.
      T_fieldcat-tabname       = 'I_EKPO'.
      T_fieldcat-ref_fieldname = 'EBELP'.
      T_fieldcat-ref_tabname   = 'EKPO'.
      APPEND t_fieldcat.
      CLEAR t_fieldcat.
      t_fieldcat-fieldname      =  'MATNR'.
      t_fieldcat-tabname        =  'I_EKPO'.
      t_fieldcat-ref_fieldname  =  'MATNR'.
      t_fieldcat-ref_tabname    =  'EKPO'.
      APPEND t_fieldcat.
      CLEAR t_fieldcat.
      t_fieldcat-fieldname      =  'WERKS'.
      t_fieldcat-tabname        =  'I_EKPO'.
      t_fieldcat-ref_fieldname  =  'WERKS'.
      t_fieldcat-ref_tabname    =  'EKPO'.
      APPEND t_fieldcat.
      CLEAR t_fieldcat.
      t_fieldcat-fieldname      =  'MENGE'.
      t_fieldcat-tabname        =  'I_EKPO'.
      t_fieldcat-ref_fieldname  =  'MENGE'.
      t_fieldcat-ref_tabname    =  'EKPO'.
      APPEND t_fieldcat.
      CLEAR t_fieldcat.
      t_fieldcat-fieldname      =  'NETPR'.
      t_fieldcat-tabname        =  'I_EKPO'.
      t_fieldcat-ref_fieldname  =  'NETPR'.
      t_fieldcat-ref_tabname    =  'EKPO'.
      t_fieldcat-do_sum         =  'X'. "totalizar campo
      APPEND t_fieldcat.
      CLEAR t_fieldcat.
      t_fieldcat-fieldname      =  'TXZ01'.
      t_fieldcat-tabname        =  'I_EKPO'.
      t_fieldcat-ref_fieldname  =  'TXZ01'.
      t_fieldcat-ref_tabname    =  'EKPO'.
      APPEND t_fieldcat.
    ENDFORM.                    " zf_monta_campos_alv
    *-&      Form  zf_top
    *-       text
    *-  --> Cria o texto de cabeçalho do ALV, passando por parametro o
    --> p_S_TOP para s_top
    FORM zf_top USING p_s_top  TYPE slis_t_listheader.
      DATA: ls_line  TYPE  slis_listheader.
      CLEAR  ls_line.
      ls_line-typ  =  'H'.
      ls_line-info  =  'Relatório de Compras por Classificação Contábil'.
      APPEND ls_line  TO  p_s_top.
      CLEAR  ls_line.
      ls_line-typ  =  'S'.
      ls_line-KEY  =  'Parametros Seleção '.
      ls_line-info  = '- Documento de compra'.
      APPEND ls_line  TO  p_s_top.
      CLEAR  ls_line.
      ls_line-typ  =  'S'.
      ls_line-info  = '- Empresa'.
      APPEND ls_line  TO  p_s_top.
      CLEAR  ls_line.
      ls_line-typ  =  'S'.
      ls_line-info  = '- Tip.doc.compra'.
      APPEND ls_line  TO  p_s_top.
      CLEAR  ls_line.
      ls_line-typ  =  'S'.
      ls_line-KEY  =  'Total Pedido'.
      ls_line-info  = v_exibe.
      APPEND ls_line  TO  p_s_top.
    início Formatar a data
      CALL FUNCTION 'DATUMSAUFBEREITUNG'
       EXPORTING
         IDATE                 = SY-DATUM
       IMPORTING
         TDAT8                 = v_datasaida.
    Fim Formatar a data
      CLEAR  ls_line.
      ls_line-typ  =  'S'.
      ls_line-KEY  =  'Data da execução'.
      ls_line-info  = v_datasaida.
      APPEND ls_line  TO  p_s_top.
      CLEAR  ls_line.
      ls_line-typ  =  'S'.
      ls_line-KEY  =  'Usuário'.
      APPEND ls_line  TO  p_s_top.
      CLEAR  ls_line.
      ls_line-typ  =  'A'.
      ls_line-info  = sy-uname.
      APPEND ls_line  TO  p_s_top.
    ENDFORM.                    " zf_top
    *-&      Form  zf_print
    *-       text
    *-  -->  Parametros de Impressão para o ALV
    FORM zf_print.
      s_print-no_print_selinfos     =  'N'.
      s_print-no_print_listinfos    =  'N'.
    ENDFORM.                    " zf_print
    *-&      Form  zf_imprime_alv
    *-       text
    *-  -->  Imprime o ALV c/ seu parametros
    FORM zf_imprime_alv.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
       EXPORTING
         I_CALLBACK_PF_STATUS_SET          = 'ZSET_PF_STATUS'
         I_CALLBACK_USER_COMMAND           = 'ZF_USER_COMMAND'
         i_callback_program                = v_repid
         i_callback_top_of_page            = 'TOP_OF_PAGE'
         is_layout                         =  s_layout
         it_fieldcat                       =  t_fieldcat[]
        IT_EXCLUDING                      =
         IT_SPECIAL_GROUPS                 = S_GRUPOS[]
         it_sort                           = t_sort[]
        IT_FILTER                         =
        IS_SEL_HIDE                       =
         i_default                         = 'X'
         i_save                            = 'A'
         is_variant                        = variante
        IT_EVENTS                         =
        IT_EVENT_EXIT                     =
         IS_PRINT                          = S_PRINT
        IS_REPREP_ID                      =
         I_SCREEN_START_COLUMN             = 0
         I_SCREEN_START_LINE               = 0
         I_SCREEN_END_COLUMN               = 0
         I_SCREEN_END_LINE                 = 0
        IT_ALV_GRAPHICS                   =
        IT_ADD_FIELDCAT                   =
        IT_HYPERLINK                      =
        I_HTML_HEIGHT_TOP                 =
        I_HTML_HEIGHT_END                 =
      IMPORTING
        E_EXIT_CAUSED_BY_CALLER           =
        ES_EXIT_CAUSED_BY_USER            =
        TABLES
          t_outtab                          = I_EKPO
       EXCEPTIONS
         program_error                     = 1
         OTHERS                            = 2.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
        WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.
    ENDFORM.                    " zf_imprime_alv
    *-&      Form  zf_top-of-page
    *-       text
    -->  Cabeçalho ALV
    FORM top_of_page.
      CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
           EXPORTING
                it_list_commentary       = s_top
                i_logo                   = 'CARLOS_LOGO3'.
      I_END_OF_LIST_GRID       = .
    ENDFORM.                    " zf_top-of-page
    *-&      Form  ZF_HIERARQUICO
    *-       text
    *-  -->  RELATÓRIO HIERÁQUICO
    form ZF_HIERARQUICO.
      PERFORM zf_layout.
      PERFORM zf_ordena_campos.
      PERFORM zf_monta_campos_alv.
      PERFORM zf_print.
      PERFORM zf_grupo.
      IF  NOT  I_EKPO[] IS INITIAL.
        PERFORM zf_imprime_hierarquico_alv.
      ELSE.
        MESSAGE s000(zcl001)  WITH  'Nenhum registro encontrado.'.
        STOP.
      ENDIF.
    endform.                    " ZF_HIERARQUICO
    *-&      Form  zf_grupo
         text
    -->  Não é fundamental a criação de grupos de campos, mas facilita
    ao usuário na hora de escolher os campos de exibição após o clique do
    botão MODIFICAR LAYOUT . Vários campos da fieldcat podem ser
    definidos para um mesmo grupo de campo.
    form zf_grupo.
    MOVE:'Moeda' TO S_GRUPOS-SP_GROUP,
         'Campos moeda' TO S_GRUPOS-TEXT.
         APPEND S_GRUPOS.
    endform.                    " zf_grupo
    *&      Form  zf_imprime_hierarquico_alv
          text
    -->  p1        text
    <--  p2        text
    form zf_imprime_hierarquico_alv.
    Vamos definir as ligações entre as tabelas para as quebras no momento
    da impressão.
      s_keyinfo-header01  =  'EBELN'.
      s_keyinfo-item01    =  'EBELN'.
      CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
        EXPORTING
          I_CALLBACK_USER_COMMAND           = 'ZF_USER_COMMAND'
         I_CALLBACK_PF_STATUS_SET          = 'ZF_SET_PF_STATUS_HIERARQ'
          I_CALLBACK_PROGRAM                = v_repid
          IS_LAYOUT                         = S_LAYOUT
          IT_FIELDCAT                       = T_FIELDCAT[]
          IT_SPECIAL_GROUPS                 = S_GRUPOS[]
         IT_SORT                        =
         IT_FILTER                      =
    -    Parâmetro p/executar sempre com a variante default
          I_DEFAULT                         = 'X'
    -                     Se é possível salvar as variantes
          I_SAVE                            = 'A'
    -                          Nome da variante selecionada
          IS_VARIANT                        = VARIANTE
         IT_EVENTS                      =
         IT_EVENT_EXIT                  =
          i_tabname_header                  = 'I_EKKO'
          i_tabname_item                    = 'I_EKPO'
         I_STRUCTURE_NAME_HEADER        =
         I_STRUCTURE_NAME_ITEM          =
          is_keyinfo                        = S_KEYINFO
          IS_PRINT                          = S_PRINT
         IS_REPREP_ID                   =
         I_BUFFER_ACTIVE                =
         I_BYPASSING_BUFFER             =
      IMPORTING
         E_EXIT_CAUSED_BY_CALLER        =
         ES_EXIT_CAUSED_BY_USER         =
        tables
          t_outtab_header                   = I_EKKO
          t_outtab_item                     = I_EKPO.
    endform.                    " zf_imprime_hierarquico_alv
    *&      Form  ZF_LIST
          text
    -->  p1        text
    <--  p2        text
    form ZF_LIST.
      PERFORM zf_layout.
      PERFORM zf_ordena_campos.
      PERFORM zf_monta_campos_alv.
      PERFORM zf_print.
      PERFORM zf_grupo.
      IF  NOT  I_EKPO[] IS INITIAL.
          PERFORM zf_imprime_list_alv.
      ELSE.
        MESSAGE s000(zcl001)  WITH  'Nenhum registro encontrado.'.
        STOP.
      ENDIF.
    endform.                    " ZF_LIST
    *&      Form  zf_imprime_list_alv
          text
    -->  p1        text
    <--  p2        text
    form zf_imprime_list_alv.
      CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
       EXPORTING
          I_CALLBACK_PF_STATUS_SET       = 'ZF_SET_PF_STATUS_LIST'
          I_CALLBACK_USER_COMMAND        = 'ZF_USER_COMMAND'
        I_INTERFACE_CHECK              = ' '
        I_BYPASSING_BUFFER             =
        I_BUFFER_ACTIVE                = ' '
         I_CALLBACK_PROGRAM             = v_repid
         I_STRUCTURE_NAME               = 'I_EKPO'
         IS_LAYOUT                      = S_LAYOUT
         IT_FIELDCAT                    = T_FIELDCAT[]
        IT_EXCLUDING                   =
         IT_SPECIAL_GROUPS              = S_GRUPOS[]
         IT_SORT                        = T_SORT[]
        IT_FILTER                      =
        IS_SEL_HIDE                    =
         I_DEFAULT                      = 'X'
         I_SAVE                         = 'A'
         IS_VARIANT                     = VARIANTE
        IT_EVENTS                      =
        IT_EVENT_EXIT                  =
         IS_PRINT                       = S_PRINT
        IS_REPREP_ID                   =
         I_SCREEN_START_COLUMN          = 0
         I_SCREEN_START_LINE            = 0
         I_SCREEN_END_COLUMN            = 0
         I_SCREEN_END_LINE              = 0
      IMPORTING
        E_EXIT_CAUSED_BY_CALLER        =
        ES_EXIT_CAUSED_BY_USER         =
        TABLES
          t_outtab                       = I_EKPO.
    endform.                    " zf_imprime_list_alv
    *&      Form  zf_user_command
          text
    -->  p1        text
    <--  p2        text
    form zf_user_command using p_v_ucomm like SY-UCOMM
                               p_s_selfield type slis_selfield.
    *---tratamento de impressão do Sapscript----
    CASE p_v_ucomm.
      FLAG = 0.
         WHEN 'IMPRIMIR' OR 'PRINT'.
             LOOP AT i_ekpo.
                  IF NOT i_ekpo-BOX IS INITIAL.
                    FLAG = FLAG + 1.
                  ENDIF.
            ENDLOOP.
    se tiver selecionado apenas uma box
            IF flag EQ 1.
                IF p_gerar EQ 'X'.
    *-----perform para confirmação de download
                  PERFORM zf_popup_to_confirm.
                ENDIF.
    *------chama o form para imprimir o sapscript
                  PERFORM zf_sapscript.
            ENDIF.
    box estiver vazia
            IF flag EQ 0.
               MESSAGE E017(ZCL_GRUPO04). "Selecione apenas uma BOX
                                          "referente ao pedido de compras.
               STOP.
            ENDIF.
    "estiver selecionado + de uma box
            IF flag GT 1.
               MESSAGE E017(ZCL_GRUPO04). "Selecione apenas uma
                                         "BOX referente ao pedido de compra.
               STOP.
            ENDIF.
    ENDCASE.
    CASE p_s_selfield-sel_tab_field.
    *observe na exibição do relatório(hierarquico) que temos o EKKO-EBELN
    ficaria  melhor visualmente, a utilização de clicar no mesmo
         WHEN 'I_EKPO-EBELN'. "tab de saida
               SET PARAMETER ID 'BES' FIELD p_s_selfield-VALUE.
               CALL TRANSACTION 'ME23' AND SKIP FIRST SCREEN.
    ENDCASE.
    endform.                    " zf_user_command
    *&      Form  ZSET_PF_STATUS
          text
         -->P_EXTAB  text
    form ZSET_PF_STATUS using    p_extab.
      set pf-status 'BOTOES' EXCLUDING extab.
    endform.                    " ZSET_PF_STATUS
    *&      Form  zf_sapscript
          text
    -->  p1        text
    <--  p2        text
    form zf_sapscript.
    --carregar a ITCPO----
      PERFORM zf_itcpo.
    ----chamar a função Open_form
      PERFORM zf_open_form.
    *----buscar o fornecedor e seus dados
    LOOP AT I_ekko.
            v_element  =  'CABPRIN'.
            v_type     =  'BODY'.
            v_window   =  'JANCABEC'.
            PERFORM  zf_imprime_form USING  v_element
                                            v_type
                                            v_window.
    ENDLOOP.
    *----buscar o documento de compra selecionado
    LOOP AT i_ekpo.
        IF i_ekpo-BOX = 'X'.
            v_element  =  'MAIN'.
            v_type     =  'BODY'.
            v_window   =  'MAIN'.
            PERFORM  zf_imprime_form USING  v_element
                                            v_type
                                            v_window.
    *---o comando EXIT é para que somente quando 1 registro for selecionado
    no relatório e a verificação da igualdade acontecer faz que saia do
    Loop
        EXIT.
        ENDIF.
    ENDLOOP.
      PERFORM zf_close_form.
    endform.                    " zf_sapscript
    *&      Form  zf_itcpo
          text
    -->  p1        text
    <--  p2        text
    form zf_itcpo.
    *Parâmetros para impressão da tabela ITCPO
    ITCPO-TDCOPIES   = 1.           "Quantidade de cópias
    ITCPO-TDPAGESLCT = ''.          "Seleção de páginas
    ITCPO-TDPROGRAM  = SY-REPID.    "Captura o nome do programa
    ITCPO-TDIMMED    = c_on.        "Saída imediata do relatório
    ITCPO-TDPREVIEW  = c_on.        "Exibição prévia do relatório
    ITCPO-TDDEST     = 'LOCL'.      "SPOOL: dispositivo de saída
    ITCPO-TDFAXUSER  = SY-UNAME.    "Usuário logado naquele momento
    ITCPO-TDSENDDATE = SY-DATUM.    "Data de envio desejada
    ITCPO-TDSENDTIME = SY-UZEIT.    "Hora envio desejada
    ITCPO-TDNEWID    = c_on.        "Nova ordem SPOOL
    ITCPO-TDARMOD    = c_on.       "IMPRIMIR: modo de arquivamento
    ITCPO-TDTITLE    = 'Relatório de Compras por Classificação Contábil'.
    endform.                    " zf_itcpo
    *&      Form  zf_open_form

    Boa Tarde Carlos,
    Welcome to the SDN Forums. SDN gets it's power from the large community throughout the world. To harvest that power of knowledge we have settled on one language for posts here which is English.
    Clearly English is not your first language, but don't be afraid, I would vouch that for most of the participant here on SDN English is the second language.
    As it is for me. I am just lucky, that I am living in the States long enough that German colleagues start to look at me strangely when I talk to them in German, because it doesn't totally sound right anymore
    So we are very forgiving her in SDNland regarding grammar and spelling (although not as much anymore in the Weblogs), we even provide a spell checker.
    Please post your question again in English.
    If people don't understand you they will ask you about the things that they don't understand and you can then clarify.
    Try it out. Your chance of an excellent responds is way higher.
    Boa sorte, Mark.

  • Create a Procedural ALV Report with editable fields and save the changes

    Hi,
    I am new to ABAP. I have created a Procedural ALV Report with 3 fields. I want to make 2 fields editable. When executed, if the fields are modified, I want to save the changes. All this I want to do without using OO concepts. Please help . Also, I checked out the forum and also the examples
    BCALV_TEST_GRID_EDIT_01
    BCALV_TEST_GRID_EDIT_02
    BCALV_TEST_GRID_EDIT_04_FORMS
    BCALV_TEST_GRID_EDITABLE
    BCALV_EDIT_01
    BCALV_EDIT_02
    BCALV_EDIT_03
    BCALV_EDIT_04
    BCALV_EDIT_05
    BCALV_EDIT_06
    BCALV_EDIT_07
    BCALV_EDIT_08
    BCALV_FULLSCREEN_GRID_EDIT
    But all these are using OO Concepts.
    Please help.
    Regards,
    Smruthi

    TABLES:     ekko.
    TYPE-POOLS: slis.                                 "ALV Declarations
    *Data Declaration
    TYPES: BEGIN OF t_ekko,
      ebeln TYPE ekpo-ebeln,
      ebelp TYPE ekpo-ebelp,
      statu TYPE ekpo-statu,
      aedat TYPE ekpo-aedat,
      matnr TYPE ekpo-matnr,
      menge TYPE ekpo-menge,
      meins TYPE ekpo-meins,
      netpr TYPE ekpo-netpr,
      peinh TYPE ekpo-peinh,
      line_color(4) TYPE c,     "Used to store row color attributes
    END OF t_ekko.
    DATA: it_ekko TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0,
          wa_ekko TYPE t_ekko.
    *ALV data declarations
    DATA: fieldcatalog TYPE slis_t_fieldcat_alv WITH HEADER LINE,
          gd_tab_group TYPE slis_t_sp_group_alv,
          gd_layout    TYPE slis_layout_alv,
          gd_repid     LIKE sy-repid.
    START-OF-SELECTION.
      PERFORM data_retrieval.
      PERFORM build_fieldcatalog.
      PERFORM build_layout.
      PERFORM display_alv_report.
    *&      Form  BUILD_FIELDCATALOG
          Build Fieldcatalog for ALV Report
    FORM build_fieldcatalog.
      fieldcatalog-fieldname   = 'EBELN'.
      fieldcatalog-seltext_m   = 'Purchase Order'.
      fieldcatalog-col_pos     = 0.
      fieldcatalog-outputlen   = 10.
      fieldcatalog-emphasize   = 'X'.
      fieldcatalog-key         = 'X'.
    fieldcatalog-do_sum      = 'X'.
    fieldcatalog-no_zero     = 'X'.
      APPEND fieldcatalog TO fieldcatalog.
      CLEAR  fieldcatalog.
      fieldcatalog-fieldname   = 'EBELP'.
      fieldcatalog-seltext_m   = 'PO Item'.
      fieldcatalog-col_pos     = 1.
      APPEND fieldcatalog TO fieldcatalog.
      CLEAR  fieldcatalog.
      fieldcatalog-fieldname   = 'STATU'.
      fieldcatalog-seltext_m   = 'Status'.
      fieldcatalog-col_pos     = 2.
      APPEND fieldcatalog TO fieldcatalog.
      CLEAR  fieldcatalog.
      fieldcatalog-fieldname   = 'AEDAT'.
      fieldcatalog-seltext_m   = 'Item change date'.
      fieldcatalog-col_pos     = 3.
      APPEND fieldcatalog TO fieldcatalog.
      CLEAR  fieldcatalog.
      fieldcatalog-fieldname   = 'MATNR'.
      fieldcatalog-seltext_m   = 'Material Number'.
      fieldcatalog-col_pos     = 4.
      APPEND fieldcatalog TO fieldcatalog.
      CLEAR  fieldcatalog.
      fieldcatalog-fieldname   = 'MENGE'.
      fieldcatalog-seltext_m   = 'PO quantity'.
    fieldcatalog-edit             = 'X'
      fieldcatalog-col_pos     = 5.
      APPEND fieldcatalog TO fieldcatalog.
      CLEAR  fieldcatalog.
      fieldcatalog-fieldname   = 'MEINS'.
      fieldcatalog-seltext_m   = 'Order Unit'.
      fieldcatalog-col_pos     = 6.
      APPEND fieldcatalog TO fieldcatalog.
      CLEAR  fieldcatalog.
      fieldcatalog-fieldname   = 'NETPR'.
      fieldcatalog-seltext_m   = 'Net Price'.
      fieldcatalog-col_pos     = 7.
      fieldcatalog-outputlen   = 15.
      fieldcatalog-datatype     = 'CURR'.
      APPEND fieldcatalog TO fieldcatalog.
      CLEAR  fieldcatalog.
      fieldcatalog-fieldname   = 'PEINH'.
      fieldcatalog-seltext_m   = 'Price Unit'.
      fieldcatalog-col_pos     = 8.
      APPEND fieldcatalog TO fieldcatalog.
      CLEAR  fieldcatalog.
    ENDFORM.                    " BUILD_FIELDCATALOG
    *&      Form  BUILD_LAYOUT
          Build layout for ALV grid report
    FORM build_layout.
      gd_layout-no_input          = 'X'.
      gd_layout-colwidth_optimize = 'X'.
      gd_layout-totals_text       = 'Totals'(201).
      gd_layout-info_fieldname =      'LINE_COLOR'.
    ENDFORM.                    " BUILD_LAYOUT
    *&      Form  DISPLAY_ALV_REPORT
          Display report using ALV grid
    FORM display_alv_report.
      gd_repid = sy-repid.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
           EXPORTING
                i_callback_program      = gd_repid
                i_callback_pf_status_set = 'STATUS'
                i_callback_top_of_page   = 'TOP-OF-PAGE'
               i_callback_user_command = 'USER_COMMAND'
               i_grid_title           = outtext
                is_layout               = gd_layout
                it_fieldcat             = fieldcatalog[]
               it_special_groups       = gd_tabgroup
               IT_EVENTS                = GT_XEVENTS
                i_save                  = 'X'
               is_variant              = z_template
           TABLES
                t_outtab                = it_ekko
           EXCEPTIONS
                program_error           = 1
                OTHERS                  = 2.
    ENDFORM.                    " DISPLAY_ALV_REPORT
    *&      Form  DATA_RETRIEVAL
          Retrieve data form EKPO table and populate itab it_ekko
    FORM data_retrieval.
      DATA: ld_color(1) TYPE c.
      SELECT ebeln ebelp statu aedat matnr menge meins netpr peinh
       UP TO 10 ROWS
        FROM ekpo
        INTO TABLE it_ekko.
      LOOP AT it_ekko INTO wa_ekko.
        ld_color = ld_color + 1.
        IF ld_color = 8.
          ld_color = 1.
        ENDIF.
        CONCATENATE 'C' ld_color '10' INTO wa_ekko-line_color.
        MODIFY it_ekko FROM wa_ekko.
      ENDLOOP.
    ENDFORM.                    " DATA_RETRIEVAL
          FORM top-of-page                                              *
    FORM top-of-page.
      WRITE:/ 'This is First Line of the Page'.
    ENDFORM.
          FORM status                                                   *
    FORM status USING rt_extab TYPE slis_t_extab.  .
      SET PF-STATUS 'ALV'.
    ENDFORM.
          FORM USER_COMMAND                                          *
    -->  RF_UCOMM                                                      *
    -->  RS                                                            *
    FORM user_command USING rf_ucomm LIKE sy-ucomm
                             rs TYPE slis_selfield.            
      DATA ref1 TYPE REF TO cl_gui_alv_grid.
      CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
        IMPORTING
          e_grid = ref1.
      CALL METHOD ref1->check_changed_data.
      CASE rf_ucomm.
    when 'SAVE'.
    get all the modified entries and store them in an internal table and udpate them in to the required transaction or your custom table.
    endcase.
    endform.
    ENDFORM.
    here u need to 2 performs for PF status and USER_COMMAND in the ALV parameters.
    create a custom PF status and create push buttons and assign your ok codes in your PF status.
    if the field has to be edited in the ALV then pass EDIT = 'X' for that field in the fieldcatlog preparation.
    Hope this will help you.
    Regards,
    phani.

Maybe you are looking for

  • Warning message on the portal

    Hi, We are able to get error message on the cProjects portal using the method MESSAGE_ADD of class CL_RPM_MESSAGE_SERVICES by passing type E. But when i try to pass type W or I for warning or information message it does not show up on the portal. How

  • Adding a frame on a JDialog

    Hi, I trying to add a frame with a 3D image on a dialog, but it's not working. The following code shows what I want to do. Does anybody know why is it happening? button = new JButton(" 3D ");           button.setToolTipText("3D model");           but

  • Help! Windows XP not seeing macs on wireless network

    Hi folks, I have just bought airport extreme, and have installed all the latest updates on my powerbook, and macpro. I'm trying to add a pc laptop running windows xp 2002 service pack 2 to my local network. The pc connects to my network, and IS acces

  • Getting "object already exists" message when trying to install new software.

    Quite coincidentally, I came across a solution for the "object already exists" message that had recently been interferring with the downloading of new software.  This solution was offered by another on a different website, but it has solved my proble

  • Links of the bottom of the "Advanced Search" page are on top of the select boxes

    In that position the bar of links "Google Main Page Ad programs Business Solutions Privacy and... Everything About Google" covers the select box at that position (either "domain or website" or "language" or "region" etc.). If I push the lower margin