Вы находитесь на странице: 1из 7

Blanket Purchase Order Import Program Script: Oracle EBS R12

To create Blanket Purchase Order(PO) using Oracle standard API please follow below
steps.

Step:1 Validate and Insert PO header and line details in PO_HEADERS_INTERFACE and
PO_LINES_INTERFACE tables respectively.

SET serveroutput ON
DECLARE
p_supplier VARCHAR2(1000):='Staples';
p_supplier_site VARCHAR2(1000):='STAPLES LA';
p_ship_to_location VARCHAR2(1000):='V1- New York City';
p_bill_to_location VARCHAR2(1000):='V1- New York City';
p_currency VARCHAR2(1000):='USD';
p_buyer VARCHAR2(1000):='Stock, Ms. Pat';
p_item VARCHAR2(1000):='Oil';
p_unit_of_measure VARCHAR2(1000):='METRICTON';
p_unit_price number:=1;
v_org_name VARCHAR2(30) := 'Vision Operations';
v_dest_code VARCHAR2(30) := 'INVENTORY';
v_error_flag NUMBER:= 0;
v_main_error VARCHAR2(1000):= NULL;
v_currency VARCHAR2(1000);
v_agent_id number;
v_org_id NUMBER;
v_vendor_id NUMBER;
v_vendor_site_id NUMBER;
v_ship_to_location_id NUMBER;
v_bill_to_location_id NUMBER;
v_item_id NUMBER;
v_uom_code VARCHAR2(1000);
v_intf_dist_id NUMBER;
v_intf_line_id NUMBER;
v_intf_header_id NUMBER;
v_batch_id NUMBER;
v_line_type_id NUMBER;

