金色传说:SAP-SD-VA01增强:创建销售订单时检查抬头长文本必输增强
文章目录
- 需求
- 一、需求分析
- 二、需求实现
- 1.从内存中获取长文本数据
- 二、实现步骤
- 1.获得所有本销售订单长文本
- 2.读取抬头长文本
- 3.代码示例
需求
VA01创建特定类型销售订单时检查抬头的长文本有没有输入内容,还必须是ZH中文的内容,没输入时不能保存销售订单.
一、需求分析
销售订单保存增强MV45AFZZ执行时,还没产生销售订单号,自然也产生不了长文本存储时需要的TDNAME,更不用说保存到数据表了,所以,直接在增强MV45AFZZ中查STXH表是获取不到数据的,给大家分享下我的增强检查方法
二、需求实现
1.从内存中获取长文本数据
sap在长文本保存,读取等操作时,有一个特殊的函数组:SAPLSTXD,可以用SE38查看.
经过分析,在SAPLSTXD=>LSTXDUXX=>LSTXDU08的230行位置找到了需要的内存参数ID.
二、实现步骤
1.获得所有本销售订单长文本
代码如下(示例):
*--------------------------------------------------------------------S↓*
"S4 检查销售订单抬头,必须录入长文本,且必须是中文的 12.09.2024 09:45:03
DATA BEGIN OF catalog OCCURS 50.
INCLUDE STRUCTURE tcatalog.
DATA END OF catalog.
DATA BEGIN OF theader.
INCLUDE STRUCTURE thead.
DATA END OF theader.
DATA BEGIN OF gt_lines occurs 50.
INCLUDE STRUCTURE tline.
DATA END OF gt_lines.
"取得所有该销售订单的长文本内存
IMPORT catalog FROM MEMORY ID 'SAPLSTXD'.
2.读取抬头长文本
示例取得的数据如下:
TDOBJECT字段:
VBBK表示抬头文本;VBBP是行项目文本
TDNAME字段:
只有XXXXX的是抬头文本;XXXX000010的表示是行项目第一行
TDID字段:
表示文本id顺序,上图的第四行TDID=0001,就表示的是下图中的 表格抬头长文本,TDID=0002表示的就是下图的抬头注释1
TDSPRAS字段:代表语言,1是中文,E是英语,其他的可以用函数CONVERSION_EXIT_ISOLA_INPUT 进行查询
ID字段:
表示这个销售订单所有长文本的输入顺序,可以用来拼装取长文本具体内容的的内存ID参数
3.代码示例
代码如下(示例):
DATA BEGIN OF catalog OCCURS 50.
INCLUDE STRUCTURE tcatalog.
DATA END OF catalog.
"这是获取详细内容用的
DATA BEGIN OF theader.
INCLUDE STRUCTURE thead.
DATA END OF theader.
DATA BEGIN OF gt_lines occurs 50.
INCLUDE STRUCTURE tline.
DATA END OF gt_lines.
DATA head_id(14) TYPE c.
IF ( sy-tcode = 'VA01' OR sy-tcode = 'VA02') AND ( xvbak-auart EQ 'ZOR1' OR xvbak-auart EQ 'ZOR8').
"取得所有该销售订单的长文本内存
IMPORT catalog FROM MEMORY ID 'SAPLSTXD'.
LOOP AT catalog INTO DATA(ds_head) WHERE tdobject EQ 'VBBK' AND tdspras EQ '1'.
head_id = 'SAPLSTXD' && ds_head-id.
EXIT.
ENDLOOP.
IF ds_head IS INITIAL.
MESSAGE E146(ZV00).
ENDIF.
"长文本详细内容
* IF head_id IS NOT INITIAL.
* IMPORT thead TO theader tline TO gt_lines FROM MEMORY ID head_id.
* LOOP AT gt_lines.
* "在此处理长文本的内容
* ENDLOOP.
* ENDIF.
ENDIF.
---
# 总结
SAP博大精深