
SAP SMARTFORMS 凭证连续打印设置操作之三
---利用ALV显示,并进行手动选择打印
在SAP系统中,凭证经常需要连续打印,如从凭证号100,打印至120;要求系统在打印
的时候自动按凭证号进行分页处理。下面的例子是利用表传递数据至SMARTFORMS中,并且利
用打印程序中的表循环来实现凭证的自动分页打印处理;而SMARTFORMS的设置则非常的简单,
按一凭证号来进行设置即可。下面进行具体的操作讲解。
一、 打印效果显示,如下图所示:
运行报表程序:
运行后,出现下面的界面,这时我们就可以选择需要打印的单据号,然后再点击工具栏中的“打印”
按钮,即可进行选择性的连续打印,如下图:
上面为显示连续打印三销售凭证,运行后如下图所示:
二、 数据结构体的定义 zwyvbap;TCODE:SE11,此结构体在后面的程序中也要用到,是传
递数据的接口。定义如下图所示:
三、 SMARTFORMS FORM界面设置
1、表格接口的数据,如下图所示:
2、表格接口表的数据如下图所示:
3、全局定义中的数据定义如下图所示:
四、 SMARTFORMS页和窗口的操作:
1、页头显示容。下面的操作都只进行截图显示。如下图所示:
2、MAIN主窗口的设置:
打印表体的表头显示,如下图所示:
表体循环显示:
新程序行的设置:
统计区域的设置:
页尾的设置:
五、 REPORT 完整代码清单,如下图所示(TCODE:SE38):
*&---------------------------------------------------------------------*
*& Report ZP_SD_006
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zp_sd_007.
INCLUDE zp_sd_007_varl.
INCLUDE zp_sd_007_form.
INCLUDE zp_sd_007_alv.
START-OF-SELECTION.
PERFORM get_data_alv.
PERFORM show_alv TABLES gt_vbak_alv.
*&---------------------------------------------------------------------*
*& ZP_SD_007_VARL
包含
*&---------------------------------------------------------------------*
TABLES: vbak.
DATA: formname TYPE tdsfname,
fm_name TYPE rs38l_fnam,
control TYPE ssfctrlop,
errtab TYPE tsferror.
DATA: BEGIN OF gt_vbak OCCURS 0. "
定义表
INCLUDE TYPE zwyvbap.
DATA: END OF gt_vbak.
DATA: BEGIN OF gt_vbap OCCURS 0, "
定义表
vbeln LIKE vbak-vbeln.
DATA: END OF gt_vbap.
DATA: p_vbeln TYPE vbak-vbeln.
* FORM
定义传递到中的页头数据
DATA:
vkorg TYPE vbak-vkorg, "
销售组织
vtweg TYPE vbak-vtweg, "
分销渠道
vkbur TYPE vbak-vkbur, "
销售办事处
vkgrp TYPE vbak-vkgrp, "
销售组
kunnr TYPE vbak-kunnr, "
供应商代码
name1 TYPE kna1-name1, "
供应商名称
vbeln TYPE vbak-vbeln, "
订单
audat TYPE vbak-audat. "
过账日期
* ALV
定义显示在界面上的表
DATA: BEGIN OF gt_vbak_alv OCCURS 0,
vkorg TYPE vbak-vkorg, "
销售组织
vtweg TYPE vbak-vtweg, "
分销渠道
vkbur TYPE vbak-vkbur, "
销售办事处
vkgrp TYPE vbak-vkgrp, "
销售组
kunnr TYPE vbak-kunnr, "
供应商代码
name1 TYPE kna1-name1, "
供应商名称
vbeln TYPE vbak-vbeln, "
订单
audat TYPE vbak-audat, "
过账日期
le TYPE char1. "
定义选中栏,边上的
DATA: END OF gt_vbak_alv.
SELECTION-SCREEN BEGIN OF BLOCK 100 WITH FRAME TITLE text-001.
*PARAMETERS s_vbeln TYPE vbak-vbeln OBLIGATORY.
SELECT-OPTIONS: s_vbeln FOR vbak-vbeln DEFAULT '4970' TO '4990'. "
定义需要打印的
凭证
SELECTION-SCREEN END OF BLOCK 100.
*&---------------------------------------------------------------------*
*& ZP_SD_007_FORM
包含
*$
显示在界面上的数据
*&---------------------------------------------------------------------*
FORM get_data_alv.
SELECT
vkorg
vtweg
vkbur
vkgrp
kunnr
vbeln
audat
INTO CORRESPONDING FIELDS OF TABLE gt_vbak_alv
FROM vbak
WHERE vbeln IN s_vbeln.
ENDFORM. "get_data_alv
*&---------------------------------------------------------------------*
*& Form print_so
*&---------------------------------------------------------------------*
* text
设置打印的程序
*----------------------------------------------------------------------*
FORM print_so.
CLEAR gt_vbap[].
* SELECT vbeln INTO CORRESPONDING FIELDS OF TABLE gt_vbap FROM vbak WHERE vbeln
IN s_vbeln.
*
获取选中的数据,并把选中的数据传递至表中。
LOOP AT gt_vbak_alv WHERE le = 'X'.
gt_vbap-vbeln = gt_vbak_alv-vbeln.
APPEND gt_vbap.
ENDLOOP.
formname = 'ZSD_PRINT_001'.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = formname "#########Form## importing
IMPORTING
fm_name = fm_name
EXCEPTIONS
no_form = 1
no_founction_module = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
control-no_dialog = 'X'.
control-preview = 'X'.
control-no_open = 'X'.
control-no_clo = 'X'.
CALL FUNCTION 'SSF_OPEN'
EXPORTING
* ARCHIVE_PARAMETERS =
* USER_SETTINGS = 'X'
* MAIL_SENDER =
* MAIL_RECIPIENT =
* MAIL_APPL_OBJ =
* OUTPUT_OPTIONS =
control_parameters = control
* IMPORTING
* JOB_OUTPUT_OPTIONS =
EXCEPTIONS
formatting_error = 1
internal_error = 2
nd_error = 3
ur_canceled = 4
OTHERS = 5.
IF sy-subrc <> 0.
* error handling
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
EXIT.
ENDIF.
LOOP AT gt_vbap. "
对凭证号进行循环处理,即在程序中进行分页的设置
p_vbeln = gt_vbap-vbeln.
*
获取打印的表头数据
SELECT SINGLE
vkorg
vtweg
vkbur
vkgrp
kunnr
vbeln
audat
INTO (vkorg,vtweg,vkbur,vkgrp,kunnr,vbeln,audat)
FROM vbak
WHERE vbeln = p_vbeln.
*
获取打印的表体数据
CLEAR gt_vbak[]. "
清空表
SELECT
vbeln
posnr
matnr
arktx
kwmeng
netwr
netpr
meins
INTO CORRESPONDING FIELDS OF TABLE gt_vbak
FROM vbap
WHERE vbeln = p_vbeln.
CALL FUNCTION fm_name
EXPORTING
control_parameters = control
vkorg = vkorg "
销售订单
vtweg = vtweg "
客户
vkbur = vkbur "
日期
vkgrp = vkgrp "
日期
kunnr = kunnr
vbeln = vbeln
audat = audat
name1 = name1
TABLES
gt_vbak = gt_vbak "SMARTFORMS
传递表数据到中
EXCEPTIONS
formatting_error = 1
internal_error = 2
nd_error = 3
ur_canceled = 4
OTHERS = 5.
IF sy-subrc <> 0.
* error handling
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDLOOP.
CALL FUNCTION 'SSF_CLOSE'
* IMPORTING
* JOB_OUTPUT_INFO =
EXCEPTIONS
formatting_error = 1
internal_error = 2
nd_error = 3
OTHERS = 4.
IF sy-subrc <> 0.
* error handling
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* analy internal error table of Smart Forms
CALL FUNCTION 'SSF_READ_ERRORS'
IMPORTING
errortab = errtab.
IF NOT errtab IS INITIAL.
* add your handling
ENDIF.
ENDFORM. "print_so
*&---------------------------------------------------------------------*
*& ZP_SD_007_ALV
包含
*&---------------------------------------------------------------------*
TYPE-POOLS: slis.
*-----------------------------------------------------------*
*ALV *
相关表和结构
*-----------------------------------------------------------*
DATA: it_fieldcat TYPE slis_t_fieldcat_alv,
wa_layout TYPE slis_layout_alv,
wa_status TYPE slis_formname VALUE 'SUB_SET_PF_STATUS',
wa_comand TYPE slis_formname VALUE 'USER_COMMAND',
it_events TYPE slis_t_event.
DATA: g_layout TYPE lvc_s_layo,
fieldcat TYPE LINE OF lvc_t_fcat,
gt_fieldcat TYPE lvc_t_fcat.
*&---------------------------------------------------------------------*
*& ALV
显示
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_LT_TAB text
*----------------------------------------------------------------------*
FORM show_alv TABLES table.
*ALV
表格显示样式
PERFORM alv_list_layout.
*ALV
报表的字段设置
PERFORM pf_alv_list_fcat USING it_fieldcat.
*ALV
报表显示
PERFORM pf_alv_list_disply TABLES table.
ENDFORM. " SHOW_ALV
*&---------------------------------------------------------------------*
*& Form ALV_LIST_LAYOUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM alv_list_layout.
wa_layout-colwidth_optimize = 'X'.
wa_layout-detail_initial_lines = 'X'.
wa_layout-box_fieldname = 'SELE'. "
定义边框选中栏
ENDFORM. " ALV_LIST_LAYOUT
*&---------------------------------------------------------------------*
*& Form PF_ALV_LIST_FCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_IT_FIELDCAT text
*----------------------------------------------------------------------*
FORM pf_alv_list_fcat USING p_it_fieldcat.
DATA: lw_afieldcat TYPE slis_fieldcat_alv,
lw_pos TYPE i.
DEFINE d_field.
clear lw_afieldcat.
lw_pos = lw_pos + 1.
lw_afieldcat-col_pos = lw_pos.
lw_afieldcat-fieldname = &1.
"LW_AFIELDCAT-fix_column = 'X'.
lw_afieldcat-ltext_l = &2.
lw_afieldcat-ref_fieldname = &4.
lw_afieldcat-ref_tabname = &3.
lw_afieldcat-no_zero = &5.
lw_afieldcat-hotspot = &6.
lw_afieldcat-outputlen = &7.
lw_afieldcat-edit = &8.
lw_afieldcat-key = &9.
append lw_afieldcat to it_fieldcat.
END-OF-DEFINITION.
d_field:
'VBELN' '销售单号
' space space 'X' space '10' space space,"
销售凭证
'VKORG' '销售组织
' space space space space '5' space space,"
销售凭证类
'vtweg' '分销渠道
' space space space space '5' space space,"
销售凭证类
* 'SPART' '
产品组
' space space space space '5' space space,"
销售凭证类
'VKBUR' '销售办事处
' space space space space '5' space space,"
销售凭证类
'VKGRP' '销售组织
' space space space space '5' space space,"
销售凭证类
'KUNNR' '客户代码
' space space space space '10' space space,
'VBELN' '销售单号
' space space 'X' space '10' space space,
'AUDAT' '订单创建日期
' space space space space '10' space space.
ENDFORM. "PF_ALV_LIST_FCAT
*&---------------------------------------------------------------------*
*& Form sub_t_pf_status
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->RT_EXTAB text
*----------------------------------------------------------------------*
FORM sub_t_pf_status USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'STANDARD'." EXCLUDING ex_tab.
SET TITLEBAR '选择手动打印条目'.
ENDFORM. "sub_t_pf_status
*&---------------------------------------------------------------------*
*& Form PF_ALV_LIST_DISPLY
*&---------------------------------------------------------------------*
* ALV
显示数据
*----------------------------------------------------------------------*
FORM pf_alv_list_disply TABLES table.
*ALV
数据显示函数
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
* i_interface_check = 'X'
i_callback_pf_status_t = wa_status
i_callback_ur_command = 'ALV_USER_COMMAND'
it_fieldcat = it_fieldcat
is_layout = wa_layout
i_grid_title = '销售订单交期统计表'
* I_CALLBACK_HTML_TOP_OF_PAGE = CNS_TOP_OF_PAGE "HTML_TOP_OF_PAGE'
i_save = 'X'
TABLES
t_outtab = gt_vbak_alv. "ALV
传递表到中
ENDFORM. " PF_ALV_LIST_DISPLY
*&---------------------------------------------------------------------*
*& Form ALV_USER_COMMAND
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->R_UCOMM text
* -->RS_SELFIELD text
*----------------------------------------------------------------------*
FORM alv_ur_command USING r_ucomm LIKE sy-ucomm
rs_lfield TYPE slis_lfield. "ALV
响应点击自定义按钮之后的事件
DATA: lr_grid TYPE REF TO cl_gui_alv_grid,
lc_i TYPE i,
lv_subrc TYPE sy-subrc.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = lr_grid.
CALL METHOD lr_grid->check_changed_data.
rs_lfield-refresh = 'X'.
CASE r_ucomm. "
当点击打印按钮时,执行打印操作
WHEN 'PRINT'.
PERFORM print_so.
* MESSAGE '' TYPE 'I'.
打印事件
WHEN OTHERS.
ENDCASE.
"rs_lfield-fieldname,.
表示双击的字段名有时候有用
ENDFORM. "ALV_USER_COMMAND
附菜单设置图:
*科莱特信息技术所有,请注明出处。

本文发布于:2023-05-28 10:11:40,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/zhishi/a/168523990058051.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:SAP-SMARTFORMS-凭证连续打印设置操作之三.doc
本文 PDF 下载地址:SAP-SMARTFORMS-凭证连续打印设置操作之三.pdf
| 留言与评论(共有 0 条评论) |