SAP ABAP编程 ALV--按钮响应与刷新

1,数据定义部分要求的结构体:
  销售组织,     VBAK-VKORG
分销渠道,     VBAK-VTWEG
产品组,       VBAK-SPART
  订单号(即销售凭证), VBAK-VBELN
项目号,        VBAP-POSEX
物料号,        VBAP-MATNR
数量, VBAP-KWMENG
单位,        VBAP-ZIEME
净价, VBAP-NETPR
货币, VBAP-WAERK
请求交货日期 VBEP-EDATU
2,选择屏幕字段:
销售组织(多选)
分销渠道(多选)
产品组(多选)
订单号(多选),
物料号(多选),
请求交货日期(多选,必选,默认从本月第一天到当前日期)
3,读取数据:会用到的系统表有:销售订单抬头信息(VBAK),销售订单项目信息(VBAP),计划行数据(VBEP)
4,ALV抬头部分显示格式:
        销售订单报表
        日期:XXXX年XX月XX日格式(系统当前日期)
        用户名:XXXX  
ALV输出的字段有:
销售组织,分销渠道,产品组,订单号,项目号,物料号,数量,单位,净价,货币,请求交货日期
-------------------------------------------------------------------------------------------
新增需求:
1,根据已创建的销售订单结构体自定义一张自建表。
2,ALV显示界面中每行增加一个复选框,同时增加‘全选’和‘取消全选’,‘保存’三个按钮。

3,ALV显示界面中增加一列‘备注’,并且为可输入状态。 ZBOX C 1

4,点‘保存’按钮时,把‘复选框’打上勾的记录存放入自建表中。

*以下是程序

REPORT  Y0821_REPORTS_SALES  MESSAGE-ID Y0822_REPORTS_SALES .
TABLES VBAK ,VBAP ,VBEP .
*****************数据定义*****************
DATA BEGIN  OF REPORT_DATA ,
      VKORG  LIKE VBAK -VKORG ,    "销售组织,
      VTWEG  LIKE VBAK -VTWEG ,    "分销渠道,
      SPART  LIKE VBAK -SPART ,    "产品组,
      VBELN  LIKE VBAK -VBELN ,    "订单号(即销售凭证)
      POSEX  LIKE VBAP -POSEX ,    "项目号,
      MATNR  LIKE VBAP -MATNR ,    "物料号,
      KWMENG  LIKE VBAP -KWMENG ,   "数量,
      ZIEME  LIKE VBAP -ZIEME ,    "单位,
      NETPR  LIKE VBAP -NETPR ,    "净价,
      WAERK  LIKE VBAP -WAERK ,    "货币,
      EDATU   LIKE VBEP -EDATU ,    "请求交货日期
      ZBOX  TYPE  LENGTH  1 ,   "备注
      SEL  TYPE  ,                 "选中状态
   END  OF REPORT_DATA .

DATA :REPORT_WA  LIKE REPORT_DATA .   "YREPORTS_SALES自定义的自建表
DATA REPORT_TAB  LIKE  TABLE  OF REPORT_DATA .

********************ALV数据*********
TYPE -POOLS SLIS .
DATA T_FIELDCAT  TYPE SLIS_T_FIELDCAT_ALV "字段 列表
      LS_FIELDCAT  TYPE SLIS_FIELDCAT_ALV ,   " 字段 工作区
      IS_LAYOUT  TYPE SLIS_LAYOUT_ALV .       "    布局格式
DATA GWK_GRID_SETTING  LIKE LVC_S_GLAY .     "标记选中列

*****************选择屏幕*************
SELECT -OPTIONS :
    S_VKORG  FOR VBAK -VKORG ,
    S_VTWEG  FOR VBAK -VTWEG ,
    S_SPART  FOR VBAK -SPART ,
    S_VBELN  FOR VBAK -VBELN ,
    S_MATNR  FOR VBAP -MATNR  DEFAULT  '100-200' ,
    S_DATU   FOR VBEP -EDATU OBLIGATORY .

INITIALIZATION .
   DATA BEGIN_DATA  LIKE SY -DATUM .
  BEGIN_DATA  SY -DATUM .
  BEGIN_DATA+6 ( 2 '01' .
  S_DATU -LOW  BEGIN_DATA .
  S_DATU -HIGH  SY -DATUM .
   APPEND S_DATU .

START - OF -SELECTION .
**************通过条件筛选符合的数据*************
   SELECT  DISTINCT
    AK ~VKORG
    AK ~VTWEG
    AK ~SPART
    AK ~VBELN
    AP ~POSEX
    AP ~MATNR
    AP ~KWMENG
    AP ~ZIEME
    AP ~NETPR
    AP ~WAERK
    EP ~EDATU
   INTO CORRESPONDING  FIELDS  OF  TABLE REPORT_TAB
     FROM VBAK  AS AK
     JOIN VBAP  AS AP  ON AK ~MANDT  AP ~MANDT  AND AK ~VBELN  AP ~VBELN
     JOIN VBEP  AS EP  ON AK ~MANDT  EP ~MANDT  AND AK ~VBELN  EP ~VBELN
     WHERE AK ~VKORG  IN S_VKORG  AND AK ~VTWEG  IN S_VTWEG  AND  AK ~SPART  IN S_SPART
     AND AK ~VBELN  IN S_VBELN  AND AP ~MATNR  IN S_MATNR  AND EP ~EDATU  IN S_DATU .

END - OF -SELECTION .

*******列表信息***********
  LS_FIELDCAT -FIELDNAME  'SEL' " 列表内容 数据
  LS_FIELDCAT - CHECKBOX  'X' .
  LS_FIELDCAT -FIX_COLUMN  'X' .   "固定列
  LS_FIELDCAT - EDIT  'X' .
  LS_FIELDCAT -SELTEXT_L  '复选框' .    " 列表头
   APPEND LS_FIELDCAT  TO T_FIELDCAT .
   CLEAR LS_FIELDCAT .

  LS_FIELDCAT -FIELDNAME  'VKORG' " 列表内容 数据
  LS_FIELDCAT -SELTEXT_L  '销售组织' .    " 列表头
   APPEND LS_FIELDCAT  TO T_FIELDCAT .
   CLEAR LS_FIELDCAT .

  LS_FIELDCAT -FIELDNAME  'VTWEG' " 列表内容 数据
  LS_FIELDCAT -SELTEXT_L  '分销渠道' .    " 列表头
   APPEND LS_FIELDCAT  TO T_FIELDCAT .
   CLEAR LS_FIELDCAT .

  LS_FIELDCAT -FIELDNAME  'VBELN' " 列表内容 数据
  LS_FIELDCAT -SELTEXT_L  '订单号' .    " 列表头
   APPEND LS_FIELDCAT  TO T_FIELDCAT .
   CLEAR LS_FIELDCAT .

  LS_FIELDCAT -FIELDNAME  'SPART' " 列表内容 数据
  LS_FIELDCAT -SELTEXT_L  '产品组' .    " 列表头
   APPEND LS_FIELDCAT  TO T_FIELDCAT .
   CLEAR LS_FIELDCAT .

  LS_FIELDCAT -FIELDNAME  'POSEX' " 列表内容 数据
  LS_FIELDCAT -SELTEXT_L  '项目号' .    " 列表头
   APPEND LS_FIELDCAT  TO T_FIELDCAT .
   CLEAR LS_FIELDCAT .

  LS_FIELDCAT -FIELDNAME  'MATNR' " 列表内容 数据
  LS_FIELDCAT -SELTEXT_L  '物料号' .    " 列表头
   APPEND LS_FIELDCAT  TO T_FIELDCAT .
   CLEAR LS_FIELDCAT .

  LS_FIELDCAT -FIELDNAME  'KWMENG' " 列表内容 数据
  LS_FIELDCAT -SELTEXT_L  '数量' .    " 列表头
   APPEND LS_FIELDCAT  TO T_FIELDCAT .
   CLEAR LS_FIELDCAT .

  LS_FIELDCAT -FIELDNAME  'ZIEME' " 列表内容 数据
  LS_FIELDCAT -SELTEXT_L  '单位' .    " 列表头
   APPEND LS_FIELDCAT  TO T_FIELDCAT .
   CLEAR LS_FIELDCAT .

  LS_FIELDCAT -FIELDNAME  'NETPR' " 列表内容 数据
  LS_FIELDCAT -SELTEXT_L  '净价' .    " 列表头
   APPEND LS_FIELDCAT  TO T_FIELDCAT .
   CLEAR LS_FIELDCAT .

  LS_FIELDCAT -FIELDNAME  'WAERK' " 列表内容 数据
  LS_FIELDCAT -SELTEXT_L  '货币' .    " 列表头
   APPEND LS_FIELDCAT  TO T_FIELDCAT .
   CLEAR LS_FIELDCAT .

  LS_FIELDCAT -FIELDNAME  'EDATU' " 列表内容 数据
  LS_FIELDCAT -SELTEXT_L  '请求交货日期' .    " 列表头
   APPEND LS_FIELDCAT  TO T_FIELDCAT .
   CLEAR LS_FIELDCAT .

  LS_FIELDCAT -FIELDNAME  'ZBOX' " 列表内容 数据
  LS_FIELDCAT - EDIT  'X' .
  LS_FIELDCAT -SELTEXT_L  '备注' .    " 列表头
  LS_FIELDCAT -outputlen  1 .   "允许输入长度
   APPEND LS_FIELDCAT  TO T_FIELDCAT .
   CLEAR LS_FIELDCAT .


**********格式变化************
  IS_LAYOUT -ZEBRA  'X' .    " 是否有斑纹的页面列表输出
  IS_LAYOUT -NO_VLINE  'X' "是否不输出竖线

  GWK_GRID_SETTING-EDT_CLL_CB 'X'.              "点击按钮后刷新


   CALL  FUNCTION  'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
*    I_INTERFACE_CHECK                 = ' '
*    I_BYPASSING_BUFFER                = ' '
*    I_BUFFER_ACTIVE                   = ' '
    I_CALLBACK_PROGRAM                 'Y0821_REPORTS_SALES'
    I_CALLBACK_PF_STATUS_SET           'SELECT_EVENT'   "列表按钮 栏
    I_CALLBACK_USER_COMMAND            'USER_CLICK'    "点击按钮响应事件
*    I_CALLBACK_TOP_OF_PAGE            = ' '
    I_CALLBACK_HTML_TOP_OF_PAGE        'REPORT_HEADER'
*    I_CALLBACK_HTML_END_OF_LIST       = ' '
*    I_STRUCTURE_NAME                  =
*    I_BACKGROUND_ID                   = ' '
*    I_GRID_TITLE                      =
    I_GRID_SETTINGS                    GWK_GRID_SETTING
     IS_LAYOUT                          IS_LAYOUT
     IT_FIELDCAT                        T_FIELDCAT
*    IT_EXCLUDING                      =
*    IT_SPECIAL_GROUPS                 =
*    IT_SORT                           =
*    IT_FILTER                         =
*    IS_SEL_HIDE                       =
*    I_DEFAULT                         = 'X'
*    I_SAVE                            = ' '
*    IS_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
*    I_HTML_HEIGHT_TOP                 = 0
*    I_HTML_HEIGHT_END                 = 0
*    IT_ALV_GRAPHICS                   =
*    IT_HYPERLINK                      =
*    IT_ADD_FIELDCAT                   =
*    IT_EXCEPT_QINFO                   =
*    IR_SALV_FULLSCREEN_ADAPTER        =
*  IMPORTING
*    E_EXIT_CAUSED_BY_CALLER           =
*    ES_EXIT_CAUSED_BY_USER            =
     TABLES
      T_OUTTAB                           REPORT_TAB
   EXCEPTIONS                                  "出现的异常类型
    PROGRAM_ERROR                      1
     OTHERS                             2
             .
   IF SY -SUBRC <>  0 .
* Implement suitable error handling here
   ENDIF .
*&---------------------------------------------------------------------*
*       ALV的表头
*----------------------------------------------------------------------*
FORM REPORT_HEADER  USING P_CL_DD  TYPE  REF  TO CL_DD_DOCUMENT .

************定义登陆日期***********
   DATA LOG_DATE  TYPE STRING .

*************定义缓冲区变量**********
   DATA M_P  TYPE  I ,
        M_BUFFER  TYPE STRING .

   CONCATENATE SY -DATUM+0 ( 4 '年'
              SY -DATUM+4 ( 2 '月'
              SY -DATUM+6 ( 2 '日'
               INTO LOG_DATE .

  M_BUFFER  '

销售订单报表

'
.

   CALL  METHOD P_CL_DD ->HTML_INSERT
     EXPORTING
      CONTENTS  M_BUFFER
     CHANGING
       POSITION  M_P .

   CONCATENATE  '日期:' LOG_DATE
               '   用户名:' SY -UNAME  INTO M_BUFFER .
   CALL  METHOD P_CL_DD ->HTML_INSERT
     EXPORTING
      CONTENTS  M_BUFFER
     CHANGING
       POSITION  M_P .

ENDFORM .                     "REPORT_HEADER
*&---------------------------------------------------------------------*
*       报表打印按钮
*----------------------------------------------------------------------*
FORM SELECT_EVENT  USING P_EXTAB  TYPE  SLIS_T_EXTAB .
   SET  PF-STATUS  'BUTTON' .

ENDFORM .                     "PF_STATUS
*&---------------------------------------------------------------------*
*       点击按钮响应事件
*----------------------------------------------------------------------*
FORM USER_CLICK  USING I_UCOMM  LIKE SY -UCOMM
                         I_SELFIELD  TYPE  SLIS_SELFIELD .
   DATA S_WA  LIKE YREPORTS_SALES .
   DATA S_ITAB  LIKE  TABLE  OF YREPORTS_SALES .   " REPORT_TAB

   CASE I_UCOMM .
     WHEN  'SELEC_ALL' .

       LOOP  AT REPORT_TAB  INTO REPORT_WA .
        REPORT_WA -SEL  'X' .
         MODIFY REPORT_TAB  FROM REPORT_WA .
       ENDLOOP .

     WHEN  'NO_SELECT' .

       LOOP  AT REPORT_TAB  INTO REPORT_WA .
        REPORT_WA -SEL  '' .
         MODIFY REPORT_TAB  FROM REPORT_WA .
       ENDLOOP .

     WHEN  'SAVE' .

*****************保存选取的数据********
       CLEAR S_ITAB .
       LOOP  AT REPORT_TAB  INTO REPORT_WA .
         CASE REPORT_WA -SEL .
           WHEN  'X' .
             APPEND REPORT_WA  TO S_ITAB .
         ENDCASE .
       ENDLOOP .
*      BREAK-POINT.
       IF S_ITAB  IS  INITIAL .
         MESSAGE E001 .
       ELSE .
       ENDIF .
*        BREAK QINLZ.
************把数据写入数据库*********
       LOOP  AT  S_ITAB  INTO S_WA .
         MODIFY YREPORTS_SALES  FROM S_WA .
         CLEAR S_WA .
       ENDLOOP .
       MESSAGE  I000 .
***********************打印功能************
     WHEN  'ZPRINT' .

       CLEAR S_ITAB .
       LOOP  AT REPORT_TAB  INTO REPORT_WA .
         CASE REPORT_WA -SEL .
           WHEN  'X' .
             APPEND REPORT_WA  TO S_ITAB .
         ENDCASE .
       ENDLOOP .
       IF S_ITAB  IS  INITIAL .
         MESSAGE E001 .
       ELSE .
*        BREAK QINLZ.
         CALL  FUNCTION  '/1BCDWB/SF00000276'                        "打印的smartforms程序
* EXPORTING
*   ARCHIVE_INDEX              =
*   ARCHIVE_INDEX_TAB          =
*   ARCHIVE_PARAMETERS         =
*   CONTROL_PARAMETERS         =
*   MAIL_APPL_OBJ              =
*   MAIL_RECIPIENT             =
*   MAIL_SENDER                =
*   OUTPUT_OPTIONS             =
*   USER_SETTINGS              = 'X'
* IMPORTING
*   DOCUMENT_OUTPUT_INFO       =
*   JOB_OUTPUT_INFO            =
*   JOB_OUTPUT_OPTIONS         =
           TABLES
            ITAB                        S_ITAB
  EXCEPTIONS
   FORMATTING_ERROR            1
   INTERNAL_ERROR              2
   SEND_ERROR                  3
   USER_CANCELED               4
    OTHERS                      5
                   .
         IF SY -SUBRC <>  0 .
* Implement suitable error handling here
         ENDIF .

       ENDIF .
   ENDCASE .

  I_SELFIELD - REFRESH  'X' .
ENDFORM .                     "SELEC_ALL

你可能感兴趣的:(SAP,ABAP编程)