Userexit to Restrict the VIEW and MODIFY of the Sales Order

Hello Everybody,
I need to do the following task.
I want to restrict to VIEW and MODIFY the sales order for particular sales office or sales group.
I need  user exit for that.
Please help me by providing brief information.
Thanks
M Rahman

Hi Rahman
Instead of changing the DISPLAY and CHANGE status of Sales Order,
i think it would be better if u make a check at the time of SAVE.
When the SO is being saved in VA02,check the sales office or sales group
and then give a error message to the user, saying that he is not authorised to make changes to the
SO for this particular sales office or sales group.
For this you can use the inckude MV45AFZZ,and USER EXIT userexit_save_document.
Sample Code:
IF SALES_OFFICE EQ 'XYZ'.
MESSAGE 'Change not possible for this Sales Office' type 'E'.
ENDIF.
Regards
Hareesh Menon

Similar Messages

  • Restrict the Sales Order Quantity in Integer

    Hi All,
    our system need to restrict the Sales Order Quantity in having no decimal value.  
    We have got the OSS reply as:  
    "Unfortunately I regret to tell you that it is not possible to
    restrict the order quantity number to integer in standard system.
    The number of allowed decimals is defined in the system via SE12.
    In SE12, you can see that for VBAP-KWMENG, the number of allowed decimals is 3. I'm sorry but this is the standard system behavior."
    But we need to avoid programming. Can you anyone suggest any work around methods, like define rounding profile to do the restrictions.
    Regards,
    Simon

    Hello All,
    Thanks for the excellent answere.
    Please anybody can provide us the SAP OSS Note for the same as the reply received from SAP Support.
    We have got the OSS reply as:  
    "Unfortunately I regret to tell you that it is not possible to
    restrict the order quantity number to integer in standard system.
    The number of allowed decimals is defined in the system via SE12.
    In SE12, you can see that for VBAP-KWMENG, the number of allowed decimals is 3. I'm sorry but this is the standard system behavior."
    But we need to avoid programming. Can you anyone suggest any work around methods, like define rounding profile to do the restrictions.
    Regards,
    Farhan

  • Restricting modifying the Sales Order

    Hi Expert,
    Hope you can help on this...
    I have to restrict specific user to modify the Sales Order where Series='SO-BOM', they can only modify this Sales Order with authorization from manager or from specific user....
    Can i do this on TransactionNotification from StoredProcedure?
    Thanks,
    Richard

    Hi Chard
    You can insert this piece of script in Gordon's query by little bit change :
    T0.DocEntry = T2.DocEntry inner join OUSR T1 on T0.UserSign = T1.USERID
         where T0.DocEntry = @list_of_cols_val_tab_del and T1.USER_CODE != N'manager')
    Giridharan V

  • "In FBL5N unable to view purchase order number and the sales order number"

    Hi,
    Below mentioned is the problem we are facing,
    In the Customer Line Item Display (FBL5N) it is vital for us to be able to view the customer's purchase order number as well as the sales order number for each billing document listed by customer.
    We need to be able to extract this information for each customer and import to an excel spread sheet for analysis, specifically for our larger customers that have over 500 plus lines.
    Kindly advise how to go about the same.
    Regards
    Harish

    Dear,
    Please also check note 152335. There, you will find a more detailed            
    explanation of the issue.                                                                               
    The only way to see some information regarding related PO-es in a Vendor       
    line items is a workaround. For example, it is possible to create              
    a substitution in order to fill in one of not currently used fields            
    like Reference, Text, etc.    
    I hope this helps You.
    mauri

  • I wish to modify the name of one of the field name in the sales order.

    HELLO GURRRUS,
                 i wish to modify teh name of one of the field name in the sales ordder.
    what is the procdure,path and steps involved in that.it would be of great help of me if u take some  time and suggest me.
    bye take care hav a happy and peaceful life

    Hi Sameer,
    If you want to change the name or description of the field in the Sales order,
    you have to use the userexit MV45AFZZ and use the Form USEREXIT_FIELD_MODIFICATION.
    Get the help of the ABAPer and decide where do you want to make the change in the Header or the Line items.  Accordingly give the requirements to the ABAPer.
    He will do it.
    Thanks
    Augustine Ponraj

  • Restricting a user(based on Responsibility) from updating the sales order

    Hi,
    We have a requirement here, that for a prticular responsibility the user shouldn't be able to update anything in the sales order. He can although perform below operations -
    1. Query the order to view the details.
    2. Release the OM holds, if any.
    Other than these two things.. He shouldn't be able to make/save any changes to the order. We are using R12.
    Now, what we tried is -
    1. Created a forms personalization, that would check
    if fnd_global.resp_id = <desired resp_id>
    then raise form trigger failure in when-validate-record.
    this is restricting the user to make any change in order. But, issue is he can still book an entered order.
    So, requirement drills down to -
    1. How to restrict the user from booking an entered order.
    2. How to restrict the user to perform any other thing than releasing the hold (from actions).
    Any help regarding this will be highly appreciated. Also, please let me know, if it is possible using Processing constraints or any other standard means.
    Regards
    Bhushan

    i think you are putting this filter on employee table.If you want to apply adat level security then put these filters on groups.create one group and assign al user on which you want to apply data level security.on this group put this filter
    upper("Employee"."DEPARTMENT") = upper(VALUEOF(NQ_SESSION."DEPARTMENT")).
    And create another group and assign Jeff to that group and dont apply any filter on this group.You can apply these filters on individual users also but its a good parctise to make use of groups.
    Regards,
    Sandeep

  • Free Good Qty as non modifiable field in the Sales Order Level

    Dear Friends,
    I have successfully done the config change for the Free Goods, But now i want make the free good line item qty as a non modifiable field in the Sales Order Level.
    How can i do this.. Please advice.
    Thank U,
    Uwanthi

    Hi
    This is a standard behaviour in the system
    kindly use the below program and user exitexit
    MV45AFZZ and use "Userexit_filed_modification"
    Regfards
    Damu

  • Maximum Quantity restriction in the sales order?

    Hi All     
    We need to make restriction of maximum order QTY  with UOM in sales order key combination of sales organization wise / site wise / distribution Channel wise
    While qty is entered for an article in sales order for which maximum sales order qty is maintained in some field (Article master or any other possible field)-, system has to check if the ordered quantity is greater than maximum sales order qty then should display error message and will not allow to process further
    Hope the same is clear.
    Regards,
    C S Javali

    hi
    there is no standard functionality available to set the maximum limit for a material in the sales order.
    You can try using user exit userexit_save_document_prepare in include MV45AFZZ.
    You may need to use Z-table to enter the maximum value for sales organization / site  / distribution Channel / material

  • After creating deliveries, the Bill-to and payer can be updated in the sales order.

    After creating deliveries, the Bill-to and payer can be updated in the sales order.
    Is there any standard customizing avaiable which will not allow the change of bill to party and payer in Sales order after delivery creation?

    Either via sdh0 you can set the field as non-editable or in configuration, if you set the field for BP as not modifiable in Partner Determination for Sales Order Header, then users wont be able to change the partner function in sale order.
    G. Lakshmipathi

  • How to restrict the columns order movement at runtime in 7.3

    Hi Experts
    We are using EP7.3 Portal.
    We have modified the  Cats table in a customized ESS Cats DC . We have added a another table
    say subTotals table (This table does not have header) to calculate the hours as per business requiremnt just below the cats table with proper allignment.
    Now at run time i.e when launched through Iview in the portal, the user can able to
    personalize the columns order of Cats Table (Moving columns from one place to other) by Right click on the
    table>User settings->other-->Re Arrange the columns
    We have 2 tables so moving the first table column order will effect the second table which displays the totals (This is readonly)
    Our requirement is we should not allow the user to change the column order at run time (At least we need to restrict 8 columns outof 13 to 14 columns)
    How can we restrict the columns order through code i.e by controlling the property if any
    Regards
    KALYAN

    nwa->configuration management->infrastructure  --->application modules
    filter the name column with "tcwddispwda"
    select the entry(should be only one after filter)
    select the "web dynpro properties" tab
    select the "default" in the table
    AllowUserPersonalization----->false

  • Not able to get the Quantity and partner details in the sales order created

    Hi Experts,
    I am creating a followup order using the FM "BAPI_BUSPROCESSND_CREATEMULTI" . The parameters iam passing are process type, quantity , sold to party (partner) and product ID. I am able to create a sales order but the Quantity and sold to party (partner) are not getting updated in the the sales order when i check in the transaction CRMD_ORDER. When i check in the crm_orderadm_h table and give the Headerguid , i am able to see the process type and when i check in the crm_order_index table, if i give the header i am not getting the partner no and there are two lines created for one header guid. I am providing the code which i have written. Can anyone please help me in this issue??
    *& Report  ZCREATEORDER_LUCKY_TEST
    REPORT  ZCREATEORDER_LUCKY_TEST.
    DATA : LV_HEADER_GUID  TYPE  GUID_32,
    WA_HEADER             TYPE                   BAPIBUS20001_HEADER_INS,
    ITAB_HEADER           TYPE STANDARD TABLE OF BAPIBUS20001_HEADER_INS,
    ITAB_CREATED_PROCESS  TYPE STANDARD TABLE OF BAPIBUS20001_HEADER_INS,
    ITAB_OBJECTS_TO_SAVE  TYPE STANDARD TABLE OF BAPIBUS20001_GUID_DIS,
    ITAB_PARTNER          TYPE STANDARD TABLE OF BAPIBUS20001_PARTNER_INS,
    LT_PRODUCT_I          TYPE STANDARD TABLE OF BAPIBUS20001_ITEM,
    WA_PRODUCT_I          TYPE                   BAPIBUS20001_ITEM,
    LT_SCHEDLIN_I         TYPE STANDARD TABLE OF BAPIBUS20001_SCHEDLIN,
    WA_SCHEDLIN_I         TYPE                   BAPIBUS20001_SCHEDLIN,
    ITAB_INPUT_FIELDS     TYPE TABLE OF          bapibus20001_input_fields,
    ls_inputfields        TYPE                   bapibus20001_input_fields,
    WA_PARTNER            TYPE                   BAPIBUS20001_PARTNER_INS,
    ITAB_RETURN           TYPE                   STANDARD TABLE OF BAPIRET2,
    WA_OBJECTS_TO_SAVE    LIKE                   LINE OF ITAB_OBJECTS_TO_SAVE,
    ITAB_PRICING          TYPE STANDARD TABLE OF BAPIBUS20001_PRICING,
    WA_PRICING            TYPE                   BAPIBUS20001_PRICING,
    *To store the Objects to be saved.
    WA_CREATED_PROCESS    LIKE LINE OF ITAB_CREATED_PROCESS,
    ITAB_SAVED_OBJECTS    TYPE STANDARD TABLE OF BAPIBUS20001_OBJECT_ID,
    WA_SAVED_OBJECTS      LIKE LINE OF ITAB_SAVED_OBJECTS,
    GC_X type c.
    gc_x = 'x'.
    CALL FUNCTION 'GUID_CREATE'
      IMPORTING
        ev_guid_32 = lv_header_guid.
      CLEAR : WA_HEADER.
    * Passing the respective values from the Header table to internal table.
    WA_HEADER-GUID          =  LV_HEADER_GUID.
    WA_HEADER-PROCESS_TYPE  =  'ZTA'.
    APPEND WA_HEADER TO ITAB_HEADER.
    *Appending the values to the ITAB_HEADER.
    *appending orderadm_i to input fields
    * ls_inputfields-ref_guid =  LV_HEADER_GUID.
    * ls_inputfields-REF_KIND = 'A'.
    ls_inputfields-objectname = 'ORDERADM_I'.
    ls_inputfields-ref_handle = '0000000001'.
    * ls_inputfields-logical_key = ' '.
    ls_inputfields-fieldname = 'ORDERED_PROD'.
    APPEND ls_inputfields TO ITAB_INPUT_FIELDS.
      CLEAR ls_inputfields.
    * ls_inputfields-ref_guid =  LV_HEADER_GUID.
    * ls_inputfields-REF_KIND = 'A'.
    ls_inputfields-objectname = 'ORDERADM_I'.
    * ls_inputfields-logical_key = ' '.
    ls_inputfields-fieldname = 'MODE'.
    ls_inputfields-ref_handle = '0000000001'.
    APPEND ls_inputfields TO ITAB_INPUT_FIELDS.
      CLEAR ls_inputfields.
    ****** CHANGES MADE
    * ls_inputfields-ref_guid =  LV_HEADER_GUID.
    * ls_inputfields-REF_KIND = 'B'.
    ls_inputfields-objectname = 'SCHEDLIN'.
    ls_inputfields-ref_handle = '0000000001'.
    ls_inputfields-fieldname = 'LOGICAL_KEY'.
    APPEND ls_inputfields TO ITAB_INPUT_FIELDS.
    CLEAR ls_inputfields.
    * ls_inputfields-ref_guid =  LV_HEADER_GUID.
    * ls_inputfields-REF_KIND = 'B'.
    ls_inputfields-objectname = 'SCHEDLIN'.
    ls_inputfields-ref_handle = '0000000001'.
    * ls_inputfields-logical_key = ' '.
    ls_inputfields-fieldname = 'QUANTITY'.
    APPEND ls_inputfields TO ITAB_INPUT_FIELDS.
    CLEAR ls_inputfields.
    * ls_inputfields-ref_guid =  LV_HEADER_GUID.
    ls_inputfields-REF_KIND = 'B'.
    ls_inputfields-objectname = 'SCHEDLIN_I'.
    ls_inputfields-ref_handle = '0000000001'.
    * ls_inputfields-logical_key = ' '.
    * ls_inputfields-fieldname = 'MODE'.
    APPEND ls_inputfields TO ITAB_INPUT_FIELDS.
    CLEAR ls_inputfields.
    ****** CHANGES MADE
    WA_PARTNER-REF_GUID =  LV_HEADER_GUID.
    WA_PARTNER-REF_KIND = 'A'.
    WA_PARTNER-REF_PARTNER_HANDLE = '0001'.
    WA_PARTNER-PARTNER_FCT = '00000001'.
    WA_PARTNER-PARTNER_NO =  '10017'.
    WA_PARTNER-KIND_OF_ENTRY =  'C'.
    WA_PARTNER-NO_TYPE = 'BP'.
    WA_PARTNER-DISPLAY_TYPE  =  'BP'.
    APPEND WA_PARTNER TO ITAB_PARTNER.
    *"ADDING VALUES TO CT_ORDERADM_I
      wa_product_i-header        = lv_header_guid.
      wa_product_i-handle        = '0000000001'.
      wa_product_i-ordered_prod  = '12000014'.
      wa_product_i-mode          = 'A'.
      APPEND wa_product_i TO lt_product_i.
    *"ADDING VALUES TO IT_SCHEDLIN_I
      wa_schedlin_i-GUID    =  LV_HEADER_GUID.
      wa_schedlin_i-quantity   = '30'.
      wa_schedlin_i-handle = '0000000001'.
      wa_schedlin_i-mode  =  'A'.
      APPEND wa_schedlin_i TO lt_schedlin_i.
    *  wa_schedlin_i-schedlines = lt_schedlines.
    *"ADDING VALUES TO WA_PRICING
    wa_PRICING-REF_GUID    =  LV_HEADER_GUID.
      wa_PRICING-REF_KIND   = 'A'.
    *  wa_schedlin_i-handle = '0000000001'.
      APPEND wa_PRICING TO ITAB_PRICING.
    *  wa_PRICING-REF_GUID    =  LV_HEADER_GUID.
      wa_PRICING-REF_KIND   = 'B'.
      wa_schedlin_i-handle = '0000000001'.
      APPEND wa_PRICING TO ITAB_PRICING.
    ls_inputfields-ref_guid =  LV_HEADER_GUID.
    ls_inputfields-REF_KIND = 'A'.
    ls_inputfields-objectname = 'PARTNER'.
    ls_inputfields-logical_key = '0001'.
    ls_inputfields-fieldname = 'REF_PARTNER_HANDLE'.
    APPEND ls_inputfields TO ITAB_INPUT_FIELDS.
      CLEAR ls_inputfields.
    ls_inputfields-ref_guid =  LV_HEADER_GUID.
    ls_inputfields-REF_KIND = 'A'.
    ls_inputfields-objectname = 'PARTNER'.
    ls_inputfields-logical_key = '0001'.
    ls_inputfields-fieldname = 'PARTNER_FCT'.
    APPEND ls_inputfields TO ITAB_INPUT_FIELDS.
      CLEAR ls_inputfields.
    ls_inputfields-ref_guid =  LV_HEADER_GUID.
    ls_inputfields-REF_KIND = 'A'.
    ls_inputfields-objectname = 'PARTNER'.
    ls_inputfields-logical_key = '0001'.
    ls_inputfields-fieldname = 'PARTNER_NO'.
    APPEND ls_inputfields TO ITAB_INPUT_FIELDS.
      CLEAR ls_inputfields.
      ls_inputfields-ref_guid =  LV_HEADER_GUID.
    ls_inputfields-REF_KIND = 'A'.
    ls_inputfields-objectname = 'PARTNER'.
    ls_inputfields-logical_key = '0001'.
    ls_inputfields-fieldname = 'NO_TYPE'.
    APPEND ls_inputfields TO ITAB_INPUT_FIELDS.
      CLEAR ls_inputfields.
      ls_inputfields-ref_guid =  LV_HEADER_GUID.
    ls_inputfields-REF_KIND = 'A'.
    ls_inputfields-objectname = 'PARTNER'.
    ls_inputfields-logical_key = '0001'.
    ls_inputfields-fieldname = 'DISPLAY_TYPE'.
    APPEND ls_inputfields TO ITAB_INPUT_FIELDS.
      CLEAR ls_inputfields.
        ls_inputfields-ref_guid =  LV_HEADER_GUID.
    ls_inputfields-REF_KIND = 'A'.
    ls_inputfields-objectname = 'PARTNER'.
    ls_inputfields-logical_key = '0001'.
    ls_inputfields-fieldname = 'KIND_OF_ENTRY'.
    APPEND ls_inputfields TO ITAB_INPUT_FIELDS.
      CLEAR ls_inputfields.
    CALL FUNCTION 'BAPI_BUSPROCESSND_CREATEMULTI'
      TABLES
        HEADER          = ITAB_HEADER
        ITEM            = lt_product_i
        RETURN          = ITAB_RETURN
        PARTNER         = ITAB_PARTNER
        INPUT_FIELDS    = ITAB_INPUT_FIELDS
        CREATED_PROCESS = itab_created_process
        SCHEDULELINE    = lt_schedlin_i
        PRICING         = ITAB_PRICING.
    READ TABLE ITAB_CREATED_PROCESS INTO WA_CREATED_PROCESS WITH KEY GUID = LV_HEADER_GUID BINARY SEARCH.
    WA_OBJECTS_TO_SAVE-GUID = WA_CREATED_PROCESS-GUID.
    * Appending the Guid of the contract to be saved to the internal table
    APPEND WA_OBJECTS_TO_SAVE TO ITAB_OBJECTS_TO_SAVE.
    CALL FUNCTION 'BAPI_BUSPROCESSND_SAVE'
      EXPORTING
        update_task_local = space
        save_frame_log    = GC_X
      TABLES
        objects_to_save   = itab_objects_to_save
        saved_objects     = itab_saved_objects
        return            = itab_return.
    * Calling the Standard BAPI to Commit the transcation.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
    WRITE: / 'HEADER GUID: ',lv_header_guid.
    Any inputs will be highly appreciated!!
    Thanks a lot in Advance.
    Lakshman.

    solved

  • Production Order and Internal Order for each item of the sales order

    Hi
       I am developing Make To Order Report where I have to display the MTO Line Items and non MTO Line Items. For non MTO Line Items I have to display Internal order with Planned and Actual Costs and also Production Order with Planned and Actual Costs. Could anybody tell how to get the Internal order no and production order with Planned and Actual costs for each line item for a sales order.
    Thanks
    Naga

    Hi,
    You can get the Production orders, Planned orders, Internal orders generated for Sales order item from AFPO table (use fields KDAUF-Sales order number & KDPOS-Sales order item). Then to identify the order type use order category (AUTYP) from table AUFK.
    Once you have the Production/internal order, you can ge the cost from COSS and COSP table. Use the object number from AUFK to get the cost entries from COSS & COSP.
    You can use the following sample code as reference.
    Hope this is helps.. (Don't forget to mark it... )
    Form GET_COSTS                                                       *
    Get the material cost, labour hours and the labour cost for the      *
    sales order material.                                                *
    There are no interface parameters to be passed to this subroutine.   *
    FORM GET_COSTS.
      DATA V_OBJNR LIKE AUFK-OBJNR.
    DATA v_menge LIKE vbap-kwmeng.
      SELECT SINGLE OBJNR
        INTO V_OBJNR
        FROM AUFK
       WHERE AUFNR EQ AFPO-AUFNR.
      SELECT * FROM COSS
       WHERE OBJNR EQ V_OBJNR
         AND WRTTP IN ('01', '04'). " p_wrttp. "Labour Cost ( Plan, Actual)
        PERFORM GET_VALUES_FROM_COSS.
      ENDSELECT.
      SELECT * FROM COSP
       WHERE OBJNR EQ V_OBJNR
         AND WRTTP IN ('01', '04')         " p_wrttp
         AND KSTAR NE '0000510033'. " EQ p_kstar2.      "Material Cost
        PERFORM GET_VALUE_FROM_COSP.
      ENDSELECT.
    Get the unit cost of the production order by dividing the production
    cost by the order quantity. The result will be multiplied by the
    GL posting qunatity (Delivery quantity) to get the production cost
    for the quantity being deluivered.
      IF NOT AFPO-PSMNG IS INITIAL.
        OUT_REC-LABOUR_HOURS_ACT = OUT_REC-LABOUR_HOURS_ACT / AFPO-PSMNG.
        OUT_REC-ADDNL_LABOUR_HOURS_ACT =
                          OUT_REC-ADDNL_LABOUR_HOURS_ACT / AFPO-PSMNG.
        OUT_REC-LABOUR_HOURS_PLN = OUT_REC-LABOUR_HOURS_PLN / AFPO-PSMNG.
        OUT_REC-ADDNL_LABOUR_HOURS_PLN =
                         OUT_REC-ADDNL_LABOUR_HOURS_PLN / AFPO-PSMNG.
        OUT_REC-LABOUR_COST_ACT = OUT_REC-LABOUR_COST_ACT / AFPO-PSMNG.
        OUT_REC-ADDNL_LABOUR_COST_ACT =
                         OUT_REC-ADDNL_LABOUR_COST_ACT / AFPO-PSMNG.
        OUT_REC-LABOUR_COST_PLN = OUT_REC-LABOUR_COST_PLN / AFPO-PSMNG.
        OUT_REC-ADDNL_LABOUR_COST_PLN =
                         OUT_REC-ADDNL_LABOUR_COST_PLN / AFPO-PSMNG.
        OUT_REC-MATERIAL_COST_ACT = OUT_REC-MATERIAL_COST_ACT / AFPO-PSMNG.
        OUT_REC-ADDNL_MATERIAL_COST_ACT =
                         OUT_REC-ADDNL_MATERIAL_COST_ACT / AFPO-PSMNG.
        OUT_REC-MATERIAL_COST_PLN = OUT_REC-MATERIAL_COST_PLN / AFPO-PSMNG.
        OUT_REC-ADDNL_MATERIAL_COST_PLN =
                         OUT_REC-ADDNL_MATERIAL_COST_PLN / AFPO-PSMNG.
      ENDIF.
    Multiply the calculated Unit Production costs with the GL quantity to
    get the actual production cost of the quantity delivered.
    Calculation for Labour Hours
      OUT_REC-LABOUR_HOURS_ACT = OUT_REC-LABOUR_HOURS_ACT *
                                 OUT_REC-QUANTITY.
      OUT_REC-ADDNL_LABOUR_HOURS_ACT = OUT_REC-ADDNL_LABOUR_HOURS_ACT *
                                 OUT_REC-QUANTITY.
      OUT_REC-LABOUR_HOURS_PLN = OUT_REC-LABOUR_HOURS_PLN *
                                 OUT_REC-QUANTITY.
      OUT_REC-ADDNL_LABOUR_HOURS_PLN = OUT_REC-ADDNL_LABOUR_HOURS_PLN *
                                 OUT_REC-QUANTITY.
    Calculation for Material Cost
      OUT_REC-MATERIAL_COST_ACT = OUT_REC-MATERIAL_COST_ACT *
                                  OUT_REC-QUANTITY.
      OUT_REC-ADDNL_MATERIAL_COST_ACT =
          OUT_REC-ADDNL_MATERIAL_COST_ACT * OUT_REC-QUANTITY.
      OUT_REC-MATERIAL_COST_PLN = OUT_REC-MATERIAL_COST_PLN *
                                  OUT_REC-QUANTITY.
      OUT_REC-ADDNL_MATERIAL_COST_PLN =
          OUT_REC-ADDNL_MATERIAL_COST_PLN * OUT_REC-QUANTITY.
    Calculation for Labour cost
      OUT_REC-LABOUR_COST_ACT   = OUT_REC-LABOUR_COST_ACT *
                                   OUT_REC-QUANTITY.
      OUT_REC-ADDNL_LABOUR_COST_ACT = OUT_REC-ADDNL_LABOUR_COST_ACT *
                                  OUT_REC-QUANTITY.
      OUT_REC-LABOUR_COST_PLN   = OUT_REC-LABOUR_COST_PLN *
                                  OUT_REC-QUANTITY.
      OUT_REC-ADDNL_LABOUR_COST_PLN = OUT_REC-ADDNL_LABOUR_COST_PLN *
                                  OUT_REC-QUANTITY.
    Get the planned material cost from the total of the planned cost of
    the component materials in the production order confirmations.
      SELECT BWART MENGE MATNR SHKZG FROM AUFM
        INTO (AUFM-BWART, AUFM-MENGE, AUFM-MATNR, AUFM-SHKZG)
       WHERE AUFNR EQ AFPO-AUFNR.
        CHECK AUFM-BWART NE '101'.
        READ TABLE I_MBEW WITH KEY MATNR = AUFM-MATNR
                                   BWKEY = AFPO-DWERK.
        IF SY-SUBRC NE 0.
          SELECT MATNR BWKEY ZPLPR LPLPR PEINH
            FROM MBEW
            INTO I_MBEW
           WHERE MATNR EQ AUFM-MATNR
             AND BWKEY EQ AFPO-DWERK.
            APPEND I_MBEW.
          ENDSELECT.
        ENDIF.
        IF SY-SUBRC EQ 0.
          IF I_MBEW-ZPLPR NE 0.
            IF AUFM-SHKZG EQ 'H'.
              OUT_REC-PLANNED_MATERIAL_COST =
              OUT_REC-PLANNED_MATERIAL_COST +
                           ( I_MBEW-ZPLPR * AUFM-MENGE / I_MBEW-PEINH ).
            ELSE.
              OUT_REC-PLANNED_MATERIAL_COST =
              OUT_REC-PLANNED_MATERIAL_COST -
                           ( I_MBEW-ZPLPR * AUFM-MENGE / I_MBEW-PEINH ).
            ENDIF.
          ELSEIF I_MBEW-LPLPR NE 0.
            IF AUFM-SHKZG EQ 'H'.
              OUT_REC-CURRENT_MATERIAL_COST =
              OUT_REC-CURRENT_MATERIAL_COST +
                           ( I_MBEW-LPLPR * AUFM-MENGE / I_MBEW-PEINH ).
            ELSE.
              OUT_REC-CURRENT_MATERIAL_COST =
              OUT_REC-CURRENT_MATERIAL_COST -
                           ( I_MBEW-LPLPR * AUFM-MENGE / I_MBEW-PEINH ).
            ENDIF.
          ENDIF.
        ENDIF.
      ENDSELECT.
    Get the Future material cost per Unit by deviding the calculated
    Future material cost above with the goods reciept quantity to, then
    multiply the unit cost with the GL quantity to get the Future material
    Cost for the Quantity delivered. (Quantity in the entery from GLPCA
    Table).
      IF NOT AFPO-WEMNG IS INITIAL.
        OUT_REC-PLANNED_MATERIAL_COST =
           OUT_REC-PLANNED_MATERIAL_COST / AFPO-WEMNG * OUT_REC-QUANTITY.
        OUT_REC-CURRENT_MATERIAL_COST =
           OUT_REC-CURRENT_MATERIAL_COST / AFPO-WEMNG * OUT_REC-QUANTITY.
      ENDIF.
    ENDFORM.                               " GET_COSTS
    Form GET_VALUE_FROM_COSP                                             *
    Get the Material cost from COSP table.                               *
    There are no interface parameters to be passed to this subroutine.   *
    FORM GET_VALUE_FROM_COSP.
      FIELD-SYMBOLS: <FS> TYPE ANY.
      DATA: V_COMPONENT TYPE I.
    Cummulate the posting values of all the 16 period buckets as to get
    total production order cost. This is to handle the aprtial posting of
    prodction order values in diffrent periods.
      V_COMPONENT = 15.
      DO 16 TIMES.
        ADD 1 TO V_COMPONENT.
        ASSIGN COMPONENT V_COMPONENT OF STRUCTURE COSP TO <FS>.
        IF COSP-WRTTP EQ '04' AND COSP-KSTAR EQ P_KSTAR2.
          ADD <FS> TO OUT_REC-MATERIAL_COST_ACT.
        ELSEIF COSP-WRTTP EQ '04'.
          ADD <FS> TO OUT_REC-ADDNL_MATERIAL_COST_ACT.
        ELSEIF COSP-WRTTP EQ '01' AND COSP-KSTAR EQ P_KSTAR2.
          ADD <FS> TO OUT_REC-MATERIAL_COST_PLN.
        ELSEIF COSP-WRTTP EQ '01'.
          ADD <FS> TO OUT_REC-ADDNL_MATERIAL_COST_PLN.
        ENDIF.
      ENDDO.
    ENDFORM.                               " GET_VALUE_FROM_COSP
    Form GET_VALUES_FROM_COSS                                            *
    Get the Labour cost and Labour hours from the COSS table.            *
    There are no interface parameters to be passed to this subroutine.   *
    FORM GET_VALUES_FROM_COSS.
      FIELD-SYMBOLS: <FS1> TYPE ANY,
                     <FS2> TYPE ANY.
      DATA: V_COMPONENT1 TYPE I,
            V_COMPONENT2 TYPE I.
    Cummulate the posting values of all the 16 period buckets as to get
    total production order cost. This is to handle the aprtial posting of
    prodction order values in diffrent periods.
      V_COMPONENT1 = 15.
      V_COMPONENT2 = 111.
      DO 16 TIMES.
        ADD 1 TO: V_COMPONENT1, V_COMPONENT2.
        ASSIGN COMPONENT V_COMPONENT1 OF STRUCTURE COSS TO <FS1>.
        ASSIGN COMPONENT V_COMPONENT2 OF STRUCTURE COSS TO <FS2>.
        IF COSS-WRTTP EQ '04' AND COSS-KSTAR EQ P_KSTAR1.
          ADD <FS1> TO OUT_REC-LABOUR_COST_ACT.
          ADD <FS2> TO OUT_REC-LABOUR_HOURS_ACT.
        ELSEIF COSS-WRTTP EQ '04'.
          ADD <FS1> TO OUT_REC-ADDNL_LABOUR_COST_ACT.
          ADD <FS2> TO OUT_REC-ADDNL_LABOUR_HOURS_ACT.
        ELSEIF COSS-WRTTP EQ '01' AND COSS-KSTAR EQ P_KSTAR1.
          ADD <FS1> TO OUT_REC-LABOUR_COST_PLN.
          ADD <FS2> TO OUT_REC-LABOUR_HOURS_PLN.
        ELSEIF COSS-WRTTP EQ '01'.
          ADD <FS1> TO OUT_REC-ADDNL_LABOUR_COST_PLN.
          ADD <FS2> TO OUT_REC-ADDNL_LABOUR_HOURS_PLN.
        ENDIF.
      ENDDO.
    ENDFORM.                               " GET_VALUES_FROM_COSS

  • ATP check in the Sale order Processing and CO06 transaction (Confirm Qty)

    Hi All,
    While creating the Sale order, After performing the ATP check and saving the document i have called an user exit to make the confirmed Quantity equal to ZERO when the delivery block is set (As requested by customer). That is working fine...
    But the same confirmed Quantity of ZERO is not reflecting in CO06 transaction. Its showing the old value that the value before setting the delivery block.
    I have identified the table VBBE-VMENG which stores the confirmed quantity in CO06 transaction...
    Could you please help me know any USER EXITS or any other solution to change the confirmed quantity to ZERO in CO06 transaction also while delivery block is set in the sale order.
    Thanks &Regards,
    Navaneeth

    Hi All,
    Please help me by providing some clues on this issue...
    Regards,
    Navaneeth

  • Create and Pack Handling Units in the Sales Order Using HU_CREATE_ONE_HU

    Hello Experts,
    I am trying to use HU_CREATE_ONE_HU function module to create a handling unit and pack it with specific line items in the sales order program in the background.  I am able to create the handling unit and pack it but it does not get associated to the sales order / line item.  If you look at the sale order's packing proposal, it does not show it packed.  If I look at VEKP / VEPO, I see where it was created but there is no value for vbeln or the posnr I proposed.  Below is the code, I am using.  Does anyone know what I am doing wrong or is there another function module I can use?
    LOOP AT t_vbap.
        CLEAR:   is_header_proposal, it_items, es_header, et_items, et_messages, t_vbap2.
        REFRESH: et_items, et_messages, t_vbap2.
        is_header_proposal-exidv          = '$1'.
        is_header_proposal-exida          = 'A'.
        is_header_proposal-vhilm          = 'UNIBOX'.
        is_header_proposal-hu_status_init = 'A'.     "planned
        is_header_proposal-status         = '0001'.  "planned
        "get the components that make up this subassembly including the parent.
        SELECT * FROM vbap
          INTO TABLE t_vbap2
         WHERE vbeln = t_vbap-vbeln
           AND posnr = t_vbap-posnr. "parent
        SELECT * FROM vbap
          APPENDING TABLE t_vbap2
         WHERE vbeln = t_vbap-vbeln
           AND uepos = t_vbap-posnr.  "children
        "now load the items to be packaged in the proposal
        LOOP AT t_vbap2.
          CLEAR: it_item.
          it_item-velin    = '1'. "material item
          it_item-belnr    = t_vbap2-vbeln.
          it_item-posnr    = t_vbap2-posnr.
          it_item-quantity = t_vbap2-kwmeng.
          it_item-meins    = t_vbap2-meins.
          it_item-matnr    = t_vbap2-matnr.
          it_item-werks    = t_vbap2-werks.
          it_item-lgort    = t_vbap2-lgort.
          APPEND it_item TO it_items.
        ENDLOOP.
        CALL FUNCTION 'HU_INITIALIZE_PACKING'.
        CALL FUNCTION 'HU_CREATE_ONE_HU'
          EXPORTING
            if_create_hu       = 'X'
            is_header_proposal = is_header_proposal
            it_items           = it_items
          IMPORTING
            es_header          = es_header
            et_items           = et_items
            et_messages        = et_messages
          EXCEPTIONS
            input_missing      = 1    " Data that is Necessary for Creation is Missing
            not_possible       = 2    " HU Creation not Possible
            header_error       = 3    " HU Header Data Contains Incorrect Data
            item_error         = 4    " Items Cannot be Created
            serial_nr_error    = 5    " Serial Number Error
            fatal_error        = 6    " Internal Error
            OTHERS             = 7.
        CALL FUNCTION 'HU_POST'
          EXPORTING
            if_synchron = space
            if_commit   = 'X'.
      ENDLOOP.
    Thanks for the help.
    Laura

    The abap statement does not make sense.
    xlips_high_posnr = ( lips-posnr / tvlk-incpo ) * tvlk-incpo
    posnr & incpo are both type numc length 6.
    Here is my recommendation to catch the divide by zero error.
      data: l_oref    type REF to cx_root.
      data: l_text    type string.
      TRY.
            clear l_text.
             xlips_high_posnr  = lips-posnr / tvlk-incpo.
            CATCH cx_sy_zerodivide INTO v_oref.
              l_text = l_oref->get_text( ).
            CLEANUP.
    *      Put your code to do further processing if it is divide by zero
      ENDTRY.

  • Hi All, We are in to Release 11.5.10.2.There is a specific requirement to Prevent users from creating Manual Sales Orders in oracle and yet users should be able to book the Sales Orders Imported from CRM system into Orcale.Please advise.

    Hi All, We are in to Release 11.5.10.2.There is a specific requirement to Prevent users from creating Manual Sales Orders in Oracle and  yet users should be able to book the Sales Orders Imported from CRM system into Orcale.Please advise.

    Thanks for your advise.
    However, I missed to mention that we have two set of users  One is for Finished Goods and another for Spares.
    Only Spares users need to be prevented from creating Direct/Manual Sales Orders in Oracle.
    As you suggested, if this will be done at Form level, that may Disallow FG users also to create Manula Sales Orders which should not be the case.
    Further, I tried to test one scenario through Processing Constraints but it did not work.
    Application
    OM
    Validation Type
    Entity
    Temp
    Short Name
    TBL
    Validation Semantics
    Created By
    Equal To
    User(Myself)
    Processing Cosntraint
    Application
    OM
    Entity
    Order Header
    Constraint
    Operation
    User Action
    Create
    Not Allowed
    Conditions
    Group
    Scope
    Validation Entity
    Record Set
    Validation Template
    101
    Any
    Order Header
    Order
    Above Created
    Please advise.

Maybe you are looking for