按月转换报表

时间:2019-07-17 11:04:30

标签: report sap abap alv

我从RFKSLD00程序生成了以下ALV报告:

enter image description here

我需要基于上述报告生成一份报告(作为我的工作的一部分):

enter image description here

任何想法如何做到这一点?我不是在寻求解决方案,而是在实现该目标的步骤。

1 个答案:

答案 0 :(得分:0)

原始报告的每一行都是报告的一行,您只需要调整本地货币的总和,即将所有值乘以本地货币汇率即可。黄色总计行不应该让您感到困惑,它们是由表格而不是报表生成的。

原始报告中唯一缺少的是余额结转的借方和贷方,我想在原始文件中您已经对账了。要获取单独的值,您需要检查代码。

第一步是基于它声明最终的结构和表:

 TYPES: BEGIN OF ty_report,
          rec_acc TYPE skont,
          vendor TYPE lifnr,
          ...
          jan_deb TYPE wrbtr,
          jan_cred TYPE wrbtr,
          febr_deb TYPE wrbtr,
          febr_cred TYPE wrbtr,
          ...
          acc_bal_deb TYPE wrbtr,
          acc_bal_cred TYPE wrbtr,
        END OF ty_report,
        tt_report TYPE TABLE OF ty_report.
 DATA:  lt_report TYPE tt_report.

然后,您只需循环原始报表内部表并填写最终结构,而不会丢失货币换算:

select single * from tcurr
        into @DATA(tcurr)
        where fcurr = 'EUR'
        and   tcurr = 'AUD'. "<- your  local currency

DATA(lv_ukurs) = tcurr-ukurs.

LOOP AT orig_table INTO DATA(orig_line).

 APPEND INITIAL LINE INTO lt_report ASSIGNING FIELD-SYMBOL(<fs_rep>).
 MOVE-CORRESPONDING orig_line TO <fs_rep>.

 CASE orig_line-monat. "<- your period
  WHEN '01'.
   <fs_rep>-jan_deb = orig_line-debit.
   <fs_rep>-jan_cred = orig_line-credit.
  WHEN '02'.
   <fs_rep>-febr_deb = orig_line-debit.
   <fs_rep>-febr_cred = orig_line-credit.
  ...
 ENDCASE.

 DO 30 TIMES.
  ASSIGN COMPONENT sy-index OF STRUCTURE <fs_rep> TO FIELD-SYMBOL(<field>).
   CHECK sy-subrc = 0.
  DESCRIBE FIELD <field> TYPE DATA(TYP).
   CHECK TYP = 'P'.
  CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
   EXPORTING
   DATE                    = sy-datum
   FOREIGN_CURRENCY        = 'EUR'
   LOCAL_CURRENCY          = 'AUD'
   FOREIGN_AMOUNT          = <field>
   TYPE_OF_RATE            = 'M'
  IMPORTING
   EXCHANGE_RATE           = lv_ukurs
   LOCAL_AMOUNT            = <field>.
 ENDDO.

ENDLOOP.

我建议尽可能将最终结构ty_report的所有组件命名为原始名称。因此,您可以最大程度地利用MOVE-CORRESPONDING并避免手动编码。

这只是个捷径,我可能会遗漏一些细节和错误。