SAP ABAP ALV转换例程的问题

100 篇文章 9 订阅

为关键用户开发了一个ALV报表,因为导出Excel导致 curr性质的字段 例程的 问题 ,使得负号后置,Excel不能直接运算,需要转换你成数值后才可以,经过调试发现是对应的域 的转换例程的问题

FUNCTION CONVERSION_EXIT_AC152_INPUT.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     VALUE(INPUT)
*"     VALUE(REFVAL) OPTIONAL
*"     VALUE(CURRENCY) OPTIONAL
*"  EXPORTING
*"     VALUE(OUTPUT)
*"----------------------------------------------------------------------

* When using RS_CONV_EX_2_IN_NO_DD we have to care for passing the
* the required type info to this FM.
* This is acchieved by doing useful settings into the FM's input parameter CONVERT.
  DATA: ls_convert      TYPE rsconvlite,
        odata_flag      TYPE abap_bool VALUE abap_false,
        lv_input_string TYPE string,
        lr_input        TYPE REF TO data.
  FIELD-SYMBOLS <lv_input> TYPE any.

* indicate that CONVERT contains useful settings
  ls_convert-active   = 'X'.

* indicate that a sign is allowed (if necessary!)
  ls_convert-sign = 'X'.

  IF currency IS SUPPLIED.
    lv_input_string = input.
    DATA(lv_len) = strlen( lv_input_string ).
    IF lv_len = 0.
      lv_len = 1.
    ENDIF.
    CREATE DATA lr_input TYPE c LENGTH lv_len.
    ASSIGN lr_input->* TO <lv_input>.
    <lv_input> = input.
    refval = currency.
    odata_flag = abap_true.
  ELSE.
    ASSIGN input TO <lv_input>.
  ENDIF.

* set the allowed output length
* this should match the lentgh of the input field
  DESCRIBE FIELD <lv_input> TYPE DATA(lv_source_type).
  IF lv_source_type = cl_abap_typedescr=>typekind_string.
    DESCRIBE FIELD output OUTPUT-LENGTH ls_convert-olength.
    odata_flag = abap_true.
  ELSEIF lv_source_type = cl_abap_typedescr=>typekind_packed.
    DESCRIBE FIELD <lv_input> LENGTH DATA(lv_bytelength) IN BYTE MODE.
    ls_convert-olength  = lv_bytelength * 2.
    odata_flag = abap_true.
  ELSE.
    DESCRIBE FIELD <lv_input> LENGTH ls_convert-olength IN CHARACTER MODE.
  ENDIF.

* set decimals to the default for currency fields
  ls_convert-decimals = 2.

* no further settings to be done here

  CALL FUNCTION 'AFLE_CONVERSION_COMMON_CUR_IN'
    EXPORTING
      input      = <lv_input>
      refval     = refval
      convert    = ls_convert
      length     = 15
      odata_flag = odata_flag
      decimals   = 2
    IMPORTING
      output     = output.


ENDFUNCTION.
FUNCTION CONVERSION_EXIT_AC152_OUTPUT.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     VALUE(INPUT)
*"     VALUE(REFVAL) OPTIONAL
*"     VALUE(CURRENCY) OPTIONAL
*"  EXPORTING
*"     VALUE(OUTPUT)
*"----------------------------------------------------------------------

IF currency IS NOT SUPPLIED.

    CALL FUNCTION 'AFLE_CONVERSION_COMMON_CUR_OUT'
      EXPORTING
        input  = input
        refval = refval
      IMPORTING
        output = output.

  ELSE.
    DATA lv_output_string TYPE string.
    "Gateway specific logic
    CALL FUNCTION 'CURRENCY_AMOUNT_SAP_TO_IDOC'
      EXPORTING
        currency    = currency
        sap_amount  = input
      IMPORTING
        idoc_amount = lv_output_string.

    CONDENSE lv_output_string NO-GAPS.

    " Negative Currency Amount: '2.00-' => '-2.00'
    IF lv_output_string IS NOT INITIAL.
      SHIFT lv_output_string RIGHT CIRCULAR.
      IF lv_output_string(1) <> '-'.
        SHIFT lv_output_string LEFT CIRCULAR.
      ENDIF.
    ENDIF.
    output = lv_output_string.
  ENDIF.

ENDFUNCTION.

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gavin_gxh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值