首页 > 代码库 > [ABAP技术总结]几个小问题

[ABAP技术总结]几个小问题

<style></style> <script type="text/javascript">// 0 ? Math.ceil(iSpeed) : Math.floor(iSpeed); oBox.offsetTop == iTop ? clearInterval(oBox.timer) : (oBox.style.top = oBox.offsetTop + iSpeed + "px"); }, 10) }, 50) oMenu.onclick = function () { oBox.style.width = 260 + "px"; oMenu.style.display = "none"; oLine.style.display = "block"; }; oLine.onclick = function () { oBox.style.width = ‘‘; oLine.style.display = "none"; oMenu.style.display = "block"; }; var cat_nav = $("#cat_nav"); oLine.innerHTML = cat_nav.html();};// ]]></script>
目录导航
<script type="text/javascript">// </script>
声明:原创作品转载时请注明文章来自SAP师太博客并以超链接形式标明文章原始出处否则将追究法律责任!
原文出自:

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.           VBFAEKPO联合查询问题... 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 into  xstr in byte mode.

9.7.  VBFAEKPO联合查询问题

由于VBFA-POSNN EKPO-EBELP字段的类型相同,但长度不一样(VBFA-POSNN6位的数字类型,而EKPO-EBELP5位数字类型,但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为采购单凭证类型
 
WHERE  vbelv = it_result-vbeln AND posnv = it_result-posnr  AND vbtyp_n = ‘V‘.

HNTTP:采购凭证中的帐户设置类型,E——生产/销售所需物料的采购

分成两个可以正常查询:

SELECT SINGLE vbeln posnn
 
INTO (it_result-ebeln, it_result-ebelp)

 
FROM vbfa AS v"Where条件是:先根据销售单查找到前置采购单的单号与行项目号
  WHERE  vbelv = it_result-vbeln AND posnv = it_result-posnr  AND vbtyp_n = ‘V‘.

SELECT SINGLE  txz01 menge
 
INTO (it_result-txz01, it_result-menge_2)

 
FROM ekpo"Where条件是:再根据前面查出来的采购单号与行项目号,查出EKPO其他详细信息
 
WHERE  ebeln = it_result-ebeln AND ebelp = it_result-ebelp AND knttp
= ‘E‘.

[ABAP技术总结]几个小问题