背景:客户主数据中增加一个试图,保存客户、物料体系
步骤:
1.TCODE:SPRO进入后台配置,添加选项卡
2.实现BADI、创建实施类
3.新建函数组ZXD01、屏幕1000
4.编写屏幕流以及相关代码
屏幕流:
PROCESS BEFORE OUTPUT.
MODULE TC_CHANGE_TC_ATTR.
LOOP AT GT_KHWLTX WITH CONTROL TC CURSOR TC-CURRENT_LINE.
MODULE TC_GET_LINES.
ENDLOOP.
PROCESS AFTER INPUT.
LOOP AT GT_KHWLTX.
CHAIN.
FIELD GT_KHWLTX-MATNR.
FIELD GT_KHWLTX-MAKTX.
FIELD GT_KHWLTX-ZSYSTEM.
MODULE TC_MODIFY ON CHAIN-REQUEST.
ENDCHAIN.
FIELD GT_KHWLTX-MATNR MODULE GET_MAKTX ON CHAIN-INPUT. FIELD GT_KHWLTX-MANDT MODULE TC_MARK ON REQUEST. ENDLOOP.
MODULE TC_USER_COMMAND.
相关代码:
TABLES:KNA1.
FIELD-SYMBOLS: <FSE>.
CONSTANTS: C_ZSYSTEM(24) VALUE '(SAPMF02D)KNA1-ZSYSTEM'.
ASSIGN (C_ZSYSTEM) TO <FSE>.
KNA1-ZSYSTEM = <FSE>.
IF SEL_FALG IS INITIAL.
ASSIGN ('(SAPMF02D)KNA1-KUNNR') TO <FSE>.
SELECT * INTO CORRESPONDING FIELDS OF TABLE GT_KHWLTX FROM ZXD01_2 WHERE KUNNR = <FSE>.
SEL_FALG = 'X'.
ENDIF.
IF ( SY-TCODE = 'XD03' OR SY-TCODE = 'VD03' OR SY-TCODE = 'FD03') AND SY-UCOMM <> 'ENTR'.
LOOP AT SCREEN.
IF SCREEN-GROUP1 = 'GP1'.
SCREEN-INPUT = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
DATA: COLS LIKE LINE OF TC-COLS.
LOOP AT TC-COLS INTO COLS WHERE SCREEN-NAME = 'GT_KHWLTX-MATNR' OR SCREEN-NAME = 'GT_KHWLTX-ZSYSTEM'.
COLS-SCREEN-INPUT = 0.
MODIFY TC-COLS FROM COLS.
ENDLOOP.
ENDIF.
DESCRIBE TABLE GT_KHWLTX LINES TC-LINES.
TC-LINES = LINES( GT_KHWLTX ) + 20.
5.相关BADI
CUSTOMER_ADD_DATA
CUSTOMER_ADD_DATA_CS
6.相关方法:
IF_EX_CUSTOMER_ADD_DATA~SAVE_DATA “保存数据
IF_EX_CUSTOMER_ADD_DATA~CHECK_DATA_CHANGED ”标示是否数据有更改
IF_EX_CUSTOMER_ADD_DATA~CHECK_ADD_ON_ACTIVE “激活选项卡(屏幕组)
IF_EX_CUSTOMER_ADD_DATA_CS~GET_DATA "向结构传输自定义字段值 IF_EX_CUSTOMER_ADD_DATA_CS~GET_TAXI_SCREEN ”绑定增强相关的函数组和屏幕
7.BADI的实现代码示例
1) IF_EX_CUSTOMER_ADD_DATA~SAVE_DATA “保存数据
METHOD IF_EX_CUSTOMER_ADD_DATA~SAVE_DATA.
FIELD-SYMBOLS: <FSE> TYPE ANY TABLE,
<F_OUT_WA> TYPE ANY.
DATA:T_ZXD01_1 TYPE ZXD01_1,
GT_ZXD01_1 TYPE TABLE OF ZXD01_1,
DY_OUT TYPE REF TO DATA,
DY_OUT_WA TYPE REF TO DATA.
ASSIGN ('(SAPLZXD01)GT_KHWLTX[]') TO <FSE>.
CHECK <FSE> IS ASSIGNED.
ASSIGN DY_OUT->* TO <FSE>.
CREATE DATA DY_OUT_WA LIKE LINE OF <FSE>.
ASSIGN DY_OUT_WA->* TO <F_OUT_WA>.
LOOP AT <FSE> INTO <F_OUT_WA> .
MOVE-CORRESPONDING <F_OUT_WA> TO T_ZXD01_1.
T_ZXD01_1-KUNNR = I_KUNNR.
APPEND T_ZXD01_1 TO GT_ZXD01_1.
ENDLOOP.
DELETE FROM ZXD01_1 WHERE KUNNR = I_KUNNR.
MODIFY ZXD01_1 FROM TABLE GT_ZXD01_1.
ENDMETHOD.
2) IF_EX_CUSTOMER_ADD_DATA~CHECK_DATA_CHANGED ”标示是否数据有更改
METHOD IF_EX_CUSTOMER_ADD_DATA~CHECK_DATA_CHANGED. E_CHANGED = 'X'.
ENDMETHOD.
3) IF_EX_CUSTOMER_ADD_DATA~CHECK_ADD_ON_ACTIVE “激活选项卡(屏幕组)
METHOD IF_EX_CUSTOMER_ADD_DATA~CHECK_ADD_ON_ACTIVE. IF I_SCREEN_GROUP = 'ZK'.
E_ADD_ON_ACTIVE = 'X'.
ENDIF.
ENDMETHOD.
4) IF_EX_CUSTOMER_ADD_DATA_CS~GET_DATA "向结构传输自定义字段值
METHOD IF_EX_CUSTOMER_ADD_DATA_CS~GET_DATA.
CONSTANTS: ZSYSTEM(24) VALUE '(SAPLZXD01)KNA1-ZSYSTEM'. FIELD-SYMBOLS: <FSE> TYPE ANY.
ASSIGN (ZSYSTEM) TO <FSE>.
IF SY-SUBRC = 0.
S_KNA1-ZSYSTEM = <FSE>.
ENDIF.
ENDMETHOD.
5) IF_EX_CUSTOMER_ADD_DATA_CS~GET_TAXI_SCREEN ”绑定增强相关的函数组和屏幕
METHOD IF_EX_CUSTOMER_ADD_DATA_CS~GET_TAXI_SCREEN. IF I_TAXI_FCODE = 'ZBECUS01'.
E_SCREEN = '1000'.
E_PROGRAM = 'SAPLZXD01'.
E_HEADERSCREEN_LAYOUT = ''.
ENDIF.
ENDMETHOD.
8.最终效果图
1
第四章 将数据输出到屏幕
概览
内容
WRITE 语句 ..................................................................................................................1 在屏幕上定 位 WRITE 输出..........................................................................................3 格式化选项 ....................................................................................................................5 在屏幕上输 出符号和图 标 ............................................................................................7
输出屏幕上 的线和空行.............................................................................................8 垂直线.......................................................................................................................8 空行 ..........................................................................................................................8 将字段内容 作为复选框 输出.........................................................................................9 通过语句结 构使用 WRITE ...........................................................................................9
本节说明如何在屏幕上创建简单输出列表。为此,请使用 WRITE 语句。
下面将介绍:
ABAP/4 允许在屏幕和纸张上,生成比这里看到的更复杂和更有效的输出列表。这些介绍是后面章节(例如,创建列表)的基础。
WRITE 语句
在屏幕上输出数据的基本 ABAP/4 语句是 WRITE。
语法
WRITE <f>.
该语句以其标准格式,将字段 <f> 输出到当前列表中。默认情况下,该列表显示在屏幕上。 字段 <f> 可以是
任何数据对象(参见 数据对象 (页 3–8) )
字段符号或公式参数(参见使用字符符号 (页使用字段符号))
文本符号(参见 Working with Text Elements (页 5–1) )
PDF created with pdfFactory Pro trial version
2
选择“打印”,可以直接从输出屏幕打印当前输出列表。如果为程序定
义选项屏幕(参见 使用选择屏幕),就可以在选择屏幕上选择“执行和
打印”,然后,该列表不输出到屏幕上,而是直接发送到打印机。
PROGRAM SAPMZTST.
WRITE 'Hello, here I am!'.
当启动该程序时,系统离开当前屏幕(这可能是“ABAP/4 编辑器:初始
屏幕”),并如下所示转到输出屏幕:
输出屏幕与在程序属性中指定的程序标题有相同的名称(参见指定程序
属性 (页 1–3) )。
屏幕上的第一行包含列表表头。默认情况下,该列表表头与程序标题相
同。但是,可以由实际程序外的程序标题单独维护列表表头。详细信息,
参见(使用文本摘要 (页 5–1) )。当前页号(1)出现在右边。 列表表头后紧跟着一条水平线,然后显示输出。
可以选择“搜索”,以搜索特定模式。
在屏幕上,输出通常是左对齐的。如果使用几个 WRITE 语句,输出字段就一个接一个显示,输出之间由列分开(如一个空格)。如果当前行没有足够空间,则开始新行。
PROGRAM SAPMTEST.
TABLES SPFLI.
.............
WRITE: 'COMPANY: ', SPFLI-CARRID.
注意冒号和逗号的用法(参见 语法结构 (页 2–3) )。
该示例中的程序段向屏幕输出两个字段:文字“COMPANY:”和表格工
作区 SPFLI 的组件 CARRID:
COMPANY: AA。
输出屏幕上的数据字段格式,依赖数据类型(参见 预定义的基本数据类型 (页 3–3) )。 予定义数据类型的输出格式
PDF created with pdfFactory Pro trial version
3
数据类型 输出长度 定位
C 字段长度
8
22
11
字段长度 左对齐 D F I N 左对齐 右对齐 右对齐 左对齐
右对齐 P 2 * 字段长度(+1)
T
X 6 2 * 字段长度 左对齐 左对齐
数字数据类型 F、I 和 P 是右对齐的,左边用空格填充。如果有足够的空间,也输出千位分隔符。如果类型 P 字段包含小数位,则默认输出长度增加一位。
对数据类型 D,日期的内部格式与输出格式不同。当输出数据使用
WRITE 语句时,系统自动以用户主记录中指定的格式(例如,
DD/MM/YYYY 或 MM/DD/YYYY),输出数据类型 D。
PROGRAM SAPMTEST.
DATA NUMBER TYPE P VALUE '-1234567.89' DECIMALS 2.
WRITE: 'Number', NUMBER, 'is packed'.
输出如下:
Number 1,234,567.89- is packed
字段 NUMBER 总长为 13,即,9 位数字(包括小数点)、前导负号和
作为分隔符的两个逗号。因为类型 P 字段的字段长度为 8,所以
NUMBER 字段的输出长度为 2*8+1=17。剩余的位置用四个空格填充。
这意味着,在文字‘Number’和数字自身之间有五个空格。
在屏幕上定位 WRITE 输出
如下所示,通过制定字段名称前面的格式规范,可以在屏幕上定位 WRITE 语句的输出:
PDF created with pdfFactory Pro trial version
4
语法
WRITE AT [/][<pos>][(<len>)] <f>.
此处
斜线‘/’表示新的一行
<pos> 是最长为三位数字的数字或变量,表示在屏幕上的位置
<len> 是最长为三位数字的数字或变量,表示输出长度
如果格式规范只包含直接值(即,不是变量),可以忽略关键字 AT。
WRITE 'First line.'.
WRITE 'Still first line.'
WRITE / 'Second line.'
WRITE /13 'Third line.'
这在屏幕上生成如下输出:
First Line. Still first line.
Second line.
Third line.
如果指定某一个位置 <pos>,则无论在该位置是否有可用的空间,或写有其它字段,总是在该位置输出字段。
DATA: LEN TYPE I VALUE 10,
POS TYPE I VALUE 11,
TEXT(10) VALUE '1234567890'
WRITE 'The text ------------ appears in the text.'.
WRITE AT POS(LEN) TEXT.
这在屏幕上生成如下输出:
The text -1234567890- appears in the text.
如果输出长度 <len> 太短,则显示几个字符。左边截断数字字段,并用星号(*)作前缀。右边截断所有其它字段,但是没有给出该字段较短的指示。
DATA: NUMBER TYPE I VALUE 1234567890,
TEXT(10) VALUE 'abcdefghij'.
WRITE: (5) NUMBER, /(5) TEXT.
PDF created with pdfFactory Pro trial version
5
输出如下:
*7890
abcde
格式化选项
对 WRITE 语句,可以使用不同的格式化选项。
语法
WRITE .... <f> <选项>.
所有数据类型的格式化选项
出左对齐。
CENTERED 出居中。
出右对齐。
UNDER <g> 直接开始于字段 <g> 下。
USING EDIT MASK
略字段 <f> 后的空格。 格式模板 <m>。
消对 ABAP/4 词典中指定的格式模板的激活。 果字段仅包含零,则用空格代替它们。对类型 C 和 N 字自动代替前导零。
数字字段的格式化选项
输出前导符号。 定义小数点后的数字位数。 类型 F 字段中,在 <e> 中定义幂数。 10**(-r) 乘类型P 字段,然后取整。 表格 TCURX 中的货币 <c> 格式化。
PDF created with pdfFactory Pro trial version
6
表格 T006 中为类型 P 字段所指定的单位 <u> 固定小
位数。
日期字段的格式化选项
用途
用户主记录中定义的分隔符
用户主记录中定义的分隔符
用户主记录中定义的分隔符
用户主记录中定义的分隔符
无分隔符。
无分隔符。
无分隔符。
关于格式选项和这些选项内例外原则的详细信息,参见 WRITE 语句的关键字文档。 以下是格式选项的一些示例。要获得更多的示例,参见章节创建列表。在用户主记录中,定义了数字字段的小数点字符和千位分隔符(分号或逗号)。
代码
DATA: G(5) VALUE 'Hello', F(5) VALUE 'Dolly'. WRITE: G, F. WRITE: /10 G, / F UNDER G. WRITE: / G NO-GAP, F.
出
DATA TIME TYPE T VALUE '154633'. WRITE: TIME,
/(8) TIME USING EDIT MASK WRITE: '000123', / '000123' NO-ZERO.
PDF created with pdfFactory Pro trial version
7
DATA FLOAT TYPE F VALUE WRITE FLOAT EXPONENT 3.
DATA PACK TYPE P VALUE '123.456' DECIMALS 3. WRITE PACK DECIMALS 2. WRITE: / PACK ROUND -2, / PACK ROUND -1, / PACK ROUND 1, / PACK ROUND 2.
WRITE: SY-DATUM, / SY-DATUM YYMMDD.
除了上表中显示的格式化选项外,还可以用 FORMAT 语句的格式化选项。这些选项允许指定输出的亮度和颜色。详细信息,参见FORMAT 语句。
在屏幕上输出符号和图标
使用下列语法,可以在屏幕上输出符号和 R/3 图标:
语法
WRITE <symbol-name> AS SYMBOL. WRITE <icon-name> AS ICON.
符号和图标的名称(<符号名> 和 <图标名>)是定义系统的常量,这些常量在包含程序 <SYMBOL> 和 <ICON>(尖括号是名称的一部分)中指定。这些包含程序也包含符号和图标的简短说明。输出符号和图标最简单的方法是使用语句结构(参见 通过语句结 构使用 WRITE (页 9) 中的示例)。
要使符号和图标对程序可用,必须在程序中输入恰当的包含程序或更易理解的包含程序 <LIST>。关于输入包含程序的详细信息,参见使用包含程序。
INCLUDE <SYMBOL>. INCLUDE <ICON>.
WRITE: / 'Phone Symbol:', SYM_PHONE AS SYMBOL.
PDF created with pdfFactory Pro trial version
8
SKIP.
WRITE: / 'Alarm Icon: ', ICON_ALARM AS ICON.
输出如下:
上面两个 INCLUDE 语句可以用单个 INCLUDE 语句替代
INCLUDE <LIST>.
输出屏幕上的线和空行
用下列语法,可以在输出屏幕上生成水平线:
语法
ULINE [AT [/][<pos>][(<len>)]].
它等同于
WRITE [AT [/][<pos>][(<len>)]] SY-ULINE.
AT 后的格式规范,与在 在屏幕上定 位 WRITE 输出 (页 3) 中为 WRITE 语句说明的格式规范完全一样。
如果没有格式规范,系统则开始新的一行,并用水平线填充该行。否则,只按指定输出水平线。
生成水平线的另一种方法,是在 WRITE 语句中键入恰当数量的连字符,如下所示: WRITE [AT [/][<pos>][(<len>)]] '-----...'.
垂直线
用下列语法,可以在输出屏幕上生成垂直线:
语法
WRITE [AT [/][<pos>]] SY-VLINE.
或
WRITE [AT [/][<pos>]] '|'.
空行
用下列语法,可以在输出屏幕上生成空行:
语法
SKIP [<n>].
该语句从当前行开始,在输出屏幕上生成 <n> 个空行。如果没有指定 <n> 的值,就输出一个空行。
要将输出定位在屏幕的指定行上,请使用: 语法
SKIP TO LINE <n>.
PDF created with pdfFactory Pro trial version
9
该语句允许将输出位置向上或向下移动。
要获得更多的信息和示例,参见 创建列表。
将字段内容作为复选框输出
使用下列语法,可以将字段的第一个字符,作为复选框输出到输出屏幕上:
语法
WRITE <f> AS CHECKBOX.
如果字段 <f> 的第一个字符是一个“X”,就显示复选框已填充。如果字段 <f> 的第一个字符是 SPACE,就显示复选框为空。
该语句创建的复选框,默认状态是可输入的。就是说,用户可以通过单击鼠标来填充它们或使其为空。如何使输出字段能输入或撤消输入,将在 使字段接受输入 下加以说明。能输入字段在允许用户对话的交互式列表中是很重要的(参见交互列表)。
DATA: FLAG1 VALUE ' ',
FLAG2 VALUE 'X',
FLAG3(5) VALUE 'Xenon'.
WRITE: / 'Flag 1 ', FLAG1 AS CHECKBOX,
/ 'Flag 2 ', FLAG2 AS CHECKBOX,
/ 'Flag 3 ', FLAG3 AS CHECKBOX.
输出列表如下:
对 FLAG2 和 FLAG3,因为这些字段的第一个字符是“X”,所以填充
复选框。通过单击鼠标,用户可以改变复选框的内容。
通过语句结构使用 WRITE
R/3 系统包含试验 WRITE 语句的所有选项和输出格式及将它们插入到程序中的有用工具。要做到这一点,在 ABAP/4- 编辑器中选择“编辑 -> 插入语句...”,然后在相关对话
。 框中选择 WRITE(参见 插入已有关键字结构 (页 2–8) )
当用 Enter 确认选项后,看到如下屏幕:
在该屏幕上,可以
PDF created with pdfFactory Pro trial version
1 0
通过在字段“字段”中输入内部字段的名称或文字,确定其输出格式。
然后通过选择“其它格式选项”,在该屏幕上或者在可访问的屏幕上选择格式选项。
通过选择合适的字段,生成符号、图标、线段和复选框的 WRITE 语句。 生成在 ABAP/4- 词典中定义的结构组件的 WRITE 语句。这很有用,
比如,在执行 SELECT 语句后(参见从数据库表读取数据)。
在屏幕“装配 WRITE-语句”上,选择单选按钮“符号”和“显示”,随后将看到如下对话框:
在此,可以选择符号,例如 SYM_FOLDER。下一对话框在输出屏幕上显示相应的 WRITE 语句和结果输出。
同时显示注释,通知用户在程序中需要包含程序(参见 在屏幕上输 出符号和图 标 (页 7) )。
按下“继续”后,就会看到“装配 WRITE 语句”屏幕上的字段“符号”现在包含了一个值:
现在,如果选择“执行”,就会将下列文本插入到程序中:
WRITE SYM_FOLDER AS SYMBOL.
在“装配 WRITE 语句”屏幕上,选择单选按钮“结构”,并在恰当的输入字段中输入:
然后,选择“选择组件”。在下一屏幕上,可以选择希望用 WRITE 语句输出的 ABAP/4- 词典结构 SFLIGHT 的组件,例如:
如果采用该选择,就会将下面的 WRITE 语句插入到程序中:
PDF created with pdfFactory Pro trial version
11WRITE: SFLIGHT-CARRID, SFLIGHT-CONNID, SFLIGHT-FLDATE, SFLIGHT-PRICE,
SFLIGHT-PLANETYPE, SFLIGHT-SEATSOCC.
PDF created with pdfFactory Pro trial version
MM模块:采购订单增强:BADI:ME_GUI_PO_CUSTME_PROCESS_PO_CUST物料凭证增强:BADI:MB_D…
SAP用户增强总结120xx年09月08日星期一1658一用户增强所有的Enhancement在表MODSAP用户增强大概有三类M…
一表增强SAP提供了两种方法为表和结构增加字段全部在se11中选择表追加结构追加结构只是向表内增加字段而不是修改结构另外追加结构只…
SAP屏幕增强示例之物料MM01MM02MM03步骤增强字段存储的位置数据库表屏幕增强程序配置增强程序处理数据屏幕分配操作增强字段…
11编写用户增强用户增强通常包括下面3类顾名思义就是增强SAP的可能没有提供的功能通过后台配置也不能实现1EEnhancement…