smartform连续打印,并自动补充空行

来源:互联网 发布:java保留两位小数 %.2 编辑:程序博客网 时间:2024/05/29 14:21

该报表打印销售订单,可以在报表里选中多个销售单打印,对应的smartform实现了分页,自动补充空行及显示当前页和总页数等功能,smartform在资源里可以找到。

*&---------------------------------------------------------------------*

*& Report  ZSDR003
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  zsdr003.

TYPE-POOLS:slis.
TABLES:vbakvbaplipsmaktlikp.

DATAit_head TYPE TABLE OF zsdr003_head WITH HEADER LINE.
DATAit_head1 TYPE TABLE OF zsdr003_head WITH HEADER LINE.
DATAgt_sfhead TYPE TABLE OF zsdr003_head WITH HEADER LINE.
DATAit_item TYPE TABLE OF zsdr003_item WITH HEADER LINE.

DATA:  c_form_name       TYPE tdsfname ,
       c_form_title      TYPE string.

DATAgv_title TYPE lvc_title.
DATAgs_layout TYPE  slis_layout_alv,
      gt_fields  TYPE  slis_t_fieldcat_alv,
      gs_fields  TYPE  LINE  OF  slis_t_fieldcat_alv.

SELECTION-SCREEN BEGIN OF  BLOCK block1 WITH FRAME TITLE text-001.
SELECT-OPTIONSs_vkorg FOR vbak-vkorg.    "销售组织
SELECT-OPTIONSs_vtweg FOR vbak-vtweg.   "分销渠道
SELECT-OPTIONSs_kunnr FOR vbak-kunnr.     "客户编号
SELECT-OPTIONSs_vbeln FOR vbak-vbeln.       "销售订单号
SELECTION-SCREEN END OF BLOCK block1.

START-OF-SELECTION.
  PERFORM getdata.
  PERFORM alvdata.

*&---------------------------------------------------------------------*
*&      Form  getdata
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM getdata.
  SELECT
    vbeln
    vkorg
    vtweg
    spart
    auart
    audat
    erdat
    kunnr
    bstnk
    vsnmr_v
     INTO CORRESPONDING FIELDS OF TABLE it_head FROM vbak  WHERE vkorg IN s_vkorg AND vtweg IN s_vtweg AND kunnr IN s_kunnr AND vbeln IN s_vbeln.
ENDFORM.                    "getdata

*&---------------------------------------------------------------------*
*&      Form  getdetaildata
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM getheaddata.
  IF NOT it_head[] IS INITIAL.
    LOOP AT it_head WHERE che EQ 'X'.
      it_head1 it_head.
      APPEND it_head1.
    ENDLOOP.
  ENDIF.

ENDFORM.                    "getdetaildata

*&---------------------------------------------------------------------*
*&      Form  alvdata
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM alvdata.
  gs_layout-colwidth_optimize 'X'.
  gs_layout-box_fieldname 'CHE'.
  gs_layout-zebra 'X'.
  REFRESH gt_fields.
  CLEAR gs_fields.

  gs_fields-fieldname  =  'VKORG'.
  gs_fields-seltext_l  =  '销售组织'.
  APPEND  gs_fields  TO  gt_fields.
  CLEAR  gs_fields.

  gs_fields-fieldname  =  'VTWEG'.
  gs_fields-seltext_l  =  '分销渠道'.
  APPEND  gs_fields  TO  gt_fields.
  CLEAR  gs_fields.

  gs_fields-fieldname  =  'SPART'.
  gs_fields-seltext_l  =  '产品组'.
  APPEND  gs_fields  TO  gt_fields.
  CLEAR  gs_fields.

  gs_fields-fieldname  =  'KUNNR'.
  gs_fields-seltext_l  =  '客户编号'.
  APPEND  gs_fields  TO  gt_fields.
  CLEAR  gs_fields.

  gs_fields-fieldname  =  'VBELN'.
  gs_fields-seltext_l  =  '销售订单号'.
  APPEND  gs_fields  TO  gt_fields.
  CLEAR  gs_fields.

  gs_fields-fieldname  =  'AUDAT'.
  gs_fields-seltext_l  =  '凭证日期'.
  APPEND  gs_fields  TO  gt_fields.
  CLEAR  gs_fields.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program       sy-repid
      i_callback_pf_status_set 'SET_PF'
      i_callback_user_command  'USER_COM'
      i_grid_title             gv_title
      is_layout                gs_layout
      it_fieldcat              gt_fields
      i_save                   'X'
    TABLES
      t_outtab                 it_head
    EXCEPTIONS
      program_error            1
      OTHERS                   2.

