Monday, February 25, 2013

AR transaction is inputted using functional currency USD but converted to IDR

Check this site

Download fix_trx_acctd_amt_func_ccy_posted_p_bki.sql from the SR.

1) This script will undo / reverse the wrong entries passed to XLA and GL and correct the data in AR:
Run the script with parameter:

&enter_user_id = ==> get the user_id for user ADMIN

select user_id from fnd_user
where user_name='ADMIN';

&responsibility_id = 50558

org_id = 82
gl_start_date = 01-JAN-2013
gl_end_date = 31-JAN-2013
gl_date = gl date in a current open period - eg 12-FEB-2013

customer_trx_id = 271844

read_only_mode= N

commit;

2) Run the 'Transfer Journal Entries to GL' concurrent program with the following parameters to get the undo accounting for the reversal transferred to GL
.
Ledger : enter your ledger
Process Category : Manual
End Date : ==> enter the gl date you passed in (1) for GL date eg. 12-FEB-2013

3) Run online accounting for the invoice 010/PS-SAI/I/13 to get it re-accounted with the correct values into the current open period passed as gl date during (1).


Code in sql:





/*============================================================================+
$Header$
============================================================================+*/
REM +================================================================================+
REM | # Bug No : 9650290                                                            |
REM |                                                                               |
REM | # RCA Bug :                                                                   |
REM |                                                                               |
REM | # Issue : The transactions got wrongly posted to GL.                          |
REM |                                                                               |
REM | # Symptoms :  a) Checked out the data for the distributions and found that    |
REM |               theacctd_amount is not equal to amount and the data is posted   |
REM |               to                                                              |
REM |               GL.                                                             |
REM |   fix_trx_acctd_amt_func_ccy_posted_p_bki.sql                                 |
REM | # Fix Approach :  a) Undo accounting has to be                                |
REM |                   done.b) The acctd_amount has to be corrected                |
REM |                   .c) The data has to be reposted to GL.                      |
REM |                                                                               |
REM | # Usage : Customer                                                            |
REM |                                                                               |
REM | # Category : Transactions                                                     |
REM | # based on fix_acctd_amt_func_ccy_posted_p.sql but with update on paymentschedule                                                                              |
REM *================================================================================*/

set serveroutput on size 1000000;
set verify off
set lines 500
set echo off
spool fix_acctd_amt_func_ccy_posted.out


declare

l_user_id           NUMBER := &enter_user_id;
l_responsibility_id NUMBER := &responsibility_id;
l_org_id      number := &org_id; 
l_gl_start_date    date   := to_date('&gl_start_date','DD-MM-YYYY');
l_gl_end_date    date   := to_date('&gl_end_date','DD-MM-YYYY');
l_gl_date       DATE := TO_DATE('&gl_date','DD-MON-YYYY');
l_customer_trx_id  number := &customer_trx_id;
l_read_only_mode   varchar2(1) := '&read_only_mode'||'';
l_bug_number     number := 9650290 ;

 p_api_version              NUMBER;
 p_event_id                 NUMBER;
 p_init_msg_list           VARCHAR2(300);
 p_application_id          INTEGER;
 p_reversal_method         VARCHAR2(300);
 p_gl_date                 DATE;
 p_post_to_gl_flag     VARCHAR2(300);
 x_return_status       VARCHAR2(300);
 x_msg_count           NUMBER;
 x_msg_data            VARCHAR2(4000);
 x_rev_ae_header_id    INTEGER;
 x_rev_event_id        INTEGER;
 x_rev_entity_id       INTEGER;
 x_new_event_id        INTEGER;
 x_new_entity_id       INTEGER;


cursor c_transactions is 
select distinct gld.customer_trx_id customer_trx_id , gld.gl_Date,
gld.event_id event_id ,xah.gl_transfer_status_code 
from ra_cust_trx_line_gl_dist  gld,ra_customer_trx  ct, gl_ledgers gl,
xla_events xe , xla_ae_headers xah 
where gld.customer_trx_id = ct.customer_trx_id
and gld.customer_trx_id = decode(l_customer_Trx_id,0,gld.customer_trx_id,l_customer_trx_id)
and gld.gl_date between l_gl_start_date and l_gl_end_date
and ct.set_of_books_id = gl.ledger_id
and ct.invoice_currency_code = gl.currency_code
and ct.exchange_rate is  not  null
and gld.account_set_flag = 'N'
and gld.event_id = xe.event_id 
and gld.posting_control_id <> -3
and gld.amount <> gld.acctd_amount
and xe.event_id = xah.event_id
and xe.application_id = xah.application_id 
and xe.application_id = 222 ;



PROCEDURE backup_table_gldist is
l_create_bk_gld varchar2(500);
BEGIN
l_create_bk_gld := 'create table temp_gld_bk_'||l_bug_number||'  as
                      select * from ra_cust_trx_line_gl_dist_all
                      where 1=2';
EXECUTE IMMEDIATE l_create_bk_gld;
EXCEPTION
When others then
  IF sqlcode = -955 then
  null;
  ELSE
   raise;
  END IF;
END backup_table_gldist;


PROCEDURE backup_table_xla is
l_create_bk_xla varchar2(500);
BEGIN
l_create_bk_xla := 'create table temp_xla_bk_'||l_bug_number||'  as
                      select * from xla_events
                      where 1=2';
EXECUTE IMMEDIATE l_create_bk_xla;
EXCEPTION
When others then
  IF sqlcode = -955 then
  null;
  ELSE
   raise;
  END IF;
END backup_table_xla ;


