Showing posts with label Receivable. Show all posts
Showing posts with label Receivable. Show all posts

Monday, 29 January 2018

Query to Find Receipt Class and its GL Combinition Query

SELECT ARC.NAME ReceiptClass,
       ARC.CREATION_METHOD_CODE Creation_Mehthod,
       DECODE(ARC.REMIT_METHOD_CODE,
              'STANDARD',
              'Standard',
              NULL,
              'No Remittance') Remittance_Method,
       DECODE(ARC.CLEAR_FLAG,
              'Y',
              'By Matching',
              NULL,
              'Directly',
              'Directly') Clearance_Method,
       ARM.NAME Receipt_Mehtod_Name,
       ARM.PRINTED_NAME Printed_Name,
       ARM.START_DATE Effective_Date,
       ARM.END_DATE End_Date,
       HOU.NAME Operating_Unit,
       CBB.bank_name Bank_Name,
       CBB.bank_branch_name Branch_Name,
       CBA.BANK_ACCOUNT_NAME Bank_Account_Name,
       CBA.CURRENCY_CODE Currency,
       RM.MIN_RECEIPT_AMOUNT Min_Receipt_Amount,
       RM.RISK_ELIMINATION_DAYS Risk_Elimination_Days,
       RM.CLEARING_DAYS Clearing_Days,
       RM.OVERRIDE_REMIT_ACCOUNT_FLAG Override_Bank,
       RM.START_DATE Effective_Days,
       RM.END_DATE End_Days,
       RM.PRIMARY_FLAG Primary_Flag,
       (select gcc.concatenated_segments
          from gl_code_combinations_kfv gcc
         where gcc.code_combination_id = RM.CASH_CCID) Cash,
       (select gcc.concatenated_segments
          from gl_code_combinations_kfv gcc
         where gcc.code_combination_id = RM.RECEIPT_CLEARING_CCID) Receipt_Confirmation,
       (select gcc.concatenated_segments
          from gl_code_combinations_kfv gcc
         where gcc.code_combination_id = RM.REMITTANCE_CCID) Remittance,
       (select gcc.concatenated_segments
          from gl_code_combinations_kfv gcc
         where gcc.code_combination_id = RM.FACTOR_CCID) Factoring,
       (select gcc.concatenated_segments
          from gl_code_combinations_kfv gcc
         where gcc.code_combination_id = RM.SHORT_TERM_DEBT_CCID) Short_Term_Debt,
       (select gcc.concatenated_segments
          from gl_code_combinations_kfv gcc
         where gcc.code_combination_id = RM.BANK_CHARGES_CCID) Bank_Charges,
       (select gcc.concatenated_segments
          from gl_code_combinations_kfv gcc
         where gcc.code_combination_id = RM.UNAPPLIED_CCID) Unapplied_receipts,
       (select gcc.concatenated_segments
          from gl_code_combinations_kfv gcc
         where gcc.code_combination_id = RM.UNIDENTIFIED_CCID) Unidentified_Receipts,
       (select gcc.concatenated_segments
          from gl_code_combinations_kfv gcc
         where gcc.code_combination_id = RM.ON_ACCOUNT_CCID) On_Account,
       arc.receipt_class_id,
       hou.organization_id
  FROM AR_RECEIPT_CLASSES             ARC,
       AR_RECEIPT_METHODS             ARM,
       HR_ALL_ORGANIZATION_UNITS      HOU,
       CE_BANK_ACCT_USES_ALL          CBAU,
       CE_BANK_ACCOUNTS               CBA,
       CE_BANK_BRANCHES_V             CBB,
       AR_RECEIPT_METHOD_ACCOUNTS_ALL RM

 WHERE ARM.RECEIPT_CLASS_ID = ARC.RECEIPT_CLASS_ID
   AND ARM.RECEIPT_METHOD_ID = RM.RECEIPT_METHOD_ID
   AND RM.ORG_ID = HOU.ORGANIZATION_ID
   AND CBAU.BANK_ACCT_USE_ID = RM.REMIT_BANK_ACCT_USE_ID
   AND CBAU.BANK_ACCOUNT_ID = CBA.BANK_ACCOUNT_ID
   AND CBB.branch_party_id = CBA.BANK_BRANCH_ID
   AND HOU.NAME = &p_org_name
   AND RM.END_DATE IS NULL
   AND ARM.END_DATE  is null

 order by hou.name, arc.name

Saturday, 25 March 2017

CSV FILE LOADER IN ORACLE USING PLSQL



Step # 1:
Create Database directory where you will put your CSV file in Server.