BEGIN
-----------VALIDATING THE PRICE CURRENCY CODE --------------
BEGIN
SELECT currency_code
into v_currency
FROM apps.fnd_currencies
WHERE enabled_flag = 'Y'
AND currency_flag = 'Y'
AND upper(currency_code) = upper(trim(p_currency));
EXCEPTION
WHEN no_data_found THEN
v_error_flag := 1;
v_main_error := v_main_error||'PRICE CURRENCY NOT EXIST IN EBS (WHEN ND) ';
WHEN OTHERS THEN
v_error_flag := 1;
v_main_error := v_main_error||' ERROR WHILE VALIDATING CURRENCY CODE(WHEN OTH)
'||' '||SQLCODE||':'||sqlerrm ;
END;
--------- --VALIDATING AGENT AND FETCHING THE AGENT_ID-------------------------
BEGIN
SELECT ppf.person_id
INTO v_agent_id
FROM per_people_f ppf
WHERE ppf.full_name = p_buyer
and rownum=1;
EXCEPTION
WHEN no_data_found THEN
v_error_flag := 1;
v_main_error := v_main_error||'AGENT ID/TRADER PERSON NUMBER NOT EXIST IN
EBS(WHEN ND) ';
WHEN OTHERS THEN
v_error_flag := 1;
v_main_error := v_main_error|| 'ERROR WHILE VALIDATING AGENT ID / TRADER PERSON
NUMBER(WHEN OTH)-'|| SQLCODE ||':'||sqlerrm;
END;
---------VALIDATING ORAGANIZATION AND FETCHING ORANIZATION ID-----------------
BEGIN
SELECT organization_id
INTO v_org_id
FROM apps.hr_operating_units
WHERE NAME = v_org_name
and rownum=1;
EXCEPTION
WHEN no_data_found THEN
v_error_flag := 1;
v_main_error := v_main_error||'ORGANIZATION ID/INTERNAL COMPANY NUMBER NOT
FOUND IN EBS(WHEN ND) '||v_org_name;
WHEN OTHERS THEN
v_error_flag := 1;
v_main_error := v_main_error||' ERROR WHILE VALIDATING ORGANIZATION ID/INTERNAL
COMPANY NUMBER (WHEN OTH)-'||v_org_name||' '||SQLCODE||' '|| sqlerrm;
END;
---------------------VALIDATING THE VENDOR NAME AND FETCHING
VENDOR_ID----------------------
BEGIN
SELECT vendor_id
INTO v_vendor_id
FROM apps.po_vendors
WHERE upper(vendor_name) = upper(p_supplier);
EXCEPTION
WHEN no_data_found THEN
v_error_flag := 1;
v_main_error := v_main_error||'VENDOR ID/COUNTERPART COMPANY NUMBER NOT EXISTS
IN EBS (WHEN ND) '||p_supplier;
WHEN OTHERS THEN
v_error_flag := 1;
v_main_error := v_main_error||' ERROR WHILE VALIDATING VENDOR ID/COUNTERPART
COMPANY NUMBER (WHEN OTH) '||p_supplier||' '||SQLCODE||' '||sqlerrm;
END;
---------------------VALIDATING THE VENDOR SITE ID----------------------------
BEGIN
SELECT vendor_site_id
INTO v_vendor_site_id
FROM apps.po_vendor_sites_all
WHERE upper(vendor_site_code) = upper(p_supplier_site)
AND vendor_id = v_vendor_id
AND org_id = v_org_id;
EXCEPTION
WHEN no_data_found THEN
v_error_flag := 1;
v_main_error := v_main_error||'VENDOR SITE ID NOT EXIST IN EBS (WHEN ND) '||
p_supplier_site;
WHEN OTHERS THEN
v_error_flag := 1;
v_main_error := v_main_error||' ERROR WHILE VALIDATING VENDOR SITE ID(WHEN
OTH)-'||p_supplier_site||' '||SQLCODE||':'|| sqlerrm;
END;
--------VALIDATING THE SHIP TO LOCATION AND FETCHING
SHIP_TO_LOCATION_ID-------------
BEGIN
SELECT location_id
INTO v_ship_to_location_id
FROM hr_locations_all
WHERE location_code = p_ship_to_location;
EXCEPTION
WHEN no_data_found THEN
v_error_flag := 1;
v_main_error := v_main_error||'SHIP TO LOCATION ID/DESTINATION LOCATION NUMBER
NOT FOUND IN EBS (WHEN ND)-'||p_ship_to_location;
WHEN OTHERS THEN
v_error_flag := 1;
v_main_error := v_main_error||'ERROR WHILE VALIDATING SHIP TO LOCATION
ID/DESTINATION LOCATION NUMBER (WHEN OTH)'||p_ship_to_location||' '||SQLCODE||':'||
sqlerrm;
END;
-------------------VALIDATING THE BILL TO LOCATION AND FETCHING THE
BILL_TO_LOCATION_ID--------------------------
BEGIN
SELECT location_id
INTO v_bill_to_location_id
FROM hr_locations_all
WHERE location_code = p_bill_to_location ;
EXCEPTION
WHEN no_data_found THEN
v_error_flag := 1;
v_main_error := v_main_error||' BILL TO LOCATION ID NOT EXISTS IN EBS (WHEN ND)
'||p_bill_to_location;
WHEN OTHERS THEN
v_error_flag := 1;
v_main_error := v_main_error||' ERROR WHILE VALIDATING BILL TO LOCATION ID(WHEN
OTH) '||p_bill_to_location||':'||SQLCODE||':'||sqlerrm;
END;
----------------VALIDATING THE ITEM AND FETCHING ITEM ID----------------------
BEGIN
SELECT inventory_item_id
INTO v_item_id
FROM apps.mtl_system_items
WHERE enabled_flag = 'Y'
AND SYSDATE > TRUNC(NVL(start_date_active, SYSDATE -1))
AND SYSDATE < TRUNC(NVL(end_date_active, SYSDATE + 1))
AND segment1 = p_item
AND organization_id = v_org_id;
EXCEPTION
WHEN no_data_found THEN
v_error_flag := 1;
v_main_error := v_main_error||'ITEM ID/COMODITY NOT FOUND IN EBS PLEASE CHECK
FOR REFERENCE DATA MAPPING FOR TRADE ';
WHEN OTHERS THEN
v_error_flag := 1;
v_main_error := v_main_error||'ERROR WHILE VALIDATING ITEM ID/COMODITY FOR
TRADE '||p_item||' '||SQLCODE||' '||sqlerrm;
END;
------------------- VALIDATE UNIT_PRICE---------------------
BEGIN
IF(NVL(p_unit_price,0) < 1) THEN
v_error_flag := 1;
v_main_error := v_main_error||' UNIT_PRICE CANNOT BE LESS THAN ZERO OR
NULL FOR OBLIGATION ';
END IF;
END;
-------------- VALIDATE UNIT_OF_MEASURE------------------------
BEGIN
SELECT uom_code
INTO v_uom_code
FROM apps.mtl_units_of_measure
WHERE SYSDATE < TRUNC(NVL(disable_date, SYSDATE + 1))
AND upper(unit_of_measure) = upper(p_unit_of_measure);
EXCEPTION
WHEN no_data_found THEN
v_error_flag := 1;
v_main_error := v_main_error||'NO UOM FOUND IN EBS FOR UOM CODE '||
p_unit_of_measure;
WHEN too_many_rows THEN
v_error_flag := 1;
v_main_error := v_main_error||'MULTIPLE UOM CODE FOUND IN EBS FOR UOM '||
p_unit_of_measure;
WHEN OTHERS THEN
v_error_flag := 1;
v_main_error := v_main_error||' ERROR WHILE FETCHING UOM CODE '||
p_unit_of_measure||':'||SQLCODE||':'||sqlerrm;
END;
------------ GETTING SEQUESNCE VALUE FOR INTERFACE HEADER ID --------
SELECT apps.po_headers_interface_s.nextval
INTO v_intf_header_id
FROM dual;
-----------GENERATING BATCH ID--------------------
SELECT TO_CHAR(SYSDATE,'DDMMYYHHMMSS')
INTO v_batch_id
FROM dual;
------GETTING INTERFACE LINE ID FROM LINE INTERFACE SEQUENCE----------------
BEGIN
SELECT apps.po_lines_interface_s.nextval INTO v_intf_line_id FROM dual;
EXCEPTION
WHEN no_data_found THEN
v_error_flag := 1;
v_main_error := v_main_error||' Error In Getting Value From Sequence For Line
Id ';
WHEN OTHERS THEN
v_error_flag := 1;
v_main_error := v_main_error||' Error In Getting Value From Sequence For Line
Id '||SQLCODE||':'||sqlerrm;
END;
-------------Getting Line Type Id for CM line Type --------------
BEGIN
SELECT line_type_id
INTO v_line_type_id
FROM apps.po_line_types_v
WHERE NVL(inactive_date,SYSDATE+1) > SYSDATE
AND line_type = 'Goods';
EXCEPTION
WHEN no_data_found THEN
v_error_flag := 1;
v_main_error := 'ERROR WHILE FETCHING LINE TYPE ID(WHEN ND)-';
WHEN OTHERS THEN
v_error_flag := 1;
v_error_flag := v_error_flag||' ERROR WHILE FETCHING LINE TYPE ID(WHEN OTH) '||
SQLCODE||':'||sqlerrm;
END;
----------- GETTING INTERFACE DISTRIBTION ID FROM DISTRIBUTION INTERFACE SEQUENCE
----------------
BEGIN
SELECT apps.po_distributions_interface_s.nextval
INTO v_intf_dist_id
FROM dual;
EXCEPTION
WHEN no_data_found THEN
v_error_flag := 1;
v_main_error := v_main_error||' ERROR IN GETTING VALUE FROM SEQUENCE FOR
DISTRIBUTION ID ';
WHEN OTHERS THEN
v_error_flag := 1;
v_main_error := v_main_error||'ERROR IN GETTING VALUE FROM SEQUENCE FOR
DISTRIBUTION ID '||SQLCODE||':'||sqlerrm;
END;
dbms_output.put_line(v_main_error);
--===========================Inserting Records IN Interface Table
==================================-----------------
IF v_error_flag <> 1 THEN
BEGIN
INSERT
INTO apps.po_headers_interface
(
interface_header_id,
action,
process_code,
document_type_code,
batch_id,
document_num,
currency_code,
approval_required_flag,
approval_status,
vendor_id,
terms_id,
fob,
org_id,
agent_id,
effective_date,
vendor_site_id,
ship_to_location_id,
bill_to_location_id
)
VALUES
(
v_intf_header_id, -- INTERFACE_HEADER_ID
'ORIGINAL', -- ACTION
'PENDING' , -- PROCESS_CODE
'BLANKET', -- DOCUMENT_TYPE_CODE
v_batch_id,
NULL, -- DOCUMENT_NUM
v_currency, -- CURRENCY_CODE
'Y', -- APPROVAL_REQUIRED_FLAG
'APPROVED', -- APPROVAL_STATUS
v_vendor_id, -- VENDOR_ID
NULL, -- V_PAYEMENT_TERM_ID,
NULL, -- V_DELIVERY_TERM,
v_org_id, -- ORG_ID
v_agent_id, -- AGENT_ID
to_date(SYSDATE), -- EFFECTIVE_DATE
v_vendor_site_id, -- VENDOR_SITE_ID
v_ship_to_location_id, -- SHIP_TO_LOCATION_ID
v_bill_to_location_id -- BILL_TO_LOCATION_ID
);
IF SQL%notfound THEN
v_error_flag := 1;
v_main_error := v_main_error||' '||'Record Not Inserted in Header Interface
Table';
ELSE
dbms_output.put_line('Inserted Records In Header Interface Table');
END IF;
IF v_error_flag <> 1 THEN
BEGIN
INSERT
INTO apps.po_lines_interface
(
interface_line_id,
interface_header_id,
line_num,
uom_code,
item_id,
unit_price,
need_by_date,
promised_date,
line_type_id,
ship_to_organization_id,
ship_to_location,
note_to_receiver
)
VALUES
(
v_intf_line_id, --INTERFACE_LINE_ID
v_intf_header_id, --INTERFACE_HEADER_ID
NULL, --LINE_NUM
v_uom_code, --UNIT_OF_MEASURE
v_item_id, --ITEM_ID
p_unit_price, --UNIT_PRICE
SYSDATE, --NEED_BY_DATE
SYSDATE, --PROMISED_DATE
v_line_type_id, --LINE_TYPE_ID
NULL, --SHIP_TO_ORGANIZATION_ID
v_ship_to_location_id, --SHIP_TO_LOCATION
NULL --NOTE_TO_RECEIVER
);
IF SQL%notfound THEN
v_error_flag := 1;
v_main_error := v_main_error||' '||'Record Not Inserted in Lines
Interface Table';
ELSE
dbms_output.put_line('Inserted Records In Lines Interface Table');
END IF;
END;
END IF;
END;
END IF;
commit;
END;

Step:2 Once the records are inserted in PO header and line interface tables run the
API Import Price Catalogs(POXPDOI) to import Blanket Purchase Order.

SET serveroutput ON
DECLARE
v_request_id NUMBER;
v_org_id NUMBER := 204;
BEGIN
apps.mo_global.init ('PO');
apps.mo_global.set_policy_context ('S', 204);
apps.fnd_global.apps_initialize ( user_id => 1318, resp_id => 50578, resp_appl_id
=> 201 );
v_request_id :=apps.fnd_request.submit_request
('PO' ,
'POXPDOI' ,
'Import Price Catalogs' ,
SYSDATE ,
FALSE ,
NULL ,
'Blanket' ,
NULL ,
'N' ,
'N' ,
'APPROVED' ,
NULL ,
NULL ,
v_org_id, -- operating unit ID
'N' ,
NULL ,
NULL ,
NULL ,
NULL );
dbms_output.put_line(v_request_id);
commit;
END;

Вам также может понравиться