需要帮助以字段符号代替DO VARYING LOOP吗?

2020-09-01 02:47发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我当时正在使用DO VARYING LOOP来读取PA0008中的所有工资类型,并且可以正常工作,但是
因为这是绝对的尝试将其替换为" Assign"语句,但需要一些支持来循环
>结果和读取值

 PA0008的数据IT_PA0008类型标准表(带标题行)。

   字段符号:。
   数据:v_index TYPE numc2。
   数据:字段名称TYPE char30。

 选择*从PA0008到表IT_PA0008最多1行
          s_pernr中的PERNR
          按BEGDA降序排列。
 

现在,我需要循环IT_PA0008以检查所有工资值,但卡在以下代码中:

做10次。
     v_index = v_index + 1。

     CONCATENATE'IT_PA0008-LGA'v_index INTO字段名称。
     CONDENSE字段名称。
     分配组件.....至。
     检查sy-subrc = 0。

     CONCATENATE'IT_PA0008-BET'v_index INTO字段名。
     CONDENSE字段名称。
     分配组件.....至。
     检查sy-subrc = 0。

 案件 ....!

   当" M022"时。
     wa_i_final-Monthly_Salary = 。
     当为" 1002"时。
     wa_i_final-Transportation = 。
  结束。


 ENDDO。

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我当时正在使用DO VARYING LOOP来读取PA0008中的所有工资类型,并且可以正常工作,但是
因为这是绝对的尝试将其替换为" Assign"语句,但需要一些支持来循环
>结果和读取值

 PA0008的数据IT_PA0008类型标准表(带标题行)。

   字段符号:。
   数据:v_index TYPE numc2。
   数据:字段名称TYPE char30。

 选择*从PA0008到表IT_PA0008最多1行
          s_pernr中的PERNR
          按BEGDA降序排列。
 

现在,我需要循环IT_PA0008以检查所有工资值,但卡在以下代码中:

做10次。
     v_index = v_index + 1。

     CONCATENATE'IT_PA0008-LGA'v_index INTO字段名称。
     CONDENSE字段名称。
     分配组件.....至。
     检查sy-subrc = 0。

     CONCATENATE'IT_PA0008-BET'v_index INTO字段名。
     CONDENSE字段名称。
     分配组件.....至。
     检查sy-subrc = 0。

 案件 ....!

   当" M022"时。
     wa_i_final-Monthly_Salary = 。
     当为" 1002"时。
     wa_i_final-Transportation = 。
  结束。


 ENDDO。
付费偷看设置
发送
8条回答
大道至简
1楼 · 2020-09-01 03:06.采纳回答

我刚刚检查了PA0008的结构:

组件数据元素长度说明
 --------- ------------ ----------- ------------------  ----------------
 ...
 LGA01 lgart char(4)工资类型
 bet01 pad_amt7s curr(13,2)工资类型付款金额
 anz01 anzhl dec(7,2)编号
 ein01 pt_zeinh char(3)时间/测量单位
 opk01 opken char(1)工资类型的操作指示器

 LGA02 lgart char(4)工资类型
 bet02 pad_amt7s curr(13,2)工资类型付款金额
 ... 

不幸的是,LGA01和LGA02不是 连续,所以您不能轻易使用ASSIGN INCREMENT。

我最好的主意是:

 DATA(wa_pa0008)=值pa0008(lga01 ='1'lga02 =  '2'lga03 ='3')。
类型:块的开始,
lgaxx类型pa0008-lga01,
betxx类型pa0008-bet01,
anzxx类型pa0008-anz01,
einxx类型pa0008-ein01,
opkxx类型pa0008-opk01 ,
END OF块。
字段符号: TYPE x,
TYPE块。
将wa_pa0008-lga01和wa_pa0008-lga02之间的距离描述为字节模式下的数据(距离)。
将wa_pa0008-lga01和wa_pa0008之间的距离为字节间数据的距离(偏移)字节模式中的
8。
做39次。
DATA(inc)=距离*(sy-index-1)。
分配 + offset(*)到铸造。
"在这里您可以使用 -lgaxx, -betxx,...
将距离添加到偏移量。
ENDDO。

有关信息,我找到的唯一方法是 使用ASSIGN INCREMENT和连续的字段块是这样的:

 DATA(wa_pa0008)=值pa0008(lga01 ='1'lga02 ='2'lga03 ='3')。
类型:BEGIN OF块,
lgaxx类型pa0008-lga01,
betxx类型pa0008-bet01,
anzxx类型pa0008-anz01,
einxx类型pa0008-ein01,
opkxx类型pa0008-opk01,
END OF块,
BEGIN OF _39_blocks,
b01 TYPE块,
b02 TYPE块,
b03 TYPE块,
" <====重要定义另外36个块
END OF _39_blocks。
字段符号: TYPE x,
<_39_blocks> TYPE _39_blocks,
TYPE块。
在字节模式下将wa_pa0008-lga01和wa_pa0008之间的距离分配到铸造中。 pa0008_x>至<_39_blocks>铸造。
做39次。
DATA(inc)= 1 *(sy-index-1)。
ASSIGN <_39_blocks> -b01 INCREMENT inc TO
"在这里您可以使用- lgaxx, -betxx,...
ASSERT 1 =1。"断点虚拟线(调整)
ENDDO。
当学会了学习
2楼-- · 2020-09-01 03:13

Yaso O

确定,理想情况仍然相同,可以使用字段符号代替变化。

从上面的最后一条评论中,我可以说您的代码不起作用,因为字段名称是BET01,02,...。

但是当您从v_index串联时,它只是1,2 ,3 ...这样您的变量就变成BET1,BET2 ...

这可能是它不起作用的原因。

我不知道您为什么要再次选择 在DO..ENDO内部,但稍后可能会导致性能下降。

一周热门 更多>