1.查询一揽子PO:
这里要注意的是:不同的付款条件,币种,税率,都会可能产生一张新的一揽子PO协议
select pla.PO_LINE_ID, pla.PO_HEADER_ID, pla.ITEM_ID, msib.SEGMENT1 ITEM_CODE, pla.UNIT_PRICE, pla.ITEM_DESCRIPTION, pla.START_DATE, pla.EXPIRATION_DATE, pla.CANCEL_FLAG, pla.CLOSED_CODE, pha.PO_HEADER_ID, pha.VENDOR_ID, pha.VENDOR_SITE_ID, pha.TERMS_ID, pla.TAX_CODE_ID from PO_LINES_ALL pla, PO_HEADERS_ALL pha,MTL_SYSTEM_ITEMS_B msib where nvl(pla.closed_code, 'OPEN') != 'FINALLY CLOSED' and nvl(pla.CANCEL_FLAG, 'N') = 'N' and pla.PO_HEADER_ID=pha.PO_HEADER_ID and nvl(pha.closed_code, 'OPEN') != 'FINALLY CLOSED' and nvl(pha.CANCEL_FLAG,'N')='N' and pha.ENABLED_FLAG='Y' and pha.TYPE_LOOKUP_CODE = 'BLANKET' and msib.INVENTORY_ITEM_ID=pla.ITEM_ID
2.通过查找对应的ID,失效对应的价格,我这里好像少了付款条件跟币种,税率这几个条件,
procedure SetPriceExpireDate(P_ITEM_CODE IN VARCHAR2, P_VENDOR_CODE IN VARCHAR2, P_VENDOR_SITE_CODE IN VARCHAR2, P_ORG_ID IN VARCHAR2, v_retval out number) is begin Update PO_LINES_ALL pla set pla.EXPIRATION_DATE = sysdate where pla.ITEM_ID = GetItemID(P_ITEM_CODE, P_ORG_ID) and pla.ORG_ID = P_ORG_ID and nvl(pla.cancel_flag, 'N') = 'N' and nvl(closed_code, 'OPEN') != 'FINALLY CLOSED' and exists (select * from PO_HEADERS_ALL pha where pha.PO_HEADER_ID = pla.PO_HEADER_ID and pha.TYPE_LOOKUP_CODE = 'BLANKET' and pha.VENDOR_ID = GetVendorID(P_VENDOR_CODE) and pha.VENDOR_SITE_ID = GetVendorSiteID(P_VENDOR_SITE_CODE, P_ORG_ID)); v_retval := 1; COMMIT; EXCEPTION WHEN OTHERS THEN v_retval := 0; end SetPriceExpireDate;
3.辅助的几个函数 Function GetVendorID(P_Vendor_Code IN VARCHAR2) RETURN NUMBER as v_vendor_id number; begin select pv.VENDOR_ID into v_vendor_id from po_vendors pv where pv.SEGMENT1 = P_Vendor_Code; return v_vendor_id; end;
Function GetVendorSiteID(P_Vendor_SITE_CODE IN VARCHAR2, P_ORG_ID IN NUMBER) RETURN NUMBER as v_vendor_site_id number; begin select pvsa.VENDOR_SITE_ID into v_vendor_site_id from PO_VENDOR_SITES_ALL pvsa where pvsa.VENDOR_SITE_CODE = P_Vendor_SITE_CODE and pvsa.ORG_ID = P_ORG_ID; return v_vendor_site_id; end;
FUNCTION GetItemID(P_ITEM_CODE IN VARCHAR2, P_ORG_ID IN NUMBER) RETURN NUMBER as v_item_id number; begin select msib.INVENTORY_ITEM_ID into v_item_id from MTL_SYSTEM_ITEMS_B msib where msib.SEGMENT1 = P_ITEM_CODE AND msib.ORGANIZATION_ID = P_ORG_ID; return v_item_id; end;
|