在某个创建的自建表中,某个字段的数据元素为SAKNR(总账科目号),类型为CHAR(10),但是导入的数据的长度只有CHAR(6),比数据库字段要短,如果直接导入,不进行任何处理,会出现什么潜在的问题呢?
首先导入数据肯定不会出现错误,但是在使用中,我需要从表SKAT中查找总账科目的描述,但是无论如何都不能通过程序查找到描述信息,直接从表SKAT中却能找到相应总账科目的描述,这是为什么呢?
通过分析,发现SKAT中保存的科目长度全部为10位,不足的长度,前面都用“0”补齐,而我导入到自建表中的科目中数据却只有6位长度,后面用空格补齐,那么原因就找到了,我们在导入数据时,有些字段不能直接写入数据库,需要进行一定的处理。
那么如何进行处理呢,不能简单的想当然,在任何不足的长度前都用0补齐,对于不同的数据元素和域,它们处理的方式不一致,需要使用SAP系统提供的系统函数来进行处理。
在检查表SKAT的SAKNR字段的数据元素SAKNR,到域SAKNR,在Definition标签,Output Characteristics属性中,有一个Convers.routine为ALPHA,继续察看,可以看到系统提供的几个Function,如下
CONVERSION_EXIT_ALPHA_INPUT 对话退出ALPHA,外部->内部
CONVERSION_EXIT_ALPHA_OUTPUT 对话退出ALPHA,内部->外部
函数调用非常简单,如下
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = IG_UPLOAD-HKONT_NIS
IMPORTING
OUTPUT = WA_ZDFLNIS-HKONT_NIS
.
一般来说,需要进行补齐处理的有:科目,物料编码等各种编码,各种凭证编号,如物料凭证等。
1990年1月15日 2007年1月14日 2007年1月15日 2007年1月16日 2007年1月17日 2007年1月18日 2007年1月19日 2007年1月20日 2007年1月22日 2007年1月23日 2007年1月24日 2007年1月25日 2007年1月26日 2007年1月27日 2007年1月29日 2007年1月30日 2007年1月31日 2007年2月1日 2007年2月2日 2007年2月3日 2007年3月13日 2007年5月15日 2007年5月16日 2007年6月2日