Skip to Content
author's profile photo Former Member
Former Member

ALV -Report to show entire set of records

Hi!

I have this report in ALV wherein I have to show all the contarct list items

whtere it is from sales criteria or billing point of view. Basically what I

have done is combined all the tables togethere and trying to take out the result, but

in the process I loose many records. So I changed into two different sets of join

and finally put them in a third final internal table. I have created this report but

somehow I am still loosing records which I am unable to find out why. I have basically joined

VBAK, VBPA, table togethere and FPLT, FPLA tables together. The only connection between them

I find is by joining VBKD table in either join so I joined VBKD with the first set of table.

Can anyone have a look at the report and let me know whats basically the problem

which is not allowing me to get the entire records. I need to get all the records

in teh ALV output whtere it has value in it or not , not that only if both internal tables

match entres to show up , even if they dont match it should come one under another so that

I ahve completet set of records. Please help me out as its very urgent.

Thanks .

 *&---------------------------------------------------------------------*
*& Report  ZSD_RENTAL_REPTEST
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZSD_RENTAL_REPTEST.
*&---------------------------------------------------------------------*
*& Report  ZSD_RENTAL_REPTEST
*&
*&---------------------------------------------------------------------*


INCLUDE zsd_rental_reptest_t01.

*--------------------------------------------------------------------*
* Selection Screen
*--------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK m1 WITH FRAME TITLE text-t01.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-t02.
SELECT-OPTIONS: s_vkorg FOR vbak-vkorg MEMORY ID vko,
                s_vtweg FOR vbak-vtweg MEMORY ID vtw,
                s_spart FOR vbak-spart MEMORY ID spa,
                s_vkbur FOR vbak-vkbur MEMORY ID vkb.
SELECTION-SCREEN SKIP 1.
SELECT-OPTIONS: s_vbeln FOR vbak-vbeln,
                s_erdat FOR vbak-erdat,
                s_ernam FOR vbak-ernam,
                s_guebg FOR vbak-guebg,
                s_gueen FOR vbak-gueen,
                s_fplnr for fplt-fplnr,
                s_auart FOR gv_auart MEMORY ID vta
                                     MATCHCODE OBJECT h_vakz.
SELECTION-SCREEN SKIP 1.
SELECT-OPTIONS:
                s_kunnr FOR vbak-kunnr,
                s_kunwe FOR vbap-oid_ship,
                s_kunre FOR wbrk-kunre.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-t03.
SELECT-OPTIONS: s_werks FOR vbap-werks MEMORY ID wrk,
                s_lgort FOR vbap-lgort MEMORY ID lag,
                s_vstel FOR vbap-vstel MEMORY ID vst,
                s_route for vbap-route,
                s_matnr FOR vbap-matnr.
SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-t04.
PARAMETERS:     p_varia TYPE disvariant-variant MEMORY ID wrk,
                p_all   AS CHECKBOX DEFAULT 'X',
                p_group AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK b3.
SELECTION-SCREEN END OF BLOCK m1.

*--------------------------------------------------------------------*
* Start of Selection
*--------------------------------------------------------------------*
START-OF-SELECTION.
  PERFORM get_data.

*--------------------------------------------------------------------*
* Display ALV
*--------------------------------------------------------------------*
END-OF-SELECTION.
  IF gt_report[] IS INITIAL.
    MESSAGE s419(brain).
  ELSE.
    PERFORM create_alv.
  ENDIF.
*----------------------------------------------------------------------*
* AT SELECTION-SCREEN ON VALUE-REQUEST                                 *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_varia.
  PERFORM f01_f4_variant CHANGING p_varia.

