ABAP 自建透明表维护
*&---------------------------------------------------------------------*
*& Report ZMMR011
*&
*&---------------------------------------------------------------------*
*&程序名称:供应商、工厂对应公里数维护
*&事物代码:ZMM031
*&导入模板:无
*&作者:
*&时间:2016/3/2
*&更新时间:2016/3/3
*&---------------------------------------------------------------------*
REPORT zmmr011.
TABLES: tvbvk ,cskt ,ztmm002.
TYPES:ty_xs LIKE v_tvbur.
DATA:gt_xs LIKE TABLE OF v_tvbur.
DATA:wa_xs TYPE v_tvbur.
DATA:edit(1) VALUE ''."ALV是否处于可编辑状态
DATA:lt_lfa1 TYPE lfa1 OCCURS 0 WITH HEADER LINE. "供应商内表
DATA:lt_t001w TYPE t001w OCCURS 0 WITH HEADER LINE."工厂内表
FIELD-SYMBOLS: <f1>, <f2>, <f3>.
TYPES:BEGIN OF ty_tab.
INCLUDE TYPE ztmm002.
TYPES: lifnr_name LIKE lfa1-name1,
werks_name LIKE t001w-name1.
TYPES:END OF ty_tab.
DATA :gt_zz TYPE STANDARD TABLE OF ty_tab .
DATA:wa_zz TYPE ty_tab.
FORM get_data.
* CALL FUNCTION 'VIEW_GET_DATA'
* EXPORTING
* view_name = 'V_TVBUR'
* TABLES
* data = gt_xs.
SELECT *
FROM lfa1
INTO CORRESPONDING FIELDS OF TABLE lt_lfa1.
SELECT *
FROM t001w
INTO CORRESPONDING FIELDS OF TABLE lt_t001w.
SELECT *
FROM ztmm002
INTO CORRESPONDING FIELDS OF TABLE gt_zz.
LOOP AT gt_zz INTO wa_zz.
READ TABLE lt_lfa1 WITH KEY lifnr = wa_zz-lifnr.
wa_zz-lifnr_name = lt_lfa1-name1.
READ TABLE lt_t001w WITH KEY werks = wa_zz-werks.
wa_zz-werks_name = lt_t001w-name1.
MODIFY gt_zz FROM wa_zz.
ENDLOOP.
ENDFORM.
DATA: gs_fcat TYPE lvc_s_fcat,
gt_fcat TYPE lvc_t_fcat,
gs_layo TYPE lvc_s_layo,
gs_grid TYPE lvc_s_glay.
DATA: gt_event TYPE slis_t_event WITH HEADER LINE,
gt_event_exit TYPE slis_t_event_exit WITH HEADER LINE.
DATA: ref_grid TYPE REF TO cl_gui_alv_grid .
"parameters: p_ds type c as checkbox.
START-OF-SELECTION.
PERFORM get_data.
PERFORM show_data_to_alv.
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS handle_modify
FOR EVENT data_changed_finished OF cl_gui_alv_grid
IMPORTING e_modified et_good_cells.
METHODS data_changed
FOR EVENT data_changed OF cl_gui_alv_grid
IMPORTING er_data_changed.
ENDCLASS.
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD handle_modify.
* PERFORM refresh.
DATA stbl TYPE lvc_s_stbl.
stbl-row = 'X'." 基于行的稳定刷新
stbl-col = 'X'." 基于列稳定刷新
CALL METHOD ref_grid->refresh_table_display
EXPORTING
is_stable = stbl.
ENDMETHOD.
METHOD data_changed.
DATA: ls_mod_cells TYPE lvc_s_modi,
tvalue TYPE string.
DATA: ls_stable TYPE lvc_s_stbl.
DATA: l_message TYPE string.
*
DATA:wa_lfa1 TYPE lfa1.
DATA:wa_t001w TYPE t001w.
DATA:row_no TYPE i.
CHECK er_data_changed->mt_inserted_rows[] IS INITIAL.
LOOP AT er_data_changed->mt_good_cells INTO ls_mod_cells.
CLEAR tvalue.
CALL METHOD er_data_changed->get_cell_value
EXPORTING
i_row_id = ls_mod_cells-row_id
i_fieldname = ls_mod_cells-fieldname
IMPORTING
e_value = tvalue.
IF ls_mod_cells-fieldname EQ 'LIFNR'.
LOOP AT lt_lfa1 INTO wa_lfa1 .
IF wa_lfa1-lifnr EQ tvalue.
CALL METHOD er_data_changed->modify_cell
EXPORTING
i_row_id = ls_mod_cells-row_id
i_fieldname = 'LIFNR_NAME'
i_value = wa_lfa1-name1.
EXIT.
ENDIF.
CLEAR lt_lfa1.
ENDLOOP.
ENDIF.
IF ls_mod_cells-fieldname EQ 'WERKS'.
LOOP AT lt_t001w INTO wa_t001w.
IF wa_t001w-werks EQ tvalue.
CALL METHOD er_data_changed->modify_cell
EXPORTING
i_row_id = ls_mod_cells-row_id
i_fieldname = 'WERKS_NAME'
i_value = wa_t001w-name1.
EXIT.
ENDIF.
CLEAR wa_t001w.
ENDLOOP.
ENDIF.
* DATA:blank_zz TYPE ztmm002.
*
*
*
* LOOP AT tab_tvgrt INTO wa_tvgrt .
* IF wa_tvgrt-vkgrp EQ tvalue.
* CLEAR wa_zz.
* LOOP AT gt_zz INTO wa_zz.
* IF wa_zz-vkgrp EQ tvalue AND tvalue NE ''.
* MESSAGE i001(00) WITH '已有相同的销售组!'.
*
* "MODIFY gt_zz INDEX ls_mod_cells-row_id FROM blank_zz .
* CLEAR wa_tvgrt.
* "如果有重复的销售组,那么将输入的销售组清空
* CALL METHOD er_data_changed->modify_cell
* EXPORTING
* i_row_id = ls_mod_cells-row_id
* i_fieldname = 'VKGRP'
* i_value = ''.
* ENDIF.
*
* CONTINUE.
* ENDLOOP.
*
* CALL METHOD er_data_changed->modify_cell
* EXPORTING
* i_row_id = ls_mod_cells-row_id
* i_fieldname = 'VKGRPTEXT'
* i_value = wa_tvgrt-bezei.
* ENDIF.
* CLEAR wa_tvgrt.
* ENDLOOP.
*
* IF strlen( tvalue ) GT 4.
*
*
* LOOP AT tab_cskt INTO wa_cskt .
* IF wa_cskt-kostl EQ tvalue.
* CALL METHOD er_data_changed->modify_cell
* EXPORTING
* i_row_id = ls_mod_cells-row_id
* i_fieldname = 'LTEXT'
* i_value = wa_cskt-ltext.
* EXIT.
* ENDIF.
* CLEAR wa_cskt.
* ENDLOOP.
* ENDIF.
ENDLOOP.
ENDMETHOD. "HANDLE_MODIFY
ENDCLASS. "LCL_EVENT_RECEIVER IMPLEMENTATION
DATA gt_event_receiver TYPE REF TO lcl_event_receiver .
FORM show_data_to_alv.
CLEAR gt_fcat[].
PERFORM set_fcat USING edit.
PERFORM set_layout.
PERFORM show_alv TABLES gt_fcat gt_zz[]
USING gs_layo.
ENDFORM.
FORM frm_edit_alv." TABLES GT.
*DATA: ls_row TYPE lvc_s_cell,
* lt_rows TYPE lvc_t_cell.
* "CLEAR GT_HEADER.
* "CLEAR GT_ITEMS.
* CALL METHOD ref_grid->GET_SELECTED_CELLS
* IMPORTING
* et_index_cells = lt_rows
ENDFORM.
FORM show_changed_alv.
CLEAR gt_fcat[].
* IF edit EQ '' .
* edit = 'X'.
* ELSE.
* edit = ''.
* ENDIF.
PERFORM set_fcat USING edit.
PERFORM set_layout.
PERFORM show_alv TABLES gt_fcat gt_zz[]
USING gs_layo.
PERFORM frm_edit_alv.
ENDFORM.
FORM set_fcat USING edit.
PERFORM csalv_set_fcat USING :
" 'Field' 'Text' 'Edit' 'Zero' 'Type' 'Qfieldname' 'Key' 'Hostspot' 'Emphasize' 'Checkbox'
'LIFNR' '供应商或债权人账号' edit '' '' '' '' '' '' '' '' '' '' 'X' 'ZTMM002' 'LIFNR',
'LIFNR_NAME' '供应商名称' '' '' '' '' '' '' '' '' '' '' '' '' '' '',
'WERKS' '工厂' edit '' '' '' '' '' '' '' '' '' '' 'X' 'ZTMM002' 'WERKS',
'WERKS_NAME' '工厂名称' '' '' '' '' '' '' '' '' '' '' '' '' '' '',
'MENGE' '数量' edit '' '' '' '' '' '' '' '' '' '' 'X' '' '',
'MEINS' '单位' edit '' '' '' '' '' '' '' '' '' '' 'X' '' ''.
"'KOSTL' '成本中心' edit '' '' '' '' '' '' '' '' '' '' 'X' 'CSKS' 'KOSTL' ,
"'LTEXT' '成本中心描述' '' '' '' '' '' '' '' '' '' '' '' '' '' '' .
* 'ADD01' '车主' '' '' '' '' '' '' '' '' '' '' '',
* 'EXTI1' '卸货点' '' '' '' '' '' '' '' '' '' '' '',
* 'ADD02' '司机' '' '' '' '' '' '' '' '' '' '' '',
* 'BFART' '车厢类型' '' '' '' '' '' '' '' '' '' '0' '',
*
* 'BEIZHU' '备注' 'X' '' '' '' '' '' '' '' '' '' 'X'.
" 'zsel' '是否打印 ' 'X' '' '' '' '' '' '' 'X' ''.
ENDFORM. " SET_FCAT
FORM set_layout .
gs_layo
-zebra = 'X'.
* gs_layout-stylefname = 'FIELD_STYLE'.
gs_layo
-cwidth_opt = 'X'.
ENDFORM. " SET_LAYOUT
*&---------------------------------------------------------------------*
FORM csalv_set_fcat USING
p_name
p_text
p_edit
p_zero
p_type
p_qfieldname
p_key
p_hotspot
p_emphasize
p_checkbox
p_do_sum
p_decimals_out
p_no_out
p_f4availabl
p_ref_table
p_ref_field
.
gs_fcat
-fieldname = p_name.
* gs_fcat-reptext_l =
* gs_fcat-selddictxt =
gs_fcat
-reptext = p_text.
gs_fcat
-edit = p_edit.
gs_fcat
-no_zero = p_zero.
gs_fcat
-datatype = p_type.
gs_fcat
-qfieldname = p_qfieldname.
gs_fcat
-key = p_key.
gs_fcat
-hotspot = p_hotspot.
gs_fcat
-emphasize = p_emphasize.
gs_fcat
-checkbox = p_checkbox.
gs_fcat
-do_sum = p_do_sum.
gs_fcat
-decimals_o = p_decimals_out.
gs_fcat
-no_out = p_no_out.
gs_fcat
-f4availabl = p_f4availabl.
gs_fcat
-ref_table = p_ref_table.
gs_fcat
-ref_field = p_ref_field.
APPEND gs_fcat TO gt_fcat.
ENDFORM. "csalv_set_fcat
FORM show_alv TABLES pt_fcat
pt_tab
USING ps_layout.
gs_grid
-edt_cll_cb = 'X'."当屏幕失去焦点时,自动刷新
gt_event
-name = 'CALLER_EXIT'. "slis_ev_caller_exit_at_start事件
gt_event
-form = 'FM_BUTTON'.
APPEND gt_event .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program
= sy-repid
i_callback_user_command
= 'USER_COMMAND'
i_grid_settings
= gs_grid
i_callback_pf_status_set
= 'SET_PF_STATUS'
is_layout_lvc
= ps_layout
it_fieldcat_lvc
= pt_fcat[]
it_events
= gt_event[]
* it_event_exit = gt_event_exit[]
TABLES
t_outtab
= pt_tab
EXCEPTIONS
program_error
= 1
OTHERS = 2.
ENDFORM. "csalv_set_fcat
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield
TYPE slis_selfield.
CASE r_ucomm.
WHEN '&CHANGE'.
IF edit EQ '' .
edit = 'X'.
ELSE.
edit = ''.
ENDIF.
PERFORM show_changed_alv.
WHEN '&BACK'.
LEAVE PROGRAM.
WHEN '&ADD_ROW'.
* CLEAR wa_zz.
* DATA:end TYPE i.
* DESCRIBE TABLE gt_zz LINES end.
*
* READ TABLE gt_zz INDEX end INTO wa_zz.
* IF wa_zz-vkbur IS INITIAL AND gt_zz is NOT INITIAL .
* MESSAGE i001(00) WITH '不能继续添加行!'.
* exit.
* ENDIF.
"edit = ''.
CLEAR wa_zz.
IF edit EQ 'X'.
APPEND wa_zz TO gt_zz.
"PERFORM show_changed_alv.
PERFORM show_data_to_alv.
ENDIF.
WHEN '&SAVE_DATA'.
DATA:lt_ztmm002 TYPE TABLE OF ztmm002.
DATA:wa_ztmm002 TYPE ztmm002.
CLEAR wa_ztmm002.
DELETE FROM ztmm002 .
MOVE-CORRESPONDING gt_zz TO lt_ztmm002.
IF lt_ztmm002 IS NOT INITIAL.
LOOP AT lt_ztmm002 INTO wa_ztmm002 .
IF wa_ztmm002-lifnr IS NOT INITIAL AND wa_ztmm002-werks IS NOT INITIAL.
INSERT INTO ztmm002 VALUES wa_ztmm002 .
ENDIF.
ENDLOOP.
ENDIF.
IF sy-subrc EQ 0.
MESSAGE i001(00) WITH '保存成功!'.
ELSE.
MESSAGE i001(00) WITH '保存失败!'.
ENDIF.
WHEN '&DELE_ROW'.
DATA:ls_row TYPE lvc_s_row,
lt_rows
TYPE lvc_t_row.
DATA:del_rows TYPE STANDARD TABLE OF ty_tab.
CALL METHOD ref_grid->get_selected_rows
IMPORTING
et_index_rows
= lt_rows
* et_row_no =
.
CLEAR wa_zz.
LOOP AT lt_rows INTO ls_row.
READ TABLE gt_zz INTO wa_zz INDEX ls_row-index.
"delete gt_zz INDEX ls_row-index.
"DELETE ztmm002 FROM wa_zz.
APPEND wa_zz TO del_rows.
ENDLOOP.
LOOP AT del_rows INTO wa_zz.
DELETE TABLE gt_zz FROM wa_zz.
ENDLOOP.
CLEAR del_rows.
CLEAR ls_row.
CLEAR lt_rows.
PERFORM show_changed_alv.
ENDCASE.
ENDFORM.
FORM set_pf_status USING rt_extab TYPE slis_t_extab..
SET PF-STATUS 'STANDARD'.
ENDFORM. "SET_PF_STATUS
FORM fm_button USING e_grid TYPE slis_data_caller_exit.
DATA: lt_f4 TYPE lvc_t_f4,
ls_f4
TYPE lvc_s_f4.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
* EXPORTING
* IR_SALV_FULLSCREEN_ADAPTER =
IMPORTING
* ET_EXCLUDING =
* E_REPID =
* E_CALLBACK_PROGRAM =
* E_CALLBACK_ROUTINE =
e_grid
= ref_grid
* ET_FIELDCAT_LVC =
* ER_TRACE =
* E_FLG_NO_HTML =
* ES_LAYOUT_KKBLO =
* ES_SEL_HIDE =
* ET_EVENT_EXIT =
* ER_FORM_TOL =
* ER_FORM_EOL =
.
* CALL METHOD ref_grid->check_changed_data.
* 设置enter事件
CALL METHOD ref_grid->register_edit_event
EXPORTING
i_event_id
= cl_gui_alv_grid=>mc_evt_enter
EXCEPTIONS
error
= 1
OTHERS = 2.
CREATE OBJECT gt_event_receiver.
SET HANDLER gt_event_receiver->handle_modify FOR ref_grid.
SET HANDLER gt_event_receiver->data_changed FOR ref_grid.
ENDFORM.
ABAP 自建透明表维护的更多相关文章
- 通过ABAP程序创建透明表
最近在解决用户账号问题的时候,需要通过ABAP程序创建透明表,查询了相关资料,总结如下. 通过ABAP程序创建透明表,主要利用了4个函数: DDIF_TABL_ACTIVATE: 激活透明表 GOX_ ...
- abap 开发之创建表维护生成器
在sap开发中有时需要对一些自建表维护数据,但又不想写程序,怎么办呢??这个时候我们可以直接生成个表维护生成器,为其定义一个事物码就ok了.以下是表格维护生成器的生成步骤. 首先我们需要先定义表.输入 ...
- sap透明表、结构、簇介绍以及查找表方法
sap透明表.结构.簇介绍以及查找表方法 一些人在写开发功能说明书的时候不知道如何去找屏幕字段对应的透明表,下面我来介绍一个比较有效的方法:首先简单介绍一下概念:在SAP中的表的种类有以下三种:Tra ...
- ABAP简单表维护的制作
为了知识的积累,特作了个简单的表维护. 因为自己之前做dynpro程序的时候建了一个Tree node的表,所以就不在此重复.(在表的交付和维护页签中标的属性要是‘允许标准表维护的’) 直接Alt+U ...
- 【ABAP系列】SAP ABAP 为表维护生成器创建事务代码
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP 为表维护生成器 ...
- SAP 透明表之间的关联字段
VTTK-TPLST=TTDST-TPLST(装运点的关联表及描述表字段TTDST-BEZEI) VTTK-ROUTE=TVROT-ROUTE(装运线路关联表及描述表字段TVROT-BEZEI) VT ...
- sm30表维护做排序
好吧,之前有人问过,因为代码太少就一直没发...今天给出来吧 众所周知,表维护其实就是个TC,只是表维护是统一的,没有使用通用名内表名什么的,这个就不多说了,来重点: TC的一般排序可以放在:1,PB ...
- SAP 通过屏幕字段查看透明表
我要查看创建采购订单屏幕上抬头部分付款条件的这个透明表中的字段. 图1. 1.首先准备好MM模块中的常用透明表. 图2. 2.把光标放在字段上,按F1,再点击图中技术信息按钮. 图3. 3.在弹出的技 ...
- sap表维护工具来维护自定义表&视图簇的使用
一.通过表维护工具维护自定义表 1.SE11创建表 2.se11界面的菜单:实用程序->Table Maintenance Generator其实这里就是调用SE54 3.sm30 调用维护好的 ...
随机推荐
- html 等页面防止中文出现乱码的终极解决方案
网页UTF-8中文乱码问题解决方法 网页UTF-8中文乱码问题解决方法只有经过多方面测试的东西才有质量的保证和说服力,之前一直都是在本地做开发,经过本地测试也是通过的,但一发布到远程服务器上就问题百出 ...
- 简单实用的PHP防注入类实例
这篇文章主要介绍了简单实用的PHP防注入类实例,以两个简单的防注入类为例介绍了PHP防注入的原理与技巧,对网站安全建设来说非常具有实用价值,需要的朋友可以参考下 本文实例讲述了简单实用的PHP防注 ...
- Vue 入门指南 JS
Vue 入门指南 章节导航 英文:http://vuejs.org/guide/index.html 介绍 vue.js 是用来构建web应用接口的一个库 技术上,Vue.js 重点集中在MVVM模式 ...
- webapp中fixed问题解决方案
主要问题: 1,头部输入框固定后,只要再滑动内容的话,输入框会随着滑动内容而滑动. 2,在低端机:2.3以下的安卓机,你会发现怎么解决都不行的,系统浏览器是不会支持的,头部底部固定的话会滑动内容而滑动 ...
- ASP CDONTS.NEWMAIL组件发送电邮(附下载)
附CDONT.NEWMAIL组件下载地址:http://files.cnblogs.com/files/colinliu/cdonts.rar ASP常规发送方法: <% dim mail se ...
- Ruby基本语法规则
1.Ruby常用数据类型 Numbers, Strings, Booleans my_num = 25 my_boollean = true (or false) my_string = " ...
- Hadoop之Hive 安装_(hadoop 集群)
Hive mysql的metastore安装准备(***掌握***) 在nameNode1机子上实践: 把hive-0.12.0.tar.gz解压到/itcast/ # tar -zxvf hive- ...
- ubutu之Navicat安装
1.下载navicat111_premium_cs.tar.gz压缩包 2.进入压缩包所在目录,执行一下命令解压 tar -zxvf navicat111_premium_cs.r.gz 3.进入解压 ...
- CSU 1337 搞笑版费马大定理(2013湖南省程序设计竞赛J题)
题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1337 解题报告:虽然x和y的范围都是10^8,但是如果a 是大于1000的话,那么a^3 ...
- Reflow(渲染)和Repaint(重绘)
Reflow(渲染):对于DOM结构中的各个元素都有自己的盒模型,浏览器根据各种样式(浏览器的.开发人员定义的等)来计算,并根据计算结果将元素放到它该出现的位置,这个过程称之为reflow. refl ...