按月分布转换报告
Transform report with distribution by months
我从 RFKSLD00
程序生成了以下 ALV 报告:
我需要根据上面的报告生成一份报告(作为我工作的一部分):
有什么办法吗?我不是在寻求解决方案,而是关于如何实现这一目标的一些步骤。
原始报告的每一行都是你报告的一行,你只需要调整当地货币的总和,即将所有值乘以当地货币汇率。黄色总计线不会让您感到困惑,它们是由网格生成的,而不是由报表生成的。
原始报告中唯一缺少的是余额结转的借方和贷方,我想在原始报告中你已经核对了价值。要为其获取单独的值,您需要检查代码。
第一步是声明最终结构并table基于它:
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.
那么您只需要在内部循环原始报告 table 并填充您的最终结构,不要缺少货币转换:
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 并避免手动编码。
这只是快速拍摄,我可能会遗漏一些细节和错误。
我从 RFKSLD00
程序生成了以下 ALV 报告:
我需要根据上面的报告生成一份报告(作为我工作的一部分):
有什么办法吗?我不是在寻求解决方案,而是关于如何实现这一目标的一些步骤。
原始报告的每一行都是你报告的一行,你只需要调整当地货币的总和,即将所有值乘以当地货币汇率。黄色总计线不会让您感到困惑,它们是由网格生成的,而不是由报表生成的。
原始报告中唯一缺少的是余额结转的借方和贷方,我想在原始报告中你已经核对了价值。要为其获取单独的值,您需要检查代码。
第一步是声明最终结构并table基于它:
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.
那么您只需要在内部循环原始报告 table 并填充您的最终结构,不要缺少货币转换:
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 并避免手动编码。
这只是快速拍摄,我可能会遗漏一些细节和错误。