*&---------------------------------------------------------------------*
*&      Form  get_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM get_data .
data: v_tabix type sy-tabix.
*   Select the appropriate contract data.
  SELECT a~vbeln a~erdat a~ernam a~audat a~vbtyp a~auart a~vkorg
   a~vtweg a~spart a~vkbur a~guebg a~gueen a~kunnr a~kvgr4
   b~posnr b~matnr b~charg b~matkl b~arktx b~pstyv b~zmeng
   b~zieme b~kdmat b~werks b~lgort b~vstel b~netpr b~kpein
   b~kmein b~shkzg b~oid_extbol b~oid_miscdl b~oidrc b~oid_ship AS kunwe
   b~zzwprofid c~datbi c~datab b~route d~fplnr
     INTO CORRESPONDING FIELDS OF TABLE itab
     FROM vbak AS a
         INNER JOIN vbap AS b ON a~vbeln = b~vbeln
         inner join vbkd as d on b~vbeln = d~vbeln
         LEFT OUTER JOIN zsdsched AS c ON b~vbeln = c~vbeln AND
                               b~posnr = c~posnr
     WHERE a~vbeln IN s_vbeln
       AND a~erdat IN s_erdat
       AND a~vbtyp = gc_g
       AND a~ernam IN s_ernam
       AND a~vkorg IN s_vkorg
       AND a~vtweg IN s_vtweg
       AND a~spart IN s_spart
       AND a~vkbur IN s_vkbur
       AND a~guebg IN s_guebg
       AND a~gueen IN s_gueen
       AND a~auart IN s_auart
       AND a~kunnr IN s_kunnr
       AND b~oid_ship IN s_kunwe
       AND b~werks IN s_werks
       AND b~lgort IN s_lgort
       AND b~vstel IN s_vstel
       and b~route in s_route
       and d~fplnr in s_fplnr
       AND b~matnr IN s_matnr.

   SORT itab.
*-----
*select    e~fkdat e~nfdat e~fakwr e~fksaf e~afdat
*          f~fpart f~bedat f~endat f~horiz g~vbeln
*          INTO CORRESPONDING FIELDS OF TABLE itab1
*          FROM fplt AS e
*         INNER JOIN fpla AS f ON f~fplnr = e~fplnr
*         inner join vbkd as g on f~fplnr = g~fplnr
*
*         where g~vbeln in s_vbeln and
*               e~fplnr in s_fplnr.
*
*         sort itab1.
  SELECT e~fkdat e~nfdat e~fakwr e~fksaf e~afdat
          f~fpart f~bedat f~endat f~horiz g~vbeln
          INTO CORRESPONDING FIELDS OF TABLE itab1
          FROM fplt AS e
            INNER JOIN fpla AS f ON f~fplnr = e~fplnr
            INNER JOIN vbkd as g ON f~fplnr = g~fplnr

          WHERE g~vbeln in s_vbeln
            AND e~fplnr in s_fplnr.
      SORT itab1..





* loop at itab.
* read table itab1  with key vbeln = itab-vbeln.
* if  sy-subrc = 0 .
* move sy-tabix to v_tabix.
* move-corresponding itab to gt_report.
* move-corresponding itab1 to gt_report.
** append gt_report.
* delete itab1 index v_tabix.
**delete adjacent duplicates from gt_report.
* endif.
* append gt_report.
* endloop.
*
*
* loop at itab1.
* move-corresponding itab1 to gt_report.
* append gt_report.
* endloop.

    LOOP AT itab .
        READ TABLE itab1 WITH KEY vbeln = itab-vbeln.
          IF sy-subrc = 0.
        MOVE sy-tabix TO v_tabix.
        MOVE-CORRESPONDING itab  TO gt_report.
        MOVE-CORRESPONDING itab1 TO gt_report.
      DELETE itab1 INDEX v_tabix.
          ENDIF.
        APPEND gt_report .
    ENDLOOP.


    LOOP AT itab1.
        MOVE-CORRESPONDING itab1 TO gt_report.
          APPEND gt_report .
    ENDLOOP.
*----


  IF NOT itab[] IS INITIAL.
*   Get Bill-to Party's for Item Lines
    SELECT vbeln posnr parvw kunnr INTO CORRESPONDING FIELDS OF TABLE gt_vbpa
        FROM vbpa
        FOR ALL ENTRIES IN itab
        WHERE vbeln = itab-vbeln
          AND parvw = gc_re.

*   Select the remaining records from the ZSDSCHED Table.
    SELECT * FROM zsdsched
        INTO TABLE gt_sched
        FOR ALL ENTRIES IN itab
        WHERE vbeln = itab-vbeln
          AND posnr = itab-posnr.
    SORT gt_sched.
  ENDIF.

* Loop through captured data for additional information
*  LOOP AT gt_sel INTO gs_report.
LOOP AT itab.

*   Find the bill-to party
    READ TABLE gt_vbpa INTO gs_vbpa WITH KEY vbeln = gs_report-vbeln
                                             posnr = gs_report-posnr
                                             parvw = gc_re.
    IF sy-subrc <> 0.
      READ TABLE gt_vbpa INTO gs_vbpa WITH KEY vbeln = gs_report-vbeln
                                               parvw = gc_re.
      CHECK sy-subrc = 0 AND gs_vbpa-kunnr IN s_kunre.
    ELSE.
      CHECK gs_vbpa-kunnr IN s_kunre.
    ENDIF.
    gs_report-kunre = gs_vbpa-kunnr.

*  Get the Customer's Name
    gs_report-kunnrt = zcl_kna1=>get_name1( itp_kunnr = gs_report-kunnr ).
    gs_report-kunwet = zcl_kna1=>get_name1( itp_kunnr = gs_report-kunwe ).
    gs_report-kunret = zcl_kna1=>get_name1( itp_kunnr = gs_report-kunre ).

*   Get the scheduling lines for the item line.
    CLEAR gv_counter.

    IF NOT p_group IS INITIAL.
*     If we are grouping the lines add the icon button.
      LOOP AT gt_sched INTO gs_sched WHERE vbeln = gs_report-vbeln
                                       AND posnr = gs_report-posnr.
        IF gv_counter > 0.
          gs_report-addl_schd = '@1E@'.
          CONTINUE.

        ENDIF.
        MOVE-CORRESPONDING gs_sched TO gs_report.
        ADD 1 TO gv_counter.
      ENDLOOP.
    ELSE.
*     Otherwise get the rest of the schedule information
      READ TABLE gt_sched INTO gs_sched
        WITH KEY vbeln = gs_report-vbeln
                 posnr = gs_report-posnr
                 datbi = gs_report-datbi
                 datab = gs_report-datab.
      IF sy-subrc = 0.
        MOVE-CORRESPONDING gs_sched TO gs_report.
      ENDIF.
    ENDIF.
    APPEND gs_report TO gt_report.
  ENDLOOP.

* Remove any duplicates from the reporting table
  DELETE ADJACENT DUPLICATES FROM gt_report.

* If Show all records is initial, delete non-scheduled lines (ex. Sub-items)
  IF p_all IS INITIAL.
    DELETE gt_report WHERE datbi = 0
                     AND datab = 0.

  ENDIF.
ENDFORM.                    " get_data
*&---------------------------------------------------------------------*
*&      Form  create_alv
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM create_alv .
  PERFORM initialize_fieldcat USING gt_fieldcat[].
  PERFORM populate_layout CHANGING gs_layout
                                   gs_variant.
  PERFORM populate_sort   USING gt_sort[].
  PERFORM display_alv_report.
ENDFORM.                    " create_alv
*&---------------------------------------------------------------------*
*&      Form  initialize_fieldcat
*&---------------------------------------------------------------------*
*   Get and enhance the field catalog data
*----------------------------------------------------------------------*
*      -->L_FIELDCAT[]  text
*----------------------------------------------------------------------*
FORM initialize_fieldcat USING l_fieldcat TYPE slis_t_fieldcat_alv.

  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      i_program_name         = 'ZSD_RENTAL_REPTEST'(002)
      i_internal_tabname     = 'GT_REPORT'
      i_inclname             = 'ZSD_RENTAL_REPTEST_T01'(001)
    CHANGING
      ct_fieldcat            = l_fieldcat
    EXCEPTIONS
      inconsistent_interface = 1
      program_error          = 2
      OTHERS                 = 3.

  READ TABLE l_fieldcat INTO ls_fieldcat WITH KEY fieldname = 'VBELN'.
  ls_fieldcat-seltext_m = ls_fieldcat-seltext_l = 'Contract'.
  ls_fieldcat-hotspot     = 'X'.
  MODIFY l_fieldcat FROM ls_fieldcat INDEX sy-tabix.

  READ TABLE l_fieldcat INTO ls_fieldcat WITH KEY fieldname = 'KUNNRT'.
  ls_fieldcat-seltext_s =
  ls_fieldcat-seltext_m = ls_fieldcat-seltext_l = 'Sold-to Name'.
  MODIFY l_fieldcat FROM ls_fieldcat INDEX sy-tabix.

  READ TABLE l_fieldcat INTO ls_fieldcat WITH KEY fieldname = 'KUNWET'.
  ls_fieldcat-seltext_s =
  ls_fieldcat-seltext_m = ls_fieldcat-seltext_l = 'Ship-to Name'.
  MODIFY l_fieldcat FROM ls_fieldcat INDEX sy-tabix.

  READ TABLE l_fieldcat INTO ls_fieldcat WITH KEY fieldname = 'KUNRET'.
  ls_fieldcat-seltext_s =
  ls_fieldcat-seltext_m = ls_fieldcat-seltext_l = 'Bill-to Name'.
  MODIFY l_fieldcat FROM ls_fieldcat INDEX sy-tabix.

  READ TABLE l_fieldcat INTO ls_fieldcat WITH KEY fieldname = 'ADDL_SCHD'.
  IF NOT p_group IS INITIAL.
    ls_fieldcat-seltext_s = 'Schd'.
    ls_fieldcat-seltext_m = ls_fieldcat-seltext_l = 'Additional Scheduling Lines'.
    ls_fieldcat-icon = 'X'.
    CLEAR: ls_fieldcat-key,
           ls_fieldcat-ref_fieldname,
           ls_fieldcat-ref_tabname,
           ls_fieldcat-reptext_ddic,
           ls_fieldcat-ddic_outputlen.
    ls_fieldcat-hotspot     = 'X'.
    MODIFY l_fieldcat FROM ls_fieldcat INDEX sy-tabix.
  ELSE.
    DELETE l_fieldcat INDEX sy-tabix.
  ENDIF.

  READ TABLE l_fieldcat INTO ls_fieldcat WITH KEY fieldname = 'DATAB'.
  ls_fieldcat-seltext_s = 'Schd From'.
  ls_fieldcat-seltext_m = ls_fieldcat-seltext_l = 'Sched. From Date'.
  CLEAR: ls_fieldcat-key.
  MODIFY l_fieldcat FROM ls_fieldcat INDEX sy-tabix.

  READ TABLE l_fieldcat INTO ls_fieldcat WITH KEY fieldname = 'DATBI'.
  ls_fieldcat-seltext_s = 'Schd To'.
  ls_fieldcat-seltext_m = ls_fieldcat-seltext_l = 'Sched. To Date'.
  CLEAR: ls_fieldcat-key.
  MODIFY l_fieldcat FROM ls_fieldcat INDEX sy-tabix.

