Showing posts with label PO. Show all posts
Showing posts with label PO. Show all posts

Monday, 23 July 2018

How to set PO Match Options in Oracle Apps?

 [PO] Matching Setting in Purchase Order Shipment Line

We can Set Invoice matching in five different areas of Oracle Purchasing:
In the list below, a setting at any level will override the settings above it.

1. Oracle Purchasing Options
a. Navigate to: Setup > Organizations > Purchasing Options
b. Select Default Alternative Region


2. Supplier Information
a. Navigate to: Supply Base > Suppliers
b. Query on specific supplier
c. Click on Open
d. Select Receiving Alternative Region


3. Line Types
a. Navigate to: Setup > Purchasing > Line Types
b. In the Receipt Required field: Yes = 3-way, No = 2-way


4. Items
a. Navigate to: Items > Master Items
b. Query on specific item
c. Select Purchasing Alternative Region
d. In the Invoice Matching section: Yes = 3-way, No = 2-way


5. Purchase Order Shipments
a. Navigate to: Purchase Orders > Purchase Orders
b. Enter (header and) line information
c. Click on Shipments button
d. Select More Alternative Region

  Invoice Match to PO and Invoice Match to Receipt

Oracle Payables shares purchase order information from your purchasing system to enable online matching with invoices. Invoiced or billed items are matched to the original purchase orders to ensure that you pay only for the goods or services you ordered and/or received. If you are billed for an item over the amount and quantity tolerances you define in the Invoice Tolerance window, during Approval, Oracle Payables applies a hold to the invoice, which prevents payment.
Oracle Payables supports three levels of matching which verify that purchase order and
invoice information match within defined tolerances.

Match Approval Level: 2-Way , 3-Way, 4-Way.

In 2-way:
what ever you have ordered for the PO you will make the payment for the suppliers in 2- way i.e we will compare two documents PO and Invoice.
2-way matching verifies that Purchase order and invoice information match within your tolerances:
Quantity billed <= Quantity Ordered
Invoice price <= Purchase order price
Eg:Suppose we Had given PO for 100 items ,for that we will receive invoice for 100 items. so that we will make payment for that 100 items.

In 3-Way you will compare 3 documents i.e PO+reciept+Invoice.
3-way matching verifies that the receipt and invoice information match with the quantity tolerances defined:
Quantity billed <= Quantity received.
Eg:Suppose we have ordered 100 items in PO. But we had received only 75 items ,But we had received invoice for 100 items. so, we will make payment for only 75 items.

In 4-Way
you will compare 4 documents i.e PO+Receipt+Invoice+Inspection.
4-way matching verifies that acceptance documents and invoice information match within the quantity tolerances defined:
Quantity billed <= Quantity accepted.
Eg:Suppose we have 100 items in PO. Suppers send us 75 items We will do inspection on those items what ever we have received, If 15items got damaged. finally, we are going to make payment to the 60 items only.

When you match to a purchase order, Payables automatically checks that the total of PO_DISTRIBUTIONS.QUANTITY_
ORDERED = AP_INVOICE_DISTRIBUTIONS.QUANTITY_INVOICED (2-way matching). Payables only checks QUANTITY_RECEIVED (3-way matching) if the RECEIPT_REQUIRED_FLAG is set to Y and only checks QUANTITY_ACCEPTED (4-way matching) if the INSPECTION_REQUIRED_FLAG is set to Y.
Invoice Match Option:

The Invoice Match Option determines whether or not you intend to match invoices for this supplier against purchase orders or receipts.
Invoice Match option to PO Match:
--------------------------------------------
•Payables must match the invoice to the purchase order.
•If the Invoice is matched to a PO rather than to the Receipt when the AP team do a match they have the full PO available to match rather than just the specific lines on the PO that were received.
•There is a possibility someone in payables matching to the wrong distribution if they use Match to PO.

•The accrual is valued at the PO exchange rate date.

Invoice Match option to PO Match:
----------------------------------------------
•Payables must match the invoice to the receipt.
•Receipt Match Option is recommended if you want accounting to use exchange rate information based on the receipt date or if you want to update exchange rate information on the receipt.
•If you use the match to receipt option AP team can't match until the goods are received. If the receiving doesn't happen there is no way to associate the invoice with the PO.
•Invoice processing will be on hold till a receipt is entered into the system.
•Receipt Match option determines the cost with more accuracy i.e. Match to Material item receipt and link other invoice charges to receipt and You can now also associate freight, tax, and miscellaneous charges from invoices to the related receipt.
•Run the Matching Detail Report from Other -> Request -> Run. This report will show you detail of how an invoice, purchase order, or receipt was matched. This report is especially helpful when an invoice is on hold and you are trying determine why the hold was placed.

The Invoice Match Option defaults from the Supplier Sites window. You can change the Invoice Match Option on the shipment until you receive against the shipment.

Financial Options - Invoice Match Option:
For purchase order shipments, indicate whether you want to match invoices to purchase orders or to purchase order receipts. If the supplier was created automatically during Expense Report Import, the default value is Purchase Order, and you can change it to Receipts as appropriate.

The Business Needs To Take decision to set the Invoice match option to Receipt or Purchase.
•The main advantage is the Exchange Rate factor i.e. Receipt/Current Date instead of Purchaser Order date.
•If you are using Multi Currency Functionality for Purchase Order and if like to have the rate based on       Receipt date you need to go with Receipt Match at the invoice match option.
•Receipt Match gives much closer control of the matching process,Particularly where you have multiple receipts of large purchase order.

If a Business is using Invoice Match option Purhcase Order and like to change from Purchase Order to Receipt Match, then what would be the impact?

•All Supplier sites need to be updated with Invoice Match option to Receipt.
•Purchase orders which are already approved with Invoice Match Option of Purchase order should continue with the same existing process.
•All existing Open PO, which need a change from Purchase Order to Receipt, should be corrected by changing the invoice match option in the purchase order shipment to Receipt. Payables team should match invoices to Receipt for all Purchase Orders created after the cut-off date.
•Training to AP/PO users.

In order for the receipt to use the current exchange rate and not the PO exchange rate, the Invoice Match Option at the system level and on the suppliers should be Receipt, not Purchase Order.

Friday, 18 November 2016

Query to get the discrepancy between the sales orders and purchase orders in Drop ship orders

/* Formatted on 11/18/2016 3:55:24 PM (QP5 v5.114.809.3010) */
  SELECT   osto.name oe_customer_name,
           osto.customer_number oe_customer_number,
           oeh.header_id oe_header_id,
           oeh.order_number oe_number,
           OTYPE.name oe_type,
           oeh.ordered_date oe_order_date,
           oel.line_id oe_line_id,
           oel.line_number
           || DECODE (oel.shipment_number,
                      NULL, NULL,
                      '.' || oel.shipment_number)
           || DECODE (oel.option_number, NULL, NULL, '.' || oel.option_number)
              line_shipment_option_number,
           oel.item_identifier_type,
           OEL.INVENTORY_ITEM_ID,
           OEL.ORDERED_ITEM_ID,
           OEL.ORDERED_ITEM,
           poh.segment1 po_number,
           pol.line_num po_line_number,
           porel.release_num po_release_number,
           poll.shipment_num po_shipment_number,
           porh.segment1 requisition_number,
           porl.line_num requisition_line_number,
           msi1.description po_item_description,
           msi2.description rq_item_description,
           DECODE (
              oel.line_set_id,
              NULL,
              (SELECT   ordered_quantity
                 FROM   oe_order_lines_all
                WHERE       line_id = oel.line_id
                        AND line_set_id IS NULL
                        AND NVL (org_id, 0) = NVL (oel.org_id, 0)),
              (SELECT   ordered_quantity
                 FROM   oe_order_lines_all
                WHERE       line_set_id = oel.line_set_id
                        AND line_id = oel.line_id
                        AND line_set_id IS NOT NULL
                        AND NVL (org_id, 0) = NVL (oel.org_id, 0))
           )
              oe_quantity,
           poll.quantity - NVL (poll.quantity_cancelled, 0)
              po_shipment_quantity,
           porl.quantity - NVL (porl.quantity_cancelled, 0) rq_quantity,
           oel.order_quantity_uom oe_unit,
           muom1.uom_code po_unit,
           muom2.uom_code rq_unit,
           oel.schedule_ship_date oe_schedule_date,
           poll.need_by_date po_needby_date,
           porl.need_by_date rq_needby_date,
           zloc_oe.address1 oe_ship_to_location,
           NVL (rloc_po.location_CODE, zloc_po.address1) po_ship_to_location,
           NVL (rloc_rq.location_code, zloc_rq.address1) rq_ship_to_location,
           DECODE (poh.user_hold_flag, 'Y', 'Y', pol.user_hold_flag) po_hold
    FROM   mtl_system_items_vl msi,
           mtl_system_items_vl msi1,
           mtl_system_items_vl msi2,
           mtl_units_of_measure muom1,
           mtl_units_of_measure muom2,
           po_line_locations_all poll,
           po_releases porel,
           po_lines_all pol,
           po_headers_all poh,
           po_requisition_lines_all porl,
           po_requisition_headers_all porh,
           oe_order_lines_all oel,
           OE_TRANSACTION_TYPES_TL OTYPE,
           oe_order_headers oeh,
           oe_drop_ship_sources oes,
           oe_sold_to_orgs_v osto,
           HR_LOCATIONS rloc_po,
           HR_LOCATIONS rloc_rq,
           HZ_LOCATIONS zloc_oe,
           HZ_LOCATIONS zloc_po,
           HZ_LOCATIONS zloc_rq,
           HZ_PARTY_SITES party,
           HZ_CUST_ACCT_SITES_ALL acct,
           HZ_CUST_SITE_USES_ALL cust
   WHERE   OEH.HEADER_ID = OES.HEADER_ID
           AND NVL (oeh.org_id, 0) = NVL (:p_organization_id, 0)
           AND NVL (oel.org_id, NVL (:p_organization_id, 0)) =
                 NVL (:p_organization_id, 0)
           AND oeh.sold_to_org_id = osto.customer_id(+)
           AND OTYPE.TRANSACTION_TYPE_ID = OEH.ORDER_TYPE_ID
           AND OTYPE.language = USERENV ('lang')
           AND oes.line_id = oel.line_id(+)
           AND MSI.INVENTORY_ITEM_ID = PORL.ITEM_ID
           AND NVL (msi.organization_id, 0) = :c_master_org
           AND poh.po_header_id(+) = oes.po_header_id
           AND pol.po_line_id(+) = oes.po_line_id
           AND msi1.inventory_item_id(+) = pol.item_id
           AND NVL (msi1.organization_id, NVL (:c_master_org, 0)) =
                 :c_master_org
           AND msi2.inventory_item_id(+) = porl.item_id
           AND NVL (msi2.organization_id, 0) = :c_master_org
           AND poll.line_location_id(+) = oes.line_location_id
           AND porh.requisition_header_id(+) = oes.requisition_header_id
           AND porl.requisition_line_id(+) = oes.requisition_line_id
           AND porel.po_release_id(+) = poll.po_release_id
           AND muom1.unit_of_measure(+) = pol.unit_meas_lookup_code
           AND muom2.unit_of_measure(+) = porl.unit_meas_lookup_code
           AND rloc_po.location_id(+) = poll.ship_to_location_id
           AND rloc_rq.location_id(+) = porl.deliver_to_location_id
           AND zloc_po.location_id(+) = poll.ship_to_location_id
           AND zloc_rq.location_id(+) = porl.deliver_to_location_
           AND CUST.SITE_USE_ID(+) = oel.ship_to_org_id
           AND NVL (CUST.STATUS, 'A') = 'A'
           AND NVL (CUST.SITE_USE_CODE, 'SHIP_TO') = 'SHIP_TO'
           AND ACCT.CUST_ACCT_SITE_ID(+) = CUST.CUST_ACCT_SITE_ID
           AND PARTY.PARTY_SITE_ID(+) = ACCT.PARTY_SITE_ID
           AND zloc_oe.location_id(+) = PARTY.location_id
           AND (oes.po_header_id IS NOT NULL
                AND (pol.item_id != oel.inventory_item_id
                     OR TRUNC (poll.need_by_date) !=
                          TRUNC (oel.schedule_ship_date)
                     OR poll.ship_to_location_id != PARTY.LOCATION_ID
                     OR muom1.uom_code != oel.order_quantity_uom
                     OR DECODE (
                          0,
                          0,
                          (SELECT   SUM (ordered_quantity)
                             FROM   oe_order_lines_all
                            WHERE       line_set_id = oel.line_set_id
                                    AND line_set_id IS NOT NULL
                                    AND NVL (org_id, 0) = NVL (oel.org_id, 0))
                       ) NOT IN
                             (SELECT   SUM (quantity)
                                FROM   po_line_locations_all poll2,
                                       oe_drop_ship_sources oes2
                               WHERE   poll2.line_location_id =
                                          oes2.line_location_id
                                       AND oes2.line_id = oel.line_id)
                     OR DECODE (
                          0,
                          0,
                          (SELECT   ordered_quantity
                             FROM   oe_order_lines_all
                            WHERE       line_id = oel.line_id
                                    AND line_set_id IS NULL
                                    AND NVL (org_id, 0) = NVL (oel.org_id, 0))
                       ) NOT IN
                             (SELECT   SUM (quantity)
                                FROM   po_line_locations_all poll2,
                                       oe_drop_ship_sources oes2
                               WHERE   poll2.line_location_id =
                                          oes2.line_location_id
                                       AND oes2.line_id = oel.line_id)
                     OR DECODE (poh.user_hold_flag,
                                'Y', 1,
                                DECODE (pol.user_hold_flag, 'Y', 1, 0)) NOT IN
                             (SELECT   DECODE (COUNT (order_hold_id), 0, 0, 1)
                                FROM   oe_order_holds_all orh,
                                       oe_hold_sources_all ohs,
                                       oe_hold_definitions ohd
                               WHERE   orh.header_id = oel.header_id
                                       AND orh.hold_release_id IS NULL
                                       AND orh.hold_source_id =
                                             ohs.hold_source_id
                                       AND ohs.hold_id = ohd.hold_id
                                       AND ohd.item_type IS NULL
                                       AND ohd.activity_name IS NULL
                                       AND (orh.line_id = oel.line_id
                                            OR orh.line_id IS NULL)))
                OR (oes.po_header_id IS NULL
                    AND oes.requisition_header_id IS NOT NULL
                    AND (DECODE (oel.inventory_item_id,
                                 NULL, -98,
                                 porl.item_id) !=
                            NVL (oel.inventory_item_id, -99)
                         OR TRUNC(DECODE (oel.schedule_ship_date,
                                          NULL, SYSDATE,
                                          porl.need_by_date)) !=
                              TRUNC (NVL (oel.schedule_ship_date, SYSDATE - 1))
                         OR NVL (oel.ship_to_org_id, -98) !=
                              NVL (oel.ship_to_org_id, -99)
                         OR porl.deliver_to_location_id != PARTY.LOCATION_ID
                         OR muom2.uom_code != oel.order_quantity_uom
                         OR porl.quantity !=
                              DECODE (
                                 0,
                                 0,
                                 (SELECT   SUM (ordered_quantity)
                                    FROM   oe_order_lines_all
                                   WHERE   line_set_id = oel.line_set_id
                                           AND line_set_id IS NOT NULL
                                           AND NVL (org_id, 0) =
                                                 NVL (oel.org_id, 0))
                              )
                         OR porl.quantity !=
                              DECODE (
                                 0,
                                 0,
                                 (SELECT   ordered_quantity
                                    FROM   oe_order_lines_all
                                   WHERE   line_id = oel.line_id
                                           AND line_set_id IS NULL
                                           AND NVL (org_id, 0) =
                                                 NVL (oel.org_id, 0))
                              )
                         OR 0 NOT IN
                                 (SELECT   DECODE (COUNT (order_hold_id),
                                                   0, 0,
                                                   1)
                                    FROM   oe_order_holds_all orh,
                                           oe_hold_sources_all ohs,
                                           oe_hold_definitions ohd
                                   WHERE   orh.header_id = oel.header_id
                                           AND orh.hold_source_id =
                                                 ohs.hold_source_id
                                           AND ohs.hold_id = ohd.hold_id
                                           AND ohd.item_type IS NULL
                                           AND ohd.activity_name IS NULL
                                           AND orh.hold_release_id IS NULL
                                           AND (orh.line_id = oel.line_id
                                                OR orh.line_id IS NULL))))
                OR oel.line_id IS NULL)
ORDER BY   oeh.order_number