【转载】ALV可输入(编辑)状态下输入金额/数量字段 小数位数提前(数量错误)的问题

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.

测试结果:

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值