一个常用的ABAP报表程序模板

分享一个常用的ABAP报表程序模板,通过一个本地的main class实现GUI相关的校验,然后预留start( )方法来启动真正的业务逻辑。

Report z_abc.

"------ part 1: constants & global data declaration --------
TYPE-POOLS icon.
CONSTANTS:
  BEGIN OF gc_alv_icon,
    light_green    TYPE icon_d VALUE icon_led_green,
    light_red      TYPE icon_d VALUE icon_led_red,
  END OF gc_alv_icon,

DATA gv_okcode_0100 TYPE syst-ucomm.
DATA gv_okcode_0101 TYPE syst-ucomm.
DATA go_global_controller TYPE REF TO lcl_global_controller ##NEEDED.

"------ part 2: Selection Screen etc --------
  PARAMETERS p_bukrs TYPE bkpf-bukrs.
  PARAMETERS p_belnr TYPE bkpf-belnr.
  PARAMETERS p_gjahr TYPE bkpf-gjahr.

"------ part 3: Main Wrapper Class --------
CLASS lcl_main DEFINITION FINAL CREATE PRIVATE.
  PUBLIC SECTION.
    CLASS-DATA go_instance TYPE REF TO lcl_main READ-ONLY.
    CLASS-METHODS class_constructor.

    METHODS initialization.
    METHODS at_output.
    METHODS check_and_start.

  PRIVATE SECTION.
    METHODS check_screen_input.
    METHODS start.
ENDCLASS.

CLASS lcl_main IMPLEMENTATION.
  METHOD class_constructor.
    go_instance = NEW #(  ).
  ENDMETHOD.

  METHOD initialization.
     " authorization check etc
  ENDMETHOD.

  METHOD at_output.
   " screen modification
   " to hide or display some fields etc
  ENDMETHOD.

  METHOD check_and_start.
    CHECK sy-ucomm = 'ONLI'.
    check_screen_input(  ).
    start(  ).
  ENDMETHOD.

  METHOD check_screen_input.
   " screen input validation etc
  ENDMETHOD.

  METHOD start.
   " actual business logic etc. 
   " this part could be handled in another global or local class
   " go_global_controller = lcl_global_controller=>get( ).
   " CALL SCREEN 0100.
  ENDMETHOD.
ENDCLASS.

"------ part 4: handle GUI event --------
INITIALIZATION.
  lcl_main=>go_instance->initialization( ).

AT SELECTION-SCREEN OUTPUT.
  lcl_main=>go_instance->at_output( ).

AT SELECTION-SCREEN.
  lcl_main=>go_instance->check_and_start(  ).

"------ (optional) part 5: handle PBO/PAI if any custominzed screen.  --------
" -------- better to have a seperate INCLUDE for this part  --------
*PROCESS BEFORE OUTPUT.
*  MODULE status_0100.
*  MODULE fill_data_0100.

*PROCESS AFTER INPUT.
*  MODULE user_command_0100.

*MODULE status_0100 OUTPUT.
*  SET PF-STATUS '0100'.
*  SET TITLEBAR '0100'.
*ENDMODULE.

*MODULE fill_data_0100 OUTPUT.
*  go_global_controller->refresh_data(  ).
*ENDMODULE.

*MODULE user_command_0100 INPUT.
*  CASE gv_okcode_0100.
*    WHEN 'EXIT' OR 'CANCEL'.
*      LEAVE PROGRAM.
*    WHEN 'BACK'.
*      SET SCREEN 0.
*    WHEN 'REFRESH'.
*      go_global_controller->handle_okcode_refresh(  ).
*  ENDCASE.
*  CLEAR gv_okcode_0100.
*ENDMODULE.

