1, 问题描述
ALV单元格在可输入状态下,金额和数量类型的字段小数点的位置会发生错误,数量是quan类型,金额是curr类型,如下:
错误情况如下:qty输入66,结果显示0.066小数点提前3位,差1000倍,price输入7,结果显示0.07,小数点提前两位,差100倍。
2, 问题解决
方法如下:
1、对于货币字段,catalog中再添加一个“指定数据类型”的属性datatype,如下:
wa_fieldcat-datatype = 'CURR' . " 指定数据类型
这样在修改数据并保存时,才能将数据保持原样,否则输入的数据会自动将小数点提前2位;
2、对于数量字段,也要添加一个“指定数据类型”的属性,才能保持数据的正确性,如下:
wa_fieldcat-datatype = 'QUAN' . " 指定数据类型
wa_fieldcat-inttype = 'C' . "这个是指定字段的类型为C
完整代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
REPORT ztest_alv_lvc_edit.
TYPES:BEGIN OF gty_ekko,
ebeln TYPE ekko-ebeln,
menge TYPE ekpo-menge,
netwr TYPE ekpo-netwr,
END OF gty_ekko.
DATA:git_ekko TYPE STANDARD TABLE OF gty_ekko,
gwa_ekko TYPE gty_ekko.
DATA:git_fcat TYPE lvc_t_fcat,
gwa_fcat LIKE LINE OF git_fcat,
gwa_layout TYPE lvc_s_layo,
gwa_glay TYPE lvc_s_glay.
START-OF-SELECTION.
SELECT ebeln
menge
netwr
INTO CORRESPONDING FIELDS OF TABLE git_ekko
FROM ekpo
UP TO 10 ROWS.
PERFORM frm_set_catalog.
gwa_layout-zebra = 'X'.
gwa_layout-sel_mode = 'A'.
gwa_layout-cwidth_opt = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
is_layout_lvc = gwa_layout
it_fieldcat_lvc = git_fcat
TABLES
t_outtab = git_ekko[]
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc = 0.
ENDIF.
*&---------------------------------------------------------------------*
*& Form FRM_SET_CATALOG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_set_catalog .
DATA:l_pos TYPE i VALUE 1.
CLEAR: l_pos.
l_pos = l_pos + 1.
gwa_fcat-coltext = 'PO'.
gwa_fcat-scrtext_l = 'PO'.
gwa_fcat-scrtext_m = 'PO'.
gwa_fcat-scrtext_s = 'PO'.
gwa_fcat-fieldname = 'EBELN'.
gwa_fcat-col_pos = l_pos.
* gwa_fcat-edit = 'X'.
gwa_fcat-outputlen = '10'.
APPEND gwa_fcat TO git_fcat.
l_pos = l_pos + 1.
gwa_fcat-coltext = 'Qty'.
gwa_fcat-scrtext_l = 'Qty'.
gwa_fcat-scrtext_m = 'Qty'.
gwa_fcat-scrtext_s = 'Qty'.
gwa_fcat-fieldname = 'MENGE'.
gwa_fcat-datatype = 'QUAN' . "指定该字段为数量
gwa_fcat-inttype = 'C' . "指定该字段类型为C
gwa_fcat-edit = 'X'.
gwa_fcat-col_pos = l_pos.
gwa_fcat-outputlen = '10'.
APPEND gwa_fcat TO git_fcat.
l_pos = l_pos + 1.
gwa_fcat-coltext = ''.
gwa_fcat-scrtext_l = 'Price'.
gwa_fcat-scrtext_m = 'Price'.
gwa_fcat-scrtext_s = 'Price'.
gwa_fcat-fieldname = 'NETWR'.
gwa_fcat-datatype = 'CURR' . "指定该字段为金额
gwa_fcat-edit = 'X'.
gwa_fcat-col_pos = l_pos.
gwa_fcat-outputlen = '10'.
APPEND gwa_fcat TO git_fcat.
ENDFORM.
|
测试结果:
以上。