SAPscript Form小数点格式问题总结

来源:互联网 发布:seo外链发布平台 编辑:程序博客网 时间:2024/05/17 08:07

 

Created by

Leon Li

Date

2011/5/21

 

 

目录

 

SAPscript Form小数点格式问题总结... 1

一、         问题:... 1

二、         ‘SET COUNTRY country_key’介绍... 1

三、         实验:... 2

四、         总结:... 9

 

 

 


一、问题:

SAPscript Form在显示数值的时候,会根据系统或者个人参数中的‘Decimal Notation’选项的值来显示。如下图事务代码‘SU03’中的‘Decimal Notation’选项的值是小数点为逗号。

个人参数设置图

1 个人参数设置图

但是,SAPscript Form在显示的时候常常需要强制小数点显示为点号,那么应该怎么处理呢?这里介绍一个使用SAPscript Form的‘SET COUNTRY country_key’命令的方式。

 

二、‘SET COUNTRY country_key’介绍


SET COUNTRYcountry_key’命令用于处理和国家相关的数值和日期的显示方式。Country_key存储在系统表T005X中。该命令会去T005X表中根据输入的Country_key查找数值和日期的显示方式,然后再决定用什么样的方式显示。

T005X有 三个主要的字段,LANDCountry Key,如中国的LAND值为CNXDEZPDecimalnotation,储存的是数值显示的方式,具体的值与显示方式的关系如表1所示;DATFMDate format,储存的是日期的显示方式,具体的值与显示方式的关系如表2所示。

 

XDEZP值与显示方式的关系表

1 XDEZP值与显示方式的关系表

DATFM值与显示方式的关系表

2 DATFM值与显示方式的关系表

 

三、实验:


1.      将个人参数中的‘Decimal Notation’选项的值设为小数点为逗号。

2.      查看T005X表中中国的数值和日期的显示代码。如图3。如果XDEZP的值不是‘X’的话可以自己写个SQL语句修改一下。

update t005x set xdezp 'X' where land 'CN'.

T003X表中LAND=’CN’的值

3 T003X表中LAND=’CN’的值

3.      创建一个ScripFormZSF_DECIMAL_TEST。基本设置如下:

4.      设置MAIN Window里的文本数据,先不添加‘SET COUNTRY country_key’命令。

5.      创建程序Z_CALL_SFDECIMALTEST调用此ScriptForm,代码如下:

REPORT  Z_CALL_SFDECIMALTEST.
DATAsflight TYPE TABLE OF sflight WITH HEADER LINE.

SELECT INTO TABLE sflight FROM sflight UP TO 25 ROWS.

CALL FUNCTION 'OPEN_FORM'
 
EXPORTING
*   APPLICATION                       = 'TX'
*   ARCHIVE_INDEX                     =
*   ARCHIVE_PARAMS                    =
*   DEVICE                            = 'PRINTER'
*   DIALOG                            = 'X'
   
form                              'ZSF_DECIMAL_TEST'
*   LANGUAGE                          = SY-LANGU
*   OPTIONS                           =
*   MAIL_SENDER                       =
*   MAIL_RECIPIENT                    =
*   MAIL_APPL_OBJECT                  =
*   RAW_DATA_INTERFACE                = '*'
*   SPONUMIV                          =
* IMPORTING
*   LANGUAGE                          =
*   NEW_ARCHIVE_PARAMS                =
*   RESULT                            =
* EXCEPTIONS
*   CANCELED                          = 1
*   DEVICE                            = 2
*   FORM                              = 3
*   OPTIONS                           = 4
*   UNCLOSED                          = 5
*   MAIL_OPTIONS                      = 6
*   ARCHIVE_ERROR                     = 7
*   INVALID_FAX_NUMBER                = 8
*   MORE_PARAMS_NEEDED_IN_BATCH       = 9
*   SPOOL_ERROR                       = 10
*   CODEPAGE                          = 11
*   OTHERS                            = 12
          
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

*Output title
CALL FUNCTION 'WRITE_FORM'
 
EXPORTING
   element                        
'TITLE'
   
function                       'SET'
   
type                           'BODY'
   
window                         'TITLE'
* IMPORTING
*   PENDING_LINES                  =
* EXCEPTIONS
*   ELEMENT                        = 1
*   FUNCTION                       = 2
*   TYPE                           = 3
*   UNOPENED                       = 4
*   UNSTARTED                      = 5
*   WINDOW                         = 6
*   BAD_PAGEFORMAT_FOR_PRINT       = 7
*   SPOOL_ERROR                    = 8
*   CODEPAGE                       = 9
*   OTHERS                         = 10
          
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

*Output content
LOOP AT sflight.
CALL FUNCTION 'WRITE_FORM'
 
EXPORTING
   ELEMENT                        
'DATA'
   
FUNCTION                       'SET'
   
TYPE                           'BODY'
   
WINDOW                         'MAIN'
* IMPORTING
*   PENDING_LINES                  =
* EXCEPTIONS
*   ELEMENT                        = 1
*   FUNCTION                       = 2
*   TYPE                           = 3
*   UNOPENED                       = 4
*   UNSTARTED                      = 5
*   WINDOW                         = 6
*   BAD_PAGEFORMAT_FOR_PRINT       = 7
*   SPOOL_ERROR                    = 8
*   CODEPAGE                       = 9
*   OTHERS                         = 10
          
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDLOOP.

*Close form
CALL FUNCTION 'CLOSE_FORM'
* IMPORTING
*   RESULT                         =
*   RDI_RESULT                     =
* TABLES
*   OTFDATA                        =
* EXCEPTIONS
*   UNOPENED                       = 1
*   BAD_PAGEFORMAT_FOR_PRINT       = 2
*   SEND_ERROR                     = 3
*   SPOOL_ERROR                    = 4
*   CODEPAGE                       = 5
*   OTHERS                         = 6
          
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

6.      激活ScriptForm和程序。运行程序。可见不添加‘SET COUNTRY country_key’命令时,数值的显示时的小数点是逗号。

 

7.      修改MAIN Window里的文本数据。

8.      激活ScriptForm并运行程序。可见数值的显示时的小数点是点号。

 

四、总结:

 

通过这个命令可以较方便的改变数值和日期的显示方式。‘SET COUNTRY country_key’命令也可以用在ABAP程序中。例子如下:

DATAdat       TYPE sy-datum VALUE '20020127',
      num       
TYPE p  LENGTH DECIMALS VALUE '1234567.89',
      t005x_wa  
TYPE t005x,
      t005x_tab 
TYPE SORTED TABLE OF t005x
                
WITH NON-UNIQUE KEY xdezp datfm.

SELECT *
       
FROM t005x
       
INTO TABLE t005x_tab.

DELETE ADJACENT DUPLICATES FROM t005x_tab.

LOOP AT t005x_tab INTO t005x_wa.
  
SET COUNTRY t005x_wa-land.
  
WRITE/ numdat.
ENDLOOP.

 结果如下图:

 

 

原创粉丝点击