Overview: This Datafix script is used to delete the work confirmation and the associated receipt data. In this script it will reduce the amount/quantity delivered for the work confirmation in po tables and delink the receiving and po data as if no WC has been created and set the WC status to REJECTED status.

Note :
1.User has to pass the work confirmation number to cancel the WC.

2.In case if invoice is created for the WC then user has to cancel the invoice prior to applying this script by contacting the Payable’s dept.

 

Script:

–Step.1–  set serveroutput on;
–Step.2–Run below script to delete work confirmation
DECLARE
    l_count            NUMBER := 0;
    l_ship_num         rcv_shipment_headers.shipment_num%TYPE := ‘501123_0008’;
    l_matching_basis   po_line_locations_all.matching_basis%TYPE;
    CURSOR rt IS
    SELECT
        rsh.shipment_num,
        rt.*
    FROM
        rcv_transactions       rt,
        rcv_shipment_headers   rsh
    WHERE
        TRIM(rsh.shipment_num) = TRIM(l_ship_num)
        AND rsh.receipt_source_code = ‘VENDOR’
        AND rsh.asn_type = ‘WC’
        AND rsh.shipment_header_id = rt.shipment_header_id;
    CURSOR rsl IS
    SELECT
        rsh.shipment_num,
        rsl.*
    FROM
        rcv_shipment_lines     rsl,
        rcv_shipment_headers   rsh
    WHERE
        TRIM(rsh.shipment_num) = TRIM(l_ship_num)
        AND rsh.receipt_source_code = ‘VENDOR’
        AND rsh.asn_type = ‘WC’
        AND rsl.shipment_line_status_code = ‘EXPECTED’
        AND rsl.approval_status IN (
            ‘APPROVED’,
            ‘REJECTED’
        )
        AND rsh.shipment_header_id = rsl.shipment_header_id
        AND NOT EXISTS (
            SELECT
                1
            FROM
                rcv_transactions rt
            WHERE
                rt.shipment_header_id = rsh.shipment_header_id
        );
BEGIN
    FOR rec IN rt LOOP
        SELECT
            poll.matching_basis
        INTO l_matching_basis
        FROM
            po_distributions_all    pod,
            po_line_locations_all   poll
        WHERE
            pod.po_distribution_id = rec.po_distribution_id
            AND poll.line_location_id = pod.line_location_id;
        l_count := l_count + 1;
        IF ( l_matching_basis = ‘QUANTITY’ ) THEN
            UPDATE po_distributions_all
            SET
                quantity_delivered = decode(sign(quantity_delivered – rec.quantity), – 1, 0, quantity_delivered – rec.quantity),
                last_update_date = sysdate
            WHERE
                po_distribution_id = rec.po_distribution_id
                AND rec.transaction_type = ‘DELIVER’;
            UPDATE po_line_locations_all
            SET
                quantity_received = decode(sign(quantity_received – rec.quantity), – 1, 0, quantity_received – rec.quantity),
                last_update_date = sysdate
            WHERE
                line_location_id = rec.po_line_location_id
                AND rec.transaction_type = ‘RECEIVE’
                AND matching_basis = ‘QUANTITY’;
        ELSIF ( l_matching_basis = ‘AMOUNT’ ) THEN
            UPDATE po_distributions_all
            SET
                amount_delivered = decode(sign(amount_delivered – rec.amount), – 1, 0, amount_delivered – rec.amount),
                last_update_date = sysdate
            WHERE
                po_distribution_id = rec.po_distribution_id
                AND rec.transaction_type = ‘DELIVER’;
            UPDATE po_line_locations_all
            SET
                amount_received = decode(sign(amount_received – rec.amount), – 1, 0, amount_received – rec.amount),
                last_update_date = sysdate
            WHERE
                line_location_id = rec.po_line_location_id
                AND rec.transaction_type = ‘RECEIVE’
                AND matching_basis = ‘AMOUNT’;
        END IF;
        IF l_matching_basis IN (
            ‘QUANTITY’,
            ‘AMOUNT’
        ) THEN
            UPDATE po_line_locations_all
            SET
                closed_code = decode(closed_code, ‘CLOSED FOR RECEIVING’, ‘OPEN’, ‘CLOSED FOR INVOICE’),
                closed_for_receiving_date = NULL,
                closed_reason = NULL,
                closed_date = NULL,
                closed_flag = NULL,
                last_update_date = sysdate
            WHERE
                closed_code IN (
                    ‘CLOSED’,
                    ‘CLOSED FOR RECEIVING’
                )
                AND line_location_id = rec.po_line_location_id;
            UPDATE po_lines_all
            SET
                closed_code = ‘OPEN’,
                closed_reason = NULL,
                closed_date = NULL,
                closed_flag = NULL,
                last_update_date = sysdate
            WHERE
                closed_code = ‘CLOSED’
                AND po_line_id = rec.po_line_id;
            UPDATE po_headers_all
            SET
                closed_code = ‘OPEN’,
                closed_date = NULL,
                last_update_date = sysdate
            WHERE
                closed_code = ‘CLOSED’
                AND po_header_id = rec.po_header_id;
        END IF;
    END LOOP;
    FOR rec IN rsl LOOP
        SELECT
            poll.matching_basis
        INTO l_matching_basis
        FROM
            po_line_locations_all poll
        WHERE
            poll.line_location_id = rec.po_line_location_id;
        l_count := l_count + 1;
        IF ( l_matching_basis = ‘QUANTITY’ ) THEN
            UPDATE po_line_locations_all
            SET
                quantity_shipped = decode(sign(quantity_shipped – rec.quantity_shipped), – 1, 0, quantity_shipped – rec.quantity_shipped
                ),
                last_update_date = sysdate
            WHERE
                line_location_id = rec.po_line_location_id;
            UPDATE rcv_shipment_lines
            SET
                quantity_shipped = 0,
                last_update_date = sysdate
            WHERE
                shipment_line_id = rec.shipment_line_id;
            DELETE FROM rcv_transactions_interface
            WHERE
                transaction_type IN (
                    ‘SHIP’,
                    ‘RECEIVE’
                )
                AND interface_source_code = ‘ISP’
                AND TRIM(shipment_num) = TRIM(rec.shipment_num)
                AND ( ( processing_status_code = ‘COMPLETED’
                        AND transaction_status_code = ‘ERROR’ )
                      OR ( processing_status_code = ‘ERROR’
                           AND transaction_status_code = ‘PENDING’ ) )
                AND quantity IS NOT NULL
                AND po_line_location_id = rec.po_line_location_id;
        ELSIF ( l_matching_basis = ‘AMOUNT’ ) THEN
            UPDATE po_line_locations_all
            SET
                amount_shipped = decode(sign(amount_shipped – rec.amount_shipped), – 1, 0, amount_shipped – rec.amount_shipped),
                last_update_date = sysdate
            WHERE
                line_location_id = rec.po_line_location_id;
            UPDATE rcv_shipment_lines
            SET
                amount_shipped = 0,
                requested_amount = 0,
                last_update_date = sysdate
            WHERE
                shipment_line_id = rec.shipment_line_id;
            DELETE FROM rcv_transactions_interface
            WHERE
                transaction_type IN (
                    ‘SHIP’,
                    ‘RECEIVE’
                )
                AND interface_source_code = ‘ISP’
                AND TRIM(shipment_num) = TRIM(rec.shipment_num)
                AND ( ( processing_status_code = ‘COMPLETED’
                        AND transaction_status_code = ‘ERROR’ )
                      OR ( processing_status_code = ‘ERROR’
                           AND transaction_status_code = ‘PENDING’ ) )
                AND amount IS NOT NULL
                AND po_line_location_id = rec.po_line_location_id;
        END IF;
    END LOOP;
    IF ( l_count > 0 ) THEN
        UPDATE rcv_transactions
        SET
            po_line_location_id = – 1 * po_line_location_id,
            po_distribution_id = – 1 * po_distribution_id,
            last_update_date = sysdate
        WHERE
            shipment_header_id IN (
                SELECT
                    shipment_header_id
                FROM
                    rcv_shipment_headers
                WHERE
                    TRIM(shipment_num) = TRIM(l_ship_num)
                    AND asn_type = ‘WC’
            )
            AND po_line_location_id > 0;
        UPDATE rcv_shipment_lines
        SET
            approval_status = ‘REJECTED’,
            po_header_id = – 1 * po_header_id,
            po_line_id = – 1 * po_line_id,
            po_line_location_id = – 1 * po_line_location_id,
            po_distribution_id = – 1 * po_distribution_id,
            last_update_date = sysdate
        WHERE
            shipment_header_id IN (
                SELECT
                    shipment_header_id
                FROM
                    rcv_shipment_headers
                WHERE
                    TRIM(shipment_num) = TRIM(l_ship_num)
                    AND asn_type = ‘WC’
            )
            AND po_line_location_id > 0;
        UPDATE rcv_shipment_headers
        SET
            shipment_num = to_char(‘R’
                                   || ‘-‘
                                   || TRIM(l_ship_num)),
            approval_status = ‘REJECTED’,
            last_update_date = sysdate
        WHERE
            TRIM(shipment_num) = TRIM(l_ship_num)
            AND asn_type = ‘WC’;
        UPDATE rcv_headers_interface
        SET
            shipment_num = to_char(‘R’
                                   || ‘-‘
                                   || TRIM(l_ship_num)),
            last_update_date = sysdate
        WHERE
            TRIM(shipment_num) = TRIM(l_ship_num)
            AND asn_type = ‘WC’;
        DELETE FROM rcv_headers_interface rhi
        WHERE
            TRIM(rhi.shipment_num) = TRIM(l_ship_num)
            AND rhi.processing_status_code = ‘ERROR’
            AND rhi.asn_type = ‘WC’;
    END IF;
    dbms_output.put_line(‘Pls. check the data again and then commit’);
EXCEPTION
    WHEN OTHERS THEN
        dbms_output.put_line(‘Error Occured :’);
        dbms_output.put_line(‘ ‘
                             || sqlcode
                             || ‘ — ‘
                             || sqlerrm);
        ROLLBACK;
        CLOSE rt;
END;
–Step.3–
–commit;
Recent Posts

Start typing and press Enter to search