技术开发 频道

ABAP中如何实现合计字段分单位合计

【IT168 技术文章】

    1、增加一个参量 在你所要合计的FIELD 中添加一个 CFIELDNAME或者qfieldname = 你的单位的FIELD
    2、Here is a simple example.
    1) Add a unit field "UNIT" for PCS and TON
    2) Refer to the unit measure field to the number field

    REPORT ztest NO STANDARD PAGE HEADING  LINE-SIZE 170.
    
* ALV
    TYPE
-POOLS: slis.

    TYPES: BEGIN OF typ_data,
           key(
10),
           num  TYPE i,
           unit TYPE lvc_quan,
         END OF typ_data.
    
*--------------------------------------------------------------------
    
* g l o b a l   d a t a
    
*--------------------------------------------------------------------
    DATA gt_outtab   TYPE TABLE OF typ_data WITH HEADER LINE.
    DATA gt_fieldcat TYPE slis_t_fieldcat_alv.
    DATA gt_sort     TYPE slis_t_sortinfo_alv.
    DATA gs_variant  TYPE disvariant.

    
*--------------------------------------------------------------------
    
* Program constructor.
    
*--------------------------------------------------------------------
    LOAD
-OF-PROGRAM.
    
** For Display Variant
     gs_variant
-report = sy-repid.
     PERFORM layout_sort_build CHANGING gt_sort.
     PERFORM prepare_field_catalog changing gt_fieldcat.

    
*--------------------------------------------------------------------
    
* s t a r t - o f - s e l e c t i o n.
    
*--------------------------------------------------------------------
    START
-OF-SELECTION.
     PERFORM selection.

     CALL FUNCTION
'REUSE_ALV_LIST_DISPLAY'
           EXPORTING
              i_callback_program      
= gs_variant-report
              it_fieldcat            
= gt_fieldcat[]
              it_sort                
= gt_sort[]
              is_variant              
= gs_variant
           TABLES
              t_outtab                
= gt_outtab[]
           EXCEPTIONS
              program_error  
= 1
              OTHERS        
= 2.

    
*&---------------------------------------------------------------------*
    
*&      Form  prepare_field_catalog
    
*&---------------------------------------------------------------------*
    
*       text
    
*----------------------------------------------------------------------*
    
*  -->  p1        text
    
*  <--  p2        text
    
*----------------------------------------------------------------------*
    FORM prepare_field_catalog changing lt_fieldcat TYPE slis_t_fieldcat_alv..
     DATA ls_fieldcat TYPE slis_fieldcat_alv.

    
* Key
     CLEAR ls_fieldcat.
     ls_fieldcat
-fieldname    = 'KEY'.            "#EC *
     ls_fieldcat-tabname      = 'gt_outtab'.
     ls_fieldcat
-reptext_ddic = 'Key'(020).       "#EC *
     ls_fieldcat-outputlen    = 10.
     ls_fieldcat
-no_sum       = 'X'.
     ls_fieldcat
-key          = 'X'.
     APPEND ls_fieldcat TO lt_fieldcat.

    
* Num
     CLEAR ls_fieldcat.
     ls_fieldcat
-fieldname    = 'NUM'.            "#EC *
     ls_fieldcat-tabname      = 'gt_outtab'.
     ls_fieldcat
-reptext_ddic = 'Field Num'(021). "#EC *
    * QFIELDNAME - unit measure field
     ls_fieldcat
-qfieldname   = 'UNIT'.           "关键所在
     ls_fieldcat-outputlen    = 10.
     ls_fieldcat
-do_sum       = 'X'.
     APPEND ls_fieldcat TO lt_fieldcat.

    
* UNIT
     CLEAR ls_fieldcat.
     ls_fieldcat
-fieldname    = 'UNIT'.            "#EC *
     ls_fieldcat-tabname      = 'gt_outtab'.
     ls_fieldcat
-reptext_ddic = 'Field Unit'(022). "#EC *
     ls_fieldcat-outputlen    = 10.
     ls_fieldcat
-do_sum       = 'X'.
     APPEND ls_fieldcat TO lt_fieldcat.
    ENDFORM.                    
"prepare_field_catalog
    *---------------------------------------------------------------------*
    
*       FORM LAYOUT_SORT_BUILD                                        *
    
*---------------------------------------------------------------------*
    
*       Sorting                                                       *
    
*---------------------------------------------------------------------*
    
*  -->  LT_SORT                                                       *
    
*---------------------------------------------------------------------*
    FORM layout_sort_build CHANGING lt_sort TYPE slis_t_sortinfo_alv.
     DATA ls_sort TYPE slis_sortinfo_alv.
    
* Key
     CLEAR ls_sort.
     ls_sort
-fieldname = 'KEY'.  "#EC *
     ls_sort-spos      = 1.
     ls_sort
-up        = 'X'.
     ls_sort
-subtot    = 'X'.
     APPEND ls_sort TO lt_sort.
    ENDFORM.  
" LAYOUT_sort_build
    *&---------------------------------------------------------------------*
    
*&      Form  selection
    
*&---------------------------------------------------------------------*
    
*       text
    
*----------------------------------------------------------------------*
    
*  -->  p1        text
    
*  <--  p2        text
    
*----------------------------------------------------------------------*
    FORM selection .
    
* load the testing data
     gt_outtab
-key = 'Group 1'. gt_outtab-num = 10. gt_outtab-unit = 'PCS'.
     APPEND gt_outtab.
     gt_outtab
-key = 'Group 1'. gt_outtab-num = 10. gt_outtab-unit = 'TON'.
     APPEND gt_outtab.
     gt_outtab
-key = 'Group 1'. gt_outtab-num = 20. gt_outtab-unit = 'PCS'.
     APPEND gt_outtab.

     gt_outtab
-key = 'Group 2'. gt_outtab-num = 20. gt_outtab-unit = 'TON'.
     APPEND gt_outtab.
     gt_outtab
-key = 'Group 2'. gt_outtab-num = 40. gt_outtab-unit = 'PCS'.
     APPEND gt_outtab.
     gt_outtab
-key = 'Group 2'. gt_outtab-num = 10. gt_outtab-unit = 'TON'.
     APPEND gt_outtab.
    ENDFORM.                    
" selection
0
相关文章