2013 Nov 04 7:50 AM
Hi All,
I am developing z-report(manhr utilization) by which a screen will be called .
After certain records are selected from the screen,a form will be printed upon
hitting PRINT icon available on the screen.My query is how this PRINT command
can be linked to the driver program to call the form as we do when we take print
of maintenanc order from t-code IW32?
Thanks in advance
rgds
Pranjal
2013 Nov 04 7:55 AM
Capture the SY-UCOMM value and implement the logic to print the form by calling Smartform name.
Flow will be as follows:
Case Sy-ucomm.
when 'Print'.
call SSF_FUNCTION_MODULE_NAME
exporting
formname = 'yprint_smartform' ->design a smartform
importing
fm_name = v_fmodule
call v_fmodule
tables = lt_table ->pass the data, which you want to display in output
Endcase.
2013 Nov 04 7:55 AM
Capture the SY-UCOMM value and implement the logic to print the form by calling Smartform name.
Flow will be as follows:
Case Sy-ucomm.
when 'Print'.
call SSF_FUNCTION_MODULE_NAME
exporting
formname = 'yprint_smartform' ->design a smartform
importing
fm_name = v_fmodule
call v_fmodule
tables = lt_table ->pass the data, which you want to display in output
Endcase.
2013 Nov 04 7:59 AM
Hi
Thanks for your prompt response.However,please note that we are using sap script form not smart form.I am new to it,can you please elaborate how to do this in case of SAP script form.
Thanks in advance .
rgds
pranjal
2013 Nov 04 8:14 AM
Hi Pranjal Bora.
Maintain Print in PF status
and call script as
CASE sy-ucomm.
When 'PRINT'.
"Call Script.
*******internal table & work area declaration
data : it_kna1 type table of kna1,
wa_kna1 type kna1,
it_vbak type table of vbak,
wa_vbak type vbak.
data : w_tot type vbak-netwr.
*************Start of selection.
start-of-selection.
perform get_kna1_data.
perform get_vbak_data.
***************end of selection.
end-of-selection.
perform start_script.
perform write_to_script.
perform close_script.
*&---------------------------------------------------------------------*
*& Form get_kna1_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form get_kna1_data .
select * from kna1 into table it_kna1 where kunnr in wa_final-kunnr.
if sy-subrc ne 0.
message 'No Records found for the given selection' type 'I'.
leave list-processing.
endif.
endform. " get_kna1_data
*&---------------------------------------------------------------------*
*& Form get_vbak_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form get_vbak_data .
select * from vbak into table it_vbak for all entries in it_kna1 where kunnr eq it_kna1-kunnr.
endform. " get_vbak_data
*&---------------------------------------------------------------------*
*& Form start_script
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form start_script .
call function 'OPEN_FORM'
exporting
* APPLICATION = 'TX'
* ARCHIVE_INDEX =
* ARCHIVE_PARAMS =
* DEVICE = 'PRINTER'
* DIALOG = 'X'
form = 'YR_TEST'
* LANGUAGE = SY-LANGU
* OPTIONS =
* MAIL_SENDER =
* MAIL_RECIPIENT =
* MAIL_APPL_OBJECT =
* RAW_DATA_INTERFACE = '*'
* SPONUMIV =
* IMPORTING
* LANGUAGE =
* NEW_ARCHIVE_PARAMS =
* RESULT =
* EXCEPTIONS
* CANCELED = 1
* DEVICE = 2
* FORM = 3
* OPTIONS = 4
* UNCLOSED = 5
* MAIL_OPTIONS = 6
* ARCHIVE_ERROR = 7
* INVALID_FAX_NUMBER = 8
* MORE_PARAMS_NEEDED_IN_BATCH = 9
* SPOOL_ERROR = 10
* CODEPAGE = 11
* OTHERS = 12
.
if sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
endform. " start_script
*&---------------------------------------------------------------------*
*& Form write_to_script
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form write_to_script .
loop at it_kna1 into wa_kna1.
clear w_tot.
call function 'START_FORM'
exporting
* ARCHIVE_INDEX =
form = 'YR_TEST'
* LANGUAGE = ' '
* STARTPAGE = ' '
* PROGRAM = ' '
* MAIL_APPL_OBJECT =
* IMPORTING
* LANGUAGE =
* EXCEPTIONS
* FORM = 1
* FORMAT = 2
* UNENDED = 3
* UNOPENED = 4
* UNUSED = 5
* SPOOL_ERROR = 6
* CODEPAGE = 7
* OTHERS = 8
.
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 'WRITE_FORM'
exporting
* ELEMENT = ' '
* FUNCTION = 'SET'
* TYPE = 'BODY'
window = 'ADDRESS'
* IMPORTING
* PENDING_LINES =
* EXCEPTIONS
* ELEMENT = 1
* FUNCTION = 2
* TYPE = 3
* UNOPENED = 4
* UNSTARTED = 5
* WINDOW = 6
* BAD_PAGEFORMAT_FOR_PRINT = 7
* SPOOL_ERROR = 8
* CODEPAGE = 9
* OTHERS = 10
.
if sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
loop at it_vbak into wa_vbak where kunnr eq wa_kna1-kunnr.
w_tot = w_tot + wa_vbak-netwr.
call function 'WRITE_FORM'
exporting
element = 'TE'
* FUNCTION = 'SET'
* TYPE = 'BODY'
window = 'MAIN'
* IMPORTING
* PENDING_LINES =
* EXCEPTIONS
* ELEMENT = 1
* FUNCTION = 2
* TYPE = 3
* UNOPENED = 4
* UNSTARTED = 5
* WINDOW = 6
* BAD_PAGEFORMAT_FOR_PRINT = 7
* SPOOL_ERROR = 8
* CODEPAGE = 9
* OTHERS = 10
.
if sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
endloop.
call function 'END_FORM'
* IMPORTING
* RESULT =
* EXCEPTIONS
* UNOPENED = 1
* BAD_PAGEFORMAT_FOR_PRINT = 2
* SPOOL_ERROR = 3
* CODEPAGE = 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.
endloop.
endform. " write_to_script
*&---------------------------------------------------------------------*
*& Form close_script
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form close_script .
call function 'CLOSE_FORM'
* IMPORTING
* RESULT =
* RDI_RESULT =
* TABLES
* OTFDATA =
* EXCEPTIONS
* UNOPENED = 1
* BAD_PAGEFORMAT_FOR_PRINT = 2
* SEND_ERROR = 3
* SPOOL_ERROR = 4
* CODEPAGE = 5
* OTHERS = 6
.
if sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
endform. " close_script
endcase.
2013 Nov 04 8:32 AM
For calling Script also we have to use the same logic.
Case Sy-ucomm.
when 'Print'.
call FM OPEN_FORM
call FM START_FORM
call FM WRITE_FORM
call FM END_FORM
call FM CLOSE_FORM
Endcase.
Once, the logic to fetch and display in output is over.
Then you create a PF-STATUS as follows. (Double click on ZTEST, it will show the popup.. create object... click on yes)
create a button in application tool bar.
sample program for calling script using your print command.
Case sy-ucomm.
when 'PRINT'.
TABLES: KNA1,
vbrk,
t001.
TYPES: BEGIN OF T_KNA1,
LAND1 TYPE KNA1-LAND1,
NAME1 TYPE KNA1-NAME1,
ORT01 TYPE KNA1-ORT01,
PSTLZ TYPE KNA1-PSTLZ,
STRAS TYPE KNA1-STRAS,
END OF T_KNA1.
TYPES: BEGIN OF T_T001,
BUTXT TYPE T001-BUTXT,
ORT01 TYPE T001-ORT01,
LAND1 TYPE T001-LAND1,
END OF T_T001.
TYPES: BEGIN OF T_VBRK,
VBELN TYPE VBRK-VBELN,
FKDAT TYPE VBRK-FKDAT,
WAERK TYPE VBRK-WAERK,
KUNAG TYPE KUNAG,
BUKRS TYPE BUKRS,
END OF T_VBRK.
TYPES: BEGIN OF T_VBRP,
VBELN TYPE VBELN,
NETWR TYPE VBRP-NETWR,
MATNR TYPE VBRP-MATNR,
ARKTX TYPE VBRP-ARKTX,
POSNR TYPE POSNR_VF,
END OF T_VBRP.
PARAMETERS:s_vbeln TYPE VBRK-vbeln.
TYPES: BEGIN OF T_FINAL,
VBELN TYPE VBRK-VBELN,
FKDAT TYPE VBRK-FKDAT,
WAERK TYPE VBRK-WAERK,
NETWR TYPE VBRP-NETWR,
MATNR TYPE VBRP-MATNR,
ARKTX TYPE VBRP-ARKTX,
POSNR TYPE POSNR_VF,
END OF T_FINAL.
DATA: IT_KNA1 TYPE TABLE OF T_KNA1,
WA_KNA1 TYPE T_KNA1,
IT_T001 TYPE TABLE OF T_T001,
WA_T001 TYPE T_T001,
IT_VBRK TYPE TABLE OF T_VBRK,
WA_VBRK TYPE T_VBRK,
IT_VBRP TYPE TABLE OF T_VBRP,
WA_VBRP TYPE T_VBRP,
IT_FINAL TYPE TABLE OF T_FINAL,
WA_FINAL TYPE T_FINAL.
Start-of-selection.
perform get_data.
PERFORM open_form.
PERFORM start_form.
PERFORM write_form.
PERFORM end_form.
PERFORM close_form.
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text: Getting data into final internal table for display
*----------------------------------------------------------------------*
FORM GET_DATA.
select VBELN
FKDAT
WAERK
KUNAG
BUKRS
from VBRK INTO CORRESPONDING FIELDS OF TABLE IT_VBRK
WHERE VBELN = s_vbeln.
SELECT LAND1
NAME1
ORT01
PSTLZ
STRAS INTO CORRESPONDING FIELDS OF TABLE IT_KNA1 FROM KNA1 FOR ALL ENTRIES IN IT_VBRK WHERE KUNNR = IT_VBRK-KUNAG.
SELECT NETWR
MATNR
ARKTX
POSNR
VBELN
FROM VBRP INTO CORRESPONDING FIELDS OF TABLE IT_VBRP
FOR ALL ENTRIES IN IT_VBRK
WHERE VBELN = IT_VBRK-VBELN.
READ TABLE IT_VBRK INTO WA_VBRK INDEX 1.
IF SY-SUBRC = 0.
SELECT SINGLE BUTXT
ORT01
LAND1
FROM T001 INTO CORRESPONDING FIELDS OF WA_T001
WHERE BUKRS = WA_VBRK-BUKRS.
ENDIF.
* SELECT BUTXT
* ORT01
* LAND1
* FROM T001 INTO CORRESPONDING FIELDS OF TABLE IT_T001
* FOR ALL ENTRIES IN IT_VBRK
* WHERE BUKRS = IT_VBRK-BUKRS.
LOOP AT IT_VBRP INTO WA_VBRP.
READ TABLE IT_VBRK INTO WA_VBRK WITH KEY VBELN = WA_VBRP-VBELN.
IF SY-SUBRC = 0.
MOVE-CORRESPONDING WA_VBRK TO WA_FINAL.
MOVE-CORRESPONDING WA_VBRP TO WA_FINAL.
ENDIF.
APPEND WA_FINAL TO IT_FINAL.
ENDLOOP.
ENDFORM.
FORM OPEN_FORM.
CALL FUNCTION 'OPEN_FORM'
EXPORTING
FORM = 'ZDEMO_SCRIPTS'.
ENDFORM.
FORM START_FORM.
CALL FUNCTION 'START_FORM'
EXPORTING
FORM = 'ZDEMO_SCRIPTS '.
ENDFORM.
FORM WRITE_FORM.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
ELEMENT = 'ITEM_HEADER'
* FUNCTION = 'SET'
* TYPE = 'BODY'
WINDOW = 'MAIN'.
LOOP AT IT_FINAL INTO WA_FINAL.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
ELEMENT = 'ITEM LINE'
* FUNCTION = 'SET'
* TYPE = 'BODY'
WINDOW = 'MAIN'.
ENDLOOP.
LOOP AT IT_KNA1 INTO WA_KNA1.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
ELEMENT = 'CUST_ADD'
* FUNCTION = 'SET'
* TYPE = 'BODY'
WINDOW = 'CUSTADDR'.
ENDLOOP.
* LOOP AT IT_T001 INTO WA_T001.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
ELEMENT = 'OUR_ADD'
* FUNCTION = 'SET'
* TYPE = 'BODY'
WINDOW = 'OUR_ADDR'.
* ENDLOOP.
ENDFORM.
FORM END_FORM.
CALL FUNCTION 'END_FORM'
* IMPORTING
* RESULT =
* EXCEPTIONS
* UNOPENED = 1
* BAD_PAGEFORMAT_FOR_PRINT = 2
* SPOOL_ERROR = 3
* CODEPAGE = 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.
ENDFORM.
FORM CLOSE_FORM.
CALL FUNCTION 'CLOSE_FORM'
* IMPORTING
* RESULT =
* RDI_RESULT =
* TABLES
* OTFDATA =
* EXCEPTIONS
* UNOPENED = 1
* BAD_PAGEFORMAT_FOR_PRINT = 2
* SEND_ERROR = 3
* SPOOL_ERROR = 4
* CODEPAGE = 5
* OTHERS = 6
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM.
endcase.
Belos is the link to create script and driver program:
http://sapsamplepro.blogspot.in/2011/07/sap-scripts-example.html
2013 Nov 06 10:48 AM
2013 Nov 06 10:48 AM
2013 Nov 11 8:50 AM
Hi
One more clarification,I need .Suppose I need to have a pop up window for print view ,what logic I have to write.In that case how will I connect my Z print program to the new form.Is it required to assign in t-code NACE
thanks for your prompt response.
rgds
2013 Nov 11 12:39 PM
Hi Pranjal,
In your case no need to assign anything in NACE. As you want print by clicking on the option PRINT in application bar. NACE is configuration is generally for Standard TCODES.
Now come to question.
Suppose I need to have a pop up window for print view ,what logic I have to write
To achieve the above one you need to use a FM 'POPUP_TO_CONFIRM'
CASE sy-ucomm.
when 'PRINT'.
---- here you have to use FM,
If answer = '1' (1 for yes, 2 for no....)
-> based on the input by end user, you have to process your logic.
endif.
ENDCASE.