AM482 - Time zone * is not valid in country * BUG 解决

举报
雨绸缪 发表于 2023/10/30 16:22:30 2023/10/30
【摘要】 症状Message ‘AM482 - Time zone * is not valid in country * (several possibilities)’ is being thrown in the system系统中抛出消息“AM482 - 时区 * 在国家/地区 * 无效(几种可能性)”问题出现:此消息可以来自许多不同的事务码,例如:当更改客户或者供应商、又或者是 PO 的时...

症状

  1. 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 下面有两个时区:CSTUTC

image.png

TTZ5S 中,SAP 存储着指定地区的时区,例如,在这个表中能看到 US 的地区时区默认值:

image.png

如果在 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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。