Sapforum.Biz
Инструменты => ABAP - Инструментальные средства => SE38 - ABAP Редактор => Тема начата: Uukrul от Июнь 15, 2007, 02:02:54 pm
-
Иногда в своих программах нужно обеспечить вывод на печать документов. Если считаем что выбор выходного документа в системе настроен правильно, то для печати можно воспользоваться функцией WFMC_MESSAGE_SINGLE, стандартно система производит печать формуляров через этот модуль. В принципе можно написать свою обертку для этого модуля и уже ее вызвать программно. Например печать документа материала к проводке переноса. Вид документа WA, печатаем сводную накладную:
FUNCTION y_print_mm_document.
*"----------------------------------------------------------------------
*"*"Печать документов
*" IMPORTING
*" REFERENCE(MATERIALDOCUMENT) LIKE MSEG-MBLNR
*" REFERENCE(MATDOCUMENTYEAR) LIKE MSEG-MJAHR
*" REFERENCE(P_PRINT_COPY) TYPE I DEFAULT 1
*"----------------------------------------------------------------------
*&**********************************************************************
*& Comments :Печать документов WA03
*& Platform : SAP R/3 V4.0B or later
*& Autor :
*& Date create : 28.01.2002
*& Date change : 07-06-2004
*&**********************************************************************
DATA: i_count_rec TYPE i,
pe_rcode LIKE sy-subrc, "return code
pi_nast LIKE nast,
l_kschl LIKE nast-kschl,
l_objky LIKE nast-objky.
i_count_rec = 0.
SELECT SINGLE blart INTO (pi_nast-kschl)
FROM mkpf WHERE mblnr = materialdocument AND
mjahr = matdocumentyear.
IF sy-subrc = 0.
CONCATENATE materialdocument matdocumentyear '0001'
INTO l_objky.
pi_nast-mandt = sy-mandt.
pi_nast-kappl = 'ME'.
pi_nast-objky = l_objky.
pi_nast-kschl = 'WA03'.
pi_nast-spras = sy-langu.
pi_nast-manue = 'X'.
pi_nast-nacha = 1.
pi_nast-vsztp = 4.
pi_nast-anzal = p_print_copy. "Количество копий
pi_nast-vstat = 1.
pi_nast-ldest = 'LOCL'.
pi_nast-nauto = 'X'.
pi_nast-erdat = sy-datum.
pi_nast-eruhr = sy-uzeit.
pi_nast-dimme = 'X'. "Немедленный вывод
pi_nast-delet = 'X'. "Удалить спул после вывода
pi_nast-usnam = sy-uname.
pi_nast-tdreceiver = sy-uname.
pi_nast-objtype = 'MSEG'.
CALL FUNCTION 'WFMC_MESSAGE_SINGLE'
EXPORTING
pi_nast = pi_nast
IMPORTING
pe_rcode = pe_rcode.
ENDFUNCTION.
В принципе параметры вызова данного ФМ для различных видов документов можно посмотреть установив точку прерывания в модуле WFMC_MESSAGE_SINGLE и выполнив печать интересующего документа.
-
Короче, а вот и программа общего вида для печати выходных документов для документов материала... текстовые критерии для программы находятся ytov_prnmm_text.PNG и ytov_prnmm_selopt.PNG, а общий вид программы при работе ytov_prnmm.PNG.
*&---------------------------------------------------------------------*
*& Report YUUK_PRINT_MM
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT yuuk_print_mm.
TABLES: mkpf.
SELECT-OPTIONS: p_mblnr FOR mkpf-mblnr,
p_mjahr FOR mkpf-mjahr.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF BLOCK block001 WITH FRAME TITLE text-001.
PARAMETERS : p_kschl LIKE nast-kschl,
p_ldest LIKE nast-ldest DEFAULT 'LOCL',
p_anzal LIKE nast-anzal DEFAULT 1,
p_dimme AS CHECKBOX, "Немедленный вывод
p_delet AS CHECKBOX. "Удалить спул после вывода
SELECTION-SCREEN END OF BLOCK block001.
************************************************************************
DATA: BEGIN OF lt_mkpf OCCURS 10,
mblnr LIKE mkpf-mblnr,
mjahr LIKE mkpf-mjahr.
DATA: END OF lt_mkpf.
************************************************************************
START-OF-SELECTION.
PERFORM select_documents TABLES lt_mkpf.
PERFORM print_document TABLES lt_mkpf.
*&---------------------------------------------------------------------*
*& Form SELECT_DOCUMENTS
*&---------------------------------------------------------------------*
* Выбрать документы для печати
*----------------------------------------------------------------------*
* <-- PT_MKPF - Список документов
*----------------------------------------------------------------------*
FORM select_documents TABLES pt_mkpf STRUCTURE lt_mkpf.
CLEAR: pt_mkpf[].
SELECT mblnr
mjahr
INTO CORRESPONDING FIELDS OF TABLE pt_mkpf
FROM mkpf
WHERE mblnr IN p_mblnr AND
mjahr IN p_mjahr.
ENDFORM. " SELECT_DOCUMENTS
*&---------------------------------------------------------------------*
*& Form PRINT_DOCUMENT
*&---------------------------------------------------------------------*
* Вывод выходных документов
*----------------------------------------------------------------------*
* --> PT_MKPF - Список документов
*----------------------------------------------------------------------*
FORM print_document TABLES pt_mkpf STRUCTURE lt_mkpf.
DATA: l_rcode LIKE sy-subrc, "return code
ps_nast LIKE nast.
LOOP AT pt_mkpf.
CONCATENATE pt_mkpf-mblnr pt_mkpf-mjahr '0001'
INTO ps_nast-objky.
ps_nast-mandt = sy-mandt.
ps_nast-kappl = 'ME'.
ps_nast-kschl = p_kschl.
ps_nast-spras = sy-langu.
ps_nast-manue = 'X'.
ps_nast-nacha = 1.
ps_nast-vsztp = 4.
ps_nast-anzal = p_anzal. "Количество копий
ps_nast-vstat = 1.
ps_nast-ldest = p_ldest.
ps_nast-nauto = 'X'.
ps_nast-erdat = sy-datum.
ps_nast-eruhr = sy-uzeit.
ps_nast-dimme = p_dimme. "Немедленный вывод
ps_nast-delet = p_delet. "Удалить спул после вывода
ps_nast-usnam = sy-uname.
ps_nast-tdreceiver = sy-uname.
ps_nast-objtype = 'MSEG'.
CALL FUNCTION 'WFMC_MESSAGE_SINGLE'
EXPORTING
pi_nast = ps_nast
IMPORTING
pe_rcode = l_rcode.
ENDLOOP.
ENDFORM. " PRINT_DOCUMENT