ENDFORM.                    " initialize_fieldcat
*&---------------------------------------------------------------------*
*&      Form  populate_layout
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--GS_LAYOUT
*      <--GS_VARIANT
*----------------------------------------------------------------------*
FORM populate_layout CHANGING  gs_layout  TYPE slis_layout_alv
                               gs_variant TYPE disvariant.
  gs_layout-colwidth_optimize = 'X'.
  gs_layout-allow_switch_to_list = 'X'.
  gs_layout-zebra                = 'X'.

  gs_variant-report = sy-repid.
ENDFORM.                    " populate_layout
*&---------------------------------------------------------------------*
*&      Form  populate_sort
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->l_SORT[]  text
*----------------------------------------------------------------------*
FORM populate_sort USING l_sort TYPE slis_t_sortinfo_alv.

ENDFORM.                    " populate_sort
*&---------------------------------------------------------------------*
*&      Form  display_alv_report
*&---------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
FORM display_alv_report .
  gv_repid = sy-repid.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
     EXPORTING
*     I_INTERFACE_CHECK              = ' '
*     I_BYPASSING_BUFFER             =
*     I_BUFFER_ACTIVE                = ' '
      i_callback_program              =  gv_repid
*     I_CALLBACK_PF_STATUS_SET       = ' '
      i_callback_user_command        = 'USER_COMMAND'
      i_structure_name               =  'gt_report'
      is_layout                      =   gs_layout
      it_fieldcat                     =  gt_fieldcat
*     IT_EXCLUDING                   =
*     IT_SPECIAL_GROUPS              =
      it_sort                        =  gt_sort
*     IT_FILTER                      =
*     IS_SEL_HIDE                    =
      i_default                      = 'X'
      i_save                         = gc_a
      is_variant                     = gs_variant
*     IT_EVENTS                      =
*     IT_EVENT_EXIT                  =
*     IS_PRINT                       =
*     IS_REPREP_ID                   =
*     I_SCREEN_START_COLUMN          = 0
*     I_SCREEN_START_LINE            = 0
*     I_SCREEN_END_COLUMN            = 0
*     I_SCREEN_END_LINE              = 0
*   IMPORTING
*     E_EXIT_CAUSED_BY_CALLER        =
*     ES_EXIT_CAUSED_BY_USER         =
      TABLES
        t_outtab                       = gt_report
     EXCEPTIONS
       program_error                  = 1
       OTHERS                         = 2
              .
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

