Wednesday, 17 June 2026

Sales Order SQL script in Oracle Fusion

 

Sales Order SQL script in Oracle Fusion

Two records with OPEN and DOO_REFERENCE is that Order Number 98561 has been revised (edited and resubmitted) at least once.

In Order Management, when an order is revised, Oracle does not overwrite the old data. Instead, it creates a new active version of the order and converts the old version into a historical audit trail.

DOO_REFERENCE: This is the old, inactive, read-only snapshot of the order before it was edited.

OPEN (or PROCESSING): This is the current, active, live version of your order that is moving through fulfillment

So, 

Active records will always have SUBMITTED_FLAG = 'Y' OR 

We can explicitly bypass "DOO_REFERENCE" in Where Clause


SELECT
    DHA.ORDER_NUMBER,
    DHA.ORDERED_DATE,
    DHA.STATUS_CODE AS ORDER_STATUS,
    DHA.ORDER_TYPE_CODE AS ORDER_TYPE,
    HP_SOLD.PARTY_NAME AS CUSTOMER,
    HP_BILL.PARTY_NAME AS BILL_TO_CUSTOMER,
    HP_SHIP.PARTY_NAME AS SHIP_TO_CUSTOMER,
    (
        SELECT CONT.PARTY_NAME
        FROM
            HZ_CUST_ACCOUNTS HCA,
            HZ_PARTIES       CUST,
            HZ_RELATIONSHIPS HR,
            HZ_PARTIES       CONT
        WHERE HCA.PARTY_ID     = CUST.PARTY_ID
          AND CUST.PARTY_ID    = HR.OBJECT_ID
          AND HR.SUBJECT_ID    = CONT.PARTY_ID
          AND HR.RELATIONSHIP_ID = DHA.SOLD_TO_PARTY_CONTACT_ID
          AND CONT.PARTY_NAME  = 'Garrett Collins'
          AND ROWNUM           = 1
    ) AS CONTACT_NAME,
    DLA.ORDERED_UOM,
    DLA.STATUS_CODE AS LINE_STATUS,
    DLA.ORDERED_QTY AS LINE_QTY,
    DLA.LINE_TYPE_CODE AS LINE_TYPE,
    DLA.EXTENDED_AMOUNT AS LINE_AMOUNT,
    DFL.PROCESS_INSTANCE_ID AS PROCESS_NUM,
    DFL.STATUS_CODE AS FULFILL_STA_CODE,
    DFL.SCHEDULE_SHIP_DATE AS SCHE_SHIP_DATE,
    DFL.FULFILL_INSTANCE_ID AS FULFILL_INSTANCE_ID,
    DFL.FULFILLMENT_SPLIT_REF_ID AS FULFILLMENT_SPLIT_REF_ID,
    DFL.ESTIMATE_FULFILLMENT_COST AS EST_FULFILL_COST,
    DFL.LATEST_EXT_FULFILL_LINE_NUMBER AS LATEST_FULFILLMENT_LINE_NUMBER,
    DFL.FULFILLMENT_MODE AS FULFILLMENT_MODE,
    DLA.INVENTORY_ITEM_ID AS INV_ITEM_CODE
FROM
    DOO_HEADERS_ALL          DHA,
    DOO_LINES_ALL            DLA,
    DOO_FULFILL_LINES_ALL    DFL,
    HZ_PARTIES               HP_SOLD,
    DOO_ORDER_ADDRESSES      DOA_BILL,
    HZ_CUST_ACCOUNTS         HCA_BILL,
    HZ_PARTIES               HP_BILL,
    DOO_ORDER_ADDRESSES      DOA_SHIP,
    HZ_CUST_ACCOUNTS         HCA_SHIP,
    HZ_PARTIES               HP_SHIP
WHERE 1=1
    AND DHA.HEADER_ID = DLA.HEADER_ID
    AND DLA.LINE_ID = DFL.LINE_ID
    AND DHA.SOLD_TO_PARTY_ID = HP_SOLD.PARTY_ID(+)
    AND DHA.HEADER_ID = DOA_BILL.HEADER_ID(+)
    AND DOA_BILL.ADDRESS_USE_TYPE(+) = 'BILL_TO'
    AND DOA_BILL.CUST_ACCT_ID = HCA_BILL.CUST_ACCOUNT_ID(+)
    AND HCA_BILL.PARTY_ID = HP_BILL.PARTY_ID(+)
    AND DHA.HEADER_ID = DOA_SHIP.HEADER_ID(+)
    AND DOA_SHIP.ADDRESS_USE_TYPE(+) = 'SHIP_TO'
    AND DOA_SHIP.CUST_ACCT_ID = HCA_SHIP.CUST_ACCOUNT_ID(+)
    AND HCA_SHIP.PARTY_ID = HP_SHIP.PARTY_ID(+)
    AND DHA.ORDER_NUMBER = '98561'
    AND DHA.SUBMITTED_FLAG = 'Y'
    AND DHA.STATUS_CODE <> 'DOO_REFERENCE'

