Subroutine IN VTFL

Dear Gurus,
I am using a freight condition type as a header condition, The user has added freight in the price initially at the time of sales order creation, later on suppose the user wants to subtract the freight value at the time of invoice creation after the customer tells that CIF will be not borne by him and rather it should be borne by the company itself.
The requirement from the user side is that the amount should be distributed equally to all the line items.
For example, in the invoice there are three line items whose total value of all line items is 1000$(USD) and the total quantity of all line items is 10 shippers (cartons).
What is happening is that suppose I am splitting the batch and my line items will become 6, its subtracting in all the six line items. even including the zero line.
I want to create a subroutine for that in the copy control VTFL. for the item category (TAN) where It should skip the line whose quantity is zero.
please guide me, where do and how will create a subroutine.
Thanks & Regards
Anand K

Hi,
It looks like you don't need to create a seperate routine to resolve the issue.
Normally the frieght value is based on the weight of the line item or quantity of the line item.
So in order to have equal distribution of the frieght cost among the line items, just assign the rountine number under the column AltCBV against the condition type in the pricing procedure (SPRO -> sales and distributoin -> Basic functions ->Pricing -> Pricing control -> Define and assign pricing procedures).
For example if you want to spread the freight cost based on weight, then assign rountine 13 netweight.
If any of the standard routines does not suit your requirement, then you can develop your own routine in T.code VOFM , under menu Formulas-> Condition base value.
Regards

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
    Ramu

    Hi,
      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.

  • Getting stuck in a subroutine

    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 parseout

    While 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 Iqbal

    Hello 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
    pabitra

    1. 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.

  • Installer LV7.1 - LabVIEW load error code 21: An external subroutine required for execution could not be found.

    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 Radhakrishnani

    hi 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,
    Mikko

    Hi,
    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

Maybe you are looking for

  • Deleting music on hard drive after transfer to Ipod

    Hello- I'm wanting to delete my music files in my Music Library (on my computer) after I've transferred them to my Ipod. I see no reason to waste hard drive space. But I'm scared that if I do that, I-tunes software will wipe my Ipod clean the next ti

  • How to design this BO?

    This picture shows the result which I want ,however,I don't konw how to design the BO! Can anybody help me ? Best Regards!

  • Dynamic VLAN assignment on SG300

    Cisco documentation states that dynamic vlan assignment via RADIUS should provide the following IETF values: The RADIUS user attributes used for the VLAN ID assignment are: IETF 64 (Tunnel Type)-Set this to VLAN. IETF 65 (Tunnel Medium Type)-Set this

  • Printing Problems with Photoshop CS4

    I am having problems printing with Photoshop CS4.  When I go to print, I get a very small version of my created document.  If the image is 8"x5", it prints 1"x2" in the upper left corner.  I read other forum answers that said"delete the fax/printer"

  • Forms Runtime Web - R12

    Hi, We installed a vision on our Linux box. The installation was successfull. All the services are started. 1) The login page is working 2) Selecting responsibility page is working 3) When we are chooisng like concuurent --> Adminster the forms run t