Friday, January 10, 2025

EBS : Package Development Process


======================Package Specification==================================

CREATE OR REPLACE PACKAGE xx_emp_package IS

    PROCEDURE log_message (

        p_procedure  VARCHAR2,

        p_message    VARCHAR2

    );


    PROCEDURE xx_validate;


    PROCEDURE xx_insert_valid_emp;

    

    PROCEDURE xx_insert_in_valid_emp;


    PROCEDURE xx_calling_prc;


END xx_emp_package;

=======================================================================


 ========================Package Body====================================

CREATE OR REPLACE PACKAGE BODY xx_emp_package IS


/*

Procedure To Print Messages 

*/


    PROCEDURE log_message (

        p_procedure  VARCHAR2,

        p_message    VARCHAR2

    ) IS

        l_err_msg VARCHAR2(2000);

    BEGIN

        l_err_msg := '<<'

                     || p_procedure

                     || ' - '

                     || p_message

                     || '>>';

        dbms_output.put_line('<<'

                             || p_procedure

                             || ' - '

                             || p_message

                             || '>>');


        fnd_file.put_line(fnd_file.log, l_err_msg);

    END log_message;

/*

Procedure To Validate Employee Record Columns 

*/


    PROCEDURE xx_validate IS


        l_error_msg   VARCHAR2(32000);

        status        VARCHAR2(20);

        v_first_name  VARCHAR2(200);

        v_last_name   VARCHAR2(200);

        v_full_name   VARCHAR2(200);

        v_sex         VARCHAR2(200);

        v_party_id    VARCHAR2(200);

        v_title       VARCHAR2(200);

        CURSOR c1 IS

        SELECT

            *

        FROM

            xx_temp_t

        WHERE

            nvl(status, 'N') IN ( 'N', 'E' );


    BEGIN

        FOR i IN c1 LOOP

            l_error_msg := NULL;

            status := NULL;

    

    --Validation For First Name


            log_message('xx_validate', 'Validating First Name');

            BEGIN

                SELECT

                    first_name

                INTO v_first_name

                FROM

                    xx_papf

                WHERE

                        person_id = i.person_id

                    AND first_name = i.firstname;


            EXCEPTION

                WHEN no_data_found THEN

                    l_error_msg := l_error_msg

                                   || ' ~ '

                                   || 'First Name Is In-valid';

                WHEN OTHERS THEN

                    l_error_msg := l_error_msg

                                   || ' ~ '

                                   || substr(sqlerrm, 1, 250);

            END;

    

    --Validation For Last Name


            log_message('xx_validate', 'Validating Last Name');

            BEGIN

                SELECT

                    last_name

                INTO v_last_name

                FROM

                    xx_papf

                WHERE

                        person_id = i.person_id

                    AND last_name = i.lastname;


            EXCEPTION

                WHEN no_data_found THEN

                    l_error_msg := l_error_msg

                                   || ' ~ '

                                   || 'Last Name Is In-valid';

                WHEN OTHERS THEN

                    l_error_msg := l_error_msg

                                   || ' ~ '

                                   || substr(sqlerrm, 1, 250);

            END;

    

    --Validation For Full Name


            log_message('xx_validate', 'Validating Full Name');

            BEGIN

                SELECT

                    full_name

                INTO v_full_name

                FROM

                    xx_papf

                WHERE

                        person_id = i.person_id

                    AND full_name = i.fullname;


            EXCEPTION

                WHEN no_data_found THEN

                    l_error_msg := l_error_msg

                                   || ' ~ '

                                   || 'Full Name Is In-valid';

                WHEN OTHERS THEN

                    l_error_msg := l_error_msg

                                   || ' ~ '

                                   || substr(sqlerrm, 1, 250);

            END;

        

    --Validation For Sex


            log_message('xx_validate', 'Validating Sex');

            BEGIN

                SELECT

                    sex

                INTO v_sex

                FROM

                    xx_papf

                WHERE

                        person_id = i.person_id

                    AND sex = i.sex;


            EXCEPTION

                WHEN no_data_found THEN

                    l_error_msg := l_error_msg

                                   || ' ~ '

                                   || 'Sex Is In-valid';

                WHEN OTHERS THEN

                    l_error_msg := l_error_msg

                                   || ' ~ '

                                   || substr(sqlerrm, 1, 250);

            END;

    

    --Validation For Party Id


            log_message('xx_validate', 'Validating Party Id');

            BEGIN

                SELECT

                    party_id

                INTO v_party_id

                FROM

                    xx_papf

                WHERE

                        person_id = i.person_id

                    AND party_id = i.party_id;


            EXCEPTION

                WHEN no_data_found THEN

                    l_error_msg := l_error_msg

                                   || ' ~ '

                                   || 'Party Id Is In-valid';

                WHEN OTHERS THEN

                    l_error_msg := l_error_msg

                                   || ' ~ '

                                   || substr(sqlerrm, 1, 250);

            END;