------------------------------------------

Using with Clause 

WITH contact_cte AS (
    SELECT
        HR.RELATIONSHIP_ID,
        CONT.PARTY_NAME AS CONTACT_NAME
    FROM
        HZ_CUST_ACCOUNTS HCA,
        HZ_PARTIES       CUST,
        HZ_RELATIONSHIPS HR,
        HZ_PARTIES       CONT
    WHERE HCA.PARTY_ID     = CUST.PARTY_ID
      AND CUST.PARTY_ID    = HR.OBJECT_ID
      AND HR.SUBJECT_ID    = CONT.PARTY_ID
      AND CONT.PARTY_NAME  = 'Garrett Collins'
      AND ROWNUM           = 1
),

bill_to_cte AS (
    SELECT
        DOA_BILL.HEADER_ID,
        HP_BILL.PARTY_NAME AS BILL_TO_CUSTOMER
    FROM
        DOO_ORDER_ADDRESSES      DOA_BILL,
        HZ_CUST_ACCOUNTS         HCA_BILL,
        HZ_PARTIES               HP_BILL
    WHERE DOA_BILL.ADDRESS_USE_TYPE = 'BILL_TO'
      AND DOA_BILL.CUST_ACCT_ID    = HCA_BILL.CUST_ACCOUNT_ID
      AND HCA_BILL.PARTY_ID        = HP_BILL.PARTY_ID
),

ship_to_cte AS (
    SELECT
        DOA_SHIP.HEADER_ID,
        HP_SHIP.PARTY_NAME AS SHIP_TO_CUSTOMER
    FROM
        DOO_ORDER_ADDRESSES      DOA_SHIP,
        HZ_CUST_ACCOUNTS         HCA_SHIP,
        HZ_PARTIES               HP_SHIP
    WHERE DOA_SHIP.ADDRESS_USE_TYPE = 'SHIP_TO'
      AND DOA_SHIP.CUST_ACCT_ID    = HCA_SHIP.CUST_ACCOUNT_ID
      AND HCA_SHIP.PARTY_ID        = HP_SHIP.PARTY_ID
)

SELECT DISTINCT
    DHA.ORDER_NUMBER,
    DHA.ORDERED_DATE,
    DHA.STATUS_CODE AS ORDER_STATUS,
    DHA.ORDER_TYPE_CODE AS ORDER_TYPE,
    HP_SOLD.PARTY_NAME AS CUSTOMER,
    B.BILL_TO_CUSTOMER,
    S.SHIP_TO_CUSTOMER,
    C.CONTACT_NAME,
    DLA.ORDERED_UOM,
    DLA.STATUS_CODE AS LINE_STATUS,
    DLA.ORDERED_QTY AS LINE_QTY,
    DLA.LINE_TYPE_CODE AS LINE_TYPE,
    DLA.EXTENDED_AMOUNT AS LINE_AMOUNT,
    DFL.PROCESS_INSTANCE_ID AS PROCESS_NUM,
    DFL.STATUS_CODE AS FULFILL_STA_CODE,
    DFL.SCHEDULE_SHIP_DATE AS SCHE_SHIP_DATE,
    DFL.FULFILL_INSTANCE_ID AS FULFILL_INSTANCE_ID,
    DFL.FULFILLMENT_SPLIT_REF_ID AS FULFILLMENT_SPLIT_REF_ID,
    DFL.ESTIMATE_FULFILLMENT_COST AS EST_FULFILL_COST,
    DFL.LATEST_EXT_FULFILL_LINE_NUMBER AS LATEST_FULFILLMENT_LINE_NUMBER,
    DFL.FULFILLMENT_MODE AS FULFILLMENT_MODE,
    DLA.INVENTORY_ITEM_ID AS INV_ITEM_CODE
FROM
    DOO_HEADERS_ALL          DHA,
    DOO_LINES_ALL            DLA,
    DOO_FULFILL_LINES_ALL    DFL,
    HZ_PARTIES               HP_SOLD,
    bill_to_cte              B,
    ship_to_cte              S,
    contact_cte              C
WHERE 1=1
    AND DHA.HEADER_ID = DLA.HEADER_ID
    AND DLA.LINE_ID = DFL.LINE_ID
    AND DHA.SOLD_TO_PARTY_ID = HP_SOLD.PARTY_ID(+)
    AND DHA.HEADER_ID = B.HEADER_ID(+)
    AND DHA.HEADER_ID = S.HEADER_ID(+)
    AND DHA.SOLD_TO_PARTY_CONTACT_ID = C.RELATIONSHIP_ID(+)
    AND DHA.ORDER_NUMBER = '98561'
    AND DHA.SUBMITTED_FLAG = 'Y'
    AND DHA.STATUS_CODE <> 'DOO_REFERENCE'

No comments: