IF condition to execute ABAP code; VBAK-VSBED; VBPA-KUNNR; XVBPA/YVBPA

Hi All!
I need some help. I have to change the MV45AFZZ, the FORM USEREXIT_MOVE_FIELD_TO_VBAK. The user exit should write the VBAK-VSBED (shipping condition) from the KNVV-VSBED for the VBPA-KUNNR, PARVW=WE (the ship-to-party partner). The user exit should also permit the modification of VBAK-VSBED directly from VA01 or VA02 (even if the ship-to-party remain the same).
I write down the ABAP code but I need to write a condition in order to execute the modification of VBAK-VSBED:
1. in VA01, for the first time;
2. in VA01 and VA02 if I change the ship-to-party partner.
Now, if I want to change VBAK-VSBED without modifying the ship-to-party, I can not. The user exit overwrite the VBAK-VSBED for the ship-to-party.
The code is:
READ TABLE xvbpa WITH KEY parvw = 'WE' .
IF SY-SUBRC = 0.
  SELECT SINGLE * FROM knvv WHERE kunnr EQ xvbpa-kunnr and
                                  vkorg EQ xvbak-vkorg and
                                  vtweg EQ xvbak-vtweg and
                                  spart EQ xvbak-spart .
  vbak-vsbed  = knvv-vsbed.
ENDIF.
Any help will be appreciate.
Florina C.

Hi,
try this example:
*Table YVBPA should always be filled, when executing VA02, but if it is not, you
*can simple select the Sales Partner from VBPA(in va02 scenario it would be in *DB aldready)
if sy-tcode = 'VA01'.
  READ TABLE xvbpa WITH KEY parvw = 'WE' .
  IF SY-SUBRC = 0.
    SELECT SINGLE * FROM knvv
    WHERE kunnr EQ xvbpa-kunnr  and
       vkorg EQ xvbak-vkorg and
       vtweg EQ xvbak-vtweg and
       spart EQ xvbak-spart .
       vbak-vsbed = knvv-vsbed.
  ENDIF.
else if tcode = 'VA02'.
  if YVBPA[] is initial.
      select single * from vbpa
      where vbeln = vbak-vbeln and parvw = 'WE'.
      if sy-subrc = 0.
             partner_before_change = vbpa-kunnr.
      endif.
  else.
      READ TABLE yvbpa WITH KEY parvw = 'WE' .
      if sy-subrc = 0.
         partner_before_change = yvbpa-kunnr.
      endif.
  endif.
  READ TABLE xvbpa WITH KEY parvw = 'WE' .
  IF SY-SUBRC = 0 and
     xvbpa-kunnr <> partner_before_change.
     SELECT SINGLE * FROM knvv
     WHERE kunnr EQ xvbpa-kunnr and
           vkorg EQ xvbak-vkorg and
           vtweg EQ xvbak-vtweg and
           spart EQ xvbak-spart .
     vbak-vsbed = knvv-vsbed.
   endif.
endif.
Best Regards,

