标签归档:资产

Oracle EBS R12.2.6系统资产模块折旧账务未传总账问题处理

背景:

某客户在10月8号运行9月折旧后,创建会计发现请求报黄(但是能把9月的折旧数据正常传过去),于是看创建会计科目输出报表(或者看资产模块“子分类帐期间关闭例外报表”),可以发现里面有大量7月31号的数据,都是很明确的提示如下所示内容,无效期间:

原因探索:

此类问题原因很多,本人遇到过以下几种情况,以频率排序:
1、资产传总账时未正常传至GL模块(总账期间正常打开,此种情况可根据例外报表的提示处理,再次传总账即可);

2、资产传总账时未正常传至GL模块(总账期间关闭);

3、交叉验证规则导致生成账务问题(这种情况很少,一般在新机构建立时可能有)。

具体到本次问题,经过追溯,发现用户在7月31号晚上5点03分提交了运行折旧的请求,但是在请求未完成时,立即提交了创建会计科目到总账模块(默认会将资产相关账务处理传总账)。导致7月新增资产数据科目和中转科目都正常到了总账模块(用户检查时检查了中转科目为0,未再做深入核实,8月折旧也出问题,用户未察觉)。

方案1:打开7月期间正常传至7月总账模块,由于用户反馈7、8月份报表已经出具(金融行业),不同意再开7月期间。

方案2:后台修复数据至当期(9月),具体执行命令不再赘述,见以下脚本(根据自身情况限制条件)

–1、备份三个表的问题数据(具体条件根据自身问题限制)
select t.*
from xla_ae_headers t
where 1 = 1
and to_char(t.accounting_date, ‘yyyy-mm-dd’) = ‘2019-07-31’
and t.gl_transfer_status_code = ‘N’;

select *
from xla_ae_lines t
where 1 = 1
and to_char(t.accounting_date, ‘yyyy-mm-dd’) = ‘2019-07-31’
and t.ae_header_id in
(select t.ae_header_id
from xla_ae_headers t
where 1 = 1
and to_char(t.accounting_date, ‘yyyy-mm-dd’) = ‘2019-07-31’
and t.gl_transfer_status_code = ‘N’);

select *
from xla.xla_events# t
where t.event_type_code = ‘DEPRECIATION’
and to_char(t.event_date, ‘yyyy-mm-dd’) = ‘2019-07-31’
order by t.transaction_date desc;

–2、更新三张表,按顺序以免后续无法关联,更新的时候最好看一下条数是否正确
update xla_ae_lines t
set t.accounting_date = to_date(‘2019-09-30’, ‘yyyy-mm-dd’)
where 1 = 1
and to_char(t.accounting_date, ‘yyyy-mm-dd’) = ‘2019-07-31’
and t.ae_header_id in
(select t.ae_header_id
from xla_ae_headers t
where 1 = 1
AND to_char(t.accounting_date, ‘yyyy-mm-dd’) = ‘2019-07-31’
and t.gl_transfer_status_code = ‘N’);

update xla_ae_headers t
set t.accounting_date = to_date(‘2019-09-30’, ‘yyyy-mm-dd’),
t.period_name = ‘2019-09’
where 1 = 1
and to_char(t.accounting_date, ‘yyyy-mm-dd’) = ‘2019-07-31’
and t.gl_transfer_status_code = ‘N’;

update xla_events t
set t.transaction_date = to_date(‘2019-09-30’, ‘yyyy-mm-dd’),
t.event_date = to_date(‘2019-09-30’, ‘yyyy-mm-dd’),
t.event_status_code = ‘P’,
t.process_status_code = ‘P’
where t.event_type_code = ‘DEPRECIATION’
and to_char(t.event_date, ‘yyyy-mm-dd’) = ‘2019-07-31′;

扩展:

LOOKUP_TYPE LANGUAGE LOOKUP_CODE MEANING DESCRIPTION
XLA_EVENT_PROCESS_STATUS US D Draft Draft
XLA_EVENT_PROCESS_STATUS US E Error Error
XLA_EVENT_PROCESS_STATUS US I Invalid Invalid
XLA_EVENT_PROCESS_STATUS US P Processed Processed
XLA_EVENT_PROCESS_STATUS US R Related Event In Error Related Event In Error
XLA_EVENT_PROCESS_STATUS US U Unprocessed Unprocessed

LOOKUP_TYPE LANGUAGE LOOKUP_CODE MEANING DESCRIPTION
XLA_EVENT_STATUS US I Incomplete Incomplete
XLA_EVENT_STATUS US N No Action No Action
XLA_EVENT_STATUS US P Processed Processed
XLA_EVENT_STATUS US U Unprocessed Unprocessed

SELECT * FROM APPS.FND_LOOKUP_VALUES WHERE LOOKUP_TYPE =’XLA_EVENT_PROCESS_STATUS’ ;

SELECT * FROM APPS.FND_LOOKUP_VALUES WHERE LOOKUP_TYPE =’XLA_EVENT_STATUS’ ;

日期无论改到哪天都会在期间的最后一天。

Oracle ebs资产调整 api例子

declare
  l_trans_rec                 FA_API_TYPES.trans_rec_type;
  l_asset_hdr_rec             FA_API_TYPES.asset_hdr_rec_type;
  l_asset_fin_rec_adj         FA_API_TYPES.asset_fin_rec_type;
  l_asset_fin_rec_new         FA_API_TYPES.asset_fin_rec_type;
  l_asset_fin_mrc_tbl_new     FA_API_TYPES.asset_fin_tbl_type;
  l_inv_trans_rec             FA_API_TYPES.inv_trans_rec_type;
  l_inv_tbl                   FA_API_TYPES.inv_tbl_type;
  l_inv_rate_tbl              FA_API_TYPES.inv_rate_tbl_type;
  l_asset_deprn_rec_adj       FA_API_TYPES.asset_deprn_rec_type;
  l_asset_deprn_rec_new       FA_API_TYPES.asset_deprn_rec_type;
  l_asset_deprn_mrc_tbl_new   FA_API_TYPES.asset_deprn_tbl_type;
  l_inv_rec                   FA_API_TYPES.inv_rec_type;
  l_group_reclass_options_rec FA_API_TYPES.group_reclass_options_rec_type;
  l_return_status             VARCHAR2(1);
  l_mesg_count                number := 0;
  l_mesg_len                  number;
  l_mesg                      varchar2(4000);
begin
  fnd_profile.put('PRINT_DEBUG', 'Y');
  dbms_output.enable(1000000);
  FA_SRVR_MSG.Init_Server_Message;
  FA_DEBUG_PKG.Initialize;
  — asset header info
  l_asset_hdr_rec.asset_id       := 100000206;
  l_asset_hdr_rec.book_type_code := 'FIN_FA_BOOK';
  — fin info
  l_asset_fin_rec_adj.cost := 1002;

  –需注意这个金额是在原基础上的增减值。
  FA_ADJUSTMENT_PUB.do_adjustment(p_api_version           => 1.0,
                                  p_init_msg_list         => FND_API.G_FALSE,
                                  p_commit                => FND_API.G_FALSE,
                                  p_validation_level      => FND_API.G_VALID_LEVEL_FULL,
                                  p_calling_fn            => 'ADJ_TEST_SCRIPT',
                                  x_return_status         => l_return_status,
                                  x_msg_count             => l_mesg_count,
                                  x_msg_data              => l_mesg,
                                  px_trans_rec            => l_trans_rec,
                                  px_asset_hdr_rec        => l_asset_hdr_rec,
                                  p_asset_fin_rec_adj     => l_asset_fin_rec_adj,
                                  x_asset_fin_rec_new     => l_asset_fin_rec_new,
                                  x_asset_fin_mrc_tbl_new => l_asset_fin_mrc_tbl_new,
                                  px_inv_trans_rec        => l_inv_trans_rec,
                                  px_inv_tbl              => l_inv_tbl,
                                  –px_inv_rate_tbl             => l_inv_rate_tbl,
                                  p_asset_deprn_rec_adj       => l_asset_deprn_rec_adj,
                                  x_asset_deprn_rec_new       => l_asset_deprn_rec_new,
                                  x_asset_deprn_mrc_tbl_new   => l_asset_deprn_mrc_tbl_new,
                                  p_group_reclass_options_rec => l_group_reclass_options_rec);
  dbms_output.put_line(l_return_status);
  if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
    fa_debug_pkg.dump_debug_messages(max_mesgs => 0);
    l_mesg_count := fnd_msg_pub.count_msg;
    if l_mesg_count > 0 then
      l_mesg := substr(fnd_msg_pub.get(fnd_msg_pub.G_FIRST, fnd_api.G_FALSE),
                       1,
                       512);
      dbms_output.put_line(substr(l_mesg, 1, 255));
      for i in 1 .. l_mesg_count – 1 loop
        l_mesg := substr(fnd_msg_pub.get(fnd_msg_pub.G_NEXT,
                                         fnd_api.G_FALSE),
                         1,
                         512);
        dbms_output.put_line(substr(l_mesg, 1, 255));
      end loop;
      fnd_msg_pub.delete_msg();
    end if;
  else
    dbms_output.put_line('SUCCESS');
    dbms_output.put_line('THID' ||
                         to_char(l_trans_rec.transaction_header_id));
  end if;
end;
/
参考文件:Oracle Assets Adjustments API Documentation Supplement (文档 ID 206474.1)