确定ABAP中的活动格式设置
正如秘书长解释的那样: 格式设置如下所示:确定ABAP中的活动格式设置,abap,Abap,正如秘书长解释的那样: 格式设置如下所示: DATA(current_number_format) = SWITCH usr01-dcpfm( |{ 1000 NUMBER = ENVIRONMENT DECIMALS = 1 }| WHEN '1.000,00' THEN ' ' WHEN '1,000.00'
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' ).
- 在内部会话开始时,它们由当前用户的用户主记录中的固定值中的相关默认设置决定
- 使用语句集COUNTRY,可以使用特定于国家/地区的格式覆盖当前内部会话的默认设置
SUSR\u GET\u user\u defaults
确定我的用户默认值。我可以从表T005X
中计算出国家/地区的设置但我无法确定设置了哪种特定的国家/地区格式,甚至无法确定是否在活动会话中设置了一种格式强>
如何确定哪些格式设置当前处于活动状态?
附加问题:有没有办法在调试器中解决这个问题?也许您可以使用功能模块
CLSE\u SELECT\u 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,因此我得到小数的实际设置
根据您的评论:
不幸的是,我必须解析和分析为屏幕显示准备的输出数据,这些数据可能来自几十个不同的表单源
您是在运行时还是在上一次运行时获得输出?因为过去没有时间机器从调用中获取区域设置:)也许您可以使用功能模块
CLSE\u SELECT\u 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,因此我得到小数的实际设置
根据您的评论:
不幸的是,我必须解析和分析为屏幕显示准备的输出数据,这些数据可能来自几十个不同的表单源
您是在运行时还是在上一次运行时获得输出?因为过去没有时间机器可以从调用中获取区域设置:)ABAP语句可能会更改日期格式、时间格式(自ABAP 7.02起)和数字格式,但是官方没有相反的方法来获取当前活动的国家代码(如您在问题中引用的,基于ABAP文档)。这是非常合乎逻辑的,因为,例如,当前的数字格式可能与当前的国家代码不同,因此最好直接测试您需要使用的格式,如下所示
DATA(current_time_format) = CL_ABAP_TIMEFM=>GET_ENVIRONMENT_TIMEFM( ).
它返回以下值之一,示例值对应于中午+5分10秒(如果输出至少11个字符,则给出示例值):
- 0:12:05:10(0至23)
- 下午1:12:05:10(0至12)
- 下午2:12:05:10(0至12)
- 下午3:00:05:10(0至11)
- 下午4:00:05:10(0至11)
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' ).
注意:此表达式返回的值
、X
和Y
与表列USR01-DCPFM
和T005X-XDEZP
中使用的值相同
DATA(current_time_format) = CL_ABAP_TIMEFM=>GET_ENVIRONMENT_TIMEFM( ).
它返回以下值之一,示例值对应于中午+5分10秒(如果输出至少11个字符,则给出示例值):
- 0:12:05:10(0至23)
- 下午1:12:05:10(0至12)
- 下午2:12:05:10(0至12)
- 下午3:00:05:10(0至11)
- 下午4:00:05:10(0至11)
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' ).
注意:此表达式返回的值
、X
和Y
与表列USR01-DCPFM
和T005X-XDEZP
中使用的值相同
为什么您需要知道这一点-任何特殊的应用程序需求或只是一般开发人员的好奇心?在我见过的大多数情况下,这不是一个检查设置的问题,只要拿起大锤并执行您需要的设置:-)@vwegert True,我知道我需要它的原因是因为我正在做我应该做的事情