自建数据库表,并在ALV报表中直接向更新自建表中写数据范例(非常感谢JACK WU)
来源:互联网 发布:mac安装usb网卡驱动 编辑:程序博客网 时间:2024/05/22 03:35
JACK WU 真是一个大大的好人阿!不但给了我原程序做为参考,还帮我这种ABAP弱智改了改程序,终于可以用拉!真是开心阿!再次感谢一下,欠你两顿汤包。
前段时间,业务部门提出在SAP中建立各个业务部门流转的大报表,要能够象EXCEL那样留几个空格让自己填写,并储存到数据库中。其实这个问题还没有完全解决,我刚刚在JACK WU的帮助之下解决了第一步:自建数据库表,并在ALV报表中直接向更新自建表.接下来还有很多问题的,例如 数据共享的问题,用户互相锁定的问题,刷新的问题等等。
先将第一个问题写下来吧:
第一步:自建数据库表(TCODE:SE11)
1 在“Delivery and Maintenance”Tab屏幕设置“Data Browser/Table view Maint.”属性为“允许通过标准表格维护工具维护”
2 设计表格字段
3 设置表格技术设置,菜单:转到-》技术设置
4 保存激活。
就是第三步ABAP中用到的ZTEST1。需要注意的是一定要将关键字设置好,还有,关键字要将MANDT 客户端设置进去。
第二步:往数据库表里面增加一些范例的数据(TCODE:SE16)
第三步:编写报表()
*&---------------------------------------------------------------------*
*& Report Z_MM_TEST
*&
*&---------------------------------------------------------------------*
*&
*&ALV中输入数据进行修改
*&---------------------------------------------------------------------*
REPORT Z_MM_TEST MESSAGE-ID zmc01 NO STANDARD PAGE HEADING LINE-SIZE 500.
TABLES : ZTEST1,vbak.
TYPE-POOLS: slis.
************************************************************
*INTERNAL TABLE DEFINITION
************************************************************
DATA: BEGIN OF gt_yf occurs 0,
vbeln like vbak-vbeln,
ERNAM LIKE VBAK-ERNAM,
ERDAT like VBAK-erdat,
BZ01(20),
END OF gt_yf.
************************************************************
* Variable DEFINITION
***********************************************************
DATA: gt_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE,
gs_layout TYPE slis_layout_alv,
usercommand TYPE slis_fieldname VALUE 'USERCOMMAND',
gt_sort TYPE slis_t_sortinfo_alv.
DATA: progname LIKE sy-repid,
title(70).
DATA : gv_cancel(1) TYPE c,
gv_flag TYPE i.
************************************************************
* SELECTION-SCREEN
************************************************************
SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE text-bl1.
SELECTION-SCREEN SKIP 1.
SELECT-OPTIONS:
so_vbeln FOR vbak-vbeln,"提货日期
so_erdat FOR vbak-erdat."录入日期
SELECTION-SCREEN END OF BLOCK bl1.
***********************************************************
* START OF SELECTION
***********************************************************
START-OF-SELECTION.
PERFORM get_date.
END-OF-SELECTION.
PERFORM output_date.
*&---------------------------------------------------------------------*
*& Form GET_DATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_date .
SELECT vbak~VBELN vbak~ERNAM vbak~ERDAT
FROM vbak
INTO (gt_yf-VBELN, GT_YF-ERNAM ,GT_YF-ERDAT)
where vbak~vbeln IN so_vbeln "销售凭证
AND vbak~erdat IN so_erdat. "录入日期
* loop at gt_yf
select single bz01 from ZTEST1
into gt_yf-bz01
where vbeln = gt_yf-vbeln.
* modify gt_yf.
* clear gt_yf.
* endloop.
*modify gt_yf.
append gt_yf.
clear gt_yf.
endselect.
ENDFORM. " GET_DATE
*&---------------------------------------------------------------------*
*& Form OUTPUT_DATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM output_date .
REFRESH gt_fieldcat.
progname = sy-repid.
title = 'GLORIA TESTING 往自建内表填写数据'.
gs_layout-zebra = 'X'. "设置每行的背景颜色交错 显示。
gs_layout-colwidth_optimize = 'X'. "ALV输出时候自动优化宽 度
gs_layout-detail_popup = 'X'.
*2此处代码设置屏幕的chekbox选中字段
* gt_fieldcat-fieldname = 'GV_CHECK'.
* gt_fieldcat-seltext_m = '选择'.
* gt_fieldcat-outputlen = 1.
* gt_fieldcat-checkbox = 'X'.
* gt_fieldcat-input = 'X'.
* gt_fieldcat-edit = 'X'.
* APPEND gt_fieldcat.
* CLEAR gt_fieldcat.
*
gt_fieldcat-fieldname = 'VBELN'.
gt_fieldcat-seltext_m = '销售凭证'.
gt_fieldcat-outputlen = 50.
APPEND gt_fieldcat.
CLEAR gt_fieldcat.
gt_fieldcat-fieldname = 'ERDAT'.
gt_fieldcat-seltext_m = '提货日期'.
gt_fieldcat-outputlen = 10.
APPEND gt_fieldcat.
CLEAR gt_fieldcat.
gt_fieldcat-fieldname = 'ERNAM'.
gt_fieldcat-seltext_m = '创建人员'.
gt_fieldcat-outputlen = 10.
APPEND gt_fieldcat.
CLEAR gt_fieldcat.
gt_fieldcat-fieldname = 'BZ01'.
gt_fieldcat-seltext_m = '备注'.
gt_fieldcat-outputlen = 20.
gt_fieldcat-edit = 'X'.
APPEND gt_fieldcat.
CLEAR gt_fieldcat.
*3设置处理代码
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = progname
is_layout = gs_layout
it_fieldcat = gt_fieldcat[]
i_grid_title = title
i_callback_pf_status_set = 'PF_STATUS_SET'
i_callback_user_command = usercommand
* i_save = 'A'
TABLES
t_outtab = gt_yf
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " OUTPUT_DATE
*&---------------------------------------------------------------------*
*& FORM user_command
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM usercommand USING ucomm TYPE sy-ucomm
selfield TYPE slis_selfield.
DATA: lr_grid TYPE REF TO cl_gui_alv_grid.
data: l_valid type c.
*4此处代码将用户输入读入内表(这一步不可少)
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = lr_grid.
CALL METHOD lr_grid->check_changed_data.
*5此处代码阻止'REUSE_ALV_GRID_DISPLAY创建新的屏幕,造成屏幕多层
selfield-refresh = 'X'.
CASE sy-ucomm.
* WHEN 'DELE'.
* CLEAR sy-ucomm.
* LOOP AT gt_yf.
* IF gt_yf-gv_check = 'X'.
*请填写删除操作
* DELETE gt_yf.
* delete from ztest1 where vbeln = gt_yf-vbeln.
* ENDIF.
* ENDLOOP.
* 保存操作
WHEN 'SAVE'.
LOOP AT gt_yf.
* IF gt_yf-gv_check = 'X'.
*请填写修改操作
move-corresponding gt_yf to ztest1.
modify ztest1 from ztest1.
* ENDIF.
ENDLOOP.
COMMIT WORK.
ENDCASE.
ENDFORM. "USER_COMMAND
*******************************************************************************
form save_data.
endform.
*&---------------------------------------------------------------------*
*& FORM PF_STATUS_SET
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM pf_status_set USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'YFDJ' .
ENDFORM. "frm_PF_STATUS_SET
- 自建数据库表,并在ALV报表中直接向更新自建表中写数据范例(非常感谢JACK WU)
- 自建数据库表,并在ALV报表中直接向更新自建表中写数据范例
- 自建SE16N功能,修改数据库表数据
- EXCEL导入SAP自建数据库表中
- 在autocad中自建面板
- 【转载】将自建表数据内容包含在传输请求号中(SAP)
- 如何在ORCAD中自建仿真模型
- ABAP通过交互界面向自建表里添加/删除数据
- Android自建数据库操作
- 机房自建数据库
- 计算客 自建物流的wu人机实验(简单)(状态压缩+LCA)
- 自建表和标准表添加数据
- Android中自建应用调用系统联系人并返回结果
- 自建引入表
- 自建表注意事项
- Caffe学习之自建数据
- 在VC中自建操作BMP位图文件的类
- 在VC中自建操作BMP位图文件的类
- JS表单验证
- 比较好使的SQL语句
- 常用的正则表达式(转)
- oracle basic
- Type与Size
- 自建数据库表,并在ALV报表中直接向更新自建表中写数据范例(非常感谢JACK WU)
- CSS命名规则
- 缓冲区溢出原理浅析以及防护
- 很多人不清楚的20个windows XP秘密
- 关于数组的一些用法
- 用javascript做删除时的提示信息
- 华为面试题及答案
- VS2005的程序文件分发问题及解决
- chm 无法显示网页问题