<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Help for a tree report in Application Development and Automation Discussions</title>
    <link>https://community.sap.com/t5/application-development-and-automation-discussions/help-for-a-tree-report/m-p/2671551#M616865</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Frederic,&lt;/P&gt;&lt;P&gt;Could you please give me the example? using ALV grid also its ok. Appreciate your response.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;D C&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 17 Aug 2007 13:30:21 GMT</pubDate>
    <dc:creator>Former Member</dc:creator>
    <dc:date>2007-08-17T13:30:21Z</dc:date>
    <item>
      <title>Help for a tree report</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/help-for-a-tree-report/m-p/2671549#M616863</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi, I need some help for a tree structure report, appreciate you help in this regard.&lt;/P&gt;&lt;P&gt;My requirement is as follows-&lt;/P&gt;&lt;P&gt;For example-&lt;/P&gt;&lt;P&gt;In the selection screen I have entered the VBELN(Sales order) as a range field, if enter some range of sales order my report should display the sales order in the display from lower range to higher range with + icon on every row, means&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;+ VBELN1	date1	date2	&amp;#133;&lt;/P&gt;&lt;P&gt;+VBELN2	date1	date2	&amp;#133;&lt;/P&gt;&lt;P&gt;+VBELN3	date1	date3	&amp;#133;&lt;/P&gt;&lt;P&gt;.&lt;/P&gt;&lt;P&gt;.&lt;/P&gt;&lt;P&gt;Etc&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Now here, if  I click on sales order +VBELN1(expand) it has to display all its available line items from VBAP table under this VBELN1 and if I click on a expand button(down arrow icon provided by me on top left corner) it has to expand all its +VBELN&amp;#146;s at time and collapse too if I collapse.&lt;/P&gt;&lt;P&gt;After expanding I should get the o/p as follows-&lt;/P&gt;&lt;P&gt;- VBELN1	date1	date2	&amp;#133;&lt;/P&gt;&lt;P&gt;	10	xyz	date1&lt;/P&gt;&lt;P&gt;	20	XY1	date1&lt;/P&gt;&lt;P&gt;	30	ert	date1&lt;/P&gt;&lt;P&gt;-VBELN2	date1	date2	&amp;#133;&lt;/P&gt;&lt;P&gt;	10	line1	date1&lt;/P&gt;&lt;P&gt;	20	line2	date1&lt;/P&gt;&lt;P&gt;-VBELN3	date1	date3	&amp;#133;&lt;/P&gt;&lt;P&gt;	10	&lt;/P&gt;&lt;P&gt;	20&lt;/P&gt;&lt;P&gt;.&lt;/P&gt;&lt;P&gt;.&lt;/P&gt;&lt;P&gt;Etc&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If I collapse again back to as follows-&lt;/P&gt;&lt;P&gt;+ VBELN1	date1	date2	&amp;#133;&lt;/P&gt;&lt;P&gt;+VBELN2	date1	date2	&amp;#133;&lt;/P&gt;&lt;P&gt;+VBELN3	date1	date3	&amp;#133;&lt;/P&gt;&lt;P&gt;.&lt;/P&gt;&lt;P&gt;.&lt;/P&gt;&lt;P&gt;Etc&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;You can refer the same functionality available with KSB5 t-code provided by SAP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Based on above functionality I have to develop a report for my FI module, Please suggest me with some sample code and how to ubtain this functionality.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Your's suggestions are appreciated.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;D C.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 17 Aug 2007 12:27:24 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/help-for-a-tree-report/m-p/2671549#M616863</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2007-08-17T12:27:24Z</dc:date>
    </item>
    <item>
      <title>Re: Help for a tree report</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/help-for-a-tree-report/m-p/2671550#M616864</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Go in transaction DWDM for examples of ALV Tree.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If it's too hard, I could give you an example (but more complex, with link to ALV grid)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Fred&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 17 Aug 2007 12:34:27 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/help-for-a-tree-report/m-p/2671550#M616864</guid>
      <dc:creator>FredericGirod</dc:creator>
      <dc:date>2007-08-17T12:34:27Z</dc:date>
    </item>
    <item>
      <title>Re: Help for a tree report</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/help-for-a-tree-report/m-p/2671551#M616865</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Frederic,&lt;/P&gt;&lt;P&gt;Could you please give me the example? using ALV grid also its ok. Appreciate your response.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;D C&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 17 Aug 2007 13:30:21 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/help-for-a-tree-report/m-p/2671551#M616865</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2007-08-17T13:30:21Z</dc:date>
    </item>
    <item>
      <title>Re: Help for a tree report</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/help-for-a-tree-report/m-p/2671552#M616866</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Here is one of my last ALV Tree&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;for this exemple, you will need to create a structure in the data dictionnary.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;*---------------------------------------------------------------------*
*---------------------------------------------------------------------*
*   Overview :                                                        *
*                                                                     *
*---------------------------------------------------------------------*
*---------------------------------------------------------------------*
REPORT  z.




*------------------------------ TABLES -------------------------------*
TABLES : rkwa ,
         lfa1 ,
         makt ,
         t001w ,
         mseg ,
         likp ,
         lips ,
         vbrk ,
         vbrp ,
         afpo .




*------------------------------- CLASS --------------------------------*
CLASS lcl_toolbar_event_receiver DEFINITION.
  PUBLIC SECTION.
    METHODS: on_function_selected
               FOR EVENT function_selected OF cl_gui_toolbar
                 IMPORTING fcode.
ENDCLASS.                    "lcl_toolbar_event_receiver DEFINITION





*------------------------------- TYPES -------------------------------*
TYPES : BEGIN OF ts_key1 ,
          matnr2 TYPE matnr ,
          maktx2 TYPE maktx ,
          charg2 TYPE charg_d ,
        END   OF ts_key1 ,

        BEGIN OF ts_key2 ,
          matnr2 TYPE matnr ,
          maktx2 TYPE maktx ,
          charg2 TYPE charg_d ,
          aufnr  TYPE aufnr ,
        END   OF ts_key2 .





*------------------------------- DATA --------------------------------*
DATA : gw_ok_code        TYPE        syucomm ,
       obj_tree          TYPE REF TO cl_gui_alv_tree ,
       obj_container     TYPE REF TO cl_gui_custom_container ,
       obj_container2    TYPE REF TO cl_gui_custom_container ,
       obj_toolbar       TYPE REF TO cl_gui_toolbar ,
       obj_toolbar_event TYPE REF TO lcl_toolbar_event_receiver ,
       obj_grid          TYPE REF TO cl_gui_alv_grid ,


       itg_data1      LIKE TABLE OF zsd_suivi_air1_002
                           WITH HEADER LINE ,
       itg_data2      LIKE TABLE OF zsd_suivi_air1_002
                           WITH HEADER LINE ,
       itg_data3      LIKE TABLE OF zsd_suivi_air1_002
                           WITH HEADER LINE ,
       itg_key1       TYPE TABLE OF ts_key1
                           WITH HEADER LINE ,
       itg_key2       TYPE TABLE OF ts_key2
                           WITH HEADER LINE ,
       itg_tree       LIKE TABLE OF zsd_suivi_air1_002 ,
       itg_grid       LIKE TABLE OF zsd_suivi_air1_002
                           WITH HEADER LINE ,
       itg_fcat       TYPE lvc_t_fcat .




