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

Help for a tree report

Former Member
0 Likes
767

Hi, I need some help for a tree structure report, appreciate you help in this regard.

My requirement is as follows-

For example-

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

+ VBELN1 date1 date2 …

+VBELN2 date1 date2 …

+VBELN3 date1 date3 …

.

.

Etc

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’s at time and collapse too if I collapse.

After expanding I should get the o/p as follows-

- VBELN1 date1 date2 …

10 xyz date1

20 XY1 date1

30 ert date1

-VBELN2 date1 date2 …

10 line1 date1

20 line2 date1

-VBELN3 date1 date3 …

10

20

.

.

Etc

If I collapse again back to as follows-

+ VBELN1 date1 date2 …

+VBELN2 date1 date2 …

+VBELN3 date1 date3 …

.

.

Etc

You can refer the same functionality available with KSB5 t-code provided by SAP.

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.

Your's suggestions are appreciated.

Regards,

D C.

Hi, I need some help for a tree structure report, appreciate you help in this regard.

My requirement is as follows-

For example-

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

+ VBELN1 date1 date2 …

+VBELN2 date1 date2 …

+VBELN3 date1 date3 …

.

.

Etc

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’s at time and collapse too if I collapse.

After expanding I should get the o/p as follows-

- VBELN1 date1 date2 …

10 xyz date1

20 XY1 date1

30 ert date1

-VBELN2 date1 date2 …

10 line1 date1

20 line2 date1

-VBELN3 date1 date3 …

10

20

.

.

Etc

If I collapse again back to as follows-

+ VBELN1 date1 date2 …

+VBELN2 date1 date2 …

+VBELN3 date1 date3 …

.

.

Etc

You can refer the same functionality available with KSB5 t-code provided by SAP.

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.

Your's suggestions are appreciated.

Regards,

D C.

4 REPLIES 4
Read only

FredericGirod
Active Contributor
0 Likes
679

Go in transaction DWDM for examples of ALV Tree.

If it's too hard, I could give you an example (but more complex, with link to ALV grid)

Fred

Read only

0 Likes
679

Frederic,

Could you please give me the example? using ALV grid also its ok. Appreciate your response.

Regards,

D C

Read only

0 Likes
679

Here is one of my last ALV Tree

for this exemple, you will need to create a structure in the data dictionnary.

*---------------------------------------------------------------------*
*---------------------------------------------------------------------*
*   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=>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->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->free.
      FREE obj_tree.
      LEAVE TO SCREEN 0.

    WHEN OTHERS.
      CALL METHOD cl_gui_cfw=>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 & 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 --> 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->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->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 ' -> '.
  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->add_node
    EXPORTING
      i_relat_node_key = w_pere
      i_relationship   = cl_gui_column_tree=>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->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->add_node
    EXPORTING
      i_relat_node_key = w_pere
      i_relationship   = cl_gui_column_tree=>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->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
              '->'
              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->add_node
    EXPORTING
      i_relat_node_key = w_pere
      i_relationship   = cl_gui_column_tree=>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->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->add_node
    EXPORTING
      i_relat_node_key = w_pere
      i_relationship   = cl_gui_column_tree=>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->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 ' -> '.
  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->add_node
    EXPORTING
      i_relat_node_key = w_pere
      i_relationship   = cl_gui_column_tree=>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->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->add_button
    EXPORTING
      fcode     = ''
      icon      = ''
      butn_type = cntb_btype_sep
      text      = ''
      quickinfo = 'Seperator'.

* Ajoute le bouton grille ALV.
  CALL METHOD obj_toolbar->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->add_button
    EXPORTING
      fcode     = ''
      icon      = ''
      butn_type = cntb_btype_sep
      text      = ''
      quickinfo = 'Seperator'.

* Ajoute le bouton MRKO
  CALL METHOD obj_toolbar->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->add_button
    EXPORTING
      fcode     = 'VA03'
      icon      = ''
      butn_type = cntb_btype_button
      text      = '-> Cmd'
      quickinfo = 'Affichage commande'(i02).

* Ajoute le bouton Affichage livraison
  CALL METHOD obj_toolbar->add_button
    EXPORTING
      fcode     = 'VL03N'
      icon      = ''
      butn_type = cntb_btype_button
      text      = '-> Liv'
      quickinfo = 'Affichage livraison'(i03).

* Ajoute le bouton grille ALV.
  CALL METHOD obj_toolbar->add_button
    EXPORTING
      fcode     = 'VF03'
      icon      = ''
      butn_type = cntb_btype_button
      text      = '-> 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->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->get_selected_nodes
      CHANGING
        ct_selected_nodes = it_sel_node.
    CALL METHOD cl_gui_cfw=>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->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->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->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->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->free.
      FREE obj_grid.
      LEAVE TO SCREEN 0.

    WHEN OTHERS.
      CALL METHOD cl_gui_cfw=>dispatch.
  ENDCASE.


* Clear code.
  CLEAR gw_ok_code.


ENDMODULE.                                                  " PAI_200




*

Read only

former_member194669
Active Contributor
0 Likes
679

Hi,

Check for program RSDEMO_SAP_LIST_TREE

aRs