2007 Feb 23 10:06 AM
Hi all,
I hv made smart form for GR print . I m using standrad selection screen MB90, output type WE03 & standrad print program SAPM07DR ->M07DRENT-> M07DRAUS i have copied that program and assigned my smart form in this program. now my problem is that when i select range for printing GRs then i have to click on print again and again for each GR. I want that all GRs should be print by single click. Give some solution according to this standrad program.
I sending u program codes where i have made changes.
FORM lesen_wes USING objky lgortsplit.
TABLES: MAKT.
DATA: GR_FM TYPE rs38l_fnam.
data : print_params type SSFCTRLOP.
data : print_out type SSFCOMPOP.
DATA: BEGIN OF ITAB_MKPF OCCURS 0.
INCLUDE STRUCTURE mkpf.
DATA : END OF ITAB_MKPF.
DATA: BEGIN OF ITAB_MAKT OCCURS 0.
INCLUDE STRUCTURE MAKT.
DATA: END OF ITAB_MAKT.
DATA: BEGIN OF ITAB_MSEG OCCURS 0.
include structure mseg.
data: END OF ITAB_MSEG.
DATA: BEGIN OF ITAB_LFA1 OCCURS 0.
include structure lfa1.
data: END OF ITAB_LFA1.
REFRESH traptab.
CLEAR retco.
CLEAR: xkopfdr, new_page.
nast_key = objky.
SELECT SINGLE * FROM mkpf WHERE mblnr = nast_key-mblnr
AND mjahr = nast_key-mjahr.
MOVE-CORRESPONDING mkpf TO ITAB_MKPF. " JITENDRA
MOVE-CORRESPONDING mkpf TO traptab. "note 205937
zaehler_m = 1.
SELECT * FROM mseg WHERE mblnr = mkpf-mblnr
AND mjahr = mkpf-mjahr
AND BWART <> '543'.
SELECT * FROM MAKT WHERE MATNR = MSEG-MATNR.
SELECT * FROM LFA1 WHERE LIFNR = MSEG-LIFNR.
IF sy-subrc ne 0.
retco = sy-subrc.
EXIT.
ENDIF.
IF zaehler_m = 1.
CLEAR zaehler_m.
PERFORM tab001w_lesen.
ENDIF.
MOVE-CORRESPONDING mseg TO ITAB_MSEG. " JITENDRA
MOVE: MSEG-LIFNR TO ITAB_MSEG-LIFNR,
MSEG-EBELN TO ITAB_MSEG-EBELN,
MSEG-EBELP TO ITAB_MSEG-EBELP,
MSEG-ZEILE TO ITAB_MSEG-ZEILE,
MSEG-MATNR TO ITAB_MSEG-MATNR,
MSEG-LGORT TO ITAB_MSEG-LGORT,
MSEG-ERFME TO ITAB_MSEG-ERFME,
MSEG-LSMNG TO ITAB_MSEG-LSMNG,
MSEG-ERFMG TO ITAB_MSEG-ERFMG,
MSEG-BWART TO ITAB_MSEG-BWART,
MAKT-MAKTX TO ITAB_MSEG-SGTXT.
MOVE-CORRESPONDING MAKT TO ITAB_MAKT.
MOVE-CORRESPONDING LFA1 TO ITAB_LFA1.
MOVE-CORRESPONDING mseg TO traptab.
APPEND ITAB_MSEG.
APPEND ITAB_MAKT.
APPEND ITAB_LFA1.
APPEND traptab.
ENDSELECT.
ENDSELECT.
ENDSELECT.
PERFORM open_form_sammel.
IF NOT lgortsplit IS INITIAL. "431555
SORT traptab BY werks lgort zeile. "431555
ELSE. "431555
SORT traptab BY werks zeile. "431555
ENDIF. "431555
LOOP AT traptab.
MOVE-CORRESPONDING traptab TO mkpf.
MOVE-CORRESPONDING traptab TO mseg.
PERFORM tab156_lesen.
CHECK not t156-kzdru is initial.
xskkz = t156-rstyp.
IF not mseg-evers is initial. "Versandvorschriften lesen.
PERFORM t027_lesen.
ENDIF.
PERFORM bestellung_lesen.
IF not ekpo-knttp is initial and not
ekpo-weunb is initial.
PERFORM kontierung_lesen. "Für WE unbewertet
ENDIF.
IF not mseg-ematn is initial.
PERFORM lesen_htn.
ELSE. "111277/PH
CLEAR am07m-mfrpn. "111277/PH
ENDIF.
IF mseg-matnr is initial.
mseg-menge = mseg-bpmng.
mseg-meins = mseg-bprme.
PERFORM bestelltext_lesen.
CLEAR mabdr.
ELSE.
PERFORM material_lesen.
ENDIF.
PERFORM tab024_lesen.
PERFORM t064b_lesen.
PERFORM tab001w_lesen_2.
PERFORM ladr_lesen.
PERFORM helpdata1.
PERFORM we03_ausgabe USING lgortsplit.
PERFORM helpdata2.
ENDLOOP.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
FORMNAME = 'ZGR_FRM'
VARIANT = ' '
DIRECT_CALL = ' '
IMPORTING
FM_NAME = GR_FM
EXCEPTIONS
NO_FORM = 1
NO_FUNCTION_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.
CALL FUNCTION GR_FM
EXPORTING
ARCHIVE_INDEX =
ARCHIVE_INDEX_TAB =
ARCHIVE_PARAMETERS =
CONTROL_PARAMETERS =
MAIL_APPL_OBJ =
MAIL_RECIPIENT =
MAIL_SENDER =
OUTPUT_OPTIONS =
USER_SETTINGS = 'X'
ITAB1 = ITAB_MKPF
ITAB = ITAB_MSEG
ITAB2 = ITAB_LFA1
IMPORTING
DOCUMENT_OUTPUT_INFO =
JOB_OUTPUT_INFO =
JOB_OUTPUT_OPTIONS =
TABLES
ITAB_OUT = ITAB_MSEG
ITAB_MAT = ITAB_MAKT
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.
PERFORM close_form.
ENDFORM.
Thanks in Advance
Jitendra
Hi all,
I hv made smart form for GR print . I m using standrad selection screen MB90, output type WE03 & standrad print program SAPM07DR ->M07DRENT-> M07DRAUS i have copied that program and assigned my smart form in this program. now my problem is that when i select range for printing GRs then i have to click on print again and again for each GR. I want that all GRs should be print by single click. Give some solution according to this standrad program.
I sending u program codes where i have made changes.
FORM lesen_wes USING objky lgortsplit.
TABLES: MAKT.
DATA: GR_FM TYPE rs38l_fnam.
data : print_params type SSFCTRLOP.
data : print_out type SSFCOMPOP.
DATA: BEGIN OF ITAB_MKPF OCCURS 0.
INCLUDE STRUCTURE mkpf.
DATA : END OF ITAB_MKPF.
DATA: BEGIN OF ITAB_MAKT OCCURS 0.
INCLUDE STRUCTURE MAKT.
DATA: END OF ITAB_MAKT.
DATA: BEGIN OF ITAB_MSEG OCCURS 0.
include structure mseg.
data: END OF ITAB_MSEG.
DATA: BEGIN OF ITAB_LFA1 OCCURS 0.
include structure lfa1.
data: END OF ITAB_LFA1.
REFRESH traptab.
CLEAR retco.
CLEAR: xkopfdr, new_page.
nast_key = objky.
SELECT SINGLE * FROM mkpf WHERE mblnr = nast_key-mblnr
AND mjahr = nast_key-mjahr.
MOVE-CORRESPONDING mkpf TO ITAB_MKPF. " JITENDRA
MOVE-CORRESPONDING mkpf TO traptab. "note 205937
zaehler_m = 1.
SELECT * FROM mseg WHERE mblnr = mkpf-mblnr
AND mjahr = mkpf-mjahr
AND BWART <> '543'.
SELECT * FROM MAKT WHERE MATNR = MSEG-MATNR.
SELECT * FROM LFA1 WHERE LIFNR = MSEG-LIFNR.
IF sy-subrc ne 0.
retco = sy-subrc.
EXIT.
ENDIF.
IF zaehler_m = 1.
CLEAR zaehler_m.
PERFORM tab001w_lesen.
ENDIF.
MOVE-CORRESPONDING mseg TO ITAB_MSEG. " JITENDRA
MOVE: MSEG-LIFNR TO ITAB_MSEG-LIFNR,
MSEG-EBELN TO ITAB_MSEG-EBELN,
MSEG-EBELP TO ITAB_MSEG-EBELP,
MSEG-ZEILE TO ITAB_MSEG-ZEILE,
MSEG-MATNR TO ITAB_MSEG-MATNR,
MSEG-LGORT TO ITAB_MSEG-LGORT,
MSEG-ERFME TO ITAB_MSEG-ERFME,
MSEG-LSMNG TO ITAB_MSEG-LSMNG,
MSEG-ERFMG TO ITAB_MSEG-ERFMG,
MSEG-BWART TO ITAB_MSEG-BWART,
MAKT-MAKTX TO ITAB_MSEG-SGTXT.
MOVE-CORRESPONDING MAKT TO ITAB_MAKT.
MOVE-CORRESPONDING LFA1 TO ITAB_LFA1.
MOVE-CORRESPONDING mseg TO traptab.
APPEND ITAB_MSEG.
APPEND ITAB_MAKT.
APPEND ITAB_LFA1.
APPEND traptab.
ENDSELECT.
ENDSELECT.
ENDSELECT.
PERFORM open_form_sammel.
IF NOT lgortsplit IS INITIAL. "431555
SORT traptab BY werks lgort zeile. "431555
ELSE. "431555
SORT traptab BY werks zeile. "431555
ENDIF. "431555
LOOP AT traptab.
MOVE-CORRESPONDING traptab TO mkpf.
MOVE-CORRESPONDING traptab TO mseg.
PERFORM tab156_lesen.
CHECK not t156-kzdru is initial.
xskkz = t156-rstyp.
IF not mseg-evers is initial. "Versandvorschriften lesen.
PERFORM t027_lesen.
ENDIF.
PERFORM bestellung_lesen.
IF not ekpo-knttp is initial and not
ekpo-weunb is initial.
PERFORM kontierung_lesen. "Für WE unbewertet
ENDIF.
IF not mseg-ematn is initial.
PERFORM lesen_htn.
ELSE. "111277/PH
CLEAR am07m-mfrpn. "111277/PH
ENDIF.
IF mseg-matnr is initial.
mseg-menge = mseg-bpmng.
mseg-meins = mseg-bprme.
PERFORM bestelltext_lesen.
CLEAR mabdr.
ELSE.
PERFORM material_lesen.
ENDIF.
PERFORM tab024_lesen.
PERFORM t064b_lesen.
PERFORM tab001w_lesen_2.
PERFORM ladr_lesen.
PERFORM helpdata1.
PERFORM we03_ausgabe USING lgortsplit.
PERFORM helpdata2.
ENDLOOP.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
FORMNAME = 'ZGR_FRM'
VARIANT = ' '
DIRECT_CALL = ' '
IMPORTING
FM_NAME = GR_FM
EXCEPTIONS
NO_FORM = 1
NO_FUNCTION_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.
CALL FUNCTION GR_FM
EXPORTING
ARCHIVE_INDEX =
ARCHIVE_INDEX_TAB =
ARCHIVE_PARAMETERS =
CONTROL_PARAMETERS =
MAIL_APPL_OBJ =
MAIL_RECIPIENT =
MAIL_SENDER =
OUTPUT_OPTIONS =
USER_SETTINGS = 'X'
ITAB1 = ITAB_MKPF
ITAB = ITAB_MSEG
ITAB2 = ITAB_LFA1
IMPORTING
DOCUMENT_OUTPUT_INFO =
JOB_OUTPUT_INFO =
JOB_OUTPUT_OPTIONS =
TABLES
ITAB_OUT = ITAB_MSEG
ITAB_MAT = ITAB_MAKT
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.
PERFORM close_form.
ENDFORM.
Thanks in Advance
Jitendra
2007 Feb 23 12:04 PM
Hi,
When you fires/triggers the Output in the Loop of GR's it will print the multiple docu's.
Since you are using the Std program include, that may not be happening to print multiple doc's continuously.
Generally we print/take the output of a single Document only in most of the cases.
Regards,
Anji
2007 Apr 06 10:09 AM
| User | Count |
|---|---|
| 3 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |