如何使用ABAP中的Read_Text获取销售订单行项目文本的唯一线程号?

2020-09-13 12:39发布

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

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


在BW中,有一种情况需要从SAP VA03中的销售订单行项目的"徽标/刺绣文本"字段中获取唯一的线程号。 因此,我为此创建了DSO,并将销售订单,销售订单行项目和线程号作为键,并使用READ_TEXT功能模块获取文本信息。

由于必须获得多行文本,因此在下面的代码中使用了循环语句来获取多行订单项文本数据。 它工作正常,但实际的要求是仅从订单项文本中获取唯一的线程号。 在上面的屏幕截图中,我们仅需要获取1801和1675作为该订单项的线程号。 但是我在该线程号字段中的代码从* --BEGIN THREAD直到*-END THREAD MAP中获取数据。 我们是否应该在ABAP中使用包含字符串(CS)来仅获取线程号? 即使这样做,如何仅获得唯一的线程号?

最终,数据应如下所示:

销售订单行项目线程号

39541745 10 1801

39541745 10 1675

下面是我在DSO的字段例程中使用的代码,该代码使用READ_TEXT FM获取此文本数据。

类型:ty_ZSDO120的开始,
DOC_NUMBER类型/BI0/OIDOC_NUMBER,
S_ORD_ITEM类型/BI0/OIS_ORD_ITEM,
ty_ZSDO120的结尾。

数据:i_lines类型STANDARD TABLE OF TLINE ,
ls_lines输入tline。

数据:w_tdname TYPE stxh-tdname。

数据:v_text类型字符串。

清除w_tdname。
合并SOURCE_FIELDS-DOC_NUMBER SOURCE_FIELDS-S_ORD_ITEM
入w_tdname。

*读取订单行徽标/刺绣文字
CLEAR:i_lines。
刷新:i_lines 。


*
通话功能'READ_TEXT'
导出
语言= sy-langu
id ='ZLGO'
name = w_tdname
object = 'VBBP'
TABLES
行= i_lines
例外情况
id = 01
语言= 02
名称= 03
not_found = 04
object = 05
reference_check =06。




如果sy-tabix = 1,则在i_lines处循环进入ls_lines。



将ls_lines-tdline移至v_text。 >
else。

将v_text ls_lines-tdline连接到以空格分隔的v_text。

endif。

endloop。

RESULT = v_text。

请让我知道如何在BW DSO中实现此目标。 还附在我的DSO屏幕截图中。

(61.8 kB)

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

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


在BW中,有一种情况需要从SAP VA03中的销售订单行项目的"徽标/刺绣文本"字段中获取唯一的线程号。 因此,我为此创建了DSO,并将销售订单,销售订单行项目和线程号作为键,并使用READ_TEXT功能模块获取文本信息。

由于必须获得多行文本,因此在下面的代码中使用了循环语句来获取多行订单项文本数据。 它工作正常,但实际的要求是仅从订单项文本中获取唯一的线程号。 在上面的屏幕截图中,我们仅需要获取1801和1675作为该订单项的线程号。 但是我在该线程号字段中的代码从* --BEGIN THREAD直到*-END THREAD MAP中获取数据。 我们是否应该在ABAP中使用包含字符串(CS)来仅获取线程号? 即使这样做,如何仅获得唯一的线程号?

最终,数据应如下所示:

销售订单行项目线程号

39541745 10 1801

39541745 10 1675

下面是我在DSO的字段例程中使用的代码,该代码使用READ_TEXT FM获取此文本数据。

类型:ty_ZSDO120的开始,
DOC_NUMBER类型/BI0/OIDOC_NUMBER,
S_ORD_ITEM类型/BI0/OIS_ORD_ITEM,
ty_ZSDO120的结尾。

数据:i_lines类型STANDARD TABLE OF TLINE ,
ls_lines输入tline。

数据:w_tdname TYPE stxh-tdname。

数据:v_text类型字符串。

清除w_tdname。
合并SOURCE_FIELDS-DOC_NUMBER SOURCE_FIELDS-S_ORD_ITEM
入w_tdname。

*读取订单行徽标/刺绣文字
CLEAR:i_lines。
刷新:i_lines 。


*
通话功能'READ_TEXT'
导出
语言= sy-langu
id ='ZLGO'
name = w_tdname
object = 'VBBP'
TABLES
行= i_lines
例外情况
id = 01
语言= 02
名称= 03
not_found = 04
object = 05
reference_check =06。




如果sy-tabix = 1,则在i_lines处循环进入ls_lines。



将ls_lines-tdline移至v_text。 >
else。

将v_text ls_lines-tdline连接到以空格分隔的v_text。

endif。

endloop。

RESULT = v_text。

请让我知道如何在BW DSO中实现此目标。 还附在我的DSO屏幕截图中。

(61.8 kB)
付费偷看设置
发送
3条回答
大道至简
1楼-- · 2020-09-13 13:06

首先,使用文本存储任何重要信息不是一个好主意。 例如,这对于存储客户服务说明或在发送给客户等的表单中添加随机注释很有用。 重要的业务数据-不多。 特别是在报告方面。 不幸的是,我已经看到这个错误犯了太多次了。

关于特定的技术挑战,这是《爱丽丝梦游仙境》类型的问题之一:要在某处找到一条道路,您需要知道自己想去哪里。 这只是纯文本,您如何知道哪些数字是"线程号"?

为了使程序找到某些内容,必须有某种算法,某种模式。 您的情况是什么模式? 查找以ZDMS_STOP ...开头的行,然后在该行的末尾查找数字? 这只是空间分隔的数据吗? 除了ZDMS_STOP之外,还有什么呢...这就是编写程序来解析此数据所需的知识。

在那之后,从内部表中删除重复项是一件微不足道的任务。 READ_TEXT部分正确。

2楼-- · 2020-09-13 13:18

也许可以将这些记录带到ITAB中,例如(VBELN,POSNR和THREAD),并按线程删除重复项。

Baoming ROSE
3楼-- · 2020-09-13 13:21

感谢您的答复 ,但是正如我提到的,我们只是想在这里获取线程号。这就是屏幕截图中的数字,例如1801,1675。这是业务需求,他们希望看到这些数字,因此我们无法致电查询为什么 想要这种方式。

模式是查找以* ZDMS_STOP *开头的行,并在此行之后获取数字,例如:1801。在每个ZDMS_STOP之后获取所有数字,然后删除重复的数字。 我该如何实现?

一周热门 更多>

点击此处---> EasySAP.com 一起学习S4 HANA ...

相关问答