This script will help you to do Inspection of GRN. I have developed it as per my requirement you can do the changes in code as per your requirement.
DECLARE
CURSOR grn_dt
IS
SELECT grn_number, item_code, accept_qty, reject_qty
FROM xx_grn_detail_tl; ---- Replace this custom table by your table
v_header_id NUMBER;
v_line_id NUMBER;
v_item_id NUMBER;
v_p_line_id NUMBER;
v_p_header_id NUMBER;
v_p_line_loc_id NUMBER;
v_to_org_id NUMBER;
v_uom VARCHAR2 (250);
v_emp_id NUMBER;
v_vendor_id NUMBER;
v_org_id NUMBER;
v_trn_id NUMBER;
BEGIN
FOR i IN grn_dt
LOOP
------ Query to get GRN Header Id and Vendor Id -----------------------
SELECT shipment_header_id, vendor_id
INTO v_header_id, v_vendor_id
FROM rcv_shipment_headers
WHERE TRIM (receipt_num) = TRIM (i.grn_number);
----------- Query to get GRN Line ID,PO Line ID, PO header Id,PO Line Location Id,Ship to Organization Id,UOM -------------------
SELECT shipment_line_id, item_id, po_line_id, po_header_id,
po_line_location_id, to_organization_id, rsl.unit_of_measure,
employee_id
INTO v_line_id, v_item_id, v_p_line_id, v_p_header_id,
v_p_line_loc_id, v_to_org_id, v_uom,
v_emp_id
FROM rcv_shipment_lines rsl, mtl_system_items_b msib
WHERE msib.inventory_item_id = rsl.item_id
AND TRIM (msib.segment1) = TRIM (i.item_code)
AND shipment_header_id = v_header_id
AND msib.organization_id = 88;
--- Query to get Operating Unit ID ----------------
SELECT org_id
INTO v_org_id
FROM po_headers_all
WHERE po_header_id = v_p_header_id;
----- Query to get Transaction Id ---------------
SELECT transaction_id
INTO v_trn_id
FROM rcv_transactions
WHERE shipment_line_id = v_line_id AND transaction_type = 'RECEIVE';
-------- If condition to insert Accepted Qty Data into Interface Table -----------------------
IF i.accept_qty IS NOT NULL
THEN
INSERT INTO rcv_transactions_interface
(interface_transaction_id,
GROUP_ID, last_update_date, last_updated_by,
creation_date, created_by, last_update_login,
transaction_type, transaction_date,
processing_status_code, processing_mode_code,
transaction_status_code, quantity, unit_of_measure,
item_id, employee_id, shipment_header_id,
shipment_line_id, receipt_source_code, vendor_id,
source_document_code, to_organization_id,
parent_transaction_id, po_header_id, po_line_id,
po_line_location_id, inspection_status_code,
inspection_quality_code, org_id, validation_flag
)
VALUES (rcv_transactions_interface_s.NEXTVAL,--INTERFACE_TRANSACTION_ID
rcv_interface_groups_s.NEXTVAL, --GROUP_ID
SYSDATE, --LAST_UPDATE_DATE
0, --LAST_UPDATE_BY
SYSDATE, --CREATION_DATE
0, --CREATED_BY
0, --LAST_UPDATE_LOGIN
'ACCEPT', --TRANSACTION_TYPE
SYSDATE, --TRANSACTION_DATE
'PENDING', --PROCESSING_STATUS_CODE
'BATCH', --PROCESSING_MODE_CODE
'PENDING', --TRANSACTION_STATUS_CODE
i.accept_qty, --QUANTITY
v_uom, --UNIT_OF_MEASURE
v_item_id, --ITEM_ID
v_emp_id, --EMPLOYEE_ID
v_header_id, --SHIPMENT_HEADER_ID
v_line_id, --SHIPMENT_LINE_ID
'VENDOR', --RECEIPT_SOURCE_CODE
v_vendor_id, --VENDOR_ID
'PO', --SOURCE_DOCUMENT_CODE
v_to_org_id, --TO_ORGANIZATION_ID
v_trn_id, --PARENT_TRANSACTION_ID
v_p_header_id, --PO_HEADER_ID
v_p_line_id, --PO_LINE_ID
v_p_line_loc_id, --PO_LINE_LOCATION_ID
'ACCEPTED', --INSPECTION_STATUS_CODE
'Excellent', --INSPECTION_QUALITY_CODE
v_org_id, --ORG_ID
'Y' --Validation_flag
);
END IF;
----- If Condition to insert Rejected Qty Data into Interface Table -----------------
IF i.reject_qty IS NOT NULL
THEN
INSERT INTO rcv_transactions_interface
(interface_transaction_id,
GROUP_ID, last_update_date, last_updated_by,
creation_date, created_by, last_update_login,
transaction_type, transaction_date,
processing_status_code, processing_mode_code,
transaction_status_code, quantity, unit_of_measure,
item_id, employee_id, shipment_header_id,
shipment_line_id, receipt_source_code, vendor_id,
source_document_code, to_organization_id,
parent_transaction_id, po_header_id, po_line_id,
po_line_location_id, inspection_status_code,
inspection_quality_code, org_id, validation_flag
)
VALUES (rcv_transactions_interface_s.NEXTVAL, --INTERFACE_TRANSACTION_ID
rcv_interface_groups_s.NEXTVAL, --GROUP_ID
SYSDATE, --LAST_UPDATE_DATE
0, --LAST_UPDATE_BY
SYSDATE, --CREATION_DATE
0, --CREATED_BY
0, --LAST_UPDATE_LOGIN
'REJECT', --TRANSACTION_TYPE
SYSDATE, --TRANSACTION_DATE
'PENDING', --PROCESSING_STATUS_CODE
'BATCH', --PROCESSING_MODE_CODE
'PENDING', --TRANSACTION_STATUS_CODE
i.accept_qty, --QUANTITY
v_uom, --UNIT_OF_MEASURE
v_item_id, --ITEM_ID
v_emp_id, --EMPLOYEE_ID
v_header_id, --SHIPMENT_HEADER_ID
v_line_id, --SHIPMENT_LINE_ID
'VENDOR', --RECEIPT_SOURCE_CODE
v_vendor_id, --VENDOR_ID
'PO', --SOURCE_DOCUMENT_CODE
v_to_org_id, --TO_ORGANIZATION_ID
v_trn_id, --PARENT_TRANSACTION_ID
v_p_header_id, --PO_HEADER_ID
v_p_line_id, --PO_LINE_ID
v_p_line_loc_id, --PO_LINE_LOCATION_ID
'REJECTED', --INSPECTION_STATUS_CODE
'Damaged', --INSPECTION_QUALITY_CODE
v_org_id, --ORG_ID
'Y' --Validation_flag
);
END IF;
UPDATE xx_grn_detail_tl
SET flag = 'S'
WHERE grn_number = i.grn_number AND item_code = i.item_code;
fnd_file.put_line (fnd_file.output,'===========================================================================');
fnd_file.put_line (fnd_file.output,
'Inspection done successfully for GRN :-'||' '||i.grn_number||' '||i.item_code
);
fnd_file.put_line (fnd_file.output,'===========================================================================');
EXCEPTION
WHEN OTHERS
THEN
fnd_file.put_line (fnd_file.output,'===========================================================================');
fnd_file.put_line (fnd_file.output,
'Error Occured while processing GRN :-'||' '||i.grn_number||' '||i.item_code
);
fnd_file.put_line (fnd_file.output,'===========================================================================');
UPDATE xx_grn_detail_tl
SET flag = 'E'
WHERE grn_number = i.grn_number AND item_code = i.item_code;
END LOOP;
COMMIT;
END;
1.First Made the changes in code as per requirement and create procedure.
2.Execute the code.
3.Run Receiving Transaction Processor in Purchasing