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

problem in ALV grid display- problem while using the control break staements

Former Member
0 Likes
905

Hi all,

my requirement is to dispaly an alv report by retreiving the data from the tables reguh reguv and regup. In the alv output screen some fields are ther the problem is with the document amount and payment total field.Based on the vendor i need to display the payment total value. i.e Payment total should have total payment per vendor in that proposal. Ex. If proposal picks 10 documents for one vendor for GBP 100 each, payment total should have GBP 1000.

i am able to display the totals and subtotals but i am enable to display the payment total field in the out put. In the out putscreen  the subtotal value should come in the payment total field but it is not coming i tried the control break statements also but i didn't get the correct output.

can any one plaese provide me some solution. i attached the sample code and output screen shot.

thanks in advance,

koushik

************************************************************************
* D A T A  D E F I N I T I O N
************************************************************************

TABLES : REGUH,
        REGUP,
        REGUV.

TYPES : BEGIN OF ty_final,
        laufd TYPE laufd,
        laufi TYPE laufi,
        xvorl TYPE xvorl,
        zbukr TYPE dzbukr,
        lifnr TYPE lifnr,
        kunnr TYPE kunnr,
        empfg TYPE empfg,
        vblnr TYPE vblnr,
        waers TYPE waers,
        name1 TYPE name1_gp,
        ubknt TYPE ubknt,
        rwbtr TYPE rwbtr,
        belnr TYPE belnr_d,
        blart TYPE blart,
        koart TYPE koart,
        dmbtr TYPE dmbtr,
        wrbtr TYPE wrbtr,
        mwsts TYPE mwsts,
END OF ty_final.

TYPES : BEGIN OF ty_reguh,
        laufd TYPE laufd,
        laufi TYPE laufi,
        xvorl TYPE xvorl,
        zbukr TYPE dzbukr,
        lifnr TYPE lifnr,
        kunnr TYPE kunnr,
        empfg TYPE empfg,
        vblnr TYPE vblnr,
        name1 TYPE name1_gp,
        ubknt TYPE ubknt,
*        rwbtr TYPE rwbtr,
  END OF ty_reguh.

TYPES : BEGIN OF ty_regup,
        laufd TYPE laufd,
        laufi TYPE laufi,
        xvorl TYPE xvorl,
        zbukr TYPE dzbukr,
        lifnr TYPE lifnr,
        kunnr TYPE kunnr,
        empfg TYPE empfg,
        vblnr TYPE vblnr,
        belnr TYPE belnr_d,
        waers TYPE waers,
        blart TYPE blart,
        koart TYPE koart,
        dmbtr TYPE dmbtr,
        wrbtr TYPE wrbtr,
  END OF ty_regup.

************************************************************************
* S E L E C T I O N  S C R E E N
************************************************************************

SELECTION-SCREEN BEGIN OF BLOCK SELECT WITH FRAME TITLE text-001.
SELECT-OPTIONS : s_laufd FOR reguh-laufd OBLIGATORY.
SELECT-OPTIONS : s_laufi FOR reguh-laufi ."OBLIGATORY.
PARAMETERS    : p_xvorl TYPE reguh-xvorl DEFAULT 'X'.
SELECT-OPTIONS : s_zbukr FOR reguh-zbukr.
SELECT-OPTIONS : s_lifnr FOR reguh-lifnr.

SELECTION-SCREEN  END OF BLOCK SELECT.

************************************************************************
* I N T E R N A L  S T R U C T U R E S  &  T A B L E S
************************************************************************
DATA :
      gt_itab1    TYPE TABLE OF ty_reguh,
      gt_itab2    TYPE TABLE OF ty_regup,
      gt_final    TYPE TABLE OF ty_final,
      gt_fieldcat TYPE slis_t_fieldcat_alv,
      gt_final1 TYPE TABLE OF ty_final.
DATA :
      gs_itab1    TYPE ty_reguh,
      gs_itab2    TYPE ty_regup,
      gs_final    TYPE ty_final,
      gs_fieldcat TYPE slis_fieldcat_alv,
      gs_final1 TYPE ty_final.
DATA : lv_amt TYPE rwbtr.

************************************************************************
* C O N S T A N T S
************************************************************************
CONSTANTS : gc_x TYPE C VALUE 'X'.

START-OF-SELECTION.

PERFORM get_data.
PERFORM process_data.
PERFORM build_catalog.
perform display_data.
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*      text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_DATA .
  SELECT reguh~laufd
        reguh~laufi
        reguh~xvorl
        reguh~zbukr
        reguh~lifnr
        reguh~kunnr
        reguh~empfg
        reguh~vblnr
        reguh~name1
        reguh~ubknt