本博客专注于技术分享,干货满满,持续更新。 欢迎关注❤️、点赞👍、转发📣!

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 好的,我可以为您提供一个简单的 ABAP 过账程序的示例。 报表名称:ZPOST_DOCUMENT REPORT ZPOST_DOCUMENT. * 定义变量 DATA: BEGIN OF lv_document, company TYPE bseg-bukrs, document TYPE bkpf-belnr, fiscalyear TYPE bkpf-gjahr, END OF lv_document. * 输入公司代码和凭证编号 lv_document-company = '1000'. lv_document-document = '00000001'. lv_document-fiscalyear = '2020'. * 过账凭证 CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST' EXPORTING documentheader = lv_document IMPORTING return = return. * 检查过账结果 IF return-type NE 'S'. MESSAGE '过账失败: ' return-message TYPE 'E'. ELSE. MESSAGE '过账成功!' TYPE 'S'. ENDIF. 这是一个简单的过账程序,使用了 BAPI 函数 BAPI_ACC_DOCUMENT_POST 来过账凭证。在调用该函数时,需要传入凭证头信息,包括公司代码、凭证编号和财务年度。然后,通过判断函数的返回值类型来确定过账是否成功。 希望这个示例对您有帮助。 ### 回答2: 在ABAP中编写过账程序,首先需要准备相关的报表和数据准备。 1. 设置报表格式:根据过账需求确定报表的列名和相关字段,例如凭证号、过账日期、物料号、数量、金额等。可以使用ALV报表或者普通的内表来展示数据。 2. 数据准备:根据过账需求,从相应的数据源中获取数据。例如,从物料管理中获取库存数据,从财务管理中获取凭证数据等。 3. 过账逻辑编写:根据过账需求,编写逻辑来实现过账功能。过账逻辑包括但不限于以下步骤: a. 验证数据的有效性:例如检查凭证号是否存在,物料号是否有效等。 b. 更新相关数据:例如更新库存数量、更新凭证状态等。 c. 记录日志:记录过账操作的日志,包括成功或失败信息。 4. 报表显示:根据所选的报表格式,将过账结果以报表的形式展示出来。可以使用ALV报表来展示数据,并根据需求设置合适的列宽、列标签等。 5. 错误处理:对可能出现的错误进行合理处理,并将错误信息显示在报表中。例如,如果库存不足,可以显示相应的错误信息。 6. 测试与调试:完成以上工作后,进行测试和调试,确保过账程序功能的正确性和稳定性。 总结:编写ABAP过账程序需要准备报表格式、数据准备,编写过账逻辑,展示结果,并进行错误处理和测试调试。这样可以实现根据需求执行过账操作并输出结果的功能。 ### 回答3: ABAP过账程序是基于报表的一种编程方式,其主要目的是将特定的数据从一个地方转移到另一个地方,实现系统的财务处理和会计核算。下面是一个简单的示例来说明如何使用报表一个ABAP过账程序。 首先,我们需要确定需要过账的数据和相关的报表。例如,假设我们要将销售订单的发货情况过账到财务系统中,我们可以选择使用VA05(销售订单报表)和VKM5(发货情况报表)作为我们的基础报表。 接下来,我们需要编写一个ABAP程序,通过调用这些报表来获取需要过账的数据。我们可以使用SELECT语句从报表中读取数据,并将其保存到一个内部表中。 然后,我们可以根据需要进行数据处理和转换,例如计算总金额、调整日期格式等。这可以通过循环遍历内部表,并对数据进行相应的操作来实现。 一旦我们完成数据的处理和转换,我们就可以调用财务系统的过账函数或BAPI,将数据传输到财务系统中。我们可以使用CALL FUNCTION或CALL TRANSACTION语句来实现。 最后,我们可以添加一些错误处理和日志记录机制,以便在过账过程中发生错误时进行适当的处理和记录。 综上所述,以上是一个简单的示例来说明如何使用报表一个ABAP过账程序。实际的过账程序可能会更加复杂,并涉及更多的数据处理和转换。但是基本的步骤和原理是相同的。通过编写一个适当的ABAP程序,我们可以实现系统的财务处理和会计核算需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SAP-nkGavin

给作者赏杯咖啡

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

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

打赏作者

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

抵扣说明:

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

余额充值