需要帮助以字段符号代替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:00

嗨桑德拉

关于下面的代码,我们已经很接近了,

做39次。
   inc = sy-index-1。
   将wa_pa0008-lga01分配到范围wa_pa0008。
   lga = lga + 。
 ENDDO。

首先,我必须注释lga = lga + 行。 因为它不断给出运行时错误

我还不确定它的用途是什么,之后,通过调试代码获取工资类型,但不能依次获取,只有火灾工资类型可以,但是之后,您可以看到下面的快照工资类型1002 是第三个工资类型,是LGA03,但是在第七个循环上它的值是1002! 介于两者之间的值

我是小鹏鹏啊
3楼-- · 2020-09-01 03:09

代替:

联接'IT_PA0008-LGA'v_index INTO 栏位名称。
     CONDENSE字段名称。
     分配组件.....到

任一种:

包含'LGA'v_index INTO字段名。
     分配结构的字段名称it_pa0008至

或使用:

将'IT_PA0008-LGA'v_index合并为字段名称。
     ASSIGN(字段名称)到

Cf ASSIGN的ABAP文档

绿领巾童鞋
4楼-- · 2020-09-01 03:21

伟大的桑德拉,代码运行正常。

您可以将其放在"答案"部分,以便将其标记为答案吗?

shere_lin
5楼-- · 2020-09-01 03:23

如果要执行的操作是更改内部表中每个记录的值,则也有循环 通过表IT_PA0008,您无法通过将表分配给这样的字段符号来更改整个表。 然后,您可以通过简单的DO ... VARYING来实现它:

在it_pa0008 ASSIGNING FIELD-SYMBOL()上循环。
   从 -bet01下注10次下注 -bet02
               从 -lga01下一个lga下一个 -lga02
     cl_demo_output => write(| {下注} {lga} |)。
   ENDDO。
 ENDLOOP。
Nan4612
6楼-- · 2020-09-01 03:05

Yaso O 完成(注释转换为答案)。

槿木_熙
7楼-- · 2020-09-01 02:58

亲爱的

我的要求很简单,我只想循环所有工资以提交一份报告
,但是由于PA008中的工资结构是重复的,所以房屋津贴有时会在LGA02下出现,有时会在LA03下出现

旧方法是使用

做10次变化... 

但是由于SAP将该语句突出显示为绝对声明,所以我想使用DO ... Assign
将所有工资类型循环到一条记录中的最佳方法是什么? 使用do ...分配?

一周热门 更多>