*        reguh~rwbtr
        FROM reguh INNER JOIN reguv
        on reguh~laufd eq reguv~laufd
        AND reguh~laufi eq reguv~laufi
        INTO CORRESPONDING FIELDS OF TABLE gt_itab1
        WHERE reguh~laufd in s_laufd
        AND reguh~laufi in s_laufi
        AND reguh~xvorl eq p_xvorl
        AND reguh~zbukr in s_zbukr
        AND reguh~lifnr in s_lifnr
        AND reguh~kunnr eq ' '
        AND reguv~xvore = gc_x
        AND reguv~xecht = ' '.
  SORT gt_itab1 by laufd laufi xvorl zbukr lifnr kunnr empfg vblnr.
  IF gt_itab1 IS NOT INITIAL.
    SELECT  laufd
            laufi
            xvorl
            zbukr
            lifnr
            kunnr
            empfg
            vblnr
            belnr
            waers
            blart
            koart
            dmbtr
            wrbtr
            FROM regup
            INTO CORRESPONDING FIELDS OF TABLE gt_itab2
            FOR ALL ENTRIES IN gt_itab1
            WHERE laufd eq gt_itab1-laufd
            AND  laufi eq gt_itab1-laufi
            AND  xvorl eq gt_itab1-xvorl
            AND  zbukr eq gt_itab1-zbukr
            AND  lifnr eq gt_itab1-lifnr
            AND  kunnr eq gt_itab1-kunnr
            AND  empfg eq gt_itab1-empfg
            AND  vblnr eq gt_itab1-vblnr
            AND  koart = 'K'.
  ELSE.
    MESSAGE I190.
    LEAVE LIST-PROCESSING.
  ENDIF.
ENDFORM.                    " GET_DATA
*&---------------------------------------------------------------------*
*&      Form  PROCESS_DATA
*&---------------------------------------------------------------------*
*      text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM PROCESS_DATA .
  IF gt_itab1 IS NOT INITIAL.
    LOOP AT gt_itab1 INTO gs_itab1.
      gs_final-laufd = gs_itab1-laufd.
      gs_final-laufi = gs_itab1-laufi.
      gs_final-xvorl = gs_itab1-xvorl.
      gs_final-zbukr = gs_itab1-zbukr.
      gs_final-lifnr = gs_itab1-lifnr.
      gs_final-kunnr = gs_itab1-kunnr.
      gs_final-empfg = gs_itab1-empfg.
      gs_final-vblnr = gs_itab1-vblnr.
      gs_final-name1 = gs_itab1-name1.
      gs_final-ubknt = gs_itab1-ubknt.
*      gs_final-rwbtr = gs_itab1-rwbtr.
      APPEND gs_final TO gt_final.
      CLEAR gs_final.
    ENDLOOP.
  ENDIF.
  IF gt_itab2 IS NOT INITIAL.
    SORT gt_final by laufd laufi xvorl zbukr lifnr kunnr empfg vblnr.
    SORT gt_itab2 by laufd laufi xvorl zbukr lifnr kunnr empfg vblnr.
    LOOP AT gt_final INTO gs_final.
      READ TABLE gt_itab2 INTO gs_itab2 WITH KEY
                                        laufd = gs_final-laufd
                                        laufi = gs_final-laufi
                                        xvorl = gs_final-xvorl
                                        zbukr = gs_final-zbukr
                                        lifnr = gs_final-lifnr
                                        kunnr = gs_final-kunnr
                                        empfg = gs_final-empfg
                                        vblnr = gs_final-vblnr
                                        BINARY SEARCH.
      IF sy-subrc = 0.
        gs_final-laufd = gs_itab2-laufd.
        gs_final-laufi = gs_itab2-laufi.
        gs_final-xvorl = gs_itab2-xvorl.
        gs_final-zbukr = gs_itab2-zbukr.
        gs_final-lifnr = gs_itab2-lifnr.
        gs_final-kunnr = gs_itab2-kunnr.
        gs_final-empfg = gs_itab2-empfg.
        gs_final-vblnr = gs_itab2-vblnr.
        gs_final-belnr = gs_itab2-belnr.
        gs_final-waers = gs_itab2-waers.
        gs_final-blart = gs_itab2-blart.
        gs_final-koart = gs_itab2-koart.
        gs_final-dmbtr = gs_itab2-dmbtr.
        gs_final-wrbtr = gs_itab2-wrbtr.
        MODIFY gt_final FROM gs_final TRANSPORTING belnr waers blart koart dmbtr wrbtr.
      endif.
    ENDLOOP.
  ENDIF.
