09-08-2006 5:45 AM
Hi Guys
Hope doing great,
Here is a query regarding Sap Script
If you go to VF02 you can enter a billing document number.
Than go to billingdocument->Issue Output to->Screen
It ll show you a sapscript screen.
This is the data i have.and i have the format of sapscript.
I developed the sapscript screen
I have deveoping the driver program
Here i am getting cofused,that how to select the data from the VF02 and display it into the sapscript form.
It is a Invoice Report.
If anybody have face same kind of prob plz help me out, or else if there is any starndard program which is satisfying this criteria plz send it to me.
Thanks a Lot
Mrutyun^
09-08-2006 5:50 AM
go to nace...
v3--billing type.
output type rd00
.
now u can assiegn ur sapscript form and driver program to that output.
or alternative is just copy the output type rd00 into another name and assiegn ur sapscript and driver program to that.
09-08-2006 5:52 AM
issuing the output to Scrren or printer means u are calling the Driver program ,I dont y u got this doubt.
check setting or put a break-point in the Form/driver program which is currently executing this layout.
i think u know the seettings in NACE,Application V3.
Regards
Prabhu
09-08-2006 6:12 AM
Hello,
I have devloped a script using the SAME tcode VF02.
Now i did not understand ur problem correctly.
But I am pasting the code of my print program.
REPORT z08v3_xt_uz .
INCLUDE rvadtabl.
INCLUDE z08v3_xt_uz_top.
DATA: retcode LIKE sy-subrc, "Returncode
xscreen(1) TYPE c. "Ausgabe Printer/Screen
DATA: c TYPE i.
DATA: j TYPE c.
DATA:k TYPE c.
DATA:
*FLAG TYPE C,
FLAG1 TYPE C,
z TYPE i,
d(3) TYPE c,
b TYPE i.
DATA:f(8) TYPE c.
DATA:dnumber(10) TYPE c.
----
FORM entry *
----
........ *
----
--> return_code *
--> us_screen *
----
FORM entry_123 USING return_code us_screen.
CLEAR retcode.
xscreen = us_screen.
PERFORM processing USING xscreen.
IF retcode NE 0.
return_code = 1.
ELSE.
return_code = 0.
ENDIF.
ENDFORM.
&----
*& Form PROCESSING
&----
text
----
-->P_XSCREEN text
----
FORM processing USING proc_screen.
PERFORM clear.
PERFORM get_data.
PERFORM item_print_text.
PERFORM form_open USING proc_screen vbdkr-land1.
PERFORM write_data.
PERFORM form_close.
ENDFORM. " PROCESSING
&----
*& Form GET_DATA
&----
text
----
--> p1 text
<-- p2 text
----
FORM get_data.
CLEAR no_deliv.
CALL FUNCTION 'RV_PRICE_PRINT_REFRESH'
TABLES
tkomv = tkomv.
CLEAR komk.
CLEAR komp.
IF nast-objky+10(6) NE space.
vbco3-vbeln = nast-objky+16(10).
ELSE.
vbco3-vbeln = nast-objky.
ENDIF.
vbco3-mandt = sy-mandt.
vbco3-spras = nast-spras.
IF nast-parvw = 'SP'.
SELECT SINGLE kunnr INTO vbco3-kunde FROM vbpa
WHERE vbeln = vbco3-vbeln
AND posnr = 0
AND parvw = 'RE'.
vbco3-parvw = 'RE'.
ELSE.
vbco3-kunde = nast-parnr.
vbco3-parvw = nast-parvw.
ENDIF.
CALL FUNCTION 'RV_BILLING_PRINT_VIEW'
EXPORTING
comwa = vbco3
IMPORTING
kopf = vbdkr
TABLES
pos = tvbdpr
EXCEPTIONS
terms_of_payment_not_in_t052 = 1
error_message = 5
OTHERS = 4.
IF NOT sy-subrc IS INITIAL.
IF sy-subrc = 1.
syst-msgty = 'I'.
PERFORM protocol_update.
ENDIF.
ENDIF.
fill address key --> necessary for emails
addr_key-addrnumber = vbdkr-adrnr.
addr_key-persnumber = vbdkr-adrnp.
addr_key-addr_type = vbdkr-address_type.
*TO GET SHIPTO PARTY ADDRESS
READ TABLE vbdkr.
SELECT SINGLE * FROM kna1 INTO tkna1 WHERE kunnr = vbdkr-kunrg.
*To get the address
CLEAR address_field.
adrsrc = 'V'.
REFRESH it_addr_prttab.
CASE adrsrc.
WHEN 'W'.
READ TABLE tvbdpr.
SELECT SINGLE * FROM t001w WHERE werks = tvbdpr-werks.
IF sy-subrc = 0.
CALL FUNCTION 'ADDRESS_INTO_PRINTFORM'
EXPORTING
address_type = '1'
address_number = t001w-adrnr
number_of_lines = 10
IMPORTING
address_printform_table = it_addr_prttab.
ENDIF.
WHEN 'V'.
SELECT SINGLE * FROM tvko WHERE vkorg = vbdkr-vkorg.
IF sy-subrc = 0.
CALL FUNCTION 'ADDRESS_INTO_PRINTFORM'
EXPORTING
address_type = '1'
address_number = tvko-adrnr
number_of_lines = 10
IMPORTING
address_printform_table = it_addr_prttab.
ENDIF.
WHEN 'T'.
ENDCASE.
*read table it_addr_prttab.
CASE adrsrc.
WHEN 'W'.
PERFORM adresse_lesen USING 'CA01' t001w-adrnr.
WHEN 'V'.
PERFORM adresse_lesen USING 'CA01' tvko-adrnr.
WHEN OTHERS.
SELECT SINGLE adrnr FROM t001 INTO t001-adrnr
WHERE bukrs EQ vbdkr-bukrs.
PERFORM adresse_lesen USING 'CA01' t001-adrnr.
ENDCASE.
**********
*To get the Transport No
READ TABLE tvbdpr INDEX 1.
SELECT SINGLE * FROM vttp INTO g_t_vttp WHERE vbeln = tvbdpr-vbeln_vl.
IF NOT tvbdpr[] IS INITIAL.
SELECT * FROM t005 INTO TABLE g_t_iegland FOR ALL ENTRIES IN tvbdpr
WHERE land1 = tvbdpr-herkl.
ENDIF.
*GET THE MATERIAL DESCRIPTION AND the EXIDV field
IF NOT tvbdpr[] IS INITIAL.
SELECT * FROM vepo INTO TABLE g_t_vepo FOR ALL ENTRIES IN tvbdpr
WHERE vbeln = tvbdpr-vbeln_vl AND posnr = tvbdpr-posnr.
ENDIF.
IF NOT g_t_vepo[] IS INITIAL.
SELECT * FROM vekp INTO TABLE g_t_vekp FOR ALL ENTRIES IN g_t_vepo
WHERE venum = g_t_vepo-venum.
ENDIF.
IF NOT g_t_vekp[] IS INITIAL.
SELECT * FROM makt INTO TABLE G_T_MAKT FOR ALL ENTRIES IN g_t_vekp
WHERE matnr = g_t_vekp-vhilm.
ENDIF.
LOOP AT tvbdpr.
LOOP AT g_t_iegland WHERE land1 = tvbdpr-herkl.
it_tvbdpr-land1 = g_t_iegland-land1.
it_tvbdpr-xegld = g_t_iegland-xegld.
it_tvbdpr-vbeln = tvbdpr-vbeln_vl.
it_tvbdpr-posnr = tvbdpr-posnr.
APPEND it_tvbdpr.
ENDLOOP.
ENDLOOP.
*Moving the exidv delivery and item no to single internal table(
*g_t_tb1)
LOOP AT g_t_vepo.
LOOP AT g_t_vekp WHERE venum = g_t_vepo-venum..
g_t_tb1-exidv = g_t_vekp-exidv.
g_t_tb1-brgew = g_t_vekp-brgew.
g_t_tb1-vbeln_vl = g_t_vepo-vbeln.
g_t_tb1-posnr = g_t_vepo-posnr.
APPEND g_t_tb1.
ENDLOOP.
ENDLOOP.
*Moving all the details along with the country details into single
*internal table(jtab)
LOOP AT g_t_tb1.
LOOP AT it_tvbdpr WHERE vbeln = g_t_tb1-vbeln_vl AND posnr =
g_t_tb1-posnr.
g_t_tb2-vbeln_vl = g_t_tb1-vbeln_vl.
g_t_tb2-posnr = g_t_tb1-posnr.
g_t_tb2-exidv = g_t_tb1-exidv.
g_t_tb2-herkl = it_tvbdpr-land1.
g_t_tb2-brgew = g_t_tb1-brgew.
g_t_tb2-xegld = it_tvbdpr-xegld.
APPEND g_t_tb2.
ENDLOOP.
ENDLOOP.
LOOP AT g_t_tb2.
MOVE-CORRESPONDING g_t_tb2 TO g_t_tab.
APPEND g_t_tab.
MOVE-CORRESPONDING g_t_tb2 TO g_t_tab1.
APPEND g_t_tab1.
dtab-posnr = g_t_tb2-posnr.
dtab-herkl = g_t_tb2-herkl.
APPEND dtab.
ENDLOOP.
*Sort the countries and pass them into variable
*DTAB CONSISTS THE COUNTRIES AND ITEM NO'S
SORT dtab BY herkl.
DELETE ADJACENT DUPLICATES FROM dtab COMPARING herkl.
IF NOT dtab[] IS INITIAL.
SELECT land1 landx FROM t005t INTO CORRESPONDING FIELDS OF TABLE ltab
FOR ALL ENTRIES IN dtab WHERE spras = nast-spras AND land1 = dtab-herkl
.
ENDIF.
*CONCATENATE ALL THE COUNTRIES AND THEIR DESCRIPTION
LOOP AT dtab.
b = b + 1.
ENDLOOP.
CLEAR string.
J = ','.
LOOP AT ltab.
IF b = 1 OR b < 1.
j = '.'.
CONCATENATE string ltab-land1 '=' ltab-landx j INTO string SEPARATED BY
space.
ELSEIF b > 1.
j = ','.
CONCATENATE string ltab-land1 '=' ltab-landx j INTO string SEPARATED BY
space.
b = b - 1.
ENDIF.
ENDLOOP.
*Sorting the data in the required format
SORT g_t_tab BY exidv.
LOOP AT g_t_tab.
AT NEW exidv.
g_t_op-vbeln_vl = g_t_tab-vbeln_vl.
g_t_op-exidv = g_t_tab-exidv.
ENDAT.
LOOP AT g_t_tab1 WHERE exidv = g_t_tab-exidv AND herkl = 'DE' AND
flag = space.
g_t_tab1-flag = 'X'.
MODIFY g_t_tab1 INDEX sy-tabix.
g_t_op-posnr = g_t_tab1-posnr.
g_t_op-herkl = g_t_tab1-herkl.
g_t_op-brgew = g_t_tab1-brgew.
g_t_op-xegld = g_t_tab1-xegld.
APPEND g_t_op.
ENDLOOP.
IF g_t_tab-herkl <> 'DE'.
g_t_op-posnr = g_t_tab-posnr.
g_t_op-herkl = g_t_tab-herkl.
g_t_op-brgew = g_t_tab-brgew.
g_t_op-xegld = g_t_tab-xegld.
APPEND g_t_op.
CLEAR g_t_op.
ENDIF.
CLEAR g_t_tab.
ENDLOOP.
*Getting the material description based on the delivery no
LOOP AT G_T_MAKT.
G_T_MTX-maktx = G_T_MAKT-maktx.
G_T_MTX-n = 1.
APPEND G_T_MTX.
ENDLOOP.
CLEAR G_T_MTX1.
CLEAR EX.
SORT G_T_MTX BY maktx.
LOOP AT G_T_MTX.
AT NEW maktx.
G_T_MTX1-matx = G_T_MTX-maktx.
ENDAT.
AT END OF maktx.
SUM.
G_T_MTX1-count = G_T_MTX-n.
APPEND G_T_MTX1.
CLEAR G_T_MTX1.
ENDAT.
CLEAR EX.
ENDLOOP.
ENDFORM. " GET_DATA
&----
*& Form PROTOCOL_UPDATE
&----
text
----
--> p1 text
<-- p2 text
----
FORM protocol_update.
CHECK xscreen = space.
CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
EXPORTING
msg_arbgb = syst-msgid
msg_nr = syst-msgno
msg_ty = syst-msgty
msg_v1 = syst-msgv1
msg_v2 = syst-msgv2
msg_v3 = syst-msgv3
msg_v4 = syst-msgv4
EXCEPTIONS
OTHERS = 1.
ENDFORM. " PROTOCOL_UPDATE
----
FORM FORM_OPEN *
----
Start of printing the form *
----
--> US_SCREEN Output on screen *
' ' = Printer *
'X' = Screen *
--> US_COUNTRY County for telecommunication and SET COUNTRY *
----
FORM form_open USING us_screen us_country.
INCLUDE rvadopfo.
ENDFORM.
&----
*& Form FORM_CLOSE
&----
text
----
--> p1 text
<-- p2 text
----
FORM form_close.
CALL FUNCTION 'CLOSE_FORM'
EXCEPTIONS
OTHERS = 1.
IF sy-subrc NE 0.
PERFORM protocol_update.
retcode = 1.
ENDIF.
SET COUNTRY space.
ENDFORM. " FORM_CLOSE
----
FORM adresse_lesen *
----
........ *
----
--> adrgr *
--> adrnr *
----
FORM adresse_lesen USING adrgr adrnr.
TABLES: addr1_val.
CLEAR addr1_sel.
addr1_sel-addrnumber = adrnr.
CALL FUNCTION 'ADDR_GET'
EXPORTING
address_selection = addr1_sel
address_group = adrgr
IMPORTING
address_value = addr1_val
sadr = sadr
EXCEPTIONS
OTHERS = 4. "SADR40A
IF sy-subrc NE 0.
CLEAR sadr.
ENDIF.
MOVE-CORRESPONDING sadr TO vbadr.
ENDFORM.
&----
*& Form WRITE_DATA
&----
text
----
--> p1 text
<-- p2 text
----
FORM write_data.
*******************************************************************
**TO BUILD DOCUMENT NO'S
*******************************************************************
CLEAR:t_uz,p_uz,f,dnumber.
*Checking wether initially table has z08v3_uz_numbers has record
SELECT SINGLE * FROM z08v3_uz_numbers INTO t_uz.
IF sy-subrc <> 0.
t_uz-lastnum = '400000'.
INSERT INTO z08v3_uz_numbers VALUES t_uz .
ENDIF.
SELECT SINGLE * FROM z08v3_uz_printed WHERE fknum = vbco3-vbeln.
*Check first wether the No exists in z08v3_uz_printed
IF sy-subrc = 0.
p_uz-fknum = z08v3_uz_printed-fknum.
p_uz-uznum = z08v3_uz_printed-uznum.
dnumber = z08v3_uz_printed-uznum .
ELSEIF sy-subrc <> 0.
SELECT SINGLE * FROM z08v3_uz_numbers INTO t_uz.
f = t_uz-lastnum.
f = f + 1.
p_uz-fknum = vbco3-vbeln.
p_uz-uznum = t_uz-lastnum.
dnumber = t_uz-lastnum.
INSERT INTO z08v3_uz_printed VALUES p_uz.
UPDATE z08v3_uz_numbers SET lastnum = f.
ENDIF.
**************************************************************
PERFORM z_form_write USING 'HEADER' 'HEADER' .
PERFORM z_form_write USING 'NUMBER' 'WINDOW1' .
PERFORM z_form_write USING 'HEADER1' 'HEADER1' .
PERFORM z_form_write USING 'SHIP-TO' 'WINDOW2' .
PERFORM z_form_write USING 'COUNTRY' 'WINDOW3' .
PERFORM z_form_write USING 'TEXT' 'WINDOW5' .
PERFORM z_form_write1 USING 'AUTOMOTIVE' 'MAIN' 'SET' 'BODY'.
PERFORM z_form_write1 USING 'AUTOMOTIVE1' 'BOADY' 'SET' 'BODY'.
LOOP AT g_t_op.
c = c + 1.
CLEAR z.
AT NEW vbeln_vl.
z = z + 1.
d = d + 1.
PERFORM z_form_write1 USING 'DELIVERIES' 'MAIN' 'SET' 'BODY'.
ENDAT.
IF z = 1.
IF g_t_op-xegld = 'X'.
k = '*'.
ELSE.
CLEAR k.
ENDIF.
READ TABLE g_t_vekp WITH KEY exidv = g_t_op-exidv.
PERFORM z_form_write1 USING 'ITEMS' 'MAIN' 'SET' 'BODY'.
CLEAR g_t_vekp.
ELSE.
IF g_t_op-xegld = 'X'.
k = '*'.
ELSE.
CLEAR k.
ENDIF.
PERFORM z_form_write1 USING 'ITEMS1' 'MAIN' 'SET' 'BODY'.
ENDIF.
AT LAST.
PERFORM z_form_write1 USING 'LAST' 'MAIN' 'SET' 'BODY'.
LOOP AT G_T_MTX1.
PERFORM z_form_write1 USING 'LAST1' 'MAIN' 'SET' 'BODY'.
ENDLOOP.
ENDAT.
ENDLOOP.
ENDFORM. " WRITE_DATA
----
FORM CLEAR *
----
........ *
----
FORM clear.
*Clear the Varibles
CLEAR:f,z,c,j,k,d,b,dnumber .
*CLEAR INTERNAL TABLES
CLEAR:p_uz,
t_uz,
g_t_tb2,
g_t_tab,
g_t_tab1,
g_t_op,
dtab,
ltab,
g_t_vepo,
g_t_vekp,
G_T_MAKT,
DMAKT,
G_T_MTX.
ENDFORM. " CLEAR
----
FORM item_print_text *
----
........ *
----
FORM item_print_text.
CLEAR:g_f_tdname,g_f_obj,g_f_langu.
g_f_tdname = vbco3-vbeln.
g_t_id = 'Z022'.
g_f_obj = 'VBBK'.
g_f_langu = 'DE'.
REFRESH g_t_lines.
CLEAR g_t_lines.
CALL FUNCTION 'READ_TEXT'
EXPORTING
id = g_t_id
language = g_f_langu
name = g_f_tdname
object = g_f_obj
TABLES
lines = g_t_lines
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 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.
IF g_t_lines[] IS INITIAL.
g_f_langu = 'EN'.
CALL FUNCTION 'READ_TEXT'
EXPORTING
id = g_t_id
language = g_f_langu
name = g_f_tdname
object = g_f_obj
TABLES
lines = g_t_lines
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 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.
ENDIF.
LOOP AT g_t_lines.
CONCATENATE g_f_var g_t_lines-tdline INTO g_f_var SEPARATED BY
space.
ENDLOOP.
CONDENSE:g_f_var.
ENDFORM. " ITEM_PRINT_TEXT
----
FORM z_form_write *
----
........ *
----
--> p_element *
--> p_window *
----
FORM z_form_write USING p_element
p_window.
DATA: window(08), element(20).
CLEAR:window,element.
window = p_window.
element = p_element.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = element
window = window
EXCEPTIONS
element = 1
function = 2
type = 3
unopened = 4
unstarted = 5
window = 6
bad_pageformat_for_print = 7
OTHERS = 8.
IF sy-subrc <> 0.
PERFORM protocol_update.
ENDIF.
ENDFORM.
----
FORM z_form_write1 *
----
........ *
----
--> p_element *
--> p_window *
--> p_function *
--> p_type *
----
FORM z_form_write1 USING p_element
p_window
p_function
p_type.
DATA: window(08), element(20),function(20),type(20).
CLEAR:window,element,function,type.
window = p_window.
element = p_element.
type = p_type.
function = p_function.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = element
function = function
type = type
window = window
IMPORTING
PENDING_LINES =
EXCEPTIONS
element = 1
function = 2
type = 3
unopened = 4
unstarted = 5
window = 6
bad_pageformat_for_print = 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.
ENDFORM.
Please check the code and let me know if u face any problem.
Regards
09-08-2006 6:37 AM
hi
thanks
In my case ,i have to write a driver program and display the data into sapscript similar to the the screen that we ll get if we enter the billing documents no in VF02.
Can you plz clarify wht your driver progam does.
Thanks
Mrutyun^
09-08-2006 6:47 AM
Hello,
According to my driver program,
1.From tcode VF02 we are viewing the script.
2.So in my driver program i am extracting the data using the function module.
CALL FUNCTION 'RV_BILLING_PRINT_VIEW'
EXPORTING
comwa = vbco3
IMPORTING
kopf = vbdkr
TABLES
pos = tvbdpr
EXCEPTIONS
terms_of_payment_not_in_t052 = 1
error_message = 5
OTHERS = 4.
IF NOT sy-subrc IS INITIAL.
IF sy-subrc = 1.
syst-msgty = 'I'.
PERFORM protocol_update.
ENDIF.
ENDIF.
3.So using the data from this function module I am displaying in the form created by me.
Initialy My driver program and form name is assigned to OUtput type in the NACE tocode.
Let me know if I am not clear.
Regards
09-08-2006 7:29 AM
hi
thanks
I got it , just one clarification,
my screen is something like this
leftside righthandside
-
-
logo invoice no
leftside righthand side
-
-
bill to address Payer accnt no
righthand side
-
Customer Order Detail
middle
-
Invoice Summary
middle
-
Invoice Detail
can you plz give me some details wheather your sapscript have the similar structure as i mentioned , or something diff.
thanks
mrutyun^
09-08-2006 7:32 AM
The structure is different.
Let me know what u want exactly from the script structure.
Regards
09-08-2006 7:37 AM
hi
can you send me your id ,
So that i can send you exactly wht i want in the sapscript structure.
thanks
mrutyun^
09-08-2006 7:39 AM
09-08-2006 6:20 AM
Hi,
Search NAST table for the particular Output type and assign the Output type to the SAP SCript.
Go to NACE and go to V3 (billing) and assign the corresponding Driver program and Script.