如何使用FastReport.Net在SAP NetWeaver中生成报表 - 第2部分 输出信息(打印文档)
文章的第1部分
任务:
构建采购订单的打印格式并生成文档类型“NB标准订单”。
例:
准备数据字典。
对于PO输出数据,我们需要在ABAP字典中创建结构。 这些结构将在报表设计器中用作数据源。
运行事项SE11。 创建并激活以下对象:
结构ZZPO_ITEM_S
表格类型ZZPO_ITEM_TT
结构ZZPO_PARTNER_S
结构ZZPO_DOC_S
表格类型ZZPO_DOC_TT
准备模板
运行事项ZFR_RMAN。
按“新建”按钮,并添加一个新的报告“ZPO_FR”,其参数如屏幕截图所示
保存报告。
保存切换到编辑模式后(按“编辑”按钮),然后按“Designer”按钮。
系统将要求输入数据源表。 输入ZPO_DOC_TT。
确认后Fast report designer将被打开。
配置bands。
菜单:Report->Configure bands。
- 配置(添加\删除)bands,如截图所示 按“关闭”按钮。
- 双击第一级“数据”band,选择“ITEMS”作为数据源。
- 双击第二级“数据”band,选择“SCHD”作为数据源。
- 放置报告元素。
- 展开“报告标题”band,从元素工具栏放置“文本元素”,并填充静态文本。 将字段从“MYDATASET”数据源表拖动到“报告标题”。
- 格式化“页眉”,显示项目标题(添加静态文本元素)。
- 格式化“数据:ITEMS” - 从“ITEMS”表中放置字段。
- 格式化“数据:SCHD” - 从“SHDL”表中放置字段。
- 从“ITEMS”表([ITEMS.MENGE]和[ITEMS.MEINS])中放置摘要字段到“页脚”区域的位置。
designer的用户和开发人员手册可以在这里找到://cahobeh.cn/product/3657/download
最终模板:
如果按“预览”按钮 - 报告将为空,因为仍然没有生成“测试”数据。 稍后我们将看到如何使用数据生成临时数据和预览报告。
保存报告模板(按SAP标准按钮)并退出designer。
现在按“保存”保存\更新报告设置。
开发打印程序并执行定制
我们需要开发程序\例程以便能够从采购订单输出功能调用打印表单。
在ABAP Workbench中创建新的模块池ZZMM_FRPRINTING。
使用以下代码添加子程序“po_print_fr”:
*&---------------------------------------------------------------------* *& Module Pool ZZMM_FRPRINTING *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* PROGRAM zzmm_frprinting. TABLES: nast. *&---------------------------------------------------------------------* *& Form po_print_fr *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->ENT_RETCO text * -->ENT_SCREEN text *----------------------------------------------------------------------* FORM po_print_fr USING ent_retco ent_screen. DATA: lv_druvo LIKE t166k-druvo, ls_nast LIKE nast, lv_from_memory, ls_doc TYPE meein_purchase_doc_print, lt_ret TYPE bapiret2_t. DATA lo_fr TYPE REF TO zcl_frbase_report. DATA: ls_order TYPE zzpo_doc_s, lt_order TYPE zzpo_doc_tt, ls_item TYPE zzpo_item_s, ls_schd TYPE eket. FIELD-SYMBOLS: <fs1> TYPE ekpo, <fs2> TYPE eket. CLEAR ent_retco. IF nast-aende EQ space. lv_druvo = '1'. ELSE. lv_druvo = '2'. ENDIF. CALL FUNCTION 'ME_READ_PO_FOR_PRINTING' EXPORTING ix_nast = nast ix_screen = ent_screen IMPORTING ex_retco = ent_retco ex_nast = ls_nast doc = ls_doc CHANGING cx_druvo = lv_druvo cx_from_memory = lv_from_memory. CHECK ent_retco EQ 0. MOVE-CORRESPONDING ls_doc-xekko TO ls_order. SELECT SINGLE * INTO CORRESPONDING FIELDS OF ls_order-provdata FROM lfa1 WHERE lifnr = ls_order-lifnr. LOOP AT ls_doc-xekpo ASSIGNING <fs1>. CLEAR ls_item. MOVE-CORRESPONDING <fs1> TO ls_item. LOOP AT ls_doc-xeket ASSIGNING <fs2>. CLEAR ls_schd. CHECK <fs2>-ebelp = ls_item-ebelp. MOVE-CORRESPONDING <fs2> TO ls_schd. APPEND ls_schd TO ls_item-schd. ENDLOOP. APPEND ls_item TO ls_order-items. ENDLOOP. APPEND ls_order TO lt_order. CREATE OBJECT lo_fr EXPORTING iv_reportkey = 'ZPO_FR'. " use for production ent_retco = lo_fr->build_report( lt_order ). ********************************************************************** **use for debugging\template correction " DATA: lv_answer. " lo_fr->set_mode( zcl_frbase_report=>mc_edit ). " lo_fr->call_designer( lt_order ). " CALL FUNCTION 'POPUP_TO_CONFIRM' " EXPORTING " text_question = 'update report template in DB?' " IMPORTING " answer = lv_answer. " if lv_answer eq '1'. " lo_fr->save_report( ). " ENDIF. ********************************************************************** ENDFORM. "po_print_fr
在代码中,我们调用函数来检索PO信息,然后将数据映射到我们的结构,并调用方法ZCL_FRBASE_REPORT-> BUILD_REPORT来生成报告。 如果我们需要调试表单与测试数据 - 注释调用“BUILD_REPORT”方法和下面的注释部分。
定制。
调用交易NACE并为采购订单创建新的输出类型ZZFR。 打印程序选择ZZMM_FRPRINTING和例行PO_PRINT_FR。 选择访问序列0001。
向输出模式添加新的输出类型(例如RMBEF1)
创建条件类型ZZFR和PO类型NB的条件记录。
打开以下设置路径:SPRO->物料管理 - >采购 - >消息 - >输出控制 - >消息类型 - >定义采购订单的消息类型 - >微调控制:采购订单。
添加ZZFR的记录
现在,您可以使用事项ME23N中的标准按钮打开现有的采购订单或创建新的采购订单并测试打印表单。 否则使用事项ME9F进行打印。
推荐阅读
- FastReport VCL报表控件开发者手册
- FastReport Online Designer中文手册
- Fastreport.Net教程2016
- Fastreport.Net用户手册
- FastReport.Net教程2017(持续更新中···)
- FastReport Online Designer教程2017(持续更新中···)
- 报表教程2017(持续更新中···)