diff --git a/db/PKG_P8PANELS_MECHREC.pck b/db/PKG_P8PANELS_MECHREC.pck index 750ee08..2a98f26 100644 --- a/db/PKG_P8PANELS_MECHREC.pck +++ b/db/PKG_P8PANELS_MECHREC.pck @@ -81,6 +81,22 @@ create or replace package body PKG_P8PANELS_MECHREC as SFCPRODPLAN_TYPE constant PKG_STD.TSTRING := 'План'; -- Тип планов (мнемокод состояния) NMAX_TASKS constant PKG_STD.TNUMBER := 10000; -- Максимальное количество отображаемых задач + /* Константы - классы задач плана ("Производственная программа") */ + NCLASS_WO_DEFICIT constant PKG_STD.TNUMBER := 0; -- Без дефицита выпуска + NCLASS_PART_DEFICIT constant PKG_STD.TNUMBER := 1; -- С частичным дефицитом выпуска + NCLASS_FULL_DEFICIT constant PKG_STD.TNUMBER := 2; -- С полным дефицитом выпуска + NCLASS_WITH_DEFICIT constant PKG_STD.TNUMBER := 3; -- С дефицитом запуска или датой меньше текущей + NCLASS_FUTURE_DATE constant PKG_STD.TNUMBER := 4; -- Дата анализа еще не наступила + NCLASS_WO_LINKS constant PKG_STD.TNUMBER := 5; -- Задача без связи + + /* Константы - типы задач плана, содержание детализации ("Производственная программа") */ + NTASK_TYPE_RL_WITH_GP constant PKG_STD.TNUMBER := 0; -- Маршрутные листы с развертыванием товарных запасов + NTASK_TYPE_RL_WITH_DL constant PKG_STD.TNUMBER := 1; -- Маршрутные листы с развертыванием комплектаций + NTASK_TYPE_INC_DEPS constant PKG_STD.TNUMBER := 2; -- Приход из подразделений + NTASK_TYPE_INC_DEPS_RL constant PKG_STD.TNUMBER := 3; -- Приход из подразделений и маршрутные листы + NTASK_TYPE_RL constant PKG_STD.TNUMBER := 4; -- Маршрутные листы + NTASK_TYPE_EMPTY constant PKG_STD.TNUMBER := null; -- Нет детализации + /* Константы - дополнительные атрибуты */ STASK_ATTR_START_FACT constant PKG_STD.TSTRING := 'start_fact'; -- Запущено STASK_ATTR_MAIN_QUANT constant PKG_STD.TSTRING := 'main_quant'; -- Количество план @@ -273,7 +289,7 @@ create or replace package body PKG_P8PANELS_MECHREC as SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, BVISIBLE => true); /* Если тип = 3, то необходимо включать состояние */ - if (NTYPE = 3) then + if (NTYPE = NTASK_TYPE_INC_DEPS_RL) then PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'SDOC_STATE', SCAPTION => 'Состояние', @@ -404,7 +420,7 @@ create or replace package body PKG_P8PANELS_MECHREC as ICURSOR => ICURSOR, NPOSITION => 2); /* Если тип = 3, то необходимо включать состояние */ - if (NTYPE = 3) then + if (NTYPE = NTASK_TYPE_INC_DEPS_RL) then PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SDOC_STATE', ICURSOR => ICURSOR, @@ -1455,7 +1471,7 @@ create or replace package body PKG_P8PANELS_MECHREC as procedure FCROUTLST_DG_GET ( NFCPRODPLANSP in number, -- Рег. номер связанной спецификации плана - NTYPE in number, -- Тип спецификации плана (0 - Деталь, 1 - Изделие/сборочная единица, 3/4 - ПиП) + NTYPE in number, -- Тип спецификации плана (см. константы NTASK_TYPE_*) NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) NPAGE_SIZE in number, -- Количество записей на странице (0 - все) CORDERS in clob, -- Сортировки @@ -1467,7 +1483,7 @@ create or replace package body PKG_P8PANELS_MECHREC as /* Выбираем сборку таблицы, исходя из типа спецификации плана */ case /* Деталь */ - when (NTYPE = 0) then + when (NTYPE = NTASK_TYPE_RL_WITH_GP) then /* Получаем таблицу по детали */ FCROUTLST_DG_BY_DTL(NFCPRODPLANSP => NFCPRODPLANSP, NPAGE_NUMBER => NPAGE_NUMBER, @@ -1476,7 +1492,7 @@ create or replace package body PKG_P8PANELS_MECHREC as NINCLUDE_DEF => NINCLUDE_DEF, COUT => COUT); /* Изделие/сборочная единица */ - when (NTYPE = 1) then + when (NTYPE = NTASK_TYPE_RL_WITH_DL) then /* Получаем таблицу по изделию */ FCROUTLST_DG_BY_PRDCT(NFCPRODPLANSP => NFCPRODPLANSP, NPAGE_NUMBER => NPAGE_NUMBER, @@ -1485,7 +1501,7 @@ create or replace package body PKG_P8PANELS_MECHREC as NINCLUDE_DEF => NINCLUDE_DEF, COUT => COUT); /* Для приходов из подразделений */ - when ((NTYPE = 3) or (NTYPE = 4)) then + when ((NTYPE = NTASK_TYPE_INC_DEPS_RL) or (NTYPE = NTASK_TYPE_RL)) then /* Получаем таблицу по приходу */ FCROUTLST_DG_BY_DEPS(NFCPRODPLANSP => NFCPRODPLANSP, NPAGE_NUMBER => NPAGE_NUMBER, @@ -1520,11 +1536,11 @@ create or replace package body PKG_P8PANELS_MECHREC as DDATE_FROM PKG_STD.TLDATE; -- Дата запуска спецификации DDATE_TO PKG_STD.TLDATE; -- Дата выпуска спецификации STASK_CAPTION PKG_STD.TSTRING; -- Описание задачи в Ганте - NTYPE PKG_STD.TNUMBER; -- Тип задачи (0/1 - для "Дата выпуска", 2/3/4 - для "Дата выпуска") + NTYPE PKG_STD.TNUMBER; -- Тип задачи (см. константы NTASK_TYPE_*) SDETAIL_LIST PKG_STD.TSTRING; -- Ссылки на детализацию SPLAN_TITLE PKG_STD.TSTRING; -- Заголовок плана NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса - NTASK_CLASS PKG_STD.TNUMBER; -- Класс задачи + NTASK_CLASS PKG_STD.TNUMBER; -- Класс задачи (см. константы NCLASS_*) NLEVEL_FILTER PKG_STD.TNUMBER; -- Уровень для фильтра /* Объединение значений в строковое представление */ @@ -1666,7 +1682,7 @@ create or replace package body PKG_P8PANELS_MECHREC as NMAIN_QUANT in number, -- Выпуск NREL_FACT in number, -- Выпуск факт DREP_DATE_TO in date, -- Дата выпуска - NTYPE in number, -- Тип (0 - Деталь, 1 - Изделие/сборочная единица) + NTYPE in number, -- Тип (см. константы NTASK_TYPE_*) SDETAIL_LIST in varchar2, -- Ссылки на детализацию SMEAS in varchar2 -- Единица измерения ) @@ -1748,33 +1764,24 @@ create or replace package body PKG_P8PANELS_MECHREC as NHAVE_LINK in number := 0 -- Наличие связей с "Маршрутный лист" или "Приход из подразделения" ) return number -- Класс задачи is - NTASK_CLASS PKG_STD.TNUMBER; -- Класс задачи + NTASK_CLASS PKG_STD.TNUMBER; -- Класс задачи (см. константы NCLASS*) begin - /* - Описание классов: - 0 - Без дефицита выпуска (последующий цвет "Зеленый") - 1 - С частичным дефицитом выпуска (последующий цвет "Желто-зелеый") - 2 - С полным дефицитом выпуска (последующий цвет "Желтый") - 3 - С дефицитом запуска или датой меньше текущей (последующий цвет "Красный") - 4 - Дата анализа еще не наступила (последующий цвет "Серый") - 5 - Задача без связи (последующий цвет "Черный") - */ /* Если одна из дат не указана */ if ((DREP_DATE is null) or (DREP_DATE_TO is null)) then /* Если спецификация также не имеет связей */ if (NHAVE_LINK = 0) then - NTASK_CLASS := 5; + NTASK_CLASS := NCLASS_WO_LINKS; end if; else /* Если нет связанных документов */ if (NHAVE_LINK = 0) then /* Если дата запуска меньше текущей даты */ if (DREP_DATE <= sysdate) then - NTASK_CLASS := 3; + NTASK_CLASS := NCLASS_WITH_DEFICIT; end if; /* Если дата больше текущей даты */ if (DREP_DATE > sysdate) then - NTASK_CLASS := 4; + NTASK_CLASS := NCLASS_FUTURE_DATE; end if; end if; end if; @@ -1784,22 +1791,22 @@ create or replace package body PKG_P8PANELS_MECHREC as if (NDEFRESLIZ <> 0) then /* Если дефицит выпуска = 0 */ if (NDEFSTART = 0) then - NTASK_CLASS := 0; + NTASK_CLASS := NCLASS_WO_DEFICIT; else - NTASK_CLASS := 3; + NTASK_CLASS := NCLASS_WITH_DEFICIT; end if; else /* Если дефицит выпуска = 0 */ if (NDEFSTART = 0) then - NTASK_CLASS := 0; + NTASK_CLASS := NCLASS_WO_DEFICIT; else /* Если дефицит запуска = 0 и выпуск факт = 0 */ if ((NDEFRESLIZ = 0) and (NREL_FACT = 0)) then - NTASK_CLASS := 2; + NTASK_CLASS := NCLASS_FULL_DEFICIT; end if; /* Если дефицит запуска = 0 и выпуск факт <> 0 */ if ((NDEFRESLIZ = 0) and (NREL_FACT <> 0)) then - NTASK_CLASS := 1; + NTASK_CLASS := NCLASS_PART_DEFICIT; end if; end if; end if; @@ -1815,28 +1822,19 @@ create or replace package body PKG_P8PANELS_MECHREC as SSORT_FIELD in varchar2, -- Тип сортировки NFCPRODPLAN in number, -- Рег. номер плана NFCPRODPLANSP in number, -- Рег. номер спецификации плана - NTASK_CLASS in number, -- Класс задачи - NTYPE out number, -- Тип задачи (0/1 - для "Дата выпуска", 2/3/4 - для "Дата выпуска") + NTASK_CLASS in number, -- Класс задачи (см. константы NCLASS_*) + NTYPE out number, -- Тип задачи (см. константы NTASK_TYPE_*) SDETAIL_LIST out varchar2 -- Ссылки на детализацию ) is begin - /* - Описание типов: - 0 - Маршрутные листы с развертыванием товарных запасов - 1 - Маршрутные листы с развертыванием комплектаций - 2 - Приход из подразделений - 3 - Приход из подразделений и маршрутные листы - 4 - Маршрутные листы - null - Нет детализации - */ /* Исходим сортировка по "Дата запуска" */ if (SSORT_FIELD = 'DREP_DATE') then - /* Если цвет - красный */ - if (NTASK_CLASS = 3) then + /* Если класс "С дефицитом запуска или датой меньше текущей" */ + if (NTASK_CLASS = NCLASS_WITH_DEFICIT) then /* Проверяем деталь или изделие */ begin - select 1 + select NTASK_TYPE_RL_WITH_DL into NTYPE from DUAL where exists (select null @@ -1845,65 +1843,65 @@ create or replace package body PKG_P8PANELS_MECHREC as and SP.UP_LEVEL = NFCPRODPLANSP); exception when others then - NTYPE := 0; + NTYPE := NTASK_TYPE_RL_WITH_GP; end; /* Проверяем наличие связей с маршрутными листами */ if (LINK_FCROUTLST_CHECK(NCOMPANY => NCOMPANY, NFCPRODPLANSP => NFCPRODPLANSP, NSTATE => 0) = 0) then /* Указываем, что маршрутных листов нет */ SDETAIL_LIST := 'Нет маршрутных листов'; - NTYPE := null; + NTYPE := NTASK_TYPE_EMPTY; else /* Указываем, что маршрутные листы есть */ SDETAIL_LIST := 'Маршрутные листы'; end if; else /* Не отображаем информацию о маршрутных листах */ - NTYPE := null; + NTYPE := NTASK_TYPE_EMPTY; SDETAIL_LIST := null; end if; else /* Исходим от класса */ case - /* Закрашен зеленым */ - when (NTASK_CLASS = 0) then + /* Если класс "Без дефицита выпуска" */ + when (NTASK_CLASS = NCLASS_WO_DEFICIT) then /* Проверяем наличией связей с приходов из подразделений */ if (LINK_INCOMEFROMDEPS_CHECK(NCOMPANY => NCOMPANY, NFCPRODPLANSP => NFCPRODPLANSP, NSTATE => 2) = 0) then /* Указываем, что приходов из подразделений нет */ SDETAIL_LIST := 'Нет приходов из подразделений'; - NTYPE := null; + NTYPE := NTASK_TYPE_EMPTY; else /* Указываем, что приходы из подразделений есть */ SDETAIL_LIST := 'Приход из подразделений'; - NTYPE := 2; + NTYPE := NTASK_TYPE_INC_DEPS; end if; - /* Закрашен желто-зеленым */ - when (NTASK_CLASS = 1) then + /* Если класс "С частичным дефицитом выпуска" */ + when (NTASK_CLASS = NCLASS_PART_DEFICIT) then /* Проверяем наличией связей с приходов из подразделений */ if (LINK_INCOMEFROMDEPS_CHECK(NCOMPANY => NCOMPANY, NFCPRODPLANSP => NFCPRODPLANSP) = 0) then /* Указываем, что приходов из подразделений нет */ SDETAIL_LIST := 'Нет приходов из подразделений'; - NTYPE := null; + NTYPE := NTASK_TYPE_EMPTY; else /* Указываем, что приходы из подразделений есть */ SDETAIL_LIST := 'Приход из подразделений'; - NTYPE := 3; + NTYPE := NTASK_TYPE_INC_DEPS_RL; end if; - /* Закрашен желтым или красным */ - when ((NTASK_CLASS = 2) or (NTASK_CLASS = 3)) then + /* Если класс "С дефицитом запуска или датой меньше текущей" или "С полным дефицитом выпуска" */ + when ((NTASK_CLASS = NCLASS_FULL_DEFICIT) or (NTASK_CLASS = NCLASS_WITH_DEFICIT)) then /* Проверяем наличие связей с маршрутными листами */ if (LINK_FCROUTLST_CHECK(NCOMPANY => NCOMPANY, NFCPRODPLANSP => NFCPRODPLANSP, NSTATE => 1) = 0) then /* Указываем, что маршрутных листов нет */ SDETAIL_LIST := 'Нет маршрутных листов'; - NTYPE := null; + NTYPE := NTASK_TYPE_EMPTY; else /* Указываем, что маршрутные листы есть */ SDETAIL_LIST := 'Маршрутные листы'; - NTYPE := 4; + NTYPE := NTASK_TYPE_RL; end if; /* Класс не поддерживается */ else /* Для данных классов ничего не выводится */ - NTYPE := null; + NTYPE := NTASK_TYPE_EMPTY; SDETAIL_LIST := null; end case; end if; @@ -1912,7 +1910,7 @@ create or replace package body PKG_P8PANELS_MECHREC as /* Формирование цветовых характеристик для задачи */ procedure GET_TASK_COLORS ( - NTASK_CLASS in number, -- Класс задачи + NTASK_CLASS in number, -- Класс задачи (см. константы NCLASS_*) STASK_BG_COLOR out varchar2, -- Цвет заливки спецификации STASK_BG_PROGRESS_COLOR out varchar2, -- Цвет заливки прогресса спецификации STASK_TEXT_COLOR in out varchar2 -- Цвет текста @@ -1921,33 +1919,33 @@ create or replace package body PKG_P8PANELS_MECHREC as begin /* Исходим от класса задачи */ case NTASK_CLASS - /* Полностью зеленый */ - when 0 then + /* Без дефицита выпуска */ + when NCLASS_WO_DEFICIT then STASK_BG_COLOR := SBG_COLOR_GREEN; STASK_TEXT_COLOR := STEXT_COLOR_GREY; STASK_BG_PROGRESS_COLOR := null; - /* Частично зелёный, прогресс жёлтый */ - when 1 then + /* С частичным дефицитом выпуска */ + when NCLASS_PART_DEFICIT then STASK_BG_COLOR := SBG_COLOR_GREEN; STASK_BG_PROGRESS_COLOR := SBG_COLOR_YELLOW; STASK_TEXT_COLOR := STEXT_COLOR_GREY; - /* Полностью жёлтый */ - when 2 then + /* С полным дефицитом выпуска */ + when NCLASS_FULL_DEFICIT then STASK_BG_COLOR := SBG_COLOR_YELLOW; STASK_TEXT_COLOR := null; STASK_BG_PROGRESS_COLOR := null; - /* Полностью красный */ - when 3 then + /* С дефицитом запуска или датой меньше текущей */ + when NCLASS_WITH_DEFICIT then STASK_BG_COLOR := SBG_COLOR_RED; STASK_TEXT_COLOR := null; STASK_BG_PROGRESS_COLOR := null; - /* Полностью серый */ - when 4 then + /* Дата анализа еще не наступила */ + when NCLASS_FUTURE_DATE then STASK_BG_COLOR := SBG_COLOR_GREY; STASK_TEXT_COLOR := null; STASK_BG_PROGRESS_COLOR := null; - /* Полностью черный */ - when 5 then + /* Задача без связи */ + when NCLASS_WO_LINKS then STASK_BG_COLOR := SBG_COLOR_BLACK; STASK_TEXT_COLOR := STEXT_COLOR_ORANGE; STASK_BG_PROGRESS_COLOR := null; @@ -2075,8 +2073,8 @@ create or replace package body PKG_P8PANELS_MECHREC as STASK_BG_COLOR => STASK_BG_COLOR, STASK_BG_PROGRESS_COLOR => STASK_BG_PROGRESS_COLOR, STASK_TEXT_COLOR => STASK_TEXT_COLOR); - /* Если класс задачи "1" */ - if (NTASK_CLASS = 1) then + /* Если класс задачи "С частичным дефицитом выпуска" */ + if (NTASK_CLASS = NCLASS_PART_DEFICIT) then /* Определяем пропорции прогресса */ NTASK_PROGRESS := ROUND(C.NREL_FACT / C.NMAIN_QUANT * 100); else