Поиск VIEW по используемым объектам

Запрос для поиска VIEW, в которой используются определенные объекты.
Можно, например, использовать для поиска связки между таблицами.
with s as ( select 'XLA_AE_HEADERS' obj1, 'XLA_AE_LINES' obj2 from dual ) select owner, name from All_Dependencies t, s where type='VIEW' and t.REFERENCED_NAME like s.obj1 intersect select owner, name from All_Dependencies t, s where type='VIEW' and t.REFERENCED_NAME like s.obj2 OWNER NAME ------------------------------ ------------------------------ APPS ARFV_ADJ_DISTS_ALC_V APPS ARFV_APP_DISTS_ALC_V APPS ARFV_CASH_DISTS_ALC_V APPS ARFV_FREIGHT_DISTS_ALC_V APPS ARFV_REVENUE_DISTS_ALC_V APPS ARFV_TAX_DISTS_ALC_V APPS ARFV_UNREC_DISTS_ALC_V APPS ARFV_UNREV_DISTS_ALC_V ...
Ant при разработке с использованием OAF
При разработке проектов с использованием OAF и JDeveloper возникла необходимость частого переноса (или развертывания — deploy) приложений с одного экземпляра системы на другой.
Операция переноса состоит из пяти шагов:
- Компиляция java классов
- Перенос java классов на сервер приложений (в каталог $JAVA_TOP)
- Перенос xml файлов Entity Objects, View Objects, Application Modules ($JAVA_TOP)
- Импорт xml файлов Pages, Regions с помощью утилиты import
- Импорт xliff файлов
Проделав эту операцию пару раз вручную, решил все это дело автоматизировать.
Вся автоматизация построена на известном продукте Apache Ant.
Состоит из четырех файлов
- <project>.bat
- <project>.xml
- build.xml
- <project>.properties
, где <project> имя Вашего проекта.
Читать дальше про “Ant при разработке с использованием OAF” »
SLA — Запрос для просмотра данных учета (Subledger Accounting)
Запрос для просмотра данных учета
select xte.application_id as appl_id
,xte.entity_code as entity_code
,ec.event_class_code as event_class_code
,ec.name as event_class
,xal.code_combination_id as cc_id
,fnd_flex_ext.get_segs('SQLGL','GL#',gl.chart_of_accounts_id, xal.code_combination_id) as ACCOUNT
--,xla_oa_functions_pkg.get_ccid_description(gl.chart_of_accounts_id,xal.code_combination_id) as account_description
,xah.ae_header_id as xah_ae_header_id
,xal.ae_line_num as xal_ae_line_num
,xal.ledger_id as xal_ledger_id
,xte.ledger_id as xte_ledger_id
,xae.event_type_code as event_type_code
,et.name as event_type
,xae.event_number as event_number
,xal.accounting_class_code as acc_class_code -- класс учета
,lk1.meaning as accounting_class
,xal.accounting_date as accounting_date
,xal.accounted_dr as accounted_dr
,xal.accounted_cr as accounted_cr
,xal.currency_code as currency_code
,nvl(xte.source_id_int_1, -99) as source_id_int_1
,decode(xal.party_type_code, 'C', xal.party_id) as customer_id
,decode(xal.party_type_code, 'C', xal.party_site_id) as customer_site_id
from xla.xla_transaction_entities xte
, xla.xla_ae_headers xah
, xla.xla_ae_lines xal
, xla.xla_events xae
, xla_lookups lk1
, xla_gl_ledgers_v gl
, xla.xla_event_types_tl et
, xla.xla_event_classes_tl ec
where 1=1
-- sla xah
and xah.entity_id = xte.entity_id
and xah.application_id = xte.application_id
and xah.ledger_id = xal.ledger_id
-- sla xal
and xal.ae_header_id = xah.ae_header_id
and xal.application_id = xah.application_id
and (nvl(xal.accounted_dr,0) != 0 or nvl(xal.accounted_cr,0)!=0)
-- sla xae
and xae.application_id = xah.application_id
and xae.event_id = xah.event_id
-- lk1
and lk1.lookup_code = xal.accounting_class_code
and lk1.lookup_type = 'XLA_ACCOUNTING_CLASS'
-- gl
and gl.ledger_id = xah.ledger_id
-- et
and et.application_id = xte.application_id
and et.entity_code = xte.entity_code
and et.event_type_code = xae.event_type_code
and et.language = USERENV('LANG')
-- ec
and ec.application_id = xte.application_id
and ec.entity_code = xte.entity_code
and ec.event_class_code = et.event_class_code
and ec.language = USERENV('LANG')
-- ======
-- and xte.entity_code = 'RECEIPTS'
-- and xte.application_id = 222
-- and xte.ledger_id = fnd_profile.value('GL_SET_OF_BKS_ID')
-- and nvl(source_id_int_1,(-99)) =
PL/SQL Developer — отображение чисел (number -> char)
Иногда требуется отследить числа (визуально), с большим количеством знаков после точки.
Но столкнемся с тем, что PL/SQL Developer при отображении обрезает число.
select 1.000000000000001234567 v from dual union all select 1.000000100000001234567 from dual union all select 1.001000000000001234567 from dual union all select 1.123456789123456789123 from dual
В PL/SQL Developer есть полезная опция Number fields to_char
Читать дальше про “PL/SQL Developer — отображение чисел (number -> char)” »
Вызов формы FNDRSRUN для запуска канкарента с определенными параметрами
Открытие формы FNDRSRUN с определенным канкарентом и выставленными параметрами:
1) Создаем свою форм функцию XX_FNDRSRUN для доступа к форме FNDRSRUN. (необязательный шаг)
2) Помещаем вызов нашего канкарента в меню Сервис на определенный SPECIAL.
3) Строка для вызова
CONCURRENT_PROGRAM_NAME ="<CODE>" PROGRAM_APPL_SHORT_NAME="<APPL_CODE>" CHAR1="<param1:param2:...>" SUBMIT_ONCE="Y"
В параметр CHAR1 записываем параметры канкарента (value), через двоеточие.
Читать дальше про “Вызов формы FNDRSRUN для запуска канкарента с определенными параметрами” »
ОЕБС Расширенный скрипт инициализации сессиии