*------------------------- SELECTION SCREEN --------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-t01.
PARAMETERS p_werks TYPE werks_d
                   OBLIGATORY
                   MEMORY ID wrk.
SELECT-OPTIONS : s_charg1 FOR mseg-charg
                   OBLIGATORY
                   NO INTERVALS ,
                 s_charg2 FOR afpo-charg
                   NO INTERVALS .
SELECTION-SCREEN SKIP 1.
SELECT-OPTIONS : s_mblnr FOR rkwa-mblnr ,
                 s_matnr FOR rkwa-matnr ,
                 s_bldat FOR rkwa-bldat .
SELECTION-SCREEN SKIP 1.
PARAMETERS p_all AS CHECKBOX.
SELECTION-SCREEN END   OF BLOCK b1.




*------------------------------ EVENTS -------------------------------*





*------------------------------- MAIN --------------------------------*
START-OF-SELECTION.


* Appels écran 100.
  CALL SCREEN 100.


END-OF-SELECTION.





*----------------------------------------------------------------------*
*   Module PBO Screen 100.                                             *
*----------------------------------------------------------------------*
MODULE pbo_100 OUTPUT.


  DATA : is_variant TYPE disvariant ,
         is_layout  TYPE lvc_s_layo ,
         is_hiera   TYPE treev_hhdr ,
         is_log     TYPE bal_s_log .


* Check Grid object not already exist.
  CHECK obj_tree IS INITIAL.


* Set menu-painter.
  SET PF-STATUS '100'.

* Set title-bar.
  SET TITLEBAR '100'.


* Get data.
  PERFORM p_get_data.


* Create the fieldcatalog.
  PERFORM p_build_fcat.


* Create the container.
  CREATE OBJECT obj_container
         EXPORTING container_name = 'OBJ_CUSTOM'.


* Create the grid object.
  CREATE OBJECT obj_tree
     EXPORTING
       parent                      = obj_container
       node_selection_mode         = cl_gui_column_tree=&amp;gt;node_sel_mode_multiple
       item_selection              = 'x'
     EXCEPTIONS
       OTHERS                      = 8.
  CHECK sy-subrc EQ space.



* Set the display variant.
  MOVE : sy-repid TO is_variant-report ,
         sy-uname TO is_variant-username ,
         '1'      TO is_variant-handle.


* Update the layout.
  MOVE 'A' TO is_layout-sel_mode.


* Alimente la colonne hiérarchie.
  MOVE : text-z05     TO is_hiera-heading ,
         '100'        TO is_hiera-width.

* Load ALV Tree.
  CALL METHOD obj_tree-&amp;gt;set_table_for_first_display
    EXPORTING
      is_variant          = is_variant
      i_save              = 'X'
      is_hierarchy_header = is_hiera
    CHANGING
      it_outtab           = itg_tree
      it_fieldcatalog     = itg_fcat.


* Créé la hiérarchie.
  PERFORM p_create_hiera.

* Modifie la bar de boutton.
  PERFORM p_mod_toolbar.


ENDMODULE.                                                  " PBO_100





*----------------------------------------------------------------------*
*   Module PAI Screen 100                                              *
*----------------------------------------------------------------------*
MODULE pai_100 INPUT.


* Dispatch the return code.
  CASE gw_ok_code.
*   Escape
    WHEN 'EXIT' OR
         'CANC' OR
         'BACK'.
      CALL METHOD obj_tree-&amp;gt;free.
      FREE obj_tree.
      LEAVE TO SCREEN 0.

    WHEN OTHERS.
      CALL METHOD cl_gui_cfw=&amp;gt;dispatch.
  ENDCASE.


* Clear code.
  CLEAR gw_ok_code.


ENDMODULE.                                                  " PAI_100




*----------------------------------------------------------------------*
*   Form P_BUILD_FCAT.                                                 *
*----------------------------------------------------------------------*
*   Create the field catalog of the ALV Grid.                          *
*----------------------------------------------------------------------*
FORM p_build_fcat.


  DATA : is_fcat TYPE lvc_s_fcat.


* Build field catalog.
  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
      i_structure_name   = 'ZSD_SUIVI_AIR1_002'
      i_bypassing_buffer = 'X'
    CHANGING
      ct_fieldcat        = itg_fcat
    EXCEPTIONS
      OTHERS             = 3.


* Indique les colonnes de type ICON.
  LOOP AT itg_fcat
       INTO is_fcat.
    IF is_fcat-fieldname EQ 'STATU1'.
      MOVE 'X' TO is_fcat-icon.
      MODIFY itg_fcat FROM is_fcat.
    ENDIF.
  ENDLOOP.

ENDFORM.                     " P_BUILD_FCAT.





*---------------------------------------------------------------------*
*   Form P_GET_DATA.                                                  *
*---------------------------------------------------------------------*
*---------------------------------------------------------------------*
FORM p_get_data.


  DATA : BEGIN OF it_rkwa OCCURS 0 ,
           bukrs  TYPE bukrs ,
           mblnr  TYPE mblnr ,
           mjahr  TYPE mjahr ,
           zeile  TYPE mblpo ,
           status TYPE mr_rkwast ,
           bldat  TYPE bldat ,
           lifnr  TYPE lifnr ,
           werks  TYPE werks_d ,
           matnr  TYPE matnr ,
           wrbtr  TYPE wrbtr ,
           bwaer  TYPE waers ,
           bstmg  TYPE mr_bstmg ,
           bstme  TYPE mr_bstme ,
           belnr  TYPE belnr_d ,
           gjahr  TYPE gjahr ,
           buzei  TYPE buzei ,
         END   OF it_rkwa ,

         BEGIN OF it_mseg OCCURS 0 ,
           mblnr TYPE mblnr ,
           mjahr TYPE mjahr ,
           zeile TYPE mblpo ,
           bwart TYPE bwart ,
           matnr TYPE matnr ,
           charg TYPE charg_d ,
           aufnr TYPE aufnr ,
         END   OF it_mseg ,

         BEGIN OF it_mseg2 OCCURS 0 ,
           bwart TYPE bwart ,
           matnr TYPE matnr ,
           charg TYPE charg_d ,
           menge TYPE menge_d ,
           meins TYPE meins ,
         END   OF it_mseg2 ,

         BEGIN OF it_afpo OCCURS 0 ,
           aufnr TYPE aufnr ,
           posnr TYPE co_posnr ,
           wemng TYPE co_wemng ,
           amein TYPE co_aufme ,
           matnr TYPE matnr ,
           charg TYPE charg_d ,
           ltrmi TYPE co_ltrmi ,
           dwerk TYPE werks_d ,
         END   OF it_afpo ,

         BEGIN OF it_lips OCCURS 0 ,
           vbeln TYPE vbeln_vl ,
           posnr TYPE posnr_vl ,
           matnr TYPE matnr ,
           charg TYPE charg_d ,
           werks TYPE werks_d ,
           vgbel TYPE vgbel ,
           vgpos TYPE vgpos ,
           ntgew TYPE ntgew ,
           gewei TYPE meins ,
         END   OF it_lips ,

         BEGIN OF it_likp OCCURS 0 ,
           vbeln TYPE vbeln_vl ,
           lfdat TYPE lfdat_v ,
           kunwe TYPE kunnr ,
         END   OF it_likp ,

         BEGIN OF it_vbrp OCCURS 0 ,
           vbeln TYPE vbeln_vf ,
           posnr TYPE posnr_vf ,
           matnr TYPE matnr ,
           charg TYPE charg_d ,
           werks TYPE werks_d ,
           vgbel TYPE vgbel ,
           vgpos TYPE vgpos ,
           aubel TYPE vbeln_va ,
           aupos TYPE posnr_va ,
           ntgew TYPE ntgew ,
           gewei TYPE meins ,
         END   OF it_vbrp ,

         BEGIN OF it_vbrk OCCURS 0 ,
           vbeln TYPE vbeln_vf ,
           fkdat TYPE fkdat ,
           kunrg TYPE kunnr ,
         END   OF it_vbrk ,

         BEGIN OF it_makt OCCURS 0 ,
           matnr TYPE matnr ,
           maktx TYPE maktx ,
         END   OF it_makt ,

         BEGIN OF it_t001w OCCURS 0 ,
           werks TYPE werks_d ,
           name1 TYPE name1 ,
         END   OF it_t001w ,

         BEGIN OF it_kna1 OCCURS 0 ,
           kunnr TYPE kunnr ,
           name1 TYPE name1_gp ,
           ort01 TYPE ort01_gp ,
           pstlz TYPE pstlz ,
         END   OF it_kna1 ,

         it_komv         TYPE TABLE OF komv WITH HEADER LINE ,
         w_actvt         TYPE activ_auth .

  RANGES : r_status FOR rkwa-status ,
           r_charg  FOR afpo-charg .




* Authorization check.
  MOVE '03' TO w_actvt.
  AUTHORITY-CHECK OBJECT 'M_BEST_WRK'
             ID 'ACTVT' FIELD w_actvt
             ID 'WERKS' FIELD p_werks.
  IF sy-subrc NE space.
    MESSAGE i398(00) WITH text-e01.
    LEAVE TO SCREEN 0.
  ENDIF.



* Gère la case à cocher sur le statut.
  IF p_all EQ ' '.
    MOVE : '00' TO r_status-low ,
           'I'  TO r_status-sign ,
           'EQ' TO r_status-option.
    APPEND r_status.
  ENDIF.


* Récupère les données ds RKWA - Stock consignation.
  SELECT bukrs mblnr mjahr zeile status bldat lifnr werks matnr
         wrbtr bwaer bstmg bstme belnr gjahr buzei
         INTO TABLE it_rkwa
         FROM rkwa
         WHERE mblnr  IN s_mblnr
         AND   werks  EQ p_werks
         AND   matnr  IN s_matnr
         AND   bldat  IN s_bldat
         AND   status IN r_status.
  CHECK sy-subrc EQ space.


* Avec le mvmt de stock récupère l'OP et l'article consommé.
  SELECT mblnr mjahr zeile bwart matnr charg aufnr
         INTO TABLE it_mseg
         FROM mseg
         FOR ALL ENTRIES IN it_rkwa
         WHERE mblnr EQ it_rkwa-mblnr
         AND   mjahr EQ it_rkwa-mjahr
         AND   zeile EQ it_rkwa-zeile.
  CHECK sy-subrc EQ space.
  SORT it_mseg BY mblnr mjahr zeile.


* Nettoie en fonction du lot consommé.
  IF NOT s_charg1[] IS INITIAL.
    DELETE it_mseg
           WHERE NOT charg IN s_charg1.
  ENDIF.


* Recupère dans l'OP les articles &amp;amp; lot produit.
  IF NOT it_mseg[] IS INITIAL.
    SELECT aufnr posnr wemng amein matnr charg ltrmi dwerk
           INTO TABLE it_afpo
           FROM afpo
           FOR ALL ENTRIES IN it_mseg
           WHERE aufnr EQ it_mseg-aufnr
           AND   charg IN s_charg2.
    SORT it_afpo BY aufnr posnr.
  ENDIF.


* Récupère les mouvements de stocks parasites.
  IF NOT it_afpo[] IS INITIAL.
    LOOP AT it_afpo.
      MOVE : 'I'           TO r_charg-sign ,
             'EQ'          TO r_charg-option ,
             it_afpo-charg TO r_charg-low .
      APPEND r_charg.
    ENDLOOP.
    SORT r_charg.
    DELETE ADJACENT DUPLICATES FROM r_charg COMPARING sign option low.
    SELECT bwart matnr charg menge meins
           INTO TABLE it_mseg2
           FROM mseg
           WHERE bwart IN ('701', '702', '501', '502')
           AND   werks EQ p_werks
           AND   charg IN r_charg.
*   Chargement de la table ITG_DATA3, correction de stock.
    IF sy-subrc EQ space.
      LOOP AT it_mseg2.
        MOVE : it_mseg2-matnr TO itg_data3-matnr2 ,
               it_mseg2-charg TO itg_data3-charg2 ,
               it_mseg2-meins TO itg_data3-bstme .
        IF it_mseg2-bwart EQ '502' OR it_mseg2-bwart EQ '702'.
          itg_data3-bstmg = - it_mseg2-menge.
        ELSE.
          itg_data3-bstmg = it_mseg2-menge.
        ENDIF.
        COLLECT itg_data3.
      ENDLOOP.
    ENDIF.
  ENDIF.


* Recupère les livraisons.
  IF NOT it_afpo[] IS INITIAL.
    SELECT vbeln posnr matnr charg werks vgbel vgpos ntgew gewei
           INTO TABLE it_lips
           FROM lips
           FOR ALL ENTRIES IN it_afpo
           WHERE charg EQ it_afpo-charg.
*   Recherche du client livré.
    IF NOT it_lips[] IS INITIAL.
      SELECT vbeln lfdat kunnr
             INTO TABLE it_likp
             FROM likp
             FOR ALL ENTRIES IN it_lips
             WHERE vbeln EQ it_lips-vbeln.
      SORT it_likp BY vbeln.
    ENDIF.
  ENDIF.


* Récupère les factures.
  IF NOT it_afpo[] IS INITIAL.
    SELECT vbeln posnr matnr charg werks vgbel vgpos aubel aupos
           ntgew gewei
           INTO TABLE it_vbrp
           FROM vbrp
           FOR ALL ENTRIES IN it_afpo
           WHERE charg EQ it_afpo-charg
           AND   werks EQ it_afpo-dwerk.
    SORT it_vbrp BY vgbel vgpos.
*   Recherche du client payeur.
    IF NOT it_vbrp[] IS INITIAL.
      SELECT vbeln fkdat kunrg
             INTO TABLE it_vbrk
             FROM vbrk
             FOR ALL ENTRIES IN it_vbrp
             WHERE vbeln EQ it_vbrp-vbeln.
      SORT it_vbrk BY vbeln.
    ENDIF.
  ENDIF.


