正如格式设置的文档解释:
格式设置如下: 在内部会话开始时,它们由当前用户的用户主记录中的固定值中的相关默认设置确定。 使用语句SET COUNTRY,可以使用特定国家/地区的格式覆盖当前内部会话的此默认设置。
但是正如文档明确指出的那样,没有办法查询实际使用此语句设置的内容:
不要将语句SET COUNTRY与语句SET LOCALE LANGUAGE的过时添加COUNTRY混淆,后者用于设置文本环境。特别是,它没有相应的GET COUNTRY语句。
确实,GET LOCALE
纪录提到:
添加COUNTRY用于显式读取当前文本环境的国家/地区密钥。 cntry需要一个类似字符的数据对象。此添加的功能未完全实现,结果未定义。
语句GET LOCALE的添加COUNTRY不提取可以使用SET COUNTRY设置的格式设置。
这给我留下了一些难题。我可以使用FM SUSR_GET_USER_DEFAULTS
确定我的用户默认值。我可以从表T005X
中找出该国家的设置。 但我无法确定设置了哪个特定国家/地区格式,甚至如果在活动会话中设置了一个
奖金问题:有没有办法在调试器中解决这个问题?
答案 0 :(得分:3)
也许您可以使用功能模块CLSE_SELECT_USR01
。
以下示例:
REPORT test.
START-OF-SELECTION.
DATA: decimal_sign , separator.
PERFORM output.
SET COUNTRY 'US'.
PERFORM output.
FORM output.
CALL FUNCTION 'CLSE_SELECT_USR01'
* EXPORTING
* USERNAME = sy-uname
* IV_DELETE_BUFFER = ' '
IMPORTING
* X_USR01 =
* DATE_FORMAT =
decimal_sign = decimal_sign
separator = separator.
WRITE: / 'DECIMAL_SIGN', decimal_sign, 'separator', separator.
ENDFORM.
我的默认语言环境是DE,所以我得到小数的实际设置。
来自你的评论:
不幸的是,我必须从潜在的许多不同的表单源解析和分析为屏幕显示准备的输出数据。
您是在运行时还是之前的运行中获得输出?因为过去没有时间机器从呼叫中获取语言环境:)
答案 1 :(得分:2)
ABAP语句SET COUNTRY
可能会更改日期格式,时间格式(自ABAP 7.02起)和数字格式,但是正式没有相反的方法来获取当前有效的国家/地区代码(如您在问题中引用的那样) ,基于ABAP文档)。这是很合逻辑的,例如,当前的数字格式可能与当前的国家/地区代码不同,因此最好直接测试所需使用的格式,如下所示。
要检测当前的日期格式,请使用返回字符的官方方法,该字符的可能值在ABAP documentation of Date Formats中进行了描述):
DATA(current_date_format) = CL_ABAP_DATFM=>GET_DATFM( ).
要检测当前的时间格式,请使用返回字符的官方方法:
DATA(current_time_format) = CL_ABAP_TIMEFM=>GET_ENVIRONMENT_TIMEFM( ).
它返回以下值之一,示例值对应于正午+ 5分钟10秒(如果示例值至少以11个字符输出,则给出示例值):
要检测当前的数字格式,请根据@Gert Beukema的想法,执行以下操作:
DATA(current_number_format) = SWITCH usr01-dcpfm(
|{ 1000 NUMBER = ENVIRONMENT DECIMALS = 1 }|
WHEN '1.000,00' THEN ' '
WHEN '1,000.00' THEN 'X'
WHEN '1 000,00' THEN 'Y' ).
NB:此表达式返回的值
,X
和Y
与表列USR01-DCPFM
和{{1 }}。