PROCEDURE insert_into_backup_gldist(p_trx_id number) IS
l_insert_gldist  varchar2(500);
BEGIN
l_insert_gldist := 'insert into temp_gld_bk_'||l_bug_number||
                '( select * from ra_cust_trx_line_gl_dist_all
                   where customer_trx_id = '||p_trx_id||')';
EXECUTE IMMEDIATE l_insert_gldist;
END;


PROCEDURE insert_into_backup_xla(p_ev_id number) IS
l_insert_xla  varchar2(500);
BEGIN
l_insert_xla := 'insert into temp_xla_bk_'||l_bug_number||
                '( select * from xla_events
                   where event_id  = '||p_ev_id||')';
EXECUTE IMMEDIATE l_insert_xla ;

END insert_into_backup_xla;


PROCEDURE debug(s varchar2) is 
BEGIN
  dbms_output.put_line(s);
END;


FUNCTION print_spaces(n IN number) RETURN Varchar2 IS
   l_return_string varchar2(100);
BEGIN
   SELECT substr('                                                   ',1,n)
   INTO l_return_String
   FROM dual;
   RETURN(l_return_String);
End;




begin

    FND_GLOBAL.APPS_INITIALIZE(l_user_id, l_responsibility_id,222);
    mo_global.init('AR');
    mo_global.set_policy_context('S',l_org_id);


If  nvl(upper(l_read_only_mode),'Y') = 'N' then
backup_table_gldist;
backup_table_xla ;
End If;


debug('CTX_ID         Event_Id        ');
debug('-------------- ------------------');


for rec in c_transactions loop


Debug(rec.customer_trx_id||'             '||rec.Event_Id) ;
    
If  nvl(upper(l_read_only_mode),'Y') = 'N' then
insert_into_backup_gldist(rec.customer_trx_id);
insert_into_backup_xla(rec.event_id);

         p_api_version        := 1.0;
 p_init_msg_list      := FND_API.G_TRUE; 
 p_application_id     := 222;
 p_event_id           := rec.event_id ;  -- event that needs to be reversed.
 p_reversal_method    := 'SIDE';
 p_post_to_gl_flag    := 'N';
 p_gl_date            := trunc(l_gl_date);
 x_return_status      := null; 

 dbms_output.put_line('event_id -'||p_event_id);

 If nvl(rec.gl_transfer_status_code,'N') = 'N' then
xla_datafixes_pub.delete_journal_entries
( p_api_version
, p_init_msg_list
, p_application_id
, p_event_id
, x_return_status
, x_msg_count
, x_msg_data);
 else
 xla_datafixes_pub.reverse_journal_entries
 (p_api_version,
  p_init_msg_list,
  p_application_id,
  p_event_id,
  p_reversal_method,
  p_gl_date,
  p_post_to_gl_flag,
  x_return_status,
  x_msg_count,
  x_msg_data,
  x_rev_ae_header_id,
  x_rev_event_id,
  x_rev_entity_id,
  x_new_event_id,
  x_new_entity_id       
  );
 end if; 

 dbms_output.put_line('status -' ||x_return_status);
 dbms_output.put_line('x_rev_ae_header_id -' ||x_rev_ae_header_id);
 dbms_output.put_line('x_rev_event_id -' ||x_rev_event_id);       -- this is E2
 dbms_output.put_line('x_new_event_id  -' ||x_new_event_id );  -- this is E3
 dbms_output.put_line('x_new_entity_id -' ||x_new_entity_id);
 dbms_output.put_line('x_msg_data  -' ||x_msg_data );


If x_return_status = 'S' then

Debug('Updating the AR Tables for customer_trx_id '||rec.customer_trx_id);

arp_global.g_allow_datafix := TRUE; 

update ra_cust_trx_line_gl_dist set posting_control_id  = -3 , gl_posted_date = null
      ,acctd_amount = amount ,gl_date = l_gl_date
where customer_trx_id = rec.customer_trx_id 
and account_set_flag = 'N'
and event_id = rec.event_id
and posting_control_id <> -3;
update ar_receivable_applications set posting_control_id  = -3 , gl_posted_date = null,
      gl_date = l_gl_date
where customer_trx_id = rec.customer_trx_id 
and event_id = rec.event_id
and posting_control_id <> -3;
update xla_events set event_Date = l_gl_date 
where event_id = rec.event_id 
and event_status_code = 'U' ;

      update ar_receivable_applications set acctd_amount_applied_to = amount_applied,
      acctd_amount_applied_from = amount_applied ,gl_date = l_gl_date 
      where applied_customer_trx_id = rec.customer_trx_id 
      and posting_control_id = -3
      and application_type = 'CM';

      update ar_receivable_applications set acctd_amount_applied_to = amount_applied,
      acctd_amount_applied_from = amount_applied ,gl_Date = l_gl_date 
      where customer_trx_id = rec.customer_trx_id 
      and posting_control_id = -3
      and application_type = 'CM';
update ra_customer_trx set exchange_rate_type = null , exchange_date = null,
exchange_rate = null where customer_trx_id = rec.customer_trx_id ; 
update ar_payment_schedules set exchange_rate_type = null , exchange_date = null,
exchange_rate = null ,gl_date = l_gl_date ,
                acctd_amount_due_remaining=amount_due_remaining
                 where customer_trx_id = rec.customer_trx_id ; 

arp_global.g_allow_datafix := FALSE; 

Debug('Updated the AR Tables for customer_trx_id '||rec.customer_trx_id);

End If ;
End If;
    


end loop;

EXCEPTION
When others then
rollback; 
raise;


end;

/

No comments:

Post a Comment