ОЕБС Расширенный скрипт для инициализации сессии:
- Выводит в output короткую запись для инициализации.
- Если не заданы полномочия или приложение, то выводит в output список назначенных пользователю полномочий.
declare
l_lang varchar2(2) := 'RU';
l_user_name varchar2(100) := 'AOSTAPISHEN';
l_resp_name varchar2(400);
l_resp_appl_name varchar2(400);
-- ------------------------------------------------------------------
l_user_id NUMBER;
l_resp_id NUMBER;
l_resp_appl_id NUMBER;
l_appl_code VARCHAR2(10);
l_org_id NUMBER;
l_mo_sec_profile NUMBER;
l_mo_product number;
begin
-- l_resp_name := 'Управление активами предприятия';
-- l_resp_name := 'Диспетчер Дебиторов';
-- l_resp_name := 'Разработчик приложений';
-- l_resp_name := 'Движение денежных средств: суперпользователь';
-- l_resp_appl_name := 'Управление активами предприятия';
-- l_resp_appl_name := 'Главная книга';
-- l_resp_appl_name := 'Дебиторы'
-- l_resp_appl_name := 'Кредиторы';
-- l_resp_appl_name := 'Движение денежных средств';
-- l_resp_appl_name := 'Библиотека объектов приложений';
select user_id into l_user_id from fnd_user t where user_name like l_user_name;
if (l_resp_name is null or l_resp_appl_name is null) then
for i in (
SELECT ap.application_short_name as appl_code,
a.application_name as appl_name,
r.responsibility_name as resp_name,
r0.responsibility_key,
--
max(length(a.application_name )) over() as length_appl_name
FROM fnd_user u,
fnd_user_resp_groups g,
fnd_application_tl a,
fnd_responsibility_tl r,
fnd_responsibility r0,
fnd_application ap
WHERE g.user_id(+) = u.user_id
AND g.responsibility_application_id = a.application_id
AND a.application_id = r.application_id
AND g.responsibility_id = r.responsibility_id
and a.language = l_lang
and ap.application_id = a.application_id
and r.language = l_lang
and u.user_name = l_user_name
and r.responsibility_name <> 'Диагностика приложения'
and r.responsibility_name = nvl(l_resp_name,r.responsibility_name)
and a.application_name = nvl(l_resp_appl_name,a.application_name)
and r0.responsibility_id = r.responsibility_id
ORDER BY appl_name, resp_name
)
loop
dbms_output.put_line(rpad('l_resp_appl_name := '''||i.appl_name||'''',i.length_appl_name+22,' ') || ' ; l_resp_name := '''||i.resp_name||''';');
dbms_output.put_line(rpad('appl_code := '''||i.appl_code||'''',i.length_appl_name+22,' ') || ' ; responsibility_key := '''||i.responsibility_key||''';');
end loop;
else
select b.application_id, b.application_short_name into l_resp_appl_id, l_appl_code
from fnd_application_tl t
,fnd_application b
where 1=1
and t.application_name like l_resp_appl_name
and t.language = l_lang
and b.application_id = t.application_id;
select t.responsibility_id into l_resp_id from fnd_responsibility_tl t
where t.responsibility_name like l_resp_name and t.language = l_lang and t.application_id = l_resp_appl_id;
l_org_id := fnd_profile.VALUE_SPECIFIC(NAME => 'ORG_ID', RESPONSIBILITY_ID => l_resp_id, APPLICATION_ID=> l_resp_appl_id);
fnd_global.apps_initialize( user_id => l_user_id,
resp_id => l_resp_id,
resp_appl_id => l_resp_appl_id
);
SELECT count(1) into l_mo_product FROM fnd_mo_product_init mpi where mpi.application_short_name = l_appl_code and nvl(mpi.status, 'N') = 'Y';
if (l_mo_product = 1) then
begin
MO_GLOBAL.init(l_appl_code);
if (l_org_id is not null) then
mo_global.set_policy_context('M',l_org_id);
end if;
l_mo_sec_profile := fnd_profile.value('XLA_MO_SECURITY_PROFILE_LEVEL');
mo_global.set_org_context(l_resp_id,l_mo_sec_profile,l_appl_code);
exception
when others then
dbms_output.put_line('SQLERRM:'||SQLERRM||chr(10));
dbms_output.put_line('FORMAT_ERROR_BACKTRACE:'||chr(10)||dbms_utility.format_error_backtrace);
end;
dbms_output.put_line('begin'||chr(10)||' fnd_global.apps_initialize('||l_user_id||', '||l_resp_id||', '||l_resp_appl_id||'); --'||l_resp_name||' - '||l_resp_appl_name
||chr(10)||' mo_global.init('''|| l_appl_code||''');'
||case when l_org_id is not null then chr(10)||' mo_global.set_policy_context(''M'','||l_org_id||');' end
||chr(10)||' mo_global.set_org_context('||l_resp_id||', '||l_mo_sec_profile||', '''||l_appl_code||''');'
||chr(10)||'end;');
else
dbms_output.put_line('begin'||chr(10)||' fnd_global.apps_initialize('||l_user_id||', '||l_resp_id||', '||l_resp_appl_id||'); --'||l_resp_name||' - '||l_resp_appl_name
||chr(10)||'end;');
end if;
end if;
end;
Информация о расчетных счетах — поставщик или заказчик

Запрос для определения типа расчетного счета:
(поставщик или заказчик)
SELECT account.bank_account_num
,account.ext_bank_account_id -- Link to Bank and Branch Information
,acc_instr.instrument_id
,case when ext_payer.ext_payer_id is not null then 'CUSTOMER'
when ext_iep.ext_payee_id is not null then 'SUPPLIER'
end type_account
,case when ext_payer.ext_payer_id is not null then
(select ac.CUSTOMER_ID || ' - ' || ac.CUSTOMER_NAME
from ar_customers ac where ac.CUSTOMER_ID = ext_payer.cust_account_id)
when ext_iep.ext_payee_id is not null then
(select ap.vendor_id || ' - ' || ap.vendor_name
from ap_suppliers ap where ap.party_id = ext_iep.payee_party_id)
end owner_account_name
FROM iby_ext_bank_accounts account
,iby_pmt_instr_uses_all acc_instr
,iby_external_payers_all ext_payer
,iby_external_payees_all ext_iep
WHERE 1 = 1
AND account.ext_bank_account_id = acc_instr.instrument_id
AND acc_instr.ext_pmt_party_id = ext_payer.ext_payer_id(+)
AND acc_instr.ext_pmt_party_id = ext_iep.ext_payee_id(+)
-- AND account.bank_account_num in ('','')
Список расчетных счетов для заказчиков
Для просмотра списка расчетных счетов заказчиков (покупателей, контрагентов) используем следующий запрос:
SELECT ac.CUSTOMER_id , cust.party_name customer_name , cust_acct.account_number , cust_acct.cust_account_id , cust_uses.site_use_code , cust_loc.address1 , cust_loc.address2 , cust_loc.address3 , cust_loc.address4 , cust_loc.city , cust_loc.postal_code , bank.party_name bank_name , bank_prof.home_country , branch.party_name branch_name , branch_prof.bank_or_branch_number branch_number , account.bank_account_num , account.bank_account_name , acc_instr.order_of_preference , cust_uses.primary_flag FROM hz_parties bank , hz_relationships rel , hz_parties branch , hz_organization_profiles bank_prof , hz_organization_profiles branch_prof , iby_ext_bank_accounts account , iby_external_payers_all ext_payer , iby_pmt_instr_uses_all acc_instr , hz_parties cust , hz_cust_accounts cust_acct , hz_cust_acct_sites_all cust_site , hz_cust_site_uses_all cust_uses , hz_party_sites party_site , hz_locations cust_loc , ar_customers ac WHERE 1=1 AND bank.party_id = rel.object_id and bank.party_type = rel.object_type AND rel.object_table_name = 'HZ_PARTIES' AND rel.relationship_code = 'BRANCH_OF' AND rel.subject_id = branch.party_id AND rel.subject_type = branch.party_type AND rel.subject_table_name = 'HZ_PARTIES' AND bank.party_id = bank_prof.party_id AND branch.party_id = branch_prof.party_id AND cust_acct.cust_account_id = cust_site.cust_account_id AND cust_site.cust_acct_site_id = cust_uses.cust_acct_site_id and cust_uses.status = 'A' AND party_site.party_id = cust.party_id AND party_site.party_site_id = cust_site.party_site_id AND party_site.location_id = cust_loc.location_id AND cust.party_id = cust_acct.party_id AND bank.party_id = account.bank_id AND branch.party_id = account.branch_id AND account.ext_bank_account_id = acc_instr.instrument_id AND acc_instr.ext_pmt_party_id = ext_payer.ext_payer_id AND ext_payer.cust_account_id = cust_acct.cust_account_id AND cust_uses.site_use_id = ext_payer.acct_site_use_id and ext_payer.cust_account_id = ac.CUSTOMER_id
Список расчетных счетов для поставщиков
Для получения списка расчетных счетов поставщиков используем следующий запрос
SELECT party_supp.party_name supplier_name
,aps.segment1 supplier_number
,ass.vendor_site_code supplier_site
,ieb.bank_account_num bank_account_num
,ieb.bank_account_name bank_account_name
,party_bank.party_name bank_name
,branch_prof.bank_or_branch_number bank_number
,party_branch.party_name branch_name
,branch_prof.bank_or_branch_number branch_number
FROM hz_parties party_supp
,ap_suppliers aps
,hz_party_sites site_supp
,ap_supplier_sites_all ass
,iby_external_payees_all iep
,iby_pmt_instr_uses_all ipi
,iby_ext_bank_accounts ieb
,hz_parties party_bank
,hz_parties party_branch
,hz_organization_profiles bank_prof
,hz_organization_profiles branch_prof
WHERE party_supp.party_id = aps.party_id
AND party_supp.party_id = site_supp.party_id
AND site_supp.party_site_id = ass.party_site_id
AND ass.vendor_id = aps.vendor_id
AND iep.payee_party_id = party_supp.party_id
AND iep.party_site_id = site_supp.party_site_id
AND iep.supplier_site_id = ass.vendor_site_id
AND iep.ext_payee_id = ipi.ext_pmt_party_id
AND ipi.instrument_id = ieb.ext_bank_account_id
AND ieb.bank_id = party_bank.party_id
AND ieb.branch_id = party_branch.party_id
AND party_branch.party_id = branch_prof.party_id
AND party_bank.party_id = bank_prof.party_id
ORDER BY party_supp.party_name, ass.vendor_site_code;
Выборка неотсторнированных журналов
Для выбора неотсторнированных журналов можно использовать следующий запрос:
SELECT * FROM gl_je_batches b,
gl_je_headers h,
gl_je_lines l,
gl_code_combinations gcc
WHERE h.je_header_id = l.je_header_id
AND b.je_batch_id = h.je_batch_id
AND gcc.code_combination_id = l.code_combination_id
AND ( --Неотсторнированные журналы
( h.accrual_rev_status IS NULL AND
h.reversed_je_header_id IS NULL
)
OR -- сторно на сторно на сторно ...
( h.accrual_rev_status IS NULL AND
h.reversed_je_header_id IS NOT NULL
AND MOD((SELECT COUNT(*)
FROM gl_je_headers jh
START WITH jh.je_header_id = h.je_header_id
CONNECT BY jh.je_header_id = PRIOR jh.reversed_je_header_id
), 2 ) != 0
)
)

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