Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Subroutine in scripts

Former Member
0 Likes
733

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.

6 REPLIES 6
Read only

Former Member
0 Likes
678

Hello,

Chekc this example.


PERFORM GET_VEND_NAME_MOD IN PROGRAM /RB17/YV_FORMS_PUTAWAY_LIST
USING &LTAK-VBELN&
USING &LTAP-POSNR&
USING &LTAK-LGNUM&
USING &LTAK-BWART&
USING &LTAK-BWLVS&
USING &LTAK-MBLNR&
USING &LTAK-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

Read only

Former Member
0 Likes
678

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

Read only

former_member189631
Active Contributor
0 Likes
678

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

Read only

former_member189631
Active Contributor
0 Likes
678

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.

Read only

Former Member
0 Likes
678

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.

Read only

Former Member
0 Likes
678

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