Информация о проектах (PA_PROJECTS_ALL)

15 Сентябрь 2011 Нет комментариев

Запрос для вывода информации о существующих проектах 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)

15 Сентябрь 2011 Нет комментариев

Запрос для вывода списка операционных единиц, используется 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 (Проекты)

15 Сентябрь 2011 Нет комментариев

Информация об 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 Распределение затрат расходных статей
Categories: oracle, Oracle e-Business Suite Tags: , , ,

JBO-25009: Невозможно создать объект типа:oracle.jbo.domain.Number

14 Сентябрь 2011 Нет комментариев

Если вы столкнулись с ошибкой 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

14 Сентябрь 2011 3 comments

Для удаления скрытых файлов и папок 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 удалены.

Categories: Others Tags: ,

Регистрация view в OEBS

9 Сентябрь 2011 1 комментарий


Если зарегистрировать view в OEBS, указав следующие столбцы

  • START_DATE_ACTIVE
  • END_DATE_ACTIVE
  • ENABLED_FLAG

, то при использовании данной view в наборе значений автоматически будут отсекаться устаревшие данные.

Для регистрации view в OEBS, используем следующий скрипт.
Читать дальше про “Регистрация view в OEBS” »

Скрипт копирования аттачмент функции

8 Сентябрь 2011 Нет комментариев


Если, при кастомизации стандартной формы OEBS, возникает необходимость сохранить функциональность аттачментов, то реализовать это поможет следующий скрипт:

Читать дальше про “Скрипт копирования аттачмент функции” »

Как создать ярлык для инстанса OEBS

8 Сентябрь 2011 3 comments

Довольно удобно для входа в OEBS использовать ярлык с сохраненным логином.
Создаётся такой ярлык довольно просто:

1) Заходим на инстанс

Вход на инстанс OEBS

Читать дальше про “Как создать ярлык для инстанса OEBS” »

Categories: Oracle e-Business Suite Tags:

Поиск значения по всем таблицам

7 Сентябрь 2011 19 comments

Поиск значения по всем таблицам

Вариант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;
Categories: oracle, SQL Tags: , ,

Параллельные программы в ОЕБС (FND_CONCURRENT_REQUESTS)

18 Август 2011 1 комментарий
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)” »