SAP客户主数据屏幕增强

SAP客户主数据屏幕增强

背景:客户主数据中增加一个试图,保存客户、物料体系

步骤:

1.TCODE:SPRO进入后台配置,添加选项卡

SAP客户主数据屏幕增强

SAP客户主数据屏幕增强

2.实现BADI、创建实施类

SAP客户主数据屏幕增强

SAP客户主数据屏幕增强

SAP客户主数据屏幕增强

3.新建函数组ZXD01、屏幕1000

SAP客户主数据屏幕增强

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.最终效果图

SAP客户主数据屏幕增强

 

第二篇:SAP-第004章 将数据输出到屏幕

第四章 将数据输出到屏幕

概览

内容

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

选择“打印”,可以直接从输出屏幕打印当前输出列表。如果为程序定

义选项屏幕(参见 使用选择屏幕),就可以在选择屏幕上选择“执行和

打印”,然后,该列表不输出到屏幕上,而是直接发送到打印机。

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

数据类型 输出长度 定位

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

语法

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

输出如下:

*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

表格 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

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

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

该语句允许将输出位置向上或向下移动。

要获得更多的信息和示例,参见 创建列表。

将字段内容作为复选框输出

使用下列语法,可以将字段的第一个字符,作为复选框输出到输出屏幕上:

语法

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