点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
我是ABAP 740的新手,我目前正在按照ABAP 740标准转换现有的ABAP代码。 我确实对ABAP 740的基本语法有一定的了解,并且已经将一些现有的ABAP代码转换为740。我正在努力转换以下代码,因为它具有where子句,两次读取以及基于过滤器调用FM的循环。 然后修改内部表。 需要一些指导,请...
在gt_vmcfa处循环,其中selkz = gc_charx。
使用键vbeln = gt_vmcfa-vbeln BINARY SEARCH读取表it_vbrk。
如果sy-subrc是INITIAL。 如果it_vbrk-rfbsk <>'C'。
使用键vbeln = gt_vmcfa-vbeln二进制搜索将表lt_vbfs读入数据(ls_vbfs)。
如果sy-subrc是INITIAL。
清除:ld_shorttext。
ld_msgno = ls_vbfs-msgno。
呼叫功能'RPY_MESSAGE_COMPOSE'
导出message_id = ls_vbfs-msgid
message_number = ld_msgno
message_var1 = ls_vbfs-msgv1
message_var2 = ls_vbfs-msgv2
message_var3 = ls_vbfs-msgv3
message_var4 = ls_vbfs-msgv4
导入message_text = ld_shorttext
EXCEPTIONS message_not_found = 1其他= 2。
gt_vmcfa-zzerror = ld_shorttext。
ENDIF。
ENDIF。
修改gt_vmcfa。
ENDIF。
ENDLOOP。
我猜您在谈论构造函数表达式。 "构造"是指从头开始对变量进行初始化。 构造函数表达式无法更新现有数据(向内部表中添加行除外)。
但是您可以使用已排序或哈希表(自1998年开始可用),请停止使用标题行(至少自2005年起已过时)。
为什么要浪费时间翻译遗留代码? 有什么收获? 为什么不学习新代码上的7.40语法呢?
顺便说一句,RPY_MESSAGE_COMPOSE也已经过时了。 改为使用MESSAGE语句。
您好鲜花糖果,
为此,您需要阅读FOR或REDUCE文档以及内部表函数语句。 我们有很多博客和有关如何操作的问题,我在下面放了一些相关链接给您阅读。 现在,关于演示代码中的函数,它不会使用内联声明运行,因为解决方案需要创建一个本地类,并在内联循环内调用它(如上所述),或者在您的代码中找到另一个已创建的全局类。 SAP系统。
链接:
7.40版的ABAP语言新闻
内部表 功能
表表达式
FOR和REDUCE示例
提示:
1-如果您始终对语句或功能有疑问,请先搜索并阅读系统上的DEMO程序,然后在SE38或SE80 TCodes上进行访问(搜索 使用字符串DEMO *);
2-检查系统版本,某些说明可能无法正常工作,您需要阅读ABAP文档进行检查;
3- 继续研究;)。
BR,
拉斐尔·帕切科。
是,我尝试使用相应的方法,但是遇到以下问题-
>选项#1
DATA(lt_vmcfa)=
值ltt_vmcfa(
FOR ls_vbrp IN lt_vbrp
FOR ls_vmcfa IN c_vmcfa在哪里(vbeln = ls_vbrp-vbeln)
(应对 #(ls_vmcfa)))。
以上语句不会从另一个工作区ls_vbrp复制数据,而只会从ls_vmcfa复制数据。
选项#2
DATA(lt_vmcfa)=
VALUE ltt_vmcfa(
(对应#(ls_vmcfa))(zzvbeln = ls_vbrp-aubel zzposnr = ls_vbrp-aupos zzmatnr = ls_vbrp-matnr))。
以上语句将数据复制两次-首先从工作区ls_vmcfa复制数据,然后从工作区ls_vbrp复制数据。 因此,条目将增加一倍。
因此,我逐场分配。
您好,
如果您是我,我会从非ABAP-7.4相关调整入手-您似乎在使用带有 标题行("已过时在gt_vmcfa处LOOP AT SElkz = gc_charx"。或"用键vbeln读取表it_vbrk = gt_vmcfa-vbeln二进制搜索。")。
而不是使用MODIFY语句,而是使用字段符号(更好的性能)来修改循环中的数据。
调用FM后,应检查subrc。
请使用有意义的变量名称,并保持其namig常规正确(ld应该是lv或l_v)
根据ABAP 7.4,您可以在调用FM时使用动态转换,而不必将数据单独保存
更改后,您的代码可能看起来像这样(仍然将variabls/字段符号的名称更改为更有意义的数据):
干杯,
马里克
如评论之一所述,我通读了一些有关ABAP 740更改的博客文章,我替换了loop/使用FOR读取语句,它可以按预期工作。 但是我最终还是逐场完成工作,我尝试了CORRESPONDING,但是在两个工作领域(如下所述)遇到了挑战。 有没有有效的方法来实现这一目标?
"填充输出表( mandt = ls_vmcfa-mandt vkorg = ls_vmcfa-vkorg kunrg = ls_vmcfa-kunrg fktyp = ls_vmcfa-fktyp fkdat = ls_vmcfa-fkdat fkart = ls_vmcfags-nats = er_dt = cs_ert = ers = ers = ers => = ls_vmcfa-vbeln rfbsk = ls_vmcfa-rfbsk selkz = ls_vmcfa-selkz fktyp_text = ls_vmcfa-fktyp_text fkart_text = ls_vmcfa-fkart_text
DATA(lt_vmcfa)=
VALUE ltt_vmcfa(
name1 = ls_vmcfa-fs-vsfvcf-fscv-fscv-fscv-fscv-fscv-fs = vs_vsvcf-fs = vsvcf-fs = vsvcf-fs = vsvcf-fs = vscvcf-fs = vscvvfa-fc = fs = vscvvfa-fcf-fc = -stats = vs_vcfa-fc = fscv-fcv-fs = vsvcfa-fs = vscvvfa-fc = fs = vsvcf-fs = vsvcfa-fc = -stats -aubel zzposnr = ls_vbrp-aupos zzmatnr = ls_vbrp-matnr )
)。
选项#1(对应 #(ls_vmcfa)))。
DATA(lt_vmcfa)=
VALUE ltt_vmcfa(
以上语句不会从另一个工作区ls_vbrp复制数据,而只会从ls_vmcfa复制数据。
选项#2
DATA(lt_vmcfa)=
VALUE ltt_vmcfa(
(对应#(ls_vmcfa))(zzvbeln = ls_vbrp-aubel zzposnr = ls_vbrp-aupos zzmatnr = ls_vbrp-matnr))。
以上语句将数据复制两次-首先从工作区ls_vmcfa复制数据,然后从工作区ls_vbrp复制数据。 因此,lt_vmcfa中的条目会增加一倍。
一周热门 更多>