Open Purchase order migration between systems

Hi Folks,
I have to migrate open purchase orders from 2 legacy systems into 1 new upgraded system. I do not want to change the PO number and therefore i have decided to set an external number range for all the Open POs.
Now my problem is in legacy system, there are open POs with different document types, in legacy system. Is it ok if I convert all open POs as a new custom document type in new system. let me know what problems could i face if i do this.
if not any other solution is most welcome
thanks n advance

Kartikey,
???? You are asking the wrong people.  We couldn't possibly know for sure. It sounds to me like you are already designing the conversion process when you are not yet sure about the design of the solution.
During the sessions when you are interviewing the client, you must ask multiple questions about his business.  For one, you need to discover the existing business requirements that caused the client to use multiple document types in legacy in the first place.  This information only can come from your client.
Once you discover his reasons (or lack of reasons), you then have to determine in your 'To-be' solution if you still will need to satisfy that same business requirement.  If you do, then you have to determine if the solution that you design will require multiple document types in SAP, or if you will instead utilize a different method to satisfy the requirement.
Good Luck & Best Regards,
DB49

Similar Messages

  • MRP not considering open purchase orders when planning for open sales order

    Dear Experts,
        1.I have open sales orders as well as planned Independent requirements for finished goods for the current month. Also I have open puchase orders for raw materials which is part of the Bill of material of the finished goods for the current month.
    Please what do i need to do to make MRP consider my open purchase orders when the system is planning for the open sales orders.
    2 what tcode can I use to delete all purchase reuisitions in the sytem

    There was no response to these questions so i had to close it to make space for another

  • Data Migration for Open Purchase Order

    Hi, All,
    Is there anyone know how to Count the volume for Open Purchase Order. What's the normal strategy for the Data Migration and Cut-over stage?
    My client want to know how many Open Purchase Order in the legacy system and then determine manual or automatic data migration. If manual, how to do? If automatic, how to do? Because all materials and vendors, plants are different number. How to track? How to find out to match between new and old?
    Thank you very much

    JC,
    Sounds a bit early to be making decisions about the realization phase.  It doesn't sound like you have finished the Blueprinting phase yet, much less the testing phase.
    Anyhow, in my experience I typically use LSMW (Legacy system migration workbench) to load MM master data (material masters), Inventory (WIP, RM, FG, etc) Purchasing Master data (Vendors, Purchase Info Records, Source Lists, Quota Arrangements), and Purchasing transactional documents (POs, PurReqs, Scheduling Agreements, etc).  Depending on the complexity and volume of data, it  may be necessary to write custom programs to load the data.  You will find this out during your requirements gathering.
    It is uncommon but possible to load all of these data manually.  I have never run across a client that wants to pay a consultant's hourly rate to sit at a terminal to peck away loading master data, so if the client intends to have his own users enter the data manually, the project manager should make provision that there will be qualified TRAINED client employees available for this data entry.  I did help with a portion of a conversion once manually; of Sales Credits, but there were only about 30 SD docs to load.   I did this the evening before go-live day, while I was waiting for some of my LSMW projects to complete in the background.
    A good opportunity to 'practice' your data loads is right after you have completed your development and customization, and you have gotten the approval from the client to proceed from the pilot build to the full test environment.  Once you have moved your workbench and customization into the client's test environment, but before integration testing, you can mass load all, or a substantial portion of your conversion data into the qual system.  You can treat it like a dry run for go-live, and fine tune your processes, as well as your LSMW projects.
    Yes, it is good practice to generate comparisons between legacy and SAP even if the client doesn't ask for it. For Purchase orders on the SAP side, you could use any of the standard SAP Purchasing reports, such as ME2W, ME2M, ME2C, ME2L, ME2N.  If these reports do not meet the requirements of the client, you could write a query to display the loaded data, or have an ABAPer write a custom report.
    You didn't ask, but you should also do comparisons of ALL loaded data - including master data.
    It sounds like you are implying that the client wants YOU to extract the legacy data.  For an SAP consultant, this is not very realistic (unless the legacy system is another SAP system).  Most of us do not understand the workings of the myriad legacy systems.  The client is usually expected to produce one or more legacy system technical experts for you to liase with.  You normally negotiate with the technical expert about every facet of of the data migration.  In addition, you will liase with business users, who will help you and the implementation team to logically validate that the final solution (turnkey SAP production system, fully loaded with data) will meet the client's business needs.
    Finally, you mentioned how do you track the mapping of master data between legacy and SAP.  There are many ways to do this.  I normally try to get the legacy person do the conversion on his end, eg, when he gives you the load file, you would like to have already translated the master data and inserted the SAP relevant values into the file.  If this is not possible, I usually use MS Access databases to maintain a master map, and I perform the mapping on a PC.  If your data package is small, you can probably get by using MS Excel or similar.
    Good Luck,
    DB49

  • Migrate all Open Sales Orders From Legacy System (SAP) To SAP System using

    Hi Experts,
                 I've to Migrate all Open Sales Orders From Legacy System (SAP) To SAP System using Business Objects with a new SALES ORDER DOCUMENT NUMBER referencing the older one.
               I'll get all the required data with field in an excel file.
                 Does any standard transaction exist for it ? Or how to go ahead with it ?
    Thanks and regards,
    Jyoti Shankar

    Hi
    If you are checking for CREATE option then Sales Doc Type
    For more Info goto SWO1 transaction -> BUS2032 --> DIsplay --> Execute --> There SELECT the method which you want to perform... There you can fine the MANDATORY parameters also....
    Or in DISPLAY mode PLACE Cursor on the Required Method and CLick the PARAMETERS button on toolbar...
    That will show the MANDATORY parameters...
    Reward if helpful....
    Message was edited by:
            Enter the Dragon

  • Migrating Open Sales Order From Legacy System (SAP) To SAP System

    Hi Experts,
                 I've to Migrate all Open Sales Orders From Legacy System (SAP) To SAP System using Business Objects with a new SALES ORDER DOCUMENT NUMBER referencing the older one.
               I'll get all the required data with field in an excel file.
                 Does any standard transaction exist for it ? Or how to go ahead with it ?
    Thanks and regards,
    Jyoti Shankar

    hi jyothi ,
       there are lot of ways of doing it depending on data upload volume it will be decided .
    1) thru abap bdc program which directly uses XL sheet data and creates SO using bapi/FMs.
    2) using scat.functional consultant should be good enough to use this.
    3)lsmw-laborious procedure but achievable.
      reward if helps !!!!!

  • Return nothing when run Open Purchase order report(by Buyer)

    We implement iPro/PO in Oracle. I finished the PO setup. But now user report that they are not able to generate any output for a particular Buyer when they run the Open Purchase Orders Report(by Buyer) report in the PO module. Even I leave the parameter wide open for the request, it also does not return any information.
    Does it relate to the PO setting in system? Anyone can kindly guide me how to check such problem?

    Hi Kyla,
    PO raised by the buyer is 'STANDARD','BLANKET','PLANNED' ? What is the PO Status..? It should be "OPEN"..
    Query used in this report is as below :
    Query - Company
    SELECT gsb.name c_company
    , fsp.inventory_organization_id c_organization_id
    , gsb.currency_code C_CURRENCY_BASE
    , gsb.chart_of_accounts_id STRUCTURE_ACC
    , mdv.structure_id STRUCTURE_CAT
    , mdv.category_set_id c_category_set_id
    , flo1.meaning c_yes
    , flo2.meaning c_no
    FROM gl_sets_of_books gsb
    , financials_system_parameters fsp
    , mtl_default_sets_view mdv
    , fnd_lookups flo1
    , fnd_lookups flo2
    WHERE gsb.set_of_books_id = fsp.set_of_books_id
    AND mdv.functional_area_id = 2
    AND flo1.lookup_type = 'YES_NO'
    AND flo1.lookup_code = 'Y'
    AND flo2.lookup_type = 'YES_NO'
    AND flo2.lookup_code = 'N'
    Query - Buyer
    SELECT distinct(pov.vendor_name||papf.full_name)
    , papf.full_name Buyer
    , pov.vendor_name Vendor
    , pov.vendor_id
    , papf. person_id employee_id
    FROM PER_ALL_PEOPLE_F PAPF
    , po_vendors pov
    , po_headers poh
    WHERE poh.agent_id = papf.person_id
    AND poh.vendor_id = pov.vendor_id
    AND poh.type_lookup_code in ('STANDARD','BLANKET','PLANNED')
    AND nvl(poh.closed_code,'OPEN') NOT IN ('FINALLY CLOSED', 'CLOSED')
    AND nvl(poh.cancel_flag,'N') = 'N'
    /* AND papf.full_name = nvl(:P_buyer,papf.full_name) */
    /* Bug#2453022 Commented out the above condition and replaced
    it as follows as the user parameter P_Buyer will now return the id and not the name */
    AND papf.person_id = nvl(:P_buyer,papf.person_id)
    AND pov.vendor_name BETWEEN nvl(:P_vendor_from,pov.vendor_name)
    AND nvl(:P_vendor_to,pov.vendor_name)
    AND EXISTS (select 'x'
    from po_lines pol
    , po_line_locations pll
    , po_releases por
    where pol.po_header_id = poh.po_header_id
    and pol.po_line_id = pll.po_line_id
    and nvl(pll.closed_code,'OPEN') not in ('FINALLY CLOSED','CLOSED')
    and nvl(pol.closed_code,'OPEN') not in ('FINALLY CLOSED','CLOSED')
    and nvl(por.closed_code,'OPEN') not in ('FINALLY CLOSED','CLOSED')
    and nvl(pll.cancel_flag,'N') = 'N'
    and nvl(pol.cancel_flag,'N') = 'N'
    and nvl(por.cancel_flag,'N') = 'N'
    and pll.shipment_type in ('STANDARD','BLANKET','SCHEDULED')
    and pll.po_release_id = por.po_release_id(+))
    AND PAPF.EMPLOYEE_NUMBER IS NOT NULL
    AND TRUNC(SYSDATE) BETWEEN PAPF.EFFECTIVE_START_DATE AND
    PAPF.EFFECTIVE_END_DATE
    AND DECODE(HR_SECURITY.VIEW_ALL ,'Y' , 'TRUE',
    HR_SECURITY.SHOW_RECORD('PER_ALL_PEOPLE_F',PAPF.PERSON_ID,
    PAPF.PERSON_TYPE_ID,
    PAPF.EMPLOYEE_NUMBER,PAPF.APPLICANT_NUMBER )) = 'TRUE'
    AND DECODE(HR_GENERAL.GET_XBG_PROFILE,'Y', PAPF.BUSINESS_GROUP_ID ,
    HR_GENERAL.GET_BUSINESS_GROUP_ID) = PAPF.BUSINESS_GROUP_ID
    ORDER BY papf.full_name
    , pov.vendor_name
    Query - PO
    SELECT distinct(pol.line_num) Line
    , poh.segment1 ||decode(por.release_num,null,'','-')|| por.release_num PO_Number_Release
    , poh.currency_code C_CURRENCY
    , plt.line_type Line_Type
    , &P_FLEX_CAT C_FLEX_CAT
    , &P_FLEX_ITEM C_FLEX_ITEM
    , pol.item_revision Rev
    , pol.item_description Description
    , pol.po_header_id
    , pol.po_line_id
    , poh.vendor_id
    , poh.agent_id
    , psp.manual_po_num_type
    , poh.segment1
    , por.release_num
    , nvl(por.po_release_id,-1) release_id
    FROM po_line_locations pll
    , mtl_system_items msi
    , mtl_categories mca
    , po_lines pol
    , po_releases por
    , po_headers poh
    , po_line_types plt
    , po_system_parameters psp
    WHERE poh.po_header_id = pol.po_header_id
    AND pol.po_line_id = pll.po_line_id
    AND pll.po_release_id = por.po_release_id(+)
    AND pol.line_type_id = plt.line_type_id
    AND pol.item_id = msi.inventory_item_id(+)
    AND msi.organization_id(+) = :c_organization_id
    AND pol.category_id = mca.category_id
    AND nvl(pll.closed_code,'OPEN') not in ('FINALLY CLOSED','CLOSED')
    AND nvl(pol.closed_code,'OPEN') not in ('FINALLY CLOSED','CLOSED')
    AND nvl(poh.closed_code,'OPEN') not in ('FINALLY CLOSED','CLOSED')
    AND nvl(por.closed_code,'OPEN') not in ('FINALLY CLOSED','CLOSED')
    AND nvl(pll.cancel_flag,'N') = 'N'
    AND nvl(pol.cancel_flag,'N') = 'N'
    AND nvl(poh.cancel_flag,'N') = 'N'
    AND nvl(por.cancel_flag,'N') = 'N'
    AND pll.shipment_type in ('STANDARD', 'BLANKET', 'SCHEDULED')
    ORDER BY decode(psp.manual_po_num_type,'NUMERIC',
    --bug#3614924
    decode(rtrim(poh.segment1,'0123456789'),NULL,to_number(poh.segment1))
    , null)
    , decode(psp.manual_po_num_type,'NUMERIC',null, poh.segment1)
    , por.release_num
    , pol.line_num
    Query - Shipment
    SELECT pll.shipment_num Shipment
    , nvl(pll.promised_date,pll.need_by_date) P_Date
    , pol.unit_meas_lookup_code Unit
    , DECODE (POL.order_type_lookup_code, /* <SERVICES FPJ> */
    'RATE', PLL.amount,
    'FIXED PRICE', PLL.amount,
    PLL.quantity) Ordered
    , DECODE (POL.order_type_lookup_code, /* <SERVICES FPJ> */
    'RATE', PLL.amount_received,
    'FIXED PRICE', PLL.amount_received,
    PLL.quantity_received) Received
    , DECODE (POL.order_type_lookup_code, /* <SERVICES FPJ> */
    'RATE', PLL.amount_billed,
    'FIXED PRICE', PLL.amount_billed,
    PLL.quantity_billed) Billed
    , pll.price_override Unit_Price
    , DECODE (POL.order_type_lookup_code, /* <SERVICES FPJ> */
    'RATE', (PLL.amount - NVL(PLL.amount_received, 0))/
    DECODE(NVL(PLL.amount, 0), 0, 1, PLL.amount),
    'FIXED PRICE', (PLL.amount - NVL(PLL.amount_received, 0))/
    DECODE(NVL(PLL.amount, 0), 0, 1, PLL.amount),
    (NVL(PLL.quantity, 0) - NVL(PLL.quantity_received, 0))/
    DECODE (NVL(PLL.quantity, 0), 0, 1, PLL.quantity)) * 100 Percent_Due
    , plc.displayed_field Open_For
    , pll.po_line_id
    , nvl(pll.po_release_id,-1) join_release_id
    FROM po_line_locations pll
    , po_lines pol
    , po_lookup_codes plc
    WHERE pol.po_line_id = pll.po_line_id
    AND nvl(pll.closed_code,'OPEN') not in ('FINALLY CLOSED','CLOSED')
    AND nvl(pol.closed_code,'OPEN') not in ('FINALLY CLOSED','CLOSED')
    AND nvl(pll.cancel_flag,'N') = 'N'
    AND nvl(pol.cancel_flag,'N') = 'N'
    AND plc.lookup_type = 'DOCUMENT STATE'
    AND plc.lookup_code = nvl(pll.closed_code, 'OPEN')
    AND pll.shipment_type in ('STANDARD', 'BLANKET', 'SCHEDULED')
    ORDER BY pll.shipment_num

  • Close open Purchase order

    Dear Experts,
      My client has change the release procedure, but they have not closed the open Purchase orders, now we are trying to close the open PO system is not allowing us to close the Open Po , complete delivery indicator is in grey mode , Can any body help  me How i wll i close the Open Purchase orders
    Thanks
    Hirwani

    Hi Hirwani,
    I have seen this a few times before.
    I found other customer has  similar problem as the release strategy has changed           
    after creation of the SES please review the  explanation from developer           
    :(whose release code is 03 )                                                                               
    When you try to revoke the acceptance of the service entry sheets                 
    in ML81N or ML81, the 'Enter release code' pop  up window appears, but            
    entering the code that is determined via the menu path Goto -> Entry              
    Sheet -> Release Strategy (which is the 03), the SES remains the same.            
    Nothing changes. The status does not vary and no error or warning                 
    message is issued.                                                                               
    Checking the customizing for the release strategy, the release code               
    03 should have never been assigned to the SES 800024272 as the values             
    for the relevant characteristics were not included under that code.               
    I do not know how it was managed to accept the SES.                                                                               
    Now, when you try to revoke it, it seems that no release                          
    strategy can be determined, not even including the values RCARESANO               
    and 012 between the valid values for the characteristics of the release           
    code 03 (RCARESANO as valid value for SUPERVISOR_SERVICIOS                        
    (CESSR-ERNAM)and 012 as valid value for GRUPO_COMPRAS (CESSR-EKGRP)).                                                                               
    The only Possibility is to change now the SES so that the release                 
    strategy can be re-determined by the system.This is the Only possible             
    way that the system can  redetermine the Release Strategy , but it will           
    not be possible to do so as the SES is already accepted with the Old              
    strategy and it does not admit any further changes.                               
    To be able to change it you would need to revoke the SES first,                   
    but this Will also not be possible as the Release Strategy was changed            
    and the system still applies the old rules for determining the Release.           
    Solution to our Problem                                                                               
    The Only way to revoke the SES is to Restore back the Old Strategy that           
    was prior to 03 in the customizing.So now what will happen is that by             
    applying the Old Rules the System will be able to revoke the SES that#s           
    using the Old one. Once the necessary SES are revoked then go back to             
    customizing and apply the new strategy as it was did now, and                     
    Change the SES and save , the new value of the Release Strategy will get          
    updated in the table ESSR and the field frgsx will now have 03.                                                                               
    Problems associated if the Release strategy is changed                                                                               
    Actually the release strategy is not supposed to be changed when there     
    are some documents in the System that uses it and even if you change the   
    Strategy the Old records will not get AUTOMATICALLY UPDATED by the        
    system.The Release Strategy routine has to run again to update the         
    values. This is Possible by changing the document SES ,                    
    This change will happen only if the SES is not accepted and if its         
    accepted then you need to revoke and to revoke you need to restore the     
    old strategy , revoke and then change the SES , and have to go back to     
    customizing and Start using the New strategy from now on by doing so the   
    Routine will update the old record with the new strategy.                 
    You may want to use CEKKO-BADAT(Requisition Date) or any other
    structure in CEBAN or CEKKO and create a new release strategy    
    to differentiate the old release strategy.
    Alternatively using the corresponding user exit to redermine the BAdI might help but my first suggestion would be the best.
    Purchase requisition                                                 
                           M06E0002 - for item wise release                
                           M06E0005 - for overall release                                                                               
    External purchasing document                                         
                           M06E0004
    Hope this is of help to you,
    Kind Regards,
    Matthew

  • OPEN PURCHASE ORDER

    DEAR ALL,
    WHETHER WE HAVE A STANDARD REPORT IN SAP TO GET QUANTITY AND VALUE DATA OF BACK DATED OPEN PURCHASE ORDER?
    PURCHASE ORDER HAS BEEN PREPARED IN JANUARY, DOWN PAYMENT IS MADE IN THE MONTH OF MARCH, MATERIAL IS RECEIVED (GRN MADE) IN AUGUST
    IN ABOVE CASE WHEN I GENERATE A OPEN PURCHASE ORDER REPORT AS ON 31.03.2008 IT IS NOT SHOWING ME THE QUANTITY & VALUE DETAILS OF OPEN PURCHASE ORDERS.
    PLEASE LET ME KNOW THE WORK AROUND.
    WAITING
    AMIT

    Dear,
    Enter ME2N, Select WE101 in selection parameter field.
    Then enter other required detail and click on execute button.
    So system give you list of open purchase order.
    Then click on change layout button.
    Transfer Still to be invoiced (qty) field Column Set to Display column set mode.
    And click on continua button.
    Duse to this field you can track for how many quantity good receipt is created of purchase order.
    Regards,
    Mahesh Wagh

  • Open Purchase Order Quantity

    Hi, All,
    Is there any way to know how many open purchase order quantity in the SAP system?
    If I want to differentiate different business unit open purchase order, how I can do?
    What's the T-code?
    Thanks

    Hi,
    You can use ME2M, ME2N, ME2L, in the field Selection Parameters on the initial screen specify WE101 & the reports will list out all PO's for which GR is pending (i.e. Open PO's). Now you can change layout add / remove fields as per your need. You can also sub-total on plant or purchasing org. thereby getting the data you require. Also in the selection screen in the field Scope of List you can specify ALV to get an alv listing.
    Hope the above answers your query.
    Regards,
    Vivek

  • Open Purchase Order, Sales Order and WIP Jobs

    Hello,
    Can some one help me with the query to find all open sales order, open purchase orders and open WIP jobs for an organization.
    Is there any way i can fetch this information from Oracle forms directly without running any backend query ? If yes, please help me with the navigation and other details.
    Thanks,
    Shilpa.

    XtreMe Imperium - Retailer sales reporting, a centralized reporting system for a malls POS data. It provides access to detailed, consolidated reporting of all retailers. We collect your data, and deliver it through reports that are customized to meet your needs.
    XtreMe Imperium Retailer Sales Reporting allows you to
    Manage master information of all retailers
    Web based daily / optional intraday* reporting of POS data
    Accurate sales information from retailers. No Misreporting
    Analytical Information of brand & category performance
    Average spend size with daily trends
    MIS to strategize and implement Mall promotions
    How it works
    It all starts with the client software running on each location’s POS server. This client is a small application that is set up to execute using Windows Scheduler. This gives you full control over how frequently the data is sent to the server. Once the data is loaded to the server, using secure FTP over a broadband internet connection, it is loaded in to a MS SQL database. Once there, it is available for reporting using an interface that is simple and easy to navigate.
    for more: [http://pftec.com/MallManagement/retailer-sales-reporting.aspx|http://pftec.com/MallManagement/retailer-sales-reporting.aspx]

  • Open Purchase Order (VA01)

    Hi Guru's,
    I am new to SD Module. My requirement is to create Sales Order .
    That SO should take Open Purchase order. How to check the condition for this requirement?
    Is any status or Indicatior will maintain in tables??
    Thanks & Regards,
    Meenakshi.

    Hi
    SInce it is a customer PO and not created as a document in SAP, system cannot check the open quantities in a customer PO.
    But, we can always check whether that customer PO has already been used for creating a Sales Order or not? In the definition of the Sales Document type, if the checkbox for the field 'Check PO Number' (not sure if it is a field or checkbox) is selected, then while creating the sales order system checks whether any sales order has been created previously with the same PO number.
    Thanks,
    Ravi

  • Open Purchase Order table.

    Hi
    I want to prepare a report which should display open Purchase Order quantity according to latest delivery date.
    I explain with a example.
    Say a material has 3 Purchase Orders with delivery date as 1st June,15th June and 20th June.Then system should pick the Purchase Order with delivery date as 1st June and it should dislay the quantity which is yet to be delivered,means there is possibility that GR has already been done for some of the quantity.
    To summarize the report should pick the latest Purchase Quantity and display the quantity yet to be delivered.Can anybody let me kow the Tables to be refered fro the same.
    Regards
    Vaibhav Mahajan

    Hi Vaibhav
    You can go to report by ME2N. Here you have multiple options for your reoport. In selection parameters you can put OPEN PO nad put the delievery date. There are many combinations available in this report.
    Please let me know if it doesn't work.
    Regards
    SS

  • Urgent :Doubt on open Purchase orders

    Hi friends,
    i will be more help full if anybody can help me on below issue how to find open PO and partially open PO.
    Only “open” purchase orders will be extracted for conversion into Destination Server. An “open” purchase order is defined as any unshipped, non-cancelled with “open quantities”. In regards to, partially “open” purchase orders, we will only convert “open” units (i.e. Original ordered qty was 300; 70 have shipped, 230 remain open…Target Server sales order will have an original order qty of 230).
    also where to find that Sub Contracting orders and Sample orders.
    • Orders not considered for migration because they will have either shipped in full or deleted prior to data migration as a part of data clean-up: ALL subcontracting orders; sample orders
    please help me on the above two issues.
    thanks and Regards,
    Gokul.

    Hi
    First take the ALL Po's from EKKO and EKPO tables and check for the different GR's and GI's qty's from MKPF and MSEG tables and you have to compare the PO qty with the total GR/GI qty's and to find the OPEN po's
    see the sample report
    *& Report  ZMM_PO_REPORT
    REPORT  ZMM_PO_REPORT message-Id yb
           NO STANDARD PAGE HEADING
           LINE-COUNT 60(1)
           LINE-SIZE 230.
           D A T A B A S E  T A B L E S   D E C L A R A T I O N
    TABLES: lfa1,           " Vendor Master
            t161,           " PO Doc Types
            t024,           " Purchase Groups
            ekko.           " PO Header
                   T Y P E S  D E C L A R A T I O N S
    Purchase Orders Main Structure
    TYPES: BEGIN OF s_po,
            ebeln TYPE ebeln,           " PO No.
            ebelp TYPE ebelp,           " PO Item
            bstyp TYPE bstyp,           " PO Category
            bukrs TYPE bukrs,           " Company Code
            bsart TYPE bbsrt,           " PO Type
            lifnr TYPE lifnr,           " Vendor No
            ekgrp TYPE bkgrp,           " Purchase Group
            waers TYPE waers,           " Currency
            bedat TYPE etbdt,           " PO Date
            txz01 TYPE txz01,           " Material Text
            werks TYPE ewerk,           " Plant
            lgort TYPE lgort_d,         " Storage Location
            matkl TYPE matkl,           " Material Group
            menge TYPE bamng,           " PR Quantity
            meins TYPE bamei,           " UOM
            bprme TYPE bbprm,           " Price Unit
            netpr TYPE netpr,           " Net price
            peinh TYPE peinh,           " Price Unit UOM
            pstyp TYPE pstyp,           " Item Category
            knttp TYPE knttp,           " Account Assignment Category
           END OF s_po.
    Purchase Orders History Structure
    TYPES: BEGIN OF s_account,
            ebeln TYPE ebeln,           " PO No.
            ebelp TYPE ebelp,           " PO Item
            gjahr TYPE mjahr,           " Fiscal Year
            belnr TYPE mblnr,           " PO Invoice No
            menge TYPE menge_d,         " PR Quantity
            wrbtr TYPE wrbtr,           " Price in Local Currency
            dmbtr TYPE dmbtr,           " Price in Foreign Currency
            waers TYPE waers,           " Currency
            shkzg TYPE shkzg,           " Dr/Cr Indicator
           END OF s_account.
    Purchase Orders History Structure(Item Sum)
    TYPES: BEGIN OF s_inv_sum,
            ebeln TYPE ebeln,           " PO No.
            ebelp TYPE ebelp,           " PO Item
            menge TYPE menge_d,         " PR Quantity
            wrbtr TYPE wrbtr,           " Price in Foreign Currency
            waers TYPE waers,           " Currency
           END OF s_inv_sum.
    Purchase Orders Main Structure
    TYPES: BEGIN OF s_rep,
            lifnr TYPE lifnr,           " Vendor No
            ebeln TYPE ebeln,           " PO No.
            ebelp TYPE ebelp,           " PO Item
            bstyp TYPE bstyp,           " PO Category
            bsart TYPE bbsrt,           " PO Type
            ekgrp TYPE bkgrp,           " Purchase Group
            waers TYPE waers,           " Currency
            bedat TYPE etbdt,           " PO Date
            txz01 TYPE txz01,           " Material Text
            werks TYPE ewerk,           " Plant
            lgort TYPE lgort_d,         " Storage Location
            matkl TYPE matkl,           " Material Group
            menge TYPE bamng,           " PR Quantity
            meins TYPE bamei,           " UOM
            bprme TYPE bbprm,           " Price Unit
            netpr TYPE netpr,           " Net price
            peinh TYPE peinh,           " Price Unit UOM
            pstyp TYPE pstyp,           " Item Category
            knttp TYPE knttp,           " Account Assignment Category
            name1 TYPE name1,           " Plant
            orewr TYPE netpr,           " To be Invoiced Price
            curr  TYPE waers,           " Inv Doc Currency
           END OF s_rep.
               D A T A  D E C L A R A T I O N S
    DATA: gv_title1 TYPE sylisel,            " Report title
          gv_dial.                           " Color flag
                C O N S T A N T S  D E C L A R A T I O N S
    CONSTANTS: c_x                VALUE 'X',   " Flag X
               c_h                VALUE 'H',   " Debit
               c_vgabe TYPE vgabe VALUE '2'.   " Transaction Type
         I N T E R N A L  T A B L E S  D E C L A R A T I O N S
    DATA: i_po    TYPE STANDARD TABLE OF s_po WITH HEADER LINE,
                                 " Purchase Order
          i_inv   TYPE STANDARD TABLE OF s_inv_sum WITH HEADER LINE,
                                         " PO Invoice Values
          i_rep   TYPE STANDARD TABLE OF s_rep WITH HEADER LINE,
                                     " PO Invoice Values
          i_ekbe  TYPE STANDARD TABLE OF s_account WITH HEADER LINE.
                               " PO Invoice Values
                     S E L E C T I O N  S C R E E N                      *
    SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
    SELECT-OPTIONS: s_lifnr FOR lfa1-lifnr MATCHCODE OBJECT kred,
                    s_ebeln FOR ekko-ebeln MATCHCODE OBJECT mekk,
                    s_bsart FOR t161-bsart,
                    s_ekgrp FOR t024-ekgrp,
                    s_bedat FOR ekko-bedat.
    SELECTION-SCREEN END OF BLOCK b1.
                      I N I T I A L I Z A T I O N                        *
    INITIALIZATION.
                  A T  S E L E C T I O N - S C R E E N                   *
    AT SELECTION-SCREEN.
    Validate the screen fields
      PERFORM validate_screen.
                   S T A R T - O F - S E L E C T I O N                   *
    START-OF-SELECTION.
    Fetch main data
      PERFORM fetch_data.
                   T O P - O F - P A G E                                 *
    TOP-OF-PAGE.
    Header of the List
      PERFORM header.
                   E N D - O F - P A G E                                 *
    Footer
    END-OF-PAGE.
      ULINE.
                   E N D - O F - S E L E C T I O N                       *
    END-OF-SELECTION.
    Display the Report Output data
      PERFORM display_data.
    At Line-Selection
    AT LINE-SELECTION.
    When double clicked on EBELN display the details of Purchase Doc
      PERFORM line_sel.
    *&      Form  validate_screen
    Validation of Selection Screen fields
    FORM validate_screen .
    Validation of Vendor Number
      CLEAR lfa1-lifnr.
      IF NOT s_lifnr[] IS INITIAL.
        SELECT lifnr UP TO 1 ROWS
            INTO lfa1-lifnr
            FROM lfa1
            WHERE lifnr IN s_lifnr.
        ENDSELECT.
        IF sy-subrc <> 0.
          MESSAGE e000 WITH 'Invalid Vendor'(002).
        ENDIF.
      ENDIF.
    Validation of PO Number
      CLEAR ekko-ebeln.
      IF NOT s_ebeln[] IS INITIAL.
        SELECT ebeln UP TO 1 ROWS
            INTO ekko-ebeln
            FROM ekko
            WHERE ebeln IN s_ebeln.
        ENDSELECT.
        IF sy-subrc <> 0.
          MESSAGE e000 WITH 'Invalid Document Number'(003).
        ENDIF.
      ENDIF.
    Validation of PO Document Type
      CLEAR t161-bsart.
      IF NOT s_bsart[] IS INITIAL.
        SELECT bsart UP TO 1 ROWS
            INTO t161-bsart
            FROM t161
            WHERE bsart IN s_bsart.
        ENDSELECT.
        IF sy-subrc <> 0.
          MESSAGE e000 WITH 'Invalid Purchase Document Type'(004).
        ENDIF.
      ENDIF.
    Validation of Purchasing Group
      CLEAR t024-ekgrp.
      IF NOT s_ekgrp[] IS INITIAL.
        SELECT ekgrp UP TO 1 ROWS
            INTO t024-ekgrp
            FROM t024
            WHERE ekgrp IN s_ekgrp.
        ENDSELECT.
        IF sy-subrc <> 0.
          MESSAGE e000 WITH 'Invalid Purchasing Group'(005).
        ENDIF.
      ENDIF.
    ENDFORM.                    " validate_screen
    *&      Form  fetch_data
    Fetching the PO related data from Database Tables
    FORM fetch_data .
      CLEAR i_po.
      REFRESH i_po.
      SELECT a~ebeln            " PO No.
             b~ebelp            " PO Item
             a~bstyp            " PO Category
             a~bukrs            " Company Code
             a~bsart            " PO Type
             a~lifnr            " Vendor No
             a~ekgrp            " Purchase Group
             a~waers            " Currency
             a~bedat            " PO Date
             b~txz01            " Material Text
             b~werks            " Plant
             b~lgort            " Storage Location
             b~matkl            " Material Group
             b~menge            " PR Quantity
             b~meins            " UOM
             b~bprme            " Price Unit
             b~netpr            " Net price
             b~peinh            " Price Unit UOM
             b~pstyp            " Item Category
             b~knttp            " Account Assignment Category
        INTO TABLE i_po
        FROM ekko AS a JOIN ekpo AS b
        ON a~ebeln = b~ebeln
        WHERE a~ebeln IN s_ebeln AND
              a~lifnr IN s_lifnr AND
              a~ekgrp IN s_ekgrp AND
              a~bsart IN s_bsart AND
              a~bedat IN s_bedat.
      SORT i_po BY ebeln ebelp.
      break-point.
      IF NOT i_po[] IS INITIAL.
    Fetch the PO History/Invoice Details from EKBE Table
        CLEAR i_ekbe.
        REFRESH i_ekbe.
        SELECT ebeln           " PO No.
               ebelp           " PO Item
               gjahr           " Fiscal Year
               belnr           " PO Invoice No
               menge           " PR Quantity
               wrbtr           " Price in Local Currency
               dmbtr           " Price in Foreign Currency
               waers           " Currency
               shkzg           " Dr/Cr Indicator
         INTO TABLE i_ekbe
         FROM ekbe
         FOR ALL ENTRIES IN i_po
         WHERE ebeln = i_po-ebeln AND
               ebelp = i_po-ebelp AND
               vgabe = c_vgabe.
      break-point.
        IF sy-subrc = 0.
          SORT i_ekbe BY ebeln ebelp.
          LOOP AT i_ekbe.
            IF i_ekbe-shkzg = c_h.
              i_ekbe-wrbtr = i_ekbe-wrbtr * -1.
            ENDIF.
            MODIFY i_ekbe.
          ENDLOOP.
      break-point.
    Sum up the Item wise Invoice totals
          LOOP AT i_ekbe.
            AT END OF ebelp.
              READ TABLE i_ekbe INDEX sy-tabix.
              SUM.
              MOVE-CORRESPONDING i_ekbe TO i_inv.
              APPEND i_inv.
            ENDAT.
            CLEAR i_inv.
          ENDLOOP.
          SORT i_inv BY ebeln ebelp.
            break-point.
        ENDIF.
      ENDIF.
    Move the Vendor Name and Invoice Values to I_rep Internal Table
      LOOP AT i_po.
        MOVE-CORRESPONDING i_po TO i_rep.
        CLEAR i_inv.
        READ TABLE i_inv WITH KEY ebeln = i_po-ebeln
                                  ebelp = i_po-ebelp.
        IF sy-subrc = 0.
          i_rep-orewr = ( i_po-menge - i_inv-menge ) * i_po-netpr.
          i_rep-curr  = i_inv-waers.
        ELSE.
          i_rep-orewr = i_po-menge * i_po-netpr.
          i_rep-curr  = i_po-waers.
        ENDIF.
      break-point.
    Get the Vendor Name
        CLEAR lfa1-name1.
        SELECT SINGLE name1 FROM lfa1 INTO lfa1-name1
          WHERE lifnr = i_po-lifnr.
        IF sy-subrc = 0.
          i_rep-name1  = lfa1-name1.
        ENDIF.
        APPEND i_rep.
        CLEAR  i_rep.
          break-point.
      ENDLOOP.
      SORT i_rep BY lifnr ebeln ebelp.
      DELETE i_rep WHERE orewr LE 0.
      break-point.
    ENDFORM.                    " fetch_data
    *&      Form  display_data
    Display the Report Output data
    FORM display_data .
      DATA: lv_flag,               " New Flag
            lv_rec TYPE i.         " No of Records
      CLEAR lv_rec.
      IF i_rep[] IS INITIAL.
        MESSAGE e000 WITH 'No Data found'(022).
      ELSE.
        LOOP AT i_rep.
    Toggle Color
          PERFORM toggle_color.
          IF lv_flag <> space.
            NEW-LINE.
          ENDIF.
    At New Purchase Document
          AT NEW ebeln.
            WRITE:/1 sy-vline, 2(10) i_rep-ebeln INTENSIFIED OFF.
            lv_flag = c_x.
            lv_rec = lv_rec + 1.
          ENDAT.
          WRITE: 1 sy-vline,
                12 sy-vline,13(4)   i_rep-bsart,
                17 sy-vline,18(10)  i_rep-lifnr,
                28 sy-vline,29(35)  i_rep-name1,
                64 sy-vline,65(4)   i_rep-ekgrp,
                69 sy-vline,70(10)  i_rep-bedat,
                80 sy-vline,81(5)   i_rep-ebelp,
                86 sy-vline,87(40)  i_rep-txz01,
               127 sy-vline,128(9)  i_rep-matkl,
               137 sy-vline,138(1)  i_rep-pstyp,
               139 sy-vline,140(1)  i_rep-knttp,
               141 sy-vline,142(4)  i_rep-werks,
               146 sy-vline,147(4)  i_rep-lgort,
               151 sy-vline,152(13) i_rep-menge UNIT i_rep-meins,
               165 sy-vline,166(3)  i_rep-meins,
               169 sy-vline,170(15) i_rep-netpr CURRENCY i_rep-waers,
               185 sy-vline,186(4)  i_rep-waers,
               190 sy-vline,191(5)  i_rep-peinh,
               196 sy-vline,197(4)  i_rep-bprme,
               201 sy-vline,202(15) i_rep-orewr CURRENCY i_rep-curr,
               217 sy-vline,218(4)  i_rep-curr,
               222 sy-vline,223(7)  i_rep-bstyp centered,
               230 sy-vline.
          NEW-LINE.
          hide: i_rep-ebeln.
        ENDLOOP.
        ULINE.
        FORMAT COLOR OFF.
        WRITE : /2 'Total Number of Purchasing Documents:'(025) COLOR 3,
                    lv_rec COLOR 3.
      ENDIF.
    ENDFORM.                    " display_data
    *&      Form  header
    Write the Report Header
    FORM header .
      FORMAT RESET.
    header
      WRITE:/1(230) 'LIST OF PURCHASE DOCUMENTS PER VENDOR'(006) CENTERED.
      SKIP.
      FORMAT COLOR COL_HEADING.
      ULINE.
      WRITE:/1 sy-vline,2(10)   'Pur.Doc.No'(006) CENTERED,
            12 sy-vline,13(4)   'Type'(007),
            17 sy-vline,18(10)  'Vendor'(008) CENTERED,
            28 sy-vline,29(35)  'Name'(009) CENTERED,
            64 sy-vline,65(4)   'PGrp'(010) CENTERED,
            69 sy-vline,70(10)  'Doc.Date'(012) CENTERED,
            80 sy-vline,81(5)   'Item'(011),
            86 sy-vline,87(40)  'Material Short Text'(024) CENTERED,
           127 sy-vline,128(9)  'Mat.Group'(013),
           137 sy-vline,138(1)  'I',
           139 sy-vline,140(1)  'A',
           141 sy-vline,142(4)  'Plnt'(014),
           146 sy-vline,147(4)  'SLoc'(015),
           151 sy-vline,152(13) 'Quantity'(016) CENTERED,
           165 sy-vline,166(3)  'UoM'(017),
           169 sy-vline,170(15) 'Net Value'(018) CENTERED,
           185 sy-vline,186(4)  'Curr'(019),
           190 sy-vline,191(5)  'Per'(020),
           196 sy-vline,197(4)  'Unit'(021),
           201 sy-vline,202(15) 'To be Invoiced'(023) CENTERED,
           217 sy-vline,218(4)  'Curr'(019),
           222 sy-vline,223(7)  'Doc.Cat'(026),
           230 sy-vline.
      ULINE.
    ENDFORM.                    " header
    *&      Form  toggle_color
    This routine alters the color of the records in the list
    FORM toggle_color.
      IF gv_dial = space.
        FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
        gv_dial = c_x.
      ELSE.
        FORMAT COLOR 1 INTENSIFIED OFF.
        CLEAR gv_dial.
      ENDIF.
    ENDFORM.                    " toggle_color
    *&      Form  LINE_SEL
    *When double clicked on EBELN field display the details of Purchase Doc
    FORM line_sel.
      CASE sy-lsind.
        WHEN '1'.
          DATA: lv_field(20),
                lv_value(10),
                lv_bstyp like i_rep-bstyp.
          clear: lv_bstyp,lv_value, lv_field.
          GET CURSOR FIELD lv_field VALUE lv_value.
          IF lv_field = 'I_REP-EBELN'.
            IF NOT lv_value IS INITIAL.
              READ LINE sy-index FIELD VALUE i_rep-bstyp
                                       INTO  lv_bstyp.
             READ CURRENT LINE FIELD VALUE i_rep-bstyp INTO lv_bstyp.
              if lv_bstyp = 'F'.
                SET PARAMETER ID 'BES' FIELD lv_value.
                CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN.
              elseif ( lv_bstyp = 'K' or lv_bstyp = 'L' ).
                SET PARAMETER ID 'VRT' FIELD lv_value.
                CALL TRANSACTION 'ME33' AND SKIP FIRST SCREEN.
              elseif lv_bstyp = 'A'.
                SET PARAMETER ID 'ANF' FIELD lv_value.
                CALL TRANSACTION 'ME43' AND SKIP FIRST SCREEN.
              endif.
            ENDIF.
          ENDIF.
      ENDCASE.
    ENDFORM.                    " line_sel
    <b>Reward points for useful Answers</b>
    Regards
    Anji

  • BADI or function module for updating open purchase orders

    Hi all,
    Does anyone know of a BADI or function module which can be used for updating item prices in open purchase orders?
    All helpful answers are highly appreciated!
    Regards,
    MV

    1 ) execute this program  in se38 .enter the input as transaction code  for which you want list of User
    Exit.
    REPORT z_find_userexit NO STANDARD PAGE HEADING.
    *&  Enter the transaction code that you want to search through in order
    *&  to find which Standard SAP® User Exits exists.
    *& Tables
    TABLES : tstc,     "SAP® Transaction Codes
             tadir,    "Directory of Repository Objects
             modsapt,  "SAP® Enhancements - Short Texts
             modact,   "Modifications
             trdir,    "System table TRDIR
             tfdir,    "Function Module
             enlfdir,  "Additional Attributes for Function Modules
             tstct.    "Transaction Code Texts
    *& Variables
    DATA : jtab LIKE tadir OCCURS 0 WITH HEADER LINE.
    DATA : field1(30).
    DATA : v_devclass LIKE tadir-devclass.
    *& Selection Screen Parameters
    SELECTION-SCREEN BEGIN OF BLOCK a01 WITH FRAME TITLE text-001.
    SELECTION-SCREEN SKIP.
    PARAMETERS : p_tcode LIKE tstc-tcode OBLIGATORY.
    SELECTION-SCREEN SKIP.
    SELECTION-SCREEN END OF BLOCK a01.
    *& Start of main program
    START-OF-SELECTION.
    Validate Transaction Code
      SELECT SINGLE * FROM tstc
        WHERE tcode EQ p_tcode.
    Find Repository Objects for transaction code
      IF sy-subrc EQ 0.
        SELECT SINGLE * FROM tadir
           WHERE pgmid    = 'R3TR'
             AND object   = 'PROG'
             AND obj_name = tstc-pgmna.
        MOVE : tadir-devclass TO v_devclass.
        IF sy-subrc NE 0.
          SELECT SINGLE * FROM trdir
             WHERE name = tstc-pgmna.
          IF trdir-subc EQ 'F'.
            SELECT SINGLE * FROM tfdir
              WHERE pname = tstc-pgmna.
            SELECT SINGLE * FROM enlfdir
              WHERE funcname = tfdir-funcname.
            SELECT SINGLE * FROM tadir
              WHERE pgmid    = 'R3TR'
                AND object   = 'FUGR'
                AND obj_name = enlfdir-area.
            MOVE : tadir-devclass TO v_devclass.
          ENDIF.
        ENDIF.
    Find SAP® Modifications
        SELECT * FROM tadir
          INTO TABLE jtab
          WHERE pgmid    = 'R3TR'
            AND object   = 'SMOD'
            AND devclass = v_devclass.
        SELECT SINGLE * FROM tstct
          WHERE sprsl EQ sy-langu
            AND tcode EQ p_tcode.
        FORMAT COLOR COL_POSITIVE INTENSIFIED OFF.
        WRITE:/(19) 'Transaction Code - ',
        20(20) p_tcode,
        45(50) tstct-ttext.
        SKIP.
        IF NOT jtab[] IS INITIAL.
          WRITE:/(95) sy-uline.
          FORMAT COLOR COL_HEADING INTENSIFIED ON.
          WRITE:/1 sy-vline,
          2 'Exit Name',
          21 sy-vline ,
          22 'Description',
          95 sy-vline.
          WRITE:/(95) sy-uline.
          LOOP AT jtab.
            SELECT SINGLE * FROM modsapt
            WHERE sprsl = sy-langu AND
            name = jtab-obj_name.
            FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
            WRITE:/1 sy-vline,
            2 jtab-obj_name HOTSPOT ON,
            21 sy-vline ,
            22 modsapt-modtext,
            95 sy-vline.
          ENDLOOP.
          WRITE:/(95) sy-uline.
          DESCRIBE TABLE jtab.
          SKIP.
          FORMAT COLOR COL_TOTAL INTENSIFIED ON.
          WRITE:/ 'No of Exits:' , sy-tfill.
        ELSE.
          FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
          WRITE:/(95) 'No User Exit exists'.
        ENDIF.
      ELSE.
        FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
        WRITE:/(95) 'Transaction Code Does Not Exist'.
      ENDIF.
    Take the user to SMOD for the Exit that was selected.
    AT LINE-SELECTION.
      GET CURSOR FIELD field1.
      CHECK field1(4) EQ 'JTAB'.
      SET PARAMETER ID 'MON' FIELD sy-lisel+1(10).
      CALL TRANSACTION 'SMOD' AND SKIP FIRST SCREEN.
    2) Second way is to go to transaction code SE93 .enter transaction code click on display.
    There you will see the package. Copy that package name.
    Go to transaction code se84
    Enhancements -customer exits-enhancementsu2014enter package there and execute.
    You will get list of exits.
    3) BAPI for PO change is
    BAPI_PO_CHANGE

  • Purchase order Migration

    HI Experts,
    I am doing Purchase Orders migration from One SAp to another SAP. For this I thought i can use the goto - > messages -> output option and send An idoc from Current SAP to new SAP. It has generated the IDOC type as ORDERS and moved successfully to the new system as well. in the inbound system the This IDOC is trying to create a Sales order than a PO. I Couldnt fine any applicable processcodes for the Inbound IDOC partner profile to create a PO. Any suggestions is much welcomed.
    Regards
    Elphi

    Hi,
    Partner Profile should of type "LS" (Logical System). It appears that you are using a Partner Profile of type "VN" (Vendor).
    It will create a Purchase Order if you use "LS".
    Regards,
    Srilatha.

Maybe you are looking for