* Récupère les informations sur les clients.
  IF NOT it_likp[] IS INITIAL.
    SELECT kunnr name1 ort01 pstlz
           INTO TABLE it_kna1
           FROM kna1
           FOR ALL ENTRIES IN it_likp
           WHERE kunnr EQ it_likp-kunwe.
  ENDIF.
  IF NOT it_vbrk[] IS INITIAL.
    SELECT kunnr name1 ort01 pstlz
           APPENDING TABLE it_kna1
           FROM kna1
           FOR ALL ENTRIES IN it_vbrk
           WHERE kunnr EQ it_vbrk-kunrg.
  ENDIF.
  SORT it_kna1 BY kunnr.
  DELETE ADJACENT DUPLICATES FROM it_kna1 COMPARING kunnr.


* Récupère la désignation de l'article.
  IF NOT it_rkwa[] IS INITIAL.
    SELECT matnr maktx
           INTO TABLE it_makt
           FROM makt
           FOR ALL ENTRIES IN it_rkwa
           WHERE matnr EQ it_rkwa-matnr
           AND   spras EQ sy-langu.
  ENDIF.
  IF NOT it_afpo[] IS INITIAL.
    SELECT matnr maktx
           APPENDING TABLE it_makt
           FROM makt
           FOR ALL ENTRIES IN it_afpo
           WHERE matnr EQ it_afpo-matnr
           AND   spras EQ sy-langu.
  ENDIF.
  SORT it_makt BY matnr.
  DELETE ADJACENT DUPLICATES FROM it_makt COMPARING matnr.


* Récupère les noms des sites.
  SELECT werks name1
         INTO TABLE it_t001w
         FROM t001w.


* Alimentation de la table globale.
  LOOP AT it_rkwa.
*   Depuis la table RKWA.
    MOVE : it_rkwa-bukrs  TO itg_data1-bukrs ,
           it_rkwa-mblnr  TO itg_data1-mblnr ,
           it_rkwa-mjahr  TO itg_data1-mjahr ,
           it_rkwa-zeile  TO itg_data1-zeile ,
           it_rkwa-bldat  TO itg_data1-bldat ,
           it_rkwa-matnr  TO itg_data1-matnr1 ,
           it_rkwa-bstmg  TO itg_data1-bstmg ,
           it_rkwa-bstme  TO itg_data1-bstme ,
           it_rkwa-belnr  TO itg_data1-belnr ,
           it_rkwa-gjahr  TO itg_data1-gjahr ,
           it_rkwa-buzei  TO itg_data1-buzei ,
           it_rkwa-werks  TO itg_data1-werk1 .
*   Statut de la MRKO.
    IF     it_rkwa-status EQ '00'.
      MOVE '@BZ@' TO itg_data1-statu1.
    ELSEIF it_rkwa-status EQ '01'.
      MOVE '@5B@' TO itg_data1-statu1.
    ENDIF.
*   Lecture des mvmts correspondant à RKWA.
    READ TABLE it_mseg
         WITH KEY mblnr = it_rkwa-mblnr
                  mjahr = it_rkwa-mjahr
                  zeile = it_rkwa-zeile
         BINARY SEARCH.
    IF sy-subrc EQ space.
      MOVE : it_mseg-charg TO itg_data1-charg1 ,
             it_mseg-aufnr TO itg_data1-aufnr .
    ELSE.
      CLEAR : itg_data1-charg1 ,
              itg_data1-aufnr .
    ENDIF.
*   Récupère la désignation de l'article consommé.
    READ TABLE it_makt
         WITH KEY matnr = itg_data1-matnr1
         BINARY SEARCH.
    IF sy-subrc EQ space.
      MOVE it_makt-maktx TO itg_data1-maktx1.
    ELSE.
      CLEAR itg_data1-maktx1.
    ENDIF.
*   Recherche de l'article produit.
    READ TABLE it_afpo
         WITH KEY aufnr = itg_data1-aufnr.
    IF sy-subrc EQ space.
      MOVE : it_afpo-matnr TO itg_data1-matnr2 ,
             it_afpo-charg TO itg_data1-charg2 .
*     Récupère la désignation de l'article produit.
      READ TABLE it_makt
           WITH KEY matnr = it_afpo-matnr
           BINARY SEARCH.
      IF sy-subrc EQ space.
        MOVE it_makt-maktx TO itg_data1-maktx2.
      ELSE.
        CLEAR itg_data1-maktx2.
      ENDIF.
    ELSE.
      CLEAR : itg_data1-matnr2 ,
              itg_data1-charg2 .
    ENDIF.
*   Enregistre les modifications.
    APPEND itg_data1.
*   Sauvegarde les tables de clefs.
    MOVE-CORRESPONDING : itg_data1 TO itg_key1 ,
                         itg_data1 TO itg_key2 .
    APPEND : itg_key1, itg_key2.
    CLEAR  : itg_key1, itg_key2.

  ENDLOOP.


* Supprime les lignes de table clefs vide.
  DELETE : itg_key1 WHERE charg2 EQ space ,
           itg_key2 WHERE aufnr  EQ space.
* Supprime les doublons.
  SORT : itg_key1 BY charg2 matnr2 ,
         itg_key2 BY matnr2 aufnr .
  DELETE ADJACENT DUPLICATES FROM : itg_key1 COMPARING charg2 matnr2 ,
                                    itg_key2 COMPARING matnr2 aufnr .



* Chargement de la table des livraisons.
  LOOP AT itg_key1.
*   Recherche des livraisons.
    LOOP AT it_lips
         WHERE charg = itg_key1-charg2.
      MOVE : itg_key1-charg2 TO itg_data2-charg2 ,
             itg_key1-matnr2 TO itg_data2-matnr2 ,
             itg_key1-maktx2 TO itg_data2-maktx2 ,
             it_lips-vbeln   TO itg_data2-vbeln_vl ,
             it_lips-posnr   TO itg_data2-posnr_vl ,
             it_lips-matnr   TO itg_data2-matnr3 ,
             it_lips-werks   TO itg_data2-werks  ,
             it_lips-vgbel   TO itg_data2-vbeln_va ,
             it_lips-vgpos   TO itg_data2-posnr_va ,
             it_lips-ntgew   TO itg_data2-ntgew ,
             it_lips-gewei   TO itg_data2-meins .

*     Recherche la désignation de la division.
      READ TABLE it_t001w
           WITH KEY werks = itg_data2-werks
           BINARY SEARCH.
      IF sy-subrc EQ space.
        MOVE it_t001w-name1 TO itg_data2-werks_name1.
      ELSE.
        CLEAR itg_data2-werks_name1.
      ENDIF.
*     Recherche des infos du client livré.
      READ TABLE it_likp
           WITH KEY vbeln = it_lips-vbeln
           BINARY SEARCH.
      IF sy-subrc EQ space.
        MOVE : it_likp-lfdat TO itg_data2-lfdat.
        READ TABLE it_kna1
             WITH KEY kunnr = it_likp-kunwe
             BINARY SEARCH.
        IF sy-subrc EQ space.
          MOVE : it_kna1-kunnr TO itg_data2-kunwe ,
                 it_kna1-name1 TO itg_data2-kunwe_name1 ,
                 it_kna1-pstlz TO itg_data2-kunwe_pstlz ,
                 it_kna1-ort01 TO itg_data2-kunwe_ort01 .
        ENDIF.
      ELSE.
        CLEAR : itg_data2-kunwe, itg_data2-kunwe_name1,
                itg_data2-kunwe_pstlz, itg_data2-kunwe_ort01,
                itg_data2-lfdat.
      ENDIF.
*     Recherche si le poste a été facturé.
      READ TABLE it_vbrp
           WITH KEY vgbel = itg_data2-vbeln_vl
                    vgpos = itg_data2-posnr_vl
           BINARY SEARCH.
      IF sy-subrc EQ space.
        MOVE : it_vbrp-vbeln TO itg_data2-vbeln_vf ,
               it_vbrp-posnr TO itg_data2-posnr_vf ,
               it_vbrp-ntgew TO itg_data2-ntgew2 .
*       Recherche des infos du client facturé.
        READ TABLE it_vbrk
             WITH KEY vbeln = it_vbrp-vbeln
             BINARY SEARCH.
        IF sy-subrc EQ space.
          MOVE : it_vbrk-fkdat TO itg_data2-fkdat.
          READ TABLE it_kna1
               WITH KEY kunnr = it_vbrk-kunrg
               BINARY SEARCH.
          IF sy-subrc EQ space.
            MOVE : it_kna1-kunnr TO itg_data2-kunag ,
                   it_kna1-name1 TO itg_data2-kunag_name1 ,
                   it_kna1-pstlz TO itg_data2-kunag_pstlz ,
                   it_kna1-ort01 TO itg_data2-kunag_ort01 .
          ENDIF.
        ELSE.
          CLEAR : itg_data2-kunag, itg_data2-kunag_name1,
                  itg_data2-kunag_pstlz, itg_data2-kunag_ort01,
                  itg_data2-fkdat.
        ENDIF.
*       Recherche de la marge.
        CALL FUNCTION 'ZSD_COND_GET_MARGE_FROM_VBRK2'
          EXPORTING
            vbeln   = itg_data2-vbeln_vf
            posnr   = itg_data2-posnr_vf
          IMPORTING
            it_komv = it_komv[]
          EXCEPTIONS
            OTHERS  = 3.
        IF sy-subrc EQ space.
          LOOP AT it_komv.
            CASE it_komv-kschl.
              WHEN 'ZR00'.
                MOVE : it_komv-kwert TO itg_data2-marge_zr00 ,
                       it_komv-waers TO itg_data2-waers .
              WHEN 'ZF01'.
                MOVE it_komv-kwert TO itg_data2-marge_zf01.
              WHEN 'VPRS'.
                MOVE it_komv-kwert TO itg_data2-marge_vprs.
              WHEN 'MWST'.
                MOVE it_komv-kwert TO itg_data2-marge_mwst.
              WHEN 'ZYA1'.
                MOVE it_komv-kwert TO itg_data2-marge_zya1.
              WHEN 'ZYA2'.
                MOVE it_komv-kwert TO itg_data2-marge_zya2.
              WHEN 'ZYA3'.
                MOVE it_komv-kwert TO itg_data2-marge_zya3.
              WHEN 'ZM00'.
                MOVE it_komv-kwert TO itg_data2-marge_zm00.
            ENDCASE.
          ENDLOOP.
        ELSE.
          CLEAR : itg_data2-marge_zr00, itg_data2-marge_zf01,
                  itg_data2-marge_vprs, itg_data2-marge_mwst,
                  itg_data2-marge_zya1, itg_data2-marge_zya2,
                  itg_data2-marge_zya3, itg_data2-marge_zm00.
        ENDIF.
*       For the memory management.
        CALL FUNCTION 'RV_PRICE_PRINT_REFRESH'
          TABLES
            tkomv = it_komv.
      ENDIF.
*     Sauvegarde des valeurs.
      APPEND itg_data2.
      CLEAR  : itg_data2-vbeln_vl ,  itg_data2-posnr_vl ,
               itg_data2-matnr3 ,    itg_data2-werks ,
               itg_data2-vbeln_va ,  itg_data2-posnr_va ,
               itg_data2-ntgew ,     itg_data2-meins ,
               itg_data2-vbeln_vf ,  itg_data2-posnr_vf ,
               itg_data2-ntgew2 ,    itg_data2-marge_zr00,
               itg_data2-marge_zf01, itg_data2-marge_vprs,
               itg_data2-marge_mwst, itg_data2-marge_zya1,
               itg_data2-marge_zya2, itg_data2-marge_zya3,
               itg_data2-marge_zm00.
    ENDLOOP.
  ENDLOOP.



ENDFORM.                     " P_GET_DATA.




*----------------------------------------------------------------------*
*   Form P_CREATE_HIERA.                                               *
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
FORM p_create_hiera.


  DATA : w_niv_deb   TYPE lvc_nkey ,
         w_niv_lotp  TYPE lvc_nkey ,
         w_niv_op    TYPE lvc_nkey ,
         w_niv_corr  TYPE lvc_nkey ,
         w_niv_lotc  TYPE lvc_nkey ,
         w_niv_liv   TYPE lvc_nkey .



* Boucle.
  LOOP AT itg_key1.
*   Ajout du niveau lot produit.
    PERFORM p_add_lotp USING    itg_key1
                                w_niv_deb
                       CHANGING w_niv_lotp.
*   Recherche des OPs.
    LOOP AT itg_key2
         WHERE matnr2 = itg_key1-matnr2
         AND   charg2 = itg_key1-charg2.
*     Ajout du niveau OP.
      PERFORM p_add_op USING    itg_key2
                                w_niv_lotp
                       CHANGING w_niv_op.
*     Recherche des lots consommés
      LOOP AT itg_data1
           WHERE matnr2 = itg_key2-matnr2
           AND   charg2 = itg_key2-charg2
           AND   aufnr  = itg_key2-aufnr.
        PERFORM p_add_lotc USING    itg_data1
                                    w_niv_op
                           CHANGING w_niv_lotc.
      ENDLOOP.      " ITG_DATA --&amp;gt; Lot conso
    ENDLOOP.                                                " ITG_KEY2
*   Recherche les corrections de stocks.
    LOOP AT itg_data3
         WHERE matnr2 = itg_key1-matnr2
         AND   charg2 = itg_key1-charg2.
      PERFORM p_add_corr USING    itg_data3
                                  w_niv_lotp
                         CHANGING w_niv_corr.
    ENDLOOP.
*   Recherche des livraisons.
    LOOP AT itg_data2
         WHERE charg2 = itg_key1-charg2.
      PERFORM p_add_liv  USING    itg_data2
                                  w_niv_lotp
                         CHANGING w_niv_liv.
    ENDLOOP.
  ENDLOOP.                                                  " ITG_KEY1.


* Rafraichi l'écran après la création de la hiérarchie.
  CALL METHOD obj_tree-&amp;gt;frontend_update.


* Vide de la mémoire.
  FREE : itg_data1, itg_data2.


ENDFORM.                     " P_CREATE_HIERA.





*----------------------------------------------------------------------*
*   Form P_ADD_LOTC.                                                   *
*----------------------------------------------------------------------*
*   Ajoute un niveau lot consommé dans l'arborescence.                 *
*----------------------------------------------------------------------*
FORM p_add_lotc USING     is_key   TYPE zsd_suivi_air1_002
                          w_pere   TYPE lvc_nkey
                CHANGING  w_niveau TYPE lvc_nkey.


  DATA: w_text    TYPE lvc_value,
        is_line   LIKE zsd_suivi_air1_002 ,
        is_layout TYPE lvc_s_layi ,
        it_layout TYPE lvc_t_layi WITH HEADER LINE ,
        is_node   TYPE lvc_s_layn .


* Structure d'affichage de la ligne.
  is_layout-fieldname   = obj_tree-&amp;gt;c_hierarchy_column_name.
  is_layout-style       = '3'.
  is_layout-font        = '1'.
  APPEND is_layout TO it_layout.


* Texte de la branche de l'arbre.
  WRITE text-z01 TO w_text.
  CONCATENATE w_text
              is_key-charg1
              INTO w_text
              SEPARATED BY ' -&amp;gt; '.
  MOVE : '@QC@'  TO is_node-n_image ,
         '@QC@'  TO is_node-exp_image .
  MOVE-CORRESPONDING is_key TO is_line.


* Rajoute la ligne dans l'arbre.
  CALL METHOD obj_tree-&amp;gt;add_node
    EXPORTING
      i_relat_node_key = w_pere
      i_relationship   = cl_gui_column_tree=&amp;gt;relat_last_child
      i_node_text      = w_text
      is_outtab_line   = is_line
      it_item_layout   = it_layout[]
      is_node_layout   = is_node
    IMPORTING
      e_new_node_key   = w_niveau.



ENDFORM.                     " P_ADD_LOTC.





*----------------------------------------------------------------------*
*   Form P_ADD_OP.                                                     *
*----------------------------------------------------------------------*
*   Ajoute un niveau OP dans l'arborescence.                           *
*----------------------------------------------------------------------*
FORM p_add_op USING     is_key   TYPE ts_key2
                        w_pere   TYPE lvc_nkey
              CHANGING  w_niveau TYPE lvc_nkey.


  DATA: w_text    TYPE lvc_value,
        is_line   LIKE zsd_suivi_air1_002 ,
        is_layout TYPE lvc_s_layi ,
        it_layout TYPE lvc_t_layi WITH HEADER LINE ,
        is_node   TYPE lvc_s_layn .


* Structure d'affichage de la ligne.
  is_layout-fieldname   = obj_tree-&amp;gt;c_hierarchy_column_name.
  is_layout-style       = '3'.
  is_layout-font        = '1'.
  APPEND is_layout TO it_layout.


* Texte de la branche de l'arbre.
  WRITE text-z02 TO w_text.
  CONCATENATE w_text
              is_key-aufnr
              INTO w_text
              SEPARATED BY ' '.
  MOVE : '@9Z@'  TO is_node-n_image ,
         '@9Z@'  TO is_node-exp_image .
  MOVE-CORRESPONDING is_key TO is_line.


* Rajoute la ligne dans l'arbre.
  CALL METHOD obj_tree-&amp;gt;add_node
    EXPORTING
      i_relat_node_key = w_pere
      i_relationship   = cl_gui_column_tree=&amp;gt;relat_last_child
      i_node_text      = w_text
      is_outtab_line   = is_line
      it_item_layout   = it_layout[]
      is_node_layout   = is_node
    IMPORTING
      e_new_node_key   = w_niveau.



ENDFORM.                     " P_ADD_OP.





*----------------------------------------------------------------------*
*   Form P_ADD_LOTP.                                                   *
*----------------------------------------------------------------------*
*   Ajoute un niveau lot produit dans l'arborescence.                  *
*----------------------------------------------------------------------*
FORM p_add_lotp USING     is_key   TYPE ts_key1
                          w_pere   TYPE lvc_nkey
                CHANGING  w_niveau TYPE lvc_nkey.


  DATA: w_text    TYPE lvc_value,
        is_line   LIKE zsd_suivi_air1_002 ,
        is_layout TYPE lvc_s_layi ,
        it_layout TYPE lvc_t_layi WITH HEADER LINE ,
        is_node   TYPE lvc_s_layn .


* Structure d'affichage de la ligne.
  is_layout-fieldname   = obj_tree-&amp;gt;c_hierarchy_column_name.
  is_layout-style       = '3'.
  is_layout-font        = '1'.
  APPEND is_layout TO it_layout.


* Texte de la branche de l'arbre.
  WRITE text-z03 TO w_text.
  CONCATENATE w_text
              '-&amp;gt;'
              is_key-charg2
              '/'
              is_key-maktx2
              INTO w_text
              SEPARATED BY ' '.
  MOVE : '@EJ@'  TO is_node-n_image ,
         '@EJ@'  TO is_node-exp_image .
  MOVE-CORRESPONDING is_key TO is_line.


* Rajoute la ligne dans l'arbre.
  CALL METHOD obj_tree-&amp;gt;add_node
    EXPORTING
      i_relat_node_key = w_pere
      i_relationship   = cl_gui_column_tree=&amp;gt;relat_last_child
      i_node_text      = w_text
      is_outtab_line   = is_line
      it_item_layout   = it_layout[]
      is_node_layout   = is_node
    IMPORTING
      e_new_node_key   = w_niveau.



ENDFORM.                     " P_ADD_LOTP.





*----------------------------------------------------------------------*
*   Form P_ADD_CORR.                                                   *
*----------------------------------------------------------------------*
*   Ajoute un niveau correction de stock dans l'arborescence.          *
*----------------------------------------------------------------------*
FORM p_add_corr USING     is_key   TYPE zsd_suivi_air1_002
                          w_pere   TYPE lvc_nkey
                CHANGING  w_niveau TYPE lvc_nkey.


  DATA: w_text    TYPE lvc_value,
        is_line   LIKE zsd_suivi_air1_002 ,
        is_layout TYPE lvc_s_layi ,
        it_layout TYPE lvc_t_layi WITH HEADER LINE ,
        is_node   TYPE lvc_s_layn .


* Structure d'affichage de la ligne.
  is_layout-fieldname   = obj_tree-&amp;gt;c_hierarchy_column_name.
  is_layout-style       = '3'.
  is_layout-font        = '1'.
  APPEND is_layout TO it_layout.


* Texte de la branche de l'arbre.
  WRITE text-z07 TO w_text.
  MOVE : '@03@'  TO is_node-n_image ,
         '@03@'  TO is_node-exp_image .
  MOVE-CORRESPONDING is_key TO is_line.


* Rajoute la ligne dans l'arbre.
  CALL METHOD obj_tree-&amp;gt;add_node
    EXPORTING
      i_relat_node_key = w_pere
      i_relationship   = cl_gui_column_tree=&amp;gt;relat_last_child
      i_node_text      = w_text
      is_outtab_line   = is_line
      it_item_layout   = it_layout[]
      is_node_layout   = is_node
    IMPORTING
      e_new_node_key   = w_niveau.



ENDFORM.                     " P_ADD_CORR.





*----------------------------------------------------------------------*
*   Form P_ADD_LIV.                                                    *
*----------------------------------------------------------------------*
*   Ajoute un niveau liv produit dans l'arborescence.                  *
*----------------------------------------------------------------------*
FORM p_add_liv USING    is_data  LIKE zsd_suivi_air1_002
                        w_pere   TYPE lvc_nkey
               CHANGING w_niveau TYPE lvc_nkey.


  DATA: w_text    TYPE lvc_value,
        is_line   LIKE zsd_suivi_air1_002 ,
        is_layout TYPE lvc_s_layi ,
        it_layout TYPE lvc_t_layi WITH HEADER LINE ,
        is_node   TYPE lvc_s_layn .


* Structure d'affichage de la ligne.
  is_layout-fieldname   = obj_tree-&amp;gt;c_hierarchy_column_name.
  is_layout-style       = '3'.
  is_layout-font        = '1'.
  APPEND is_layout TO it_layout.


* Texte de la branche de l'arbre.
  WRITE text-z04 TO w_text.
  CONCATENATE w_text
              is_data-vbeln_vl
              is_data-posnr_vl
              INTO w_text
              SEPARATED BY ' -&amp;gt; '.
  MOVE : '@O4@'  TO is_node-n_image ,
         '@O4@'  TO is_node-exp_image .
  MOVE-CORRESPONDING is_data TO is_line.


* Rajoute la ligne dans l'arbre.
  CALL METHOD obj_tree-&amp;gt;add_node
    EXPORTING
      i_relat_node_key = w_pere
      i_relationship   = cl_gui_column_tree=&amp;gt;relat_last_child
      i_node_text      = w_text
      is_outtab_line   = is_line
      it_item_layout   = it_layout[]
      is_node_layout   = is_node
    IMPORTING
      e_new_node_key   = w_niveau.


ENDFORM.                     " P_ADD_LIV.





*----------------------------------------------------------------------*
*   Form P_MOD_TOOLBAR                                                 *
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
FORM p_mod_toolbar.



  CALL METHOD obj_tree-&amp;gt;get_toolbar_object
    IMPORTING
      er_toolbar = obj_toolbar.

* Test qu'il y a bien une barre d'outil.
  CHECK NOT obj_toolbar IS INITIAL.
*
* Ajoute un separateur à la barre d'outil.
  CALL METHOD obj_toolbar-&amp;gt;add_button
    EXPORTING
      fcode     = ''
      icon      = ''
      butn_type = cntb_btype_sep
      text      = ''
      quickinfo = 'Seperator'.

* Ajoute le bouton grille ALV.
  CALL METHOD obj_toolbar-&amp;gt;add_button
    EXPORTING
      fcode     = 'ALVG'
      icon      = '@3W@'
      butn_type = cntb_btype_button
      text      = ''
      quickinfo = 'Format grille'(i01).

* Ajoute un separateur à la barre d'outil.
  CALL METHOD obj_toolbar-&amp;gt;add_button
    EXPORTING
      fcode     = ''
      icon      = ''
      butn_type = cntb_btype_sep
      text      = ''
      quickinfo = 'Seperator'.

* Ajoute le bouton MRKO
  CALL METHOD obj_toolbar-&amp;gt;add_button
    EXPORTING
      fcode     = 'MRKO1'
      icon      = '@3C@'
      butn_type = cntb_btype_button
      text      = 'MRKO'
      quickinfo = 'MRKO'.

* Ajoute le bouton Affichage commande.
  CALL METHOD obj_toolbar-&amp;gt;add_button
    EXPORTING
      fcode     = 'VA03'
      icon      = ''
      butn_type = cntb_btype_button
      text      = '-&amp;gt; Cmd'
      quickinfo = 'Affichage commande'(i02).

* Ajoute le bouton Affichage livraison
  CALL METHOD obj_toolbar-&amp;gt;add_button
    EXPORTING
      fcode     = 'VL03N'
      icon      = ''
      butn_type = cntb_btype_button
      text      = '-&amp;gt; Liv'
      quickinfo = 'Affichage livraison'(i03).

* Ajoute le bouton grille ALV.
  CALL METHOD obj_toolbar-&amp;gt;add_button
    EXPORTING
      fcode     = 'VF03'
      icon      = ''
      butn_type = cntb_btype_button
      text      = '-&amp;gt; Fact'
      quickinfo = 'Affichage facture'(i04).

* Active la gestion des evenements sur la barre d'outil.
  CREATE OBJECT obj_toolbar_event.
  SET HANDLER obj_toolbar_event-&amp;gt;on_function_selected
              FOR obj_toolbar.



ENDFORM.                     " P_MOD_TOOLAR





*---------------------------------------------------------------------*
CLASS lcl_toolbar_event_receiver IMPLEMENTATION.


* Methode On_Function_Selected
  METHOD on_function_selected.

    DATA : it_sel_node TYPE lvc_t_nkey ,
           is_sel_node TYPE lvc_nkey   ,
           is_line     TYPE zsd_suivi_air1_002 .

*   Recherche le numéro du noeud.
    CALL METHOD obj_tree-&amp;gt;get_selected_nodes
      CHANGING
        ct_selected_nodes = it_sel_node.
    CALL METHOD cl_gui_cfw=&amp;gt;flush.
*   On se positionne sur la ligne lue.
    READ TABLE it_sel_node
         INTO  is_sel_node
         INDEX 1.
    CHECK     sy-subrc    EQ space   AND
          NOT is_sel_node IS INITIAL.
*   Récupère les informations.
    CALL METHOD obj_tree-&amp;gt;get_outtab_line
      EXPORTING
        i_node_key    = is_sel_node
      IMPORTING
        e_outtab_line = is_line.

*   En fonction du code fonction.
    CASE fcode.
*     Appels de la MRKO
      WHEN 'MRKO1'.
        PERFORM p_disp_mrko USING is_line.
*     Appels affichage Grille ALV.
      WHEN 'ALVG'.
        PERFORM p_disp_alvgrid TABLES it_sel_node.
*     Si affichage commande.
      WHEN 'VA03'.
        PERFORM p_disp_va03 USING is_line.
*     Si affichage facture.
      WHEN 'VF03'.
        PERFORM p_disp_vf03 USING is_line.
*     Si affichage livraison.
      WHEN 'VL03N'.
        PERFORM p_disp_vl03n USING is_line.
    ENDCASE.


  ENDMETHOD.                    "on_function_selected


ENDCLASS.                    "lcl_toolbar_event_receiver IMPLEMENTATION





*---------------------------------------------------------------------*
*   Form P_DISP_MRKO.                                                 *
*---------------------------------------------------------------------*
*---------------------------------------------------------------------*
FORM p_disp_mrko USING is_line STRUCTURE zsd_suivi_air1_002.


  DATA : it_btc   TYPE tab_bdcdata    WITH HEADER LINE ,
         it_error TYPE tab_bdcmsgcoll WITH HEADER LINE .


* Vérifie qu'au moins on ait les infos.
  CHECK is_line-bukrs NE space AND is_line-mblnr NE space.

