[SAP ABAP开发技术总结]几个小问题
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接:http://www.cnblogs.com/jiangzhengjun/p/4264760.html 以前做项目中遇到的,很多没来得急记下来,先贴几个吧
9. 问题... 79
9.1. ALV自带导出文件时字段数据末尾被截断问题... 79
9.2. Smartform 中Template无法显示减号后面内容... 80
9.3. Smartform金额或者数量字段显示不出来... 80
9.4. 更新数据库表时,工作区或内表的结构需参考数据库表来定义... 80
9.5. DELETE ADJACENT DUPLICATES…去重复... 80
9.6. Text使用Excel打开乱码问题... 80
9.7. VBFA与EKPO联合查询问题... 81
9. 问题
9.1.ALV自带导出文件时字段数据末尾被截断问题
发现有前导0时,导出会被截断:现发现VBAK-VBELN 与 MARA-MFRNR都有这个问题,可能原因是他们带有转换输出与输入规则所导致
另一种解决办法:
9.2.Smartform 中Template无法显示减号后面内容
在Smartform中的Template里,如果输入的变量内容含有减号,则减号后面的内容会被丢掉
问题原因:输出的内容超出了Template单元格的长度
解决办法:更改TEMPLATE的长度,或者换成 TABLE
9.3.Smartform金额或者数量字段显示不出来
9.4.更新数据库表时,工作区或内表的结构需参考数据库表来定义
使用使用MODIFY更新数据库表时,工作区或内表的行结构与数据库表结构中各字段声明顺序要相同,否则更新会错位,该内表最好参照数据库词典结构类型来声明,这样就不会有问题。
9.5.DELETE ADJACENT DUPLICATES…去重复
DELETE ADJACENT DUPLICATES FROM <itab> [COMPARING<f1><f2> ... | ALL FIELDS]
注,在未使用COMPARING 选项时,要删除重复数据之前,一定要按照内表关键字声明的顺序来进行排序,才能删除重复数据,否则不会删除掉;如果指定了COMPARING 选项,则需要根据指定的比较字段顺序进行排序(如COMPARING <F1><F2>时,则需要sort by <F1><F2>,而不能是sort by <F2><F1>),才能删除所有重复数据
9.6.Text使用Excel打开乱码问题
如果使用GUI_DOWNLOAD函数下载文本文件,或者是发送邮件的附件,在英文XP操作系统中使用英文Excel软件打开时,请使用 UTF-16LE 编码,否则可能出现乱码情况。
data:l_codepage(4) type n .
data:l_encoding(20).
"根据编码名获取对应的CodePage
callfunction'SCP_CODEPAGE_BY_EXTERNAL_NAME'
EXPORTING
external_name = 'UTF-16LE'
IMPORTING
sap_codepage= l_codepage.
l_encoding = l_codepage.
data: convout type ref to cl_abap_conv_out_ce.
convout = cl_abap_conv_out_ce=>create( encoding = l_encoding ).
convout->write( data = lv_content )."将字符按照l_encoding编码格式转换为X类型(二进制)
xstr =convout->get_buffer( ).
"在码流最前面加上编码信息,该编码由文本编辑软件在打开文件时使用
concatenate cl_abap_char_utilities=>byte_order_mark_little
xstr intoxstr in byte mode.
9.7.VBFA与EKPO联合查询问题
由于VBFA-POSNN 与 EKPO-EBELP字段的类型相同,但长度不一样(VBFA-POSNN是6位的数字类型,而EKPO-EBELP为5位数字类型,但VBAP-POSNR行项目号是6位数字类型,不会出现此类问题),所以它们不能进行关联查询,相似的还有VBFA- POSNV也是6位的。下面这个关联查询是查不出数据的,只能分两次查询:
SELECT SINGLE vbeln posnn txz01 menge
INTO (it_result-ebeln, it_result-ebelp, it_result-txz01 , it_result-menge_2)
FROM vbfa AS v INNER JOIN ekpo AS e ON v~vbeln = e~ebeln AND v~posnn = e~ebelp AND e~knttp = 'E'"Where条件是根据销售单查找前置单据——采购单,V为采购单凭证类型
WHEREvbelv = it_result-vbeln AND posnv = it_result-posnrAND vbtyp_n = 'V'.
HNTTP:采购凭证中的帐户设置类型,E——生产/销售所需物料的采购
分成两个可以正常查询:
SELECT SINGLE vbeln posnn
INTO (it_result-ebeln, it_result-ebelp)
FROM vbfa AS v"Where条件是:先根据销售单查找到前置采购单的单号与行项目号
WHEREvbelv = it_result-vbeln AND posnv = it_result-posnrAND vbtyp_n = 'V'.
SELECT SINGLEtxz01 menge
INTO (it_result-txz01, it_result-menge_2)
FROM ekpo"Where条件是:再根据前面查出来的采购单号与行项目号,查出EKPO其他详细信息
WHEREebeln = it_result-ebeln AND ebelp = it_result-ebelp AND knttp = 'E'.
页:
[1]