最近有客户需求提出要记录打印次数记录,刚开始的思路是触发按钮事件,诶呀,这样还能基本满足,可是后面问题来了,这触发按钮记录的不准啊,为什么不准呢。
部分使用客户在投诉在打印预览或者只想看下的情况就记录了打印记录。后面想想这个按钮触发事件还是不能解决根本问题,下面是小弟解决的一个小程序,刚起步,技术含量低,让大神见笑了。
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 = 'ZFMM_WHG1'. "对应的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'.
LS_OUTPUT_OPTIONS-TDIEXIT = 'X'.
LS_CONTROL_PARAMETERS-NO_DIALOG = 'X'."没有对话窗口打开
LS_CONTROL_PARAMETERS-PREVIEW = 'X'. "打印预览
调用SMARTFORM的程序
call function 'SSF_FUNCTION_MODULE_NAME'
exporting
FORMNAME = C_FORM_NAME
importing
FM_NAME = L_SMF_NAME.
loop at IT_HEAD1.
LS_CONTROL_PARAMETERS-NO_CLOSE = 'X'.
at last.
LS_CONTROL_PARAMETERS-NO_CLOSE = SPACE.
endat.
clear IT_ITEM.
refresh IT_ITEM[].
loop at ITAB4 where CHARG = IT_HEAD1-CHARG
and MBLNR = IT_HEAD1-MBLNR
and MATNR = IT_HEAD1-MATNR.
append ITAB4 to IT_ITEM[].
endloop.
move IT_HEAD1[] to GT_HEAD[].
loop at GT_HEAD.
append IT_HEAD1 to GT_SF.
endloop.
call function L_SMF_NAME
exporting
CONTROL_PARAMETERS = LS_CONTROL_PARAMETERS
OUTPUT_OPTIONS = LS_OUTPUT_OPTIONS
USER_SETTINGS = 'X'
WA_HEAD = IT_HEAD1
importing
JOB_OUTPUT_INFO = T_OTFDATA “要记录打印回执数据,这个地方还是不能忘记的
tables
GT_HEAD = GT_SF[]
GT_BODY = 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.
******打印次数的控制,每次打印机响应一次,就把返回值记录一次,
打印成功就把数据返回,添加到自定义的内表中,
**************************************************
if SY-SUBRC = 0.
if T_OTFDATA-OUTPUTDONE = 'X'.
loop at IT_HEAD1.
IT_PRINTCOUNT-MBLNR = IT_HEAD1-MBLNR.
IT_PRINTCOUNT-PRINTS = IT_HEAD1-PRINTS + 1.
append IT_PRINTCOUNT.
endloop.
modify ZMSEG3 from table IT_PRINTCOUNT.
clear IT_PRINTCOUNT.
refresh IT_PRINTCOUNT[].
endif.
endif.
**************************************************
clear IT_ITEM.
refresh IT_ITEM[].
LS_CONTROL_PARAMETERS-NO_OPEN = 'X'.
at last.
LS_CONTROL_PARAMETERS-NO_OPEN = SPACE.
endat.
endloop.
endform. "printdata
小弟不才,多有错误切勿喷俺。