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

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

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

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

REPORT  zsdr003 .

TYPE-POOLS :slis .
TABLES :vbak vbap lips makt likp .

DATA it_head  TYPE  TABLE  OF zsdr003_head  WITH  HEADER  LINE .
DATA it_head1  TYPE  TABLE  OF zsdr003_head  WITH  HEADER  LINE .
DATA gt_sfhead  TYPE  TABLE  OF zsdr003_head  WITH  HEADER  LINE .
DATA it_item  TYPE  TABLE  OF zsdr003_item  WITH  HEADER  LINE .

DATA :  c_form_name        TYPE tdsfname  ,
       c_form_title       TYPE string .

DATA gv_title  TYPE lvc_title .
DATA gs_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-OPTIONS s_vkorg  FOR vbak -vkorg .     "销售组织
SELECT-OPTIONS s_vtweg  FOR vbak -vtweg .    "分销渠道
SELECT-OPTIONS s_kunnr  FOR vbak -kunnr .      "客户编号
SELECT-OPTIONS s_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 .

   DATA lr_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' .
       DATA TYPE  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 .
   DATA f_index  LIKE sy -tabix .
   DATA lines_len  TYPE  i .
   DATA ls_control_parameters   TYPE ssfctrlop .
   DATA ls_output_options       TYPE ssfcompop .
   DATA l_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  SUM lfimg  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

你可能感兴趣的:(smartform连续打印,并自动补充空行)