‎2007 Mar 15 11:42 AM
Hi
Can any one give me an example of how to write subroutine in script.
I have done it with perform but it is not displaying me any output.
Regards
Haritha.
‎2007 Mar 15 11:43 AM
Hello,
Chekc this example.
PERFORM GET_VEND_NAME_MOD IN PROGRAM /RB17/YV_FORMS_PUTAWAY_LIST
USING <AK-VBELN&
USING <AP-POSNR&
USING <AK-LGNUM&
USING <AK-BWART&
USING <AK-BWLVS&
USING <AK-MBLNR&
USING <AK-MJAHR&
CHANGING &VEND_NAME&
CHANGING &TRAID&
CHANGING &SHIPPING_UNIT&
CHANGING &VEKP_VKORG&
CHANGING &VEKP_VTWEG&
FORM get_vend_name_mod TABLES in_tab STRUCTURE itcsy
out_tab STRUCTURE itcsy .
DATA : z_vbeln LIKE ltak-vbeln,
z_lgnum LIKE ltak-lgnum,
z_bwart LIKE ltak-bwart,
z_bwlvs LIKE ltak-bwlvs,
z_mblnr LIKE ltak-mblnr,
z_mjahr LIKE ltak-mjahr,
z_posnr LIKE ltap-posnr,
l_f_handle LIKE vevw-handle,
l_f_werks LIKE mseg-werks,
l_f_objkey(14) TYPE c,
l_f_stock1(35) TYPE c.
CONSTANTS : l_f_stock(35) TYPE c VALUE 'Stock Transfer from Plant 9060'.
CLEAR : likp,lfa1.
* Get the delivery number
READ TABLE in_tab WITH KEY name = 'LTAK-VBELN'.
CHECK sy-subrc = 0.
z_vbeln = in_tab-value.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = z_vbeln
IMPORTING
output = z_vbeln.
* position number
READ TABLE in_tab WITH KEY name = 'LTAP-POSNR'.
CHECK sy-subrc = 0.
z_posnr = in_tab-value.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = z_posnr
IMPORTING
output = z_posnr.
* Warehouse number
READ TABLE in_tab WITH KEY name = 'LTAK-LGNUM'.
IF sy-subrc = 0.
z_lgnum = in_tab-value.
ENDIF.
* Movement type
READ TABLE in_tab WITH KEY name = 'LTAK-BWART'.
IF sy-subrc = 0.
z_bwart = in_tab-value.
ENDIF.
READ TABLE in_tab WITH KEY name = 'LTAK-BWLVS'.
IF sy-subrc = 0.
z_bwlvs = in_tab-value.
ENDIF.
* Material document number and year
READ TABLE in_tab WITH KEY name = 'LTAK-MBLNR'.
IF sy-subrc = 0.
z_mblnr = in_tab-value.
ENDIF.
READ TABLE in_tab WITH KEY name = 'LTAK-MJAHR'.
IF sy-subrc = 0.
z_mjahr = in_tab-value.
ENDIF.
CONCATENATE z_mblnr z_mjahr INTO l_f_objkey.
IF ( z_lgnum = 'A11' AND z_bwart = '301' AND z_bwlvs = '302' ).
SELECT SINGLE handle INTO l_f_handle FROM vevw
WHERE object = 'MM' AND
objkey = l_f_objkey.
IF sy-subrc EQ 0 AND
NOT l_f_handle IS INITIAL.
SELECT SINGLE * FROM vekp
WHERE handle = l_f_handle.
g_f_exidv = vekp-exidv.
ENDIF.
SELECT SINGLE werks INTO l_f_werks FROM mseg
WHERE
mblnr = z_mblnr AND
mjahr = z_mjahr AND
shkzg = 'H'.
IF sy-subrc EQ 0
AND l_f_werks EQ '9060'.
l_f_stock1 = l_f_stock.
ENDIF.
SELECT SINGLE * FROM likp
WHERE vbeln = z_vbeln .
IF sy-subrc EQ 0 .
SELECT SINGLE * FROM lfa1
WHERE lifnr = likp-lifnr.
ENDIF.
ELSE.
SELECT SINGLE * FROM likp
WHERE vbeln = z_vbeln .
IF sy-subrc EQ 0 .
SELECT SINGLE * FROM lfa1
WHERE lifnr = likp-lifnr.
l_f_stock1 = lfa1-name1.
ENDIF.
SELECT SINGLE vbeln FROM vbfa
INTO vbfa-vbeln
WHERE vbtyp_n = 'X'
AND vbelv = z_vbeln.
SELECT SINGLE * FROM vepo
WHERE venum = vbfa-vbeln.
IF sy-subrc EQ 0 .
SELECT SINGLE * FROM vekp
WHERE venum = vepo-venum.
ENDIF.
IF vekp-exidv IS INITIAL.
SELECT SINGLE * FROM vekp
WHERE vpobj IN ('01','03')
AND vpobjkey = z_vbeln.
g_f_exidv = vekp-exidv.
ENDIF.
ENDIF.
READ TABLE out_tab WITH KEY name = 'VEND_NAME'.
CHECK sy-subrc = 0.
out_tab-value = l_f_stock1.
SHIFT out_tab-value LEFT DELETING LEADING space.
MODIFY out_tab INDEX sy-tabix.
READ TABLE out_tab WITH KEY name = 'TRAID'.
CHECK sy-subrc = 0.
out_tab-value = likp-traid.
SHIFT out_tab-value LEFT DELETING LEADING space.
MODIFY out_tab INDEX sy-tabix.
READ TABLE out_tab WITH KEY name = 'SHIPPING_UNIT'.
CHECK sy-subrc = 0.
out_tab-value = g_f_exidv.
SHIFT out_tab-value LEFT DELETING LEADING space.
SHIFT out_tab-value LEFT DELETING LEADING '0'.
MODIFY out_tab INDEX sy-tabix.
READ TABLE out_tab WITH KEY name = 'VEKP_VKORG'.
CHECK sy-subrc = 0.
out_tab-value = vekp-vkorg.
MODIFY out_tab INDEX sy-tabix.
READ TABLE out_tab WITH KEY name = 'VEKP_VTWEG'.
CHECK sy-subrc = 0.
out_tab-value = vekp-vtweg.
MODIFY out_tab INDEX sy-tabix.
*} INSERT
ENDFORM. "get_vend_name_mod
Regards,
Vasanht
‎2007 Mar 15 11:45 AM
Hi,
See this example:
REPORT ZMPO1 .
form get_freight tables in_par structure itcsy out_par structure itcsy.
tables: ekko,konv,t685t.
data: begin of itab occurs 0,
ebeln like ekko-ebeln,
knumv like ekko-knumv,
end of itab.
data: begin of itab1 occurs 0,
knumv like konv-knumv,
kposn like konv-kposn,
kschl like konv-kschl,
kbetr like konv-kbetr,
waers like konv-waers,
kwert like konv-kwert,
end of itab1.
data: begin of iout occurs 0,
kschl like konv-kschl,
vtext like t685t-vtext,
kbetr like konv-kbetr,
kwert like konv-kwert,
end of iout.
data v_po like ekko-ebeln.
read table in_par with key 'EKKO-EBELN'.
if sy-subrc = 0.
v_po = in_par-value.
select
ebeln
knumv
from ekko
into table itab
where ebeln = v_po.
if sy-subrc = 0.
loop at itab.
select
knumv
kposn
kschl
kbetr
waers
kwert
into table itab1
from konv
where knumv = itab-knumv and
kappl = 'M'.
endloop.
loop at itab1.
if itab1-kposn <> 0.
select single * from t685t
where kschl = itab1-kschl
and kappl = 'M'
and spras = 'EN'.
iout-vtext = t685t-vtext.
iout-kschl = itab1-kschl.
iout-kbetr = itab1-kbetr.
iout-kwert = itab1-kwert.
append iout.
clear iout.
endif.
endloop.
sort itab1 by kposn.
loop at iout.
sort iout by kschl.
if ( iout-kschl eq 'GSDC' OR
iout-kschl eq 'GSFR' OR
iout-kschl eq 'GSIR' ).
at end of kschl.
read table iout index sy-tabix.
sum.
write:/ iout-kschl,iout-vtext,iout-kwert.
out_par-name = 'A1'.
out_par-value = iout-vtext.
append out_par.
out_par-name = 'A2'.
out_par-value = iout-kwert.
append out_par.
endat.
endif.
endloop.
endif.
endif.
endform.
IN THE FORM I AM WRITING THIS CODE.
/:DEFINE &A1& = ' '
/:DEFINE &A2& = ' '
/:PERFORM GET_FREIGHT IN PROGRAM ZMFORM_PO1
/:USING &EKKO-EBELN&
/:CHANGING &A1&
/:CHANGING &A2&
/:ENDPERFORM
&A1&
&A2&
This Code is to be written in the PO form under ADDRESS window.
-
/:DEFINE &A1& = ' '
/:DEFINE &A2& = ' '
/:DEFINE &A3& = ' '
/:DEFINE &A4& = ' '
/:DEFINE &A5& = ' '
/:DEFINE &A6& = ' '
/:PERFORM GET_VENDOR IN PROGRAM ZMFORM_PO
/:USING &EKKO-EBELN&
/:CHANGING &A1&
/:CHANGING &A2&
/:CHANGING &A3&
/:CHANGING &A4&
/:CHANGING &A5&
/:CHANGING &A6&
/:ENDPERFORM
&A1&
&A2&
&A3&
&A4&
&A5&
&A6&
Regards,
Anji
‎2007 Mar 15 11:47 AM
Hi Haritha,
try this,
: DEFINE &V_BUKRS& = '0010'
/: DEFINE &V_BELNR& = '5000000216'
/: DEFINE &V_GJAHR& = '1999'
/: DEFINE &V_BUZEI& = '001 '
/: PERFORM GET_PO IN PROGRAM YAZPO
/: USING &V_BUKRS&
/: USING &V_BELNR&
/: USING &V_GJAHR&
/: USING &V_BUZEI&
/: CHANGING &PO&
/: ENDPERFORM
&PO&
*****************
TABLES : BSEG .
DATA : S_BUKRS LIKE BSEG-BUKRS,
S_BELNR LIKE BSEG-BELNR,
S_GJAHR LIKE BSEG-GJAHR,
S_BUZEI LIKE BSEG-BUZEI .
FORM GET_PO TABLES INPUT_TABLE STRUCTURE ITCSY
OUTPUT_TABLE STRUCTURE ITCSY.
READ TABLE INPUT_TABLE WITH KEY NAME = 'V_BUKRS' .
MOVE INPUT_TABLE-VALUE TO S_BUKRS.
READ TABLE INPUT_TABLE WITH KEY NAME = 'V_BELNR' .
MOVE INPUT_TABLE-VALUE TO S_BELNR.
READ TABLE INPUT_TABLE WITH KEY NAME = 'V_GJAHR' .
MOVE INPUT_TABLE-VALUE TO S_GJAHR.
READ TABLE INPUT_TABLE WITH KEY NAME = 'V_BUZEI' .
MOVE INPUT_TABLE-VALUE TO S_BUZEI.
SELECT EBELN INTO BSEG-EBELN FROM BSEG
WHERE BUKRS = S_BUKRS AND
BELNR = S_BELNR AND
GJAHR = S_GJAHR AND
BUZEI = S_BUZEI .
MOVE: 'PO' TO OUTPUT_TABLE-NAME ,
BSEG-EBELN TO OUTPUT_TABLE-VALUE.
APPEND OUTPUT_TABLE .
CLEAR OUTPUT_TABLE.
ENDSELECT .
ENDFORM .
Regards,
Ramganesan K
‎2007 Mar 15 11:49 AM
Hi,
Syntax goes like this
/: PERFORM <form> IN PROGRAM <prog>
/: USING &INVAR1&
/: USING &INVAR2&
......
/: CHANGING &OUTVAR1&
/: CHANGING &OUTVAR2&
......
/: ENDPERFORM
INVAR1 and INVAR2 are variable symbols and may be of any of the four SAPscript symbol types.
OUTVAR1 and OUTVAR2 are local text symbols and must therefore be character strings.
Regards,
Ramganesan K.
‎2007 Mar 15 11:54 AM
hi,
/: PERFORM FORM1 IN PROGRAM ZTEST
/: USING &VAR1&
/: CHANGING &VAR_OUT1&
In program ZTEST
FORM FORM1 tables in_tab structure itcsy
out_tab structure itcsy.
Get value of VAR1
data: var1 like <field>.
read table in_tab with key name = 'VAR1'.
if sy-subrc = 0.
move in_tab-value to var1.
endif.
Update the value of VAR_OUT1
read table out_tab with key name = 'VAR_OUT1'.
if sy-subrc = 0.
move <value> to out_tab-value.
modify out_tab index sy-tabix.
endif.
ENDFORM.
check this...
http://help.sap.com/saphelp_erp2005/helpdata/en/d1/803279454211d189710000e8322d00/frameset.htm
do reward if it helps,
priya.
‎2007 Mar 15 2:33 PM
If you are not getting the output by writing subroutine in scripts.
This might be the major thing that you forgot.
Declare the import,export(using,changing) parameters in the subroutine definition
should be character type
Try this your problem might be solved.
Reward points if this is helpful to you