* Alimente l'écran de sélection.
  MOVE : 'RMVKON00'     TO it_btc-program ,
         '1000'         TO it_btc-dynpro ,
         'X'            TO it_btc-dynbegin .
  APPEND it_btc. CLEAR it_btc.

  MOVE : 'BDC_OKCODE'   TO it_btc-fnam ,
         '=ONLI'        TO it_btc-fval .
  APPEND it_btc. CLEAR it_btc.

  MOVE : 'SO_BUKRS-LOW' TO it_btc-fnam ,
         is_line-bukrs  TO it_btc-fval .
  APPEND it_btc. CLEAR it_btc.

  MOVE : 'SO_MBLNR-LOW' TO it_btc-fnam ,
         is_line-mblnr  TO it_btc-fval .
  APPEND it_btc. CLEAR it_btc.

  MOVE : 'SO_WERKS-LOW' TO it_btc-fnam ,
         is_line-werk1  TO it_btc-fval .
  APPEND it_btc. CLEAR it_btc.

  MOVE : 'SO_MATNR-LOW' TO it_btc-fnam ,
         is_line-matnr1 TO it_btc-fval .
  APPEND it_btc. CLEAR it_btc.

* Vérifie si déjà imputés.
  IF is_line-belnr NE space.
    MOVE : 'PA_XINV' TO it_btc-fnam ,
           'X'       TO it_btc-fval .
    APPEND it_btc. CLEAR it_btc.
  ENDIF.

  CALL TRANSACTION 'MRKO'
                   USING it_btc
                   MODE 'E'.



ENDFORM.                     " P_DISP_MRKO





*---------------------------------------------------------------------*
*   Form P_DISP_VA03.                                                 *
*---------------------------------------------------------------------*
*---------------------------------------------------------------------*
FORM p_disp_va03 USING is_line STRUCTURE zsd_suivi_air1_002.


  CHECK is_line-vbeln_va NE space.

  SET PARAMETER ID 'AUN' FIELD is_line-vbeln_va.
  CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.


ENDFORM.                     " P_DISP_VA03





*---------------------------------------------------------------------*
*   Form P_DISP_VF03.                                                 *
*---------------------------------------------------------------------*
*---------------------------------------------------------------------*
FORM p_disp_vf03 USING is_line STRUCTURE zsd_suivi_air1_002.


  CHECK is_line-vbeln_vf NE space.

  SET PARAMETER ID 'VF' FIELD is_line-vbeln_vf.
  CALL TRANSACTION 'VF03' AND SKIP FIRST SCREEN.


ENDFORM.                     " P_DISP_VF03





*---------------------------------------------------------------------*
*   Form P_DISP_VL03N.                                                *
*---------------------------------------------------------------------*
*---------------------------------------------------------------------*
FORM p_disp_vl03n USING is_line STRUCTURE zsd_suivi_air1_002.


  CHECK is_line-vbeln_vl NE space.

  SET PARAMETER ID 'VL' FIELD is_line-vbeln_vl.
  CALL TRANSACTION 'VL03N' AND SKIP FIRST SCREEN.


ENDFORM.                     " P_DISP_VL03N





*---------------------------------------------------------------------*
*   Form P_DISP_ALVGRID.                                              *
*---------------------------------------------------------------------*
*---------------------------------------------------------------------*
FORM p_disp_alvgrid TABLES it_column TYPE lvc_t_nkey.


  DATA : is_col    TYPE lvc_nkey ,
         is_colw   TYPE lvc_nkey ,
         it_cols   TYPE lvc_t_nkey .


* Vide le contenue de la table.
  REFRESH itg_grid.


* Extrait les données correspondant à la sélection.
  LOOP AT it_column
       INTO is_col.
*   Get the subtree.
    CALL METHOD obj_tree-&amp;gt;get_subtree
      EXPORTING
        i_node_key       = is_col
      IMPORTING
        et_subtree_nodes = it_cols.
*   For each line get the value.
    LOOP AT it_cols
         INTO is_colw.
      CALL METHOD obj_tree-&amp;gt;get_outtab_line
        EXPORTING
          i_node_key    = is_colw
        IMPORTING
          e_outtab_line = itg_grid.
      APPEND itg_grid.
    ENDLOOP.
  ENDLOOP.

** Supprime les lignes trop hautes (sans livraison)
*  DELETE itg_grid
*         WHERE vbeln_vl NE space.

* Vérifie qu'il reste quelque chose.
  CHECK NOT itg_grid[] IS INITIAL.


* Appels écran 2.
  CALL SCREEN 200.



ENDFORM.                     " P_DISP_ALVGRID.






*----------------------------------------------------------------------*
*   Module PBO Screen 200.                                             *
*----------------------------------------------------------------------*
MODULE pbo_200 OUTPUT.


  DATA : is_variant2 TYPE disvariant ,
         is_layout2  TYPE lvc_s_layo .


* Check Grid object not already exist.
  CHECK obj_grid IS INITIAL.


* Set menu-painter.
  SET PF-STATUS '200'.

* Set title-bar.
  SET TITLEBAR '200'.

* Create the container.
  IF obj_container2 IS INITIAL.
    CREATE OBJECT obj_container2
           EXPORTING container_name = 'OBJ_CUSTOM2'.
  ENDIF.

* Create the grid object.
  CREATE OBJECT obj_grid
     EXPORTING
       i_parent    = obj_container2.
  CHECK sy-subrc EQ space.

* Set the display variant.
  MOVE : sy-repid TO is_variant2-report ,
         sy-uname TO is_variant2-username ,
         '2'      TO is_variant2-handle.

* Update the layout.
  MOVE 'A' TO is_layout2-sel_mode.

* Load ALV Grid.
  CALL METHOD obj_grid-&amp;gt;set_table_for_first_display
    EXPORTING
      is_layout       = is_layout2
      is_variant      = is_variant2
      i_save          = 'A'
    CHANGING
      it_outtab       = itg_grid[]
      it_fieldcatalog = itg_fcat.



ENDMODULE.                                                  " PBO_200





*----------------------------------------------------------------------*
*   Module PAI Screen 200                                              *
*----------------------------------------------------------------------*
MODULE pai_200 INPUT.


* Dispatch the return code.
  CASE gw_ok_code.
*   Escape
    WHEN 'EXIT' OR
         'CANC' OR
         'BACK'.
      CALL METHOD obj_grid-&amp;gt;free.
      FREE obj_grid.
      LEAVE TO SCREEN 0.

    WHEN OTHERS.
      CALL METHOD cl_gui_cfw=&amp;gt;dispatch.
  ENDCASE.


* Clear code.
  CLEAR gw_ok_code.


ENDMODULE.                                                  " PAI_200




*&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 17 Aug 2007 13:38:36 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/help-for-a-tree-report/m-p/2671552#M616866</guid>
      <dc:creator>FredericGirod</dc:creator>
      <dc:date>2007-08-17T13:38:36Z</dc:date>
    </item>
    <item>
      <title>Re: Help for a tree report</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/help-for-a-tree-report/m-p/2671553#M616867</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Check for program RSDEMO_SAP_LIST_TREE&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;aRs&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 17 Aug 2007 13:51:02 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/help-for-a-tree-report/m-p/2671553#M616867</guid>
      <dc:creator>former_member194669</dc:creator>
      <dc:date>2007-08-17T13:51:02Z</dc:date>
    </item>
  </channel>
</rss>