CREATE OR REPLACE DIRECTORY MY_DIR AS '/U03/.......';
-------------------------------------------------------------------------------------------
 

Step # 2;
Create 3 Tables According to your CSV Columns:
1. CSV Data Table
2. Bad Log/Error Table
3. History Table


CREATE TABLE CSV_AR_INV_TABLE
(
LEGAL_ENTITY_NAME                   VARCHAR2(100),
INVOICE_TYPE                                  VARCHAR2(100),
CUST_TRX_TYPE_NAME               VARCHAR2(100),
CURRENCY_CODE                            VARCHAR2(100),
TRX_DATE                                           DATE,
CONVERSION_RATE                       NUMBER,
PAYMENT_TERM                             VARCHAR2(100),
SALES_PERSON_NAME                                 VARCHAR2(100),
BILL_TO_CUSTOMER_NUMBER VARCHAR2(100),
BILL_TO_CUSTOMER_NAME      VARCHAR2(100),
BILL_TO_CUSTOMER_SITE           VARCHAR2(100),
SHIP_TO_CUSTOMER_NUMBER VARCHAR2(100),
SHIP_TO_CUSTOMER_NAME     VARCHAR2(100),
SHIP_TO_CUSTOMER_SITE         VARCHAR2(100),
LINE_NO                                              NUMBER,
LINE_TYPE                                           VARCHAR2(100),
LINE_DESCRIPTION                         VARCHAR2(100),
QUANTITY                                           NUMBER,
UNIT_SELLING_PRICE                    NUMBER,
AMOUNT                                            NUMBER,
CRM_INVOICE_NO                         VARCHAR2(100),
GL_CODE                                             VARCHAR2(100),
STATUS                                                VARCHAR2(100)
);
CREATE TABLE CSV_AR_INV_LOADER_BADLOG
(
TABLE_NAME VARCHAR2(200),
LINE_NUMBER NUMBER,
ERRM VARCHAR2(4000),
DATA VARCHAR2(4000),
ERROR_DATE TIMESTAMP(6)
);

CREATE TABLE CSV_AR_INV_LOADER_HIST
(
FILENAME VARCHAR2(200),
TABLE_NAME VARCHAR2(200),
NUM_OF_REC NUMBER,
IMPORT_DATE DATE
);

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

Step # 3
Create Function to Read and Load CSV Data From Server File Location.

