Информация о проектах (PA_PROJECTS_ALL)
Запрос для вывода информации о существующих проектах Oracle Projects.
Используется таблица PA_PROJECTS_ALL.
select ppa.project_id as project_id -- ID проекта , ppa.name as project_name -- Имя проекта , ppa.segment1 as project_num -- Номер проекта , ppa.project_type as project_type -- Тип проекта , pps.project_status_name as project_status -- Статус проекта , org.organization_id as org_id -- ID организации , org.name as org_name -- Имя организации , oper.organization_id as oper_id -- ID операционной единицы , oper.name as oper_name -- Имя операционной единицы , loc.city as loc_city -- Город, в котором ведется проект -- from pa_projects_all ppa -- список проектов , hr_all_organization_units org -- организация, которой принадлежит проект , hr_operating_units oper -- операционная единица , pa_locations loc -- расположение, где находится территориально , pa_project_statuses pps -- статус проекта where 1=1 -- org and org.organization_id = ppa.carrying_out_organization_id -- oper and ppa.org_id = oper.organization_id -- loc and loc.location_id = ppa.location_id -- pps and pps.project_status_code = ppa.project_status_code and pps.status_type = 'PROJECT' and sysdate between pps.start_date_active and nvl(pps.end_date_active,sysdate+1);
Список операционных единиц (HR_OPERATING_UNITS)
Запрос для вывода списка операционных единиц, используется view hr_operating_units.
select business_group_id, organization_id, name, date_from, date_to, short_code, set_of_books_id, default_legal_context_id, usable_flag from hr_operating_units;
Oracle Project (Проекты)
Информация об Oracle Project (Проекты) — описание основных таблиц, полезные запросы и примеры использования API.
По мере появления данных, буду добавлять информацию.
Основные таблицы Oracle Project, модуль PA.
Таблица | Описание |
PA_PROJECTS_ALL | Список проектов |
PA_PROJECT_ASSETS_ALL | Активы для проектов капитального строительства |
PA_PROJECT_CLASSES | Классификация проектов |
PA_CLASS_CATEGORIES | Категории классификаций |
PA_CLASS_CODES | Коды классификаций |
PA_PROJECT_ROLE_TYPES_B view pa_project_role_types |
Список ролей для назначения на проект |
PA_PROJECT_STATUSES | Список используемых статусов. Для PROJECT, DELIVERABLE, TASK, PROGRESS, STRUCTURE и т.д. |
PA_PROJECT_TYPES_ALL | Тип проекта |
PA_TRANSACTION_INTERFACE_ALL | Интерфейсная таблица для импорта транзакций из внешних источников |
PA_IMPLEMENTATIONS_ALL | Информация о конфигурации установки |
PA_BUDGET_LINES | Строки бюджета |
PA_BUDGET_VERSIONS | Версии бюджета |
PA_BUDGET_TYPES | Тип бюджета |
PA_EXPENDITURES_ALL | Группы статей расходов |
PA_EXPENDITURE_CATEGORIES | Категории затрат |
PA_EXPENDITURE_TYPES | Типы затрат |
PA_EXPENDITURE_ITEMS_ALL | Информация о расходах для проектов и задач |
PA_PERIODS_ALL | Периоды |
PA_RESOURCES | Список ресурсов |
PA_PROJ_ELEMENTS | Объекты рабочего плана — задачи, позиции поставки, структура |
PA_PROJ_ELEMENT_VERSIONS | Версии объектов рабочего плана |
PA_STRUCTURE_TYPES | Тип структуры |
PA_PROJ_ELEM_VER_STRUCTURE | Версия структуры |
PA_CONVERSION_TYPES_V | Тип курса |
PA_COST_DISTRIBUTION_LINES_ALL | Распределение затрат расходных статей |
JBO-25009: Невозможно создать объект типа:oracle.jbo.domain.Number
Если вы столкнулись с ошибкой JBO-25009, то вот вариант как ее быстро и успешно победить.
Получил ошибку на странице OAF:
US: JBO-25009: Cannot create an object of type:oracle.jbo.domain.Number
RU: JBO-25009: Невозможно создать объект типа:oracle.jbo.domain.Number
Решение:
На странице присутствовало поле xBean (тип messageChoice);
связанное с атрибутом ViewObject типа NUMBER.
Тип поля xBean был VARCHAR2, заменил его на NUMBER и все заработало успешно.
Удаление папок SVN
Для удаления скрытых файлов и папок SVN нам поможет следующий батник (windows):
rem Если надо указать конкретную дирректорию, то используем закомментированный вариант rem for /d /r "%1" %%d in (.svn) do @if exist "%%d" rd /s/q "%%d" rem Удаляем svn файлы начиная с текущей директории for /d /r "." %%d in (.svn) do @if exist "%%d" rd /s/q "%%d"
Создание bat файла:
1) Создаём новый файл с расширение «bat». Например, «clear_svn.bat».
2) Помещаем созданный файл в каталог, который хотим почистить от svn файлов (поддерживается рекурсивное удаление) и запускаем его.
3) Все файлы svn удалены.
Регистрация view в OEBS
Если зарегистрировать view в OEBS, указав следующие столбцы
- START_DATE_ACTIVE
- END_DATE_ACTIVE
- ENABLED_FLAG
, то при использовании данной view в наборе значений автоматически будут отсекаться устаревшие данные.
Для регистрации view в OEBS, используем следующий скрипт.
Читать дальше про “Регистрация view в OEBS” »
Скрипт копирования аттачмент функции
Если, при кастомизации стандартной формы OEBS, возникает необходимость сохранить функциональность аттачментов, то реализовать это поможет следующий скрипт:
Как создать ярлык для инстанса OEBS
Довольно удобно для входа в OEBS использовать ярлык с сохраненным логином.
Создаётся такой ярлык довольно просто:
1) Заходим на инстанс

