FM vs subroutines
Hello All,
What is the difference FM and subroutine. IF FM is global callable and subroutine is local to a program.
We can have include to define all the subroutines in a include and call them. correct?
What is the difference btwn FM and Subrotuine
Hi,
<b>What is the difference between the function module and a normal ABAP/4 subroutine?</b>
In contrast to normal subroutines function modules have uniquely defined interface.
Sub routines do not return values.
Sub routines do not return exceptions.
Sub routines cannot be tested independently.
Declaring data as common parts is not possible for function modules. Function modules are stored in a central library.
Apart from those:
<b>Subroutines :</b>
1. You must have the same number of actual parameters as formal parameters , parameters are assigned in the sequence in which they are listed.
2. When you call a subroutine using PERFORM, the system checks whether the types of the actual parameters in the PERFORM statement are compatible with the formal parameters.
3. The interface is defined in the FORM routine. USING and CHANGING in the PERFORM statement are purely documentary.
4. Internal tables are passed without their work area. You therefore need to declare one using a local DATA statement. Internal Tables must be passed by TYPE.
<b>Function Modules :</b>
1.Function modules are external subroutines with a transparent interface, optional parameters are allowed.
2.Are central Repository objects, and are accessible system-wide. They are present as a set of function in a function module.
3. Are developed and tested using the Function Builder
4. Can be coded to RAISE exceptions
Reward Points if this Helps.
Manish
Similar Messages
-
How to call Subroutines,Standard Text & using Internal Table in SmartForm
Hi all,
need help in the following areas.Its very urgent!
1.How to CAll Subroutines in Smart Forms
2.How to CAll Standard Text in Smart Forms
Situation:
We have an Internal Table T_SALES with all the data which am going to display in the smartform,How to retrive data from an internal table in Smart forms
Any Help in this direction would be highly appreciated.
Regards
RamuHi,
When you are using quantity or currency fields, you have to mentiong the reference fileds in a tab called CURRENCY/QUANTITY FILEDS in the GLOBAL DATA node.
Specifying a Currency or Quantity Reference
Use
In the ABAP Dictionary, you can assign a currency or quantity field to a table field. In the output of these fields, the system can then insert the relevant currency or unit:
· If the value field is in the same table as the corresponding currency or quantity field, the system recognizes the reference automatically, and formats the value field according to the currency or unit in the assigned field.
· If the value field is in a different table from the currency or quantity field, the system cannot recognize this reference automatically.
In the second case, you must indicate this reference to the system in the form, to ensure that the value field is formatted correctly.
Procedure
You want to assign a currency or quantity field in one table (for example, CURTAB) to a value field in another table (for example, VALTAB).
1. Create the reference to the currency field by entering the following values:
- Field Name: VALTAB-VALUE, if this is the value field of VALTAB that you want to display.
- Reference Field: CURTAB-CURRENCY, which is the currency field of CURTAB.
2. Under Data Type, specify whether the data type is a currency or quantity.
Result
In the output of the PDF-based print form, the system formats the value field VALTAB-VALUE according to the assigned value in the currency or quantity field of the global variable CURTAB-CURRENCY.
Thanks and Regards,
Bharat Kumar Reddy.V
Message was Added by: Bharat Reddy V
Message was Added by: Bharat Reddy V -
Structure is not getting filled in the subroutine
Hi Gurus,
I'm working on a Z-report ZMB52 for fetching Reserved Stock and showing it in a column.
The following code in a subroutine I've written for the same.
DATA: GS_RESB LIKE LINE OF GT_RESB.
CLEAR: BESTAND.
IF BESTAND[] IS NOT INITIAL.
SELECT MATNR
BDMNG
FROM RESB
INTO TABLE GT_RESB
FOR ALL ENTRIES IN BESTAND[]
WHERE MATNR EQ BESTAND-MATNR.
IF SY-SUBRC EQ 0.
SORT GT_RESB BY MATNR.
LOOP AT BESTAND.
READ TABLE GT_RESB INTO GS_RESB WITH KEY MATNR = BESTAND-MATNR. "BINARY SEARCH.
IF SY-SUBRC EQ 0.
MODIFY BESTAND TRANSPORTING BDMNG WHERE MATNR = BESTAND-MATNR.
ENDIF.
CLEAR: BESTAND, GS_RESB.
ENDLOOP.
ENDIF.
ENDIF.
When I debug, I can see that the structure GS_RESB is not getting filled through the READ TABLE statement. However, GT_RESB shows the data.
Could you please tell me where am I going wrong and a way to correct it?
Thanks in Advance!
Best Regards,
Ashutosh.Hi Joshi
You can use
LOOP AT GT_RESB INTO GS_RESB WHERE MATNR = BESTAND-MATNR. "BINARY SEARCH.
MODIFY BESTAND TRANSPORTING BDMNG WHERE MATNR = BESTAND-MATNR.
CLEAR: BESTAND, GS_RESB.
ENDLOOP.
And please check in debug BESTAND-MATNR .
Best regards. -
Here is a script I am using to export recordings made with EyeTV. My problem is when the script is triggered from EyeTV when the recording is done it works just fine. If I run the script as a stand alone app on a selected recording it gets stuck at the CheckMultiplePIDs subroutine. I put a display dialog before and after the "set logdata to every paragraph of input_text" line and only the first dialog box shows and nothing obvious is happening. I tried to take out the non-relevant code to make things a little easier to read. If you want to see all the code I can post that.
-- Run the python MarkCommercials script for the given recording
-- this must be run with the RecordingStarted script
-- it will check if there were multiple PIDs for the recording and runs MarkCommercials for each pid
-- requires updated MarkCommercials which allows specifying the pid
-- by Ben Blake, September 2009
global LogMsg
on RecordingDone(recordingID)
set LogMsg to ""
CheckMultiplePIDs(recordingID)
--display dialog "in RecordingDone" & recordingID
--disable this if you do not want a logfile written
end recordingdone
-- one more edit for plex export, only section below.
on readFile(unixPath)
set foo to (open for access (unixPath))
set txt to (read foo for (get eof foo))
close access foo
return txt
end readFile
-- testing code: this will not be called when triggered from EyeTV, but only when the script is run as a stand-alone script
on run
tell application "EyeTV"
set selectedRecordings to selection of programs window
repeat with theRecording in selectedRecordings
--display dialog "theRecording ID " & (get unique ID of theRecording as integer)
set recordingID to unique ID of theRecording as integer
my RecordingDone(recordingID)
end repeat
end tell
end run
on CheckMultiplePIDs(recordingID)
--check if there are multiple Video PIDs in the file
tell application "EyeTV"
set input_text to my read_from_file((path to "logs" as string) & "ETVComskip" & ":" & recordingID & "_comskip.log")
if (count of (input_text as string)) > 0 then
set logdata to every paragraph of input_text
set logdata_lastrow to (item ((count of logdata) - 1) of logdata) as string
if (items 1 thru 19 of logdata_lastrow) as string = "Video PID not found" then
--multiple Video PIDs, rerun MarkCommercials until successful
set recrdingIDInteger to recordingID as integer
set rec to recording id recrdingIDInteger
set LogMsg to "RecordingDone found multiple PIDs for recording ID: " & recordingID & ", Channel " & (channel number of rec) & " - " & (title of rec)
set PIDs to (items 44 thru ((count of logdata_lastrow) - 2) of logdata_lastrow) as string
set delims to AppleScript's text item delimiters
set AppleScript's text item delimiters to ", "
set PID_List to {}
set PID_List to every word of PIDs
set AppleScript's text item delimiters to delims
repeat with pid in PID_List
my launchComSkip(recordingID, pid)
repeat while (my mcIsRunning())
delay 5
end repeat
end repeat
end if
end if
end tell
end CheckMultiplePIDs
on read_from_file(target_file)
--return the contents of the given file
set fileRef to (open for access (target_file))
set txt to (read fileRef for (get eof fileRef) as «class utf8»)
close access fileRef
return txt
end read_from_file
on write_to_file(this_data, target_file, append_data)
--from <a class="jive-link-external-small" href="http://www.apple.com/applescript/sbrt/sbrt-09.html">http://www.apple.com/applescript/sbrt/sbrt-09.html</a>
try
set the target_file to the target_file as string
set the open_target_file to open for access file target_file with write permission
if append_data is false then set eof of the open_target_file to 0
write this_data to the open_target_file starting at eof
close access the open_target_file
return true
on error
try
close access file target_file
end try
return false
end try
end write_to_file
on launchComSkip(recID, pid)
if pid = "" then
set cmd to "'/Library/Application Support/ETVComskip/MarkCommercials.app/Contents/MacOS/MarkCommercials' --force --log " & recID & " &> /dev/null &"
else
set cmd to "'/Library/Application Support/ETVComskip/MarkCommercials.app/Contents/MacOS/MarkCommercials' --force --log " & recID & " --pid=" & pid & " &> /dev/null &"
end if
do shell script cmd
end launchComSkip
on mcIsRunning()
set processPaths to do shell script "ps -xww | awk -F/ 'NF >2' | awk -F/ '{print $NF}' | awk -F '-' '{print $1}' "
return (processPaths contains "MarkCommercials")
end mcIsRunning
--Subroutine to remove troublesome characters
to parseout(stringtoparse)
set illegals to (ASCII character of 60) & (ASCII character of 62) & (ASCII character of 58) & (ASCII character of 34) & (ASCII character of 47) & (ASCII character of 92) & (ASCII character of 124)
repeat with i from 1 to count (illegals)
set testletter to (text i thru i of illegals)
set the_offset to 1
repeat
set the_offset to offset of testletter in stringtoparse
if the_offset > 0 then
set stringtoparse to (text 1 thru (the_offset - 1) of stringtoparse) & "_" & (text (the_offset + 1) thru -1 of stringtoparse)
else
exit repeat
end if
end repeat
end repeat
return stringtoparse
end parseoutWhile this isn't a solution, you could write lots of output to a log file. You should eventually see where it is stalling out. I use textwrangle to look at the log file while it is running.
the code escape is. Notice the tag is the same for start & end:
your code here
Here is my log program.
Write debug text to the file /debugLog.txt
example
--- debug on Friday, February 11, 2011 2:23:20 PM ---
start program.
thePath = Macintosh-HD:
End of program.
fyi:
The applescript log statements are ignored when not run from the script editor.
on run
-- thePath points to the folder in which to create the debug log.
global thePath, firstRunning
(* Use the path to clause to create a generalized path statements *)
set thePath to (path to startup disk as string)
set firstRunning to ""
-- Write a message into the applescript editor event log.
log " --- Starting on " & ((current date) as string) & " --- "
debug("start program. ")
Your program here...
debug("thePath = " & thePath)
debug("End of program. ")
end run
on appendToFile(fileId, theData)
local theSize, writeWhere
set theSize to (get eof fileId)
set writeWhere to theSize + 1 as integer
write theData to fileId starting at writeWhere
end appendToFile
-- based on log by James Reynolds, 12.18.2000, University of Utah
on debug(theMessage)
global thePath, firstRunning
local theSize, startupDiskName, pathToLog, fileReference
set pathToLog to (thePath & "debugLog.txt")
try
set fileReference to (open for access file pathToLog ¬
with write permission)
log "firstRunning = " & firstRunning
set theSize to (get eof fileReference)
if firstRunning = "" then
set theSize to (get eof fileReference)
log "theSize = " & theSize
if theSize is equal to 0 then
appendToFile(fileReference, "New log created on " & ((current date) as string) & " " & return)
end if
appendToFile(fileReference, " --- debug on " & ((current date) as string) & " --- " & return)
set firstRunning to "running"
end if
appendToFile(fileReference, theMessage & return)
close access fileReference
tell application "Finder"
set the creator type of the file pathToLog ¬
to "R*ch"
end tell
on error mes
try
log " We got an error when writing to " & mes
close access fileReference
end try
end try
end debug
Robert -
Error while sending data to a subroutine in script
Hi,
While passing a currency field for calculation to a subroutine through perform statement iam getting runtime error saying "unable ti interpret 5000.00 as a number. 5000.00 is nothing but the first currency value which iam sending for calculation.in the code the error is raised on the bold line .
rf140-wrshb has value 5000.00 .the code which i have written in subroutine is as follows.
READ TABLE I_IN WITH KEY NAME = 'RF140-WRSHB'.
MOVE I_IN-VALUE TO LV_SUM1.
CLEAR I_IN.
DATA: SUM_C TYPE N.
SUM1 = SUM1 + LV_SUM1.
READ TABLE I_OUT WITH KEY NAME = 'LV_BALANCE'.
MOVE SUM1 TO I_OUT-VALUE.
MODIFY I_OUT TRANSPORTING VALUE WHERE NAME = 'LV_BALANCE'.
CLEAR I_OUT.
lv_balance is the one which receives the output value.
can anyone tell me what is the mistake i have done nd how to rectify it.
Thanks,
Rose.Hi,
I have done something similar so below is the code while passing currency fields to subroutines:
Actually I was retrieving 2 fields from scripts and then substract them and then send back the result to the script. Hope it works out for you, try it out and REWARD POINTS IF HELPFUL!! (also for your prev post!!)
FORM get_pay TABLES in_tab STRUCTURE itcsy out_tab STRUCTURE itcsy.
DATA: lv_var(255) TYPE c, "dmbtr,
lv_var1(255) TYPE c, "qsshb,
lv_var2(255) TYPE c, "dmbtr.
var(20) TYPE c,
var1(25) TYPE c,
var2(25) TYPE c,
var3(25) TYPE c,
var4(25) TYPE c,
var5(25) TYPE c,
var6(25) TYPE c,
vari TYPE ztemp,
vari2 TYPE ztemp,
vari3 TYPE ztemp.
DATA: lv_var4 TYPE dmbtr,
lv_var5 TYPE qsshb,
lv_var6 TYPE dmbtr,
len TYPE i,
len1 TYPE i,
dot TYPE c.
READ TABLE in_tab WITH KEY 'REGUP-DMBTR'.
IF sy-subrc EQ 0.
lv_var = in_tab-value.
len = STRLEN( lv_var ).
len1 = len - 3.
dot = lv_var+len1(1).
IF dot = ','.
SPLIT lv_var AT ',' INTO var1 var2.
REPLACE '.' IN var1 WITH ','.
CONCATENATE '.' var2 INTO var2.
CONCATENATE var1 var2 INTO var.
CONDENSE var.
vari = var1.
SHIFT vari LEFT DELETING LEADING '0'.
CONCATENATE vari var2 INTO vari.
lv_var4 = vari.
ELSE.
SPLIT lv_var AT '.' INTO var1 var2.
REPLACE '.' IN var1 WITH ','.
CONCATENATE '.' var2 INTO var2.
CONCATENATE var1 var2 INTO var.
CONDENSE var.
vari = var1.
SHIFT vari LEFT DELETING LEADING '0'.
CONCATENATE vari var2 INTO vari.
lv_var4 = vari.
ENDIF.
CLEAR: dot, len, len1.
ENDIF.
lv_var = vari.
CALL FUNCTION 'CHAR_NUMC_CONVERSION'
EXPORTING
input = lv_var
IMPORTING
numcstr = lv_var4.
READ TABLE in_tab WITH KEY 'REGUP-QBSHB'.
IF sy-subrc EQ 0.
lv_var1 = in_tab-value.
len = STRLEN( lv_var1 ).
len1 = len - 3.
dot = lv_var1+len1(1).
IF dot = ','.
SPLIT lv_var1 AT ',' INTO var3 var4.
REPLACE '.' IN var3 WITH ','.
CONCATENATE '.' var4 INTO var4.
CONDENSE var.
vari2 = var3.
SHIFT vari2 LEFT DELETING LEADING '0'.
CONCATENATE vari2 var4 INTO vari2.
lv_var6 = vari2.
ELSE.
SPLIT lv_var1 AT '.' INTO var3 var4.
REPLACE '.' IN var3 WITH ','.
CONCATENATE '.' var4 INTO var4.
CONDENSE var.
vari2 = var3.
SHIFT vari2 LEFT DELETING LEADING '0'.
CONCATENATE vari2 var4 INTO vari2.
lv_var6 = vari2.
ENDIF.
CLEAR: dot, len, len1.
ENDIF.
lv_var1 = vari2.
CALL FUNCTION 'CHAR_NUMC_CONVERSION'
EXPORTING
input = lv_var1
IMPORTING
numcstr = lv_var6.
lv_var5 = lv_var4 - lv_var6.
lv_var2 = lv_var5.
var = lv_var5.
WRITE lv_var5 TO var CURRENCY 'SG'.
READ TABLE out_tab WITH KEY 'LV_PAY'.
IF sy-subrc EQ 0.
out_tab-value = var.
MODIFY out_tab INDEX 1.
ENDIF.
ENDFORM. "get_PAY
Regards,
Narendra. -
Error in subroutine READ_NAMTB
Hi,
While posting an idoc through the test tool WE19, we are encountering an error 'Error in subroutine READ_NAMTB for structure of infotype'. We are using the extended idoc type ZRMD_A06 with a custom segment containing the PERNR and some other details.
Are we missing out on something?Please advise!
Thanks in advance!
Regards,
Nejuma IqbalHello Neujuma Iqbal
Have you already found a solution to this problem?
If yes, could you please tell me?
thanks + regards
Paul Züllig
mail: [email protected] -
How to use SUBROUTINE in ' PROGRAMMING LINES'code of a smartform
Hi all,
i used a subroutine (PERFORM statement ) in 'Programming Line' node of a smartform .
Then i put the 'FORM ENDFORM ' in 'SUBROUTINES' node of GLOBAL data.
In Programming line i used
PERFORM READ_TEXT using p_id p_lan p_obj.
In SUBROUTINE node of GLOBAL data, i used
FORM READ_TEXT using p_id p_lan p_obj.
ENDFORM.
While executing, my control is going to FORM ENDFORM & i can see the data in the
table T_TDLINE while my control is inside the FORM ENDFORM.
When it comes back to my Programming NODE, there is no data in T_TDLINE table.
can anyone tell me how & where to define this table T_TDLINE so that i can get the data
in in my coding lines after PERFORM statement.
ur Idea is highly appreciated. correct answers will be rewarded.
Thanks
pabitra1. Define a table in the Global Definiation > GLOBAL data:
T_TDLINE TYPE TTTEXT.
2. PERFORM READ_TEXT tables T_TDLINE using p_id p_lan p_obj.
3. FORM READ_TEXT table IT_TDLINE type TTTEXT
using p_id p_lan p_obj.
ENDFORM.
Now, you will be able access your data in T_TDLINE.
Regards,
Naimesh Patel -
Problem with subroutine- need urgrnt help
hai all,
need help in subroutine.
in a report program,
i had calculated to get the total collection amount and need to generate a list for every day.
on next day that collection amount must come as a poeninig balance at the top of the list.
this i had done using two subroutines.
i have to call the subroutine for opening balance for previous day's collection first. after that in have to calculate the todays collection.
how can i have this please give me a suggession.
thanks in advance.
this is my report.
i want the 'Progressive Total C/O ' from subroutine form f002_item_data. of today to be come in
'Progressive Total B/F -
' ,106 w_total_bf. of the subroutine form f001_progressive_total on next day..
here is the code.....
*& Report ZVR023_COLL_STATEMENT *
report zvr023_coll_statement no standard page heading .
MODULE. MSD *
Objective : *
Program : Updates Tables ( ) Downloads data ( ) *
Outputs List ( X ) *
Date Created *
Author *
Location *
LDB ..... *
External Dependencies *
Amendment History *
Who Change ID Reason *
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ *
XXXXXXXXX AADDMMYYYY Where XXXX = Developers Name................. *
AA- Developers Initial ................................ *
Includes *
*INCLUDE : *
Tables *
tables : vbak,bsid,kna1,t001,adrc,vbrk,knvv.
Types Begin with TY_ *
types : begin of ty_cust,
belnr type bseg-belnr,
wrbtr type bseg-wrbtr,
xref1 type bseg-xref1,
kunnr type kna1-kunnr, " sarang
bschl type bseg-bschl,
hkont type bseg-hkont,
end of ty_cust.
types : begin of ty_bp,
kunnr type vbak-kunnr,
bukrs type bseg-bukrs,
budat type bkpf-budat,
end of ty_bp.
types : begin of ty_kna1,
kunnr type kna1-kunnr,
name1 type kna1-name1,
ort01 type kna1-ort01,
end of ty_kna1.
types : begin of ty_lst,
vbeln type vbrk-vbeln, " INVOICE NO
fkart type vbrk-fkart,
posnr type vbrp-posnr ,
fkimg type vbrp-fkimg , " qty
fkdat type vbrk-fkdat, " date
vkorg type vbrk-vkorg, " sales org
vtweg type vbrk-vtweg, " division
spart type vbrk-spart, " distribution
knumv type vbrk-knumv, " Number of the document condition
matnr type vbrp-matnr ,
med_prod type jptmg0-med_prod,
kunrg type vbrk-kunrg,
kwert type konv-kwert,
kbetr type konv-kbetr,
netwr type vbrk-netwr,
Address Details
KUNRG type vbrk-KUNRG,
name1 type kna1-name1,
stras type kna1-stras,
pstlz type kna1-pstlz,
***Added For Billing
bukrs type vbrk-bukrs, " Company code
xblnr type vbrk-xblnr, " Bill Ref
ismpublication type mara-ismpublication,
Condition Type
kschl_zj01 type konv-kschl,
kschl_zdis type konv-kschl,
kschl_znet type konv-kschl,
kwert_zj01 type konv-kawrt, " Base Condition
kwert_zdis type konv-kawrt,
kwert_znet type konv-kawrt,
adrnr type kna1-adrnr,
end of ty_lst.
types : begin of ty_lst1,
vbeln type vbrk-vbeln, " INVOICE NO
fkart type vbrk-fkart,
fkdat type vbrk-fkdat, " date
fkimg type vbrp-fkimg, " qty
kunrg type vbrk-kunrg, " Payer
fkimg_1 type vbrp-fkimg, " qty
fkimg_2 type vbrp-fkimg, " qty
fkimg_3 type vbrp-fkimg, " qty
fkimg_4 type vbrp-fkimg, " qty
fkimg_5 type vbrp-fkimg, " qty
matnr type vbrp-matnr,
med_prod type jptmg0-med_prod,
kwert type konv-kwert,
kbetr type konv-kbetr,
netwr type vbrk-netwr,
Address Details
KUNRG type vbrk-KUNRG,
name1 type kna1-name1,
stras type kna1-stras,
pstlz type kna1-pstlz,
***Added For Billing
bukrs type vbrk-bukrs ,
xblnr type vbrk-xblnr,
ismpublication type mara-ismpublication,
****SPLIT FOR RATE
kbetr_1 type konv-kbetr,
kbetr_2 type konv-kbetr,
kbetr_3 type konv-kbetr,
Condition Type
kschl_zj01 type konv-kschl,
kschl_zdis type konv-kschl,
kschl_znet type konv-kschl,
kwert_zj01 type konv-kawrt, " Base Condition
kwert_zdis type konv-kawrt,
kwert_znet type konv-kawrt,
end of ty_lst1.
types : begin of ty_condition,
kschl type konv-kschl, " Condition Type
kwert type konv-kwert, " Condition Value
knumv type konv-knumv, " Document Condi
kposn type konv-kposn,
kbetr type konv-kbetr, " Condition Rate
end of ty_condition.
types : begin of ty_bkpf ,
belnr type bkpf-belnr,
gjahr type bkpf-gjahr,
bukrs type bkpf-bukrs,
end of ty_bkpf.
Constants Begin with C_ *
*CONSTANTS: *
Data Begin with W_ *
data : w_cnt type i .
*DATA : W_DMBTR TYPE BSID-DMBTR. " Open Value
*DATA : W_KWERT TYPE VBRP-FKIMG. " Invoice Value
*DATA : W_QTY_CON TYPE VBRP-FKIMG. " QTY
*DATA : W_TO_QTY_CON TYPE VBRP-FKIMG. " QTY
*DATA : W_DIFF TYPE BSID-DMBTR. " W_DIFF Bt Open & Invoice
*DATA : W_DMBTR_CR TYPE BSID-DMBTR. " Cr Value
*DATA : W_DMBTR_DR TYPE BSID-DMBTR. " Dr Value
*DATA : W_DMBTR_TO TYPE BSID-DMBTR. " Total Value
*DATA : W_KDGRP(2) .
*DATA : W_CNT_IS TYPE I.
*DATA : W_CNT_IS1 TYPE I.
*DATA : W_CNT_IS2 TYPE I.
*DATA : W_CNT_FIRST TYPE I.
*DATA : W_CNT_ITAB TYPE I.
*DATA : W_CNT_FIRST1(2).
*DATA : W_CNT_TAB(62),
W_CNT_TAB_HEA(62),
*data: W_CNT_POS TYPE I.
Variable for balance window
data : w_open_bal type dmshb_x8,
w_total_bf type dmshb_x8,
w_sub_tot type dmshb_x8,
w_total_co type dmshb_x8,
w_bill_bal type dmshb_x8,
w_drn_bal type dmshb_x8,
w_othr_chr type dmshb_x8,
w_total_bal type dmshb_x8,
w_coll_bal type dmshb_x8,
w_unsd_cr type dmshb_x8, "Unsold Credit
w_inceve type dmshb_x8, "Incentive
w_cr_nt type dmshb_x8. "Cr Note
data : w_pos type bseg-wrbtr. " Total Value
data : w_neg type bseg-wrbtr. " Total Value
data : w_du_start_date like sy-datum,
w_du_end_date like sy-datum .
**vARIABLE DEFINED FOR CONSOLIDATED WINDOW
data : w_prod_cnt type i .
data : w_prod_ch(2) .
data : w_prod_rate type i .
Infotypes ( HR Module Specific) *
*INFOTYPES : *
Internal tables Begin with IT_ *
data : it_bp type table of ty_bp with header line,
it_bp1 type table of ty_bp with header line,
it_bp2 type table of ty_bp with header line,
it_bp3 type table of ty_bp with header line,
it_kna1 type table of ty_kna1 with header line,
it_cust type table of ty_cust with header line,
it_cust1 type table of ty_cust with header line,
it_bkpf type table of ty_bkpf with header line,
it_cust2 type table of ty_cust with header line,
it_cust3 type table of ty_cust with header line.
data : it_pos like rfposxext occurs 1 with header line,
it_check like rfposxext occurs 1 with header line,
it_pos_bc1 like rfposxext occurs 1 with header line,
it_pos_bc like rfposxext occurs 1 with header line,
it_pos_nc like rfposxext occurs 1 with header line,
it_pos1 like rfposxext occurs 1 with header line,
it_sec like rfposxext occurs 1 with header line.
data : it_bal like rfposxext occurs 1 with header line.
data : w_text(100) type c.
data : w_cnt1(3).
data : l_date like mara-ismpublperiod .
data : p_date1 like jkpaz-jkpavon.
data : l_day_c(2).
data : l_month_c(2).
data : l_base_yr_c(4).
data : w_text1(100) type c.
data : w_text2(100) type c.
Field Symbols Begin with FS_ *
*FIELD-SYMBOLS: *
field-symbols: type ty_condition.
Insert *
*INSERT : *
Select Options Begin with SO_ *
selection-screen skip 1.
selection-screen: begin of block b1 with frame title text-001.
select-options : so_bukrs for vbrk-bukrs no intervals no-extension obligatory .
select-options : so_kunrg for vbrk-vkorg no intervals no-extension obligatory,
so_vkbur for knvv-vkbur no intervals no-extension ,
so_fkdat for bsid-budat no-extension obligatory ,
so_bdat1 for bsid-budat no-display ,
so_bdat3 for bsid-budat no-display ,
so_kunnr for kna1-kunnr no-display.
selection-screen: end of block b1.
Parameters Begin with PR_ *
*PARAMETERS : *
selection-screen begin of block b3 with frame title text-003.
parameters pr_3 radiobutton group rad1.
parameters pr_4 radiobutton group rad1.
selection-screen end of block b3.
selection-screen begin of block b2 with frame title text-002.
parameters pr_1 radiobutton group rad.
parameters pr_2 radiobutton group rad.
selection-screen end of block b2.
*INITIALISATION :
At selection-screen *
*AT SELECTION-SCREEN.
S T A R T O F S E L E C T I O N *
start-of-selection.
if pr_3 is not initial.
Code commented/added by Praveen on 20.07.2006
SELECT kunnr INTO CORRESPONDING FIELDS OF TABLE it_bp1 FROM knvv
WHERE vkorg IN so_kunrg
AND kunnr GE '0004000000'
AND kunnr LE '0004999999'.
select kunnr into corresponding fields of table it_bp1 from knvv
where vkorg in so_kunrg
and aufsd <> '01'
and kunnr ge '0004000000'
and kunnr le '0004999999' .
and
PLTYP ne 'HB'.
*ends here
endif.
if pr_4 is not initial.
clear so_kunnr[].
clear so_kunnr.
so_kunnr-sign = 'I'.
so_kunnr-option = 'BT'.
so_kunnr-low = '0001000000'.
so_kunnr-high = '0001999999'.
append so_kunnr.
so_kunnr-sign = 'I'.
so_kunnr-option = 'BT'.
so_kunnr-low = '0002000000'.
so_kunnr-high = '0002999999'.
append so_kunnr.
so_kunnr-sign = 'I'.
so_kunnr-option = 'BT'.
so_kunnr-low = '0007000000'.
so_kunnr-high = '0007999999'.
append so_kunnr.
Code commented/added by Praveen on 20.07.2006
select kunnr into corresponding fields of table it_bp1 from knvv
where vkorg in so_kunrg and
kunnr in so_kunnr and
vkbur in so_vkbur.
AND kunnr GE '0001000000'
AND kunnr LE '0001999999' .
select kunnr into corresponding fields of table it_bp1 from knvv
where vkorg in so_kunrg and
aufsd <> '01' and
kunnr in so_kunnr and
vkbur in so_vkbur.
AND kunnr GE '0001000000'
AND kunnr LE '0001999999' .
ends here
endif.
if pr_1 = 'X'.
perform cust_prog.
perform cust_line.
perform f001_progressive_total.
perform f002_item_data.
elseif pr_2 = 'X'.
perform cust_line.
perform f002_item_data.
endif.
*& Form cust_prog
text
form cust_prog.
clear it_bp3[].
p_date1 = so_fkdat-low.
call function 'Z_VF053_DATE_GET_YEAR_MONTH'
exporting
i_date = p_date1
importing
e_dd = l_day_c
e_month = l_month_c
e_year = l_base_yr_c.
ranges so_bdat2 for bsid-budat.
clear : so_bdat3[].
if l_day_c > 01.
l_day_c = '01'.
concatenate l_base_yr_c l_month_c l_day_c into l_date.
so_bdat2-low = l_date.
so_bdat2-high = so_fkdat-low - 1.
else.
so_bdat2-low = '00000000'.
so_bdat2-high = '00000000'.
endif.
so_bdat2-sign = 'I'.
so_bdat2-option = 'BT'.
append so_bdat2 to so_bdat3.
select kunnr bukrs budat into corresponding fields of table it_bp3 from bsid
for all entries in it_bp1
where bukrs in so_bukrs
and kunnr = it_bp1-kunnr
and budat in so_bdat3.
select kunnr bukrs budat
appending corresponding fields of table it_bp3
from bsad
for all entries in it_bp1
where bukrs in so_bukrs
and kunnr = it_bp1-kunnr
and budat in so_bdat3.
sort it_bp3 by kunnr .
delete adjacent duplicates from it_bp3 comparing kunnr.
sort it_bp3 by kunnr .
clear w_total_bf.
endform. "cust_prog
*& Form cust_line
text
form cust_line.
clear it_bp[].
select kunnr bukrs budat
into corresponding fields of table it_bp
from bsid
for all entries in it_bp1
where bukrs in so_bukrs
and kunnr = it_bp1-kunnr
and budat in so_fkdat.
select kunnr bukrs budat
appending corresponding fields of table it_bp
from bsad
for all entries in it_bp1
where bukrs in so_bukrs
and kunnr = it_bp1-kunnr
And budat in so_fkdat.
sort it_bp by kunnr .
delete adjacent duplicates from it_bp comparing kunnr.
sort it_bp by kunnr .
endform. "cust_line
*& Form f001_progressive_total
text
form f001_progressive_total.
if not it_bp3[] is initial.
clear : w_text ,w_cnt,p_date1,l_base_yr_c, l_month_c,l_day_c,l_date.
w_cnt1 = sy-tabix .
CONCATENATE w_cnt1 ' Feaching Data ' INTO w_text.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
text = w_text.
ranges so_bdat2 for bsid-bldat.
clear : so_bdat1[].
p_date1 = so_fkdat-low.
call function 'Z_VF053_DATE_GET_YEAR_MONTH'
exporting
i_date = p_date1
importing
e_dd = l_day_c
e_month = l_month_c
e_year = l_base_yr_c.
if l_day_c > 01.
l_day_c = '01'.
concatenate l_base_yr_c l_month_c l_day_c into l_date.
so_bdat2-low = l_date.
so_bdat2-high = so_fkdat-low - 1.
else.
l_day_c = so_fkdat-low.
so_bdat2-low = l_date.
so_bdat2-high = '00000000'.
endif.
so_bdat2-sign = 'I'.
so_bdat2-option = 'BT'.
append so_bdat2 to so_bdat1.
export so_bdat1 to memory id 'DATE1'.
export it_bp3 to memory id 'IT_BP3'.
clear : so_bdat1, it_bp3.
submit z_rfitemar1
with x_aisel = 'X'
with x_norm = 'X'
with dd_bukrs-low = so_bukrs-low "#EC *
and return.
clear : it_pos[], it_pos .
import it_pos from memory id 'zit_pos'.
free memory id 'zit_pos'.
delete it_pos where blart <> 'DZ'.
Here Plz Clear all the varible to avoid overlap
clear : w_open_bal,w_du_start_date,w_du_end_date.
select belnr bukrs gjahr into corresponding fields of table it_bkpf
from bkpf for all entries in it_pos where belnr = it_pos-belnr and gjahr = it_pos-gjahr
and bukrs = it_pos-bukrs and xreversal = ' '.
endif.
loop at it_pos.
clear it_bkpf.
read table it_bkpf with key bukrs = it_pos-bukrs belnr = it_pos-belnr gjahr = it_pos-gjahr.
if sy-subrc eq 0.
append it_pos to it_check.
endif.
endloop.
it_pos[] = it_check[].
***opening bal
since runtime error is coming while summing the alternate way is being used ... done by jayakumar on 11 10 06
LOOP AT it_pos .
SUM .
w_open_bal = it_pos-dmshb .
EXIT .
ENDLOOP .
loop at it_pos .
read table it_cust3 with key belnr = it_pos-belnr.
it_pos-dmshb = it_cust3-wrbtr.
w_open_bal = w_open_bal + it_pos-dmshb .
endloop .
if w_open_bal < 0 .
w_open_bal = w_open_bal * -1.
endif.
w_total_bf = w_total_bf + w_open_bal.
endif.
write :20 'Progressive Total B/F -
' ,106 w_total_bf.
skip 1 .
endform. "f001_progressive_total
*& Form f002_item_data
text
form f002_item_data.
if not it_bp[] is initial.
select * into corresponding fields of table it_kna1 from kna1
for all entries in it_bp
where kunnr = it_bp-kunnr .
export so_fkdat to memory id 'DATE'.
export it_bp to memory id 'IT_BP'.
clear : so_fkdat, it_bp.
submit z_rfitemar1
with x_aisel = 'X'
with x_norm = 'X'
with dd_bukrs-low = so_bukrs-low "#EC *
and return.
DELETE it_pos WHERE u_xreversal <> ' '.
clear : it_pos[], it_pos .
import it_pos from memory id 'zit_pos'.
free memory id 'zit_pos'.
delete it_pos where blart <> 'DZ'.
sort it_pos by belnr.
APPEND LINES OF it_pos TO it_pos1.
DELETE ADJACENT DUPLICATES FROM it_pos COMPARING belnr." commented by sarang
clear : it_cust[], it_cust.
if not it_pos[] is initial.
select belnr wrbtr xref1 kunnr bschl
into corresponding fields of table it_cust
from bseg
for all entries in it_pos
where belnr = it_pos-belnr
and bukrs = it_pos-bukrs
and gjahr = it_pos-gjahr
and bschl in ('15','40') .
it_cust2[] = it_cust[].
delete it_cust where bschl ne 15.
delete it_cust2 where bschl ne 40.
sort it_pos by konto.
else.
write : 20 '**No Transaction to Display**'.
endif.
DELETE it_pos WHERE u_xreversal = 'X'.
tables bkpf.
loop at it_pos.
select single * from bkpf where belnr = it_pos-belnr and bukrs = it_pos-bukrs and gjahr = it_pos-gjahr and xreversal = ' '.
if sy-subrc = 0.
append it_pos to it_pos_bc1.
endif.
endloop.
clear it_pos.
it_pos[] = it_pos_bc1[].
sort it_pos by konto belnr xref3.
loop at it_pos.
read table it_cust2 with key belnr = it_pos-belnr.
on change of it_pos-konto or "IT_CUST2-xref1 or
it_pos-belnr.
it_pos_bc[] = it_pos[].
delete it_pos_bc[] where konto ne it_pos-konto.
delete it_pos_bc[] where belnr ne it_pos-belnr.
loop at it_pos_bc.
sum.
exit.
endloop.
append it_pos_bc to it_pos_nc.
endon.
endloop.
free it_pos.
it_pos[] = it_pos_nc[].
data : w_amt1 type bseg-dmbtr,
w_amt2 type bseg-dmbtr.
clear : w_amt1 , w_amt2.
sort it_pos by budat belnr konto.
data : w_ch(5) type c,
w_i type i.
w_i = 0.
loop at it_pos where shkzg = 'H' .
clear w_text.
w_i = w_i + 1 .
w_ch = w_i.
read table it_cust with key belnr = it_pos-belnr kunnr = it_pos-konto.
read table it_kna1 with key kunnr = it_pos-konto .
CONCATENATE it_kna1-name1 INTO w_text.
w_text = it_kna1-name1.
CONDENSE w_text NO-GAPS.
write : / w_ch left-justified , 07 it_pos-budat ,20 it_pos-belnr(10) ,31 it_pos-konto(10),42 w_text(60).
read table it_cust2 with key belnr = it_pos-belnr.
if it_cust2-xref1 = 'Cash Payment' or it_cust2-xref1 = 'Cash'.
if it_pos-dmshb < 0 .
it_pos-dmshb = it_pos-dmshb * -1 .
it_pos-dmshb = it_cust2-wrbtr.
else. "+PM28072006
it_pos-dmshb = it_pos-dmshb * -1 . "+PM28072006
it_pos-dmshb = it_cust2-wrbtr.
endif.
write : 72 it_pos-dmshb.
w_amt1 = w_amt1 + it_pos-dmshb.
else.
if it_pos-dmshb < 0 .
it_pos-dmshb = it_pos-dmshb * -1 .
it_pos-dmshb = it_cust2-wrbtr.
else. "+PM28072006
it_pos-dmshb = it_pos-dmshb * -1."+PM28072006
it_pos-dmshb = it_cust2-wrbtr.
endif.
write : 87 it_pos-dmshb.
w_amt2 = w_amt2 + it_pos-dmshb.
endif .
endloop .
else.
write : 20 '**No Transaction to Display**'.
endif.
clear : it_cust1[] ,w_pos .
it_cust1[] = it_cust[] .
sort it_cust1 by wrbtr.
delete it_cust1 where xref1 <> 'Cash Payment' .
delete it_cust1 where xref1 <> 'Cash' .
loop at it_cust1.
sum .
w_pos = it_cust1-wrbtr .
exit .
endloop .
clear :it_cust1[],w_neg .
it_cust1[] = it_cust[] .
sort it_cust1 by wrbtr.
delete it_cust1 where xref1 = 'Cash Payment' .
delete it_cust1 where xref1 = 'Cash' .
loop at it_cust1.
sum .
w_neg = it_cust1-wrbtr .
exit .
endloop .
if w_pos < 0.
w_pos = w_pos * -1 .
else. "+PM28072006
w_pos = w_pos * -1. "+PM28072006
endif.
if w_neg < 0.
w_neg = w_neg * -1 .
else. "+PM28072006
w_neg = w_neg * -1. "+PM28072006
endif.
write sy-uline(125) .
write : /20 'Total Collection Amount -
>'.
write : 76 w_amt1 ,91 w_amt2.
w_sub_tot = w_amt1 + w_amt2.
if w_sub_tot < 0.
w_sub_tot = w_sub_tot * -1.
endif.
write : 106 w_sub_tot.
if pr_1 = 'X'.
w_total_co = w_total_bf + w_sub_tot.
if w_total_co < 0.
w_total_co = w_total_co * -1.
endif.
write : /20 'Progressive Total C/O -
>'.
write : 106 w_total_co.
endif.
write sy-uline(125) .
endform. "f002_item_data
ENDIF .
*END-OF-SELECTION.
E N D O F S E L E C T I O N *
At line selection *
*AT LINE-SELECTION.
User Command Processing *
*AT USER-COMMAND.
Top Of Page *
top-of-page.
select single * from t001 where bukrs = so_bukrs-low .
select single * from adrc where addrnumber = t001-adrnr . "EC *
write : /05 t001-butxt.
CONCATENATE adrc-house_num1 '-' adrc-street INTO w_text1.
CONCATENATE adrc-city1 '-' adrc-post_code1 INTO w_text2.
WRITE : /05 w_text1 .
WRITE : /05 w_text2 .
write : /05 'Sales Organisation:', so_kunrg-low.
write : /05 'Sales Office:', so_vkbur-low.
skip 1.
if pr_3 = 'X'.
write : /05 'Agent Circulation Collection Statement From ' , so_fkdat-low , ' to ' ,so_fkdat-high .
else.
write : /05 'Advertisement Collection Statement From ' , so_fkdat-low , ' to ' ,so_fkdat-high .
endif.
if pr_3 = 'X'.
write :/ sy-uline(125) .
write :/07 'Date' ,20 'Doc No',31 'Code' ,42 'Agent Name & Place',84 'BY CASH' ,97 'BY CHQ/DD' ,115 'Prog. Total'.
write :/ sy-uline(125) .
else.
write :/ sy-uline(125) .
write :/07 'Date' ,20 'Doc No',31 'Code' ,42 'Advertisers Name' , 84 'BY CASH' ,97 'BY CHQ/DD' ,115 'Prog. Total'.
write :/ sy-uline(125) .
endif .
End Of Page *
END-OF-PAGE.END-OF-PAGE.Hello Selvi
There is no need to use two subroutine. Actually, this would be bad programming. Instead use a switch for your subroutine which determines whether the calculation should be done for the actual and the previous day, e.g.:
PERFORM do_calculation
USING 'X' " 'X' = calculate for previous day as well
USING p_date " current date
CHANGING gt_list. " itab with list data
And that's how the subroutine could look like:
FORM do_calculation
USING VALUE(ud_calculate_previous_day) TYPE c
VALUE(ud_date) TYPE d
CHANGING ct_list TYPE <table type>.
* define local data
DATA:
ld_date_prev TYPE d,
lt_list_prev TYPE <table type>. " list for previous day
* Do the calculations for the current day
IF ( ud_calculate_previous_day = 'X' ).
ld_date_prev = ud_date - 1.
PERFORM do_calculation
USING ' ' " ' ' = no calculation for previous day
ld_date_prev
CHANGING lt_list_prev. " itab with list data
ENDIF.
* Post-processing after calculation for both days
ENDFORM.
Regards
Uwe -
Deleting standard Function, subroutine, ....
Hi experts,
Can I delete standard Function, subroutine, .... of SAP ECC 6 !? If can, what authorization do I have to ?
In case, I created some function group,function, ... at report painter, or copy from standard program, function, ... and then delete them. At that case, it effect to standard or not !? Thanks a lot for all !!!when you are making a copy of a standard program and deleting the new program created by you, it will not affect the standard program.
But pls do not delete any SAP Defined programs -
Problem with accesing table field in subroutine
Hello All,
I am calling a subroutine multiple times and everytine passing 2 different tables (with different structures) int he subroutine.
PERFORM fill_itabs TABLES t_adnat_bus_in
gt_adnat_bus_in_dummy
USING p_filename..
PERFORM fill_itabs TABLES t_adcust_ban_in
gt_adcust_ban_in_dummy
USING p_filename.
The following is the subroutine definition.
FORM fill_itabs TABLES p_t_table
p_t_table_dummy
USING p_filename .
p_t_table_dummy[] = p_t_table[].
SORT p_t_table_dummy BY cust_id.
ENDFORM.
I am getting a syntax error which states -
<u><b>"The specified type has no structure and therefore no component called "cust_id"."</b></u>
The problem is the structure of the table passed to subroutine is different in the
different times when it is called and so in subroutine defintion I cannot mention an explicit structure for the table.
Could anyone please suggest how to avoid this?
Regards,
Indrajit.Hi Indrajit,
you can add one more formal parameter to the subroutine, which will act as a flag.
while calling the subroutine, you can set the flag if cust_id field is there in the structure of the table, else dont set the flag.
And in the the subroutine, put check on the flag status before writing
p_t_table_dummy[] = p_t_table[].
SORT p_t_table_dummy BY cust_id.
Ex:
FORM fill_itabs TABLES p_t_table
p_t_table_dummy
USING p_filename
p_flag.
if p_flag eq 'X'.
p_t_table_dummy[] = p_t_table[].
SORT p_t_table_dummy BY cust_id.
endif.
ENDFORM. -
How to call subroutines defined in ABAP program with type S
how to call subroutines defined in ABAP program with type S? can you give an example?
Normal executable program,
REPORT ZTEST_MAIN.
perform sub1 in program ztest_sub.
"you can call using in program addition
Subroutine pool program
PROGRAM ZTEST_SUB.
form sub1.
endform. -
Bonjour,
Je cherche à créer un installer portatif utilisant les drivers NI-DAQmx 8.7.1 et NI-CAN 2.6.0.
Je dispose d'un code LV 7.1 et j'ai installé l'application builder 7.1.
Mais une fois l'application installé sur un PC vierge de Labview, j'obtiens le message suivant:
load error code 21: An external subroutine required for execution could not be found.
Ce message est répété plusieurs fois (pour différents VIs) puis le programme ne se lance pas.
J'ai bien veillé à installer les drivers NI-CAN et NI-DAQmx correspondant au préalable sur la machine cible.
En chercant sur le forum, plusieurs pistes m'ont été proposé:
La version NI-DAQ
L'intégration du Run time Engine
Un problème de DLL
J'ai vérifié ces 3 points mais cela n'a pas règlé mon problème.
Résolu !
Accéder à la solution.Bonjour,
Merci de ta réponse.
En fait, j'ai bien inclu le runtime engine de Labview qui était effectivement la source de l'erreur.
L'installation de NI-DAQmx v 8.7.1 provoque la mise à jour de la version du runtime engine (passage de 7.1 à 7.1.1).
J'ai donc désinstallé Le runtime engine 7.1.1 (ce qui a provoqué la désinstallation de labview et NI-DAQ).
Puis je suis passé par une version plus ancienne de NI-DAQ (7.2) que j'ai adapté (inclusions de DLL et de VIs).
Les messages d'erreurs ont alors tout simplement disparus! -
Problem to include a subroutine in a start Rountine
Hi ,
I have to write a piece of logic in the start routine at the object level.
The logic calls the subroutine recursively.
as you all know the start routine has a form and endform
How and where do i write and call the recursive subroutine. Its not allowing to write the subroutine after the endform..of the start routine.
and i have no access to se38 tcode ....also Kindly suggest.
Thanks,I got abap devleoper role and created z function module. instead of calling a subroutine..( recursively )
This is because , the start routine (form endform ) allows to create the subroutine as a part of sap std main program. ..either include program or subroutine. i dont feel that is the good option..
So i opted to create Z function module and included that in the start routine... -
Query regerding Sapscript : Calling abap subroutines
Hello everybody
Hope everyone is doing fine.
I've a small query. Whenever we require to call an abap subroutine from an abap sapscript we do the same using PERFORM statement. The syntax for the same is as below:
PERFORM SUBROUTINE_NAME IN PROGRAM PROGRAM_NAME
USING &VARAIABLE&
CHANGING &VARAIABLE&
ENDPERFORM
Here we are passing the varaiables to the subroutine and getting back values in varaibles. In the actual program we then read values from in_tab and out_tab having structures similar to itcsy.
The above mentioned is as per my understanding. My query is as follows:
If in the above statement instead of passing varaibles abnd getting back variables can be pass/get back an internal table?
I had read somewhere that it is possible using structures. If anyone is aware of how to do the same can you please give me the syntax. Actually how to get value from subroutine into an internal table. What will be the structure? Will it be same as itcsy?
Thanks a lot to everybody in advance.
Thanks & Regards
Kabir Radhakrishnanihi check this program!!!
REPORT Z_TEST_VBBE .
types : begin of t_vbap ,
VBELN like vbap-VBELN,
posnr like vbap-posnr,
concat(18),
end of t_vbap.
tables : vbap .
select-options : s_vbeln for vbap-vbeln .
data : it_vbap type table of t_vbap ,
wa_vbap type t_vbap.
select vbeln posnr from vbap into table it_vbap
where vbeln in s_vbeln .
" group by vbeln.
loop at it_vbap into wa_vbap .
perform select_data using wa_vbap-vbeln
wa_vbap-posnr
changing wa_vbap-concat .
modify it_vbap from wa_vbap .
endloop .
*& Form select_data
*form select_data using vbeln type vbap-vbeln
posnr type vbap-posnr
concat.
*endform. " select_data
*& Form select_data
form select_data using p_wa_vbap_vbeln
p_wa_vbap_posnr
changing p_wa_vbap_concat.
concatenate p_wa_vbap_vbeln
p_wa_vbap_posnr
into p_wa_vbap_concat
separated by '|' .
endform. " select_data -
How to perform subroutine form in an include program?
Hi all,
I would like to perform an external subroutine form residing in an include program from a customer function user exit. I tried using the following code, but it dumps:
PERFORM <form name> IN PROGRAM (lv_program)
TABLES <a> <b> USING <c>.
In the dump analysis I see that "Program <include name> is type I and therefore cannot be generated" and "The current ABAP/4 program attempts to call the program <include name> but this program cannot be executed. Therefore,the current program had to be terminated. "
If the include can't be generated, is there another way or method I could directly call the form without needing to copy the standard code to an own function or form?
Best regards,
MikkoHi,
take this example..
perform idoc_status_record_write in program sapmsed7 using
x_edidc-docnum
c_idoc_status_ready
space
space
space
space
space
space.
in this the from is in include, but while calling you need to call with the help of main program.
in this case <b>SAPMSED7</b> main program, but form is in include <b>MSED7F05</b>
Regards
vijay -
Calling a standard subroutine and setting global fields
Hallo ...
I am calling a subroutine in program A(standard program ) from a program B . there are a set of global fields in program A that i need to first set before i call this subroutine from Program B. is it posible to set these fields from program B. (since i cannot do much on the program A side as it is standard).?
Can some one suggest how can set these fields . some of these fields are flags and some normal fields. Not all the fields have parameterd ids. any idea how can i set thses fields from program B ?????
Help will be appriciated
ThanksHello,
there are two choices:
(1) You can add a form to program A, if the standard program lets you implement user-defined code. For example, in program SAPMV45A you use a certain include to implement user-defined forms. You can define a form which takes the actual values of the fields in program A which you want to change as parameter. The form then changes the fields (from within the form, the fields are visible and changable). You can call this form by using PERFORM your_form IN program_A.
(2) You can use a "dirty assign": Refer to the F1 help of the ASSIGN statement for more information about that. Sample may look like this (note the brackets and apostrophes):
ASSIGN ('(PROGRAM_A)GLOBAL_FIELD') to <fs_proga_global_field>.
However, the assign only works when program A has already been loaded into the internal mode during runtime. This means before doing the ASSIGN, any code of program A must have been executed in the current internal mode.
Hope this helps,
David
Maybe you are looking for
-
Printer sharing with Windows 7 64 bit
I am trying to install an HP laserjet 1320 printer connected to a Windows XP Pro 32 bit machine. Windows 7 goes out and tries to find the approriate drivers but reports that a suiable driver could not be found. The printer installs fine when connec
-
Need my adobe acrobat 9 standard installed on new laptop
how can I get this installed in new computer? does anyone have a number for adobe to talk to a live person?
-
Best practice for implementing Manufacturing Cost Planning ( MCP)
is there any best practice for implementing Manufacturing Cost Planning ( MCP) using BI-IP?
-
Need to clear openitems for Bank Reconciliation without useing Algorithms
Dear All, As per configuration of Manual Bank Reconciliation, for clearing cheque deposit & cheque issue we are useing Algorithms 15 & 13 respectively. while uploading Bank statement we used to give SIX digit cheque number as a reference to clear the
-
like i posted yesterday,ever since the stupid 8.0.1 update this c***** web browser has been freezing more then it was before. i would love to switch to google chrome or internet explorer,but google chrome freezes my computer up,and i can't get intern