CREATE FUNCTION CSV_AR_LOADER_FUNC
      ( P_TABLE              IN VARCHAR2,
        P_DIR                IN VARCHAR2 DEFAULT 'MY_DIR',
        P_FILENAME           IN VARCHAR2,
        P_IGNORE_HEADERLINES IN INTEGER DEFAULT 1,
        P_DELIMITER          IN VARCHAR2 DEFAULT ',',
        P_OPTIONAL_ENCLOSED  IN VARCHAR2 DEFAULT '"')
    RETURN VARCHAR2 IS
    /***************************************************************************
    -- PROCEDURE LOAD_CSV
    -- PURPOSE: This Procedure read the data from a CSV file.
    -- And load it into the target oracle table.
    -- Finally it renames the source file with date.
    -- P_FILENAME -- The name of the flat file(a text file)
    -- P_DIRECTORY -- Name of the directory where the file is been placed.
    -- Note: The grant has to be given for the user to the directory
    -- before executing the function
    -- P_IGNORE_HEADERLINES: -- Pass the value as '1' to ignore importing headers.
    -- P_DELIMITER -- By default the delimiter is used as ','
    -- As we are using CSV file to load the data into oracle
    -- P_OPTIONAL_ENCLOSED -- By default the optionally enclosed is used as '"'
    -- As we are using CSV file to load the data into oracle
    -- AUTHOR: M WAQAS KHAN
    -- Date : 24 FEB, 2017
    **************************************************************************/
    l_input     utl_file.file_type;
    l_theCursor integer default dbms_sql.open_cursor;
    l_lastLine  varchar2(4000);
    l_cnames    varchar2(4000);
    l_bindvars  varchar2(4000);
    l_status    integer;
    l_cnt       number default 0;
    l_rowCount  number default 0;
    --l_sep       char(1) default NULL;
    L_ERRMSG varchar2(4000);
    V_EOF    BOOLEAN := false;
    L_RES    VARCHAR2(100) := 'SUCCESS';
    l_error exception;
  begin
 
    DELETE FROM CSV_AR_INV_TABLE;
    commit;
    delete from CSV_AR_INV_LOADER_BADLOG;
    commit;
 
    l_cnt := 1;
    for TAB_COLUMNS in (select column_name, data_type
                          from user_tab_columns
                         where table_name = p_table
                         order by column_id) loop
      l_cnames   := l_cnames || tab_columns.column_name || ',';
      l_bindvars := l_bindvars || case
                      when tab_columns.data_type in ('DATE', 'TIMESTAMP(6)') then
                      --'to_date(:b' || l_cnt || ',''YYYY-MM-DD HH24:MI:SS''),'
                       'to_date(:b' || l_cnt || ',''MM-DD-YYYY HH24:MI:SS''),'
                      else
                       ':b' || l_cnt || ','
                    end;
      l_cnt      := l_cnt + 1;
      --dbms_output.put_line(l_bindvars );
   
    end loop;
 
    begin
      l_cnames   := rtrim(l_cnames, ',');
      L_BINDVARS := RTRIM(L_BINDVARS, ',');
      /* Modified By Muhamamd Waqas Khan
        Date : 15 March 016
      */
      BEGIN
        L_INPUT := UTL_FILE.FOPEN(P_DIR, P_FILENAME, 'r');
      exception
        WHEN UTL_FILE.INVALID_OPERATION THEN
          raise l_error;
      END;
   
      ---dbms_output.put_line(l_bindvars || ' - ' || l_cnames);
   
      IF p_ignore_headerlines > 0 THEN
        BEGIN
          FOR i IN 1 .. p_ignore_headerlines LOOP
            UTL_FILE.get_line(l_input, l_lastLine);
          END LOOP;
        EXCEPTION
          WHEN NO_DATA_FOUND THEN
            v_eof := TRUE;
        end;
      END IF;
      if not v_eof then
        dbms_sql.parse(l_theCursor,
                       'insert into ' || p_table || '(' || l_cnames ||
                       ') values (' || l_bindvars || ')',
                       dbms_sql.native);
     
        loop
          begin
            utl_file.get_line(l_input, l_lastLine);
          exception
            when NO_DATA_FOUND then
              exit;
          end;
          if length(l_lastLine) > 0 then
            for i in 1 .. l_cnt - 1 LOOP
              dbms_output.put_line(ltrim(REGEXP_SUBSTR(l_lastline,
                                                       '(^|,)("[^"]*"|[^",]*)',
                                                       1,
                                                       i),
                                         p_delimiter));
           
              dbms_sql.bind_variable(l_theCursor,
                                     ':b' || i,
                                     rtrim(rtrim(ltrim(ltrim(REGEXP_SUBSTR(l_lastline,
                                                                           '(^|,)("[^"]*"|[^",]*)',
                                                                           1,
                                                                           i),
                                                             ','),
                                                       '"'),
                                                 ','),
                                           '"'));
            end loop;
            begin
              l_status := dbms_sql.execute(l_theCursor);
              -- dbms_output.put_line('Waqas:' ||l_theCursor);
              l_rowCount := l_rowCount + 1;
            exception
              when OTHERS then
                L_ERRMSG := SQLERRM;
                insert into CSV_AR_INV_LOADER_BADLOG
                  (TABLE_NAME, line_number, ERRM, data, ERROR_DATE)
                values
                  (p_table,
                   l_rowCount + 2,
                   l_errmsg,
                   l_lastLine,
                   systimestamp);
             
            end;
          end if;
        end loop;
        dbms_sql.close_cursor(l_theCursor);
        utl_file.fclose(l_input);
        commit;
      end if;
      insert into CSV_AR_INV_LOADER_HIST
        (FILENAME, TABLE_NAME, NUM_OF_REC, IMPORT_DATE)
      values
        (P_FILENAME, P_TABLE, l_rowCount, sysdate);
      UTL_FILE.FRENAME(P_DIR,
                       P_FILENAME,
                       P_DIR,
                       REPLACE(P_FILENAME,
                               '.csv',
                               '_' ||
                               TO_CHAR(SYSDATE, 'DD_MON_RRRR_HH24_MI_SS_AM') ||
                               '.csv'));
      commit;
   
    exception
      when l_error then
        L_RES := 'Either Invalid File or File Not Exists';
    end;
    RETURN L_RES;
  end CSV_AR_LOADER_FUNC;
 
----------------------------------------------------------------------------------------------------
Step # 4  
Execute Function and Enjoy !!

Query to Find Receipt Class and its GL Combinition Query

SELECT ARC.NAME ReceiptClass,        ARC.CREATION_METHOD_CODE Creation_Mehthod,        DECODE (ARC.REMIT_METHOD_CODE,             ...