ABAP 交货单屏幕增强 增加自建表
需求描述:
实际业务中,交货单行项目存在多个传票号,所以需要在交货单行项目自定义屏幕上增加一个长文本框(或者表),如下图所示

实现过程:
1. 屏幕添加控件
①在自定义屏幕添加自定义控件

②在PBO中定义事件

这是定义函数组全部变量
这是创建文本框代码

③设置文本框可编辑/只读

2. 将数据库表数据显示在屏幕上,需要考虑修改交货时不能覆盖用户输入数据,因为屏幕数据会传入ABAP内存所以仅当该内存不存在时才查询数据库表
3. 将屏幕输入数据保存至数据库表,通过MEMORY ID实现数据传输
①在屏幕数据回传函数中将屏幕数据传入ABAP内存

②对交货单处理增强点LE_SHP_DELIVERY_PROC创建实施,修改方法IF_EX_LE_SHP_DELIVERY_PROC~SAVE_DOCUMENT_PREPARE将ABAP内存数据更新数据库表

总是提示此文章质量较低,猜测是字数不够,所以附上源码
PROCESS BEFORE OUTPUT.MODULE TEXTEDIT_9200.MODULE STATUS_9200.PROCESS AFTER INPUT.
* MODULE USER_COMMAND_9001.
*&---------------------------------------------------------------------*
*& Module STATUS_9200 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE STATUS_9200 OUTPUT.LOOP AT SCREEN.IF GS_LIPS-WBSTA = 'C'.SCREEN-INPUT = '0'.IF GC_EDITOR IS NOT INITIAL.GC_EDITOR->SET_READONLY_MODE( 1 ).ENDIF.ELSE.ASSIGN ('(SAPMV50A)T180-TRTYP') TO .IF IS ASSIGNED.IF = 'A'.SCREEN-INPUT = '0'.IF GC_EDITOR IS NOT INITIAL.GC_EDITOR->SET_READONLY_MODE( 1 ).ENDIF.ELSE.SCREEN-INPUT = '1'.IF GC_EDITOR IS NOT INITIAL.GC_EDITOR->SET_READONLY_MODE( 0 ).ENDIF.ENDIF.ENDIF.ENDIF.MODIFY SCREEN.ENDLOOP.ENDMODULE.*&---------------------------------------------------------------------*
*& Module TEXTEDIT_9200 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE TEXTEDIT_9200 OUTPUT.DATA: LT_ZTSD053 TYPE STANDARD TABLE OF ZTSD053,LS_ZTSD053 TYPE ZTSD053,LV_ZZSUMMONS TYPE STRING,LV_LFIMG TYPE STRING,LV_STRING TYPE STRING.CLEAR: LT_ZTSD053, LV_ZZSUMMONS, LV_LFIMG, LV_STRING.* 创建文本框IF GC_CONTAINER IS INITIAL.CREATE OBJECT GC_CONTAINEREXPORTINGCONTAINER_NAME = 'GC_ZZSUMMONS'EXCEPTIONSCNTL_ERROR = 1CNTL_SYSTEM_ERROR = 2CREATE_ERROR = 3LIFETIME_ERROR = 4LIFETIME_DYNPRO_DYNPRO_LINK = 5.IF SY-SUBRC <> 0.MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNOWITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.ENDIF .CREATE OBJECT GC_EDITOREXPORTING" MAX_NUMBER_CHARS = 2000 "字数限制PARENT = GC_CONTAINERWORDWRAP_MODE = CL_GUI_TEXTEDIT=>WORDWRAP_AT_WINDOWBORDERWORDWRAP_POSITION = -1WORDWRAP_TO_LINEBREAK_MODE = CL_GUI_TEXTEDIT=>FALSEEXCEPTIONSERROR_CNTL_CREATE = 1ERROR_CNTL_INIT = 2ERROR_CNTL_LINK = 3ERROR_DP_CREATE = 4GUI_TYPE_NOT_SUPPORTED = 5OTHERS = 6.IF SY-SUBRC <> 0.MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNOWITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.ENDIF.GC_EDITOR->SET_TOOLBAR_MODE( 0 ).GC_EDITOR->SET_STATUSBAR_MODE( 0 ).ENDIF.* 获取内存数据IMPORT LT_ZTSD053 = LT_ZTSD053 FROM MEMORY ID 'ZTSD053'.IF SY-SUBRC <> 0.
* 查询传票号SELECT VBELN,POSNR,ZZSUMMONS,LFIMGINTO CORRESPONDING FIELDS OF TABLE @LT_ZTSD053FROM ZTSD053WHERE VBELN = @GS_LIPS-VBELN.IF SY-SUBRC <> 0.SELECT VBELN,POSNR,ZZSUMMONSINTO TABLE @DATA(LT_LIPS)FROM LIPSWHERE VBELN = @GS_LIPS-VBELNAND ZZSUMMONS <> ''.LOOP AT LT_LIPS INTO DATA(LS_LIPS).SPLIT LS_LIPS-ZZSUMMONS AT '|' INTO TABLE DATA(LT_ZZSUMMONS).LOOP AT LT_ZZSUMMONS INTO DATA(LS_ZZSUMMONS).LS_ZTSD053-VBELN = LS_LIPS-VBELN.LS_ZTSD053-POSNR = LS_LIPS-POSNR.SPLIT LS_ZZSUMMONS AT ':' INTO LS_ZTSD053-ZZSUMMONS LV_LFIMG.LS_ZTSD053-LFIMG = LV_LFIMG.APPEND LS_ZTSD053 TO LT_ZTSD053.CLEAR: LS_ZTSD053, LV_LFIMG.ENDLOOP.ENDLOOP.ENDIF.* 将传票号传入内存EXPORT LT_ZTSD053 = LT_ZTSD053 TO MEMORY ID 'ZTSD053'.ENDIF.* 编辑传票号转成长文本LOOP AT LT_ZTSD053 INTO LS_ZTSD053 WHERE VBELN = GS_LIPS-VBELNAND POSNR = GS_LIPS-POSNR.IF LS_ZTSD053-LFIMG IS NOT INITIAL.LV_LFIMG = LS_ZTSD053-LFIMG.CONDENSE LV_LFIMG.CONCATENATE LS_ZTSD053-ZZSUMMONS LV_LFIMGINTO LV_STRING SEPARATED BY ':'.ELSE.LV_STRING = LS_ZTSD053-ZZSUMMONS.ENDIF.IF LV_ZZSUMMONS IS INITIAL.LV_ZZSUMMONS = LV_STRING.ELSE.CONCATENATE LV_ZZSUMMONS LV_STRINGINTO LV_ZZSUMMONS SEPARATED BY '|'.ENDIF.ENDLOOP.GC_EDITOR->SET_TEXTSTREAM( LV_ZZSUMMONS ).ENDMODULE.
FUNCTION ZSD_SHP_ITEM_FROM_SUBSCREEN .
*"----------------------------------------------------------------------
*"*"本地接口:
*" EXPORTING
*" REFERENCE(ES_LIPS) TYPE LIPS
*"----------------------------------------------------------------------DATA: LT_LINE TYPE TABLE OF LINE,LT_TLINE TYPE TABLE OF TLINE,LT_ZTSD053 TYPE STANDARD TABLE OF ZTSD053,LS_ZTSD053 TYPE ZTSD053,LV_ZZSUMMONS TYPE STRING,LV_LFIMG TYPE STRING.* 获取传票号文本框内容LV_ZZSUMMONS = ZCL_UTIL_LONGTEXT=>GET_TXT_FROM_TE( IO_TE = GC_EDITOR ).* 清除内存中该行项目数据IMPORT LT_ZTSD053 = LT_ZTSD053 FROM MEMORY ID 'ZTSD053'.IF SY-SUBRC = 0.DELETE LT_ZTSD053 WHERE VBELN = GS_LIPS-VBELNAND POSNR = GS_LIPS-POSNR.ENDIF.* 编辑传票号以便写入自建表IF LV_ZZSUMMONS IS NOT INITIAL.SPLIT LV_ZZSUMMONS AT '|' INTO TABLE DATA(LT_ZZSUMMONS).LOOP AT LT_ZZSUMMONS INTO DATA(LS_ZZSUMMONS).LS_ZTSD053-VBELN = GS_LIPS-VBELN.LS_ZTSD053-POSNR = GS_LIPS-POSNR.SPLIT LS_ZZSUMMONS AT ':' INTO LS_ZTSD053-ZZSUMMONS LV_LFIMG.LS_ZTSD053-LFIMG = LV_LFIMG.APPEND LS_ZTSD053 TO LT_ZTSD053.CLEAR: LS_ZTSD053, LV_LFIMG.ENDLOOP.ENDIF.* 将传票号传入内存(增强ZEHM_QTC010_001 方法IF_EX_LE_SHP_DELIVERY_PROC~SAVE_DOCUMENT_PREPARE)EXPORT LT_ZTSD053 = LT_ZTSD053 TO MEMORY ID 'ZTSD053'.ES_LIPS = GS_LIPS.ES_LIPS-ZZSUMMONS = LV_ZZSUMMONS.ENDFUNCTION.
METHOD IF_EX_LE_SHP_DELIVERY_PROC~SAVE_DOCUMENT_PREPARE.DATA: LT_ZTSD053 TYPE STANDARD TABLE OF ZTSD053,LS_ZTSD053 TYPE ZTSD053,LV_ZZSUMMONS TYPE STRING.* 传票号写入自建表(数据来自函数 ZSD_SHP_ITEM_FROM_SUBSCREEN )IMPORT LT_ZTSD053 = LT_ZTSD053 FROM MEMORY ID 'ZTSD053'.IF SY-SUBRC = 0.
* 先清空历史数据READ TABLE CT_XLIKP INTO DATA(LS_LIKP) INDEX 1.IF SY-SUBRC = 0.DELETE FROM ZTSD053 WHERE VBELN = LS_LIKP-VBELN.ENDIF.MODIFY ZTSD053 FROM TABLE LT_ZTSD053.FREE MEMORY ID 'ZTSD053'.ENDIF.ENDMETHOD.
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
