AM482 - Time zone * is not valid in country * BUG 解决
【摘要】 症状Message ‘AM482 - Time zone * is not valid in country * (several possibilities)’ is being thrown in the system系统中抛出消息“AM482 - 时区 * 在国家/地区 * 无效(几种可能性)”问题出现:此消息可以来自许多不同的事务码,例如:当更改客户或者供应商、又或者是 PO 的时...
症状
- Message ‘AM482 - Time zone * is not valid in country * (several possibilities)’ is being thrown in the system
系统中抛出消息“AM482 - 时区 * 在国家/地区 * 无效(几种可能性)”
问题出现:此消息可以来自许多不同的事务码,例如:当更改客户或者供应商、又或者是 PO 的时候。
原因
设计逻辑来自于 Include 程序:LSZA2F20
中的 FORM CHECK_ADDR2_DATA
函数:
IF addr2_data-country <> space. "*1631i
*650i+
* DATA: lv_zipcode TYPE ad_pstcd1. "*1631d
IF NOT addr2_data-post_code1 IS INITIAL.
lv_zipcode = addr2_data-post_code1.
ELSE.
lv_zipcode = addr2_data-post_code2.
ENDIF.
*650i-
CALL FUNCTION 'TZON_LOCATION_TIMEZONE'
EXPORTING
if_country = addr2_data-country
if_region = addr2_data-region
if_zipcode = lv_zipcode "*650i
IMPORTING
ef_timezone = l_time_zone
EXCEPTIONS
no_timezone_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
PERFORM message
TABLES error_table
USING 'AM'
'I'
'195'
addr2_data-country
addr2_data-region
lv_zipcode "*650u
sy-msgv4
space
'TIME_ZONE'
c_null.
ELSE. "*650i
addr2_data-time_zone = l_time_zone. "*650i
ENDIF.
ENDIF.
ENDIF.
在表 TTZ5
中,SAP 中存储着不同国家维护的默认时区,例如 US 下面有两个时区:CST
和 UTC
在 TTZ5S
中,SAP 存储着指定地区的时区,例如,在这个表中能看到 US 的地区时区默认值:
如果在 BP 中维护地址信息时时区未填写,则会根据输入的国家/地区获取时区。
总结
在今后的代码中,也可以调用 TZON_LOCATION_TIMEZONE
传入国家和地区来获取相应的时区。
如果启用了邮政编码的话,还可以通过查询 TTZ5Z
分配常规长度的邮政编码来获取时区。
* try zip code first, if specified, and read generically
IF NOT if_zipcode IS INITIAL.
lf_count = strlen( if_zipcode ).
DO lf_count TIMES.
lf_length = lf_count - sy-index + 1.
ASSIGN if_zipcode(lf_length) TO <key>.
SELECT * UP TO 1 ROWS FROM ttz5z INTO ls_ttz5z
WHERE land1 = if_country
AND zipgene = <key>.
ENDSELECT.
IF syst-subrc IS INITIAL.
EXIT.
ENDIF.
ENDDO.
ef_timezone = ls_ttz5z-tzone.
ENDIF.
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)