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

来源:互联网 发布:大连seo 编辑:程序博客网 时间:2024/05/23 20:09
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.
TABLESVBAK,VBAP,VBEP.
*****************数据定义*****************
DATABEGIN 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自定义的自建表
DATAREPORT_TAB LIKE TABLE OF REPORT_DATA.

********************ALV数据*********
TYPE-POOLSSLIS.
DATAT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV"字段 列表
      LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV,  " 字段 工作区
      IS_LAYOUT TYPE SLIS_LAYOUT_ALV.      "    布局格式
DATAGWK_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.
  DATABEGIN_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.
  CLEARLS_FIELDCAT.

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

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

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

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

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

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

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

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

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

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

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

  LS_FIELDCAT-FIELDNAME 'ZBOX'" 列表内容 数据
  LS_FIELDCAT-EDIT 'X'.
  LS_FIELDCAT-SELTEXT_L '备注'.   " 列表头
  LS_FIELDCAT-outputlen 1.  "允许输入长度
  APPEND LS_FIELDCAT TO T_FIELDCAT.
  CLEARLS_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.

************定义登陆日期***********
  DATALOG_DATE TYPE STRING.

*************定义缓冲区变量**********
  DATAM_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 '<HTML><CENTER><H1>销售订单报表</H1></CENTER></HTML>'.

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

  CONCATENATE '<P ALIGN = CENTER >日期:' 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
0 0
原创粉丝点击