Поиск значения по всем таблицам
Поиск значения по всем таблицам
Вариант1:
DECLARE match_count INTEGER; query_str VARCHAR2(400); l_owner VARCHAR2(10) := 'SCOTT'; l_search_text VARCHAR2(100) := '10'; BEGIN FOR t IN (select table_name, column_name FROM all_tab_columns a where owner = l_owner and a.data_type in ('NUMBER', 'VARCHAR2') ) LOOP begin match_count := 0; query_str := 'SELECT COUNT(*) FROM ' ||l_owner||'.'|| t.table_name || ' WHERE to_char(' || t.column_name || ') = :1'; EXECUTE IMMEDIATE query_str INTO match_count USING l_search_text; IF match_count > 0 THEN dbms_output.put_line(l_owner||'.'||t.table_name || ' ' || t.column_name || ' ' || match_count); dbms_output.put_line(' SELECT t.'|| t.column_name || ', t.* from '||l_owner||'.'|| t.table_name||' t where to_char(' || t.column_name || ') = '''||l_search_text||''''); dbms_output.put_line(''); END IF; exception when others then dbms_output.put_line(t.table_name||'.'||t.column_name||' : '||SQLERRM||' : '||SQLCODE); dbms_output.put_line(query_str); dbms_output.put_line(''); /*raise*/ end; END LOOP; END;
Вариант2:
--SET SERVEROUTPUT ON SIZE 1000000 DECLARE TYPE tab_columns_rec_type IS RECORD ( table_name all_tab_columns.table_name%type ,column_name all_tab_columns.column_name%type ,data_type all_tab_columns.data_type%type ); type tab_columns_tab_type is table of tab_columns_rec_type index by binary_integer; l_tab_columns_rec tab_columns_tab_type; match_count INTEGER; query_str VARCHAR2(400); l_owner VARCHAR2(10) := 'SCOTT'; l_search_text VARCHAR2(100) := '10'; -- % добавляем здесь, если ищем не по точному вхождению l_number NUMBER; is_number NUMBER(1); l_str_length NUMBER; /* l_mode: 1 - NUMBER и VARCHAR2 2 - only NUMBER 3 - only VARCHAR2 */ l_mode NUMBER := 1; -- При каком количестве найденные совпадений -- прекращать поиск l_found_count NUMBER := 1; l_exists_count NUMBER; BEGIN l_str_length := length(l_search_text); begin l_number := to_number(l_search_text); is_number := 1; exception when VALUE_ERROR then is_number := 0; end; if (l_mode = 1 and is_number = 1) then select table_name, column_name, data_type bulk collect into l_tab_columns_rec FROM all_tab_columns a where owner = l_owner and a.data_length >= l_str_length and ( a.data_type = 'VARCHAR2' or a.data_type = 'NUMBER' ); elsif (l_mode = 2 and is_number = 1) then select table_name, column_name, data_type bulk collect into l_tab_columns_rec FROM all_tab_columns a where owner = l_owner and a.data_length >= l_str_length and a.data_type = 'NUMBER'; else select table_name, column_name, data_type bulk collect into l_tab_columns_rec FROM all_tab_columns a where owner = l_owner and a.data_length >= l_str_length and a.data_type = 'VARCHAR2'; end if; l_exists_count := 0; if NOT (l_tab_columns_rec is null or l_tab_columns_rec.count = 0) then for j in l_tab_columns_rec.first..l_tab_columns_rec.last LOOP begin match_count := 0; if (l_tab_columns_rec(j).data_type = 'VARCHAR2') then query_str := 'SELECT count(*) FROM ' ||l_owner||'.'|| l_tab_columns_rec(j).table_name || ' WHERE rownum = 1 and to_char(' || l_tab_columns_rec(j).column_name || ') = :1'; EXECUTE IMMEDIATE query_str INTO match_count USING l_search_text; elsif (l_tab_columns_rec(j).data_type = 'NUMBER') then query_str := 'SELECT count(*) FROM ' ||l_owner||'.'|| l_tab_columns_rec(j).table_name || ' WHERE rownum = 1 and ' || l_tab_columns_rec(j).column_name || ' = :1'; EXECUTE IMMEDIATE query_str INTO match_count USING l_number; end if; IF match_count > 0 THEN l_exists_count := l_exists_count + 1; dbms_output.put_line(l_tab_columns_rec(j).data_type||' '||l_owner||'.'||l_tab_columns_rec(j).table_name || ' ' || l_tab_columns_rec(j).column_name ); dbms_output.put_line(' SELECT t.'|| l_tab_columns_rec(j).column_name || ', t.* from '||l_owner||'.'|| l_tab_columns_rec(j).table_name||' t where to_char(' || l_tab_columns_rec(j).column_name || ') like '''||l_search_text||''''); dbms_output.put_line(''); if (l_exists_count = l_found_count) then exit; end if; END IF; exception when others then dbms_output.put_line(l_tab_columns_rec(j).table_name||'.'||l_tab_columns_rec(j).column_name||' : '||SQLERRM||' : '||SQLCODE); dbms_output.put_line(query_str); dbms_output.put_line(''); /*raise*/ end; END LOOP; end if; END;
Параллельные программы в ОЕБС (FND_CONCURRENT_REQUESTS)
SELECT a.request_id, b.user_name, c.program, c.argument_text, a.requested_start_date, /*a.status_code, a.phase_code,*/ lc.MEANING as status_descr, lp.MEANING as phase_descr FROM fnd_concurrent_requests a, fnd_user b, fnd_conc_req_summary_v c, fnd_lookups lp, fnd_lookups lc WHERE b.user_id = a.requested_by AND a.request_id = c.request_id AND a.requested_start_date > trunc(SYSDATE) AND a.hold_flag = 'N' and lp.lookup_type = 'CP_PHASE_CODE' and lp.LOOKUP_CODE = a.phase_code and lc.lookup_type = 'CP_STATUS_CODE' and lc.LOOKUP_CODE = a.status_code /*and a.status_code IN ('Q', 'I')*/ and b.user_name LIKE '%' and c.program like '%' ORDER BY a.request_id desc;
Читать дальше про “Параллельные программы в ОЕБС (FND_CONCURRENT_REQUESTS)” »
Последние комментарии