ALV 含打印 全选 Checkbox,贴在此处方便 下次参考

*&---------------------------------------------------------------------*
*& Report      Z02MMR022
*&
*&---------------------------------------------------------------------*
*  Author: Vince
*  Closeing Date:
*  Description: List of Billing Notification
************************************************************************
*  Ver    Date       Author    Modify Des
************************************************************************
*  1.    2013/03/10 Vince  New Program
************************************************************************
REPORT YTEST999  MESSAGE-ID ZHR01 .


**********************************************************************
* TABLES
**********************************************************************


**********************************************************************
* TYPES
**********************************************************************
TYPES : BEGIN  OF TP_HEAD ,
  EBELN  LIKE EKKO -EBELN , "Contract Number
  CONTRNAME  TYPE STRING , "Contract Description
  DEPARTMENT  TYPE STRING , "Department
  WAERS  LIKE EKKO -WAERS , "Currency
  KTWRT  LIKE EKKO -KTWRT , "Contract Amount
  KDATB  LIKE EKKO -KDATB , "Contract Start Date
  KDATE  LIKE EKKO -KDATE , "Contract End Date
  LIFNR  LIKE EKKO -LIFNR , "vendor
  NAME1  TYPE CHAR200 , "Vendor name
  BAMOUNT  LIKE EKKO -KTWRT , "Billing Amount
   END  OF TP_HEAD .

TYPES : BEGIN  OF TP_OUT ,
  CBOX  TYPE AQ_MARKBG ,
  EBELN  LIKE EKPO -EBELN , "Service Order
  EBELP  LIKE EKPO -EBELP , "Line Item
  MATKL  TYPE CHAR100 , "Service Category
  TXZ01  LIKE EKPO -TXZ01 , "Short Text
  MBLNR  LIKE MKPF -MBLNR , "Service Receipt
  WRBTR  LIKE EKBE -WRBTR , "Amount
  BNNUM  LIKE Z02MMBNNO -BNNUM , "BN Number
  BNDAT  LIKE Z02MMBNNO -BNDAT , "BN Date
  GJAHR  LIKE EKBE -GJAHR ,
  BOX_NAME  ,
   END  OF TP_OUT .

**********************************************************************
* DATA
**********************************************************************
DATA GS_HEAD  TYPE TP_HEAD .
DATA GT_OUT  TYPE  TABLE  OF TP_OUT ,
      GS_OUT  TYPE TP_OUT .

DATA GT_PRINT  TYPE  TABLE  OF TP_OUT ,
      GS_PRINT  TYPE TP_OUT .

DATA GT_FCAT  TYPE  SLIS_T_FIELDCAT_ALV ,
      GS_FCAT  TYPE  LINE  OF  SLIS_T_FIELDCAT_ALV ,
      GT_SORT  TYPE SLIS_T_SORTINFO_ALV ,
      GS_SORT  TYPE  LINE  OF SLIS_T_SORTINFO_ALV ,
      GS_LAYO  TYPE SLIS_LAYOUT_ALV ,
      GS_SETTINGS  TYPE LVC_S_GLAY .

**********************************************************************
* CONSTANTS
**********************************************************************


**********************************************************************
* SELECTION SCREEN
**********************************************************************
SELECTION-SCREEN  BEGIN  OF  BLOCK BL01  WITH  FRAME  TITLE  TEXT - 001 .
PARAMETERS :P_BUKRS  LIKE EKKO -BUKRS  DEFAULT  '1000' OBLIGATORY .
PARAMETERS :P_EBELN  LIKE EKKO -EBELN OBLIGATORY .
SELECTION-SCREEN  END  OF  BLOCK BL01 .

**********************************************************************
* START OF SELECTION
**********************************************************************
START-OF-SELECTION .
   PERFORM FRM_GET_HEAD .
   PERFORM FRM_GET_ITEM .

**********************************************************************
* END OF SELECTION
**********************************************************************
END-OF-SELECTION .
   PERFORM FRM_BUILD_FIELDCAT .
   PERFORM FRM_SET_LAYOUT .
   PERFORM FRM_DISPLAY_ALV .

**********************************************************************
* SUBROUTINES
**********************************************************************
*&---------------------------------------------------------------------*
*&      Form  FRM_GET_HEAD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_GET_HEAD  .
   DATA LT_READ  LIKE  TABLE  OF TLINE  WITH  HEADER  LINE .
   DATA L_NAME  LIKE THEAD -TDNAME .
   DATA L_ADRNR  LIKE LFA1 -ADRNR ,
        LS_ADRC  LIKE ADRC .

   SELECT  SINGLE EBELN WAERS KTWRT KDATB KDATE LIFNR
     INTO CORRESPONDING  FIELDS  OF GS_HEAD
     FROM EKKO
     WHERE EBELN  P_EBELN
       AND BUKRS  P_BUKRS
       AND BSART  'CCTR' .

   IF SY -SUBRC  EQ  0 .

    L_NAME  P_EBELN .

     CALL  FUNCTION  'READ_TEXT'
       EXPORTING
         ID                       'K93'
         LANGUAGE                 SY -LANGU
        NAME                     L_NAME
        OBJECT                   'EKKO'
       TABLES
         LINES                    LT_READ
       EXCEPTIONS
         ID                       1
         LANGUAGE                 2
        NAME                     3
        NOT_FOUND                4
        OBJECT                   5
        REFERENCE_CHECK          6
        WRONG_ACCESS_TO_ARCHIVE  7
         OTHERS                   8 .
     IF SY -SUBRC  EQ  0 .
       LOOP  AT  LT_READ .
         CONCATENATE GS_HEAD -CONTRNAME LT_READ -TDLINE  INTO GS_HEAD -CONTRNAME .
       ENDLOOP .
     ENDIF .

     SELECT  SINGLE ADRNR   INTO L_ADRNR
         FROM LFA1
         WHERE LIFNR  GS_HEAD -LIFNR .

     SELECT  SINGLE INTO LS_ADRC
       FROM ADRC
       WHERE ADDRNUMBER  L_ADRNR .

     CONCATENATE LS_ADRC -NAME1 LS_ADRC -NAME2  INTO GS_HEAD -NAME1 .

   ELSE .

     MESSAGE S000 (ZHR01 DISPLAY  LIKE  'E' .
     STOP .
   ENDIF .

ENDFORM .                     " FRM_GET_HEAD
*&---------------------------------------------------------------------*
*&      Form  FRM_GET_ITEM
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_GET_ITEM  .
   DATA LT_EKPO  TYPE  TABLE  OF EKPO ,
        LS_EKPO  TYPE EKPO ,
        LT_EKBE  TYPE  TABLE  OF EKBE ,
        LS_EKBE  TYPE EKBE ,
        LT_T023T  TYPE  TABLE  OF T023T ,
        LS_T023T  TYPE T023T ,
        LT_EKKO  TYPE  TABLE  OF EKKO ,
        LS_EKKO  TYPE EKKO ,
        L_INDEX  TYPE SY - INDEX .

   CLEAR :LT_EKPO ,LT_EKBE ,LT_T023T ,LT_EKKO ,L_INDEX .

   SELECT FROM EKPO  INTO  TABLE LT_EKPO
     WHERE KONNR  GS_HEAD -EBELN .

   CHECK LT_EKPO  IS  NOT  INITIAL .

   SELECT FROM EKKO  INTO  TABLE LT_EKKO
     FOR  ALL ENTRIES  IN LT_EKPO
     WHERE EBELN  LT_EKPO -EBELN
       AND BSART  'ZSPO' .

   LOOP  AT LT_EKPO  INTO LS_EKPO .
    L_INDEX  SY -TABIX .
     READ  TABLE LT_EKKO  INTO LS_EKKO  WITH  KEY EBELN  LS_EKPO -EBELN .
     IF SY -SUBRC  NE  0 .
       DELETE LT_EKPO  INDEX L_INDEX .
     ENDIF .
   ENDLOOP .

   CHECK LT_EKPO  IS  NOT  INITIAL .

   SELECT FROM EKBE  INTO  TABLE LT_EKBE
     FOR  ALL ENTRIES  IN LT_EKPO
     WHERE EBELN  LT_EKPO -EBELN
       AND EBELP  LT_EKPO -EBELP
       AND VGABE  '1' .

   SELECT FROM T023T  INTO  TABLE LT_T023T
     FOR  ALL ENTRIES  IN LT_EKPO
     WHERE MATKL  LT_EKPO -MATKL .

   LOOP  AT LT_EKBE  INTO LS_EKBE .
    GS_OUT -EBELN  LS_EKBE -EBELN .
    GS_OUT -EBELP  LS_EKBE -EBELP .
     READ  TABLE LT_EKPO  INTO LS_EKPO  WITH  KEY EBELN  GS_OUT -EBELN EBELP  GS_OUT -EBELP .
     READ  TABLE LT_T023T  INTO LS_T023T  WITH  KEY MATKL  LS_EKPO -MATKL .
    GS_OUT -MATKL  LS_T023T -WGBEZ60 .
    GS_OUT -TXZ01  LS_EKPO -TXZ01 .
    GS_OUT -MBLNR  LS_EKBE -BELNR .
    GS_OUT -WRBTR  LS_EKBE -WRBTR .
     IF LS_EKBE -SHKZG  EQ  'H' .
      GS_OUT -WRBTR  GS_OUT -WRBTR .
     ENDIF .
    GS_OUT -GJAHR  LS_EKBE -GJAHR .

     SELECT  SINGLE BNNUM BNDAT  INTO  (GS_OUT -BNNUM ,GS_OUT -BNDAT )
       FROM Z02MMBNNO
       WHERE MBLNR  GS_OUT -MBLNR
         AND GJAHR  GS_OUT -GJAHR .

     IF GS_OUT -BNNUM  IS  NOT  INITIAL .
      GS_HEAD -BAMOUNT  GS_HEAD -BAMOUNT + GS_OUT -WRBTR .
     ENDIF .

     APPEND GS_OUT  TO GT_OUT .

     CLEAR GS_OUT ,LS_EKPO ,LS_T023T .

   ENDLOOP .


ENDFORM .                     " FRM_GET_ITEM
*&---------------------------------------------------------------------*
*&      Form  FRM_BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_BUILD_FIELDCAT  .
   CLEAR GS_FCAT .
  GS_FCAT -FIELDNAME  'CBOX' .
  GS_FCAT -SELTEXT_L  'Select' .
  GS_FCAT - CHECKBOX  'X' .
  GS_FCAT -FIX_COLUMN  'X' .
  GS_FCAT - EDIT  'X' .
  GS_FCAT -OUTPUTLEN  '5' .
   APPEND GS_FCAT  TO GT_FCAT .
   DEFINE APPEND_FCAT .
     CLEAR GS_FCAT .
    GS_FCAT -FIELDNAME  &1 .
    GS_FCAT -SELTEXT_L  &2 .
    GS_FCAT -NO_OUT  =  &3 .
    GS_FCAT -NO_ZERO  &4 .
    GS_FCAT -OUTPUTLEN  &5 .
     APPEND GS_FCAT  TO GT_FCAT .
   END-OF-DEFINITION .
  APPEND_FCAT  'EBELN'  'Service Order' ( 001 )   ''   ''  '12' .
  APPEND_FCAT  'EBELP'  'Line Item' ( 002 )   ''   ''  '6' .
  APPEND_FCAT  'MATKL'  'Service Category' ( 003 )   ''   ''  '50' .
  APPEND_FCAT  'TXZ01'  'Short Text' ( 004 )   ''   ''  '30' .
  APPEND_FCAT  'MBLNR'  'Service Receipt' ( 005 )   ''   ''  '12' .
  APPEND_FCAT  'WRBTR'  'Amount' ( 006 )   ''   ''  '13' .
  APPEND_FCAT  'BNNUM'  'BN Number' ( 007 )   ''   ''  '20' .
  APPEND_FCAT  'BNDAT'  'BN Date' ( 008 )   ''   ''  '12' .

ENDFORM .                     " FRM_BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*&      Form  FRM_SET_LAYOUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_SET_LAYOUT  .
  GS_LAYO -ZEBRA  'X' .
*  GS_LAYO-COLWIDTH_OPTIMIZE = 'X'.
  GS_LAYO -BOX_FIELDNAME  'BOX_NAME' .
ENDFORM .                     " FRM_SET_LAYOUT
*&---------------------------------------------------------------------*
*&      Form  FRM_DISPLAY_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_DISPLAY_ALV  .
  GS_SETTINGS -EDT_CLL_CB  'X' .
   CALL  FUNCTION  'REUSE_ALV_GRID_DISPLAY'
     EXPORTING
      I_CALLBACK_PROGRAM        SY -REPID
      IS_LAYOUT                 GS_LAYO
      IT_FIELDCAT               GT_FCAT
      I_GRID_SETTINGS           GS_SETTINGS
      I_CALLBACK_PF_STATUS_SET  'FRM_SET_STATUS'
      I_CALLBACK_USER_COMMAND   'FRM_USER_COMMAND'
      I_SAVE                    'A'
      I_DEFAULT                 'X'
     TABLES
      T_OUTTAB                  GT_OUT .
ENDFORM .                     " FRM_DISPLAY_ALV


*&---------------------------------------------------------------------*
*&      Form  frm_USER_COMMAND
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_UCOMM    text
*      -->SELFIELD   text
*----------------------------------------------------------------------*
FORM FRM_USER_COMMAND  USING P_UCOMM  TYPE SY -UCOMM SELFIELD  TYPE SLIS_SELFIELD .
   CASE P_UCOMM .
     WHEN  '&SALL' .
       PERFORM FRM_SELECT_ALL  USING  'X' .
      SELFIELD - REFRESH  'X' .
     WHEN  '&DESAL' .
       PERFORM FRM_SELECT_ALL  USING  ' ' .
      SELFIELD - REFRESH  'X' .
     WHEN  '&PRINT' .
       PERFORM FRM_PRINT_BN .
     WHEN  '&CBN' .
       PERFORM FRM_GENERATE_BN .
      SELFIELD - REFRESH  'X' .
   ENDCASE .
ENDFORM .                     "user_command

*&---------------------------------------------------------------------*
*&      Form  FRM_SET_STATUS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_EXTAB    text
*----------------------------------------------------------------------*
FORM FRM_SET_STATUS  USING P_EXTAB  TYPE SLIS_T_EXTAB .
   SET  PF-STATUS  'STATUS01' .
ENDFORM .                     "f_status
*&---------------------------------------------------------------------*
*&      Form  FRM_SELECT_ALL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_0737   text
*----------------------------------------------------------------------*
FORM FRM_SELECT_ALL   USING     VALUE (P_X ) .
   DATA LS_OUT  LIKE GS_OUT .

   LOOP  AT GT_OUT  INTO LS_OUT .
    LS_OUT -CBOX  P_X .
     MODIFY GT_OUT  FROM LS_OUT  INDEX SY -TABIX .
   ENDLOOP .

ENDFORM .                     " FRM_SELECT_ALL
*&---------------------------------------------------------------------*
*&      Form  FRM_GENERATE_BN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_GENERATE_BN  .
   DATA :L_BN ( 3 TYPE N .
   DATA :LS_Z02MMBNNO  LIKE Z02MMBNNO .
   CLEAR L_BN .
   SELECT  MAX BMSNO  INTO L_BN  FROM Z02MMBNNO  WHERE EBELN  P_EBELN .
   LOOP  AT GT_OUT  INTO GS_OUT  WHERE BNNUM  ''  AND CBOX  'X'  .
    L_BN  L_BN +  1 .
     CONCATENATE  'BN' P_EBELN  '-'  L_BN  INTO GS_OUT -BNNUM .
    GS_OUT -BNDAT  SY -DATUM .
    GS_HEAD -BAMOUNT  GS_HEAD -BAMOUNT + GS_OUT -WRBTR .
     CLEAR LS_Z02MMBNNO .
    LS_Z02MMBNNO -MBLNR  GS_OUT -MBLNR .
    LS_Z02MMBNNO -GJAHR  GS_OUT -GJAHR .
    LS_Z02MMBNNO -EBELN  P_EBELN .
    LS_Z02MMBNNO -BMSNO  L_BN  .
    LS_Z02MMBNNO -BNNUM  GS_OUT -BNNUM .
    LS_Z02MMBNNO -BNDAT  GS_OUT -BNDAT .
     INSERT Z02MMBNNO  FROM LS_Z02MMBNNO .
     MODIFY GT_OUT  FROM GS_OUT  INDEX SY -TABIX .
   ENDLOOP .
ENDFORM .                     " FRM_GENERATE_BN
*&---------------------------------------------------------------------*
*&      Form  FRM_PRINT_BN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_PRINT_BN  .
   DATA FUNC_MOD_NAME  TYPE RS38L_FNAM ,                             " 子程序名
        OUTPUT_OPTIONS  TYPE SSFCOMPOP ,                             " SAP Smart Forms: 智能写作器 (传输) 选项
        IT_JOB_OUTPUT_INFO  TYPE SSFCRESCL ,
        CONTROL_PARAMETERS  TYPE SSFCTRLOP .                         " Smart Forms: 控制结构

   CLEAR GT_PRINT .

   LOOP  AT GT_OUT  INTO GS_OUT  WHERE CBOX  'X'  AND BNNUM  NE  '' .
    GS_PRINT  GS_OUT .
     APPEND GS_PRINT  TO GT_PRINT .
     CLEAR GS_PRINT ,GS_OUT .
   ENDLOOP .

   CHECK GT_PRINT  IS  NOT  INITIAL .

   CALL  FUNCTION  'SSF_FUNCTION_MODULE_NAME'
     EXPORTING
      FORMNAME            'ZMM_FORM_06'
     IMPORTING
      FM_NAME             FUNC_MOD_NAME
     EXCEPTIONS
      NO_FORM             1
      NO_FUNCTION_MODULE  2
       OTHERS              3 .
  OUTPUT_OPTIONS -TDNEWID         'X' .
  CONTROL_PARAMETERS -NO_CLOSE    SPACE .
*  control_parameters-no_open    = 'X'.
  CONTROL_PARAMETERS -PREVIEW     'X' .
*  control_parameters-no_dialog  = 'X'.


   CALL  FUNCTION FUNC_MOD_NAME
     EXPORTING
      CONTROL_PARAMETERS  CONTROL_PARAMETERS
      OUTPUT_OPTIONS      OUTPUT_OPTIONS
     EXCEPTIONS
      FORMATTING_ERROR    1
      INTERNAL_ERROR      2
      SEND_ERROR          3
      USER_CANCELED       4
       OTHERS              5 .
   IF SY -SUBRC <>  0 .
   ENDIF .

ENDFORM .                     " FRM_PRINT_BN
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值