Negative quantity of SO item

Dear Expert,
Can I use the negative quantity for SO items? And do the delivery with negative quantity to increase inventory?
I will reward you.
regards
Gang

Well
See if you are selling something in a Order how can you add upp returns in the same order i mean thats not correct logically speaking
You cant configure a single item category to do both the work ... please let me know more clear requirement and for return of a material LNN for Reteunable packaging material and if you have something like empties you can use TAZ..
Yeah your line item can have one with TAN & the other with REN but then i have never come across this situation neither i have simulated this senario .. may be you can test it ..( i would wonder how would delivery and billing documents respond to this ) my knowledge says it may not work
Hope this helps
Cheers

Similar Messages

  • Need negative quantity non-inventory items on Credit Memo

    Version: (2007A)
    Description of requirements: (Please provide a detailed description)
    Our customer issues many invoices with a negative quantity line item for a miscellaneous non-inventory item. These non-inventory items are used to reduce the amount of the invoice regarding miscellaneous credits to their customers.  These are not discounts.
    When the customer wants to credit these invoices, they canu2019t create a Credit Memo based on the invoice because SAP wonu2019t allow this if there are line items with negative amounts.
    When they create a credit memo not based on an invoice, they arenu2019t allowed to enter a negative quantity for a line item as they are for an Invoice. They are forced to create a credit memo not based on an invoice the inventory item line items and an invoice or Journal Entry for the negative quantity line item to debit back the miscellaneous line amount.
    As an example:
    Invoice line item one for inventory item: qty one, price 100,line total $100.00
    Invoice line item two non-inventory item misc credit: quanity -1, price 10, total -$10.00
    Invoice Total $90.00
    In Order to provide the correct credit amount, they have to create a Credit Memo not based on an invoice for line item one, qty one, price 100 u2013 value -100 and an invoice for the non-inventory item for qty one, price 10 -  value 10.00.
    This creates a net credit for the customer of 90.00
    This looks ridiculous to their customers when they see these transactions on their statements, creates extra work for the users and there is no link between the three documents.
    By using inventory items for these miscellaneous credits, they can assign a sales revenue of their choice. They have multiple sales accounts and the GL posting is determined by the item group for the item. By assigning the desired item group to these non-inventory items, they can control which sales account is updated on their marketing documents when using these non-inventory items.
    If they were to use the Freight items, they would need a separate freight setup entry for combination of item group and miscellaneous credit. Because they have so many Item Groups and types of credits, they would need a great many separate Freight Charges to choose from.
    All of the above pertains to all of our customers. This customer has a custom add-on and their marketing documents are all created from custom objects.  They hit a button on the custom sales contract screen and an invoice is created.  When they hit another button on the screen, the selected invoice is credited. They have legally binding contracts for fixed quantities to be shipped, so we decrease the quantity shipped when creating an invoice and decrease the quantity shipped when a credit memo is created. The contract is fulfilled when the exact quantity contracted for has been shipped. Because the credit memo fails, we canu2019t update the custom objectu2019s remaining to be shipped, rendering it inaccurate from that time forward. (reducing the quantity shipped is part of the Credit Memo creation process).Creating Credit Memos and Invoices from the interface fixes the inventory count, customer balance, etc., but we have no way of fixing the sales contractu2019s quantity shipped & remaining to be shipped or linking the contracts to the documents created from the interface.
    Business needs: (Please describe the impact on your business, if the functionality is not realized)
    Examples: (Please describe a typical example, how the functionality should work.)
    Credit Memos should allow negative quantities and line total amounts for non-inventory items, the same way that A/R Invoices do, so that credit memos can be based on invoices that have negative quantity non-inventory line items.
    Current Workaround: (Please describe the workarounds you are using at the moment)
    Please see above
    Proposed solution: (Please suggest how the new functionality should work)
    Credit Memos should allow negative quantities and line total amounts for non-inventory items, the same way that A/R Invoices do.

    Hi Sean......
    System is behaving properly as per its logic. Infact it does same in all the previous or upcoming versions.
    If you have Item Type GRPO for Non Inventory Item it does not create any accounting but you can see the same during AP invoice.
    GRPO for such type is only optional. For further clarification you can discuss this with your CA what he suggests. But i suggest you to raise AP invoice also for getting Account effect. Just see doing this in test DB you get your answer......
    Regards,
    Rahul

  • Allow negative quantity for items manage by batch

    Hi All,
    I am having this issue where all items are required to be managed by batch and yet stock is allow to go negative (with the Block negative quantity unchecked) due to customer requirement.
    E.g. there are no batch to select when the item hits negative quantity.
    Any idea if this is possible in SAP B1 and possible workaround.
    Thank you in advance.
    Lip Sin

    Hi Lip Sin,
    You need to discuss and ask the same to your customer.
    Your customer has to make choice between one of this two, because when there is possibility of negative stock, just imagine how the software can keep the integrity with batch nos. ?
    You need to clearly ask your customer to choose any of this and still the customer insist, you can think to handle it using UDF for batch no, but then your customer will loose the control by batch.
    BR
    Samir Gandhi

  • ML81N Negative Quantity Posting for Credit or Difference Adjustments.

    ECC 5.0 - DIMP
    This is a VERY, VERY common situation at nearly all companies where a credit or small difference may occur between the invoice amount and the SES.  Reversing / canceling and reentering documents, along with all of the additional accounting documents created is not an appropriate option.
    =========================
    I have a situation with Service Entry Sheets where a vendor delivers services for a PO line item.  There can be MANY service entries, and MANY invoices for a single PO Line item.
    Invoices are posted against the open GR SES amount on the PO Line Item and not specifically to the service entry sheet.  As a result there may be more than one invoice tied to a single service entry sheet.  The reversal option would requie
    When credits come in, or when vendor discounts are taken the SES amount does not match but there is a need to ensure that the SES amount matches the vendor credit amount (whether credit memo or discounts taken). 
    NUMEROUS SAP OSS Notes say that Negative Service Entry Sheet Amounts are possible, and in the first step I even get an SE042 warning message about the negative quantity.  However, when I press ENTER to go past the warning I then get messgae SE396 as a hard error and the dialog box for the error has JUST an exit button causing the entire transaction to exit the process.
    Has anyone ever worked successfully with negative service entry sheet quantities?
    If so, what were your lessons learned?
    Here are some of the notes I have reviewed, and the ability to do the negative SES quantity goes back to 4.6:
    365648
    375799
    411262
    455707
    1068156
    1166693

    Hi Bill,
    If you try to save an SES with ONLY a negative quantity you will receive               
    the following error Value of specs. less than zero (function cannot be                 
    performed) Message no. SE396.
    You can enter negative VALUES based on the               
    following rules:                                                                               
    The service specifications contain lines with negative values.                         
    Service lines with negative values are only allowed if the following                   
    conditions are fulfilled:                                                                               
    The total value of the specifications is positive.                                     
    The total value of each account assignment is positive.                                                                               
    Please see other notes attached.                                                       
    354903 Postings: Invoices for services                                                 
    499575    FAQ: Invoice verification/goods receipt in service                           
    1174830 FAQ: Invoice cancellation for services       
    Regards,
    Edit

  • Negative quantity in deliver field in production order - CO02

    Hi All,
    I am doing production confirmation and goods receipt for production order through back ground using standard BAPI.While doing GR for production order in background the following error occured.
      System is throughing dump - Arithmatical logical conversion problem.when we analysed through ST22 we came to know that negative quantity appearing in field of delivered in production order.
      Screen name.............. "SAPLCOKO1"
      Screen number............ 0120
      Screen field............. "CAUFVD-GWEMG"
    As per standard, delivered field in production order is always in display mode only. So there will not be any chance for user to change the delivered field.
    Pls guide me how to overcome the above issue and what is exact root cause for the above problem.
    System is throwing error in change mode ( Co02) and display mode ( CO03 ) for the respective production order number
    Thanks
    P.Srinivasan

    Hi,
    This inconsistency can be solved with the following correction report. If you want to try by yourself, then implement it manually in transaction SE38 and execute in test mode first to check if the inconsistency is found. And obviously, in a TEST system first.
    If you are NOT confident about it, I recommend you to submit a support message for SAP for further investigation since this is a database inconsistency.
    Regards,
    Marcelo
    <pre>
    *& Report  ZPCON_076B                                                  *
    *& This report checks goods receipt quantity (WEMNG) and value (WEWRT) *
    *& of an order item for consistency with the corresponding material    *
    *& documents. In UPDATE mode, the quantity and the value calculated    *
    *& from the material documents will be written to database table AFPO. *
    REPORT  zpcon_076b LINE-SIZE 90.
    INCLUDE lcokotyp.
    TABLES: afpo.
    SELECTION-SCREEN COMMENT /1(80) text1.                      "#EC NEEDED
    SELECTION-SCREEN COMMENT /1(80) text2.                      "#EC NEEDED
    SELECTION-SCREEN COMMENT /1(80) text3.                      "#EC NEEDED
    SELECTION-SCREEN COMMENT /1(80) text4.                      "#EC NEEDED
    SELECTION-SCREEN COMMENT /1(80) text5.                      "#EC NEEDED
    SELECTION-SCREEN ULINE.
    SELECTION-SCREEN COMMENT /1(80) texta.                      "#EC NEEDED
    SELECT-OPTIONS r_aufnr FOR afpo-aufnr.
    SELECTION-SCREEN ULINE.
    SELECTION-SCREEN BEGIN OF BLOCK block WITH FRAME TITLE title."#EC NEEDED
    SELECTION-SCREEN COMMENT /1(72) texty.                      "#EC NEEDED
    SELECTION-SCREEN BEGIN OF BLOCK block2 WITH FRAME.
    PARAMETERS: testmode RADIOBUTTON GROUP mode DEFAULT 'X'.
    PARAMETERS: update RADIOBUTTON GROUP mode.
    SELECTION-SCREEN END OF BLOCK block2.
    SELECTION-SCREEN COMMENT /1(72) textz.                      "#EC NEEDED
    SELECTION-SCREEN END OF BLOCK block.
    DATA: BEGIN OF ls_afpo.
            INCLUDE STRUCTURE afpo.
    DATA: END OF ls_afpo.
    DATA  lt_afpo LIKE ls_afpo OCCURS 0.
    DATA: BEGIN OF ls_mseg.
            INCLUDE STRUCTURE mseg.
    DATA: END OF ls_mseg.
    DATA  ls_mseg2 LIKE ls_mseg.
    DATA  lt_mseg LIKE ls_mseg OCCURS 0.
    DATA  ls_mkpf TYPE mkpf.
    DATA l_initial_ltrmi TYPE co_ltrmi VALUE IS INITIAL.
    DATA l_orders TYPE sytabix.
    DATA l_entries TYPE sytabix.
    DATA l_sum_wemng TYPE wemng.
    DATA l_sum_wewrt TYPE wewrt.
    DATA l_error TYPE xfeld.
    INITIALIZATION.
      text1 = 'This report checks goods receipt quantity (WEMNG) and'.
      text2 = 'value (WEWRT) of an order item for consistency with the '.
      text3 = 'corresponding material documents. In UPDATE mode, the'.
      text4 = 'quantity and the value calculated from the material'.
      text5 = 'documents will be written to database table AFPO.'.
      texta = 'Please specify order numbers of orders to be processed.'.
      texty = 'If TESTMODE is set, no database update will occur.'.
      textz = 'Set radio button UPDATE for updating the database entries.'.
      title = 'Mode'.
    AT SELECTION-SCREEN.
    orders specified?
      IF r_aufnr IS INITIAL.
        MESSAGE e889(co) WITH 'Please specify order numbers'.
      ENDIF.
    START-OF-SELECTION.
    select order items
      SELECT *
             FROM  afpo
             INTO  TABLE lt_afpo
             WHERE aufnr IN r_aufnr
             AND ( dauty = auftragstyp-fert
                OR dauty = auftragstyp-netw
                OR dauty = auftragstyp-inst
                OR dauty = auftragstyp-rma
                OR dauty = auftragstyp-bord ).
      DESCRIBE TABLE lt_afpo LINES l_orders.
    check order items
      LOOP AT lt_afpo INTO ls_afpo.
        REFRESH lt_mseg.
        CLEAR l_sum_wemng.
        CLEAR l_sum_wewrt.
        CLEAR l_error.
        SELECT *
               FROM  mseg
               INTO  TABLE lt_mseg
               WHERE matnr = ls_afpo-matnr
                 AND werks = ls_afpo-pwerk
                 AND aufnr = ls_afpo-aufnr
                 AND aufps = ls_afpo-posnr
                 AND kzbew = 'F'
               %_HINTS ORACLE 'rule'.
        IF NOT sy-subrc IS INITIAL.
        no goods movements --> nothing to do.
          DELETE lt_afpo.
          CONTINUE.
        ENDIF.
        LOOP AT lt_mseg INTO ls_mseg.
          IF ls_mseg-shkzg ='S'.
          inward movement
            IF NOT ls_mseg-dmbtr IS INITIAL.
              l_sum_wewrt = l_sum_wewrt + ls_mseg-dmbtr.
            ENDIF.
            IF NOT ls_mseg-bstmg IS INITIAL.
              l_sum_wemng = l_sum_wemng + ls_mseg-bstmg.
            ELSE.
              IF ls_mseg-erfme = ls_afpo-amein.
                l_sum_wemng = l_sum_wemng + ls_mseg-erfmg.
              ELSE.
                IF ls_mseg-meins = ls_afpo-amein.
                  l_sum_wemng = l_sum_wemng + ls_mseg-menge.
                ELSE.
                  WRITE: 'ERROR - Order', ls_afpo-aufnr COLOR 6.
                  DELETE lt_afpo.
                  l_error = 'X'.
                  EXIT.
                ENDIF.
              ENDIF.
            ENDIF.
            ls_mseg2 = ls_mseg.
          ELSE.
          outward movement
            IF NOT ls_mseg-dmbtr IS INITIAL.
              IF ls_mseg-dmbtr NE ls_mseg-bualt AND
                 NOT ls_mseg-bualt IS INITIAL.
                l_sum_wewrt = l_sum_wewrt - ls_mseg-bualt.
              ELSE.
                l_sum_wewrt = l_sum_wewrt - ls_mseg-dmbtr.
              ENDIF.
            ENDIF.
            IF NOT ls_mseg-bstmg IS INITIAL.
              l_sum_wemng = l_sum_wemng - ls_mseg-bstmg.
            ELSE.
              IF ls_mseg-erfme = ls_afpo-amein.
                l_sum_wemng = l_sum_wemng - ls_mseg-erfmg.
              ELSE.
                IF ls_mseg-meins = ls_afpo-amein.
                  l_sum_wemng = l_sum_wemng - ls_mseg-menge.
                ELSE.
                  WRITE: 'ERROR - Order', ls_afpo-aufnr COLOR 6.
                  DELETE lt_afpo.
                  l_error = 'X'.
                  EXIT.
                ENDIF.
              ENDIF.
            ENDIF.
          ENDIF.
        ENDLOOP. "AT lt_mseg
      only continue if no error in the calculation occurred
        CHECK l_error IS INITIAL.
        IF ls_afpo-wemng = l_sum_wemng AND
           ls_afpo-wewrt = l_sum_wewrt.
        values are correct, no update necessary
          DELETE lt_afpo.
          CONTINUE.
        ENDIF.
        FORMAT: COLOR 1.
        WRITE: / 'Order', ls_afpo-aufnr, 'material', ls_afpo-matnr.
        FORMAT: COLOR OFF.
        WRITE: /3 'Order item data   : quantity',
                  ls_afpo-wemng UNIT ls_afpo-amein, ls_afpo-amein, 'value',
                  ls_afpo-wewrt CURRENCY ls_mseg-waers, ls_mseg-waers.
        WRITE: /3 'Material documents: quantity',
                  l_sum_wemng UNIT ls_afpo-amein, ls_afpo-amein, 'value',
                  l_sum_wewrt CURRENCY ls_mseg-waers, ls_mseg-waers.
        FORMAT: COLOR 2.
        WRITE: /3 'Material doc.  BWART', 30 'stock qty  UoM',
               52 'entry qty  UoM', 77 'value  Curr'.
        FORMAT: COLOR OFF.
        LOOP AT lt_mseg INTO ls_mseg.
          WRITE: /3 ls_mseg-mblnr, ls_mseg-zeile, ls_mseg-bwart,
                   ls_mseg-menge UNIT ls_mseg-meins, ls_mseg-meins,
                   ls_mseg-bstmg UNIT ls_mseg-bstme, ls_mseg-bstme,
                   ls_mseg-dmbtr CURRENCY ls_mseg-waers, ls_mseg-waers.
        ENDLOOP.
        IF NOT update IS INITIAL.
        set delivery date
          IF l_sum_wemng IS INITIAL.
          initial delivery quantity --> initial delivery date
            UPDATE afpo SET   ltrmi = l_initial_ltrmi
                        WHERE aufnr = ls_afpo-aufnr
                          AND posnr = ls_afpo-posnr.
          ELSE.
          read posting date from last valid goods receipt
            SELECT SINGLE * FROM  mkpf
                            INTO  ls_mkpf
                            WHERE mblnr = ls_mseg2-mblnr
                              AND mjahr = ls_mseg2-mjahr.
            IF sy-subrc IS INITIAL.
              UPDATE afpo SET   ltrmi = ls_mkpf-budat
                          WHERE aufnr = ls_afpo-aufnr
                            AND posnr = ls_afpo-posnr.
            ELSE.
            leave LTRMI untouched
            ENDIF.
          ENDIF.
        set quantity and value
          UPDATE afpo SET   wemng = l_sum_wemng
                            wewrt = l_sum_wewrt
                      WHERE aufnr = ls_afpo-aufnr
                        AND posnr = ls_afpo-posnr.
          FORMAT: COLOR COL_POSITIVE.
          WRITE: /3 'Order item data corrected from material documents.'.
          FORMAT: COLOR OFF.
        ENDIF.
        ULINE.
      ENDLOOP. "AT lt_afpo
      WRITE: / 'Number of checked order items     :', l_orders.
      DESCRIBE TABLE lt_afpo LINES l_entries.
      WRITE: / 'Number of inconsistent order items:', l_entries.
      IF NOT update IS INITIAL    AND
         NOT l_entries IS INITIAL.
        WRITE: / 'Inconsistencies were corrected from material documents.'
                  COLOR COL_POSITIVE.
      ENDIF.
      ULINE.
    </pre>
    Edited by: Wilian Segatto on Jan 25, 2011 12:27 PM

  • Incorrect "Ordered" quantity in the item master data

    Hello Experts,
    I have a situation where there are two items we have found that show the incorrect ordered quantity in the item master data. This is in fact the ordered column and the items are not production items. One of the items is showing a negative quantity and the other is showing 50,000 LBs less than it should given the one open production order with NO GRPO documents linked. Please advise ASAP..
    Thank you,
    Taylor

    Hi,
    You need to check the detect query and the scenarios in the Note No. : 999124.
    If the detect query of the Note returns result, you need to log a support ticket to get the database investigated.
    Kind Regards,
    Jitin
    SAP Business One Forum Team

  • How can negative quantity appears?

    Hi guys,
    I have trouble in production system. User reported me there was an odd line in item cost history that showing a discreate job transaction which could consumed zero onhand.
    It causes there was negative quantity in line.
    Allow negative balance always set to No (Unchecked) in Parameter Setting.
    I attached the image of our item cost history.
    Please give me an answer. Thank you so much.
    Regards,
    Contraseña Luz

    Hi guys,
    I looked at the transaction in material transaction. I think the problem causes by transaction_date that created earlier than creation_date. its make the line misorder.
    SEGMENT1
    TRANSACTION_QUANTITY
    TRANSACTION_TYPE_NAME
    TRANSACTION_DATE
    CREATION_DATE
    BM-200-1
    774.48
    WIP Completion
    27-FEB-2014 23:07:47
    27-FEB-2014 23:08:38
    BM-200-1
    -165.77
    WIP Issue
    27-FEB-2014 23:01:58
    27-FEB-2014 23:09:21
    BM-200-1
    -213.21
    WIP Issue
    27-FEB-2014 14:11:44
    27-FEB-2014 14:12:50
    BM-200-1
    -770.04
    WIP Issue
    27-FEB-2014 06:01:50
    27-FEB-2014 06:06:46
    BM-200-1
    -332.19
    WIP Issue
    27-FEB-2014 05:51:11
    27-FEB-2014 05:51:37
    BM-200-1
    990.86
    WIP Completion
    27-FEB-2014 01:16:54
    27-FEB-2014 01:17:44
    See two line on top of the table, the WIP Completion should be created before the WIP Issue.
    I have created new discussion on Why Transaction Date Line Earlier Created than Creation Date and Make Wrong Sequence?
    We here don't know how it can be happened.
    Any suggestion guys?
    Regards,
    Contrasena Luz

  • Negative Quantity

    Hi All ,
    As i know the By products as well as Co products are added in BOM with a negative Quantity .....rite . But is it compulsary that it should be -1 only.If yes Why ??
    Regards
    Sarfraz

    Hi Sarfaraz,
    In case of CO-product material if your trying to maintain Component qty as +ve then you will find below error Massge.
    Only negative quantities supported for co-product
    Message no. 29088
    Diagnosis
    You have marked this item as a co-product. Such items are treated as material credit memos by costing, which reduces the manufacturing costs calculated.
    System Response
    Co-products are entered as a negative quantity.
    Procedure
    You did not enter a negative quantity.
    Please enter a negative quantity.
    Example: 100-
    Regards,
    Dhaval
    Edited by: Dhaval Choksi on Jul 21, 2008 2:01 PM

  • Negative quantity not allowed for Put Away Planned

    Dear Experts,
    I'm trying to activate the PDI document but the system show the error message: Negative quantity not allowed for Put Away Planned.
    I was looking the document flow from the item 10 and I saw there is one task was created with quantity "1 box" and the same document was cancelled but the quantity "2 box" was cancelled. I believe because of this is happening the error.
    All items from my HU is with the same problem, duplicate the quantity during canceling.
    Somebody can give me advice how fix it.
    I found a SAPNote but Note 1674037:Negative Put Away Planned quantity (PWP) due to "Store HUs" but I need a workaround to fix my actual PDI and finish the process.
    Regards,
    Alan Mattos

    Hi Petr,
    I checked the transaction SMQ2 and I dont have anything stuck there. Then I tried to change de deliveryquantity but the field quantity isn't available to change. My PDI document already been the Goods Receipt Status "Completed". I try to reverse this document and the system show the message: Delivery is locked (Posting Not Possible). I believe its happening because the PDI isn't active.
    Do you have other idea ???
    Thank you a lot for your help. 

  • Delete Remain Open Quantity in PO Item

    Hi SAP community,
    My Order quantity in PO item is 100, and User have GR 90. Left with 10 units to be good receipt.
    Now user what to cancel the 10 unit, so that they can close this PO
    how can the user cancel the 10 unit remain open in po ?

    Hi,
    You have 2 options -
    1) If you want that this PO should not be considered for MRP run, then marks the Delivery complete indicator in item details level & save. In this case though the PO will not be considered for MRP, you will be able to post GRN.
    2) If you do not want to post any GRN for this PO, then change the PO quantity to the quantity of actual GRN made. In this case the PO will not be considered for MRP as well as you will not be able to post GRN.
    Regards,
    Prashant

  • Sales BOM its possible edit the quantity for child items in Sales Order

    Hello friends, this is my issue
    I need to use a Sales BOM but the problem is that the child items in any Document marketing, such as Sales Order, the quantity for that child items it´s possible to edit independant of the father item code, and I don´t want this because allows to users to change diferent quantity for child items versus the quantity of the father item code.
    Thanks in advance

    Thanks Gordon yes I know even with this solution the problem is the with transaction notification is not possible determine that event to block, or if you know how or get some tip, please send me, because I analyze the requirement and I couldn´t develop.
    Tks

  • How to enable Negative Quantity in PSM/ASM of SAP PLM7

    Hi Guru,
    I got a request from my users that they want to use Negative Quantity in in PSM/ASM of SAP PLM7.
    As we known, Negative Quantity is available in ERP via CS01/CS02, but i cannot maintain negative quantity in PSM or ASM. Does any one know how to maintain it? Thanks in advance.
    BR
    Simon

    Satish,
    You have to set up the component as secondary output. When creating a BOM/Recipe in PLM, you can designate a component as a "secondary output." This type of component will allow negative quantities to be entered, just like you do in CS01 and CS02 for "by-products."
    -Best Regards,
    Oscar

  • MIGO-GR Open Quantity in Excise Item is not allowing MIRO

    Hello,
    We are facing problem while posting MIRO.
    There is open quantity in Excise Item Tab. This problem is occured as there was difference of 0.036 in Goods Receipt.
    I haved checked my MIGO-GR it is showing 802.00 KG while in J1IS - Part 2 it is showing 801.964 KG there is open quantity.
    Excise Part-2 entry is not completed and it is not allowing us to post MIRO for the Supplier Invoice against the Purchasr Order.
    You are kindly requested to look in to this and suggest solution, how we can solve this problem.
    Edited by: Vishal_Kadiya on Dec 24, 2011 9:27 AM

    hi
    In J1iex change and post  the balance qty and value for the same invoice and then do MIRO.
    Kiran

  • 'BAPI_SALESORDER_CHANGE - Want to change the Quantity on Line Item in SO

    Hi
    I am facing a problem. The requirement is to change the Sales Order Item Quantity. I basically planned to update the quantity of Schedule Item which needs to be changed. When I run the below code, it works and says the Sales Order changed succesfully. However I get an express message saying the Database update failure. I don't get any sort of technical information.
    Appreciate if you could help me finding the error.
    Thanks
    regards
    girish
    Note --> I am trying to change the Quantity for 2 line item in SO '56' to 40 Units.
    REPORT ZBAPI_SALESORD_CHANGE.
    data : zBAPISDHD type /AFS/BAPISDHD,
    zORDER_HEADER_INX TYPE /AFS/BAPISDHDX,
    zSALESDOCUMENT type BAPIVBELN-VBELN.
    data : zORDER_ITEMS_IN like /AFS/BAPISDITM occurs 0 with header line,
    zORDER_ITEM_INX like /AFS/BAPISDITMX occurs 0 with header line,
    zORDER_SCHEDULES_IN like /AFS/BAPISDSCHD occurs 0 with header line,
    ZSCHEDULE_LINESX LIKE /AFS/BAPISDSCHDX occurs 0 with header line,
    zORDER_PARTNERS like BAPIPARNR occurs 0 with header line,
    zRETURN like BAPIRET2 occurs 0 with header line,
    so_no type BAPIVBELN-VBELN,
    zPARTNERCHANGES like BAPIPARNRC occurs 0 with header line.
    data : l_comp_qty like zORDER_ITEMS_IN-COMP_QUANT.
    data : g_qty like /AFS/BAPISDSCHD-REQ_QTY.
    g_qty = 40.
    l_comp_qty = 40.
    clear : zBAPISDHD.
    so_no = '0000000056'.
    zBAPISDHD-REFOBJTYPE = '/AFS/ORDER'.
    zBAPISDHD-SALES_ORG = 'BP01'.
    zBAPISDHD-DISTR_CHAN = '02'.
    zBAPISDHD-DIVISION = '01'.
    zBAPISDHD-PMNTTRMS = '0001'.
    zORDER_HEADER_INX-UPDATEFLAG = 'U'.
    zORDER_HEADER_INX-SALES_ORG = 'X'.
    zORDER_HEADER_INX-DISTR_CHAN = 'X'.
    zORDER_HEADER_INX-DIVISION = 'X'.
    zORDER_HEADER_INX-PMNTTRMS = 'X'.
    **********ITEM ***************************************
    zORDER_ITEMS_IN-ITM_NUMBER = '00020'.
    zORDER_ITEMS_IN-MATERIAL = 'F1202'.
    zORDER_ITEMS_IN-PLANT = 'BP01'.
    zORDER_ITEMS_IN-ITEM_CATEG = 'TAS'.
    zORDER_ITEMS_IN-SHIP_POINT = 'BP01'.
    zORDER_ITEMS_IN-COMP_QUANT = l_comp_qty.
    zORDER_ITEMS_IN-TARGET_QTY = l_comp_qty.
    zORDER_ITEMS_IN-TARGET_QU = 'ST'.
    append zORDER_ITEMS_IN.
    zORDER_ITEM_INX-ITM_NUMBER = '00020'.
    zORDER_ITEM_INX-UPDATEFLAG = 'U'.
    zORDER_ITEM_INX-MATERIAL = 'X'.
    zORDER_ITEM_INX-PLANT = 'X'.
    zORDER_ITEM_INX-ITEM_CATEG = 'X'.
    zORDER_ITEM_INX-SHIP_POINT = 'X'.
    zORDER_ITEM_INX-COMP_QUANT = 'X'.
    zORDER_ITEM_INX-TARGET_QTY = 'X'.
    zORDER_ITEM_INX-TARGET_QU = 'X'.
    append zORDER_ITEM_INX.
    *********SCHEDULE LINE******************************
    refresh zORDER_SCHEDULES_IN.
    clear zORDER_SCHEDULES_IN.
    zORDER_SCHEDULES_IN-ITM_NUMBER = '000020'.
    zORDER_SCHEDULES_IN-SCHED_LINE = '0001'.
    zORDER_SCHEDULES_IN-REQ_DATE = '20070525'.
    zORDER_SCHEDULES_IN-DATE_TYPE = '1'.
    zORDER_SCHEDULES_IN-SCHED_TYPE = 'CS'.
    zORDER_SCHEDULES_IN-GRID_VALUE = 'BLK2728'.
    zORDER_SCHEDULES_IN-REQ_CATEGORY = '1DE'.
    zORDER_SCHEDULES_IN-REFOBJTYPE = '/AFS/ORDER'.
    zORDER_SCHEDULES_IN-REQ_QTY = g_qty.
    append zORDER_SCHEDULES_IN.
    refresh ZSCHEDULE_LINESX.
    clear ZSCHEDULE_LINESX.
    ZSCHEDULE_LINESX-ITM_NUMBER = '000020'.
    ZSCHEDULE_LINESX-SCHED_LINE = '0001'.
    ZSCHEDULE_LINESX-UPDATEFLAG = 'U'.
    ZSCHEDULE_LINESX-REQ_DATE = 'X'.
    ZSCHEDULE_LINESX-DATE_TYPE = 'X'.
    ZSCHEDULE_LINESX-SCHED_TYPE = 'X'.
    ZSCHEDULE_LINESX-GRID_VALUE = 'X'.
    ZSCHEDULE_LINESX-REQ_CATEGORY = 'X'.
    ZSCHEDULE_LINESX-REFOBJTYPE = 'X'.
    ZSCHEDULE_LINESX-REQ_QTY = 'X'.
    append ZSCHEDULE_LINESX.
    CALL FUNCTION '/AFS/BAPI_SALESORD_CHANGE'
    EXPORTING
    SALESDOCUMENT = so_no
    ORDER_HEADER_IN = zBAPISDHD
    ORDER_HEADER_INX = zORDER_HEADER_INX
    SIMULATION =
    BEHAVE_WHEN_ERROR = ' '
    INT_NUMBER_ASSIGNMENT = ' '
    LOGIC_SWITCH =
    TABLES
    RETURN = zRETURN
    ORDER_ITEM_IN = zORDER_ITEMS_IN
    ORDER_ITEM_INX = zORDER_ITEM_INX
    ORDER_SCHEDULE_LINES = zORDER_SCHEDULES_IN
    ORDER_SCHEDULE_LINESX = ZSCHEDULE_LINESX.
    PARTNERS =
    PARTNERCHANGES = zPARTNERCHANGES
    PARTNERADDRESSES =
    ORDER_CFGS_REF =
    ORDER_CFGS_INST =
    ORDER_CFGS_PART_OF =
    ORDER_CFGS_VALUE =
    ORDER_CFGS_BLOB =
    ORDER_CFGS_VK =
    ORDER_CFGS_REFINST =
    ORDER_TEXT =
    ORDER_KEYS =
    CONDITIONS_IN =
    CONDITIONS_INX =
    EXTENSIONIN =
    *CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
    EXPORTING
    SALESDOCUMENT = so_no
    ORDER_HEADER_IN = zBAPISDHD
    ORDER_HEADER_INX = zORDER_HEADER_INX
    TABLES
    RETURN = zRETURN
    ORDER_ITEM_IN = zORDER_ITEMS_IN
    ORDER_ITEM_INX = zORDER_ITEM_INX
    PARTNERS = zORDER_PARTNERS
    PARTNERCHANGES = zPARTNERCHANGES
    PARTNERADDRESSES =
    ORDER_CFGS_REF =
    ORDER_CFGS_INST =
    ORDER_CFGS_PART_OF =
    ORDER_CFGS_VALUE =
    ORDER_CFGS_BLOB =
    ORDER_CFGS_VK =
    ORDER_CFGS_REFINST =
    SCHEDULE_LINES = zORDER_SCHEDULES_IN
    SCHEDULE_LINESX = ZSCHEDULE_LINESX.
    ORDER_TEXT =
    ORDER_KEYS =
    CONDITIONS_IN =
    CONDITIONS_INX =
    EXTENSIONIN =
    data : s_BAPIRET2 like BAPIRET2.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    importing
    return = s_bapiret2.

    Hi,
    Refer this code: Marked in bold
    Get Line Item Details which are to be deleted
    The line items fetched but not matching with ALV data
    are the one which are copied from Reference Order
    and should be deleted from our Sales Order
      PERFORM get_line_item_details.
    To get all the uploaded data
      i_upload_2[] = i_upload[].
    This is to be executed only if the SALES ORDER
    IS CREATED WITH REFERENCE & User has selected
    the record in ALV for Order Creation
      LOOP AT i_upload INTO wa_upload_1
                        WHERE chkbx = 'X'
                          AND vbeln NE space.
        MOVE wa_upload_1 TO wa_upload.
    Clear Work Area/Local variables & Internal tables
        CLEAR : l_sales_no,
                l_item_number,
                wa_header_in,
                wa_header_inx,
                wa_curr,
                l_currency,
                l_count,
                l_counter.
        REFRESH : i_cond,
                  i_cond_inx,
                  i_sch_in,
                  i_sch_inx,
                  i_items_in,
                  i_items_inx,
                  i_return,
                  i_partner_inx.
        AT NEW seqno.
    Get the Sales Order Number for corresponding record
          READ TABLE i_result_all INTO wa_result_all WITH KEY
                                          ref_no = wa_upload-vbeln
                                          seqno  = wa_upload-seqno.
          IF sy-subrc EQ 0.
            IF NOT wa_result_all-vbeln IS INITIAL.
              l_sales_no = wa_result_all-vbeln.
            ENDIF.
          ELSE.
            CONTINUE.
          ENDIF.
          READ TABLE i_curr INTO wa_curr
                            WITH KEY vbeln = l_sales_no.
    Header Data
          CLEAR wa_header_in.
          wa_header_in-sales_org  = wa_upload-vkorg.
          wa_header_in-distr_chan = wa_upload-vtweg.
          wa_header_in-division   = wa_upload-spart.
         wa_header_in-ref_doc    = wa_upload-vbeln.
         wa_header_in-ref_doc_l  = wa_upload-vbeln.
          wa_header_in-purch_no_c = wa_upload-bstnk.
          CLEAR : wa_header_inx.
          wa_header_inx-updateflag = 'U'.
          wa_header_inx-sales_org  = 'X'.
          wa_header_inx-distr_chan = 'X'.
          wa_header_inx-division   = 'X'.
          wa_header_inx-purch_no_c = 'X'.
    Check Business Object
          CLEAR : l_bus_object.
          IF wa_upload-auart = 'ZY01' OR
             wa_upload-auart = 'ZY07' OR
             wa_upload-auart = 'ZY08' OR
             wa_upload-auart = 'ZY09' OR
             wa_upload-auart = 'ZY18' OR
             wa_upload-auart = 'ZY94' .
            l_bus_object = 'BUS2032'.
          ELSEIF
            wa_upload-auart = 'ZY10' OR
            wa_upload-auart = 'ZY11' OR
            wa_upload-auart = 'ZY27' OR
            wa_upload-auart = 'ZY28' OR
            wa_upload-auart = 'ZY92' OR
            wa_upload-auart = 'ZY93'.
            l_bus_object = 'BUS2102'.
          ELSEIF
            wa_upload-auart = 'ZY16' OR
            wa_upload-auart = 'ZY30'.
            l_bus_object = 'BUS2094'.
          ELSEIF
            wa_upload-auart = 'ZY17' OR
            wa_upload-auart = 'ZY31'.
            l_bus_object = 'BUS2096'.
          ELSEIF
            wa_upload-auart = 'ZY06' OR
            wa_upload-auart = 'ZY26'.
            l_bus_object = 'BUS2032'.
          ENDIF.
    *Populate Ship-to-party
          IF NOT wa_upload-scode IS INITIAL.
            CLEAR wa_partner_inx.
            wa_partner_inx-document    = l_sales_no.
            wa_partner_inx-itm_number  = '000000'.
            wa_partner_inx-updateflag  = 'U'.
            wa_partner_inx-partn_role  = c_we.
            wa_partner_inx-p_numb_new  = wa_upload-scode.
            wa_partner_inx-refobjtype  = l_bus_object.
            APPEND wa_partner_inx TO i_partner_inx.
          ENDIF.
    Bill to Party
          IF NOT wa_upload-bparty IS INITIAL.
            CLEAR wa_partner_inx.
            wa_partner_inx-document    = l_sales_no.
            wa_partner_inx-itm_number  = '000000'.
            wa_partner_inx-updateflag  = 'U'.
            wa_partner_inx-partn_role  = c_re.
            wa_partner_inx-p_numb_new  = wa_upload-bparty.
            wa_partner_inx-refobjtype  = l_bus_object.
            APPEND wa_partner_inx TO i_partner_inx.
          ENDIF.
    Payer
          IF NOT wa_upload-payer IS INITIAL.
            CLEAR wa_partner_inx.
            wa_partner_inx-document    = l_sales_no.
            wa_partner_inx-itm_number  = '000000'.
            wa_partner_inx-updateflag  = 'U'.
            wa_partner_inx-partn_role  = c_rg.
            wa_partner_inx-p_numb_new  = wa_upload-payer.
            wa_partner_inx-refobjtype  = l_bus_object.
            APPEND wa_partner_inx TO i_partner_inx.
          ENDIF.
    Sales Rep
          IF NOT wa_upload-salesrep IS INITIAL.
            CLEAR wa_partner_inx.
            wa_partner_inx-document    = l_sales_no.
            wa_partner_inx-itm_number  = '000000'.
            wa_partner_inx-updateflag  = 'U'.
            wa_partner_inx-partn_role  = c_ys.
            wa_partner_inx-p_numb_new  = wa_upload-salesrep.
            wa_partner_inx-refobjtype  = l_bus_object.
            APPEND wa_partner_inx TO i_partner_inx.
          ENDIF.
    Check condition type & unit price
    For the following Document Types,
    Condition Type & Unit Price are mandatory
          CLEAR : l_item_number,
                  wa_upload_2.
          LOOP AT i_upload_2 INTO wa_upload_2
                        WHERE seqno =  wa_upload-seqno
                          AND chkbx = 'X'.
            CLEAR : wa_cond,
                    wa_result.
    Get the POSNR
            PERFORM conv_alpha_input USING  wa_upload_2-matnr
                                  CHANGING  wa_upload_2-matnr.
            CLEAR : wa_items.
            READ TABLE i_items INTO wa_items
                                WITH KEY vbeln = l_sales_no
                                         matnr = wa_upload_2-matnr.
    Check condition types
            IF wa_upload_2-auart = 'ZY16' OR
               wa_upload_2-auart = 'ZY17' OR
               wa_upload_2-auart = 'ZY30' OR
               wa_upload_2-auart = 'ZY31'.
    If error, then update the output table
              IF wa_upload_2-kschl IS INITIAL OR
                 wa_upload_2-kbetr IS INITIAL.
                CLEAR : wa_result_all.
                READ TABLE i_result_all INTO wa_result_all WITH KEY
                                            ref_no = wa_upload_2-vbeln
                                            mat_no = wa_upload_2-matnr
                                            kwmeng = wa_upload_2-kwmeng
                                            charg  = wa_upload_2-charg
                                            seqno  = wa_upload_2-seqno
                                            vbeln  = l_sales_no.
                IF sy-subrc EQ 0.
                  wa_result_all-status  = 'E'. " E
                  wa_result_all-remarks = text-007. " Condition Type & Unit
                                                  Price is mandatory
                  MODIFY i_result_all FROM wa_result_all INDEX sy-tabix.
                ENDIF.
                CLEAR : wa_result_all.
                CONTINUE.
    Else update the condition type & unit price
              ELSE.
                wa_cond-itm_number  = wa_items-posnr.    " ITEM NO.
                wa_cond-cond_type   = wa_upload_2-kschl. " CNDTION TYPE
                wa_cond-cond_value  = wa_upload_2-kbetr. " UNIT PRICE
                wa_cond-currency    = wa_curr-waerk.     " Currency
                APPEND wa_cond TO i_cond.
                CLEAR : wa_cond,
                        wa_upload_2.
              ENDIF.
            ELSE.
    For other document type, fill Condition type & Unit Price
              wa_cond-itm_number  = wa_items-posnr.    " ITEM NO.
              wa_cond-cond_type   = wa_upload_2-kschl. " CNDTION TYPE
              wa_cond-cond_value  = wa_upload_2-kbetr. " UNIT PRICE
              wa_cond-currency    = wa_curr-waerk.
              APPEND wa_cond TO i_cond.
              CLEAR : wa_cond,
                      wa_upload_2.
            ENDIF.
            CLEAR : wa_cond_inx.
            wa_cond_inx-itm_number = wa_items-posnr.
            wa_cond_inx-cond_type  = wa_upload_2-kschl.
            wa_cond_inx-cond_value = 'X'.
            wa_cond_inx-currency   = 'X'.
            APPEND wa_cond_inx TO i_cond_inx.
            CLEAR : wa_upload_2.
          ENDLOOP.
    DELETE Item Data from VBAP which has no matching entires in ALV
    if SAME Material occurs more than once in ALV for same key then
    count the no. of times the material occurs
          CLEAR : wa_upload_3,
                  l_counter.
          l_counter = 0.
          LOOP AT i_upload_2 INTO wa_upload_3
                                WHERE seqno = wa_upload-seqno
                                  AND chkbx = 'X'
                                  AND matnr = wa_upload-matnr.
            l_counter = l_counter + 1.
            CLEAR : wa_upload_3.
          ENDLOOP.
          PERFORM conv_alpha_input USING  wa_upload-matnr
                                CHANGING  wa_upload-matnr.
    check the corresponding no. of line items
    for the above material
          CLEAR : l_count,
                  wa_items.
          LOOP AT i_items INTO wa_items
                        WHERE matnr = wa_upload-matnr
                          AND vbeln = l_sales_no.
            CLEAR : wa_items_in,
                    wa_items_inx.
            IF l_count GE l_counter.
              wa_items_in-itm_number  = wa_items-posnr.
              wa_items_in-material    = wa_items-matnr.
              APPEND wa_items_in TO i_items_in.
              CLEAR wa_items_inx.
              wa_items_inx-itm_number    = wa_items-posnr.
              wa_items_inx-updateflag    = 'D'. " Delete Record
              wa_items_inx-material      = 'X'.
              APPEND wa_items_inx TO i_items_inx.
            ENDIF.
            l_count = l_count + 1.
          ENDLOOP.
    Convert material nos. to 18 digit no.
          REFRESH : i_upload_3.
          CLEAR   : wa_upload_3.
          i_upload_3[] = i_upload_2[].
          LOOP AT i_upload_3 INTO wa_upload_3
                                        WHERE seqno = wa_upload-seqno
                                          AND chkbx = c_x.
            PERFORM conv_alpha_input USING wa_upload_3-matnr
                                  CHANGING  wa_upload_3-matnr.
            MODIFY i_upload_3 FROM wa_upload_3.
            CLEAR : wa_upload_3.
          ENDLOOP.
    Delete materials which are not in ALV but are in line items
    for that sales order
          CLEAR : wa_upload_3,
                  wa_items_in,
                  wa_items.
          LOOP AT i_items INTO wa_items WHERE vbeln = l_sales_no.
            PERFORM conv_alpha_input USING  wa_items-matnr
                                  CHANGING  wa_items-matnr.
            READ TABLE i_upload_3 INTO wa_upload_3
                              WITH KEY matnr = wa_items-matnr.
            IF sy-subrc NE 0.
              wa_items_in-itm_number  = wa_items-posnr.
              wa_items_in-material    = wa_items-matnr.
              APPEND wa_items_in TO i_items_in.
              CLEAR wa_items_inx.
              wa_items_inx-itm_number    = wa_items-posnr.
              wa_items_inx-updateflag    = 'D'. " Delete Record
              wa_items_inx-material      = 'X'.
              APPEND wa_items_inx TO i_items_inx.
            ENDIF.
            CLEAR : wa_items,
                    wa_items_in,
                    wa_items_inx,
                    wa_upload_3.
          ENDLOOP.
    UPDATE Item Data RECORDS
          CLEAR : wa_upload_2,
                  wa_items_in,
                  wa_items,
                  wa_items_inx,
                  wa_sch_in,
                  wa_sch_inx,
                  l_item_number.
          LOOP AT i_upload_2 INTO wa_upload_2 WHERE
                                              seqno = wa_upload-seqno
                                              AND chkbx = 'X'.
    Read the Material no. from ALV & check whether the
    corresponding material exists in VBAP, if YES, then
    Update the line item data
            PERFORM conv_alpha_input USING  wa_upload_2-matnr
                                  CHANGING  wa_items_in-material.
    POPULATE ITEM NO -- Update the record
    If line item has same material twice,
    then appropriate POSNR should be assigned
            READ TABLE i_items INTO wa_items
                              WITH KEY vbeln = l_sales_no
                                       matnr = wa_items_in-material.
            IF sy-subrc EQ 0.
    If Reference is not contract then the process to assign
    POSNR is as follows :- Check the corresponding material
    from ALV with data from ITEMS, the record which matches
    the data is selected & POSNR is assigned to it
              IF wa_upload_2-oreason NE 'C'.
                CLEAR : wa_items_in1.
                READ TABLE i_items_in INTO wa_items_in1
                                  WITH KEY material = wa_items_in-material
                                         itm_number = wa_items-posnr.
                IF sy-subrc EQ 0.
                  CLEAR : wa_items1.
                  LOOP AT i_items INTO wa_items1
                                WHERE  vbeln = l_sales_no
                                  AND  matnr = wa_items_in-material.
                    IF wa_items1-posnr GT wa_items-posnr.
                      wa_items-posnr = wa_items1-posnr.
                      CLEAR : wa_items_in1.
                      READ TABLE i_items_in INTO wa_items_in1
                                  WITH KEY material = wa_items_in-material
                                         itm_number = wa_items-posnr.
                      IF sy-subrc NE 0.
                        EXIT.
                      ENDIF.
                    ENDIF.
                    CLEAR : wa_items1.
                  ENDLOOP.
                ENDIF.
              ELSE.
    If Reference is CONTRACT then the process to assign
    POSNR is different. Here if ALV has same material
    twice & ITEMS has it once, then the second occurrence
    of material of ALV is assigned a new POSNR
                CLEAR : wa_items_in1,
                        l_insert.
                READ TABLE i_items_in INTO wa_items_in1
                                  WITH KEY material = wa_items_in-material
                                         itm_number = wa_items-posnr.
                IF sy-subrc EQ 0.
                  CLEAR : l_lines,
                          l_insert,
                          wa_items_in1.
                  DESCRIBE TABLE i_items_in LINES l_lines.
                  READ TABLE i_items_in INTO wa_items_in1 INDEX l_lines.
                  wa_items-posnr = wa_items_in1-itm_number + 10.
                  l_insert = 'X'.
                  CLEAR : wa_items_in1.
                ENDIF.
              ENDIF.
    <b>          wa_items_in-itm_number  = wa_items-posnr.
              wa_items_in-target_qty  = wa_upload_2-kwmeng.
              wa_items_in-target_qu   = wa_items-zieme.
              wa_items_in-store_loc   = wa_upload_2-lgort.
              wa_items_in-plant       = wa_upload_2-werks.
              wa_items_in-batch       = wa_upload_2-charg.
              wa_items_in-route       = wa_upload_2-route.
              wa_items_in-sales_unit  = wa_upload_2-vrkme.
              wa_items_in-short_text  = wa_upload_2-maktx.
              APPEND wa_items_in TO i_items_in.</b>
              CLEAR wa_items_inx.
              wa_items_inx-itm_number    = wa_items-posnr.
              IF l_insert EQ c_x.
                wa_items_inx-updateflag    = c_i. " Insert Record
              ELSE.
                wa_items_inx-updateflag    = 'U'. " Update Record
              ENDIF.
              wa_items_inx-material      = 'X'.
              wa_items_inx-target_qty    = 'X'.
              wa_items_in-target_qu      = 'X'.
              wa_items_inx-store_loc     = 'X'.
              wa_items_inx-plant         = 'X'.
              wa_items_inx-batch         = 'X'.
              wa_items_inx-route         = 'X'.
              wa_items_inx-short_text    = 'X'.
              APPEND wa_items_inx TO i_items_inx.
            ENDIF.
    *Populate Ship-to-party
            IF NOT wa_upload_2-scode IS INITIAL
               AND l_insert IS INITIAL.
              CLEAR wa_partner_inx.
              wa_partner_inx-document    = l_sales_no.
              wa_partner_inx-itm_number  = wa_items-posnr.
              wa_partner_inx-updateflag  = 'U'.
              wa_partner_inx-partn_role  = c_we.
              wa_partner_inx-p_numb_new  = wa_upload_2-scode.
              wa_partner_inx-refobjtype  = l_bus_object.
              APPEND wa_partner_inx TO i_partner_inx.
            ENDIF.
    Bill to Party
            IF NOT wa_upload_2-bparty IS INITIAL
               AND l_insert IS INITIAL.
              CLEAR wa_partner_inx.
              wa_partner_inx-document    = l_sales_no.
              wa_partner_inx-itm_number  = wa_items-posnr.
              wa_partner_inx-updateflag = 'U'.
              wa_partner_inx-partn_role  = c_re.
              wa_partner_inx-p_numb_new  = wa_upload_2-bparty.
              wa_partner_inx-refobjtype  = l_bus_object.
              APPEND wa_partner_inx TO i_partner_inx.
            ENDIF.
    Payer
            IF NOT wa_upload_2-payer IS INITIAL
               AND l_insert IS INITIAL.
              CLEAR wa_partner_inx.
              wa_partner_inx-document    = l_sales_no.
              wa_partner_inx-itm_number  = wa_items-posnr.
              wa_partner_inx-updateflag  = 'U'.
              wa_partner_inx-partn_role  = c_rg.
              wa_partner_inx-p_numb_new  = wa_upload_2-payer.
              wa_partner_inx-refobjtype  = l_bus_object.
              APPEND wa_partner_inx TO i_partner_inx.
            ENDIF.
    Sales Rep
            IF NOT wa_upload_2-salesrep IS INITIAL
               AND l_insert IS INITIAL.
              CLEAR wa_partner_inx.
              wa_partner_inx-document    = l_sales_no.
              wa_partner_inx-itm_number  = wa_items-posnr.
              wa_partner_inx-updateflag  = 'U'.
              wa_partner_inx-partn_role  = c_ys.
              wa_partner_inx-p_numb_new  = wa_upload_2-salesrep.
              wa_partner_inx-refobjtype  = l_bus_object.
              APPEND wa_partner_inx TO i_partner_inx.
            ENDIF.
    Populate schedule Line
            CLEAR : l_datum,
                    wa_sch_in.
    For following condition types, schedule lines not required
            IF wa_upload_2-auart EQ 'ZY16' OR
               wa_upload_2-auart EQ 'ZY17' OR
               wa_upload_2-auart EQ 'ZY30' OR
               wa_upload_2-auart EQ 'ZY31'.
            ELSE.
              wa_sch_in-itm_number =  wa_items-posnr.
              wa_sch_in-sched_line =  '0001'.
              wa_sch_in-req_qty    =  wa_upload_2-kwmeng.
              IF NOT wa_upload_2-vdatu IS INITIAL.
               REPLACE ALL OCCURRENCES OF '.' IN wa_upload_2-vdatu WITH ' '.
                CONDENSE wa_upload_2-vdatu NO-GAPS.
                CLEAR : l_datum.
                l_datum =  wa_upload_2-vdatu.
                wa_sch_in-req_date = l_datum.
              ENDIF.
              APPEND wa_sch_in TO i_sch_in.
              CLEAR wa_sch_inx.
              wa_sch_inx-itm_number    = wa_items-posnr.
              wa_sch_inx-sched_line    = '0001'.
             IF wa_upload_2-oreason = 'C'.
               wa_sch_inx-updateflag    = c_i.
             ELSE.
              wa_sch_inx-updateflag    = 'U'.
             ENDIF.
              wa_sch_inx-req_qty       = 'X'.
              wa_sch_inx-req_date      = 'X'.
              APPEND wa_sch_inx TO i_sch_inx.
            ENDIF.
            CLEAR : wa_upload_2,
                    wa_items_in,
                    wa_items,
                    wa_items_inx,
                    wa_sch_in,
                    wa_sch_inx.
          ENDLOOP.    "LOOP AT i_upload to wa_UPLOAD_2
    Change Sales Order
          CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
            EXPORTING
              salesdocument               = l_sales_no
              order_header_in             = wa_header_in
              order_header_inx            = wa_header_inx
              SIMULATION                  =
              BEHAVE_WHEN_ERROR           = ' '
              INT_NUMBER_ASSIGNMENT       = ' '
              LOGIC_SWITCH                =
              TABLES
              return                      = i_return
              order_item_in               = i_items_in
              order_item_inx              = i_items_inx
             partners                    = i_partner
              partnerchanges              = i_partner_inx
              PARTNERADDRESSES            =
              ORDER_CFGS_REF              =
              ORDER_CFGS_INST             =
              ORDER_CFGS_PART_OF          =
              ORDER_CFGS_VALUE            =
              ORDER_CFGS_BLOB             =
              ORDER_CFGS_VK               =
              ORDER_CFGS_REFINST          =
              schedule_lines              = i_sch_in
              schedule_linesx             = i_sch_inx
              ORDER_TEXT                  =
              ORDER_KEYS                  =
              conditions_in               = i_cond
              conditions_inx              = i_cond_inx
              EXTENSIONIN                 =
    COMMIT
          CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
             EXPORTING
               wait   = ' '
            IMPORTING
              return = wa_commit.
          WAIT UP TO 5 SECONDS.
    Best regards,
    Prashant

  • Can a Purchase Order (PO) Be Created With Negative Quantity or Price?

    The object is to have a negative line on a PO? Is this possible?

    Hi,
    Oracle Purchasing does not provide functionality to create a Purchase Order with a negative quantity or price.
    Enhancement Request BUG 2457862 NEGATIVE QUANTITIES ON PO LINES has been logged to request this functionality.
    Thanks
    -Arif.

Maybe you are looking for