Reading Order details from buffer
Hi all,
I am checking the validations for both header and item level at the time of Order creation in CRM. I am using BADI, CRM_ORDERADM_H_BADI for this. And inside this, I am using CRM_ORDER_READ to read the details from Order. But it is not giving the details when I press u2018Enteru2019. When I do some more changes and press 'Enter', CRM_ORDER_READ is giving the details. But I want to get these datails in the first hit itself. Is there any FM to read the order details from buffer?
Regards,
Santosh
Dear Santosh,
Please do try using folllowing FM's to read order from buffer:
CRM_ORDERADM_H_READ_OW
CRM_ORDERADM_I_READ_OW
CRM_ORDER_READ_OW
Hope this will help.
Regards,
Arjun
Similar Messages
-
CRM order details from database and buffer
Hi,
I am working on a scenario where i need to read the order details from buffer and database also to compare the changed values in one of the action class. I have tried with CRM_ORDER_READ and CRM_ORDER_READ_OW. CRM_ORDER_READ is giving the details from buffer and CRM_ORDER_READ_OW is not giving me any resluts. To compare the old and new values i need to read the details from buffer and database also. Please suggest me the function modules to use.
Thanks,
Rajinikanth GI'm using similap comparion for some opportunity fields. There I'm using function modules 'CRM_OPPORT_H_READ_DB' and 'CRM_OPPORT_H_READ_OW and it's working fine.
So I guess _DB and OW function modules should be ok. I'm not sure, but I think I also had problems a while ago with using module CRMORDER_READ_OW. Maybe try to find some other OW function that could give you wanted values. CRMORDER_READ_OW is very large fm, so try using CRM_ORDERADM_H_READ_OW for header data and CRM_SCHEDLIN_I_READ_OW for items and so on. There are function modules for nearly all data groups.
Regards. -
FM for BP transaction for Relationship details from buffer
Hi,
Pls provide me FM to access the relationship details of the transaction BP to access from buffer.
thanks,Hi Shantha,
You can use FM BUPA_RELATIONSHIPS_READ, to read it from buffer.
Kind regards,
Garcia -
Table For Planned Order Details From PP Module
In our organisation we are taking Plan Vs Acheivement from Production. So, intialy we taken Plan details from "PLAF" Table and Acheivement details from "S225" Table. But After running MRP at month end. Previous month plan get deleted and new order create.
how to get history data for Planned order.
Please help us.
Regards
NagaI don't think that there is any history in regard to planned orders. PLAF will get rebuilt according to your MRP parameters and I don't believe that the data is stored.
Regards,
Rich Heilman -
Read Video data from buffer or byte array
Hi guys,
I've developed a tx/rx module, the tx read an mpg file and transfer it over network. rx has the data in a byte array, I also feed the byte array to a media buffer. Now my question is how to creat the player and feed the player to play the content of the buffer or byte array?
I would really appreaciate if someone could help me please...
Thanx
I haven't and didn't want to use any of the RTP stuff...Hi, I tried PullBufferDataSource. What I am trying to do is : read a .wav file into a queue, then construct a datasource with this queue. The processor will be contructed to process the datasource, and a datasink to sink data to a file. I think if this workflow could work, it should work in network transmission.
In fact the code works partially. The trick part is the read( Buffer ) method. If I try to use 'if' statement to see if Queue has empty or not, the datasink could not format the head part of output file correctly. If I didnot use 'if' statement, the program will terminate when exception occurs. The output file is all right.
I did not understand what is going on.
Note: the original file is a RAW data file without format info.
Here is the code fragments. Hopefully we can work together to figure it out.
Thanks.
Jim
* QueueDataSourceTester.java
* Created on November 11, 2002, 10:29 AM
package bonephone;
import javax.media.*;
import javax.media.control.*;
import javax.media.protocol.*;
import javax.media.datasink.*;
import javax.media.format.AudioFormat;
import java.util.LinkedList;
import java.io.*;
* @author wguo
public class QueueDataSourceTester implements ControllerListener, DataSinkListener {
protected LinkedList myQueue;
/** Creates a new instance of QueueDataSourceTester */
public QueueDataSourceTester() {
myQueue = new LinkedList();
public void testIt( ){
// Read a file into a Queue
FileInputStream inputStream = null;
try{
inputStream = new FileInputStream( "c:/media/phone.wav");
catch( IOException ioe ){
System.err.println( "Error on open media file." );
try{
byte data[] = new byte[1024];
int n ;
while( ( n = inputStream.read( data, 0, 1024 )) != -1 ){
myQueue.addLast( data );
data = new byte[1024];
inputStream.close();
catch( IOException ioe ){
System.err.println( "Error on reading file." );
System.out.println( "Queue Size: " + myQueue.size() );
System.out.println( "myQueue = " + myQueue.size() );
QueueDataSource dataSource = new QueueDataSource( myQueue );
Processor p = null ;
try{
System.out.println( "Create processor for QueueDataSource ... " );
p = Manager.createProcessor( dataSource );
catch( Exception e ){
System.err.println( "Cannot create a processor for the QueueDataSource. " );
System.out.println( "\nProcessor is created." );
p.addControllerListener( this );
p.configure();
if( !waitForState( p, p.Configured ) ) {
System.err.println( "Failed to configure the processor." );
System.out.println( "\nProcessor is configured") ;
// p.setContentDescriptor( new ContentDescriptor( ContentDescriptor.RAW ) );
p.setContentDescriptor( new ContentDescriptor( FileTypeDescriptor.WAVE ) );
TrackControl tcs[] = p.getTrackControls();
Format f[] = tcs[0].getSupportedFormats();
if( f == null || f.length == 0 ){
System.err.println( "The mux does not support the input format : "+ tcs[0].getFormat() );
tcs[0].setFormat(
new AudioFormat( AudioFormat.ULAW,
8000,
8,
1,
Format.NOT_SPECIFIED,
AudioFormat.SIGNED,
8,
Format.NOT_SPECIFIED,
Format.byteArray ) );
//System.out.println( "Setting the track format to: " + f[4] );
p.realize();
if( !waitForState( p, p.Realized )){
System.err.println( "Failed to realize the processor" );
DataSink dsink;
MediaLocator outML = new MediaLocator("file:/c:/media/queue.wav" );
if( (dsink = createDataSink( p, outML )) == null ){
System.err.println( "Failed to create a datasink for given " +
"mediaLocator : " + outML );
dsink.addDataSinkListener( this );
System.out.println( "\nProcessor is realized" );
try{
p.start();
dsink.start();
catch( IOException ioe ){
System.err.println( "IO error during processing." );
waitForFileDone();
try{
dsink.close();
catch( Exception e ){
p.removeControllerListener( this );
System.err.println( "... done processing." );
DataSink createDataSink( Processor p, MediaLocator outML ){
DataSource ds ;
if( ( ds = p.getDataOutput() ) == null ) {
System.err.println( "Something is really wrong: the processor does" +
" not have an output DataSource. " );
return null;
System.out.println( "DataOutput: " + ds.getContentType() );
DataSink dsink;
try{
System.out.println( "- create DataSink for : " + outML );
dsink = Manager.createDataSink( ds, outML );
dsink.open();
catch( Exception e ){
System.err.println( "Cannot create the DataSink: " + e );
return null;
return dsink;
Object waitSync = new Object();
boolean stateTransitionOK = true;
boolean waitForState( Processor p, int state ){
synchronized( waitSync ){
try{
while( p.getState() < state && stateTransitionOK )
waitSync.wait();
catch( Exception e ){
return stateTransitionOK;
public void controllerUpdate(javax.media.ControllerEvent controllerEvent) {
if( controllerEvent instanceof ConfigureCompleteEvent ||
controllerEvent instanceof RealizeCompleteEvent ||
controllerEvent instanceof PrefetchCompleteEvent ){
synchronized( waitSync ){
stateTransitionOK = true;
waitSync.notifyAll();
} else if( controllerEvent instanceof ResourceUnavailableEvent ){
synchronized( waitSync ){
stateTransitionOK = false;
waitSync.notifyAll( );
public static void main( String args[] ){
QueueDataSourceTester tester = new QueueDataSourceTester();
tester.testIt();
Object waitFileSync = new Object();
boolean fileDone = false;
boolean fileSuccess = true;
boolean waitForFileDone(){
synchronized( waitFileSync ){
try{
waitFileSync.wait( 5000 );
catch( Exception e ){
System.err.println( "Error on waiting file to be done" );
return fileSuccess;
public void dataSinkUpdate(javax.media.datasink.DataSinkEvent dataSinkEvent) {
if( dataSinkEvent instanceof EndOfStreamEvent ){
synchronized( waitFileSync ){
fileDone = true;
waitFileSync.notifyAll();
else if ( dataSinkEvent instanceof DataSinkErrorEvent ){
synchronized( waitFileSync ){
fileDone = true;
fileSuccess = false;
waitFileSync.notifyAll();
// Inner Class
* A datasource that will read Media data from Queue.
* Inside queue individual RAW data packats are stored.
* @author wguo
public class QueueDataSource extends PullBufferDataSource{
protected QueueSourceStream streams[];
/** Creates a new instance of QueueDataSource */
public QueueDataSource( LinkedList source ) {
printDebug( "QueueDataSource: QueueDataSource( LinkedList) " );
streams = new QueueSourceStream[1];
streams[0] = new QueueSourceStream( source );
public void connect() throws java.io.IOException {
printDebug( "QueueDataSource: connect() " );
public void disconnect() {
printDebug( "QueueDataSource: disconnect()" );
public String getContentType() {
return ContentDescriptor.RAW;
public Object getControl(String str) {
printDebug( "QueueDataSource: getControl(String) " );
return null;
public Object[] getControls() {
printDebug( "QueueDataSource: getControls() " );
return new Object[0];
public javax.media.Time getDuration() {
return DURATION_UNKNOWN;
public javax.media.protocol.PullBufferStream[] getStreams() {
printDebug( "QueueDataSource: getStreams() " );
return streams;
public void start() throws java.io.IOException {
printDebug( "QueueDataSource:start()" );
public void stop() throws java.io.IOException {
printDebug( "QueueDataSource: stop() " );
private void printDebug( String methodInfo ){
System.out.println( methodInfo + " is called" );
// Inner Class
public class QueueSourceStream implements PullBufferStream{
LinkedList sourceQueue;
AudioFormat audioFormat;
boolean ended = false;
/** Creates a new instance of QueueSourceStream */
public QueueSourceStream( LinkedList sourceQueue ) {
printDebug( "QueueSourceStream: QueueSourceStream( LinkedList )" );
this.sourceQueue = sourceQueue;
audioFormat = new AudioFormat(
AudioFormat.ULAW,
8000,
8,
1,
Format.NOT_SPECIFIED,
AudioFormat.SIGNED,
8,
Format.NOT_SPECIFIED,
Format.byteArray);
public boolean endOfStream() {
printDebug( "QueueSourceStream: endOfStream()" );
return ended;
public javax.media.protocol.ContentDescriptor getContentDescriptor() {
printDebug( "QueueSourceStream: getContentDescriptor()" );
return new ContentDescriptor( ContentDescriptor.RAW) ;
public long getContentLength() {
printDebug( "QueueSourceStream:getContentLength()" );
return 0;
public Object getControl(String str) {
printDebug( "QueueSourceStream:getControl( String) " );
return null;
public Object[] getControls() {
printDebug( "QueueSourceStream:getControls()" );
return new Object[0];
public javax.media.Format getFormat() {
printDebug( "QueueSourceStream:getFormat()" );
return audioFormat;
public void read(javax.media.Buffer buffer) throws java.io.IOException {
buffer.setData( (byte[])sourceQueue.removeFirst() );
buffer.setOffset( 0 );
buffer.setLength( 1024 );
buffer.setFormat( audioFormat );
printDebug( "QueueSourceStream: read( Buffer ) " );
else {
buffer.setEOM( true );
buffer.setOffset( 0 );
buffer.setLength( 0 );
ended = true;
System.out.println( "Done reading byte array" );
return;
public boolean willReadBlock() {
printDebug( "QueueSourceStream: willReadBlock()" );
if( myQueue.isEmpty() )
return true;
else
return false;
private void printDebug( String methodInfo ){
System.out.println( methodInfo + " is called. " ); -
Reading SAP CRM Order details from R/3
Hi
I have a requirement where in I need to read the data of a CRM Sales order from R/3 by referring to/ with the help of LIPS-VGBEL( reference document ).
For this I have created a RFC FM and I'm able to read the required data successfully however this is not advisable as it is creating some issues since we have huge amount of records in R/3 for which we need corresponding data from SAP CRM hence my idea is to read the corresponding bdoc's
( because the CRM data must have been pushed to R/3 via middleware using the BDOC's ? ).
Hence can anyone suggest me how to read the BDOC's/ middleware data in R/3 itself so that it is not required to use RFC.
Also, if anyone of you has any other idea then please share with me. Thank you.
Regards
AnilHI Karthi
That means, whenever the bdoc triggers and the data comes into R/3 then we need to save them into a Z table by capturing the data in the BADI "CRM_DATAEXCHG_BADI "? am I correct ? so that we can refer to this Z table for the CRM data in R/3 while executing our interface report to PI ?
I think this might not be accepted by the client because this will unnecessarily stores the data all the time in the Z table whenever bdoc triggers and it is also not mandatory to send each and every record to PI, there might be only few records can be sent to PI and few are not.
However I'll check this with client now. Also are there any tables or so where the bdoc data( the data comes from CRM) gets stored in the R/3 system so that we can get the data from those tables instead of storing in Z table and reading from there ?
Thank you.
Regards
Anil -
How to retrieve sales Order details from BAPI_SALESORDER_GETLIST
Hi Experts,
I am using Visual Studio 2003 and SAP.Net Connector for Microsoft .NET 1.0.3 .
I need to get the details of sales order.Following is the code snip.
protected ConnectorDemo2.BAPIRETURN bapireturn; /*Manually Added */
proxy.Connection = SAP.Connector.SAPLoginProvider.GetSAPConnection(this);
proxy.Bapi_Salesorder_Getlist("0000000006","","","","","","0001","0",
out bapireturn,ref bapiordersTable1);
I already check records in SAP R/3 system for data Cust No=00000006 and Sales Org=0001.
Please let me know about out parameter and if anyone is having correct list of ref and out parameter.
Help will appreciated and points will rewarded.
Thanks
Sunil Pawar
Edited by: Sunil Pawar on Nov 26, 2008 1:54 PMTo Solve the problem I created one custome RFC and call BAPI_SALESORDER_GETLIST in it and my problem get solved.
This is just work around but still not found why no data when using OUT parameter.
CALL FUNCTION 'BAPI_SALESORDER_GETLIST'
EXPORTING
CUSTOMER_NUMBER = Z_CUSTOMER_NUMBER
SALES_ORGANIZATION = Z_SALES_ORGANIZATION
IMPORTING
RETURN =
TABLES
SALES_ORDERS = Z_SALES_ORDERS
Thanks
Sunil Pawar -
Hi All,
Planned orders are converted to purchase requisitions. Is there any way to find from which planned order the PR got created.
As we find that the planned order gets deleted once converted to PR.
thanksTry in ME5A
Thanks
MK -
Reading order status from backend
Hello,
we're facing some issues with our WebService for a simple order status. It should be possible to get the status of more than 1 order, so the Export-DT should look something like this:
<order vbeln="123">
<status>C</status>
<positions>
<pos nr="010">
<matnr="9876" />
<maktx="ProdName" />
</pos>
</positions>
</order>
<order vbeln="456">
<status>C</status>
<positions>
<pos nr="010">
<matnr="9876" />
<maktx="ProdName" />
</pos>
<pos nr="020">
<matnr="456" />
<maktx="ProdName2" />
</pos>
</positions>
</order>
As you can see there are n>1 orders and n>=1 positions per order. So each position should be a nested table within the order table. But this is actually not allowed to be defined within an BAPI. We only can get the positions and orders in separate tables. Is there a possibilty to match this together?
I hope I described it understandable and any help will be appriciated.
Many thanks and regards
Markus ArmbrusterIf somebody else has this issue, here is the solution that helped us:
Mapping: convert multiple tables w/ common key to single one w/ that key?
http://chplanet.ca/documents/SAP/XI%20Mapping%20Flat%20to%20Nested%20Tables.pdf
Regards
Markus Armbruster -
Hi all,
I have a custom RFC which makes use of IDOC_INPUT_BOMMAT to create a BOM.But the BOM is not yet committed and i need to retrieve this data.If i put a break-point after the call to the FM IDOC_INPUT_BOMMAT and at the same time check the database table it's not yet present in the table.We tried all methods but could not succeed.Please let us know if the data can be read through buffers.If so which FM should i use to get this data .. ?
Cheers
NishanthHi,
I don't think you will be able to read the data from buffer. Even if you can find it, getting the right strcutures for the data you are looking for will be very tedious.
Regards,
Ravi
Note :Please mark the helpful answers -
Help with purchase order detail
Hello Experts,
I am currently trying to get information on a purchase order, but not having any luck. I need to find the PO Number, and PO Approval Date. I cannot find either of these. I have tried using BBP_PD_PO_GETDETAIL, but have no luck with this. here is what I have:
move w_result-sc_guid TO lv_guid.
CALL FUNCTION 'BBP_PD_PO_GETDETAIL'
EXPORTING
I_GUID = lv_guid
I_OBJECT_ID = w_zwkflw_rep-object_id
I_WITH_ITEMDATA = 'X'
I_READ_FROM_ARCHIVE = 'X'
IMPORTING
E_HEADER = ls_e_header
TABLES
E_ITEM = lt_e_item
All I have available is shopping cart number. Can anyone assist please? Thank you.hi,
try below steps to retrieve purchase order details from a shopping cart.
get the purchase order GUID in ET_HEADER_REL parameter of BBP_PD_SC_GETDETAIL fm using the shopping cart number or GUID.
then to get the purchase order details, use BBP_PD_PO_GETDETAIL importing I_GUID = purchase order GUID from ET_HEADER_REL.
regards. -
Function module to get Service Order details created with a Sales Order
Hi,
Could anyone tell me if there is any function module to get the details of the Service order that is created automatically for a line item in a sales order. Let me explain my requirement clearly.
When a sales order is created with specific line item, a service order is automatically created for that line item. I need to get the information about the associated service order. I can't find this information in VBAK, VBAP or VBEP tables obviously. But, i can see the link between the service order created and related Sales document # and item # in the DB view CAUFV. But, the key field here is Service order #. But my requirement is to get the service order details from the key field of Sales document.
I tested the FM SD_SALES_DOCUMENT_READ_POS that reads the sales document header and item material tables, but this doesn't help me in getting the service order details associated with the material line item.
Your early response is greatly appreciated.
Thanks in advance,
venuHi Akshay,
I actually saw this , but surprisingly, there is nothing stored in this field in either of the tables VBAK or VBAP. I mean, even for the sales orders which have associated service orders, nothing is stored in either of the above tables.
Can you please tell me if there is anyother way.
Thank you,
venu -
How to set the read order in ADF under screenreader mode?
Hi,
I am working on the FUSION FUSE about ACCESSIBILITY: LINEARISE NUMBERING. I meet a requirement that set a button with 200 number which make it as the LAST read one in the whole page. Currently the read order is from left to right, top to bottom. so need help on this. Thanks a lot.
Below is the detail requirement:
More Details button (which takes the user into Fusion apps) needs to be a higher # (in the 200+) for Linearize. Linearize is a tool that indicates in which order (numerically),the words on the page are 'read out' to a blind user. We'd want to have that More Details button be the last thing that is read on the page. Ergo, let's give it the highest #.
Thanks.Hi,
as this forum is public and not Oracle Fusion Apps related (people here don't know what you are talking about when you say "Fusion Fuse") I suggest you ask this question to your internal Oracle peers.
Frank -
Deleting Sales Order Details using BAPI_SALESORDER_CHANGE And Reinserting
Hi All,
I need to <b>change a Sales Order</b> in such a way that I would <b>delete all the existing Line Items</b> of that SO And <b>then reinsert new Line Items</b> as generally is the practice of saving a document.(Update Header-Delete Old Item Entries-Reinsert New Present Entries).
I coded a small test program in ABAP using the <b>BAPI_SALESORDER_GETLIST And BAPI_SALESORDER_CHANGE</b>.
In order to affect the Qty I have to update the Schedule Parameter also of the BAPI_SALESORDER_CHANGE Function.But this causes a new entry in VBEP.
eg:
<b>Before BAPI Calls</b>
SO-Number:9001
Header:9001,etc......
Detail:ItemNo=10,Material=xyz,TargetQty=100,etc..
Scedule:ItemNo=10,Scheduleline=1,Req_Qty=100,etc...
I coded the program such that
1.I <b>Get the List of Items</b> using BAPI_SALESORDER_GETLIST.
2.Call the <b>BAPI_SALESORDER_CHANGE</b> filling appropraite values in Parameters <b>with UpdateFlag = 'D'</b>
3.<b>Insert new values</b> in OrderItems And Schedule Parameters
say:
Detail:ItemNo=10,Material=xyz,TargetQty=25,etc..
Scedule:ItemNo=10,Scheduleline=1,Req_Qty=25,etc...
4.<b>Call the BAPI_SALESORDER_CHANGE</b> filling appropraite values in Parameters <b>with UpdateFlag = 'I'</b>
<b>The output now becomes.</b>Header:9001,etc......
Detail:ItemNo=10,Material=xyz,TargetQty=100,etc..
Scedule:ItemNo=10,Scheduleline=1,Req_Qty=100,etc...
ItemNo=10,Scheduleline=2,Req_Qty=25,etc...
Now After Commit when I see my <b>SO it shows me a qty of
125</b>.
I am attaching the code for your analysis.
Thanx in advance.
*& Report ZSM_CHANGESALESORDER *
REPORT ZSM_CHANGESALESORDER .
DATA:
For Calling the GetList BAPI Function
CUSTOMER_NUMBER LIKE BAPI1007-CUSTOMER,
SALES_ORGANIZATION LIKE BAPIORDERS-SALES_ORG,
IT_SALES_ORDERS LIKE TABLE OF BAPIORDERS,
WA_SALES_ORDERS LIKE LINE OF IT_SALES_ORDERS,
IT_RETURN LIKE TABLE OF BAPIRETURN,
WA_RETURN LIKE LINE OF IT_RETURN.
For Calling the ChangeFromData BAPI Function
DATA:
SALESDOCUMENT LIKE BAPIVBELN-VBELN,
WA_ORDER_HEADER_IN LIKE BAPISDH1,
WA_ORDER_HEADER_INX LIKE BAPISDH1X,
IT_ORDER_ITEM_IN LIKE TABLE OF BAPISDITM ,
WA_ORDER_ITEM_IN LIKE LINE OF IT_ORDER_ITEM_IN,
IT_ORDER_ITEM_INX LIKE TABLE OF BAPISDITMX ,
WA_ORDER_ITEM_INX LIKE LINE OF IT_ORDER_ITEM_INX,
IT_SCHEDULE_LINES LIKE TABLE OF BAPISCHDL ,
WA_SCHEDULE_LINES LIKE LINE OF IT_SCHEDULE_LINES,
IT_SCHEDULE_LINESX LIKE TABLE OF BAPISCHDLX ,
WA_SCHEDULE_LINESX LIKE LINE OF IT_SCHEDULE_LINESX,
IT_RETURN_CHG LIKE TABLE OF BAPIRET2,
WA_RETURN_CHG LIKE LINE OF IT_RETURN_CHG.
DATA:
IT_RETURN_CT LIKE BAPIRET2.
PARAMETERS:
P_SO LIKE VBAK-VBELN,
P_CUSTNO LIKE BAPI1007-CUSTOMER,
P_SORG LIKE BAPIORDERS-SALES_ORG.
START-OF-SELECTION.
SALESDOCUMENT = P_SO.
CUSTOMER_NUMBER = P_CUSTNO.
SALES_ORGANIZATION = P_SORG.
Retrieve the Existing Sales Order details for that Sales Order.
PERFORM GETREQSODETAILS.
Delete the Existing Sales Order details from that Sales Order.
PERFORM DELETEOLDSODETAILS.
Insert New details for that Sales Order.
PERFORM ADDNEWSODETAILS.
END-OF-SELECTION.
PERFORM COMMITTRANS.
*& Form GetReqSODetails
FORM GETREQSODETAILS .
CALL FUNCTION 'BAPI_SALESORDER_GETLIST'
EXPORTING
CUSTOMER_NUMBER = CUSTOMER_NUMBER
SALES_ORGANIZATION = SALES_ORGANIZATION
IMPORTING
RETURN = WA_RETURN
TABLES
SALES_ORDERS = IT_SALES_ORDERS.
*delete the Sales Order Details of Sales Orders other than the req.One
IF NOT IT_SALES_ORDERS[] IS INITIAL.
SORT IT_SALES_ORDERS BY SD_DOC.
LOOP AT IT_SALES_ORDERS INTO WA_SALES_ORDERS.
IF WA_SALES_ORDERS-SD_DOC NE SALESDOCUMENT.
DELETE IT_SALES_ORDERS.
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM. " GetReqSODetails
*& Form deleteOldSODetails
FORM DELETEOLDSODETAILS .
DATA: IRECCOUNT TYPE I.
IRECCOUNT = 1.
*Clear all the Inernal Tables And Work Areas
*and Update the SO Header Index
PERFORM CLEARDATA.
PERFORM SOHEADERINDEX.
LOOP AT IT_SALES_ORDERS INTO WA_SALES_ORDERS.
*Fill the Order Details Index Internal Table
PERFORM FILLSODELETEDTLS_INDEX_PARAM
USING WA_SALES_ORDERS-ITM_NUMBER 'D'.
*Fill the Order Scedule Index Internal Table
PERFORM FILLSODELETESCH_INDEX_PARAM
USING WA_SALES_ORDERS-ITM_NUMBER IRECCOUNT 'D'.
ENDLOOP.
*call the Sales Order Change Fumction to delete the Existing Data
CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
EXPORTING
SALESDOCUMENT = SALESDOCUMENT
ORDER_HEADER_INX = WA_ORDER_HEADER_INX
TABLES
RETURN = IT_RETURN_CHG
ORDER_ITEM_INX = IT_ORDER_ITEM_INX
SCHEDULE_LINESX = IT_SCHEDULE_LINESX.
ENDFORM. " deleteOldSODetails
*& Form SOHeaderIndex
FORM SOHEADERINDEX .
WA_ORDER_HEADER_INX-UPDATEFLAG = 'U'.
ENDFORM. " SOHeaderIndex
*& Form FillSODeleteDtls_Index_param
FORM FILLSODELETEDTLS_INDEX_PARAM
USING VALUE(P_ITM_NUMBER) VALUE(P_FLAG).
WA_ORDER_ITEM_INX-ITM_NUMBER = P_ITM_NUMBER.
WA_ORDER_ITEM_INX-UPDATEFLAG = P_FLAG.
APPEND WA_ORDER_ITEM_INX TO IT_ORDER_ITEM_INX.
ENDFORM. " FillSODeleteDtls_Index_param
*& Form FILLSODELETEsch_Index_PARAM
FORM FILLSODELETESCH_INDEX_PARAM
USING VALUE(P_ITM_NUMBER) VALUE(P_RECCOUNT) VALUE(P_FLAG).
WA_SCHEDULE_LINESX-ITM_NUMBER = P_ITM_NUMBER.
WA_SCHEDULE_LINESX-SCHED_LINE = P_RECCOUNT.
WA_SCHEDULE_LINESX-UPDATEFLAG = P_FLAG.
APPEND WA_SCHEDULE_LINESX TO IT_SCHEDULE_LINESX.
ENDFORM. " FILLSODELETEsch_Index_PARAM
*& Form addnewSODETAILS
FORM ADDNEWSODETAILS .
DATA: IRECCOUNT TYPE I, ITEMNO TYPE I.
IRECCOUNT = 1.
*Clear all the Inernal Tables And Work Areas
*and Update the SO Header Index
PERFORM CLEARDATA.
PERFORM SOHEADERINDEX.
WHILE IRECCOUNT <= 1.
ITEMNO = IRECCOUNT * 10.
*Fill the New Order Details in the Internal Table
PERFORM FILLSODTLDATA USING ITEMNO 'TEST FG' 37 .
*Fill the Order Details Index Internal Table
PERFORM FILLSODELETEDTLS_INDEX_PARAM USING ITEMNO 'I'.
*Fill the New Schedule Details in the Internal Table
PERFORM FILLSOSCHDATA USING ITEMNO IRECCOUNT 37 .
*Fill the Order Scedule Index Internal Table
PERFORM FILLSODELETESCH_INDEX_PARAM
USING ITEMNO IRECCOUNT 'I'.
IRECCOUNT = IRECCOUNT + 1.
ENDWHILE.
*call the Sales Order Change Fumction to Insert New Data
CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
EXPORTING
SALESDOCUMENT = SALESDOCUMENT
ORDER_HEADER_INX = WA_ORDER_HEADER_INX
TABLES
RETURN = IT_RETURN_CHG
ORDER_ITEM_IN = IT_ORDER_ITEM_IN
ORDER_ITEM_INX = IT_ORDER_ITEM_INX
SCHEDULE_LINES = IT_SCHEDULE_LINES
SCHEDULE_LINESX = IT_SCHEDULE_LINESX.
ENDFORM. " addnewSODETAILS
*& Form clearData
FORM CLEARDATA .
CLEAR WA_ORDER_HEADER_INX.
CLEAR WA_ORDER_ITEM_INX.
REFRESH IT_ORDER_ITEM_INX.
CLEAR WA_SCHEDULE_LINESX.
REFRESH IT_SCHEDULE_LINESX.
CLEAR WA_RETURN.
REFRESH IT_RETURN.
CLEAR WA_ORDER_ITEM_IN.
REFRESH IT_ORDER_ITEM_IN.
CLEAR WA_SCHEDULE_LINES.
REFRESH IT_SCHEDULE_LINES.
ENDFORM. " clearData
*& Form FILLSODTLDATA
FORM FILLSODTLDATA USING VALUE(P_ITEMNO) VALUE(P_MATERIAL)
VALUE(P_TARGET_QTY) .
WA_ORDER_ITEM_IN-ITM_NUMBER = P_ITEMNO.
WA_ORDER_ITEM_IN-MATERIAL = P_MATERIAL.
WA_ORDER_ITEM_IN-TARGET_QTY = P_TARGET_QTY.
APPEND WA_ORDER_ITEM_IN TO IT_ORDER_ITEM_IN.
ENDFORM. " FILLSODTLDATA
*& Form FILLSOschDATA
FORM FILLSOSCHDATA USING VALUE(P_ITEMNO)
VALUE(P_RECCOUNT)
VALUE(P_REQ_QTY) .
WA_SCHEDULE_LINES-ITM_NUMBER = P_ITEMNO.
WA_SCHEDULE_LINES-SCHED_LINE = P_RECCOUNT.
WA_SCHEDULE_LINES-REQ_QTY = P_REQ_QTY.
APPEND WA_SCHEDULE_LINES TO IT_SCHEDULE_LINES.
ENDFORM. " FILLSOschDATA
*& Form committrans
FORM COMMITTRANS .
DATA:SUCCESSFLAG(1).
LOOP AT IT_RETURN_CHG INTO WA_RETURN_CHG.
IF WA_RETURN_CHG-TYPE = 'S'
AND WA_RETURN_CHG-ID = 'V1'
AND WA_RETURN_CHG-NUMBER = 311
AND SUCCESSFLAG IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'
IMPORTING
RETURN = IT_RETURN_CT.
SUCCESSFLAG = 'X'.
ENDIF.
ENDLOOP.
IF SUCCESSFLAG IS INITIAL.
WRITE: 'SORRY SOME ERROR'.
ELSE.
WRITE: 'SUCCESSFUL'.
ENDIF.
ENDFORM. " committransThanx wolfgang,
I needed that info.
As I had mentioned in the earlier posts, I want to delete the old Sales Order Item Details,
Schedule Details,Basic Price data And Reinsert data in the same.
I am giving u the algo that I have used.
1.<b>Get the SalesOrder Details</b> for a particular Sales Order using BAPI_SALESORDER_GETLIST(para:customer & sales Org and then deleting unwanted SO data).
2.<b>Delete</b> the Sales Order <b>Item Details,Schedule Details</b> using BAPI_SALESORDER_CHANGE.
3.<b>Commit</b> Transaction(<b>If I dont use this commit Error comes in Step No.7 while Commiting</b>)
using BAPI_TRANSACTION_COMMIT.
4.Check <b>Return Table</b> of both BAPI_SALESORDER_CHANGE and BAPI_TRANSACTION_COMMIT.
5.if Step No.4 is <b>Not okay</b> <b>then Rollback</b>(BAPI_TRANSACTION_TRANSACTIN) <b>and Exit</b> <b>else move to step 6</b>.
6.<b>Add New</b> Sales Order <b>Item Details,Schedule Details, Basic Price</b> using BAPI_SALESORDER_CHANGE.
7.<b>Commit Transaction</b> using BAPI_TRANSACTION_COMMIT.
8.<b>Check Return</b> Log of both BAPI_SALESORDER_CHANGE and BAPI_TRANSACTION_COMMIT.
9.if Step No.9 is okay then Exit else Rollback(BAPI_TRANSACTION_TRANSACTIN) and move to step 10.
10.Add Old Sales Order Item Details,Schedule Details, Basic Price from Data available in Internal
table(Filled in step.1 ) using BAPI_SALESORDER_CHANGE.
11.Commit Transaction using BAPI_TRANSACTION_COMMIT.
This <b>works fine in 1 server in which I get the message of Incomplete Data,etc...when I make a Sales Order from va01</b>.
But in another server where I dont this message,I get <b>error in step 7 or 11 as per the flow</b>.
The return structure of BAPI_TRANSACTION_COMMIT contains error with Message 'Updating was not possible'. Also the message 'Updation was terminated' cms frm the SAP server.
What could be the reason?
Thanx in advance -
Do we have any BAPI to get the Sales quote or Sales order details
Hi Experts,
Do we have any BAPI to get the sales quote or sales order details from my other SAP system.
My requirement is to get the sales quote or sales order details from the other SAP system.
Please help.
Regards,
ChitrasenHi Experts,
Thanks for ur help. The BAPI is BAPI_SALESORDER_GETSTATUS which helps in fetching the sales quote information.
Thanks,
Chitrasen
Maybe you are looking for
-
Problem in Stock Transfer Depot to Depot.
Hi All, The Scenario is we are importing the Trading Material to Depot from there we are transporting to other depot & then send to the Customer. Import Material to Depot 1. ME21N - Import PO to Depot (normal PO u2013 Document type NB) 2. MIGO - Good
-
Hi, Is it possible to create a Report Script that would export Period data (jan, feb, ... dec) condition being that the start period is a subvar. Eg. from &FcstMonth to Dec, where &FcstMonth is Aug. Regards Leo
-
What should I do to upgrade my PowerBook G4 15" to use Ipad
heyo! I'm currently using PowerBook G4 15" run on version 10.4.11 CPU Speed:1.5 GHz L2 Cache (per CPU):512 KB Memory:768 MB Hard drive:80gb Recently,i just won an ipad and i cant use it at all.the moment i connect it prompt, need an higher version 10
-
hi all.. does anyone knows if this board supports intel's vt-x? msi p31 neo-f http://eu.msi.com/index.php?func=proddesc&maincat_no=1&prod_no=1286 how can i enable it? edited. updated the link above
-
Being over billed and lied to about the price me and an in store agent agreed to!
I just signed up for comcast Internet 25 with basic TV for 39.99 the guy in the store said that the bill may say 65.99 til his supervisor fixes it but it will be fixed within 48 hours. oh but guess what 72 hours later bill says still 65.99 and every