您的位置:首页 > 编程语言

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: