Showing posts with label Purchasing. Show all posts
Showing posts with label Purchasing. Show all posts

Thursday, November 7, 2013

Pending Receiving Query



select 'Pending Receiving'||'~'||
       ood.organization_code||'~'||
       to_char(rti.creation_date,'DD-MON-RRRR HH24:MI:SS') ||'~'||
       rti.interface_transaction_id||'~'||
       msi.segment1||'~'||
       quantity ||'~'||
       pha.segment1||'~'||
       rti.transaction_type||'~'||
       rti.request_id||'~'||
       fu.user_name||'~'||
       ood.organization_id  l_out
  from rcv_transactions_interface rti,
       org_organization_definitions ood,
       mtl_system_items msi,
       po_headers_all pha,
       fnd_user fu
 where rti.to_organization_id = ood.organization_id
   and fu.user_id = rti.created_by
   and pha.po_header_id(+) = rti.po_header_id
   and msi.inventory_item_id = rti.item_id
   and msi.organization_id   = 28
   and rti.destination_type_code = 'INVENTORY'
   and ood.organization_id   = nvl(p_org_id,ood.organization_id)
   and (:p_minutes is null or rti.creation_date < SYSDATE - (:p_minutes/(24*60)) )
   order by ood.organization_code, rti.creation_date;


Friday, October 12, 2012

Procure To Pay Cycle



1) Create Requisition:

Requisition is nothing but a formal request to buy something (like Inventory material, office supplies etc) needed for the enterprise. Only an employee can create one. There are two types of requisitions:
Internal Requisition: Internal requisitions provide the mechanism for requesting and transferring material from one inventory to other inventory.
Purchase requisition: Unlike Internal requisitions, Purchase requisitions are used for requesting material from suppliers.
Once the requistion is created, the status of the requisition will be “Incomplete”. And now the Approve button is highlighted. The requisition needs to be approved first before proceeding further by the concerned authority. Submit this requisition for Approval by clicking on the Approve button. The status will now be updated to “In Process”. The workflow then will send an Approval notification to the concerned person (derived based on hierarchy used - Position or Supervisor hierarchy) using which he can Approve or Reject the requisition.

Underlying Tables:

PO_REQUISITION_HEADERS_ALL
PO_REQUISITION_LINES_ALL
PO_REQ_DISTRIBUTIONS_ALL

2) Create Purchase Order:

Create Purchase order  by entering Header, Line and Shipment details. There can be multiple distributions for each shipment. Requisition Number is entered in More tab of Shipment Distributions window


Underlying Tables:


PO_HEADERS_ALL
PO_LINES_ALL
PO_LINE_LOCATIONS_ALL
PO_DISTRIBUTIONS_ALL


3) Create PO Receipt:

Create a receipt to receive the items in the Purchase Order.

Receipt Tables are:


RCV_SHIPMENT_HEADERS
RCV_SHIPMENT_LINES (Lines Table has PO_HEADER_ID)

4) Create Invoice in Payables:

Once the goods are received, it’s time to pay the vendor for the goods purchased and hence the invoices are created. Then match the invoice to either Purchase Order or Receipt (depending on the Invoice Match option specified on the PO).

Invoice Tables:
AP_INVOICES_ALL
AP_INVOICE_LINES_ALL
AP_INVOICE_DISTRIBUTIONS_ALL

After the invoice is created, validate the invoice and create the accounting

Accounting Entries Tables:
AP_ACCOUNTING_EVENTS_ALL
AP_AE_HEADERS_ALL
AP_AE_LINES_ALL

5) Making Invoice Payment:

Go to the Invoice window and query the invoice you want to pay. After the payment is done, create accounting for payments. You can also pay the invoices using Payment Batch screen

Payment Tables:

IBY_PAYMENTS_ALL or AP_INVOICE_PAYMENTS_ALL

IBY_EXTERNAL_BANK_ACCOUNTS or AP_BANK_ACCOUNTS_ALL


6) Transfer to General Ledger:

Run the concurrent program “Payables Transfer to General Ledger” with the below required parameters.

Set of Books Name
Journal Category
Validate Accounts (Yes/ No)
Transfer to GL Interface (In Detail)
Submit Journal Import (Yes/ No)

Monday, December 6, 2010

PO-INV Link Query



SELECT
p.segment1 po_number,
pol.po_line_id,
pol.category_id,
pv.segment1 supplier_number,
pv.vendor_name supplier_name,
pol.line_type_id,
msi.segment1 Item_number,
pol.item_description,
trunc(pol.creation_date) PO_Date,
trunc(poll.need_by_date) Promised_date,
trunc(p.acceptance_due_date) Received_date,
(poll.quantity) Quantity_ordered,
(poll.quantity_received) Quantity_received,
(poll.quantity-poll.quantity_received) Quantity_remaining,
(poll.quantity_billed) Quantity_billed,
(poll.quantity_cancelled) Quantity_cancelled ,
(poll.quantity* pol.unit_price) Ordered_amount,
(poll.quantity_received*pol.unit_price) Received_amount,
(poll.quantity_billed*pol.unit_price) Billed_amount,
(poll.quantity_cancelled*pol.unit_price) Cancelled_amount
FROM
po_lines_all pol,
po_vendors pv,
po_line_locations_all poll,
po_headers p,
mtl_system_items msi
WHERE
pv.vendor_id = p.vendor_id and
p.po_header_id=pol.po_header_id and
poll.po_header_id = p.po_header_id and
poll.po_line_id=pol.po_line_id and
(msi.organization_id = poll.ship_to_organization_id or
msi.inventory_item_id is null) and
msi.inventory_item_id(+) = pol.item_id

Friday, December 3, 2010

PO-Faxstar Integration



Faxstar is a product from the company called Sepe, Inc. It has the ability to send PO Document via email and Fax. I tried to jot down few commands which can be used in After report trigger

DECLARE
f text_io.file_type;
BEGIN
--Command to open the text file
f := text_io.fopen ('/tmp/'
|| :p_conc_request_id
|| 'e.txt', 'W');

-- Command to display Supplier Name in Console Log
text_io.put_line (f, '**(REF) '
|| v_supplier_name
|| ' **END');

-- Command to send Mail with Subject and Attachment
text_io.put (
f,
|| '**(MAIL) '
|| :p_email_address
|| ' **(SUBJECT)'
|| 'PO-NUMBER:'
|| :P_PO_NUM_FROM
|| ' **(PMATTACH) '
|| :p_conc_request_id
|| 'e.pdf'
|| ' **END'
);

-- Command to send Fax to given Fax Number
text_io.put (
f,
|| '**(FAX) '
|| :p_fax_num
|| ' **(PATTACHPDF) '
|| :p_conc_request_id
|| 'f.pdf'
|| ' **END'
);

-- Email Confirmation in case of fax failure
text_io.put_line (
f,
|| '**(MFAIL) '
|| 'adchintawar@gmail.com'
|| '**(REF)'
|| 'PO-NUM-'
|| :P_PO_NUM_FROM
|| '**END'
);

--Command to Close the text file
text_io.fclose (f);
END;

Friday, September 17, 2010

REQUISITION AND PURCHASE ORDER



-- ALL OPEN PO'S


SELECT h.segment1 "PO NUM",
h.authorization_status "STATUS",
l.line_num "SEQ NUM",
ll.line_location_id,
d.po_distribution_id,
h.type_lookup_code "TYPE"
FROM po.po_headers_all h,
po.po_lines_all l,
po.po_line_locations_all ll,
po.po_distributions_all d
WHERE h.po_header_id = l.po_header_id
AND ll.po_line_id = l.po_Line_id
AND ll.line_location_id = d.line_location_id
AND h.closed_date IS NULL
AND h.type_lookup_code NOT IN ('QUOTATION')

-- PO WITHOUT PURCHASE REQUISITION

SELECT prh.segment1 "PR NUM",
TRUNC (prh.creation_date) "CREATED ON",
TRUNC (prl.creation_date) "Line Creation Date",
prl.line_num "Seq #",
msi.segment1 "Item Num",
prl.item_description "Description",
prl.quantity "Qty",
TRUNC (prl.need_by_date) "Required By",
ppf1.full_name "REQUESTOR",
ppf2.agent_name "BUYER"
FROM po.po_requisition_headers_all prh,
po.po_requisition_lines_all prl,
apps.per_people_f ppf1,
( SELECT DISTINCT agent_id, agent_name FROM apps.po_agents_v) ppf2,
po.po_req_distributions_all prd,
inv.mtl_system_items_b msi,
po.po_line_locations_all pll,
po.po_lines_all pl,
po.po_headers_all ph
WHERE prh.requisition_header_id = prl.requisition_header_id
AND prl.requisition_line_id = prd.requisition_line_id
AND ppf1.person_id = prh.preparer_id
AND prh.creation_date BETWEEN ppf1.effective_start_date
AND ppf1.effective_end_date
AND ppf2.agent_id(+) = msi.buyer_id
AND msi.inventory_item_id = prl.item_id
AND msi.organization_id = prl.destination_organization_id
AND pll.line_location_id(+) = prl.line_location_id
AND pll.po_header_id = ph.po_header_id(+)
AND pll.po_line_id = pl.po_line_id(+)
AND prh.authorization_status = 'APPROVED'
AND pll.line_location_id IS NULL
AND prl.closed_code IS NULL
AND NVL (prl.cancel_flag, 'N') <> 'Y'
ORDER BY 1, 2, 4

-- REQUISITION AND PO

SELECT r.segment1 "Req Num", ph.segment1 "PO Num"
FROM po_headers_all ph,
po_distributions_all d,
po_req_distributions_all rd,
po_requisition_lines_all rl,
po_requisition_headers_all r
WHERE ph.po_header_id = d.po_header_id
AND d.req_distribution_id = rd.distribution_id
AND rd.requisition_line_id = rl.requisition_line_id
AND rl.requisition_header_id = r.requisition_header_id

-- CANCELLED REQUISITIONS

SELECT prh.REQUISITION_HEADER_ID,
prh.PREPARER_ID,
prh.SEGMENT1 "REQ NUM",
TRUNC (prh.CREATION_DATE),
prh.DESCRIPTION,
prh.NOTE_TO_AUTHORIZER
FROM apps.Po_Requisition_headers_all prh, apps.po_action_history pah
WHERE action_code = 'CANCEL'
AND pah.object_type_code = 'REQUISITION'
AND pah.object_id = prh.REQUISITION_HEADER_ID

-- INTERNAL REQUISITION WITHOUT INTERNAL SALES ORDER

SELECT RQH.SEGMENT1,
RQL.LINE_NUM,
RQL.REQUISITION_HEADER_ID,
RQL.REQUISITION_LINE_ID,
RQL.ITEM_ID,
RQL.UNIT_MEAS_LOOKUP_CODE,
RQL.UNIT_PRICE,
RQL.QUANTITY,
RQL.QUANTITY_CANCELLED,
RQL.QUANTITY_DELIVERED,
RQL.CANCEL_FLAG,
RQL.SOURCE_TYPE_CODE,
RQL.SOURCE_ORGANIZATION_ID,
RQL.DESTINATION_ORGANIZATION_ID,
RQH.TRANSFERRED_TO_OE_FLAG
FROM PO_REQUISITION_LINES_ALL RQL, PO_REQUISITION_HEADERS_ALL RQH
WHERE RQL.REQUISITION_HEADER_ID = RQH.REQUISITION_HEADER_ID
AND RQL.SOURCE_TYPE_CODE = 'INVENTORY'
AND RQL.SOURCE_ORGANIZATION_ID IS NOT NULL
AND NOT EXISTS
(SELECT 'existing internal order'
FROM OE_ORDER_LINES_ALL LIN
WHERE LIN.SOURCE_DOCUMENT_LINE_ID =
RQL.REQUISITION_LINE_ID
AND LIN.SOURCE_DOCUMENT_TYPE_ID = 10)
ORDER BY RQH.REQUISITION_HEADER_ID, RQL.LINE_NUM

Thursday, August 12, 2010

Calling XML PO Report from PL/SQL



DECLARE
l_request_id NUMBER;
l_user_id NUMBER;
l_resp_id NUMBER;
l_resp_appl_id NUMBER;
l_call_status BOOLEAN;

BEGIN
SELECT fnd.user_id, fresp.responsibility_id, fresp.application_id
INTO l_user_id, l_resp_id, l_resp_appl_id
FROM apps.fnd_user fnd, apps.fnd_responsibility_tl fresp
WHERE fnd.user_name = 'CONVUSER'
AND fresp.responsibility_name = 'BR Purchasing SME';

apps.fnd_global.apps_initialize (l_user_id, l_resp_id, l_resp_appl_id);
mo_global.set_policy_context ('S', 102);

l_call_status :=
fnd_request.add_layout ('XXCUST', 'XXBRPRPOPRINT_XML', 'en', 'US', 'PDF');

l_request_id :=
fnd_request.submit_request
('XXCUST',
'XXBRPRPOPRINT_XML',
NULL,
NULL,
FALSE,
'R', --P_report_type
NULL, --P_agent_name_num
'114259', --P_po_num_from
'114259', --P_po_num_to
NULL, --P_release_num_from
NULL, --P_release_num_to
NULL, --P_date_from
NULL, --P_date_to
'Y', --P_approved_flag
'N', --P_test_flag
'N', --P_print_releases
NULL, --P_sortby
1171, --P_user_id
2, --P_qty_precision
'Y', -- P_fax_enable
222221, --P_fax_num
NULL, -- P_CANCEL_LINE
'Y', --P_BLANKET_LINES
'Y', -- P_email_enable
'abd@gmail.com', -- P_email_address
fnd_global.local_chr (0),
NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL
);
COMMIT;
DBMS_OUTPUT.put_line ('Request ID-'|| l_request_id);

EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.put_line (SQLERRM||'-'||SQLCODE);
END;

Wednesday, July 7, 2010

PO Change API



This API is used to make any changes in the existing purchase order details


declare
result number := null;
begin
-- Do not forget to commit after the result returns 1
-- and rollback if result returns 0.
-- This needs to change as per your application.

fnd_global.apps_initialize(1318, 50578, 201);
result := PO_CHANGE_API1_S.update_po(
1263, -- po num
1, -- release num
1,-- revision
1,-- line num
1, -- shipment num
5,-- qty
null, -- price
null, -- date
'Y', -- launch approvals
null, -- update source
'APITEST', -- interface type
null, -- txn id
'1.0'); -- version

dbms_output.put_line('result:'result);
EXCEPTION
WHEN OTHERS THEN
raise;
end;

Parameter Description
PO_NUM:
Purchase order number.
RELEASE_NUM:
Required if the purchase order is a release. The pass-in value must be a number.
REVISION_NUM:
Which revision of the purchase order/release is being acted upon.
LINE_NUM:
Purchase order line number to update.
SHIPMENT_NUM:
If provided, indicates the update occurs at shipment level, otherwise it's at line level
NEW_QUANTITY:
Indicates the new value of quantity ordered that the order should be updated to
NEW_PRICE:
Indicates the new value of unit price that the order should be updated to.
NEW_PROMISED_DATE:
Indicates the new value of promised date that the order should be updated to. Must be in the format of 'MM/DD/YY' or 'MM-DD-YY'
LAUNCH_APPROVALS_FLAG:
Indicates if you want to launch APPROVAL workflow after the update. Its value could be either 'Y' or 'N'. If not provided, the default value is 'N'.
SOURCE_OF_UPDATE:
Reserved for future use to record the source of the update. Purchase Order Change APIs
TRANSACTION_ID:
Used to fetch any error messages recorded in PO_INTERFACE_ERRORS table if the update process fails. If not provided, a default value will be used.
VERSION:
Version of the current API (currently 1.0)


PO Acceptance API



Below API insert the acceptance record into PO_ACCEPTANCES table, before that check box must be checked for acceptance before submitting the PO for approval.


Declare
result number := null;
begin
fnd_global.apps_initialize (user_id, Responsibility_id_id, Application_id);
result :=
PO_CHANGE_API1_S.record_acceptance
(9310000133, ---PO Num
null, ---Release Num
0, ---Revision Num
'NEW', ---Action
sysdate, ---Action Date
261, ---Buyer id
'Y', ---Acceptance flag ‘Y’ or ‘N’
'ABCD', ---Acceptance lookup code
'All valid', ---Note
'1.0'); ---Version Number
commit;
end;

Parameter Description
PO_NUM:
Purchase order number.
RELEASE_NUM:
Required if the purchase order is a release. The pass-in value must be a number.
REVISION_NUM:
Which revision of the purchase order/release is being acted upon.
ACTION:
Indicates the action to take. The value must be NEW.
ACTION_DATE:
Indicates the date of follow-up action. Provide a value in the format of 'MM/DD/YY' or 'MM-DD-YY', its default value is TRUNC (SYSDATE).
EMPLOYEE_ID:
The fnd_global.user_id of the buyer.
ACCEPTED_FLAG:
Indicate if purchase is accepted. Must be 'Y' or 'N'.
ACCEPTANCE_LOOKUP_CODE:
Type of acceptance, its value must be corresponding to the LOOKUP_CODE in PO_LOOKUP_CODES table with LOOKUP_TYPE of ACCEPTANCE TYPE. The possible values are- Accepted Terms, Accepted All Terms, On Schedule, UnacceptableChanges, and REJECTED
NOTE:
Any description you want to insert.
VERSION:
Version of the current API (currently 1.0)

Saturday, July 3, 2010

PO Cancel API Code



CREATE OR REPLACE PROCEDURE APPS.XXPO_CANCEL_PO
(ERRBUFF VARCHAR2, RETCODE NUMBER, P_DOC_NUM VARCHAR2)
IS
CURSOR FETCH_PO_CUR IS
SELECT * FROM PO_HEADERS_ALL
WHERE SEGMENT1 = P_DOC_NUM
AND ORG_ID = FND_PROFILE.VALUE('ORG_ID');

V_USER_ID NUMBER ;
V_RESPONSIBILITY_ID NUMBER ;
V_RESPONSIBILITY_APPL_ID NUMBER ;
V_ORG_ID VARCHAR2(20) ;
L_RETURN_STATUS VARCHAR2(1) := NULL;
L_MSG_DATA VARCHAR2(2000);
V_SUCCESS_COUNT NUMBER;
V_FAILURE_COUNT NUMBER;

BEGIN
V_SUCCESS_COUNT := 0;
V_FAILURE_COUNT := 0;

FOR FETCH_PO_REC IN FETCH_PO_CUR
LOOP
FND_FILE.PUT_LINE(FND_FILE.LOG , 'START OF CANCEL PO PROCESS API'SYSDATE );
BEGIN
V_USER_ID := FND_GLOBAL.USER_ID ;
V_RESPONSIBILITY_ID := FND_GLOBAL.RESP_ID ;
V_RESPONSIBILITY_APPL_ID := FND_GLOBAL.RESP_APPL_ID;
FND_GLOBAL.APPS_INITIALIZE( V_USER_ID ,V_RESPONSIBILITY_ID,V_RESPONSIBILITY_APPL_ID);
V_ORG_ID:=FND_PROFILE.VALUE('ORG_ID');
MO_GLOBAL.INIT('PO');
MO_GLOBAL.SET_POLICY_CONTEXT('S',V_ORG_ID);
EXCEPTION
WHEN OTHERS THEN
FND_FILE.PUT_LINE(FND_FILE.LOG , 'ERROR CODE FOR INITIALIZATION IS :'TO_NUMBER( SQLCODE )' ' 'ERROR MSG FOR INITIALIZATION IS :'SUBSTR( SQLERRM , 1 , 50) ) ;
END ;

FND_MSG_PUB.INITIALIZE ;
FND_FILE.PUT_LINE(FND_FILE.LOG , 'PO NUMBER TO CANCEL IS :'FETCH_PO_REC.SEGMENT1 ) ;

IF FETCH_PO_REC.AUTHORIZATION_STATUS <> 'APPROVED'
THEN
UPDATE PO_HEADERS_ALL
SET AUTHORIZATION_STATUS = 'APPROVED'
WHERE SEGMENT1 = FETCH_PO_REC.SEGMENT1 ;
END IF;

PO_DOCUMENT_CONTROL_PUB.CONTROL_DOCUMENT
(1.0, -- P_API_VERSION
FND_API.G_TRUE, -- P_INIT_MSG_LIST
FND_API.G_TRUE, -- P_COMMIT
L_RETURN_STATUS,-- X_RETURN_STATUS
'PO', -- P_DOC_TYPE
'STANDARD', -- P_DOC_SUBTYPE
NULL, -- P_DOC_ID
FETCH_PO_REC.SEGMENT1, -- P_DOC_NUM
NULL, -- P_RELEASE_ID
NULL, -- P_RELEASE_NUM
NULL, -- P_DOC_LINE_ID
NULL, -- P_DOC_LINE_NUM
NULL, -- P_DOC_LINE_LOC_ID
NULL, -- P_DOC_SHIPMENT_NUM
'CANCEL', -- P_ACTION
SYSDATE, -- P_ACTION_DATE
NULL, -- P_CANCEL_REASON
'N', -- P_CANCEL_REQS_FLAG
NULL, -- P_PRINT_FLAG
NULL, -- P_NOTE_TO_VENDOR
'N' ); --P_USE_GLDATE

FND_FILE.PUT_LINE(FND_FILE.LOG,'API RETURN STATUS IS-' L_RETURN_STATUS);

IF L_RETURN_STATUS = 'U' THEN --( FND_API.G_RET_STS_UNEXP_ERROR)
FND_FILE.PUT_LINE(FND_FILE.LOG, 'UNEXPECTED ERROR IN CANCEL PO PROCESS API');
FND_MSG_PUB.ADD_EXC_MSG('QP_PRICE_LIST_PUB',' UNEXPECTED ERROR IN CANCEL PO PROCESS API');
ELSIF
L_RETURN_STATUS ='E' THEN --- ( FND_API.G_RET_STS_ERROR )
FND_FILE.PUT_LINE(FND_FILE.LOG, 'ERROR IN CANCEL PO PROCESS API');
FND_MSG_PUB.ADD_EXC_MSG('QP_PRICE_LIST_PUB','ERROR IN CANCEL PO PROCESS API');
END IF;

IF L_RETURN_STATUS != 'S' THEN
V_FAILURE_COUNT := V_FAILURE_COUNT + 1;
FND_FILE.PUT_LINE(FND_FILE.LOG, 'TOTAL FAIL RECORD COUNT'V_FAILURE_COUNT);
FOR ERR_CODE IN 1..FND_MSG_PUB.COUNT_MSGLOOP
L_MSG_DATA := SUBSTR(FND_MSG_PUB.GET(P_MSG_INDEX => 1,P_ENCODED=>'F'),1,200);
FND_FILE.PUT_LINE(FND_FILE.LOG,'CANCEL PO PROCESS API FAILED FOR REASON-'L_MSG_DATA ) ;
END LOOP;
END IF;

IF L_RETURN_STATUS = 'S' THEN --- ( FND_API.G_RET_STS_SUCESS)
FND_FILE.PUT_LINE (FND_FILE.LOG, 'CANCEL PO PROCESS API PASSED' ) ;
V_SUCCESS_COUNT := V_SUCCESS_COUNT + 1;
FND_FILE.PUT_LINE(FND_FILE.LOG,'TOTAL SUCCESS RECORD COUNT-'V_SUCCESS_COUNT);

-- RENAME PO NUMBER AFTER CANCELLATION
UPDATE PO_HEADERS_ALL
SET SEGMENT1 = 'XX-'FETCH_PO_REC.SEGMENT1
WHERE SEGMENT1 = FETCH_PO_REC.SEGMENT1 ;

UPDATE PO_HEADERS_ARCHIVE_ALL
SET SEGMENT1 = 'XX-'FETCH_PO_REC.SEGMENT1
WHERE SEGMENT1 = FETCH_PO_REC.SEGMENT1 ;

END IF ;
END LOOP ;

EXCEPTION
WHEN OTHERS THEN
FND_FILE.PUT_LINE(FND_FILE.LOG, 'ERROR CODE IN THE EXECUTION OF CANCEL API IS :'TO_NUMBER( SQLCODE )' 'SUBSTR( SQLERRM , 1 , 50) ) ;
END XXPO_CANCEL_PO ;
/

Tuesday, June 29, 2010

Types of Purchase Orders



Standard PO

1) One time commitment to purchase goods / services
2) Specific Quantity, Rate, Delivery schedule

Blanket Purchase Agreement
1) Long Term Agreement to Purchase – e.g. Annual Rate Contract
2) Specific Quantity, Rate, but no specific Delivery schedule

Planned PO
1) Long term agreement to buy goods / services
2) Tentative delivery schedule and accounting distribution given.
3) Other terms and conditions fixed
4) Planned PO look exactly like a Standard PO

Contract Purchase Agreement
1) A master document giving Standard terms & Conditions
2) Suppliers are authorised to ship through Standard PO lines giving reference of the Contract Agreement