понедельник, 6 апреля 2009 г.

Сторно журналов ГК

Журналы ГК можно сторнировать.
Более того, можно делать сторно 'на сторно'.
И нет ничего удивительного в том, что можно делать сторно 'на сторно на сторно'.

Т.е. для того, чтобы проследить всю цепочку сторнирования журнала, нужен "деревянный" запрос.
Вот пример.


SQL> SELECT LEVEL
2 ,gjh.je_header_id
3 ,gjh.reversed_je_header_id
4 ,gjh.accrual_rev_status
5 ,gjh.accrual_rev_je_header_id
6 FROM gl_je_headers gjh
7 START WITH gjh.je_header_id = 219693 AND gjh.accrual_rev_status = 'R'
8 CONNECT BY PRIOR gjh.je_header_id = gjh.reversed_je_header_id
9 /

LEVEL JE_HEADER_ID REVERSED_JE_HEADER_ID ACCRUAL_REV_STATUS ACCRUAL_REV_JE_HEADER_ID
---------- ------------ --------------------- ------------------ ------------------------
1 219693 R 219694
2 219694 219693 R 219695
3 219695 219694 R 219697
4 219697 219695 219695

Столбец ACCRUAL_REV_STATUS.
Значение 'R' говорит о том, этот журнал был сторнирован
Значение NULL - журнал не был сторнирован

Столбец REVERSED_JE_HEADER_ID.
Значение NULL говорит о том, что это исходный в нашей цепочке журнал. Значение отличное от NULL - это JE_HEADER_ID того журнала, который был сторнирован этим журналом

Столбец ACCRUAL_REV_JE_HEADER_ID.
Если журнал был сторнирован (ACCRUAL_REV_STATUS='R'), то это JE_HEADER_ID того журнала, который сторнировал текущий. Но только если текущий журнал был сторнирован. Как видим у последнего несторнированного журнала ACCRUAL_REV_JE_HEADER_ID не пустой, а значение совпадает с REVERSED_JE_HEADER_ID.

Комментариев нет: