OEBS Программа – сторнирование журналов SQLGL GLPREV
13 Ноябрь 2012
Нет комментариев
ОЕБС Пример вызова параллельной программы для сторнирования журналов
-- -------------------------------------------------------------------------------
-- Сторнирование журнала
PROCEDURE reverse_journals(x_return_status OUT VARCHAR2
,x_mess OUT VARCHAR2)
IS
TYPE t_integers IS TABLE OF INTEGER INDEX BY PLS_INTEGER;
l_request_ids t_integers;
l_result BOOLEAN := TRUE;
l_access_set_id NUMBER;
BEGIN
write_log('START REVERSE_JOURNALS');
x_return_status := 'E';
l_access_set_id := fnd_profile.value('GL_ACCESS_SET_ID');
FOR c_je IN (SELECT jh.je_header_id
,jh.rowid AS row_id
,jh.name AS journal_name
,b.name AS batch_name
FROM gl.gl_je_headers jh, gl_je_batches b
WHERE 1 = 1
AND jh.je_batch_id = b.je_batch_id
--
AND jh.ledger_id = G_LEDGER_ID
AND jh.je_source = G_JE_SOURCE_NAME
AND jh.je_category = G_JE_CATEGORY_NAME
AND jh.period_name = P_PERIOD_NAME
AND (b.name LIKE g_bath_name_in || '%' OR
b.name LIKE g_bath_name_out || '%')
AND (jh.name LIKE g_jh_name_in || '%' OR
jh.name LIKE g_jh_name_out || '%')
AND ( --Неотсторнированные журналы
(jh.accrual_rev_status IS NULL AND
-- сторно на сторно на сторно ...
jh.reversed_je_header_id IS NULL) OR
(jh.accrual_rev_status IS NULL AND
jh.reversed_je_header_id IS NOT NULL AND
MOD((SELECT COUNT(*)
FROM gl_je_headers jh0
START WITH jh0.je_header_id = jh.je_header_id
CONNECT BY jh0.je_header_id = PRIOR
jh0.reversed_je_header_id)
,2) != 0))
ORDER BY jh.je_header_id)
LOOP
write_log(' Сторнирование журнала "' || c_je.journal_name ||
'" из пакета "' || c_je.batch_name || '"');
UPDATE gl_je_headers
SET accrual_rev_flag = 'Y'
,accrual_rev_period_name = P_PERIOD_NAME
,accrual_rev_change_sign_flag = 'Y'
,accrual_rev_effective_date = SYSDATE
WHERE ROWID = c_je.row_id;
--
l_request_ids(l_request_ids.COUNT + 1) :=
fnd_request.submit_request(application => 'SQLGL'
,program => 'GLPREV'
,description => NULL
,start_time => NULL
,sub_request => FALSE
,argument1 => l_access_set_id
,argument2 => c_je.je_header_id);
COMMIT;
IF l_request_ids(l_request_ids.COUNT) = 0 THEN
write_log('Ошибка при отправке параллельного запроса Сторнирование журналов.');
l_request_ids.DELETE(l_request_ids.COUNT);
l_result := FALSE;
--exit;
END IF;
END LOOP;
--
WHILE l_request_ids.COUNT > 0
LOOP
-- описание функции http://apps-oracle.ru/fnd_request_exec/#WAIT_CONCURRENT
if NOT (wait_concur(l_request_ids(l_request_ids.FIRST),x_mess)) then
write_log(x_mess);
l_result := FALSE;
exit;
end if;
l_request_ids.DELETE(l_request_ids.FIRST);
END LOOP;
write_log('END REVERSE_JOURNALS' || chr(10));
--
IF l_result THEN
x_return_status := 'S';
x_mess := 'Сторнирование журналов завершено успешно.';
RETURN;
ELSE
x_return_status := 'E';
x_mess := 'Сторнирование журналов завершено с ошибками. '||x_mess;
RETURN;
END IF;
--
END reverse_journals;
Categories: API, Oracle e-Business Suite GLPREV, SQLGL, submit_request, wait_concur, параллельная программа, сторно

Последние комментарии