SAP ABAP编程 ALV--按钮响应与刷新
2014-09-02 09:46
369 查看
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 C LENGTH 1, "备注
SEL TYPE C , "选中状态
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 = '<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
销售组织, 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 C LENGTH 1, "备注
SEL TYPE C , "选中状态
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 = '<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
相关文章推荐
- ABAP:利用SAP定时器自动刷新ALV
- ABAP:利用SAP定时器自动刷新ALV
- ABAP:利用SAP定时器自动刷新ALV
- SAP ABAP OO ALV 获取当前的alv事件 包括f4帮助,回车按钮,等其他全部按钮alv操作
- sap abap alv画面项目编辑设值之后,自动刷新编辑值到alv画面
- SAP ABAP ALV(LVC)的一个自定义事件(F4帮助事件,回车ENTER按钮事件)的一个实例
- [ZT]ABAP:利用SAP定时器自动刷新ALV
- ABAP:利用SAP定时器自动刷新LIST
- ABAP--在SAP中设计自动刷新的报表代码
- ABAP--关于SAP Control Framework(入门GUI编程的不错的基础介绍)
- ABAP--关于SAP Control Framework(入门GUI编程的不错的基础介绍)
- ABAP--关于SAP Control Framework(入门GUI编程的不错的基础介绍)
- abap屏幕编程-按钮
- ABAP--SAP是如何控制REUSE_ALV_GRID_DISPLAY函数嵌套调用的返回控制
- Mini SAP 6.2 安装 ABAP/4 编程
- ABAP--在SAP中设计自动刷新的报表代码
- [abap] 刷新ALV定位到当前记录行
- ABAP:利用SAP定时器自动刷新LIST
- ABAP--关于SAP Control Framework(入门GUI编程的不错的基础介绍)
- ABAP--SAP是如何回写CL_GUI_ALV_GRID_BASE的MT_MODIFIED_CELLS的