*  SORT gt_final by laufd laufi xvorl zbukr lifnr kunnr empfg vblnr belnr.

    DATA : lc_curty        TYPE bapi1093_1-rate_type VALUE 'M',
          l_curr_key_from TYPE waers,
          lc_curr_key_to  TYPE waers VALUE 'USD',
          l_exch_rate    TYPE bapi1093_0.

  LOOP AT gt_final INTO gs_final.
    IF gs_final-waers ne 'USD'.
      CALL FUNCTION 'BAPI_EXCHANGERATE_GETDETAIL'
        EXPORTING
          RATE_TYPE        = lc_curty
          FROM_CURR        = gs_final-waers
          TO_CURRNCY      = lc_curr_key_to
          DATE            = sy-datum
        IMPORTING
          EXCH_RATE        = l_exch_rate.
      IF l_exch_rate-exch_rate_v ne '0' AND gs_final-wrbtr ne '0'.
          gs_final-mwsts  = ( gs_final-wrbtr / l_exch_rate-exch_rate_v ).
      ENDIF.
    ELSE.
      gs_final-mwsts = gs_final-wrbtr.
    ENDIF.
      MODIFY gt_final FROM gs_final TRANSPORTING mwsts.
  ENDLOOP.

  SORT gt_final by lifnr.
*
  LOOP AT gt_final INTO gs_final.
    gs_final1 = gs_final.
    gs_final1-rwbtr = gs_final1-rwbtr + gs_final-dmbtr.
    AT END OF lifnr.
      SUM.
*      CLEAR gs_final-rwbtr.
*      gs_final1-rwbtr = gs_final1-rwbtr + gs_final-dmbtr.

*gs_final1-rwbtr = gs-final-rwbtr.
*      gs_final-rwbtr = gs_final1-rwbtr.
*      gs_final-name1 = gs_final1-name1.
*        gs_final-ubknt = gs_final1-ubknt.
*        gs_final-rwbtr = gs_final1-rwbtr.
*        gs_final-belnr = gs_final1-belnr.
*        gs_final-blart = gs_final1-blart.
*        gs_final-koart = gs_final1-koart.
*        gs_final-dmbtr = gs_final1-dmbtr.
*        gs_final-wrbtr = gs_final1-wrbtr.
*        gs_final-mwsts = gs_final1-mwsts.
              APPEND gs_final1 to gt_final1.
      ENDAT.
*      gs_final1-rwbtr = gs_final-rwbtr + gs_final-dmbtr.
  ENDLOOP.
ENDfORM.
*
*  LOOP AT gt_final INTO gs_final.
*    lv_amt = lv_amt + gs_final-wrbtr.
*      AT END OF lifnr.
*      gs_final1-lifnr = gs_final-lifnr.
*      gs_final1-rwbtr = lv_amt.
*      gs_final1-laufd = gs_final-laufd.
*      gs_final1-laufi = gs_final-laufi.
*      gs_final1-xvorl = gs_final-xvorl.
*      gs_final1-zbukr = gs_final-zbukr.
*      gs_final1-kunnr = gs_final-kunnr.
*      gs_final1-empfg = gs_final-empfg.
*      gs_final1-vblnr = gs_final-vblnr.
*      gs_final1-name1 = gs_final-name1.
*      gs_final1-ubknt = gs_final-ubknt.
*      gs_final1-belnr = gs_final-belnr.
*        gs_final1-waers = gs_final-waers.
*        gs_final1-blart = gs_final-blart.
*        gs_final1-koart = gs_final-koart.
*        gs_final1-dmbtr = gs_final-dmbtr.
*        gs_final1-wrbtr = gs_final-wrbtr.
*        APPEND gs_final1 to gt_final1.
*        CLEAR lv_amt.
*        ENDAT.
*      CLEAR gs_final1.
*  ENDLOOP.
*

*&---------------------------------------------------------------------*
*&      Form  BUILD_CATALOG
*&---------------------------------------------------------------------*
*      text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BUILD_CATALOG .
DATA : loc_count TYPE i VALUE '1'.

  loc_count = loc_count  + 1.
  gs_fieldcat-fieldname  = 'LAUFD'.
  gs_fieldcat-tabname    = 'GT_FINAL1'.
  gs_fieldcat-seltext_m  = 'RUN DATE'.
  gs_fieldcat-col_pos    =  loc_count.
  APPEND gs_fieldcat TO  gt_fieldcat.
  CLEAR gs_fieldcat.

  loc_count = loc_count  + 1.
  gs_fieldcat-fieldname  = 'LAUFI'.
  gs_fieldcat-tabname    = 'GT_FINAL1'.
  gs_fieldcat-seltext_l  = 'ADDITIONAL IDENTIFICATION'.
  gs_fieldcat-col_pos    =  loc_count.
  APPEND gs_fieldcat TO  gt_fieldcat.
  CLEAR gs_fieldcat.

  loc_count = loc_count  + 1.
  gs_fieldcat-fieldname  = 'ZBUKR'.
  gs_fieldcat-tabname    = 'GT_FINAL1'.
  gs_fieldcat-seltext_m  = 'COMPANY CODE'.
  gs_fieldcat-col_pos    =  loc_count.
  APPEND gs_fieldcat TO  gt_fieldcat.
  CLEAR gs_fieldcat.

  loc_count = loc_count  + 1.
  gs_fieldcat-fieldname  = 'LIFNR'.
  gs_fieldcat-tabname    = 'GT_FINAL1'.
  gs_fieldcat-seltext_m  = 'VENDOR NUMBER'.
  gs_fieldcat-col_pos    =  loc_count.
*  gs_fieldcat-do_sum    = ''.
  APPEND gs_fieldcat TO  gt_fieldcat.
  CLEAR gs_fieldcat.

  loc_count = loc_count  + 1.
  gs_fieldcat-fieldname  = 'NAME1'.
  gs_fieldcat-tabname    = 'GT_FINAL1'.
  gs_fieldcat-seltext_m  = 'VENDOR NAME'.
  gs_fieldcat-col_pos    =  loc_count.
  APPEND gs_fieldcat TO  gt_fieldcat.
  CLEAR gs_fieldcat.

  loc_count = loc_count  + 1.
  gs_fieldcat-fieldname  = 'BLART'.
  gs_fieldcat-tabname    = 'GT_FINAL1'.
  gs_fieldcat-seltext_m  = 'DOCUMENT TYPE'.
  gs_fieldcat-col_pos    =  loc_count.
  APPEND gs_fieldcat TO  gt_fieldcat.
  CLEAR gs_fieldcat.

  loc_count = loc_count  + 1.
  gs_fieldcat-fieldname  = 'BELNR'.
  gs_fieldcat-tabname    = 'GT_FINAL1'.
  gs_fieldcat-seltext_m  = 'DOCUMENT NUMBER'.
  gs_fieldcat-col_pos    =  loc_count.
  APPEND gs_fieldcat TO  gt_fieldcat.
  CLEAR gs_fieldcat.

  loc_count = loc_count  + 1.
  gs_fieldcat-fieldname  = 'WAERS'.
  gs_fieldcat-tabname    = 'GT_FINAL1'.
  gs_fieldcat-seltext_m  = 'DOCUMENT CURRENCY'.
  gs_fieldcat-col_pos    =  loc_count.
  APPEND gs_fieldcat TO  gt_fieldcat.
  CLEAR gs_fieldcat.

  loc_count = loc_count  + 1.
  gs_fieldcat-fieldname  = 'WRBTR'.
  gs_fieldcat-tabname    = 'GT_FINAL1'.
  gs_fieldcat-seltext_m  = 'DOCUMENT AMOUNT'.
  gs_fieldcat-col_pos    =  loc_count.
  gs_fieldcat-do_sum    = 'X'.
  APPEND gs_fieldcat TO  gt_fieldcat.
  CLEAR gs_fieldcat.

  loc_count = loc_count  + 1.
  gs_fieldcat-fieldname  = 'DMBTR'.
  gs_fieldcat-tabname    = 'GT_FINAL1'.
  gs_fieldcat-seltext_m  = 'LOCAL AMOUNT'.
  gs_fieldcat-col_pos    =  loc_count.
  APPEND gs_fieldcat TO  gt_fieldcat.
  CLEAR gs_fieldcat.

  loc_count = loc_count  + 1.
  gs_fieldcat-fieldname  = 'RWBTR'.
  gs_fieldcat-tabname    = 'GT_FINAL1'.
  gs_fieldcat-seltext_m  = 'PAYMENT TOTAL'.
  gs_fieldcat-col_pos    =  loc_count.
  APPEND gs_fieldcat TO  gt_fieldcat.
  CLEAR gs_fieldcat.

  loc_count = loc_count  + 1.
  gs_fieldcat-fieldname  = 'MWSTS'.
  gs_fieldcat-tabname    = 'GT_FINAL1'.
  gs_fieldcat-seltext_m  = 'USD EQUIVALENT'.
  gs_fieldcat-col_pos    =  loc_count.
  APPEND gs_fieldcat TO  gt_fieldcat.
  CLEAR gs_fieldcat.

  loc_count = loc_count  + 1.
  gs_fieldcat-fieldname  = 'UBKNT'.
  gs_fieldcat-tabname    = 'GT_FINAL1'.
  gs_fieldcat-seltext_l  = 'HOUSEBANK ACCOUNTNUMBER'.
  gs_fieldcat-col_pos    =  loc_count.
  APPEND gs_fieldcat TO  gt_fieldcat.
  CLEAR gs_fieldcat.