--Validation For Title


            log_message('xx_validate', 'Title');

            BEGIN

                SELECT

                    title

                INTO v_title

                FROM

                    xx_papf

                WHERE

                        person_id = i.person_id

                    AND title = i.title;


            EXCEPTION

                WHEN no_data_found THEN

                    l_error_msg := l_error_msg

                                   || ' ~ '

                                   || 'Title Is In-valid';

                WHEN OTHERS THEN

                    l_error_msg := l_error_msg

                                   || ' ~ '

                                   || substr(sqlerrm, 1, 250);

            END;


            IF l_error_msg IS NULL THEN

                UPDATE xx_temp_t

                SET

                    error_msg = l_error_msg,

                    status = 'V'

                WHERE

                    person_id = i.person_id;


                dbms_output.put_line('Employee Valid');

                log_message('xx_validate', 'Employee Valid:' || i.person_id);

            ELSE

                UPDATE xx_temp_t

                SET

                    error_msg = l_error_msg,

                    status = 'E'

                WHERE

                    person_id = i.person_id;


                log_message('xx_validate', 'Employee In-Valid:' || i.person_id);

            END IF;


        END LOOP;


        COMMIT;

    END xx_validate;

/*

Procedure To Insert Valid Employees In Table

*/


    PROCEDURE xx_insert_valid_emp IS

        v_count NUMBER;

        CURSOR c1 IS

        SELECT

            *

        FROM

            xx_temp_t

        WHERE

            status = 'V';


    BEGIN

        FOR i IN c1 LOOP

            log_message('xx_insert', 'Started Inserting Valid Employees In Table');

            INSERT INTO xx_valid_emp (

                person_id,

                empno,

                firstname,

                lastname,

                fullname,

                sex,

                title,

                party_id

            ) VALUES (

                i.person_id,

                i.empno,

                i.firstname,

                i.lastname,

                i.fullname,

                i.sex,

                i.title,

                i.party_id

            );


            log_message('xx_insert', 'END Inserting');

        END LOOP;


        BEGIN

            SELECT

                COUNT(*)

            INTO v_count

            FROM

                xx_valid_emp;


        END;

        log_message('xx_insert', 'Total Count Of Valid Employee Records Inserted:' || v_count);

        COMMIT;

    END xx_insert_valid_emp;

    


/*

Procedure To Insert In-Valid Employees In Table

*/


    PROCEDURE xx_insert_in_valid_emp IS

        v_count NUMBER;

        CURSOR c1 IS

        SELECT

            *

        FROM

            xx_temp_t

        WHERE

            status = 'E';


    BEGIN

        FOR i IN c1 LOOP

            log_message('xx_insert_in_valid_emp', 'Started Inserting In-Valid Employees In Table');

            INSERT INTO XX_IN_VALID_EMP (

                person_id,

                empno,

                firstname,

                lastname,

                fullname,

                sex,

                title,

                party_id,

                status,

                error_msg

            ) VALUES (

                i.person_id,

                i.empno,

                i.firstname,

                i.lastname,

                i.fullname,

                i.sex,

                i.title,

                i.party_id,

                i.status,

                i.error_msg

            );


            log_message('xx_insert_in_valid_emp', 'END Inserting');

        END LOOP;


        BEGIN

            SELECT

                COUNT(*)

            INTO v_count

            FROM

                xx_valid_emp;


        END;

        log_message('xx_insert_in_valid_emp', 'Total Count Of In-Valid Employee Records Inserted:' || v_count);

        COMMIT;

    END xx_insert_in_valid_emp;



