sap 如何正确的取物料主数据的销售长文本
2010-04-22 16:58
686 查看
如何正确的取物料主数据的销售长文本呢?今天在取它的时候发生了一个典型的错误了,在这之前一直认为没有必要发blog讲这个东西,因为认为比较简单,就跟取普通的长文本一个性质,但我错了,真的错了!下面来看看物料主数据的销售长文本:
在上图中,在取物料主数据的销售长文本,必须要知道这个物料对应的销售组织、分销渠道,这样才能决定值是唯一的!
上图就是能过函数read_text访问长文本的相关参数,其中红色部分就是物料编码,绿色部分就是销售组织,蓝色部分就是分销渠道;红色部分是我们的难点部分,因为这一部分的空格部分是不确定的,这就要求我们只能通过模糊查询匹配,如下的方法是大家通用的方法:
DATA: TDSPRAS TYPE STXH-TDSPRAS.
DATA: L_NAME LIKE THEAD-TDNAME,
L_NAME2 LIKE STXH-TDNAME.
DATA: T_LINES LIKE TLINE OCCURS 0 WITH HEADER LINE.
CLEAR L_NAME.
CLEAR L_NAME2.
CONCATENATE T_VBAP-MATNR '%' '1200' '%' INTO L_NAME. ”模糊查询条件
CLEAR TDSPRAS.
SELECT SINGLE TDSPRAS TDNAME
INTO (TDSPRAS,L_NAME2)
FROM STXH
WHERE TDID = '0001'
AND TDOBJECT = 'MVKE'
AND TDNAME like L_NAME
AND TDSPRAS = '1'.
CLEAR T_VBAP-L_TEXT.
IF TDSPRAS <> ''.
CALL FUNCTION 'READ_TEXT'
EXPORTING
CLIENT = SY-MANDT
ID = '0001'
LANGUAGE = '1'
NAME = L_NAME2
OBJECT = 'MVKE'
TABLES
LINES = T_LINES.
LOOP AT T_LINES.
CONCATENATE T_VBAP-L_TEXT T_LINES-TDLINE INTO T_VBAP-L_TEXT SEPARATED BY ' '.
ENDLOOP.
CLEAR T_LINES.
SPLIT T_VBAP-L_TEXT AT '*' INTO T_VBAP-CWB_MS T_VBAP-CWB_BM.
MODIFY T_VBAP.
ENDIF.
上面的这种方法存在一种缺陷,没有考虑周到,存在这样一种情况:
比如物料A:matnr(test_001)没有维护相关的销售长文本,物料B:matnr(test_001_1)维护了相关的物料长文本,如果要查物
料A的销售长文本也是可以查到的,为什么呢?因为物料A的模糊查询条件为'test_001%1200%',这种情况就把物料B的销售长文本取给物料A
了,那还有没有方法可以改进了呢?下面介绍本人的方法,如果大家有好的不妨一块讨论:
DATA: TDSPRAS TYPE STXH-TDSPRAS.
DATA: L_NAME LIKE THEAD-TDNAME,
L_NAME2 LIKE STXH-TDNAME.
DATA: T_LINES LIKE TLINE OCCURS 0 WITH HEADER LINE.
*** 定义临时物料编码
data: l_matnr like mara-matnr.
*** 定义一个内表用于存储长文本相关信息
data: begin of t_text occurs 0,
tdspras like stxh-tdspras,
tdname like stxh-tdname,
end of t_text.
CLEAR L_NAME.
CLEAR L_NAME2.
CONCATENATE T_VBAP-MATNR '%' '1200' '%' INTO L_NAME. ”模糊查询条件
CLEAR TDSPRAS.
SELECT TDSPRAS TDNAME
into corresponding fields of table t_text
FROM STXH
WHERE TDID = '0001'
AND TDOBJECT = 'MVKE'
AND TDNAME like L_NAME
AND TDSPRAS = '1'.
**** 根据物料编码进行比较
loop at t_text.
l_matnr = t_text-tdname(18) "取前18位作为物料编码
if l_matnr = matnr. "与当前的物料编码进行比较,只有相等
tdspras = t_text-tdspras.
l_name2 = t_text-tdname.
exit.
endif.
endloop.
CLEAR T_VBAP-L_TEXT.
IF TDSPRAS <> ''.
CALL FUNCTION 'READ_TEXT'
EXPORTING
CLIENT = SY-MANDT
ID = '0001'
LANGUAGE = '1'
NAME = L_NAME2
OBJECT = 'MVKE'
TABLES
LINES = T_LINES.
LOOP AT T_LINES.
CONCATENATE T_VBAP-L_TEXT T_LINES-TDLINE INTO T_VBAP-L_TEXT SEPARATED BY ' '.
ENDLOOP.
CLEAR T_LINES.
SPLIT T_VBAP-L_TEXT AT '*' INTO T_VBAP-CWB_MS T_VBAP-CWB_BM.
MODIFY T_VBAP.
ENDIF.
在上图中,在取物料主数据的销售长文本,必须要知道这个物料对应的销售组织、分销渠道,这样才能决定值是唯一的!
上图就是能过函数read_text访问长文本的相关参数,其中红色部分就是物料编码,绿色部分就是销售组织,蓝色部分就是分销渠道;红色部分是我们的难点部分,因为这一部分的空格部分是不确定的,这就要求我们只能通过模糊查询匹配,如下的方法是大家通用的方法:
DATA: TDSPRAS TYPE STXH-TDSPRAS.
DATA: L_NAME LIKE THEAD-TDNAME,
L_NAME2 LIKE STXH-TDNAME.
DATA: T_LINES LIKE TLINE OCCURS 0 WITH HEADER LINE.
CLEAR L_NAME.
CLEAR L_NAME2.
CONCATENATE T_VBAP-MATNR '%' '1200' '%' INTO L_NAME. ”模糊查询条件
CLEAR TDSPRAS.
SELECT SINGLE TDSPRAS TDNAME
INTO (TDSPRAS,L_NAME2)
FROM STXH
WHERE TDID = '0001'
AND TDOBJECT = 'MVKE'
AND TDNAME like L_NAME
AND TDSPRAS = '1'.
CLEAR T_VBAP-L_TEXT.
IF TDSPRAS <> ''.
CALL FUNCTION 'READ_TEXT'
EXPORTING
CLIENT = SY-MANDT
ID = '0001'
LANGUAGE = '1'
NAME = L_NAME2
OBJECT = 'MVKE'
TABLES
LINES = T_LINES.
LOOP AT T_LINES.
CONCATENATE T_VBAP-L_TEXT T_LINES-TDLINE INTO T_VBAP-L_TEXT SEPARATED BY ' '.
ENDLOOP.
CLEAR T_LINES.
SPLIT T_VBAP-L_TEXT AT '*' INTO T_VBAP-CWB_MS T_VBAP-CWB_BM.
MODIFY T_VBAP.
ENDIF.
上面的这种方法存在一种缺陷,没有考虑周到,存在这样一种情况:
比如物料A:matnr(test_001)没有维护相关的销售长文本,物料B:matnr(test_001_1)维护了相关的物料长文本,如果要查物
料A的销售长文本也是可以查到的,为什么呢?因为物料A的模糊查询条件为'test_001%1200%',这种情况就把物料B的销售长文本取给物料A
了,那还有没有方法可以改进了呢?下面介绍本人的方法,如果大家有好的不妨一块讨论:
DATA: TDSPRAS TYPE STXH-TDSPRAS.
DATA: L_NAME LIKE THEAD-TDNAME,
L_NAME2 LIKE STXH-TDNAME.
DATA: T_LINES LIKE TLINE OCCURS 0 WITH HEADER LINE.
*** 定义临时物料编码
data: l_matnr like mara-matnr.
*** 定义一个内表用于存储长文本相关信息
data: begin of t_text occurs 0,
tdspras like stxh-tdspras,
tdname like stxh-tdname,
end of t_text.
CLEAR L_NAME.
CLEAR L_NAME2.
CONCATENATE T_VBAP-MATNR '%' '1200' '%' INTO L_NAME. ”模糊查询条件
CLEAR TDSPRAS.
SELECT TDSPRAS TDNAME
into corresponding fields of table t_text
FROM STXH
WHERE TDID = '0001'
AND TDOBJECT = 'MVKE'
AND TDNAME like L_NAME
AND TDSPRAS = '1'.
**** 根据物料编码进行比较
loop at t_text.
l_matnr = t_text-tdname(18) "取前18位作为物料编码
if l_matnr = matnr. "与当前的物料编码进行比较,只有相等
tdspras = t_text-tdspras.
l_name2 = t_text-tdname.
exit.
endif.
endloop.
CLEAR T_VBAP-L_TEXT.
IF TDSPRAS <> ''.
CALL FUNCTION 'READ_TEXT'
EXPORTING
CLIENT = SY-MANDT
ID = '0001'
LANGUAGE = '1'
NAME = L_NAME2
OBJECT = 'MVKE'
TABLES
LINES = T_LINES.
LOOP AT T_LINES.
CONCATENATE T_VBAP-L_TEXT T_LINES-TDLINE INTO T_VBAP-L_TEXT SEPARATED BY ' '.
ENDLOOP.
CLEAR T_LINES.
SPLIT T_VBAP-L_TEXT AT '*' INTO T_VBAP-CWB_MS T_VBAP-CWB_BM.
MODIFY T_VBAP.
ENDIF.
相关文章推荐
- SAP创建物料主数据(维护长文本,质量视图中质量类型,分类视图)
- SAP物料主数据_销售视图设置
- C语言中文件操作--如何将文本数据正确读到字符串数组中
- 如何在SAP物料主数据的会计视图中修改物料的价格控制?
- SAP: 如何取物料主数据的特性值
- 如何用代码的方式取出SAP C4C销售订单创建后所有业务伙伴的数据
- 如何快速的知道程序中输入的大段数据哪一行没有被正确执行或输出
- oracle如何快速导入导出文本格式数据
- sap-物料主数据和交货默认仓库位置的关系
- 如何正确计算文本所占字节数
- 如何正确理解PHP获取显示数据库数据函数
- GOOGLE Gadgets 处理远程内容,如何提取和控制远程文本(通常为 HTML)、XML、JSON 和 RSS/Atom 供稿数据。
- tensorflow之路-如何处理原始文本数据
- 如何正确使用Java I/O输出和读入数据
- 数据绑定控件Repeater/GridView/DataList在前台显示正确的文本格式
- SAP FI FAGLFLEXT/FAGLFLEXA 数据不正确重新更新操作
- SAP销售和财务数据库表之间的关系
- java如何读取txt文本数据并以数组形式一行一行取值
- 如何将SAP数据传输到其他系统(Transferring Data from SAP to Other Systems)
- ABAP--如何进行sap的金额数据存储和显示之间的转换(CURRENCY_AMOUNT_DISPLAY_TO_SAP)