充分利用EBS自带的账龄表配置信息,这样后面账龄配置发生改动的时候不要动业务代码,只需要改动前端账龄表配置即可。
整体思路,先将当前日期 减去 业务单据上的日期(总账日期或者业务日期)得到一个值,past_days 这里要考虑到值为负数的情况,如要看期间是6.30,但是业务单据日期是7.4号,past_days为-4。这个负数要看做0。
然后以账龄表配置为准,进行循环,如应付模块账龄表实例代码:
--AP 账龄表sql提取配置示例
SELECT /*lines.days_start*/
decode(lines.days_start, 0, -999999, lines.days_start) days_start, --将0改为-999999 来避免因发票日期晚于gl日期导致负数出现
lines.days_to,
lines.period_sequence_num,
report_heading1,
report_heading2
FROM ap_aging_period_lines lines,
ap_aging_periods periods
WHERE lines.aging_period_id = periods.aging_period_id
AND periods.aging_period_id = 10000
AND periods.status = 'A'
ORDER BY lines.period_sequence_num
展示效果如下
--应付模块账龄表流程
begin
for ap_age in (SELECT /*lines.days_start*/
decode(lines.days_start, 0, -999999, lines.days_start) days_start, --将0改为-999999 来避免因发票日期晚于gl日期导致负数出现
lines.days_to,
lines.period_sequence_num,
report_heading1,
report_heading2
FROM ap_aging_period_lines lines,
ap_aging_periods periods
WHERE lines.aging_period_id = periods.aging_period_id
AND periods.aging_period_id = 10000
AND periods.status = 'A'
ORDER BY lines.period_sequence_num)
loop
SELECT SUM(t.balance)
INTO v_aging_balance
FROM cux_ap_pre_aging_temp t --业务单据汇总临时表
WHERE t.past_days BETWEEN ap_age.days_start AND ap_age.days_to;
print_f('<td class=xl8218914>' || to_char(v_aging_balance) || '</td>');
end loop;
end;
应收模块类似,应收模块取账龄表配置sql如下:
select h.bucket_name,
h.description,
l.DAYS_START,
l.DAYS_TO,
l.REPORT_HEADING1
from ar_aging_buckets h, ar_aging_bucket_lines l
where h.aging_bucket_id = l.AGING_BUCKET_ID
and h.bucket_name = '十四时段帐龄'
order by l.BUCKET_SEQUENCE_NUM