/*

Procedure Call The Above Procedures In A Sequence

*/


    PROCEDURE xx_calling_prc IS

    BEGIN

        log_message('XX_CALLING_PRC', 'Calling XX_VALIDATE Procedure');

        xx_validate;

        log_message('XX_CALLING_PRC', 'Calling XX_INSERT_VALID_EMP Procedure');

        xx_insert_valid_emp;

        log_message('XX_CALLING_PRC', 'Calling XX_INSERT_IN_VALID_EMP Procedure');

        xx_insert_in_valid_emp;

    END xx_calling_prc;


END xx_emp_package;


=======================================================================

=========================Testing Scripts====================================

--Similar Table Created as per_all_people_f to do comparison of data


SELECT

    *

FROM

    xx_papf;


--To Set STATUS and ERROR_MSG Null


UPDATE xx_temp_t

SET

    status = '',

    error_msg = '';


--Temporary Table created in which STATUS & ERROR_MSG is stored.


SELECT

    *

FROM

    xx_temp_t;


--Execution Of Calling Procudure in which all other Procedures are invoked in a sequence.


EXEC xx_emp_package.xx_calling_prc;


-- Table created to insert all the valid records in the Custom table.


SELECT

    *

FROM

    xx_valid_emp;


-- To delete all the records from custom table in which valid records are inserted.


TRUNCATE TABLE xx_valid_emp;


-- Table created to insert all the In-valid records in the Custom table.


SELECT

    *

FROM

    xx_in_valid_emp;


-- To delete all the records from custom table in which In-valid records are inserted.


TRUNCATE TABLE xx_in_valid_emp;

Thursday, January 9, 2025

Fusion : BIP Report With Multi Selection & Parameter Printing Logic

Fusion :  BIP Report With Multi Selection & Parameter Printing Logic 


=========================================================

Tracking

=========================================================


Select *

from hr_all_organization_units

where ORGANIZATION_ID=300000001829266 

  

Select *

from ap_invoices_all

where 1=1

and ORG_ID=300000001829266

and invoice_id=1094


Select *

from poz_suppliers_v

where vendor_id=300000004110228


Select *

from poz_supplier_sites_v

where vendor_id=300000004110228


=========================================================

MAIN Query

=========================================================

Select 

hou.NAME Organization_NAME,

    aia.INVOICE_NUM,

    aia.invoice_amount,

    (Select segment1

from poz_suppliers_v

where vendor_id=aia.vendor_id) Supplier_Number,

(Select VENDOR_NAME

from poz_suppliers_v

where vendor_id=aia.vendor_id) Supplier_Name,

    (Select VENDOR_SITE_CODE

from poz_supplier_sites_v

where vendor_id=aia.vendor_id

and vendor_site_id=aia.vendor_site_id) Supplier_Site_Name

from 

hr_all_organization_units hou,

ap_invoices_all aia

Where 

1=1

and hou.ORGANIZATION_ID=aia.ORG_ID

--and hou.ORGANIZATION_ID = NVL(:P_ORG_NAME,hou.ORGANIZATION_ID)

and (hou.ORGANIZATION_ID IN(:P_ORG_NAME) OR 'ALL' IN(:P_ORG_NAME||'ALL'))

--and aia.invoice_id= NVL(:P_INVOICE_ID,aia.invoice_id)

and (aia.invoice_id IN(:P_INVOICE_NUM) OR 'ALL' IN(:P_INVOICE_NUM||'ALL'))

=========================================================

Parameter LOV Query

=========================================================

Select name,ORGANIZATION_ID

from hr_all_organization_units

Select invoice_num,invoice_id

from ap_invoices_all

where org_id in(:P_ORG_NAME)

--(hou.ORGANIZATION_ID In(:P_ORG_NAME) Or 'All' In(:P_ORG_NAME||'All'))

   (aia.invoice_id IN(:P_INVOICE_NUM) OR 'ALL' IN(:P_INVOICE_NUM||'ALL'))  ---Logic used in main Query for multiselection of paramters values


===========Parameters Printing Logic ================================

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

Parameter Priniting When parameters are multiselected 


LISTAGG() is used to print the multiselected paramter 

values ',' comma seperated.

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

select 

nvl(

(Select  listagg(name,',')within group(order by name)

from hr_all_organization_units

where ORGANIZATION_ID in(:P_ORG_NAME)),'All'

)v_bu,

 

nvl(

(Select  listagg(invoice_num,',')within group(order by invoice_num)

from ap_invoices_all

where invoice_id in(:P_INVOICE_NUM)),'All'

)v_in

from dual

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

Parameter Priniting when parameter are not multiselected

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

nvl2(:P_INVOICE_ID,

(Select invoice_num

from ap_invoices_all

where invoice_id =:P_INVOICE_NUM

),'All' )v_in

=========================================================

Wednesday, January 8, 2025

AP Invoice Payment Accounting Tacking

 

Select *

from ap_invoice_payments_all

where invoice_id=10033;                --CHECK_ID=10228, ACCOUNTING_EVENT_ID=51758


Select *

from ap_checks_all

where CHECK_ID=10228;            --CHECK_NUMBER=29151


Select *

from ap_payment_schedules_all

where invoice_id=10033;


Select *

from xla_ae_headers

where event_id=51758;                --AE_HEADER_ID=16698


Select *

from xla_ae_lines

where AE_HEADER_ID=16698

and ACCOUNTING_CLASS_CODE='LIABILITY';     --GL_SL_LINK_ID=25983,                      CODE_COMBINATION_ID=1015


Select *

from gl_import_references

where GL_SL_LINK_ID=25983;            --JE_HEADER_ID=8161, JE_LINE_NUM=2


Select *

from gl_je_headers

where JE_HEADER_ID=8161;


Select *

from gl_je_lines

where JE_HEADER_ID=8161

and JE_LINE_NUM=2;                --PERIOD_NAME=Feb-11


Select *

from gl_balances

where period_name='Feb-11'

and CODE_COMBINATION_ID=1015;            --5169750.52


Select sum(NVL(ACCOUNTED_DR,0))dd

from gl_je_lines

where period_name='Feb-11'

and CODE_COMBINATION_ID=1015;            --5169750.52


Sum of ACCOUNTED_DR from GL_JE_LINES should be equal to PERIOD_NET_DR of GL_BALANCES  i.e.

5169750.52          = 5169750.52

AP Invoice Accounting Tracking

 Select *

from ap_invoices_all

where INVOICE_NUM='110120309';


Select *

from ap_invoice_lines_all

where invoice_id=10033;


Select *

from ap_invoice_distributions_all

where invoice_id=10033;--ACCOUNTING_EVENT_ID=43069,DIST_CODE_COMBINATION_ID=2044


Select *

from xla_ae_headers

where event_id=43069;--AE_HEADER_ID=10324


Select *

from xla_ae_lines

where AE_HEADER_ID=10324

and ACCOUNTING_CLASS_CODE='LIABILITY';--GL_SL_LINK_ID=10664


Select *

from ap_suppliers

where vendor_id=113;


select *

from ap_supplier_sites_all

where vendor_id=113

and vendor_site_id=116;

EBS : Package Development Process

====================== Package Specification ================================== CREATE OR REPLACE PACKAGE xx_emp_package IS     PROCEDURE lo...