首页 ABAP4中文培训资料第一部分第十章使用字段符 号

ABAP4中文培训资料第一部分第十章使用字段符 号

举报
开通vip

ABAP4中文培训资料第一部分第十章使用字段符 号PAGE 1 第10章 1 set Z_000page 1 使用字段符 号 概览 xe "指针" xe "字段符号" 内容 1 字段符号的 概念 定义字段符 号 2 为内部字段 定义字段符 号 2 定义结构化 的字段符号 4 定义局部字 段符号 5 将数据对象 分配给字段 符号 6 ASSIGN 语句的基本 格式 6 将字段符号 分配给其它 字段符号 10 分配字段串 组件 11 定义字段符 号的数据类 型 12 更改小数位 14 分配全局字 段的局部副 本 ...

ABAP4中文培训资料第一部分第十章使用字段符 号
PAGE 1 第10章 1 set Z_000page 1 使用字段符 号 概览 xe "指针" xe "字段符号" 内容 1 字段符号的 概念 定义字段符 号 2 为内部字段 定义字段符 号 2 定义结构化 的字段符号 4 定义局部字 段符号 5 将数据对象 分配给字段 符号 6 ASSIGN 语句的基本 格式 6 将字段符号 分配给其它 字段符号 10 分配字段串 组件 11 定义字段符 号的数据类 型 12 更改小数位 14 分配全局字 段的局部副 本 15 运行检查 16 在 ABAP/4 程序中,字 段符号是现 有字段的占 位符。字段 符号本身不 直接为字段 保留空间, 而只是指向 一个字段( 该字段在程 序运行前还 未可知)。 字段符号可 以与程序语 言 C 中的指针概 念相比较( 即,用内容 操作符 * 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示的指针 )。然而, 在 ABAP/4 中,从变量 的意义上说 ,与指针不 是真正等价 的,此处, 变量包含内 存地址,并 且不用内容 操作符即可 使用。您只 能使用字段 符号指向的 数据对象。 本节介绍 1 set Z_010page 1 字段符号的 概念 xe "字段符号" xe "字段符号, 概念" 有时仅知道 运行时要处 理哪个字段 和怎样处理 它。 为此,可以 在程序中创 建字段符号 。运行时, 可以将实际 字段分配给 这种字段符 号。 用字段符号 编程的所有 操作将用分 配的字段来 执行。成功 地完成分配 后,在 ABAP/4 中无论参考 字段符号或 参考字段本 身,都没有 任何区别。 在 ABAP/4 中字段符号 能指向任何 数据对象, 也能指向 ABAP/4 字典中定义 的结构。 不管是否有 类型说明, 都可以创建 字段符号。 如果没有说 明,字段符 号采用分配 字段的所有 属性。如果 有说明,在 分配过程中 系统将检查 被分配的字 段是否与字 段符号类型 相匹配。无 论哪一种应 用,在程序 中使用字段 符号之前, 必须首先分 配一个字段 给字段符号 。 字段符号提 供了一些特 性,使得它 们具有很大 的灵活性: _ 可以将所 分配字段的 偏移量和长 度指定为变 量。 _ 可以将字 段符号分配 给其它字段 符号,甚至 指定其偏移 量和长度。 _ 对字段符 号的分配可 以扩展到字 段边界之外 。这允许对 规则存储的 数据进行有 效的访问。 _ 可以强制 字段符号具 有不同于分 配字段的类 型和小数位 。 _ 字段符号 可有一个结 构用来指向 结构的单个 组件。 尽管字段符 号的这些灵 活性使您找 到一些问题 的完美解答 ,但使用起 来要十分小 心。由于可 以将直到运 行时才可知 的数据对象 分配给字段 符号,所以 对涉及到字 段符号的操 作,语法和 安全性检查 的有效性是 非常有限的 。这可能导 致运行错误 或不正确的 数据分配。 运行错误指 明明显的问 题,而不正 确的数据分 配是很危险 的,因为它 们很难被检 测出来。因 此,只有在 绝对确信所 做事情,或 者没有其它 ABAP/4 语句能解决 问题时才使 用。 例如,如果 正在处理字 符串,您可 能只想处理 一个字符串 的一部分, 其位置和长 度取决于字 符串内容。 可以使用字 段符号做到 这一点。然 而,自从 R/3 系统的 3.0 版本后,您 也可以使用 具有变量偏 移量和长度 说明的 MOVE 语句(参见 用指定偏移 量赋值 (页 6–3) )。使用 MOVE 语句(可能 与一些辅助 变量结合使 用)比使用 字段符号更 安全。字段 符号优点在 于某些情况 下能提高响 应时间。 2 set Z_002page 2 定义字段符 号 xe "字段符号, 定义" 可以为任何 内部数据对 象定义字段 符号 可以为内部 和外部结构 定义结构化 的字段符号 可以在子程 序和功能模 块中局部地 使用字段符 号 2 set Z_011page 2 为内部字段 定义字段符 号 xe "FIELD-SYMBOLS" xe "字段符号, 定义内部字段" 要为内部数 据对象定义 字段符号, 请如下使用 FIELD-SYMBOLS 语句: 语法 FIELD-SYMBOLS []. 该语句定义 字段符号 。 对字段符号 ,角括弧是 语法部分。 它们标识程 序代码中的 字段符号。 不管是否有 类型说明, 都可以定义 字段符号。 2 set Z_012page 2 没有类型说明的字段符号 要定义没有 类型说明的 字段符号, 不能使用 FIELD-SYMBOLS 语句中的 选项: 语法 FIELD-SYMBOLS 。 字段符号 没有任何属 性。可以在 运行时将任 何数据对象 分配给 (参见将数据对象 分配给字段 符号 (页 6) )。 分配过程中 ,字段符号 继承数据对 象的所有属 性。分配的 数据对象的 数据类型成 为字段符号 的实际数据 类型。 3 set Z_013page 3 键入字段符 号 可以使用 FIELD-SYMBOLS 语句中 选项键入字 段符号: 语法 FIELD-SYMBOLS . 对 , 可以输入 TYPE 或 LIKE (参见DATA 语句的基本 格式 (页 3–14) )。 当将数据对 象分配到没 有类型说明 但已键入类 型的字段符 号 时,系统将 检查分配的 数据对象的 类型是否与 字段符号的 键入类型相 兼容。兼容 性规则由下 表给出。如 果类型不兼 容,可能的 话,系统在 语法检查期 间输出错误 信息,或以 运行错误响 应。 另一方面, 如果不管分 配数据对象 ,而要字段 符号保持它 指定的类型 ,则不会出 错。这里, 必须将带类 型说明的数 据对象分配 给已键入类 型的字段符 号。分配期 间指定的类 型必须与字 段符号的键 入类型相匹 配(参见 定义字段符 号的数据类 型 (页 12) )。 下列兼容规 则应用于字 段符号的键 入类型: 键入字段 分 配语法检查 无类型说明 , TYPE ANY 系统 接受任何字 段类型。字 段的所有属 性分配给字 段符号。 TYPE TABLE 系 统检查字段 是否为内表 。该表的所 有属性和结 构分配给字 段符号。 TYPE C、N、P 或 X 系统检查 字段是否属 于类型 C、N、P 或 X。字段符 号继承字段 长度及其 DECIMALS 说明(对于 类型 P)。 TYPE D、F、I、 或 T LIKE , TYPE 这 些类型完全 指定。系统 检查字段数 据类型是否 完全与字段 符号类型一 致。 ( 是用户定义 的) 与对子程序 形式参数的 检查一样, 用选项 < type > 来执行检查 。(参见键入形式参 数 (页 9–18) )。 DATA DAT(8) VALUE '09161995'. FIELD-SYMBOLS TYPE D. ASSIGN DAT TO . WRITE . 因为 DAT 与字段符号 的键入类型 不兼容,该 程序在语法 检查时导致 错误。 DATA DAT(8) VALUE '19951609'. FIELD-SYMBOLS TYPE D. ASSIGN DAT TO TYPE 'D'. WRITE . 在该程序中 ,ASSIGN 语句指定了 与 中键入类型 相同的类型 。因此,程 序是可执行 的,并产生 如下结果: 09161995 关于 ASSIGN 语句的详细 信息,参见 将数据对象 分配给字段 符号 (页 Error! Not a valid link.) 。 4 set Z_009page 4 定义结构化 的字段符号 xe "FIELD-SYMBOLS" xe "字段符号, 定义结构" 可以用 FIELD-SYMBOLS 语句定义结 构化的字段 符号,如下 所示: 语法 FIELD-SYMBOLS STRUCTURE DEFAULT . 该语句定义 了初始指向 字段 的结构化字 段符号 。 必须将初始 字段分配给 结构化字段 符号 , 但是以后可 以更改这种 分配(参见将数据对象 分配给字段 符号 (页 6) )。字段符 号 继承了 的结构。结 构 可以是任何 字符串或 ABAP/4 字典中定义 的结构。不 必用 TABLES 语句声明字 典结构。必 须通过输入 不带引号的 名称指定结 构 。说明在运行时不允许。 如果 不包含类型 I 或类型 F 的组件, 可以是至少 与结构 的长度相等。如果 短,则语法 检查时会出 错。如果在 后面的程序 中将另一个 字段分配给 , 系统还将检 查被分配的 字段是否足 够长。如果 在运行时动 态分配较短 字段,(参 见 动态ASSIGN (页 8) ),则发生 运行错误。 如果 包含类型 I 或类型 F 组件,请注 意该结构是 对齐的(参 见 对齐数据对象 (页 6–43) )。如果将 数据对象分 配给具有这 种对齐结构 的字段符号 ,则数据对 象也必须相 应地对齐。 否则发生运 行错误。在 这种情况下 ,建议将数 据对象只分 配给结构化 字段符号, 该结构化字 段符号至少 在结构长度 上保持与字 段符号同样 的结构。 定义结构化 字段后,可 以用符号给 结构的单个 组件加上参 考数目。为 此,可用由 连字符分隔 的字段符号 名称作为组 件字段名称 的前缀。 例如,要为 不同结构创 建一个工作 区或为同一 结构创建几 个工作区, 可以使用结 构化字段符 号。 DATA: WA(100) VALUE '001LH 123419950627'. DATA: BEGIN OF LINE1, COL1(6), COL2(4), COL3(8), END OF LINE1. DATA: BEGIN OF LINE2, COL1 TYPE I VALUE 1, COL2 TYPE I VALUE 2, END OF LINE2. DATA LINE3 LIKE LINE2. DATA ITAB LIKE LINE2 OCCURS 10 WITH HEADER LINE. LINE3-COL1 = 11. LINE3-COL2 = 22. FIELD-SYMBOLS: STRUCTURE SBOOK DEFAULT WA, STRUCTURE LINE1 DEFAULT WA, STRUCTURE ITAB DEFAULT LINE3. WRITE: / -MANDT, -CARRID, -CONNID, -FLDATE, / -COL1, -COL2, -COL3. / -COL1, -COL2. 输出显示如 下: 001 LH 1234 27.06.1995 001LH 1234 19950627 11 22 该示例定义 三个字段串 LINE1、 LINE2 和 LINE3 以及内表 ITAB( 具有表头行 )。然后, 定义三个字 段符号 如下: _ 与 ABAP/4 字典结构 SBOOK 有同样的结 构并指向字 符串 WA。 _ 与 LINE1 有同样的结 构,并且也 指向 WA。 _ 与表头行 ITAB 有同样的结 构,且指向 LINE3。 不能指向 WA,因为 ITAB 是对齐的。 当将字段符 号输出到屏 幕时,所分 配字段的内 容按照字段 符号类型格 式化。例如 ,注意 -FLDATE 具有数据类 型 D。 5 set Z_014page 5 定义局部字 段符号 可用与局部 数据类型和 对象相似的 方式在子程 序和功能模 块中定义局 部字段符号 (参见在子程序中 ㄒ寰植渴_ 据类型和_ 象 (页 9–25) )。 在子程序或 功能模块中 声明的任何 字段符号都 是局部的。 对于局部字 段符号,可 应用下列规 则: _ 在子程序 或功能模块 外部,不能 引用局部字 段符号。 _ 每次调用 子程序或功 能模块,即 使前一次执 行过 ASSIGN, 也没有字段 分配给局部 字段符号。 _ 局部字段 符号可以与 全局定义的 字段符号或 其它子程序 、功能模块 中的局部字 段符号同名 。局部字段 符号隐藏全 局字段符号 。 _ 结构化字 段符号也能 成为局部的 。它们可以 具有局部( 内部)结构 ,可以分配 局部字段给 它们。 6 set Z_003page 6 将数据对象 分配给字段 符号 在使用字段 符号之前必 须先分配数 据对象给它 。对于结构 化字段符号 ,必须在定 义中包括这 个分配(参 见定义结构化 的字段符号 (页 4))。对于 非结构化字 段符号,可 以自由决定 何时何地首 次分配数据 对象。在程 序中,不管 字段符号是 否结构化, 都可以将不 同的数据对 象分配给同 样的字段符 号。 要给字段符 号分配数据 对象,可以 使用 ASSIGN 语句。ASSIGN 语句有几个 变量和参数 。下列主题 说明: 6 set Z_015page 6 ASSIGN 语句的基本 格式 ASSIGN 语句的基本 格式包含两 个静态变量 和两个动态 变量。 6 set Z_004page 6 静态 ASSIGN 如果运行之 前知道想要 分配给字段 符号的数据 对象的名称 ,则如下使 用 ASSIGN 语句: 语法 ASSIGN TO . 分配之后, 字段符号 具有数据对 象 的属性,并 指向相同的 内存区。 FIELD-SYMBOLS: , TYPE I. DATA: TEXT(20) TYPE C VALUE 'Hello, how are you?', NUM TYPE I VALUE 5, BEGIN OF LINE1, COL1 TYPE F VALUE '1.1e+10', COL2 TYPE I VALUE '1234', END OF LINE1, LINE2 LIKE LINE1. ASSIGN TEXT TO . ASSIGN NUM TO . DESCRIBE FIELD LENGTH . WRITE: / , 'has length', NUM. ASSIGN LINE1 TO . ASSIGN LINE2-COL2 TO . MOVE TO LINE2. ASSIGN 'LINE2-COL2 =' TO . WRITE: / , . 输出如下: Hello, how are you? has length 20 LINE-COL2 = 1,234 示例定义两 个字段符号 。 因为 的类型指定 为 I,它只能 指向 I 类型字段。 在示例教程 中 指向几个不 同的数据对 象。 7 set Z_016page 7 具有偏移量 说明的静态 ASSIGN 通过使用下 列 ASSIGN 语句,可以 指定要分配 给字段符号 的字段的偏 移值: 语法: ASSIGN [+][()] TO . 正如在用指定偏移 量赋值 (页 6–3) 中所描述的 ,具有偏移 量 和长度 部分被分配 给字段符号 。 在 ASSIGN 语句中,偏 移量的说明 有下列特殊 特征: _ 可以是变量 _ 系统不检 查所选部分 是否位于字 段 内部。偏移 量 和 长度 都可以比 的长度大。 写地址时, 可以超出 的限制,但 不能超出所 定义内存区 (参见 运行检查 (页 16) )。 _ 如果没有 指定长度 ,系 统自动输入 字段 的长度。如 果 大于零, 总是指向超 出 限制的区域 。 _ 如果小 于 的长度,可 以为 指定一个星 号 (*) 来阻止 参照 限制之外的 区域。 FIELD-SYMBOLS . DATA: BEGIN OF LINE, STRING1(10) VALUE '0123456789', STRING2(10) VALUE 'abcdefghij', END OF LINE. WRITE / LINE-STRING1+5. ASSIGN LINE-STRING1+5 TO . WRITE / . ASSIGN LINE-STRING1+5(*) TO . WRITE / . 输出如下: 56789 56789abcde 56789 该示例中, 可以看到 WRITE 语句和 ASSIGN 语句中的偏 移量说明的 区别。对于 WRITE, 在 LINE-STRING1 端部截短了 输出。如果 指定偏移量 大于 9,将导致 语法检查时 出错。在第 一个 ASSIGN 语句中,将 LINE-STRING1中 以偏移量 5开头长度 为 10 的内存区域 分配给字段 符号 。 因为程序中 明确定义了 LINE-STRING1 后面的内存 区,所以这 将导致很有 意义的输出 结果。在第 二个 ASSIGN语 句中,避免 了 LINE-STRING1 边界后面的 内存分配。 FIELD-SYMBOLS . DATA: BEGIN OF LINE, A VALUE '1', B VALUE '2', C VALUE '3', D VALUE '4', E VALUE '5', F VALUE '6', G VALUE '7', H VALUE '8', END OF LINE, OFF TYPE I, LEN TYPE I VALUE 2. DO 2 TIMES. OFF = SY-INDEX * 3. ASSIGN LINE-A+OFF(LEN) TO . = 'XX'. ENDDO. DO 8 TIMES. OFF = SY-INDEX - 1. ASSIGN LINE-A+OFF(1) TO . WRITE . ENDDO. 输出如下: 1 2 3 X X 6 X X 该示例中, 可以看到字 段符号是如 何方便访问 和规则字段 串的处理的 。然而,请 注意,这种 处理字段限 制范围之外 内存内容的 灵活方法也 有其危险性 ,可能导致 运行错误。 8 set Z_006page 8 动态ASSIGN xe "ASSIGN" xe "字段符号, 动态分配" 如果仅在运 行时才知道 要分配给字 段符号的数 据对象名称 ,请使用下 列 ASSIGN 语句: 语法 ASSIGN () TO . 这个语句将 名称包含在 中的字段分 配给字段符 号 。 对() 不能指定偏 移量。 运行时,系 统按下列顺 序搜索给定 的字段: 1. 如果 分配是在子 程序或功能 模块中执行 的,系统将 在局部数据 的子程序或 功能模块中 搜索字段。 2. 如果 分配是在子 程序或功能 模块之外执 行的,或者 在其中未找 到字段,则 系统将在程 序的全局数 据中搜索字 段。 3. 如果 在全局数据 中未发现此 字段,系统 将在表工作 区中搜索, 该表工作区 是指当前程 序组的主程 序中 TABLES 语句声明的 表工作区。 程序组由主 程序和包含 外部子程序 的定义的所 有程序组成 ,这些外部 子程序被主 程序调用( 包括被嵌套 的程序)。 由于这种搜 索对响应时 间有负面效 应,只有绝 对必要时, 才可使用动 态 ASSIGN。 如果在运行 之前知道只 分配表工作 区,则可以 使用在 表工作区的 动态分配 (页 10) 中所描述的 ASSIGN 语句的变量 。 如果搜索成 功并且字段 可分配给字 段符号,则 SY-SUBRC 设为 0。否则, 返回 4。为安全 起见,动态 ASSIGN 之后总要检 查 SY-SUBRC 的值,以避 免字段符号 指向未定义 区域。 假设主程序 SAPMZTST 如下: PROGRAM SAPMZTST. TABLES SBOOK. SBOOK-FLDATE = SY-DATUM. PERFORM FORM1(MYFORMS1). 假设还调用 两个程序 MYFORMS1 和 MYFORMS2: PROGRAM MYFORMS1. FORM FORM1. PERFORM FORM2(MYFORMS2). ENDFORM. 和 PROGRAM MYFORMS2. FORM FORM2. DATA NAME(20) VALUE 'SBOOK-FLDATE'. FIELD-SYMBOLS . ASSIGN (NAME) TO . IF SY-SUBRC EQ 0. WRITE / . ENDIF. ENDFORM. 执行 SAPMZTST 之后,输出 显示如下: 08.02.1995 该示例中, 程序组由 SAPMZTST、 MYFORMS1 和 MYFORMS2 组成。在 MYFORMS2 中定义字段 符号 。 动态 ASSIGN 语句之后, 指向主程序 SAPMZTST 中声明的表 工作区的组 件 FLDATE。 用静态 ASSIGN 语句,这是 不可能的。 换句话说, 不能用 SBOOK-FLDATE 替代 (NAME), 因为语法检 查时将导致 错误。 10 set Z_017page 10 表工作区的 动态分配 如果运行之 前知道要将 表工作区分 配给字段符 号,但不知 道表区的名 称,请使用 动态 ASSIGN 语句的下列 变量: 语法 ASSIGN TABLE FIELD () TO . 系统仅在表 工作区中搜 索要分配给 字段符号的 数据对象, 该表工作区 是由当前程 序组的主程 序中 TABLES 语句声明的 。即,系统 仅执行在 动态ASSIGN (页 8) 所描述的搜 索的第三步 。 如果搜索成 功,并且可 以分配字段 给字段符号 ,则 SY-SUBRC 设为 0。否则返 回 4。 TABLES SBOOK. DATA: NAME1(20) VALUE 'SBOOK-FLDATE', NAME2(20) VALUE 'NAME1'. FIELD-SYMBOLS . ASSIGN TABLE FIELD (NAME1) TO . WRITE: / 'SY-SUBRC:', SY-SUBRC. ASSIGN TABLE FIELD (NAME2) TO . WRITE: / 'SY-SUBRC:', SY-SUBRC. 输出如下: SY-SUBRC: 0 SY-SUBRC: 4 在第一个 ASSIGN 语句中,系 统发现表工 作区 SBOOK 和 SY-SUBRC 的组件 FLDATE 被设为 0。第二个 ASSIGN 语句中,系 统没有发现 字段 NAME1, 因为它只被 DATA 语句声明, 而不是被 TABLES 语句声明。 在这种情形 ,SY-SUBRC 返回 4。 10 set Z_005page 10 将字段符号 分配给其它 字段符号 xe "ASSIGN" xe "字段符号, 向字段符号分配字段符号" 除了使用数 据对象的名 称外,还可 以将字段符 号分配给 ASSIGN 语句的所有 变量中的字 段符号。为 此,编码静 态 ASSIGN 如下: 语法 ASSIGN [+][()] TO . 可按下列方 式编码动态 ASSIGN: 语法 ASSIGN [TABLE FIELD] () TO . 字段 包含字段符 号 的名称。 可以相同。 DATA: BEGIN OF S, A VALUE '1', B VALUE '2', C VALUE '3', D VALUE '4', E VALUE '5', F VALUE '6', G VALUE '7', H VALUE '8', END OF S. DATA OFF TYPE I. FIELD-SYMBOLS . ASSIGN S-A TO . DO 4 TIMES. OFF = SY-INDEX - 1. ASSIGN +OFF(1) TO . WRITE . ENDDO. 输出如下: 1 2 4 7 该示例中, 创建八个字 段作为字符 串 S 的组件 S-A 到 S-H,并 用“1”到 “8”填充 。这些字符 串在内存中 有规律的存 储。组件 S-A 初始分配给 字段符号 。 循环语句中 有下列结果 : 循环途径 1: 指向 S-A,OFF 为 0,并且 S-A 被分配给 循环途径 2: 指向 S-A,OFF 为 1,并且 S-B 被分配给 循环途径 3: 指向 S-B,OFF 为 2,并且 S-D 被分配到 循环途径 4: 指向 S-D,OFF 为 3,并且 S-G 被分配给 11 set Z_018page 11 分配字段串 组件 xe "ASSIGN" xe "字段符号, 分配字段字符串组件" 可以用 ASSIGN 语句将字段 串的特殊组 件分配给字 段符号,过 程如下: 语法 ASSIGN COMPONENT OF STRUCTURE TO . 系统将字符 串 的组件 分配给字段 符号 。 可以指定 为文字或变 量。如果 属于类型 C 或字段串( 象组件一样 没有内表) ,它指定组 件的名称。 如果 有任何其它 基本数据类 型,将被转 化为类型 I(参见 类型转换 (页 6–36) ),并且指 定组件号。 如果分配成 功,SY-SUBRC 设为 0。否则, 返回 4。 DATA: BEGIN OF LINE, COL1 TYPE I VALUE '11', COL2 TYPE I VALUE '22', COL3 TYPE I VALUE '33', END OF LINE. DATA COMP(5) VALUE 'COL3'. FIELD-SYMBOLS: , , . ASSIGN LINE TO . ASSIGN COMP TO . DO 3 TIMES. ASSIGN COMPONENT SY-INDEX OF STRUCTURE TO . WRITE . ENDDO. ASSIGN COMPONENT OF STRUCTURE TO . WRITE / . 输出如下: 11 22 33 33 该示例中, 指向字段串 LINE, 指向字段 COMP。 循环中,LINE 的组件由其 号码指定, 并且一个接 一个地被分 配到 。 循环之后, LINE 的组件 COL3 由其名称指 定,并被分 配到 。 12 set Z_008page 12 定义字段符 号的数据类 型 xe "ASSIGN" xe "字段符号, 定义类型" xe "字段符号, 实际数据类型" 可以使用 ASSIGN 语句的 TYPE 选项定义字 段符号的数 据类型,过 程如下: 语法 ASSIGN ..... TO TYPE . 可以用 ASSIGN 语句的所有 变量使用 TYPE 选项。 分配数据对 象给带类型 说明的字段 符号时,必 须区分下列 符号: _ 未定义类 型的字段符 号 对于 TYPE, 未定义类型 的字段符号 不继承所分 配数据对象 的数据类型 和输出长度 ,但继承在 中指定的数 据类型。对 于 ,可 以使用任何 预定义的数 据类型(参 见基本数据类 型 - 预ㄒ宓_ (页 3–3) )。关于预 定义基本数 据类型输出 长度的详细 信息,参见 WRITE 语句 (页 4–1) 。类型 可以是文字 或变量。 _ 定义类型 的字段符号 如果要分配 的数据对象 的数据类型 与字段符号 的键入类型 不兼容,使 用具有定义 类型的字段 符号的 TYPE 选项很有意 义,但要避 免结果错误 消息。在这 种情况下, 所指定的类 型 和字段符号 的键入类型 必须兼容。 不管分配的 数据对象怎 样,字段符 号保持它的 数据类型。 详细信息和 示例,参见 键入字段符 号 (页 3) 。 如果程序中 分配之后使 用字段符号 ,则分配的 数据对象不 被转化为指 定类型 。因 此,数据对 象内容应该 解释为类型 的字段。 如果 _ 指定的数 据类型未知 _ 指定数据 类型的长度 与分配的字 段类型不匹 配 _ 有对齐错 误(参见对齐数据对象 (页 6–42)) 则系统反应 为运行错误 。 DATA TXT(8) VALUE '19950606'. DATA MYTYPE(1) VALUE 'X'. FIELD-SYMBOLS . ASSIGN TXT TO . WRITE / . ASSIGN TXT TO TYPE 'D'. WRITE / . ASSIGN TXT TO TYPE MYTYPE. WRITE / . 输出如下: 19950606 06061995 3139393530363036 该示例中, 三次将字符 串 TXT 分配给 。 第一次 的类型保持 不变,第二 次 的类型变为 类型 D,第三次 的类型变为 类型 X。请注意 ,当成对考 虑时,最后 输出行的数 字表示 TXT 中字符的十 六进制代码 。第二个输 出行的格式 取决于用户 的主 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 , 而在第三行 中则取决于 由操作系统 使用(在这 种情形为 ASCII码 )的字符表 示法。 14 set Z_019page 14 更改小数位 可以更改字 段符号的小 数位,该字 段符号在分 配时指向类 型 P 字段。为此 ,请如下使 用 ASSIGN 语句中 DECIMALS 选项: 语法 ASSIGN ..... TO DECIMALS . 可以使用 DECIMALS 选项,该选 项具有 ASSIGN 语句的所有 变量。用 DECIMALS 选项,字段 符号 的小数位变 为 。一 般地,这会 导致字段符 号和分配的 字段有不同 的数值。 可以是文字 或变量。如 果 没有位于 0 到 14 之间,或者 分配的字段 不属类型 P,则会出 现运行错误 。 DATA: PACK1 TYPE P DECIMALS 2 VALUE '400', PACK2 TYPE P DECIMALS 2, PACK3 TYPE P DECIMALS 2. FIELD-SYMBOLS: , . WRITE: / 'PACK1', PACK1. ASSIGN PACK1 TO DECIMALS 1. WRITE: / ' ', . PACK2 = . WRITE: / 'PACK2', PACK2. ASSIGN PACK2 TO DECIMALS 4. WRITE: / ' ', . PACK3 = + . WRITE: / 'PACK3', PACK3. = '1234.56789'. WRITE: / ' ', . WRITE: / 'PACK2', PACK2. 输出如下: PACK1 400.00 4,000.0 PACK2 4,000.00 40.0000 PACK3 4,040.00 1,234.5679 PACK2 123,456.79 在该示例中 ,所有类型 P 字段有两个 小数位。字 段符号 分别有一个 和四个小数 位。请注意 ,对于字段 符号及其分 配字段,数 值是不同的 。 15 set Z_020page 15 分配全局字 段的局部副 本 使用子程序 时(参见 子程序 (页 9–5) ),可以在 数据堆栈创 建全局数据 的局部副本 。为此,请 如下使用 ASSIGN 语句: 语法 ASSIGN LOCAL COPY OF ........ TO . 系统在堆栈 上放置指定 全局数据的 副本。在子 程序中,不 必通过写字 段符号 地址更改全 局数据,就 能访问和更 改该副本。 可以与 ASSIGN 语句中所有 变量(在 分配字段串 组件 (页 11) 中描述的除 外)一起使 用该选项。 假设主程序 SAPMZTST 如下: PROGRAM SAPMZTST. DATA: BEGIN OF COMMON PART, TEXT(5) VALUE 'Text1', END OF COMMON PART. PERFORM ROUTINE(FORMPOOL). WRITE TEXT. 假设包含子 程序 ROUTINE 的主程序 FORMPOOL 如下: PROGRAM FORMPOOL. DATA: BEGIN OF COMMON PART, TEXT(5) VALUE 'Text1', END OF COMMON PART. FORM ROUTINE. FIELD-SYMBOLS . ASSIGN LOCAL COPY OF TEXT TO . WRITE . = 'Text2'. WRITE . ASSIGN TEXT TO . WRITE . = 'Text3'. ENDFORM. 启动 SAPMZTST 之后,输出 如下: Text1 Text2 Text1 Text3 示例中,字 段 TEXT 被声明为主 程序 SAPMZTST 和程序 FORMPOOL 的共用数据 区。通过在 程序 FORMPOOL 的子程序 ROUTINE中 将 TEXT 分配给 , 将字段 TEXT 的副本放置 到局部数据 堆栈上。通 过写 地址,可以 读取和更改 该副本。全 局字段 TEXT 不受局部字 段操作的影 响。 16 set Z_007page 16 运行检查 运行时,系 统执行某些 检查,以避 免由在定义 数据区之外 的错误分配 引起的内存 数据的非控 制丢失。 定义如下的 数据区: _ 内表的表 存储区。存 储区的大小 取决于表行 数,这种表 行数未固定 ,而运行时 ,经常动态 扩展(参见创建和处理 内表 (页 8–1) )。 _ 其它数据 对象的 DATA 存储区。该 存储区的大 小在数据声 明期间是固 定的(参见 声明数据 (页 3–1) )。 字段符号不 能指向这些 区域之外的 地址。如果 系统在运行 时遇到这类 问题,将停 止处理程序 。 某些系统信 息,诸如内 表的控制块 ,也存储在 DATA 存储区中。 因此,尽管 有运行检查 ,还是有可 能无意地覆 盖一些字段 ,并引起后 续错误(如 表头损坏) 。 PROGRAM SAPMZTST. DATA: TEXT1(10), TEXT2(10), TEXT3(5). FIELD-SYMBOLS . DO 25 TIMES. ASSIGN TEXT1+SY-INDEX(1) TO . ENDDO. 启动 SAPMZTST 之后,发生 运行错误。 系统反应如 下: DATA 存储区宽度 为 25。最后 的循环途径 试图分配该 范围之外的 地址,因为 偏移量是 25。直到 第 24 循环途径, 未发生错误 。如果试图 在 ASSIGN 语句中用 TEXT2 替换 TEXT1, 将在第 15 循环中发生 错误。 _1046956663.unknown _1046956665.unknown _1046956666.unknown _1046956664.unknown _1046956659.unknown _1046956661.unknown _1046956662.unknown _1046956660.unknown _1046956656.unknown _1046956658.unknown _1046956654.unknown _1046956655.unknown _1046956653.unknown
本文档为【ABAP4中文培训资料第一部分第十章使用字段符 号】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_836453
暂无简介~
格式:doc
大小:130KB
软件:Word
页数:0
分类:互联网
上传时间:2018-09-10
浏览量:8