ENDFORM.                    " display_alv_report
*&---------------------------------------------------------------------*
*&      Form  f01_f4_variant
*&---------------------------------------------------------------------*
*    Get the Layout variant for the user.
*----------------------------------------------------------------------*
FORM f01_f4_variant CHANGING c_variant TYPE disvariant-variant.

  DATA: ls_variant TYPE disvariant,
        l_exit     TYPE char1.

  ls_variant-report = sy-repid.

  CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
       EXPORTING
            is_variant          = ls_variant
            i_save              = 'A'
*           it_default_fieldcat =
       IMPORTING
            e_exit              = l_exit
            es_variant          = ls_variant
       EXCEPTIONS
            not_found = 2.
  IF sy-subrc = 2.
    MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ELSE.
    IF l_exit EQ space.
      c_variant = ls_variant-variant.
    ENDIF.
  ENDIF.

ENDFORM.                    " f01_f4_variant
*------------------------------------------------------------------*
*       FORM USER_COMMAND                                          *
*------------------------------------------------------------------*
*       --> R_UCOMM                                                *
*       --> RS_SELFIELD                                            *
*------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm
                  rs_selfield TYPE slis_selfield.

* Check function code
  CASE r_ucomm.
    WHEN '&IC1'.
      READ TABLE gt_report INTO gs_report INDEX rs_selfield-tabindex.
      CHECK sy-subrc = 0.
      CASE rs_selfield-fieldname.
        WHEN 'VBELN'.
*       Set parameter ID for transaction screen field
          CHECK NOT gs_report-vbeln IS INITIAL.
          SET PARAMETER ID 'KTN' FIELD gs_report-vbeln.
          CALL TRANSACTION 'VA43' AND SKIP FIRST SCREEN.
        WHEN 'ADDL_SCHD'.
          CHECK NOT gs_report-addl_schd IS INITIAL.
          REFRESH gt_sched_tmp.
          LOOP AT gt_sched INTO gs_sched
                           WHERE vbeln = gs_report-vbeln
                             AND posnr = gs_report-posnr.
            APPEND gs_sched TO gt_sched_tmp.
          ENDLOOP.
          CHECK sy-subrc = 0.
          CALL SCREEN '1010' STARTING AT 5 5.
      ENDCASE.
  ENDCASE.
ENDFORM.                    "user_command
*&---------------------------------------------------------------------*
*&      Module  STATUS_1010  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_1010 OUTPUT.
  SET PF-STATUS 'MAIN_1010'.
  SET TITLEBAR '1010' WITH gs_report-vbeln gs_report-posnr.
ENDMODULE.                 " STATUS_1010  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_1010  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_1010 INPUT.
  CASE sy-ucomm.
    WHEN 'BACK' OR 'CANC'.
      LEAVE TO SCREEN 0.
  ENDCASE.
ENDMODULE.                 " USER_COMMAND_1010  INPUT
*&----------------------------------------------------------------------*


 

.

Add a comment
10|10000 characters needed characters exceeded

Assigned Tags

Related questions

3 Answers

  • Posted on Jul 04, 2008 at 09:35 PM

    Hi there...

    if you are dealing with contracts then VEDA table plays a vital role... IW3* there is one report where you can verify ur output..

    any changes made to contract line items will find a place in VEDA table.. so check that table as well.. u will fix ur report issue.

    Add a comment
    10|10000 characters needed characters exceeded

  • author's profile photo Former Member
    Former Member
    Posted on Jul 04, 2008 at 09:52 PM

    Thats true , but if you look at my report its a rental contract display list which displays the rental cotract details taking from vbak, vbpa . I had to add the billing plan lines to it from tables fplt and fpla , and thats what I ahve dove done to an existing report which showed only rental contacts , I added the billing plan lines to it. I just want to display the same report with these billing plan fileds i.e 10 other fileds attached to it without loosing any records . But when I added to it I see there is loos in records , that is what i wnat to elimintae with some hlp. Earlier it this report had no connection with fplt or fpla but now I have added it.

    Thanks

    Add a comment
    10|10000 characters needed characters exceeded

  • author's profile photo Former Member
    Former Member
    Posted on Jul 24, 2008 at 05:54 PM

    s

    Add a comment
    10|10000 characters needed characters exceeded

Before answering

You should only submit an answer when you are proposing a solution to the poster's problem. If you want the poster to clarify the question or provide more information, please leave a comment instead, requesting additional details. When answering, please include specifics, such as step-by-step instructions, context for the solution, and links to useful resources. Also, please make sure that you answer complies with our Rules of Engagement.
You must be Logged in to submit an answer.

Up to 10 attachments (including images) can be used with a maximum of 1.0 MB each and 10.5 MB total.