您的位置:首页 > 其它

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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: