Base price calculation in sales order using Routines.
Dear all,
I have a requirement related to usage of routine in pricing procedure. The requirement is as given below.
A base price for a material is entered in the contract manually using a customized condition record.Later a sales order will be raised with reference to contract. now we need to bring the price entered in the contract to sales order after some calculations done using a customized "Z TABLE"
We are trying to use routines to trigger to calculate the base price in the sales order.
Please suggest what type of routine to be used in such cases(ex formula,pricing etc)
Also please go through the below mentioned example for better understanding.
Contract price : Quantity 3: base price 10,000 per day Total : 30,000 perday
ZTABLE : number of days per month will be maintained in the table based on the working days.
Sale Order : Quantity 1 : Month working days 23 total 2,30,000 (We need to calculate this total and display as base price in sales order)
Please suggest how to address this using routines.
Dear Mudigonda,
As per your scenario you are creating sales order with reference to the contract and here in contract you are maintaining the manual price . that means the same manual price has to copy to sales order level then as per the calculation rule it will multiply with your Z table value .
For this requirement you can make some changes in copy control from contract to sales order, here at item category level you have to change pricing type to 'B' so that what ever your manual price value will populate to sales order level after that due to calculation rule value will change .
Regards,,
C.B Reddy.
Similar Messages
-
Bottom/base price check in Sales order processing
Hi
In my company we are using process Sales Order > DO > Billing. Same pricing procedure for sales document types and billing types. No pricing procedure for DO. Our management wants to implement bottom price check in sales order processing e.g there must be one sale price on which sale invoice will be booked and there must also be one static price maintained and system will check after all taxes and discounts calculation that net value should not be less then bottom price.
Currently we are using user exit in enhancement MV45AFZZ. Our ABAPER has written logic in this of following scenario. We have maintained commercial price in ZCOM condition type and bottom price in ZBAS condition type. Lets take and example
ZCOM = Sale price= 500
ZDIS = Discount = 100
Net value/Amount for credit check 500-100 = 400
ZBAS Bottom price = 450
In above scenario system should not allow to save sale order/billing document and give error "Sale price is below bottom price" Then user will change the discount from 100 to 50 and Net value will be then 450 and system will allow to save sale order/billing document.
I want to to do this in Pricing procedure pricing routines. Please tell me is it possible with calculation types? Im wondering if we can do this in enhancement then we must write the same logic in VOFM pricing routine and we can control this from there too. In our current ABAP check everything is working fine but I just want to minimize the use of ABAP checks and enhancements and control the things from functional side not from ABAP.
Please let me know if someone need more clarification or someone have any productive suggestions in this regard. If there is any other solution it will be highly appreciated.
Thanks in advance.Similar functionality is already there, where if the net price of an item differs from "Customer expected price" (conditions EDI1/EDI2) then SAP automatically pushes the order into incompletion. You can ask the developer to see how EDI1 is used in the pricing logic.
However, the condition EDI1 is used to check if the item value is different to Customer expected price in case of EDI orders and is not standard for your requirement. But you get my drift, that you can have your own condition in the pricing procedure that will fetch the base price value and can be used in the logic to show an error message (to stop order processing) or push into incompletion log similar to condition EDI1 -
Cannot set item's price in new sales order using E-Commerce for ByDesign.
Hello,
I'm working on a program to create zero value sales orders in my companies SAP system to help track warranties. Every portion of this program is straight forward except for setting an item's list price to zero. I'm using C# .NET. Below is my code to create the SalesOrderMaintainRequestItem. Any advice would be greatly appreciated.
private SalesOrderMaintainRequestItem[] GetItems(Warranty warranty) // Custom Warranty Object
int count = warranty.LineItems.Count; // Warranty object has an array of line items
SalesOrderMaintainRequestItem[] item = new SalesOrderMaintainRequestItem[count];
for (int i = 0; i < count; i++) // for each line item in the warranty object
item[i] = new SalesOrderMaintainRequestItem();
item[i].BuyerID = _ID;
item[i].ItemProduct = new SalesOrderMaintainRequestItemProduct();
item[i].ItemProduct.ProductID = new NOCONVERSION_ProductID();
item[i].ItemProduct.ProductID.Value = warranty.LineItems[i].ReplaceWith;
item[i].PriceAndTaxCalculationItem = new SalesOrderMaintainRequestPriceAndTaxCalculationItem();
item[i].PriceAndTaxCalculationItem.ItemMainDiscount = new SalesOrderMaintainRequestPriceAndTaxCalculationItemItemMainDiscount();
item[i].PriceAndTaxCalculationItem.ItemMainDiscount.Rate = new Rate();
item[i].PriceAndTaxCalculationItem.ItemMainPrice = new SalesOrderMaintainRequestPriceAndTaxCalculationItemItemMainPrice();
item[i].PriceAndTaxCalculationItem.ItemMainPrice.Rate = new Rate();
item[i].PriceAndTaxCalculationItem.ItemMainPrice.actionCode = ActionCode.Item01; // tried all the options for this one
item[i].PriceAndTaxCalculationItem.ItemMainPrice.Rate.DecimalValue = 1.0M; // trying to set it as $1 just for testing, will be 0 when live
// past tests that didn't work
//item[i].PriceAndTaxCalculationItem.ItemPriceComponent = new SalesOrderMaintainRequestPriceAndTaxCalculationItemItemPriceComponent[1];
//item[i].PriceAndTaxCalculationItem.ItemPriceComponent[0] = new SalesOrderMaintainRequestPriceAndTaxCalculationItemItemPriceComponent();
//item[i].PriceAndTaxCalculationItem.ItemPriceComponent[0].Rate = new Rate();
//item[i].PriceAndTaxCalculationItem.ItemPriceComponent[0].Rate.BaseDecimalValue = 1.0M;
//item[i].PriceAndTaxCalculationItem.ItemPriceComponent[0].Rate.DecimalValue = 1.0M;
//item[i].PriceAndTaxCalculationItem.ItemPriceComponent[0].Rate.CurrencyCode = "USD";
//item[i].PriceAndTaxCalculationItem.itemPriceComponentListCompleteTransmissionIndicator = true;
item[i].ItemScheduleLine = new SalesOrderMaintainRequestItemScheduleLine[1];
item[i].ItemScheduleLine[0] = new SalesOrderMaintainRequestItemScheduleLine();
item[i].ItemScheduleLine[0].Quantity = new Quantity();
item[i].ItemScheduleLine[0].Quantity.Value = warranty.LineItems[i].ReplaceQty;
return item;Hi Joshua,
it's a long time ago and I hope you were able to solve your issue. For others who want to change prices in sales orders the following might be helpful:
It is not possible to set the price of a sales order in the create webservice call. You need to create the sales order first and then call the webservice a second time with actionCode="02" (Update).
The following is an extract from the sales order webservice documentation:
Node – PriceAndTaxCalculation
A price and tax calculation is the summary of the determined price and tax components for a business case. A specification of the general procedure for price and tax determination and valuation using attributes those are characteristic or relevant for the whole object.
Note: PriceAndTaxCalculation cannot be created but can only be modified. So this means that if the customer wishes to change the Discount or Freight charge, then the customer has to create the order first and then make a second web-service request to the update this sales order with the pricing information that is to be changed.
For the update you only need to send the ID of the sales order, the IDs of the items and the PriceAndTaxCalculation node.
The following would be an easy XML example for the update call:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:glob="http://sap.com/xi/SAPGlobal20/Global">
<soapenv:Header/>
<soapenv:Body>
<glob:SalesOrderBundleMaintainRequest_sync>
<SalesOrder>
<ID>1234</ID>
<Item actionCode="02">
<ID>10</ID>
<PriceAndTaxCalculationItem actionCode="02">
<ItemMainPrice>
<Rate>
<DecimalValue>5.00</DecimalValue>
<CurrencyCode>USD</CurrencyCode>
</Rate>
</ItemMainPrice>
</PriceAndTaxCalculationItem>
</Item>
</SalesOrder>
</glob:SalesOrderBundleMaintainRequest_sync>
</soapenv:Body>
</soapenv:Envelope>
If you need further help with webservices or C#, let me know.
Best regards,
Felix -
Price calculation at sales order level
Hello Gurus,
This is poultry industry scenario: Cutomer is ordering the quantity in numbers example the :material is : Live Birds: 500 EA order quantity but the price should be calculated in KG wise for the birds quantity in the sales order .How this can be done in price calculation, looking for your inputs
Thanks in advance
Regards
VenkatHi,
While creating the Material you have the option to enter the sales unit in the sales oganisation 1 view
Enter the Sales unit as KG and maintain the relation from EA to KG ( as 500 EA = 1KG)
Now maintain the condtion records for the Base price as KG
Now try to create the sales order with KG, automatically the Price will be calculated Per KG and displayed
Hope it is clear
Please check and revert
regards,
santosh -
Net price calculation in sales order
Hi
In sales order condtions the current flow is as follows:
sales price PR00 8.36
insurance ZZC0 0.03
So the total Net value is 8.39 inr
But the client requirement is, the total net value should be 8.36 only. Insurance value should not add to the net price, but it should display in sales order condtions.
we can do the pricing as statistical in pricing procedure for insurance. But client is not accepting for that.
please letme know is there any other alternative way to get the required net value without insurance.
look forward for your answers.
thanks in anticipation.
br,
Harihei hari,
what's the reason customer reject to use statistical cond type?
i think the solution is using statistical condition type, as long as that insurance is not posted to FI (G/L account).
you can put your total net value exclude insurance by maintain FROM TO in pricing procedure.
STEP COUNTER COND TYPE DESC FROM TO
10
750 PR00 BASIC PRICE
799 ZZZZ Insurance
800 NET VALUE FOR ITEM 10 798
the net value for item will only contain cond type PR00, cond type ZZZZ will no be updated in net value for item.
best Regard,
Hendry -
Price is not being updated when creating a sales order using DTW oOrders
Hello experts,
When I create a sales Order using DTW (oOrders), the information in the input files document.csv and document_lines.csv is updated with no problem, except the price. The price is being ignored from the input files.
Is there something that I must considered when trying to update the price of a sales order using the DTW?
The field "price" was mapped in the source and target fields in DTW.
Here is the document_lines.csv
RecordKey,LineNum,AccountCode,Address,ItemCode,LineTotal,Price,Quantity,ShipDate,WarehouseCode,TaxCode
RecordKey,LineNum,AccountCode,Address,ItemCode,LineTotal,Price,Quantity,ShipDate,WarehouseCode,TaxCode
1,1,_SYS00000000059, ,30PA08-0360-25,1,11.2,3,20110702,V08,A5
1,2,_SYS00000000059, ,30PA08-0707-25,1,15.2,3,20110702,V08,A5
1,3,_SYS00000000059, ,30PA08-0707-22,1,18.3,3,20110702,V08,A5
And the document.csv:
RecordKey,DocEntry,CardCode,DocDate,DocDueDate,DocTotal
RecordKey,DocEntry,CardCode,DocDate,DocDueDate,DocTotal
1, ,c-6167,20110702,20110702,2
Thank you for your help
Jorge ManzoHi,
Try to re-create your dtw using my template,and use text tab when saving your template.
SO-Header
RecordKey CardCode CardName Comments DocDate DocDueDate DocNum
RecordKey CardCode CardName Comments DocDate DocDueDate DocNum
1 24-25 MANUFACTU 24-25 MANUFACTURING 4/5/2010 4/15/2010 11142
SO-LINE
RecordKey linenum itemcode qty uom PriceAfterVAT Price SalesPersonCode
RecordKey linenum itemcode qty uom PriceAfterVAT Price SalesPersonCode
1 0 SHAFT HEX 7/8" 1 pc 4536 4050 CRIS
Note : Line -(LINE NUM and QTY is important upon computation of Price if SO is ITEM TYPE Document.
hope this will help you!
Regards,
Darius -
Final price of the Sales Order calculation on payment term
Hi,
Out Business requirement as follows.
1) one ZNAP pricing condition will be maintained by the monthly wise by business for pricing. this is a statistical condition only checking at sales order level only. this condition will check with Final price of the Sales order.
Now the requirement is
1) based on payment term of the Sales Order. plus if its a credit payment if the its CASH payment. these deduction should be added to ZNAP condition, and same will calculate with Final price, while creating Sales order.
For Example:
ZANP condition maintained 1000 USD.
while creating the SO:
If the payment term of the customer: PT30, ( it means payment with be in 30 days of the bill creation date)
system should do the below calculations
1) Scenario
Sales Order: Final price : 1500 USD( maintained by the Sales User while creating the SO)
ZNAP price : 1000 USD
according payment term 30 days 20 USD ( as per table maintenance for calculation of the payment term.)
Calcuation: 1000+20= 1020 (approximate need to add as interest rate)
Then final it should display final price 1500-1020= 480 USD.
2) Scenario:
If the payment term Cash:
ZNAP : 1000 - 20= 980 ( approximately and deduct, from the condition due to cash payment its like discount)
calucalte" 1500-980= 520 difference
this purely internal pricing calculation with final price...
pl let me know how to get this in the pricing. and payment could be 30 days, 45 days 60 days etc.
Thanks.Hi M Sham,
I believe your requirement can not be met with Standard pricing and you will have to create Routines for getting this result.
From scenario I believe you will be doing below points:
You should Create Z-Table with Payment Term and respective rates against those payment Term.
You should create a statistical condition type(Ex. ZNP1) and create Calculation Type routine with Logic to get KOMK-ZTERM field and derive value from Z-Table and update XKWERT field.
Calculate addition of ZNAP and ZNP1 (With +ve or -ve Signs)
And then again make deduction of derived value from Finale Value.
Do let me know if I have misunderstood your question.
Regards,
MJ. -
Expected Price ED1 EDI2 Sales Order & Incompletion issues re: Delivery/Bill
Hi,
We are using ED1 and EDI2 conditions for expected price on the sales order to trigger incompletion. This works fine, and it's possible to use V.25 to release or manually adjust the pricing conditions to match.
However we have problems in the way it is working re: Header/Item - if say we have two lines, line10 EDI1/2 prices are ok, complete; line 20 EDI1/2 conditions also added but incorrect and therefore incomplete.
Now when user trys to create a Delivery - they can create a delivery for line 10 but the line 20 errors because it is incomplete. This at line level would be ok, if we could subsequently Bill this line, but doing this through VF01 errors because of message 'VF055 (VF)055 Pricing error in document'
The only way to clear it is to clear line 10 on the sales order, say V.25 which then allows Line 10 to also be Delivered and Billed.
The above is with incompletion status group 06 which should prevent Delivery & Billing. Alternatively we could use Incompletion status 02, which blocks Delivery but allows Billing.
However this is inconsistant with the EDI1/2 conditions - Delivery seems to be blocked at the Item Level, but Billing at Header Level.
Is there a solution? Ideally we want the either:-
i) Delivery to prevented if any line is incomplete for EDI1/2, or
ii) Billing to be prevented only if the line Billed on the Delivery is incomplete on the Sales Order, not any line.
Any advice appreciated.Hi,
I suggest you check copy control (delivery->billing) at item level in tr. VTFL.
Do you use standard routine in 'copying requirements' ? If needed you can also create custom routine that would not raise error for your scenario.
Regards,
Dominik Modrzejewski -
Dear SD,
Normallly we enterd the Price in the Sales Order for a Finished Goods. Is there any other way, that Sales Order Directly Picks the Cost from Pricing Procedure.
REgardsHi,
I understood that you need the following clarifications.
1. VPRS: This is cost price. For example, you are doing trading business and you buy an item for Rs. 125. This is cost price. This price is maintained in material master in Accounting view in the field Standard Price.
2. PR00: This is selling price. This includes the profit. In this example, say it is 200. This is maintained in Condition records. The transaction code is VK11.
3. Pricing Procedure: Both of the condition types (VPRS, PR00) are maintained in the pricing procedure. Please check the standard pricing procedure RVAA01.
If the condition type is not maintained in your pricing procedure, you can add the condition type VPRS in your pricing procedure and assign the requirement as 4 (Cost). Enter tick mark in u2018Statisticsu2019.
If you create a sales order, you will get the value of PR00 (selling price) and the Cost price (VPRS) in the sales order. Sales order is a document that can be sent to the customer to confirm the sales. So, here you do not want to show the cost price of the item. That is why the condition is not selected for print. If you are dealing with your associate companies and you want to print the cost price in the sales order, you can print the cost price VPRS in the sales order. To do this, select u2018Xu2019 in print column of the pricing procedure for Condition type VPRS. Hereafter you can print the cost price of the item in the sales order. But it should be printed appropriately with the help of an ABAPer.
4. VPRS u2013 Statistical: VPRS is always maintained as statistical. This is not used for updating financial entries while creating billing; but it is used to find the profit margin. Whenever the cost price of the material changes, we have to update the cost price (VPRS) by transaction code MR21.
5. Stock value: While calculating warehouse stock by transaction code MB52, the system takes the value given in the material master in accounting view. The value shown in VPRS and Value taken for stock valuation are one and same. Stocks are evaluated on cost price; not on selling price.
Hope this information will be useful to you.
Regards,
K Bharathi -
Hi All,
In standard system the net price of a sales order is given by the condition type PR00. Is it possible to change the source of net price to customer-defined condition type like ZFMA?
Thanks + Best Regards
JeromeCondition Type: If existing condition type meets the requirement, we need not create a new condition type. Considering the requirement for new condition type, the configuration will be done in spro as follows: IMG --> Sales & Distribution --> Basic Function --> Pricing Control --> Condition Type. It is always recommended to copy an existing similar condition type 'PR00' & copy as 'ZMFA'.
General process for configuring pricing procedure:
In SD, Pricing Procedure is determined based on Sales Area (Sales Organization + Distribution Centre + Division) + Customer Pricing Procedure + Document Pricing Procedure. Sales Area is determined in Sales Order Header Level. Customer Pricing Procedure is determined from Customer Master. Document Pricing Procedure is determined from Sales Document Type / Billing Type (if configured). Once the pricing procedure is determined, Condition records are fetched. If appropriate condition records are found, the price is determined. If Mandatory pricing condition is missing, system will through an error message.
<b>In SD, the steps to configure Pricing procedure are as under:</b><b>Step 1:</b>
Condition table: If existing condition table meets the requirement, we need not create a new condition table. Considering the requirement for new condition table, the configuration will be done in spro as follows: IMG --> Sales & Distribution --> Basic Function --> Pricing Control --> Condition Table (select the required fields combination, which will store condition record).
<b>Step 2:</b>
Access Sequence: If existing access sequence meets the requirement, we need not create a new access sequence. Considering the requirement for new sequence, the configuration will be done in spro as follows: IMG --> Sales & Distribution --> Basic Function --> Pricing Control --> Access Sequence (Access sequence is made up of Accesses (Tables) & the order of priority in which it is to be accessed. Here we assign the condition table to access sequence.
<b>Step 3:</b>
Condition Type: If existing condition type meets the requirement, we need not create a new condition type. Considering the requirement for new condition type, the configuration will be done in spro as follows: IMG --> Sales & Distribution --> Basic Function --> Pricing Control --> Condition Type. It is always recommended to copy an existing similar condition type & make the neccessary changes. Here we assign Access sequence to Condition type.
<b>Step 4:</b>
a. Pricing Procedure: It is recommended to copy a similar pricing procedure & make the neccesary changes in new pricing procedure. Pricing Procedure is a set of condition type & arranged in the sequence in which it has to perform the calculation. Considering the requirement for new Pricing Procedure, the configuration will be done in spro as follows: IMG --> Sales & Distribution --> Basic Function --> Pricing Control --> Pricing Procedure --> Maintain Pricing Procedure.
b. Pricing Procedure: After maintaining the pricing procedure the next step will be determination of pricing procedure. Configuration for determining pricing procedure in SPRO is as follows: IMG --> Sales & Distribution --> Basic Function --> Pricing Control --> Pricing Procedure --> Determine Pricing Procedure.
<b>Step 5.</b>
Condition record: Condition record is a master data, which is required to be maintained by Core team / person responsible from the client. During new implementation, the condition records can be uploaded using tools like SCAT, LSMW, etc.
It is assumed that document pricing procedure, customer pricing procedure , ... are in place.
Regards,
Rajesh Banka
Reward points if helpful. -
Problem while creating sales order using BAPI
Hi all,
i am creating a sales order from the purchase order data.
when my client will send a PO in EDI format, my 3rd party edi tool will convert that edi formatted PO to text format. then i will upload that text formatted PO to my program then i will create a SO from those uploaded PO data using BAPI BAPI_SALESORDER_CREATEFROMDAT2.
but,no sales order is being created.& also i am not getting any return message.by debugging also, i am not getting the error.plz suggest where i am doing mistake.below is the coding.
DATA:
gfilename LIKE rlgrap-filename.
*--Internal tables
DATA: BEGIN OF i_item OCCURS 50. "Create Material Document Item
INCLUDE STRUCTURE BAPISDITM .
DATA: END OF i_item .
DATA: BEGIN OF i_partner OCCURS 20. "Return parameter
INCLUDE STRUCTURE BAPIPARNR.
DATA: END OF i_partner.
DATA: BEGIN OF i_schedule OCCURS 20. "Return parameter
INCLUDE STRUCTURE BAPISCHDL .
DATA: END OF i_schedule.
DATA: BEGIN OF i_cond OCCURS 20. "Return parameter
INCLUDE STRUCTURE BAPICOND .
DATA: END OF i_cond.
DATA: BEGIN OF i_part OCCURS 0, " Internal table for split data
part(20),
END OF i_part.
DATA: BEGIN OF i_return OCCURS 20. "Return parameter
INCLUDE STRUCTURE bapiret2.
DATA: END OF i_return.
*-- Work areas
DATA: BEGIN OF wa_header . "sales Document Header Data
INCLUDE STRUCTURE BAPISDHD1.
DATA: END OF wa_header .
*DATA: BEGIN OF wa_return . "Output Structure
INCLUDE STRUCTURE BAPIRET2.
*DATA: END OF wa_return .
DATA: begin of sorder.
INCLUDE STRUCTURE BAPIVBELN.
DATA: end of sorder.
data:begin of t_upload,
ebeln(10), "PO no(seagate)
aedat like sy-datum , "PO date
bsart(4) , "PO type
vdatu like sy-datum , "requested delivery date
kunnr(10) , "customer no-sold-to-party
kunak like vbak-kunnr, "bill-to-party
name1_s(20), "name1 of sold-to-party
name2_s(15), "name2 of sold-to-party
land1_s(3), "country
ort01_s(10), "city
regio_s(3), "region(state/province)
pstlz_s(10), "postal code
adrnr_s(10), "address
bstkd_e(10), "end customer purchase order
posex(6), "end customer PO line no(item no)
kdmat(18), "end customer material no(part no)
kunag(10), "ship-to-party
name1_c(20), "name1 of ship-to-party
name2_c(15), "name2 of ship-to-party
land1_c(3), "country
ort01_c(10), "city
regio_c(3), "region(state/province)
pstlz_c(10), "postal code
adrnr_c(10), "address
posnr(6), "item no(seagate PO line no)
pstyv(4), "item category
matnr(18), "material no(seagate 9 digit part no)
zmeng(13), "Target quantity in sales unit
vrkme like vbap-vrkme, "sales unit
meins(3), "UOM
posnr_tot like vbap-posnr,"Total no. of line items
werks(4), "plant
vstel like vbap-vstel, "shipping point
empst(10), "receiving point
shtyp(4), "shipment type
route(6), "route
vsbed(2), "shipping conds
rkfkf like vbap-rkfkf, "method of billing for co/ppc orders
zterm(4), "terms of payment key
inco1(3), "F.O.B inco term1
inco2(3), "F.O.B inco term2
end of t_upload.
Data: wa_upload like t_upload,
i_upload like standard table of t_upload.
Data:v_kunnr like kna1-kunnr,
v_posnr like vbap-posnr,
v_matnr like vbap-matnr,
v_zmeng like vbap-zmeng,
v_kunag like kna1-kunnr.
*---Constants
CONSTANTS: c_comma TYPE c VALUE ',', " For splitting data at commas
c_01(2) TYPE c VALUE '01', " For movement code in Bapi
c_b TYPE c VALUE 'B', " For mvt. Indicator in Bapi
c_creat(5) TYPE c VALUE 'CREAT', " For button text
c_clear(5) TYPE c VALUE 'CLEAR', " For clear button
c_mvmt(4) TYPE c VALUE 'MVMT',
c_ok(2) TYPE c VALUE 'OK',
c_error(5) TYPE c VALUE 'Error'.
*--SELECTION SCREEN DESIGN--
SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME.
PARAMETERS:
p_auart LIKE vbak-auart, " order type
p_vkorg LIKE vbak-vkorg, " sales org
p_vtweg LIKE vbak-vtweg, " dist channel
p_spart LIKE vbak-spart, " division
p_vkgrp LIKE vbak-vkgrp, " sales group
p_vkbur LIKE vbak-vkbur, "sales office
p_file(256) default 'c:/saleorder.txt'. "File name
SELECTION-SCREEN END OF BLOCK blk1.
SELECTION-SCREEN PUSHBUTTON 15(10) v_create USER-COMMAND creat.
SELECTION-SCREEN PUSHBUTTON 40(10) v_clear USER-COMMAND clear.
INITIALIZATION -
INITIALIZATION.
v_create = c_creat .
v_clear = c_clear.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
PERFORM selectfile USING p_file.
*--AT SELECTION_SCREEN--
AT SELECTION-SCREEN .
IF sy-ucomm = c_clear.
PERFORM f_clear.
ELSE.
IF sy-ucomm <> c_mvmt.
**--- Validating the input data.
PERFORM f_check_inputs.
ELSEif sy-ucomm = c_creat.
*--- Validating the input data.
PERFORM f_check_inputs.
*-- Uploading the PO data.
PERFORM f_PO_upload.
*---checking the PO data
PERFORM f_check_upload_data.
*---create sales order from PO data
PERFORM f_Sales_order_create.
ENDIF.
FORM f_PO_upload.
gfilename = p_file.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
filename = gfilename
filetype = 'DAT'
TABLES
data_tab = i_upload
EXCEPTIONS
conversion_error = 1
file_open_error = 2
file_read_error = 3
invalid_type = 4
no_batch = 5
unknown_error = 6
invalid_table_width = 7
gui_refuse_filetransfer = 8
customer_error = 9
OTHERS = 10.
IF sy-subrc <> 0.
MESSAGE i398(00) WITH '(WS_UPLOAD)'
' Errors occured with exception '
sy-subrc.
ENDIF.
ENDFORM. " f_PO_upload
*& Form selectfile
text
-->P_P_FILE text
FORM selectfile CHANGING value(filename) TYPE c.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = gfilename
def_path = 'C:\'
mask = ',*.txt.'
mode = 'O'
title = 'Select File Name'
IMPORTING
filename = filename
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.
ENDFORM. " selectfile
FORM f_Sales_order_create.
PERFORM f_fill_header.
PERFORM f_fill_partner.
PERFORM f_fill_item.
PERFORM f_call_BAPI.
ENDFORM. " f_Sales_order_create
*& Form f_fill_header
text
--> p1 text
<-- p2 text
FORM f_fill_header.
move p_auart to wa_header-doc_type.
move p_vkorg to wa_header-sales_org.
move p_vtweg to wa_header-distr_chan.
move p_spart to wa_header-division.
move p_vkgrp to wa_header-sales_grp.
move p_vkbur to wa_header-sales_off.
Read table i_upload into wa_upload index 1.
move wa_upload-ebeln to wa_header-purch_no_c.
move wa_upload-aedat to wa_header-purch_date.
move wa_upload-bsart to wa_header-po_method.
move wa_upload-vdatu to wa_header-req_date_h.
move wa_upload-bstkd_e to wa_header-purch_no_s.
*move wa_upload-route to wa_header-route.
move wa_upload-vsbed to wa_header-ship_cond.
move wa_upload-empst to wa_header-rec_point.
move wa_upload-shtyp to wa_header-ship_type.
move wa_upload-zterm to wa_header-pmnttrms.
move wa_upload-inco1 to wa_header-incoterms1.
move wa_upload-inco2 to wa_header-incoterms2.
ENDFORM. " f_fill_header
*& Form f_fill_partner
text
--> p1 text
<-- p2 text
FORM f_fill_partner.
if not wa_upload-kunnr is initial.
select single kunnr from kna1 into v_kunnr
where kunnr = wa_upload-kunnr.
if sy-subrc <> 0.
Message E014 with 'customer does not exist'.
else.
move 'AG' to i_partner-partn_role.
move wa_upload-kunnr to i_partner-partn_numb.
move wa_upload-land1_s to i_partner-country.
move wa_upload-name1_s to i_partner-name.
move wa_upload-name2_s to i_partner-name_2.
move wa_upload-ort01_s to i_partner-city.
move wa_upload-regio_s to i_partner-region.
move wa_upload-pstlz_s to i_partner-postl_code.
move wa_upload-adrnr_s to i_partner-address.
append i_partner.
endif.
endif.
if not wa_upload-kunag is initial.
select single kunnr from kna1 into v_kunag
where kunnr = wa_upload-kunag.
if sy-subrc <> 0.
Message E015 with 'end customer does not exist'.
else.
move 'WE' to i_partner-partn_role.
move wa_upload-kunag to i_partner-partn_numb.
move wa_upload-land1_c to i_partner-country.
move wa_upload-name1_c to i_partner-name.
move wa_upload-name2_c to i_partner-name_2.
move wa_upload-ort01_c to i_partner-city.
move wa_upload-regio_c to i_partner-region.
move wa_upload-pstlz_c to i_partner-postl_code.
move wa_upload-adrnr_c to i_partner-address.
append i_partner.
endif.
endif.
ENDFORM. " f_fill_partner
*& Form f_fill_item
text
--> p1 text
<-- p2 text
FORM f_fill_item.
loop at i_upload into wa_upload.
if not wa_upload-matnr is initial.
select single maramatnr msegmenge into (v_matnr, v_zmeng) from
mara inner join mseg on maramatnr = msegmatnr
where mara~matnr = wa_upload-matnr.
if sy-subrc <> 0.
Message E016 with 'material no does not exist'.
elseif v_zmeng LT wa_upload-zmeng.
Message E017 with 'order quantity is greater than the quantity present'.
endif.
endif.
move wa_upload-posnr to i_item-itm_number.
move wa_upload-pstyv to i_item-item_categ.
move wa_upload-matnr to i_item-material.
move wa_upload-zmeng to i_item-target_qty.
move wa_upload-meins to i_item-target_qu.
move wa_upload-werks to i_item-plant.
*move wa_upload-meins to wa_vbap-meins.
*move wa_upload-posnr_tot to wa_vbap-posnr_tot.
move wa_upload-posex to i_item-po_itm_no.
move wa_upload-kdmat to i_item-cust_mat22.
move wa_upload-inco1 to i_item-incoterms1.
move wa_upload-inco2 to i_item-incoterms2.
move wa_upload-zterm to i_item-pmnttrms.
move wa_upload-empst to i_item-rec_point.
move wa_upload-shtyp to i_item-ship_type.
move wa_upload-route to i_item-route.
append i_item.
PERFORM f_fill_schedule_line.
PERFORM f_fill_conditions.
ENDLOOP.
ENDFORM. " f_fill_item
*& Form f_fill_schedule_line
text
--> p1 text
<-- p2 text
FORM f_fill_schedule_line.
move wa_upload-matnr to i_schedule-itm_number.
move sy-datum to i_schedule-req_date.
move wa_upload-zmeng to i_schedule-req_qty.
append i_schedule.
ENDFORM. " f_fill_schedule_line
*& Form f_fill_conditions
text
--> p1 text
<-- p2 text
FORM f_fill_conditions.
move wa_upload-matnr to i_cond-itm_number.
move sy-datum to i_cond-conpricdat.
append i_cond.
ENDFORM. " f_fill_conditions
*& Form f_clear
text
--> p1 text
<-- p2 text
FORM f_clear.
clear:p_auart,
p_vkorg,
p_vtweg,
p_spart,
p_vkgrp,
p_vkbur.
ENDFORM. " f_clear
*& Form f_call_BAPI
text
--> p1 text
<-- p2 text
FORM f_call_BAPI.
clear:i_item,i_partner,i_schedule.
CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'
EXPORTING
SALESDOCUMENTIN =
ORDER_HEADER_IN = wa_header
ORDER_HEADER_INX =
SENDER =
BINARY_RELATIONSHIPTYPE =
INT_NUMBER_ASSIGNMENT =
BEHAVE_WHEN_ERROR =
LOGIC_SWITCH =
TESTRUN =
CONVERT = ' '
IMPORTING
SALESDOCUMENT = sorder
TABLES
RETURN =
ORDER_ITEMS_IN = i_item
ORDER_ITEMS_INX =
ORDER_PARTNERS = i_partner
ORDER_SCHEDULES_IN = i_schedule
ORDER_SCHEDULES_INX =
ORDER_CONDITIONS_IN = i_cond.
ORDER_CFGS_REF =
ORDER_CFGS_INST =
ORDER_CFGS_PART_OF =
ORDER_CFGS_VALUE =
ORDER_CFGS_BLOB =
ORDER_CFGS_VK =
ORDER_CFGS_REFINST =
ORDER_CCARD =
ORDER_TEXT =
ORDER_KEYS =
EXTENSIONIN =
PARTNERADDRESSES =
if not ( sorder-vbeln is initial ).
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
write: /'Order number:', sorder.
else.
loop at i_return.
write: / i_return-id, i_return-number, i_return-message(80).
endloop.
*write: /'Error'.
endif.
*loop at i_return.
*write: / i_return-id, i_return-number, i_return-message(80).
*endloop.
ENDFORM. " f_call_BAPIHI
Pricing will be carried basing on the pricing
procedure.
Case1: Prices will be carried out automatically if
necessary condition records are maintained for the
condition type.
For this you can go to Sales Order-> Item Conditions
In the screen you can click on command button Analysis,
which gives you the list of condition types associated
to the pricing procedure. By clicking on the condition
type you can know the action that has taken place.
Case2: Manually forcing prices for Items.
To do this, you have to populate ORDER_CONDITIONS_IN &
ORDER_CONDITIONS_INX. Also note to identify the item
numbers, you manually pass the item number for each item
in the sales order, use the same item number for
populating conditions.
Parameters required:
ORDER_CONDITIONS_IN:
ITM_NUMBER, COND_TYPE, COND_VALUE, CURRENCY
ORDER_CONDITIONS_INX:
ITM_NUMBER, COND_TYPE, UPDATEFLAG, COND_VALUE,CURRENCY.
Hope the above info helps you. Do revert back if you
need more info.
Kind Regards
Eswar -
How to ChangePlantfor each item of Sales order using User Exit SAVE_DOCUMEN
Hi All,
I have to change plant for Each line item of sales order using (MV45AFZZ) (USEREXIT_SAVE_DOCUMENT) based on first Schedule line.
if Confirmed Quantity is Less than Ordered Quantity.
based on first Schedule line.
it has to select other Plant and need to populate it in line item of sales order.Please see the below code and let me knoe if any changes required... Thanks in Advance.
data : wa_vbep like xvbep,
Lv_matnr type mara-matnr,
lv_werks type marc-werks.
DATA: it_vbap TYPE STANDARD TABLE OF vbap,
wa_vbap TYPE vbap.
field-symbols: <wa_vbap> type VBAPVB.
clear wa_vbap.
*loop at xvbap into wa_vbap.
loop at xvbap assigning <wa_vbap>.
read table xvbep into wa_vbep with key posnr = <wa_vbap>-posnr.
if wa_vbep-ETENR = '0001'.
if sy-subrc = 0.
IF wa_VBEP-BMENG LT wa_VBEP-WMENG.
SELECT SINGLE DWERK
INTO lv_werks
FROM MVKE WHERE matnr = <wa_VBAP>-matnr
and DWERK ne <wa_VBAP>-werks.
if not Lv_werks is initial.
if lv_werks EQ 1033.
move '1002' to <wa_vbap>-werks.
if sy-subrc eq 0.
xvbap-werks = <wa_vbap>-werks.
modify xvbap from <wa_vbap> .
endif.
elseif lv_werks EQ 1003.
move '1003' to <wa_vbap>-werks.
elseif lv_werks EQ 1010.
move '1010' to <wa_vbap>-werks.
endif.
endif.
endif.
endif.
endif.
endloop.
endif.
Regards,
Sudhakar Reddy.AYou have to use the form routine "USEREXIT_SAVE_DOCUMENT_PREPARE"
regards
Vinod -
Can we edit Gross Price field in Sales Order
Hi experts,
According Help document (help - under Sales A/R/Sales Order-Sales document content tab ) as follows, userwe should be able to edit gross price field in Sales order
Enter in this field the unit price including tax. SAP Business One calculates automatically the unit price before tax and the tax amount, based on the tax code in the row. After pressing the TAB key, the Unit Price field and the Tax/Unit field are updated accordingly.
The tax amount is calculated as follows:
*Gross Price / (1 + Tax %) * Tax % = Tax Amount*
But when I set up in form setting visible and active for Gross Price, though I AM NOT ABLE TO EDIT GROSS PRICE FIELD
Is it bug in SAP ? I
BR
Samir GandhiHi Samir Gandhi,
You may check SAP Note Number: 1060666 to see if it applies to you.
Thanks,
Gordon -
Setting user specific contract data while creating sales order using BAPI
Hi all,
I am creating sales order using BAPI - BAPI_SALESORDER_CREATEFROMDAT2.
Now my problem is that there is no structure for contract data (i.e. VEDA), system automatically set contract data using customization values.
I am doing some validations on cotract data in MV45AFZZ which fails, because these validations are performed on standard values, user specific values r not set.
How to handle this issue, your small clue may help a lot.
Regards,
S@meerHI
Pricing will be carried basing on the pricing
procedure.
Case1: Prices will be carried out automatically if
necessary condition records are maintained for the
condition type.
For this you can go to Sales Order-> Item Conditions
In the screen you can click on command button Analysis,
which gives you the list of condition types associated
to the pricing procedure. By clicking on the condition
type you can know the action that has taken place.
Case2: Manually forcing prices for Items.
To do this, you have to populate ORDER_CONDITIONS_IN &
ORDER_CONDITIONS_INX. Also note to identify the item
numbers, you manually pass the item number for each item
in the sales order, use the same item number for
populating conditions.
Parameters required:
ORDER_CONDITIONS_IN:
ITM_NUMBER, COND_TYPE, COND_VALUE, CURRENCY
ORDER_CONDITIONS_INX:
ITM_NUMBER, COND_TYPE, UPDATEFLAG, COND_VALUE,CURRENCY.
Hope the above info helps you. Do revert back if you
need more info.
Kind Regards
Eswar -
Quantity update into sales order using BAPI_SALESORDER_CREATEFROMDAT2
Hi All,
I am able to create a sales order using the BAPI "BAPI_SALESORDER_CREATEFROMDAT2".
But even after assinging the Target_quntity and the Target_quantity_units, the values are not getting updated into the Sales order, but the sales order gets created .
Did anyone of you had a similare problem, how was it solved.
cold some one please help me out on this.
RegardsHi
I had used below code (using <b>BAPI_SALESORDER_CREATEFROMDAT1</b>)..but never faced any problem.. you can try the same...
Regards,
Raj
REPORT z_sd_salesorder_create
NO STANDARD PAGE HEADING
LINE-SIZE 150
MESSAGE-ID zz.
S T R U C T U R E D E C L A R A T I O N S *
TYPES: BEGIN OF x_ppl,
ppl_order(18), " ppl Orderno
auart(4), " Sales Doc Type
vkorg(4), " Sales Organization
vtweg(2), " Distribution Channel
spart(2), " Division
div(3), " Division
kunnr(10), " Sold-to Party
date(10), " Doc Dt
matnr(18), " Item Matnr#
uom(3), " UOM
qty(15), " Qty
kschl(4), " Pricing condiiton type
kbetr(11), " Rate
END OF x_ppl.
TYPES: BEGIN OF x_file,
loc(30), " Location
div(3), " Division
ppl_order(18), " ppl Orderno
kunnr(10), " Sold-to Party
date(10), " Doc Dt
matnr(20), " Item Matnr#
qty(15), " Qty
uom(3), " UOM
kbetr(11), " Rate
discount(5), " Discount
END OF x_file.
TYPES: BEGIN OF x_output,
ppl_order(18), " ppl Orderno
mesg(130), " Mesg Success/Error
END OF x_output.
TYPES: BEGIN OF x_werks,
name2(30), " Location
werks TYPE werks_ext, " Plant
END OF x_werks.
TYPES: BEGIN OF x_info,
vkorg TYPE vkorg , " Sales org
vtweg TYPE vtweg, " Dist channel
werks TYPE werks_ext," Plant
spart TYPE spart, " Storage Loc
END OF x_info.
TYPES: BEGIN OF x_material,
ppl_prdid(20), " ppl Prd id
matnr TYPE matnr, " Material (SAP)
END OF x_material.
I N T E R N A L T A B L E D E C L A R A T I O N S *
DATA: it_file TYPE STANDARD TABLE OF x_file WITH HEADER LINE." File Data
DATA: it_data TYPE STANDARD TABLE OF x_ppl WITH HEADER LINE." ppl File
DATA: it_out TYPE STANDARD TABLE OF x_output WITH HEADER LINE. " Outcome
DATA: it_werks TYPE STANDARD TABLE OF x_werks WITH HEADER LINE. " Plant
DATA: it_info TYPE STANDARD TABLE OF x_info WITH HEADER LINE. " Othr Info
DATA: it_matnr TYPE STANDARD TABLE OF x_material WITH HEADER LINE. " Material Info
DATA: it_item TYPE STANDARD TABLE OF bapiitemin WITH HEADER LINE. "Order Itm data
DATA: it_partner TYPE STANDARD TABLE OF bapipartnr WITH HEADER LINE. "Order Partner data
V A R I A B L E S D E C L A R A T I O N S *
DATA : v_correct TYPE i,
v_error TYPE i,
v_total TYPE i,
v_return LIKE bapireturn1,
v_index LIKE sy-tabix.
*- Return values
DATA: it_orderh TYPE bapisdhead, "Order Hdr data
order TYPE bapivbeln-vbeln,
soldto TYPE bapisoldto,
shipto TYPE bapishipto,
return TYPE bapireturn1.
DATA: hdate TYPE sy-datum.
U S E R I N P U T S S C R E E N *
SELECTION-SCREEN: BEGIN OF BLOCK blk01 WITH FRAME TITLE text-t01.
PARAMETERS: p_file TYPE rlgrap-filename OBLIGATORY. " File name
SELECTION-SCREEN END OF BLOCK blk01.
S E L E C T I O N S C R E E N *
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
PERFORM get_file.
S t a r t o f S e l e c t i o n *
START-OF-SELECTION.
PERFORM get_upload.
PERFORM validate_data. " Validate the data
PERFORM data_swap. " Prepare the data for processing
IF NOT it_data[] IS INITIAL.
PERFORM get_update. " Create SalesOrders
ELSE.
MESSAGE i001(zz) WITH text-001.
STOP.
ENDIF.
E n d o f S e l e c t i o n *
END-OF-SELECTION.
IF NOT it_data[] IS INITIAL.
PERFORM get_write.
ENDIF.
*& Form get_file
Get File name
FORM get_file .
CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
EXPORTING
program_name = syst-repid
mask = '*'
CHANGING
file_name = p_file
EXCEPTIONS
mask_too_long = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " get_file
*& Form get_upload
to upload the file
FORM get_upload .
DATA l_file TYPE string.
CLEAR: it_file, it_file[].
l_file = p_file.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = l_file
filetype = 'ASC'
has_field_separator = 'X'
TABLES
data_tab = it_file
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
OTHERS = 17.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSEIF sy-subrc = 0.
SORT it_file BY loc ppl_order.
ENDIF.
ENDFORM. " get_upload
*& Form get_update
Creating mapping Data in Z table
FORM get_update .
DATA: l_itemno(2) TYPE n,
l_partner TYPE parvw,
l_kunnr TYPE kunnr,
l_matnr TYPE matnr,
l_mesg TYPE string,
l_kbetr TYPE p DECIMALS 2.
DATA: l_in_qty LIKE vbap-zmeng,
l_meins LIKE mara-meins,
l_qty LIKE vbap-zmeng.
CLEAR: v_correct, v_error, v_total.
SORT it_data BY ppl_order.
LOOP AT it_data.
CLEAR v_index.
v_index = sy-tabix.
*- New SalesOrder
AT NEW ppl_order.
READ TABLE it_data INDEX v_index.
CLEAR: it_orderh, it_item, it_partner,
order, soldto, shipto, return,
it_item[], it_partner[].
v_total = v_total + 1. "Increment Total SalesOrders counter
CLEAR l_itemno.
l_itemno = '10'.
*- Covert date fields into Internal format
CALL FUNCTION 'CONVERT_DATE_TO_INTERN_FORMAT'
EXPORTING
datum = it_data-date
dtype = 'DATS'
IMPORTING
idate = it_data-date.
*- Populate SalesOrder header data.
CALL FUNCTION 'CONVERSION_EXIT_AUART_INPUT'
EXPORTING
input = it_data-auart
IMPORTING
output = it_data-auart.
it_orderh-doc_type = it_data-auart.
it_orderh-sales_org = it_data-vkorg.
it_orderh-distr_chan = it_data-vtweg.
it_orderh-division = it_data-spart.
it_orderh-purch_no = 'DEPOT'.
it_orderh-price_date = it_data-date. "Doc Dt
it_orderh-req_date_h = it_data-date. "Del.Dt
it_orderh-purch_no_s = it_data-ppl_order.
*- Partner data
CLEAR: l_partner, l_kunnr.
*- Convert Partner type into internal format
l_partner = 'SP'. "SoldTo Party
CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'
EXPORTING
input = l_partner
IMPORTING
output = l_partner.
*- Convert Customer into internal format
l_kunnr = it_data-kunnr.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = l_kunnr
IMPORTING
output = l_kunnr.
it_partner-partn_role = l_partner.
it_partner-partn_numb = l_kunnr.
APPEND it_partner.
CLEAR it_partner.
ENDAT.
*- Item data
it_item-itm_number = l_itemno.
*- Convert material number into internal format
CLEAR l_matnr.
l_matnr = it_data-matnr.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
input = l_matnr
IMPORTING
output = l_matnr
EXCEPTIONS
length_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
it_item-material = l_matnr.
*- Call FM to get new qty based on SAP UOM
CLEAR: l_meins, l_qty, l_in_qty.
l_in_qty = it_data-qty.
CALL FUNCTION 'Z_GET_QTY_FROM_UOM'
EXPORTING
matnr = it_item-material
in_meins = it_data-uom
in_qty = l_in_qty
IMPORTING
out_meins = l_meins
quantity = l_qty.
IF sy-subrc = 0.
it_data-qty = l_qty.
it_data-uom = l_meins.
ENDIF.
it_data-qty = it_data-qty * 1000.
it_item-req_qty = it_data-qty.
it_item-sales_unit = it_data-uom.
it_item-req_date = it_data-date.
*- Pricing data
it_item-cond_type = it_data-kschl. "Pricing condition
CLEAR l_kbetr.
l_kbetr = it_data-kbetr / 10. "Price (Rate)
it_item-cond_value = l_kbetr.
APPEND it_item.
CLEAR it_item.
*- Increment Item counter.
l_itemno = l_itemno + 10.
*- At end of SalesOrder
AT END OF ppl_order.
READ TABLE it_data INDEX v_index.
*- Call the BAPI for SalesOrder creation
CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT1'
EXPORTING
order_header_in = it_orderh
IMPORTING
salesdocument = order
sold_to_party = soldto
ship_to_party = shipto
return = return
TABLES
order_items_in = it_item
order_partners = it_partner.
IF sy-subrc = 0.
COMMIT WORK.
ENDIF.
v_return = return+0(1).
IF v_return = 'E'.
v_error = v_error + 1.
CLEAR l_mesg.
l_mesg = return.
CONDENSE l_mesg.
ELSE.
v_correct = v_correct + 1.
CLEAR l_mesg.
CONCATENATE 'Salesorder'(007) order 'successfully created.'(008)
INTO l_mesg SEPARATED BY space.
CONDENSE l_mesg.
ENDIF.
*- Populate the output table
CLEAR it_out.
it_out-ppl_order = it_data-ppl_order.
it_out-mesg = l_mesg.
APPEND it_out.
CLEAR it_out.
ENDAT.
ENDLOOP.
ENDFORM. " get_update
*& Form get_write
Write the results
FORM get_write .
WRITE:/ 'Total Number of Records :'(002), v_total COLOR 1.
WRITE:/ 'Total Correct Records :'(003), v_correct COLOR 3.
WRITE:/ 'Total Error Records :'(004), v_error COLOR 6.
SKIP 3.
IF NOT it_out[] IS INITIAL.
WRITE:/5 'ppl Order #'(005),
28 'Message'(006).
ENDIF.
SKIP 1.
LOOP AT it_out.
WRITE:/5 it_out-ppl_order,
28 it_out-mesg.
ENDLOOP.
ENDFORM. " get_write
*& Form validate_data
Validate the data
FORM validate_data .
DATA: l_bstkde TYPE bstkd_e.
LOOP AT it_file.
SELECT bstkd_e INTO l_bstkde
UP TO 1 ROWS
FROM vbkd
WHERE bstkd_e = it_file-ppl_order.
ENDSELECT.
IF sy-subrc = 0. " This ppl Order is already been created in SAP, so delete record
DELETE it_file.
ENDIF.
ENDLOOP.
SORT it_file BY ppl_order.
ENDFORM. " validate_data
*& Form data_swap
Prepare the data for processing
FORM data_swap .
CLEAR: it_werks, it_info, it_matnr, it_data,
it_werks[], it_info[], it_matnr[], it_data[].
IF NOT it_file[] IS INITIAL.
*- Get the plant from location
SELECT name2
werks
INTO CORRESPONDING FIELDS OF TABLE it_werks
FROM t001w FOR ALL ENTRIES IN it_file
WHERE name2 = it_file-loc.
IF sy-subrc = 0.
SORT it_werks BY name2 werks.
*- Get the Sales Org, Division and Distribution Channel
IF NOT it_werks[] IS INITIAL.
SELECT vkorg
vtweg
werks
INTO CORRESPONDING FIELDS OF TABLE it_info
FROM tvkwz FOR ALL ENTRIES IN it_werks
WHERE werks = it_werks-werks.
IF sy-subrc = 0.
LOOP AT it_info.
it_info-spart = '99'.
MODIFY it_info INDEX sy-tabix.
ENDLOOP.
SORT it_info BY vkorg vtweg werks.
ENDIF.
ENDIF.
ENDIF.
*- Get material from ppl material
SELECT ppl_prdid
matnr
FROM zppl_master
INTO TABLE it_matnr FOR ALL ENTRIES IN it_file
WHERE ppl_prdid = it_file-matnr.
IF sy-subrc = 0.
SORT it_matnr BY ppl_prdid matnr.
ENDIF.
ENDIF.
*- Update the data in it_data
LOOP AT it_file.
CLEAR it_data.
it_data-auart = 'OR'.
it_data-auart = 'OR'. " CHANGED BY Jo ON 3103005
READ TABLE it_werks WITH KEY name2 = it_file-loc BINARY SEARCH.
IF sy-subrc = 0.
READ TABLE it_info WITH KEY werks = it_werks-werks BINARY SEARCH.
IF sy-subrc = 0.
it_data-vkorg = it_info-vkorg.
it_data-vtweg = it_info-vtweg.
ENDIF.
ENDIF.
*- Material
READ TABLE it_matnr WITH KEY ppl_prdid = it_file-matnr BINARY SEARCH.
IF sy-subrc = 0.
it_data-matnr = it_matnr-matnr.
ENDIF.
it_data-ppl_order = it_file-ppl_order.
it_data-date = it_file-date.
CONCATENATE it_file-kunnr it_file-loc+1(2) INTO it_data-kunnr.
it_data-qty = it_file-qty.
it_data-uom = it_file-uom.
it_data-kbetr = it_file-kbetr.
*- Pricing condition
it_data-kschl = 'PR00'.
CASE it_file-div.
WHEN 'BRN'.
it_data-div = '04'.
WHEN 'GEN'.
it_data-div = '03'.
WHEN 'IVF'.
it_data-div = '02'.
WHEN 'OPH'.
it_data-div = '01'.
ENDCASE.
it_data-spart = it_data-div.
APPEND it_data.
CLEAR it_data.
ENDLOOP.
ENDFORM. " data_swap
Maybe you are looking for
-
RE: Is there a way to have 2 network cards on the samemachine
Sean, I mean I am always connecting to the nodemgr of the 2nd environment successfully. Only when I run the client part of the application that I know is up, I get a response from the Name Server that it is actually the first IP address. I checked ag
-
I downloaded the new itunes. So, i plugged in my 5th generation ipod and when i plugged it in, it asked me if i want to set it as new ipod or back up from the 2nd generation ipod touch that i plugged in before, i accidently clicked on the back up fro
-
How can I transfer data from DD & HD 3.5" floppies to my MacBook Pro running Lion?
I hope this is the correct forum group, and if it's not, I apologize. I didn't find one that was really related to my topic. I was given lots of legacy files (mostly Eudora email messages and other text files from 1995-2000) that I need to access fro
-
Scrambled font output in Final Cut Pro 5.0.4
Hi all, I'm using Final Cut Pro 5.0.4 in Mac OS 10.4.3 on a 2005 Dual 2.7 Ghz G5 with 1.5 Ghz of RAM. When I use certain fonts (for example, Apple's Hoefler Text) in any of FCP 5's text filters, the text appears scrambled. Either the material appears
-
KeyboardEvent Bug in Flash Player Debugger (Safari/WebKit OSX 10.6.8)
Hi! There is a bug with the debugger :-) I ran into the following bug. After doing a fair amount of testing I am able reproduce the problem at will, so here it is: The Debug version of the Flash Player used for development does not detect keyboard in