ENDFORM.                    " BUILD_CATALOG
*&---------------------------------------------------------------------*
*&      Form  DISPLAY_DATA
*&---------------------------------------------------------------------*
*      text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DISPLAY_DATA .
  DATA : v_repid LIKE sy-repid.
  DATA :
      ls_layout TYPE slis_layout_alv.
      ls_layout-colwidth_optimize = 'X'.
      ls_layout-no_input          = 'X'.
      ls_layout-no_vline          = ' '.
      ls_layout-no_colhead        = ' '.
*      ls_layout-zebra = 'X'.
      v_repid = sy-repid.
*      ls_layout_total-only = 'X'.

DATA : gt_sort TYPE slis_t_sortinfo_alv.
DATA : gs_sort TYPE slis_sortinfo_alv..
REFRESH gt_sort.
  CLEAR gs_sort.
  gs_sort-fieldname = 'WAERS'.
  gs_sort-up = 'X'.
  gs_sort-subtot = 'X'.
  gs_sort-tabname = 'GT_FINAL'.
  APPEND gs_sort TO gt_sort.


      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program    = 'ZBK_SAMPLE_REPORT'
      is_layout              = ls_layout
      it_fieldcat            = gt_fieldcat
      it_sort                = gt_sort[]
    TABLES
      t_outtab              = gt_final1[]
    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_DATA

5 REPLIES 5
Read only

Former Member
0 Likes
843

Hello,

If you have an ALV problem using FM REUSE_ALV_GRID_DISPLAY, you may want to check out the object oriented approach to ALV grids instead.

REUSE_ALV_GRID_DISPLAY is a function that some people were caling obsolete back in 2007

Hope that helps!

Stuart.

Read only

Former Member
0 Likes
843

Hi Bharath,

From what i was able to understand your problem
U want to display 10 records  as 10 rows vendor specific and then display there totals.... in that case
gs_sort-fieldname will be equal to vendor.

Please elaborate more of your requirement...

Regards
Arpit Gupta

Read only

Former Member
0 Likes
843

Hi Bharat,

Its not clear what your requirement is.

if you want 10 lines for 10 diff vendors than use below logic.

loop at it_table into wa.

* ADD YOUR ADDITION CODE HERE

on change of vendor .

append to it table.

* do not clear wa.

endon.

endloop.

append wa to it final.

* clear wa here

Read only

former_member186413
Participant
0 Likes
843

Hi, you may get some small modification for your program.

where call funcation, you should write as:

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

     EXPORTING

       i_callback_program       = sy-repid

       it_fieldcat              = gt_fieldcat

       i_save                   = 'A'

       is_layout                = ls_layout

        i_callback_pf_status_set = 'SET_PF_STATUS'

       i_callback_user_command  = 'USER_COMMAND'  " it_excluding = i_excluding

        it_sort                = gt_sort[]

     TABLES

       t_outtab                 = gt_final1[]

     EXCEPTIONS

       program_error            = 1

       OTHERS                   = 2.

And then write a sub program as:

FORM user_command USING r_ucomm LIKE sy-ucomm

                     rs_selfield TYPE slis_selfield.

DATA: sum TYPE p.

IF r_ucomm = p_sum.

     LOOP AT   gt_final1.

          sum = sum + gt_final1- xxx. "I don't know what you want to sum up with .

      AT END OF gt_final1-kunnr.   

          gt_final1-kunnr = 'GRAND TOTAL :'

          gt_final1- xxxx = sum.

          APPEND gt_final1.

       ENDAT.

      ENDLOOP.

ENDIF.

rs_selfield-refresh = 'X'.

ENDFORM.

Another is :

FORM  SET_PF_STATUS.

ENDFORM.

Read only

Former Member
0 Likes
843

Hi Bharat,

If you are just looking for the Subtotals and totals based on vendor, then in the sorting criteria, pass the VENDOR instead of WAERS.

This would give you totals and subtotals based on vendor.

Also if you need a page-break according to the vendor, or need to show header for every vendor, then it is not possible in Grid Display. for that you need to switch to list dispaly

of ALV.

regards,

sumit