Declaration of subroutine formal parameters in ecc 6.0
In extended syntax check of my program, how can i declare formal parameters ?
the warning is
Program: ZADI_V_R_869_870_STATUS Row: 751
Parameter "P_LV_UNSHIPPED_QTY" is untyped.
Static type checks and optimizations,
therefore, cannot take place.
If a type cannot be declared, use the type ANY.
ANY. use the type ANY. use the type ANY.
use the type ANY.
Internal Message Code: MESSAGE GUX
(The message can be hidden with "#EC *)
The formal parameters in the code is nto delcared with type ...
So how to declare here in ecc 6.0 ?
FORM logic_4_ord_status
USING p_lv_canc_date
p_lv_shipped_date
p_lv_order_qty
p_lv_delivery
p_lv_open_qty
p_lv_neworderqty
p_lv_pickedqty
p_lv_j_3acada
p_lv_j_3arqda
p_lv_cancelled1
p_lv_zzactcnt
p_lv_zzstatus
p_lv_cancelled2
p_lv_unshipped_qty
CHANGING p_wa_870_output_rec TYPE t_870_output_rec.
My declaration is
DATA: lv_order_qty TYPE wmeng,
lv_cancelled1 TYPE wmeng,
lv_cancelled2 TYPE wmeng,
lv_delivery TYPE lfimg,
lv_open_qty TYPE lfimg,
lv_neworderqty TYPE lfimg,
lv_pickedqty TYPE lfimg,
lv_unshipped_qty TYPE lfimg,
lv_canc_date(8) TYPE c,
lv_shipped_date TYPE erdat .
DATA: lv_j_3acada TYPE j_3acada,
lv_j_3arqda TYPE j_3arqda.
Please suugest me that TYPE any is sufficient
for all
p_lv_shipped_date
p_lv_order_qty TYPE any
p_lv_delivery TYPE any
p_lv_open_qty TYPE any
p_lv_neworderqty TYPE any
p_lv_pickedqty TYPE any
p_lv_j_3acada TYPE any
p_lv_j_3arqda TYPE any
p_lv_cancelled1 TYPE any
p_lv_zzactcnt TYPE any
p_lv_zzstatus TYPE any
p_lv_cancelled2 TYPE any
p_lv_unshipped_qty TYPE any
Using "#EC UOM_IN_MES) at the end of formal parameter is of no use !!!
I got aroung 275 Warnings in extended syntax check as I am using the below set so many times
WRITE p_lv_order_qty TO p_wa_870_output_rec-order_qty DECIMALS 0.
WRITE p_lv_neworderqty TO p_wa_870_output_rec-new_ord_qty DECIMALS 0.
WRITE p_lv_cancelled1 TO p_wa_870_output_rec-cancel_1_qty DECIMALS 0.
WRITE p_lv_cancelled2 TO p_wa_870_output_rec-cancel_2_qty DECIMALS 0.
WRITE p_lv_open_qty TO p_wa_870_output_rec-open_qty DECIMALS 0.
WRITE p_lv_delivery TO p_wa_870_output_rec-deliv_qty DECIMALS 0.
WRITE p_lv_pickedqty TO p_wa_870_output_rec-pick_qty DECIMALS 0.
WRITE p_lv_unshipped_qty TO p_wa_870_output_rec-unship_qty DECIMALS 0.
for each line do I need to give like below ? :"
WRITE p_lv_order_qty TO p_wa_870_output_rec-order_qty DECIMALS 0. "#EC UOM_IN_MES)
My coding :
===========================================================================
FORM logic_4_ord_status
USING p_lv_canc_date
p_lv_shipped_date TYPE erdat
p_lv_order_qty TYPE wmeng
p_lv_delivery TYPE lfimg
p_lv_open_qty TYPE lfimg
p_lv_neworderqty TYPE lfimg
p_lv_pickedqty TYPE lfimg
p_lv_j_3acada
p_lv_j_3arqda
p_lv_cancelled1 TYPE wmeng
p_lv_zzactcnt
p_lv_zzstatus
p_lv_cancelled2 TYPE wmeng
p_lv_unshipped_qty TYPE lfimg
CHANGING p_wa_870_output_rec TYPE t_870_output_rec.
*---Pass the values to output internal table.
p_wa_870_output_rec-shp_ord_date = p_lv_j_3acada.
WRITE p_lv_order_qty TO p_wa_870_output_rec-order_qty DECIMALS 0. "#EC UOM_IN_MES)
WRITE p_lv_neworderqty TO p_wa_870_output_rec-new_ord_qty DECIMALS 0.
WRITE p_lv_cancelled1 TO p_wa_870_output_rec-cancel_1_qty DECIMALS 0.
WRITE p_lv_cancelled2 TO p_wa_870_output_rec-cancel_2_qty DECIMALS 0.
WRITE p_lv_open_qty TO p_wa_870_output_rec-open_qty DECIMALS 0.
WRITE p_lv_delivery TO p_wa_870_output_rec-deliv_qty DECIMALS 0.
WRITE p_lv_pickedqty TO p_wa_870_output_rec-pick_qty DECIMALS 0.
WRITE p_lv_unshipped_qty TO p_wa_870_output_rec-unship_qty DECIMALS 0.
Could you please advice/help me in resisting these warnings...
Similar Messages
-
How to use/declare actual and formal paramters in ECC 6.0?
Experts,
I am new to ECC 6.0, and
Please help me how to pass workarea in actual parameters ( I need to use USING/CHANGING or TABLES ? please correct me ).
And in FORM logic_4_ord_status, how to declare work area and variables in formal parameters signature ???
I have declared:
TYPES : BEGIN OF ty_869_input_rec,
rec_type(2) TYPE c,
cntrl_no(50) TYPE c,
rep_flag(1) TYPE c,
edi_tr_par(16) TYPE c,
sap_cust_no(100) TYPE c,
brd_idfr(4) TYPE c,
canc_date(8) TYPE c, " Promised to ship by date
po_no(18) TYPE c,
cust_cntrt_po_no(18) TYPE c,
selection(2) TYPE c,
END OF ty_869_input_rec.
TYPES : BEGIN OF ty_870_output_rec,
rec_type(2) TYPE c,
cntrl_no(50) YPE c,
rep_flag(1) TYPE c,
edi_tr_par(16) TYPE c,
sap_cust_no TYPE vbeln_va,
brd_idfr TYPE vkorg,
po_no TYPE bstnk,
cust_cntrt_po_no TYPE bstnk,
selection(2) TYPE c,
END OF ty_870_output_rec.
Internal table declarations.
DATA : gt_869_input_rec TYPE TABLE OF ty_869_input_rec,
gt_870_output_rec TYPE TABLE OF ty_870_output_rec.
Workarea declations.
DATA : wa_869_input_rec TYPE ty_869_input_rec,
wa_870_output_rec TYPE ty_870_output_rec.
DATA : lv_order_qty TYPE wmeng,
lv_cancelled1 TYPE wmeng,
lv_cancelled2 TYPE wmeng,
lv_delivery TYPE lfimg,
lv_open_qty TYPE lfimg,
lv_neworderqty TYPE lfimg,
lv_pickedqty TYPE lfimg,
lv_unshipped_qty TYPE lfimg.
perform logic_4_ord_status
USING wa_869_INPUT_REC
lv_order_qty
lv_delivery
lv_open_qty
lv_j_3acada
lv_j_3arqda
lv_cancelled1
lv_zzactcnt
lv_zzstatus
changing wa_870_output_rec
form logic_4_ord_status
using p_wa_869_input_rec type TY_869_input_rec
p_lv_order_qty
p_lv_delivery
p_lv_open_qty
p_lv_j_3acada
p_lv_j_3arqda
p_lv_cancelled1
p_lv_zzactcnt
p_lv_zzstatus
changing p_wa_870_output_rec type TY_870_output_rec
IF p_lv_delivery LE '0'
AND p_lv_Open_Qty GT '0'
AND ( p_wa_869_input_recu2013canc_date <> p_lv_j_3acada )
AND ( p_lv_zzactcnt = 'F' OR p_lv_zzactcnt = 0 ).
p_wa_870_output_rec-shp_ord_status = 'RD' .
p_wa_870_output_rec-order_qty = p_lv_order_qty.
p_wa_870_output_rec-open_qty = p_lv_open_qty.
FOR 1st 'SC'
ELSEIF p_lv_delivery LE '0'
AND p_lv_Open_Qty GT '0'
AND ( p_lv_cancelled1 GT '0' )
AND ( p_lv_zzstatus = 'F'
OR p_lv_zzactcnt = '0' ).
I could not declare actual and formal parameters correctly .
Kindly help me.
I am getting error at p_wa_869_input_recu2013canc_date.
Please validate me ...
THANKS IN ADV.It depends on which BW environment has an RFC connection to the ECC environment you're activating the DataSource in. Typically, environments are paired, similar (but not always) like the depiction below:
ECC Development <-> BW Development
ECC QA <-> BW QA
ECC Production <-> BW Production
Best Practices suggest that a DataSource be activated and put on a transport in the ECC Development environment. Upon activation of the DataSource in ECC Development, replication of the DataSource in the BW Development environment can take place and Best Practices suggest putting the DataSource on a transport in BW. As the ECC transport is promoted throughout the ECC landscape, the BW transport is promoted throughout the BW landscape in order to keep them in sync.
So, if the envrionment that you've just activated the DataSource has an RFC connection to your BW Production environment, you can replicate in BW Production and if that's your standard practice, then that's the way your should do it. It's typically, however, not considered a Best Practice to be able to create, update or delete in a production environment. -
How to define this FORMAL parameters for a std. SAP itab?
Hello Experts,
Am writing a custom PERFORM in a standard SAP include-RVCOMFZZ by using modification assistant, like below,
RVCOMFZZ:
PERFORM my_routine IN PROGRAM my_report USING com_vbapvb.
(here com_vbapvb is a TABLES parameter with STRUCTURE of vbapvb in the std. sap FM).
my_report:
FORM my_routine USING here_I_want_to_know_the_data_object
ENDFORM.
Here pls. let me know How to define the FORMAL parameters of my_routine? I tried with different options, but did not worked out. Preferable let me know in OOPS concepts (not using TABLES)
Thank youHi,
here is example how to write you structure content regardless what com_vbap has field list.
PERFORM my_routine IN PROGRAM my_report USING com_vbapvb.
FORM my_routine USING here_I_want_to_know_the_data_object.
field-SYMBOLS: <field> type any.
do 100 times.
assign COMPONENT sy-index of structure ls_VBAPVB to <field>.
if sy-subrc = 0.
write:/ <field>.
else.
exit.
endif.
enddo.
ENDFORM.
Bye Jan -
Translation of ITS Screen Parameters in ECC 6.0
Hi ,
I have added 3 new parameters to ITS Screen , need to translate the parameter description to FR language .
Need help on how to maintain the language translation to the ITS screen parameters in ECC 6.0
Please find below are my findinds
1. In the main menu GOTO - Translation option is disabled
2. I Saw in application help this can be done by place holder and Compare parametrs icon , but in the screen i did not find any Compare icon
3. I tried to give the description by Login in other language , but when i login to English language , the Other language description only showing
Please suggest if any one has the answers for this.
Thanks
VijayaPlease find the link below
http://help.sap.com/erp2005_ehp_05/helpdata//EN/cc/a79734d57211d3963700a0c94260a5/content.htm
And also i am trying to maintain the TEXT in OTR , Though SOTR_EDIT , But dont know first how to activate the OTR for ITS screen. -
Formal keys, formal Parameters
Q. What are formal Keys and Formal Parameters?
Formal parameter
the parameter defined in the method heading
Actual parameter
the parameter that is passed when a method is called -
Declaring custom table under parameters tab in BADI
Hello Friends,
I need to declare custom table under parameters tab in BADI. When iam trying to change the screen from display to change mode, iam getting followoing message.
Exit classes/interfaces can only be edited using the BADI Builder
Replies regarding this highly appreciated.Thanks in advance.
Regards
SriHi,
Badi and respective method as follows.
ZBBP_CATALOG_TRANSFR --> Badi
ENRICH_ITEM_DATA --> method
I need to declare custom table under the above method
Thanks. -
Default is it a true formal parameters?
Hi All
Does any onoe know
what 's the difference between Deptree or Ideptree?
and which part of a databse tigger determine the number of times the tigger body executes?
and Default is it a true formal parameters?
please help,
HilaireDEPTREE
This view, created by utldtree.sql, contains information on the object dependency tree. For user SYS, this view displays shared cursors (and only shared cursors) that depend on the object. For all other users, it displays objects other than shared cursors. Other users can access SYS.DEPTREE for information on shared cursors.
Column Datatype NULL Description
NESTED_LEVEL
NUMBER
Nesting level in the dependency tree
TYPE
VARCHAR2(15)
Object type
OWNER
VARCHAR2(30)
Object owner
NAME
VARCHAR2(1002)
Object name
SEQ#
NUMBER
Sequence number in the dependency tree. Used for ordering queries.
See Also: "IDEPTREE"
Joel P�rez -
Transport of Global Parameters from ECC to SCM
We have tried to set up RSA1 in our SCM development systems for both F&R and EWM to allow us to transfer calendars, UOMs etc from ECC to these systems but have hit a couple of snags...
We have the following system/client structures for the F&R SCM system:
Development Quality Assur. Production
DF0 260 (Golden) QF0 360 PF0 960
DF0 261 (Unit Test)
DF0 262 (Perf. Test)
And for BI we have:
DB0 120 QB0 220 PB0 920
For the QA and Production instances, we do not have an issue, since the limitation of having only one BI client per system doesn't matter as we only have one client to connect.
But for the Development systems, currently it is the DF0 261 client that is connected to the DB0 120 BI client. We want to be able to pull the data from our ECC golden client (DE2 700) into each of the DF0 clients. But when we try and run RSA1 in any other client than 261, we get an error telling us that only one client can connect to BI and we must work in that client.
I thought we could maybe get around it by simply running report RSIMPCUST in a batch job, but cannot see how to save a variant with the source client name in it since this is always greyed out when you run it online. I guess if I maintain the BI system as the default client for each of these F&R systems in SCC4 it might work, but I don't know what else uses this default client value?
Does anyone know of any workarounds for this? It would be really nice to be able to synchronize all systems (especially as the link is between two non-BI systems, so the BI restriction should not even apply). If we have to go back to the current approach of manually updating the development systems for any changes in ECC then we may as well use that for all clients and just transport the changes. It is not a good solution though...
Thanks,
Lukethere is some explanation to what you have mentioned in Re: Factory Calendar
this talks about calendars and is relevant till SCM 4.x
I would imagine the situation would be the same for UOM
In SCM 5 you have the option to update the tables, Rebuild the tables and also a simulation option -
FM accepts no formal parameters of type "u"
Hi,
I get a strange error when calling an function module. Below you can see the (generated) data definition, my call, my function header and the errormessage i get. Any help would be appreciated.
TYPES:
BEGIN OF DATA_PACKAGE_STRUCTURE.
INCLUDE STRUCTURE /BIC/CS8ZBP_ALL.
TYPES:
RECNO LIKE sy-tabix,
END OF DATA_PACKAGE_STRUCTURE.
DATA:
DATA_PACKAGE TYPE STANDARD TABLE OF DATA_PACKAGE_STRUCTURE
WITH HEADER LINE
WITH NON-UNIQUE DEFAULT KEY INITIAL SIZE 0.
* Get validation results & fill error table
CALL FUNCTION 'ZBW_BP_VALIDATE_DPAK'
EXPORTING
i_dpid = datapackid
i_src = _val_source
i_tgt = _val_target
i_srctp = _val_source_type
CHANGING
c_t_data = data_package
c_t_result = _lt_result.
*"*"Lokale interface:
*" IMPORTING
*" REFERENCE(I_REQUEST) TYPE REF TO IF_RSBK_REQUEST_ADMINTAB_VIEW
*" OPTIONAL
*" REFERENCE(I_DPID) TYPE RSDATAPID OPTIONAL
*" REFERENCE(I_SRC) TYPE RSBKSRCNM OPTIONAL
*" REFERENCE(I_TGT) TYPE RSBKTGTNM OPTIONAL
*" REFERENCE(I_SRCTP) TYPE RSBKSRCTP OPTIONAL
*" CHANGING
*" REFERENCE(C_T_DATA) TYPE ANY TABLE
*" REFERENCE(C_T_RESULT) TYPE ZBW_T_BPVAL_ERROR
*" EXCEPTIONS
*" UNKNOWN_SOURCETYPE
*" NO_SOURCE_DEFINED
*" NO_SOURCETYPE_SUPPLIED
You attempted to pass the field "DATA_PACKAGE" to the formal parameter
"C_T_DATA"
but the formal parameter "C_T_DATA" can accept only fields of
type "h". The field "C_T_DATA" has the type "u".Hi,
You should change:
REFERENCE(C_T_DATA) TYPE ANY TABLE
by:
REFERENCE(C_T_DATA) TYPE STANDARD TABLE
Best regards,
Leandro Mengue -
Passing Parameters from ECC (NWBC) to Crystal Reports
Hello All,
I would like to know if anyone has had experience passing a value from ECC (the shipment number, for example) in NWBC into a link for Crystal Reports, so the report will load with the parameter instead of having the user input it again.
In other words, on NWBC shipment screen, if the user clicks the link, the report should automatically load with the shipment number filled in, instead of having the user enter the shipment number again.
Thanks.I think this is the SCN Space you are looking for:
SAP Enterprise Portal
- Ludek
Senior Support Engineer AGS Product Support, Global Support Center Canada
Follow us on Twitter -
Declaration of subroutines with exceptions
Hi all,
I have a subroutine perform call_customer badi.In its form i have the following code.
form call-customer_badi.
TRY.
GET BADI lr_badi_enhance_master.
CATCH cx_badi_not_implemented.
RAISE EXCEPTION TYPE /castp/cx_cck_exception
EXPORTING
textid = /castp/cx_cck_exception=>ex_badi_not_implemented.
ENDTRY.
endform.
So my question is how do i catch the exception in the form.How to do it.
Regards,
Alex.Hi Alex,
If you are able to execute the code in Subroutine then change llike this if it can be changed
perform call-customer_badi changing text_id. " Add this Changing Parameter
form call-customer_badi changing text_id. " For More info take F1 help on FORM Key word
endform
Regards
Ram -
Declare variables vs passing parameters
Hi,
I'm just curious about it. What is the difference in declaring an variable (static or not) and having your methods use that (get/set) and declaring a method variable and passing that along other methods that you call?
Some people have said that variables that have to be used by more than 1 method should declare an instance variable.
Can anyone enlighten me?
Thanks.
DesmondAre you asking about the pourpose of inspectors (the get methods)?
You have to understand whats the pourpose of a defined Object by a programmer.
public class Sum {
private int num1 = 0;//this private variables belongs to the Object Sum, and normally they are
private int num2 = 0;//ALWAYS PRIVATE
public Sum(int num1, int num2){//this is the constructor, its where u initialize ur private variables
this.num1 = num1;
this.num2 = num2;
public int getNum1() {//this is an inspector, it gets the num1 of the private variable num1
return num1;
public int getNum2() {//this is another inspector but this time for num2
return num2;
* Whats the pourpose of the inspectors? Why not make the private variables public?
* Heres the answer..If u make those private variables public, you risk on having
* more mistakes in ur program, you always should restrict variables as much as possible
* so the chances on making mistakes decreases
public int result() {//this isnt an inspector, but a method that returns the sum of both num1 and num2
return num1 + num2;
* Now how to use this Object to ur needs
public static void main(String[] args){
Sum add = new Sum(12, 10);
System.out.println("Add");
System.out.println("Num1: " + add.getNum1() + "\n" +
"Num2: " + add.getNum2() + "\n" +
"Result: " + add.result());
* You can make more Sum's if u like but each of them have their own variables
Sum another_add = new Sum(20, 15);
System.out.println("Another add");
System.out.println("Num1: " + another_add.getNum1() + "\n" +
"Num2: " + another_add.getNum2() + "\n" +
"Result: " + another_add.result());
* Now that whe have both results we can compare them
System.out.println("Result in add: " + add.result() + "\n" +
"Result in another_add: " + another_add.result());
} -
Hi,
The Sample Procedure is been displayed Below:--
i_userId is an input (number) parameter to the Stored Procedure (SP)..
This same parameter is used for filtering Data (can be found almost bottom , i had marked as "ISSUE FOUND" there.).
i'm been using the SP without TO_NUMBER (i_userId) in my database 11g which works fine.
When the same Script is been imported to another 11g Database.. the query fetches NOTHING..... And it Works only when i had given TO_NUMBER (i_userId)........
Why is its So?........
Is this issue occur due to any installation problem, or Database creation problem.............
CREATE OR REPLACE PROCEDURE ADM_MENUSUBLEVEL_GET (i_userId IN NUMBER,
i_parent IN NUMBER,
o_menuCur OUT SYS_REFCURSOR,
o_Return OUT NUMBER) IS
array_tab array_tbl := array_tbl();
BEGIN
The Query below Fetches the lower most child node and returns its parent based on
hierachy
WITH MAINDATA AS
(SELECT LAG(purity, (LVL - 1), 0) OVER (ORDER BY rn) Val, unique_id, menu_id, parent_id, remarks, is_active, lvl
FROM (SELECT ROWNUM rn, DECODE (lvl, 1, menu_id, NULL) purity, unique_id,
menu_id, parent_id, remarks, is_active, lvl
FROM (SELECT 'A' unique_id, menu_id, parent_id, remarks, is_active, lEVEL lvl
FROM adm_menuconfig t
START WITH menu_id IN (SELECT adm.menu_id
FROM adm_users adu,
adm_user_auth_role adur,
adm_rolemenumapping adr,
adm_menuconfig adm
WHERE adu.user_id = adur.user_id
AND adur.role_id = adr.role_id
AND adm.menu_id = adr.menu_id
AND (NVL (adr.menu_add, 0) > 1 OR
NVL (adr.menu_modify, 0) > 1 OR
NVL (adr.menu_cancel, 0) > 1 OR
NVL (adr.menu_view, 0) > 1 OR
NVL (adr.menu_print, 0) > 1 OR
NVL (adr.menu_re_print, 0) > 1 OR
NVL (adr.menu_delete, 0) > 1 OR
NVL (adr.menu_process, 0) > 1 OR
NVL (adr.menu_approve, 0) > 1 OR
NVL (adr.menu_pre_dated_entry, 0) > 1 OR
NVL (adr.menu_import, 0) > 1 OR
NVL (menu_export, 0) > 1 OR
NVL (adr.menu_validation, 0) > 1)
AND adur.is_active = 1
AND adu.user_id = to_number(i_userId)) ------------------ ISSUE FOUND
CONNECT BY menu_id = PRIOR parent_id)))
SELECT parentid BULK COLLECT INTO array_tab/*Parent_Tab*/ -- Plsql Type
FROM (SELECT parentid, (SELECT lvl
FROM MAINDATA md
WHERE md.parent_id = parentid
AND ROWNUM = 1) lvl
FROM (SELECT DISTINCT parent_id parentid
FROM adm_menuconfig t
START WITH menu_id IN
(SELECT menu_id
FROM MAINDATA
WHERE lvl = 1)
CONNECT BY menu_id = PRIOR parent_id)
WHERE parentid IS NOT NULL)
ORDER BY lvl;
EXCEPTION
WHEN OTHERS THEN
o_Return := 1;
END ADM_MENUSUBLEVEL_GET;
Regards
Nimsuser12265791 wrote:
i'm been using the SP without TO_NUMBER (i_userId) in my database 11g which works fine.
When the same Script is been imported to another 11g Database.. the query fetches NOTHING..... And it Works only when i had given TO_NUMBER (i_userId)........
Why is its So?........
Is this issue occur due to any installation problem, or Database creation problem.............Check the datatypes involved on the machine where it is not working. Its possible an implicit datatype conversion is taking place and is producing different results (leading spaces, for instance, in a string) than the TO_NUMBER -
How to define FORMAL parameters for TABLES in OOPS?
Hello Experts,
Below is the custom code, would like to put in a user-exit
PERFORM my_routine
IN PROGRAM my_report
TABLES standard_sap_vbap_tab
USING standard_sap_variable
CHAGING standard_sap_variable
Pls. let me know How to write the FORM in perspective of data objects defination in OOPS for the above routine.
FORM here_pl_let_me_know_how_to_define_the_data_objects
ENDFORM.
Thank you
Moderator message: please search for available information/documentation before asking.
Edited by: Thomas Zloch on Nov 10, 2010 3:40 PMThis is a very basic question. F1 help on statement form will do.
-
Subroutine parameters ..by default pass by value or pass by ref
how parameters pass ? value or ref
if we use changing in both perform and form...will it become CALL BY REF?
Message was edited by:
balaji velpuriHi,
<u><b>The Parameter Interface</b></u>
The USING and CHANGING additions in the FORM statement define the formal parameters of a subroutine. The sequence of the additions is fixed. Each addition can be followed by a list of any number of formal parameters. When you call a subroutine, you must fill all formal parameters with the values from the actual parameters. At the end of the subroutine, the formal parameters are passed back to the corresponding actual parameters.
Within a subroutine, formal parameters behave like dynamic local data. You can use them in the same way as normal local data objects that you would declare with the DATA statement. They mask global data objects with the same name. The value of the parameters at the start of the subroutine is the value passed from the corresponding actual parameter.
Subroutines can have the following formal parameters:
<u><b>Parameters Passed by Reference</b></u>
You list these parameters after USING or CHANGING without the VALUE addition:
FORM <subr> USING ... <pi> [TYPE <t>|LIKE <f>] ...
CHANGING ... <pi> [TYPE <t>|LIKE <f>] ...
The formal parameter occupies no memory of its own. During a subroutine call, only the address of the actual parameter is transferred to the formal parameter. The subroutine works with the field from the calling program. If the value of the formal parameter changes, the contents of the actual parameter in the calling program also change.
For calling by reference, USING and CHANGING are equivalent. For documentation purposes, you should use USING for input parameters which are not changed in the subroutine, and CHANGING for output parameters which are changed in the subroutine.
To avoid the value of an actual parameter being changed automatically, you must pass it by value.
<u><b>Input Parameters That Pass Values</b></u>
You list these parameters after USING with the VALUE addition:
FORM <subr> USING ... VALUE(<pi>) [TYPE <t>|LIKE <f>] ...
The formal parameter occupies its own memory space. When you call the subroutine, the value of the actual parameter is passed to the formal parameter. If the value of the formal parameter changes, this has no effect on the actual parameter.
<u><b>Output Parameters That Pass Values</b></u>
You list these parameters after CHANGING with the VALUE addition:
FORM <subr> CHANGING ... VALUE(<pi>) [TYPE <t>|LIKE <f>] ...
The formal parameter occupies its own memory space. When you call the subroutine, the value of the actual parameter is passed to the formal parameter. If the subroutine concludes successfully, that is, when the ENDFORM statement occurs, or when the subroutine is terminated through a CHECK or EXIT statement, the current value of the formal parameter is copied into the actual parameter.
If the subroutine terminates prematurely due to an error message, no value is passed. It only makes sense to terminate a subroutine through an error message in the PAI processing of a screen, that is, in a PAI module, in the AT SELECTION-SCREEN event, or after an interactive list event.
<u><b>Specifying the Type of Formal Parameters</b></u>
Formal parameters can have any valid ABAP data type. You can specify the type of a formal parameter, either generically or fully, using the TYPE or LIKE addition. If you specify a generic type, the type of the formal parameter is either partially specified or not specified at all. Any attributes that are not specified are inherited from the corresponding actual parameter when the subroutine is called. If you specify the type fully, all of the technical attributes of the formal parameter are defined with the subroutine definition.
The following remarks about specifying the types of parameters also apply to the parameters of other procedures (function modules and methods). If you have specified the type of the formal parameters, the system checks that the
corresponding actual parameters are compatible when the subroutine is called. For internal subroutines, the system checks this in the syntax check. For external subroutines, the check cannot occur until runtime. By specifying the type, you ensure that a subroutine always works with the correct data type. Generic formal parameters allow a large degree of freedom when you call subroutines, since you can pass data of any type. This restricts accordingly the options for processing data in the subroutine, since the operations must be valid for all data types. For example, assigning one data object to another may not even be possible for all data types. If you specify the types of subroutine parameters, you can perform a much wider range of operations, since only the data appropriate to those operations can be passed in the call. If you want to process structured data objects component by component in a subroutine, you must specify the type of the parameter.
Regards,
Bhaskar
Maybe you are looking for
-
Need to convert 16X9 to 4:3 letterbox for DVD
Hello Can anyone tell me the settings I need to convert 16X9 to 4:3 letterbox for DVD. I am mixing other 4:3 letterbox content. Evertime I make an mpeg with Quicktime conversion it is squeezed. I want it to be letterbox in 4:3 Thanks in advance. I am
-
Can't sync iPhone to my mac. Strange error message.
I just tried to sync my iPhone to my mac, and got the following error message: "iTunes could not sync contacts to the iPhone "MyiPhone" because the iPhone disconnected." First of all... my iPhone did not disconnect, I am looking at it under "devices"
-
Why did IMovie 9 start crashing when trying to import from camcorder
I have Imovie 8.0.6 and a Panasonic HDC-SD60 camcorder. I have been importing from this camera for a long time, with no problems but now, IMovie crashes whenever I push the import button. I checked and when nothing is connected, the internal camera c
-
Import, package, connection
Here's my problem. This a second forum, first one; no answer. I think here are all the necessary information, codes are quite long... I have 3 servlets, S1, S2, S3. and a java class Data. All these servlets, classes and build.xml are in a same folder
-
Get FWM 00001 when SessionMgr do Logon()
I was trying to open the report in CRS using OpenDocument when press the submit button. Unfortunately, an error was return [Transport error: Communication failure.(FWM 00001)] while the SessionMgr try to do Logon(). I have already checked the network