[Home] [Help]
PACKAGE BODY: APPS.XLA_MULTIPERIOD_ACCOUNTING_PKG
Source
1 PACKAGE BODY xla_multiperiod_accounting_pkg AS
2 -- $Header: xlampaac.pkb 120.14.12020000.2 2012/07/23 07:00:39 vgopiset ship $
3 /*===========================================================================+
4 | Copyright (c) 2005 Oracle Corporation |
5 | Redwood Shores, CA, USA |
6 | All rights reserved. |
7 +============================================================================+
8 | PACKAGE NAME |
9 | xla_multiperiod_accounting_pkg |
10 | |
11 | DESCRIPTION |
12 | This package contains the APIs related to the Complete Multiperiod |
13 | Accounting Program. |
14 | |
15 | HISTORY |
16 | 05/23/2005 eklau Created |
17 | 02/15/2006 awan 5039413 performance fix |
18 | 03/29/2006 awan 5115223 cannot complete MPA |
19 | 18/01/2012 sragadde 13258048 nodata end in success |
20 +===========================================================================*/
21
22 -------------------------------------------------------------------------------
23 -- *********** Local Exceptions ************
24 -------------------------------------------------------------------------------
25
26 normal_termination EXCEPTION;
27 resource_busy EXCEPTION;
28 PRAGMA EXCEPTION_INIT(resource_busy, -54);
29
30 --=============================================================================
31 -- *********** Local Trace Routine **********
32 --=============================================================================
33
34 C_LEVEL_STATEMENT CONSTANT NUMBER := FND_LOG.LEVEL_STATEMENT;
35 C_LEVEL_PROCEDURE CONSTANT NUMBER := FND_LOG.LEVEL_PROCEDURE;
36 C_LEVEL_EVENT CONSTANT NUMBER := FND_LOG.LEVEL_EVENT;
37 C_LEVEL_EXCEPTION CONSTANT NUMBER := FND_LOG.LEVEL_EXCEPTION;
38 C_LEVEL_ERROR CONSTANT NUMBER := FND_LOG.LEVEL_ERROR;
39 C_LEVEL_UNEXPECTED CONSTANT NUMBER := FND_LOG.LEVEL_UNEXPECTED;
40
41 C_LEVEL_LOG_DISABLED CONSTANT NUMBER := 99;
42 C_DEFAULT_MODULE CONSTANT VARCHAR2(240) := 'xla.plsql.xla_multiperiod_accounting_pkg';
43
44 g_log_level NUMBER;
45 g_log_enabled BOOLEAN;
46
47 --Constants for bug13258048
48 C_YES CONSTANT VARCHAR2(1) := 'Y';
49 C_NO CONSTANT VARCHAR2(1) := 'N';
50 -- Parameters
51
52 g_application_id PLS_INTEGER;
53 g_ledger_id PLS_INTEGER;
54 g_process_category_code VARCHAR2(30);
55 g_end_date DATE;
56 g_errors_only_flag VARCHAR2(1);
57 g_transfer_to_gl_flag VARCHAR2(1);
58 g_post_in_gl_flag VARCHAR2(1);
59 g_gl_batch_name VARCHAR2(50);
60 g_valuation_method_code VARCHAR2(30);
61 g_security_id_int_1 PLS_INTEGER;
62 g_security_id_int_2 PLS_INTEGER;
63 g_security_id_int_3 PLS_INTEGER;
64 g_security_id_char_1 VARCHAR2(30);
65 g_security_id_char_2 VARCHAR2(30);
66 g_security_id_char_3 VARCHAR2(30);
67
68 g_request_id NUMBER;
69 g_accounting_batch_id NUMBER;
70 g_total_error_count NUMBER;
71 g_total_error_count_main NUMBER;
72 g_security_condition VARCHAR2(2000);
73 g_process_category_condition VARCHAR2(2000);
74
75 g_array_ae_header_id xla_je_validation_pkg.t_array_int; -- 5115223
76
77 g_nodata_flag VARCHAR2(1) ;--bug13258048
78
79 --========================================================
80 -- Forward declarion of private procedures and functions
81 --========================================================
82
83 PROCEDURE Initialize
84 (p_application_id IN NUMBER
85 ,p_ledger_id IN NUMBER
86 ,p_process_category_code IN VARCHAR2
87 ,p_end_date IN DATE
88 ,p_errors_only_flag IN VARCHAR2
89 ,p_transfer_to_gl_flag IN VARCHAR2
90 ,p_post_in_gl_flag IN VARCHAR2
91 ,p_gl_batch_name IN VARCHAR2
92 ,p_valuation_method_code IN VARCHAR2
93 ,p_security_id_int_1 IN NUMBER
94 ,p_security_id_int_2 IN NUMBER
95 ,p_security_id_int_3 IN NUMBER
96 ,p_security_id_char_1 IN VARCHAR2
97 ,p_security_id_char_2 IN VARCHAR2
98 ,p_security_id_char_3 IN VARCHAR2);
99
100 PROCEDURE Populate_Journal_Entries;
101
102 PROCEDURE Update_Journal_Entries;
103
104 PROCEDURE Populate_Sequences;
105
106 PROCEDURE Transfer_To_GL;
107
108 --===========================================================================
109 -- Local trace routine.
110 --===========================================================================
111
112 PROCEDURE trace
113 (p_msg IN VARCHAR2
114 ,p_level IN NUMBER
115 ,p_module IN VARCHAR2 DEFAULT C_DEFAULT_MODULE) IS
116 BEGIN
117 IF (p_msg IS NULL AND p_level >= g_log_level) THEN
118 fnd_log.message(p_level, p_module);
119 ELSIF p_level >= g_log_level THEN
120 fnd_log.string(p_level, p_module, p_msg);
121 END IF;
122
123 EXCEPTION
124 WHEN xla_exceptions_pkg.application_exception THEN
125 RAISE;
126 WHEN OTHERS THEN
127 xla_exceptions_pkg.raise_message
128 (p_location => 'xla_multiperiod_accounting_pkg.trace');
129 END trace;
130
131
132 --=============================================================================
133 -- ******* Print Log File **********
134 --=============================================================================
135 PROCEDURE print_logfile(p_msg IN VARCHAR2) IS
136 BEGIN
137
138 fnd_file.put_line(fnd_file.log,p_msg);
139
140 EXCEPTION
141 WHEN xla_exceptions_pkg.application_exception THEN
142 RAISE;
143 WHEN OTHERS THEN
144 xla_exceptions_pkg.raise_message
145 (p_location => 'xla_multiperiod_accounting_pkg.print_logfile');
146 END print_logfile;
147
148
149 --============================================================================
150 --
151 -- Public API which completes incomplete recognition journal entries and
152 -- accrual reversal journal entries.
153 --
154 --============================================================================
155
156 PROCEDURE Complete_Journal_Entries
157 (p_application_id IN NUMBER
158 ,p_ledger_id IN NUMBER
159 ,p_process_category_code IN VARCHAR2
160 ,p_end_date IN DATE
161 ,p_errors_only_flag IN VARCHAR2
162 ,p_transfer_to_gl_flag IN VARCHAR2
163 ,p_post_in_gl_flag IN VARCHAR2
164 ,p_gl_batch_name IN VARCHAR2
165 ,p_valuation_method_code IN VARCHAR2
166 ,p_security_id_int_1 IN NUMBER
167 ,p_security_id_int_2 IN NUMBER
168 ,p_security_id_int_3 IN NUMBER
169 ,p_security_id_char_1 IN VARCHAR2
170 ,p_security_id_char_2 IN VARCHAR2
171 ,p_security_id_char_3 IN VARCHAR2
172 ,p_accounting_batch_id OUT NOCOPY NUMBER
173 ,p_errbuf OUT NOCOPY VARCHAR2
174 ,p_retcode OUT NOCOPY NUMBER) IS
175
176 l_log_module VARCHAR2(240);
177 l_validation NUMBER := 0;
178 l_ret_flag_bal_reversal BOOLEAN := FALSE;
179
180 BEGIN
181
182 IF g_log_enabled THEN
183 l_log_module := C_DEFAULT_MODULE||'.Complete_Journal_Entries';
184 END IF;
185
186 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
187 trace
188 (p_msg => 'BEGIN procedure COMPLETE_JOURNAL_ENTRIES'
189 ,p_level => C_LEVEL_PROCEDURE
190 ,p_module => l_log_module);
191
192 trace
193 (p_msg => 'p_application_id = '||p_application_id
194 ,p_level => C_LEVEL_PROCEDURE
195 ,p_module => l_log_module);
196
197 trace
198 (p_msg => 'p_ledger_id = '||p_ledger_id
199 ,p_level => C_LEVEL_PROCEDURE
200 ,p_module => l_log_module);
201
202 trace
203 (p_msg => 'p_process_category_code = '||p_process_category_code
204 ,p_level => C_LEVEL_PROCEDURE
205 ,p_module => l_log_module);
206
207 trace
208 (p_msg => 'p_end_date = '||to_char(p_end_date,'DD-MON-YYYY')
209 ,p_level => C_LEVEL_PROCEDURE
210 ,p_module => l_log_module);
211
212 trace
213 (p_msg => 'p_errors_only_flag = '||p_errors_only_flag
214 ,p_level => C_LEVEL_PROCEDURE
215 ,p_module => l_log_module);
216
217 trace
218 (p_msg => 'p_transfer_to_gl_flag = '||p_transfer_to_gl_flag
219 ,p_level => C_LEVEL_PROCEDURE
220 ,p_module => l_log_module);
221
222 trace
223 (p_msg => 'p_post_in_gl_flag = '||p_post_in_gl_flag
224 ,p_level => C_LEVEL_PROCEDURE
225 ,p_module => l_log_module);
226
227 trace
228 (p_msg => 'p_gl_batch_name = '||p_gl_batch_name
229 ,p_level => C_LEVEL_PROCEDURE
230 ,p_module => l_log_module);
231
232 trace
233 (p_msg => 'p_valuation_method_code = '||p_valuation_method_code
234 ,p_level => C_LEVEL_PROCEDURE
235 ,p_module => l_log_module);
236
237 trace
238 (p_msg => 'p_security_id_int_1 = '||p_security_id_int_1
239 ,p_level => C_LEVEL_PROCEDURE
240 ,p_module => l_log_module);
241
242 trace
243 (p_msg => 'p_security_id_int_1 = '||p_security_id_int_1
244 ,p_level => C_LEVEL_PROCEDURE
245 ,p_module => l_log_module);
246
247 trace
248 (p_msg => 'p_security_id_int_3 = '||p_security_id_int_3
249 ,p_level => C_LEVEL_PROCEDURE
250 ,p_module => l_log_module);
251
252 trace
253 (p_msg => 'p_security_id_char_1 = '||p_security_id_char_1
254 ,p_level => C_LEVEL_PROCEDURE
255 ,p_module => l_log_module);
256
257 trace
258 (p_msg => 'p_security_id_char_2 = '||p_security_id_char_2
259 ,p_level => C_LEVEL_PROCEDURE
260 ,p_module => l_log_module);
261
262 trace
263 (p_msg => 'p_security_id_char_3 = '||p_security_id_char_3
264 ,p_level => C_LEVEL_PROCEDURE
265 ,p_module => l_log_module);
266
267 END IF;
268
269 Initialize
270 (p_application_id => p_application_id
271 ,p_ledger_id => p_ledger_id
272 ,p_process_category_code => p_process_category_code
273 ,p_end_date => p_end_date
274 ,p_errors_only_flag => p_errors_only_flag
275 ,p_transfer_to_gl_flag => p_transfer_to_gl_flag
276 ,p_post_in_gl_flag => p_post_in_gl_flag
277 ,p_gl_batch_name => p_gl_batch_name
278 ,p_valuation_method_code => p_valuation_method_code
279 ,p_security_id_int_1 => p_security_id_int_1
280 ,p_security_id_int_2 => p_security_id_int_2
281 ,p_security_id_int_3 => p_security_id_int_3
282 ,p_security_id_char_1 => p_security_id_char_1
283 ,p_security_id_char_2 => p_security_id_char_2
284 ,p_security_id_char_3 => p_security_id_char_3);
285
286 g_nodata_flag := C_NO; --bug13258048
287 -- Populate xla_ae_headers_gt table for processing.
288
289 Populate_Journal_Entries;
290
291 --To check if any events to process are present.bug13258048
292 IF(g_nodata_flag <> C_YES) THEN
293
294 -- Invoke API to validate and balance journal entries by balancing segments.
295
296 IF (C_LEVEL_EVENT >= g_log_level) THEN
297 trace
298 (p_msg => 'Calling the function XLA_JE_VALIDATION_PKG.BALANCE_AMOUNTS'
299 ,p_level => C_LEVEL_EVENT
300 ,p_module => l_log_module);
301 END IF;
302
303 xla_accounting_cache_pkg.load_application_ledgers
304 (p_application_id => g_application_id
305 ,p_event_ledger_id => g_ledger_id);
306
307 l_validation := XLA_JE_VALIDATION_PKG.Balance_Amounts
308 (p_application_id => g_application_id
309 ,p_ledger_id => g_ledger_id
310 ,p_mode => 'COMPLETE_MPA'
311 ,p_end_date => g_end_date
312 ,p_budgetary_control_mode => 'NONE'
313 ,p_accounting_mode => 'F');
314
315 If (l_validation = 1) then
316
317 -- Error encountered in validation and balancing program.
318
319 IF (C_LEVEL_EVENT >= g_log_level) THEN
320 trace
321 (p_msg => 'Error encountered in the XLA_JE_VALIDATION_PKG.Balance_Amounts function.'
322 ,p_level => C_LEVEL_EVENT
323 ,p_module => l_log_module);
324 END IF;
325 Else
326 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
327 trace
328 (p_msg => 'Routine XLA_JE_VALIDATION_PKG.Balance_Amounts executed.'
329 ,p_level => C_LEVEL_STATEMENT
330 ,p_module => l_log_module);
331 END IF;
332 End If;
333
334 -- Invoke API to balance control account balances and analytical criterion balances.
335
336 IF (C_LEVEL_EVENT >= g_log_level) THEN
337 trace
338 (p_msg => 'Calling the function XLA_BALANCES_PKG.MASSIVE_UPDATE'
339 ,p_level => C_LEVEL_EVENT
340 ,p_module => l_log_module);
341 END IF;
342
343 l_ret_flag_bal_reversal :=
344 XLA_BALANCES_PKG.Massive_Update
345 (p_application_id => g_application_id
346 ,p_ledger_id => NULL
347 ,p_entity_id => NULL
348 ,p_event_id => NULL
349 ,p_request_id => NULL
350 ,p_accounting_batch_id => g_accounting_batch_id
351 ,p_update_mode => 'A'
352 ,p_execution_mode => 'O');
353
354 IF NOT l_ret_flag_bal_reversal THEN
355
356 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
357 trace
358 (p_msg => 'Error encountered in the function XLA_BALANCES_PKG.Massive_Update '
359 ,p_level => C_LEVEL_STATEMENT
360 ,p_module => l_log_module);
361 END IF;
362
363 xla_accounting_err_pkg.build_message
364 (p_appli_s_name => 'XLA'
365 ,p_msg_name => 'XLA_AP_TECHNICAL_ERROR'
366 ,p_token_1 => 'APPLICATION_NAME'
367 ,p_value_1 => 'SLA'
368 ,p_entity_id => NULL
369 ,p_event_id => NULL);
370
371 print_logfile('Technical problem : Problem in the routine XLA_BALANCES_PKG.Massive_Update');
372
373 xla_exceptions_pkg.raise_message
374 (p_appli_s_name => 'XLA'
375 ,p_msg_name => 'XLA_COMMON_ERROR'
376 ,p_token_1 => 'LOCATION'
377 ,p_value_1 => 'xla_multiperiod_accounting_pkg.complete_journal_entries'
378 ,p_token_2 => 'ERROR'
379 ,p_value_2 => 'Technical problem : Problem in the routine XLA_BALANCES_PKG.Massive_Update');
380 ELSE
381
382 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
383 trace
384 (p_msg => 'Call to function XLA_BALANCES_PKG.Massive_Update completed.'
385 ,p_level => C_LEVEL_STATEMENT
386 ,p_module => l_log_module);
387 END IF;
388 print_logfile('- call to XLA_BALANCES_PKG.Massive_Update completed');
389 END IF;
390
391 -- Update journal entry status.
392
393 Update_journal_Entries;
394
395 -- Track number of errors encountered during XLA routines.
396
397 g_total_error_count_main := xla_accounting_err_pkg.g_error_count;
398
399 -- Populate document sequence.
400
401 Populate_Sequences;
402
403 -- Transfer to GL.
404
405 If (g_transfer_to_gl_flag = 'Y') then
406 Transfer_To_Gl;
407 End If;
408
409 END IF;
410
411 ----------------------------------------------------------------------------
412 -- insert any errors that were build in this session (for them to appear
413 -- on the report).
414 ----------------------------------------------------------------------------
415 g_total_error_count := xla_accounting_err_pkg.g_error_count;
416
417 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
418 trace
419 (p_msg => 'g_total_error_count = '||g_total_error_count
420 ,p_level => C_LEVEL_STATEMENT
421 ,p_module => l_log_module);
422 END IF;
423
424 --
425 -- If errors were encountered during sequencing and/or transfer to GL
426 -- then rollback to allow reprocessing of JE headers. Otherwise, it
427 -- will be possible to have "completed" entries without the proper
428 -- sequencing data and/or properly transferred to GL.
429 --
430
431 If (g_total_error_count > g_total_error_count_main) then
432 rollback;
433 End If;
434
435 xla_accounting_err_pkg.insert_errors;
436 COMMIT;
437
438 ----------------------------------------------------------------------------
439 -- set return variables
440 ----------------------------------------------------------------------------
441
442 p_accounting_batch_id := g_accounting_batch_id;
443
444 IF g_total_error_count = 0 THEN
445 p_retcode := 0;
446 p_errbuf := 'Complete Multiperiod Accounting Program completed Normal';
447 ELSE
448 IF g_total_error_count = 1 and g_nodata_flag ='Y' THEN --bug13258048
449 p_retcode := 0;
450 p_errbuf := 'Complete Multiperiod Accounting Program completed Normal with no events to process';
451 ELSE
452 p_retcode := 1;
453 p_errbuf := 'Complete Multiperiod Accounting Program completed Normal with some entries in error';
454 END IF;
455 END IF;
456
457 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
458 trace
459 (p_msg => 'END of procedure COMPLETE_JOURNAL_ENTRIES'
460 ,p_level => C_LEVEL_PROCEDURE
461 ,p_module => l_log_module);
462 END IF;
463
464
465 EXCEPTION
466 WHEN xla_exceptions_pkg.application_exception THEN
467
468 ----------------------------------------------------------------------------
469 -- set out variables
470 ----------------------------------------------------------------------------
471 p_accounting_batch_id := g_accounting_batch_id;
472 p_retcode := 2;
473 p_errbuf := xla_messages_pkg.get_message;
474
475 print_logfile(p_errbuf);
476
477 IF (C_LEVEL_ERROR >= g_log_level) THEN
478 trace
479 (p_msg => NULL
480 ,p_level => C_LEVEL_ERROR
481 ,p_module => l_log_module);
482 END IF;
483
484 ----------------------------------------------------------------------------
485 -- insert any errors that were build in this session (for them to appear
486 -- on the report).
487 ----------------------------------------------------------------------------
488 rollback;
489
490 xla_accounting_err_pkg.insert_errors;
491 COMMIT;
492
493 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
494 trace
495 (p_msg => 'p_retcode = '||p_retcode
496 ,p_level => C_LEVEL_PROCEDURE
497 ,p_module => l_log_module);
498 trace
499 (p_msg => 'p_errbuf = '||p_errbuf
500 ,p_level => C_LEVEL_PROCEDURE
501 ,p_module => l_log_module);
502 trace
503 (p_msg => 'END of procedure COMPLETE_JOURNAL_ENTRIES'
504 ,p_level => C_LEVEL_PROCEDURE
505 ,p_module => l_log_module);
506 END IF;
507
508 WHEN OTHERS THEN
509 xla_accounting_err_pkg.build_message
510 (p_appli_s_name => 'XLA'
511 ,p_msg_name => 'XLA_AP_TECHNICAL_ERROR'
512 ,p_token_1 => 'XLA_MULTIPERIOD_ACCOUNTING_PKG.Complete_Journal_Entries'
513 ,p_value_1 => 'SLA'
514 ,p_entity_id => NULL
515 ,p_event_id => NULL);
516
517 rollback;
518
519 xla_accounting_err_pkg.insert_errors;
520 COMMIT;
521
522 xla_exceptions_pkg.raise_message
523 (p_location => 'xla_multiperiod_accounting_pkg.complete_journal_entries');
524
525 END complete_journal_entries; -- end of procedure
526
527
528 --============================================================================
529 --
530 -- Private API which initializes the complete multiperiod accounting program.
531 --
532 --============================================================================
533
534 PROCEDURE Initialize
535 (p_application_id IN NUMBER
536 ,p_ledger_id IN NUMBER
537 ,p_process_category_code IN VARCHAR2
538 ,p_end_date IN DATE
539 ,p_errors_only_flag IN VARCHAR2
540 ,p_transfer_to_gl_flag IN VARCHAR2
541 ,p_post_in_gl_flag IN VARCHAR2
542 ,p_gl_batch_name IN VARCHAR2
543 ,p_valuation_method_code IN VARCHAR2
544 ,p_security_id_int_1 IN NUMBER
545 ,p_security_id_int_2 IN NUMBER
546 ,p_security_id_int_3 IN NUMBER
547 ,p_security_id_char_1 IN VARCHAR2
548 ,p_security_id_char_2 IN VARCHAR2
549 ,p_security_id_char_3 IN VARCHAR2)
550 IS
551 l_log_module VARCHAR2(240);
552 BEGIN
553 IF g_log_enabled THEN
554 l_log_module := C_DEFAULT_MODULE||'.Initialize';
555 END IF;
556
557 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
558 trace
559 (p_msg => 'BEGIN procedure INITIALIZE'
560 ,p_level => C_LEVEL_PROCEDURE
561 ,p_module => l_log_module);
562 END IF;
563
564
565 -- Initialize global params.
566
567 g_application_id := p_application_id;
568 g_ledger_id := p_ledger_id;
569 g_process_category_code := p_process_category_code;
570 g_end_date := p_end_date;
571 g_errors_only_flag := p_errors_only_flag;
572 g_transfer_to_gl_flag := p_transfer_to_gl_flag;
573 g_post_in_gl_flag := p_post_in_gl_flag;
574 g_gl_batch_name := p_gl_batch_name;
575 g_valuation_method_code := p_valuation_method_code;
576 g_security_id_int_1 := p_security_id_int_1;
577 g_security_id_int_2 := p_security_id_int_2;
578 g_security_id_int_3 := p_security_id_int_3;
579 g_security_id_char_1 := p_security_id_char_1;
580 g_security_id_char_2 := p_security_id_char_2;
581 g_security_id_char_3 := p_security_id_char_3;
582
583
584 -- Set request id.
585
586 g_request_id := FND_GLOBAL.Conc_Request_Id();
587
588 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
589 trace
590 (p_msg => 'g_request_id = '||g_request_id
591 ,p_level => C_LEVEL_STATEMENT
592 ,p_module => l_log_module);
593 END IF;
594
595 xla_security_pkg.set_security_context(p_application_id);
596
597 -- Set new accounting batch id.
598
599 Select xla_accounting_batches_s.nextval
600 into g_accounting_batch_id
601 from dual;
602
603 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
604 trace
605 (p_msg => 'g_accounting_batch_id = '||g_accounting_batch_id
606 ,p_level => C_LEVEL_STATEMENT
607 ,p_module => l_log_module);
608 END IF;
609
610 -- Initialize errors package.
611
612 XLA_ACCOUNTING_ERR_PKG.Set_Options
613 (p_error_source => xla_accounting_err_pkg.C_ACCT_PROGRAM
614 ,p_request_id => g_request_id
615 ,p_application_id => p_application_id);
616
617
618 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
619 trace
620 (p_msg => 'END of procedure INITIALIZE '
621 ,p_level => C_LEVEL_PROCEDURE
622 ,p_module => l_log_module);
623 END IF;
624
625 EXCEPTION
626 WHEN xla_exceptions_pkg.application_exception THEN
627 RAISE;
628 WHEN OTHERS THEN
629 xla_accounting_err_pkg.build_message
630 (p_appli_s_name => 'XLA'
631 ,p_msg_name => 'XLA_AP_TECHNICAL_ERROR'
632 ,p_token_1 => 'XLA_MULTIPERIOD_ACCOUNTING_PKG.Initialize'
633 ,p_value_1 => 'SLA'
634 ,p_entity_id => NULL
635 ,p_event_id => NULL);
636
637 xla_exceptions_pkg.raise_message
638 (p_location => 'xla_multiperiod_accounting_pkg.Initialize');
639 END Initialize;
640
641
642 --============================================================================
643 --
644 -- Private API which populates the xla_ae_headers_gt table with journal
645 -- entries to be completed and reset its status to 'Incomplete'.
646 --
647 -- The accounting entries to be completed must fullfill the following
648 -- conditions:
649 --
650 -- (1) The journal entry is an accrual reversal entry or a multiperiod
651 -- accounting recognition entry.
652 -- (2) Filtered by the input parameters.
653 -- (3) The accounting entry status of the accrual entry of the entry to
654 -- be completed is 'Final'.
655 --
656 --============================================================================
657
658 PROCEDURE Populate_Journal_Entries
659 IS
660
661 l_stmt VARCHAR2(5000);
662 l_count NUMBER := 0;
663 l_log_module VARCHAR2(240);
664
665 l_err_msg varchar2(100);
666 l_err_num number;
667
668 Cursor C_SEL_HDRS is
669 Select accounting_entry_status_code
670 from xla_ae_headers
671 where ae_header_id in (Select /*+ cardinality(XLA_AE_HEADERS_GT,1) */ --bug9174950
672 ae_header_id from xla_ae_headers_gt)
673 and application_id = g_application_id
674 for update nowait;
675
676 BEGIN
677
678 IF g_log_enabled THEN
679 l_log_module := C_DEFAULT_MODULE||'.Populate_Journal_Entries';
680 END IF;
681
682 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
683 trace
684 (p_msg => 'BEGIN procedure POPULATE_JOURNAL_ENTRIES'
685 ,p_level => C_LEVEL_PROCEDURE
686 ,p_module => l_log_module);
687 END IF;
688
689 g_security_condition := NULL;
690
691 -- Building filter condition based on security columns and valuation method
692 -- This condition will be added dynamically to select statemtents.
693
694 SELECT DECODE(g_valuation_method_code,NULL,NULL,'and valuation_method = '''||g_valuation_method_code||''' ')||
695 DECODE(g_security_id_int_1,NULL,NULL,'and security_id_int_1 = '||g_security_id_int_1||' ')||
696 DECODE(g_security_id_int_2,NULL,NULL,'and security_id_int_2 = '||g_security_id_int_2||' ')||
697 DECODE(g_security_id_int_3,NULL,NULL,'and security_id_int_3 = '||g_security_id_int_3||' ')||
698 DECODE(g_security_id_char_1,NULL,NULL,'and security_id_char_1 = '''||g_security_id_char_1||''' ')||
699 DECODE(g_security_id_char_2,NULL,NULL,'and security_id_char_2 = '''||g_security_id_char_2||''' ')||
700 DECODE(g_security_id_char_3,NULL,NULL,'and security_id_char_3 = '''||g_security_id_char_3||''' ')
701 INTO g_security_condition
702 FROM DUAL;
703
704 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
705 trace
706 (p_msg => 'g_security_condition = '||g_security_condition
707 ,p_level => C_LEVEL_STATEMENT
708 ,p_module => l_log_module);
709 End If;
710
711 -- Building filter condition based process_category.
712 -- This condition will be added dynamically to select statemtents.
713
714 g_process_category_condition := NULL;
715
716 SELECT DECODE(g_process_category_code,NULL,NULL,'and event_class_group_code = '''||g_process_category_code||'''')
717 INTO g_process_category_condition
718 FROM DUAL;
719
720 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
721 trace
722 (p_msg => 'g_process_category_condition = '||g_process_category_condition
723 ,p_level => C_LEVEL_STATEMENT
724 ,p_module => l_log_module);
725 End If;
726
727 -- Insert the journal entries to be completed into xla_ae_headers_gt.
728
729 l_stmt := 'INSERT INTO xla_ae_headers_gt
730 (ae_header_id
731 ,ledger_id
732 ,entity_id
733 ,event_id
734 ,accounting_date
735 ,balance_type_code
736 ,je_category_name
737 ,product_rule_type_code
738 ,product_rule_code
739 ,period_name
740 ,doc_sequence_id
741 ,doc_category_code
742 ,gl_transfer_status_code
743 ,accrual_reversal_flag
744 ,accounting_entry_status_code)
745 SELECT /*+ INDEX(xah xla_ae_headers_n7) */ xah.ae_header_id
746 ,xah.ledger_id
747 ,xah.entity_id
748 ,xah.event_id
749 ,xah.accounting_date
750 ,xah.balance_type_code
751 ,xah.je_category_name
752 ,xah.product_rule_type_code
753 ,xah.product_rule_code
754 ,xah.period_name
755 ,xah.doc_sequence_id
756 ,xah.doc_category_code
757 ,xah.gl_transfer_status_code
758 ,xah.accrual_reversal_flag
759 ,''F''
760 FROM xla_ae_headers xah
761 , xla_ae_headers xah2
762 , xla_subledgers xs
763 , xla_event_types_b xet
764 , xla_event_class_attrs xec
765 , xla_transaction_entities xte
766 WHERE xah.application_id = :1
767 and xah.accounting_date <= :2
768 and xah.accounting_entry_status_code IN (''I'', DECODE(:3, ''Y'', ''I'', ''N''))
769 AND xah.application_id = xah2.application_id
770 AND xah.parent_ae_header_id = xah2.ae_header_id
771 AND xah2.accounting_entry_status_code = ''F''
772 AND xs.application_id = xah.application_id
773 AND xah.ledger_id IN (SELECT xlr.ledger_id -- bug9587265
774 FROM xla_ledger_options xlo,
775 xla_ledger_relationships_v xlr
776 WHERE xlo.application_id = :4
777 AND xlr.primary_ledger_id = :5
778 AND xlr.relationship_enabled_flag = ''Y''
779 AND xlr.ledger_category_code IN ( ''ALC'', ''PRIMARY'', ''SECONDARY'' )
780 AND DECODE(xlr.ledger_category_code, ''ALC'', xlr.ledger_id, xlo.ledger_id) = xlr.ledger_id
781 AND DECODE(xlr.ledger_category_code, ''SECONDARY'', xlo.capture_event_flag, ''N'') = ''N''
782 AND DECODE(xlr.ledger_category_code, ''ALC'', ''Y'', xlo.enabled_flag) = ''Y'')
783 AND xte.application_id = xah.application_id
784 AND xte.entity_id = xah.entity_id
785 AND xte.entity_code <> ''MANUAL''
786 AND xet.application_id = xah.application_id
787 AND xet.event_type_code = xah.event_type_code
788 AND xec.application_id = xet.application_id
789 AND xec.entity_code = xet.entity_code
790 AND xec.event_class_code = xet.event_class_code' ||
791 g_security_condition || ' ' ||
792 g_process_category_condition;
793
794
795 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
796 trace
797 (p_msg => 'l_stmt = '||l_stmt
798 ,p_level => C_LEVEL_STATEMENT
799 ,p_module => l_log_module);
800 End If;
801
802 print_logfile('- Dynamic stmt to populate xla_ae_headers_gt table built');
803
804 EXECUTE IMMEDIATE l_stmt
805 USING g_application_id
806 ,g_end_date
807 ,g_errors_only_flag
808 ,g_application_id --bug9174950
809 ,g_ledger_id; --bug9174950
810
811 l_count := SQL%ROWCOUNT;
812
813 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
814 trace(p_msg => '# lines inserted = '||SQL%ROWCOUNT,
815 p_module => l_log_module,
816 p_level => C_LEVEL_STATEMENT);
817 END IF;
818
819 print_logfile('- xla_ae_headers_gt table populuated');
820
821 If (l_count = 0) then
822 If (C_LEVEL_EVENT >= g_log_level) THEN
823 trace
824 (p_msg => 'No incomplete recognition journal entries and accrual reversal ' ||
825 'journal entries fetched for the application. '||
826 'There are no events to process in this run.'
827 ,p_level => C_LEVEL_EVENT
828 ,p_module => l_log_module);
829 END IF;
830
831 xla_accounting_err_pkg.build_message
832 (p_appli_s_name => 'XLA'
833 ,p_msg_name => 'XLA_AP_NO_EVENT_TO_PROCESS'
834 ,p_entity_id => NULL
835 ,p_event_id => NULL);
836
837 print_logfile('Technical warning : There are no Incomplete entries to process.');
838
839 g_nodata_flag := C_YES; --bug13258048
840
841 Else
842
843 --
844 -- Reset journal entry status for the journal entry to be completed
845 --
846
847 Update xla_ae_headers
848 Set accounting_entry_status_code = 'N'
849 , request_id = g_request_id
850 , accounting_batch_id = g_accounting_batch_id
851 , last_update_date = sysdate
852 , last_updated_by = xla_environment_pkg.g_usr_id
853 , last_update_login = xla_environment_pkg.g_login_id
854 Where application_id = g_application_id
855 and ae_header_id in (Select ae_header_id from xla_ae_headers_gt)
856 RETURNING ae_header_id BULK COLLECT INTO g_array_ae_header_id; -- 5115223
857
858 -- Lock rows in main headers table selected for processing.
859
860 Begin
861 Open C_SEL_HDRS;
862 Close C_SEL_HDRS;
863 Exception
864 When resource_busy Then
865 xla_accounting_err_pkg.build_message
866 (p_appli_s_name => 'XLA'
867 ,p_msg_name => 'XLA_MA_HDR_LOCKED'
868 ,p_entity_id => NULL
869 ,p_event_id => NULL);
870
871 print_logfile('Technical problem : JE Headers of transactions to be completed cannot be locked.');
872
873 xla_exceptions_pkg.raise_message
874 (p_appli_s_name => 'XLA'
875 ,p_msg_name => 'XLA_MA_HDR_LOCKED');
876
877 When Others Then
878 xla_exceptions_pkg.raise_message
879 (p_location => 'xla_multiperiod_accounting_pkg.Populate_Journal_Entries');
880 End;
881
882 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
883 trace(p_msg => '# lines updated = '||SQL%ROWCOUNT,
884 p_module => l_log_module,
885 p_level => C_LEVEL_STATEMENT);
886 END IF;
887
888 End If;
889 --bug13258048
890 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
891 trace(p_msg => 'g_nodata_flag = '||g_nodata_flag,
892 p_module => l_log_module,
893 p_level => C_LEVEL_STATEMENT);
894 END IF;
895
896 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
897 trace
898 (p_msg => 'END procedure POPULATE_JOURNAL_ENTRIES'
899 ,p_level => C_LEVEL_PROCEDURE
900 ,p_module => l_log_module);
901 END IF;
902
903 EXCEPTION
904 WHEN xla_exceptions_pkg.application_exception THEN
905 RAISE;
906 WHEN OTHERS THEN
907 xla_accounting_err_pkg.build_message
908 (p_appli_s_name => 'XLA'
909 ,p_msg_name => 'XLA_AP_TECHNICAL_ERROR'
910 ,p_token_1 => 'XLA_MULTIPERIOD_ACCOUNTING_PKG.Populate_Journal_Entries'
911 ,p_value_1 => 'SLA'
912 ,p_entity_id => NULL
913 ,p_event_id => NULL);
914
915 xla_exceptions_pkg.raise_message
916 (p_location => 'xla_multiperiod_accounting_pkg.Populate_Journal_Entries');
917
918 END Populate_Journal_Entries;
919
920
921 --============================================================================
922 --
923 -- Private API which updates the journal entry completed in the current run.
924 --
925 --============================================================================
926
927 PROCEDURE Update_Journal_Entries
928 IS
929 l_log_module VARCHAR2(240);
930 BEGIN
931 IF g_log_enabled THEN
932 l_log_module := C_DEFAULT_MODULE||'.Update_Journal_Entries';
933 END IF;
934
935 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
936 trace
937 (p_msg => 'BEGIN of procedure UPDATE_JOURNAL_ENTRIES'
938 ,p_level => C_LEVEL_STATEMENT
939 ,p_module => l_log_module);
940 trace
941 (p_msg => '# incomplete ='||g_array_ae_header_id.COUNT
942 ,p_level => C_LEVEL_STATEMENT
943 ,p_module => l_log_module);
944 END IF;
945
946 FORALL i IN 1..g_array_ae_header_id.COUNT -- 5115223
947 UPDATE xla_ae_headers xah
948 SET accounting_entry_status_code = 'F'
949 ,completed_date = sysdate
950 WHERE xah.request_id = g_request_id
951 AND xah.accounting_batch_id = g_accounting_batch_id
952 AND xah.application_id = g_application_id
953 AND xah.ae_header_id = g_array_ae_header_id(i)
954 AND accounting_entry_status_code NOT IN ('I', 'R');
955
956
957 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
958 trace
959 (p_msg => 'Number of headers updated = '||SQL%ROWCOUNT
960 ,p_level => C_LEVEL_PROCEDURE
961 ,p_module => l_log_module);
962
963 trace
964 (p_msg => 'END of procedure UPDATE_JOURNAL_ENTRIES '
965 ,p_level => C_LEVEL_PROCEDURE
966 ,p_module => l_log_module);
967 END IF;
968
969 EXCEPTION
970 WHEN xla_exceptions_pkg.application_exception THEN
971 RAISE;
972
973 WHEN OTHERS THEN
974 xla_accounting_err_pkg.build_message
975 (p_appli_s_name => 'XLA'
976 ,p_msg_name => 'XLA_AP_TECHNICAL_ERROR'
977 ,p_token_1 => 'XLA_MULTIPERIOD_ACCOUNTING_PKG.Update_Journal_Entries'
978 ,p_value_1 => 'SLA'
979 ,p_entity_id => NULL
980 ,p_event_id => NULL);
981
982 xla_exceptions_pkg.raise_message
983 (p_location => 'xla_multiperiod_accounting_pkg.Update_Journal_Entries');
984 END Update_Journal_Entries;
985
986
987 --============================================================================
988 --
989 -- Private API which populates the completion sequence number for the journal
990 -- entries to be completed.
991 --
992 --============================================================================
993
994 PROCEDURE Populate_Sequences
995 IS
996 l_seq_context_value fun_seq_batch.context_value_tbl_type;
997 l_xla_seq_status VARCHAR2(30);
998 l_xla_seq_context_id NUMBER;
999 l_log_module VARCHAR2(240);
1000
1001 BEGIN
1002 IF g_log_enabled THEN
1003 l_log_module := C_DEFAULT_MODULE||'.Populate_Sequences';
1004 END IF;
1005
1006 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1007 trace
1008 (p_msg => 'BEGIN of procedure POPULATE_SEQUENCES'
1009 ,p_level => C_LEVEL_STATEMENT
1010 ,p_module => l_log_module);
1011 END IF;
1012
1013 --
1014 -- Insert the journal entry to be sequenced to the XLA_EVENTS_GT
1015 -- and the sequencing batch API will use the GT table to identify
1016 -- the journal entry to be sequenced.
1017 --
1018
1019 INSERT INTO xla_events_gt
1020 (application_id
1021 ,ledger_id
1022 ,entity_id
1023 ,entity_code
1024 ,event_id)
1025 SELECT /*+ cardinality(H,1) INDEX(t xla_transaction_entities_u1) */ DISTINCT --bug9174950
1026 g_application_id
1027 ,g_ledger_id
1028 ,h.entity_id
1029 ,t.entity_code
1030 ,h.event_id
1031 FROM xla_ae_headers_gt h,
1032 xla_transaction_entities t
1033 WHERE h.entity_id = t.entity_id
1034 AND h.ledger_id = t.ledger_id
1035 AND t.application_id = g_application_id
1036 AND t.ledger_id = g_ledger_id;
1037
1038 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1039 trace(p_msg => 'Number of journal entries to be sequenced = '||SQL%ROWCOUNT,
1040 p_module => l_log_module,
1041 p_level => C_LEVEL_STATEMENT);
1042 END IF;
1043
1044 --
1045 -- Retrieve all primary, secondary, and ALC ledgers
1046 --
1047
1048 SELECT xlr.ledger_id BULK COLLECT
1049 INTO l_seq_context_value
1050 FROM xla_ledger_relationships_v xlr
1051 ,xla_subledger_options_v xso
1052 WHERE xlr.relationship_enabled_flag = 'Y'
1053 AND xlr.ledger_category_code IN ('ALC','PRIMARY','SECONDARY')
1054 AND DECODE(xso.valuation_method_flag
1055 ,'N',xlr.primary_ledger_id
1056 ,DECODE(xlr.ledger_category_code
1057 ,'ALC',xlr.primary_ledger_id
1058 ,xlr.ledger_id)
1059 ) = g_ledger_id
1060 AND xso.application_id = g_application_id
1061 AND xso.ledger_id = DECODE(xlr.ledger_category_code
1062 ,'ALC',xlr.primary_ledger_id
1063 ,xlr.ledger_id)
1064 AND xso.enabled_flag = 'Y';
1065
1066 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1067 trace(p_msg => 'Number of ledgers to be sequenced = '|| l_seq_context_value.COUNT
1068 ,p_module => l_log_module
1069 ,p_level => C_LEVEL_STATEMENT);
1070 END IF;
1071
1072 --
1073 -- Create sequence in batch mode
1074 --
1075
1076 IF (C_LEVEL_EVENT>= g_log_level) THEN
1077 trace(p_msg => 'Calling FUN_SEQ_BATCH.Batch_Init'
1078 ,p_level => C_LEVEL_EVENT
1079 ,p_module => l_log_module);
1080 END IF;
1081
1082 fun_seq_batch.batch_init
1083 (p_application_id => 602
1084 ,p_table_name => 'XLA_AE_HEADERS'
1085 ,p_event_code => 'COMPLETION'
1086 ,p_context_type => 'LEDGER_AND_CURRENCY'
1087 ,p_context_value_tbl => l_seq_context_value
1088 ,p_request_id => g_request_id
1089 ,x_status => l_xla_seq_status
1090 ,x_seq_context_id => l_xla_seq_context_id);
1091
1092 IF l_xla_seq_status <> 'NO_SEQUENCING' THEN
1093
1094 fun_seq_batch.populate_acct_seq_info
1095 (p_calling_program => 'ACCOUNTING'
1096 ,p_request_id => g_request_id);
1097
1098 fun_seq_batch.batch_exit
1099 (p_request_id => g_request_id
1100 ,x_status => l_xla_seq_status);
1101
1102 END IF;
1103
1104 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1105 trace
1106 (p_msg => 'END of procedure POPULATE_SEQUENCES '
1107 ,p_level => C_LEVEL_PROCEDURE
1108 ,p_module => l_log_module);
1109 END IF;
1110
1111 EXCEPTION
1112 WHEN xla_exceptions_pkg.application_exception THEN
1113 RAISE;
1114
1115 WHEN OTHERS THEN
1116 xla_accounting_err_pkg.build_message
1117 (p_appli_s_name => 'XLA'
1118 ,p_msg_name => 'XLA_AP_TECHNICAL_ERROR'
1119 ,p_token_1 => 'XLA_MULTIPERIOD_ACCOUNTING_PKG.Populate_Sequences'
1120 ,p_value_1 => 'SLA'
1121 ,p_entity_id => NULL
1122 ,p_event_id => NULL);
1123
1124 xla_exceptions_pkg.raise_message
1125 (p_location => 'xla_multiperiod_accounting_pkg.Populate_Sequences');
1126 END Populate_Sequences;
1127
1128
1129
1130 --============================================================================
1131 --
1132 -- Private API which transfer the accounting entry to GL if required.
1133 --
1134 --============================================================================
1135
1136 PROCEDURE Transfer_To_GL
1137 IS
1138 l_log_module VARCHAR2(240);
1139 BEGIN
1140 IF g_log_enabled THEN
1141 l_log_module := C_DEFAULT_MODULE||'.Transfer_To_GL';
1142 END IF;
1143
1144 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1145 trace
1146 (p_msg => 'BEGIN of procedure TRANSFER_TO_GL'
1147 ,p_level => C_LEVEL_STATEMENT
1148 ,p_module => l_log_module);
1149 END IF;
1150
1151 xla_accounting_err_pkg.set_options
1152 (p_error_source => xla_accounting_err_pkg.C_TRANSFER_TO_GL);
1153
1154 IF (C_LEVEL_EVENT >= g_log_level) THEN
1155 trace
1156 (p_msg => 'Calling transfer routine XLA_TRANSFER_PKG.GL_TRANSFER_MAIN'
1157 ,p_level => C_LEVEL_EVENT
1158 ,p_module => l_log_module);
1159 END IF;
1160
1161 xla_transfer_pkg.gl_transfer_main
1162 (p_application_id => g_application_id
1163 ,p_transfer_mode => 'COMBINED'
1164 ,p_ledger_id => g_ledger_id
1165 ,p_securiy_id_int_1 => NULL
1166 ,p_securiy_id_int_2 => NULL
1167 ,p_securiy_id_int_3 => NULL
1168 ,p_securiy_id_char_1 => NULL
1169 ,p_securiy_id_char_2 => NULL
1170 ,p_securiy_id_char_3 => NULL
1171 ,p_valuation_method => NULL
1172 ,p_process_category => g_process_category_code
1173 ,p_accounting_batch_id => g_accounting_batch_id
1174 ,p_entity_id => NULL
1175 ,p_batch_name => g_gl_batch_name
1176 ,p_end_date => g_end_date
1177 ,p_submit_gl_post => g_post_in_gl_flag
1178 ,p_caller => xla_transfer_pkg.C_MPA_COMPLETE); -- Bug 5056632
1179
1180 IF (C_LEVEL_EVENT >= g_log_level) THEN
1181 trace
1182 (p_msg => 'Transfer routine XLA_TRANSFER_PKG.GL_TRANSFER_MAIN executed'
1183 ,p_level => C_LEVEL_EVENT
1184 ,p_module => l_log_module);
1185 END IF;
1186
1187 xla_accounting_err_pkg.set_options
1188 (p_error_source => xla_accounting_err_pkg.C_ACCT_PROGRAM);
1189
1190 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1191 trace
1192 (p_msg => 'END of procedure TRANSFER_TO_GL '
1193 ,p_level => C_LEVEL_PROCEDURE
1194 ,p_module => l_log_module);
1195 END IF;
1196
1197 EXCEPTION
1198 WHEN xla_exceptions_pkg.application_exception THEN
1199 RAISE;
1200 WHEN OTHERS THEN
1201 xla_accounting_err_pkg.build_message
1202 (p_appli_s_name => 'XLA'
1203 ,p_msg_name => 'XLA_AP_TECHNICAL_ERROR'
1204 ,p_token_1 => 'XLA_MULTIPERIOD_ACCOUNTING_PKG.Transfer_To_GL'
1205 ,p_value_1 => 'SLA'
1206 ,p_entity_id => NULL
1207 ,p_event_id => NULL);
1208
1209 xla_exceptions_pkg.raise_message
1210 (p_location => 'xla_multiperiod_accounting_pkg.Transfer_To_GL');
1211 END Transfer_To_GL;
1212
1213
1214 --=============================================================================
1215 --
1216 -- Following code is executed when the package body is referenced for the first
1217 -- time
1218 --
1219 --=============================================================================
1220
1221 BEGIN
1222 g_log_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
1223 g_log_enabled := fnd_log.test
1224 (log_level => g_log_level
1225 ,module => C_DEFAULT_MODULE);
1226
1227 IF NOT g_log_enabled THEN
1228 g_log_level := C_LEVEL_LOG_DISABLED;
1229 END IF;
1230
1231 END xla_multiperiod_accounting_pkg; -- end of package body