一、货币转换因子
有些货币比较特殊,比如日元JPY、越南盾VND等货币是没有小数点的,表-TCURX
但是SAP系统后台表存储必须保留2位小数,所以前台和后台表查询到的金额会不一致。
SAP有设置转换因子,表-TCURF,比率为100表示在系统中存储缩小了100倍
可以调用函数:CURRENCY_CONVERTING_FACTOR - 获取转换因子,将金额进行换算
DATA: F_FACTOR TYPE P DECIMALS 3.
CLEAR: F_FACTOR.
**获取转换因子
CALL FUNCTION 'CURRENCY_CONVERTING_FACTOR'
EXPORTING
currency = GT_BSEG-WAERS
IMPORTING
factor = F_FACTOR "USD转换因子是1;JPY转换因子是100
EXCEPTIONS
too_many_decimals = 1
OTHERS = 2.
IF F_FACTOR IS NOT INITIAL.
gt_bseg-wrbtr_n = gt_bseg-wrbtr_n * F_FACTOR. "原币金额 * 转换因子
ENDIF.
也可以调用函数:BAPI_CURRENCY_CONV_TO_EXTERNAL - 将内部金额转换成外部实际金额
另外转换因子=100的货币目前发现有两个地方比较特殊:
(1)创建销售发票的BAPI如果传输了金额,会自动扩大100倍,所以传金额时要/100
"创建发票
CALL FUNCTION 'BAPI_BILLINGDOC_CREATEMULTIPLE'
TABLES
billingdatain = lt_billingdatain
conditiondatain = lt_conditiondatain
* CCARDDATAIN =
* TEXTDATAIN =
* ERRORS =
return = lt_return1
success = lt_success.
(2)创建会计凭证BAPI不能保留2位小数上传,否则会因为小数点尾差报错,“交易货币余额”
CALL FUNCTION 'BAPI_ACC_DOCUMENT_CHECK'
EXPORTING
documentheader = gd_documentheader
customercpd = gd_customercpd
contractheader = gd_fica_hd
TABLES
accountgl = it_accountgl
accountreceivable = it_accountreceivable
accountpayable = it_accountpayable
accounttax = it_accounttax
currencyamount = it_currencyamount
criteria = it_criteria
valuefield = it_valuefield
extension1 = it_extension1
return = it_return
paymentcard = it_paymentcard
contractitem = it_fica_it
extension2 = it_extension2
realestate = it_realestate.
批量创建会计凭证:导入文件需要四舍五入,不保留小数位,确保借贷金额相等,日元/韩元/越南盾等币别,系统中是没有小数位的
二、汇率维护
维护货币兑换汇率类型-OB07
EURX-变化汇率(欧盟国家使用,CNY->EUR维护)
M-平均汇率(财务记账使用的汇率)
V-期末评估汇率(外币评估汇率)
维护货币汇率-OB08
货币汇率每修改一次,都会创建一条新的记录,存储在表-TCURR中
汇率转换函数:CONVERT_TO_LOCAL_CURRENCY
CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
EXPORTING
DATE = SY-DATUM
FOREIGN_AMOUNT = F_PRICE
FOREIGN_CURRENCY = ITAB-WAERS "将外币转换为CNY
LOCAL_CURRENCY = 'CNY'
IMPORTING
LOCAL_AMOUNT = IT_MAIN-F_NETPR
EXCEPTIONS
NO_RATE_FOUND = 1
OVERFLOW = 2
NO_FACTORS_FOUND = 3
NO_SPREAD_FOUND = 4
DERIVED_2_TIMES = 5
OTHERS = 6.
以上~~