Similar Messages

  • Execute ABAP code in Start Routine only once

    I have ABAP code in a start routine that I only want to execute once. Is there a way to tell this is first execution of the start routine?
    Also can I find out these value in the start routine ABAP:
    1. How many data packets there are?
    2. What data packet I am processing?
    Regards,
    Mike...

    Hi,
    I've just setup a little test:
    TRules, Start Routine Global Decl:
    DATA: GVI TYPE I, GVN(5) TYPE N.
    Start Routine:
    IF GVI IS INITIAL.
    GVI = 1.
    ELSE.
    ADD 1 TO GVI.
    ENDIF.
    MOVE GVI TO GVN.
    This is basically counting the times the start routine is executed and populating the var GVN; I am posting GVN in a char ZTESTGV in the target cube. I am posting as well the datapakID in my cube.
    I have loaded two requests (each 4 packets)
    the first one first to PSA and then from the PSA to the target: this is Serially using one single process. Here's the result in the cube:
    Request________________________________DATAPAKID_____ZTESTGV
    REQU_8B5ASGQNYYNIV1OJN68HFH1SR____________1____________1
    REQU_8B5ASGQNYYNIV1OJN68HFH1SR____________2____________2
    REQU_8B5ASGQNYYNIV1OJN68HFH1SR____________3____________3
    REQU_8B5ASGQNYYNIV1OJN68HFH1SR____________4____________4
    In this case the global variable is persistent accross packets.
    the second request is loaded in paralell: this is, multiple processes are executed at the time. Here's the result in the cube:
    Request________________________________DATAPAKID_____ZTESTGV
    REQU_14QVH21BSVH44FAJW94BD7N2H____________1____________1
    REQU_14QVH21BSVH44FAJW94BD7N2H____________2____________1
    REQU_14QVH21BSVH44FAJW94BD7N2H____________3____________1
    REQU_14QVH21BSVH44FAJW94BD7N2H____________4____________1
    In this case the global variable is always1 !!
    This is logic since several a process cannot access the internal memory used by another one...
    Conclusion; the global variable will work only if the load is serial...
    hope this helps...
    Olivier.

  • Where can i see Shipping condition TEXT e.g. VBAK-VSBED=F1=FEDEX PRIORITY?

    Hi Experts,
    Am looking to pull the SHIPPING CONDITION TEXT/DESCRIPTION, so, pls. let me know, Which table does store this value?
    example: VBAK-VSBED = F1
    F1 description is FEDEX PRIORITY
    Where can i see this FEDEX PRIORITY for F1 of VBAK-VSBED?
    i tried with  WHERE USED LIST, CHECK TABEL as TVSB, no use!!
    thanq
    Edited by: Srinivas on Feb 27, 2008 3:42 PM

    You will get the text in table  TVSBT.......
    I hope it is solved...

  • Execute ABAP Code Inspector from Outside of SAP

    Hi all...
    For reporting purpose, I would like to use ABAP Code Inspector (transaction SCI) for generating output as a file, it should call from outside of SAP through RFC function module and generate the list (output) as flat file (or XML), does anyone have been done with similar work like this? I wonder if you could share your experience with me...
    thanks in advance,
    yayan irianto.

    I managed to set up the variant, however found a problem.
    I used "Search ABAP Statement Patterns" under "Search Functs" and set the pattern like followings.
    SELECT + INTO *
    SELECT SINGLE + INTO *
    However following statements were detected.
    SELECT * INTO TABLE IT_DRAW FROM DRAW.
    SELECT MANDT INTO TABLE IT_DRAW FROM DRAW.
    SELECT SINGLE * INTO TABLE IT_DRAW FROM DRAW.
    SELECT SINGLE MANDT INTO TABLE IT_DRAW FROM DRAW.
    It's because + means one ABAP token in the code inspector.
    Is there anyway to find only "SELECT SINGLE *" and "SELECT *" ?

  • Execute ABAP code from within SAPScript code

    http://www.sapdevelopment.co.uk/sapscript/sapscript_executeabap.htm

    Hi
    Do u have any question??? or are you trying to give suggestion???
    If u have query how to call a report in script here is ur answer
    The Form :
    /:PERFORM CDE_CENT IN PROGRAM ZKRPMM_PERFORM_Z1MEDRUCK
    /:USING &EKKO-EBELN&
    /:CHANGING &CDECENT&
    /:ENDPERFORM
    The report :
    ZKRPMM_PERFORM_Z1MEDRUCK.
    DATA : BEGIN OF it_input_table OCCURS 10.
    INCLUDE STRUCTURE itcsy.
    DATA : END OF it_input_table.
    * déclaration de la table output_table contenant les
    variables exportées
    DATA : BEGIN OF it_output_table OCCURS 0.
    INCLUDE STRUCTURE itcsy.
    DATA : END OF it_output_table.
    DATA : w_ebeln LIKE ekko-ebeln,
    * w_vbeln LIKE vbak-vbeln,
    w_zcdffa LIKE vbak-zcdffa.
    * FORM CDE_CENT
    FORM cde_cent TABLES input output.
    it_input_table[] = input[].
    it_output_table[] = output[].
    READ TABLE it_input_table INDEX 1.
    MOVE it_input_table-value TO w_ebeln.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
    input = w_ebeln
    IMPORTING
    output = w_ebeln.
    SELECT SINGLE zcdffa FROM ekko
    INTO w_zcdffa
    WHERE ebeln = w_ebeln.
    it_output_table-name = 'CDECENT'.
    MOVE w_zcdffa TO it_output_table-value.
    MODIFY it_output_table INDEX 1.
    output[] = it_output_table[].
    ENDFORM.
    Reward all helpfull anwers
    Regards
    Pavan

  • ABAP code in to JAVA for overwritting condition value for IPC pricing

    Dear experts i am an IPC JAVA developer and i am trying to translate an ABAP Routine in to JAVA code for overwriting condition value in the pricing user exit of IPC
    Here is the ABAPcode segment i am trying to transulate
      DATA: l_kdkg1  LIKE komk-kdkg1,
            l_work TYPE f,
            l_umren LIKE marm-umren,
            l_umrez LIKE marm-umrez.
      SELECT SINGLE peinh FROM mbew INTO mbew-peinh         
      WHERE matnr = komp-matnr
      AND bwkey = komp-werks.
      I need some  help in the following things
      1. I don't know how to transulate the following Line of ABAP code into JAVA
         " AND bwkey = komp-werks."
    Bwkey stands for plant details. I don't know how to get plant details from  Pricing Item.
      2. Someone please tell me weather the following JAVA transulation is correct
      Vector x = prItem.getUserExitConditions();
      db database = pricingEngine.getDatabase();
         // set table name
      String tableStart = "mbew";                                             
         // set query parameters
      sys_query_pair[] queryPair = null;
      //matnr = komp-matnr . Getting the material Number
      String materialNo= prItem.getProduct().toString();
      //bwkey = komp-werks.Getting plant.
      // TODO: werks stands for plant. Not sure how to get it from prItem
       String plant = "";
       queryPair = new sys_query_pair[2];                    
       queryPair[0] = new sys_query_pair("matnr", materialNo);
       queryPair[1] = new sys_query_pair("bwkey", plant);
      // set query columns
       String ZZFIELDStart = "peinh";
       String ZZFIELD_VALUEStart;                   
       String[] projectionStart;
       projectionStart = new String[];
       BigDecimal pricingUnit = null;
       try{     
          // execute query
          res resultSetStart = database.db_read_table(tableStart, queryPair,projectionStart) ;
          if (!res.db_empty_results_p(resultSetStart))
         ZZFIELD_VALUEStart = resultSetStart.db_get_row_element_string(0);
         pricingUnit = new BigDecimal(ZZFIELD_VALUEStart);
         resultSetStart.db_finish();
       else
         System.out.println("Coudn't find a value of field peinh in table mbew!");
       catch (exc_database_error e)
         e.printStackTrace();

    Please login to the server where IPC is installed. In the IPC folder u find libs folder  or search for docs in IPC folder. There it is dealt how ABAP routines are mapped to  user exits in java coding
    Thanks
    Surya

  • Unwanted ABAP Code Block Triggering - IF condition not working

    Friends,
    I am facing weird issue in my production system i.e. one of the code block which was bounded in IF condition is getting triggered. However, as per the data that I have in my system this IF condition should skip that code block.
    Let me give you code and execution flow here:
    I have Program A in which I am submitting Program B in background mode to selected server. This Program A will be executed by end user in Background mode.
    call function 'JOB_OPEN'
         exporting
           jobname          = job_name
         importing
           jobcount         = job_number
         exceptions
           cant_create_job  = 01
           invalid_job_data = 02
           jobname_missing  = 03.
    if sy-subrc = 0.
         submit program B
                  via job job_name number job_number
                  with p_sched  = sched
                  with period_p = period
                  with fyear_p  = fyear
                  with username = ruser
    and return.
    call function 'JOB_CLOSE'
         exporting
           jobcount             = job_number
           jobname              = job_name
           sdlstrtdt            = start_date
           sdlstrttm            = start_time
          targetserver          = l_targetserver          "V05++
         exceptions
           cant_start_immediate = 01
           invalid_startdate    = 02
           jobname_missing      = 03
           job_close_failed     = 04
           job_nosteps          = 05
           job_notex            = 06
           lock_failed          = 07.
    endif.
    As you can see in code, I am passing job to run on l_targetserver. This program also releases some other jobs on other programs.
    In Program B, I have code like this:
    Top Include.
    start-of-selection.
    perform routine1 using p_fyear. "THIS HAS SOME SELECT QUERIES  AND  OTHER CODE and THERE IS NO ISSUE WITH IT. THIS ROUTINE IS
    ALSO HAVING ONE AND ONLY 'CLEAR' statement on DELTA_FLAG.
    perrform routine2.
    form routine2.
    loop itab into wa.  " This itab was populated in routine1
      perform get_flag." WE ARE PASSING VALUE TO DELTA_FLAG VARIABLE HERE. YOU CAN CHECK CODE BELOW.
    perform process_data. "CHECK THIS ROUTINE
    peform update_records.
    endloop.
    endform.
    Form Get_FLag.
    select * from dbtable into localtable where <condition>. " THIS QUERY RETURNS SOME DATA AND MY FLAG WILL BE SET AS 'X'.
    if sy-subrc = 0.
    delta_flag = 'X'. "THis one declared in top include.
    endif.
    EndForm.
    Form Process_Data.
    Perform get_dataset1.
    while counter <> 0. " Variable Counter declared in top include and default value is 20. Value will be decreased in side this loop. No issues with it.
    if wa-fld1 = '1'. "Check value of one of the field.
      continue.
    endif.
    perform get_delta_data. " We have Unwanted ABAP code (for my scenario) here.
    endwhile.
    Endform.
    form update_records.
    call function 'FUNCTION' in update task exporting par1 = itab.
    commitwork
    endform.
    form get_delta_data.
    if delta_flag is initial.
    select data from BSEG into i_bseg where <condition>. " This query is getting triggered in my system.
    endif.
    endform.
    All my data objects were declared in Top include of the program. Subroutines with their parameters were same as above code. I am not using any sub-routine second time or out-side of this program. As shown, this program updates records to one of the table with UPDATE function module IN UPDATE TASK and there is COMMITWORK after that. This task is part of
    As you could understand, DELTA_FLAG is having 'X' but query on BSEG is getting triggered. We are not clearing this variable after populating 'X' to it. I can see this query from Program B captured in ST12 trace results. (Verified it multiple times)
    I did this analysis:
    1. Ran this process in foreground with debugging, then there is no issue.
    2. Debugged 'Finished' job of my production system, but I dont see this code triggered in Debug mode.
    3. Replicated same execution process in our non-production environments, but there is no issue.
    Let me know if you need any other details.
    Thanks for your time.
    Regards,
    Naveen

    I forgot the one bit, which might actually have been useful: I'd be moving the if delta_flag is initial. out of form get_delta_data, before perform get_delta_data.Since you are calling in nested loops there, every little bit of run-time counts, and "philosophically" I feel - procedure should do what its name promises it will, and not check whether it's "appropriate time" to do it
    cheers and good luck
    Jānis

  • Executing Abap Queries in Abap Code and processing the result

    Hi,
    I want to execute ABAP Queries (designed by sq01) in an abap report and processing the result in an internal table.
    How could it be work?
    Thanks a lot for your responses,
    with kind Regards
    Reinhold Strobl

    Hello,
    GO to SQ01 and select your query. Go to Menu QUERY-->More Functions->Display Report Name.
    You can then take that report name and go to SE38. Copy the code before END-OF_SELECTION and then modify as per your own requirements.
    Regrads
    Saket Sharma

  • ECATT/ABAP code to close a session while executing a chain script

    How to close the extra created session during the execution of chain script??
    Details of the problem:
    I'm using eCATT for automating different business flows in SAP,
    For a particular scenario I have to create a chain script,
    One chain script may contain up to 40 individual scripts,
    This chain script will contain around 7 report programs using SE38 transation,
    While executing SE38 script(report program), one extra session is opening (log display session),
    but, my script can close the original SE38 screen only, not the extra created session,
    So, after executing 5 scripts (SE38 scripts), then "sessions reached to its max" message is appearing, and the script is failing,
    As it is a automation test script, no manual interaction will be there,
    i.e - we should not close the extra session manually.
    Now, my question is:
    How to close the extra created session..??
    How the recording should be done to handle this problem..??
    or any extra code should be added to close the extra session..??
    Is there any ABAP code.. or eCATT command available to handle this problem..??
    If you have any idea to close the extra created session, please share it with me,
    my effort:
    I tried with "RESCON" command... this will close all the SAP sessions,
    This will not work for my scenario,
    and, I tried with "Close session after every RFC",
    this will work, but, after executing 5 SE38 scripts, I'm facing the above problem.
    Please suggest me a solution, Thanks in advance..
    Regards,
    Chandra shekhar.A
    Message was edited by:
            chandra shekhar
    Message was edited by:
            chandra shekhar

    user13490676 wrote:
    could it be a problem with jmf itself that the endofstream doesnt get generated for the datasource being read from a fileIn this instance, that would be the problem... more than likely, there's something weird about the file, perhaps it doesn't have a duration set in the header and JMF treats it like a live stream.
    You could always write a custom DataSource that just passes through the input of a normal data source, and then generate the EndOfStream event yourself... maybe based on a timeout or failure counter? I haven't received any data in x seconds or after x attempts, so I'm assuming the file is done... Or when you've read enough data that the file can't possibly have any more (read >= file header + file data)...

  • Regarding shipping condition field vbak-vsbed in VA03 transaction

    Hi experts!
    I want to fetch the discription of field VBAK-VSBED to display in my sap script form. can anyone help me with that.
    which table should i look for.
    example :
      vbak-vsbed = 15
    so which table can have the discription for 15 which in my scenerio is 'Ground Commericial'
    but i dont know the table to look for.
    thanks in advance.

    Hi,
    You can use the table TVSBT - Shipping Conditions: Texts
    to get the shipping conditions text
    Thanks
    Naren

  • To execute from ABAP code an external Unix program

    HI,
    I would like to know how to execute from ABAP code an external Unix program and check for a return code?

    HI,
    There are different ways to this:
    (1) OPEN DATASET <file> FOR OUTPUT 'unix command'
    CLOSE DATASET <file>
    This command executes the unix command and writes the output into <file>
    Look into OSS Note 9391.
    (2) or try the following program but unfortunately the command CALL SYSTEM is
    not supported by SAP. If you are on R/3 2.1 - 2.2x you can get some idea's from the program SAPMSOS0.
    REPORT ZUNIXCOM .
    DATA: U_COMMAND(200).
    Table for system messages
    DATA: BEGIN OF RT OCCURS 100 ,
    LINE(100) ,
    END OF RT .
    START-OF-SELECTION .
    MOVE 'unix command' to U_COMMAND .
    REFRESH RT.
    CALL 'SYSTEM' ID 'COMMAND' FIELD U_COMMAND
    ID 'TAB' FIELD RT-SYS .
    LOOP AT RT.
    WRITE : / RT-LINE .
    ENDLOOP. 
    Reward Points if found helpfull..
    Cheers,
    Chandra Sekhar.

  • Executing an HTTP Request in ABAP Code

    Hi,
    I have to write an ABAP program to check VAT numbers before making any VAT declaration. SAP checks the logic of the number, however it does not check if a VAT number is still valid for that company. The European Commission has a website (http://ec.europa.eu/taxation_customs/vies/) where you can check centrally all VAT numbers used in the EU. According to the Commission's web site it should be possible to have an open interface. A SOAP service is available (Its WSDL file can be obtained also on the website).
    Does anyone has an idea how this can be done (Current SAP version = SAP ECC 6.0) taken into account there is no XI (or IP) aviable or set up or used.
    Thanks,
    Jan

    Hi,
    The examples are calling a browser but that is not what we are looking for. What we are looking for is (via ABAP) to send our http request and receive back the anwser. They (http://ec.europa.eu/taxation_customs/vies/) provide the SOAP message (WSDL : (http://ec.europa.eu/taxation_customs/vies/api/checkVatPort?wsdl). My question is if it is possible witout using XI and yes how? If I understand it correctly is should be possible via ABAP (example program RSWF_TEST_HTTP), but if I create my own program I get the message HTTP-Receive: RC=400  ICM_HTTP_CONNECTION_FAILED. Maybe the ABAP code is correct, but maybe I should change some settings or configure something else.
    Jan

  • Sequence of ABAP code and events.

    Hello,
      Please tell me the proper sequence of writing ABAP code.
    (Event execution sequence and code writing sequence.)
    - which event should follow which event?
    - which code should be written where?
    - Sequence of Includes (e.g. TOP, PBO, PAI, Subroutine,etc.)
    Regards,
    Sharayu.

    Sequence of Includes:
    TOp Include  (All data declarations/Selection screen declared here)
    Form Include ( All subroutines are placed inside it)
    For a Screen
    PBO
    PAI
    Load of program:When the program is executed
    INITIALIZATION: Fill the default values into the fields or we can assign values to the fields in this event. It triggers first.
    AT SELECTION-SCREEN: It is commonly used for validations like ON-REQUEST ( for search help) , OUTPUT ( modify screens ).
    TOP-OF-PAGE: Header of the report or any data to print on top of the page in list.
    END-OF-PAGE: Footer details like page no: / total no: of pages.
    START-OF-SELECTION: For processing ur code selects, loops, FM'S and all.
    END-OF-SELECTION: Output formating. It is not required to write normally but in some special conditions like to print after the START-OF-SELECTION event.

  • Q: ABAP code from db to memory decreases performance?

    Hi Gurus,
    We have a problem with some ABAP code (a start routine in a BI load). Basically the situation is: we had some code that builds a hierarchy (and inserts into hierarchy table) based on an attribute load, which worked fine but was to slow.
    As we do not need the hierarchy anymore we changed the code to only build the hierarchy in memory (the reason why we need it at all is because building this is the only way we can ensure to load the right records in the attribute load) and now, it is sloweru2026.which we do not understand.
    In general we have replaced:
    SELECT SINGLE * FROM /BIC/HZTVFKORG INTO nodelast
      WHERE nodeid = lastnode2.
    With:
      READ TABLE VirtHierarchy INTO nodelast
        WITH KEY nodeid = lastnode2.
    And replaced:
      UPDATE /BIC/HZTVFKORG FROM nodelast.
    With:
      MODIFY TABLE VirtHierarchy FROM nodelast.
    And replaced:
      INSERT INTO /BIC/HZTVFKORG VALUES node.
    With:
      APPEND node TO VirtHierarchy.
    As we see it, this should increase the performance of the start routine and the load (it takes several hours for just 50000 records), but it is actually running slower now...
    Does anybody have any idea about why this is not improving performance?
    Thank you in advance,
    Mikael

    Dear Mikael Kilaker,
    There are few reason:
    1. Data overload in memory.
    , if you try to execute
    SELECT SINGLE * FROM /BIC/HZTVFKORG INTO nodelast
    WHERE nodeid = lastnode2.
    With:
    READ TABLE VirtHierarchy INTO nodelast
    WITH KEY nodeid = lastnode2.
    And replaced:
    UPDATE /BIC/HZTVFKORG FROM nodelast.
    With:
    MODIFY TABLE VirtHierarchy FROM nodelast.
    And replaced:
    INSERT INTO /BIC/HZTVFKORG VALUES node.
    With:
    APPEND node TO VirtHierarchy.
    inside any loop conditions, this approach will make the system slow because it will load entire table into memory then system still need to cater space for selected value thus make system not really effective when you execute large volume of data.
    2. Unsorted data.
    It is really great practice if you sort nodelast. It is extra steps but the effect greatly decreased response time when system manipulating sorted data in the internal table.
    3. Use binary search in READ table.
    Try to use this code
    READ TABLE VirtHierarchy INTO nodelast
    WITH KEY nodeid = lastnode2 BINARY SEARCH.
    this practice also will increase performance when you execute large data inside internal table.
    Do reward points if this helps you

  • Creating an xml file from abap code

    Hello All,
    Please let me know which FM do I need to execute in order to create an XML file from my ABAP code ?
    Thanks in advance,
    Paul.

    This has been discussed before
    XML files from ABAP programs

Maybe you are looking for