ENDFORM.                    "alvdata

*&---------------------------------------------------------------------*
*&      Form  set_pf
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->EXTAB      text
*----------------------------------------------------------------------*
FORM  set_pf  USING    extab  TYPE  slis_t_extab.
  SET  PF-STATUS  'ZSDR003'.
ENDFORM.                    "set_pf

*&---------------------------------------------------------------------*
*&      Form  user_com
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->R_UCOMM      text
*      -->RS_SELFIELD  text
*----------------------------------------------------------------------*
FORM user_com USING r_ucomm LIKE sy-ucomm
      rs_selfield TYPE slis_selfield.

  DATAlr_grid TYPE REF TO cl_gui_alv_grid,
        myindex TYPE sy-tabix.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid lr_grid.
  CALL METHOD lr_grid->check_changed_data.
  rs_selfield-refresh 'X'.

  CASE r_ucomm.
    WHEN '&PRSO'.
      DATATYPE VALUE 0.
      LOOP AT it_head WHERE che EQ 'X'.
        1.
      ENDLOOP.
      IF 0.
        MESSAGE:'请选择需要打印的列' TYPE 'E'.
      ENDIF.

      PERFORM getheaddata.
      PERFORM printdata.

  ENDCASE.
  CLEAR r_ucomm.

ENDFORM.                    "user_com

*&---------------------------------------------------------------------*
*&      Form  printdata
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM printdata.
  DATAf_index LIKE sy-tabix.
  DATAlines_len TYPE i.
  DATAls_control_parameters  TYPE ssfctrlop.
  DATAls_output_options      TYPE ssfcompop.
  DATAl_smf_name             TYPE rs38l_fnam.


  c_form_name 'ZSDSF003'.          "对应的smartform的名称
  ls_output_options-tdimmed       'X'.
  ls_output_options-tdcopies      '1'.
  ls_output_options-tdnoprint     ''.
  ls_output_options-tddelete      'X'.

  ls_control_parameters-no_dialog ''.
  ls_control_parameters-preview   'X'.
  ls_control_parameters-langu     '1'.

  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      formname c_form_name
    IMPORTING
      fm_name  l_smf_name.

  SORT it_head1 BY vbeln.
  LOOP AT it_head1.
    ls_control_parameters-no_close 'X'.
    AT LAST.
      ls_control_parameters-no_close space.
    ENDAT.
    gt_sfhead it_head1.
    APPEND gt_sfhead.

    SELECT
  vbeln
  posnr
  matnr
  kwmeng
  meins
  INTO CORRESPONDING FIELDS OF TABLE it_item FROM  vbap  FOR ALL ENTRIES IN gt_sfhead WHERE vbeln gt_sfhead-vbeln.

    LOOP AT it_item.
      SELECT SINGLE maktx INTO it_item-maktx FROM makt WHERE matnr it_item-matnr.
      SELECT SUMlfimg INTO it_item-lfimg FROM lips WHERE vgbel it_item-vbeln AND vgpos it_item-posnr.
      it_item-remainqty it_item-kwmeng it_item-lfimg.
      MODIFY it_item.
    ENDLOOP.

    SORT it_item BY vbeln posnr.

    CALL FUNCTION l_smf_name
      EXPORTING
        control_parameters ls_control_parameters
        output_options     ls_output_options
        user_settings      'X'
      TABLES
        gt_head            gt_sfhead[]
        gt_item            it_item[]
      EXCEPTIONS
        formatting_error   1
        internal_error     2
        send_error         3
        user_canceled      4
        OTHERS             5.
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
    CLEAR gt_sfhead.
    REFRESH gt_sfhead[].
    CLEAR it_item.
    REFRESH it_item[].
    ls_control_parameters-no_open 'X'.
    AT LAST.
      ls_control_parameters-no_open space.
    ENDAT.
  ENDLOOP.
  CLEAR it_head1.
  REFRESH it_head1[].
ENDFORM.                    "printdata
1 0
原创粉丝点击