2024-02-05 16:51:24 +03:00
create or replace package PKG_P8PANELS_MECHREC as
2024-05-09 17:41:14 +03:00
/* Проверка соответствия подразделения документа подразделению пользователя */
function UTL_SUBDIV_CHECK
(
NCOMPANY in number , -- Р е г . номер организации
NSUBDIV in number , -- Р е г . номер подразделения
SUSER in varchar2 -- Имя пользователя
) return number ; -- Подразделение подходит (0 - нет, 1 - да)
/* Проверка соответствия подразделения документа подразделению пользователя (по иерархии) */
function UTL_SUBDIV_HIER_CHECK
2024-07-10 15:41:09 +03:00
(
NCOMPANY in number , -- Р е г . номер организации
NSUBDIV in number , -- Р е г . номер подразделения
SUSER in varchar2 , -- Имя пользователя
NSTART_SUBDIV in number : = null -- Р е г . номер родительского подразделения
) return number ; -- Подразделение подходит (0 - нет, 1 - да)
/* Проверка наличия станка "В эксплуатации" в иерархии цеха */
function UTL_INS_DEP_HIER_EQ_CHECK
2024-05-09 17:41:14 +03:00
(
NCOMPANY in number , -- Р е г . номер организации
2024-07-10 15:41:09 +03:00
NINS_DEPARTMENT in number , -- Р е г . номер подразделения (цеха)
DDATE_TO in date -- Дата по
) return number ; -- Результат (0 - станка нет, 1 - станок есть)
/* Считывание количества рабочих часов с учетом перерыва */
function UTL_WORK_TIME_GET
(
NTBOPERMODESP in number -- Р е г . номер смены
) return number ; -- Количество рабочих часов
2024-02-14 15:18:50 +03:00
2024-03-18 15:58:40 +03:00
/* Получение таблицы ПиП на основании маршрутного листа, связанных с о спецификацией плана */
procedure INCOMEFROMDEPS_DG_GET
(
NFCPRODPLANSP in number , -- Р е г . номер связанной спецификации плана
NTYPE in number , -- Тип спецификации плана (2 - Н е включать "Состояние", 3 - включать)
NPAGE_NUMBER in number , -- Номер страницы (игнорируется при NPAGE_SIZE=0)
NPAGE_SIZE in number , -- Количество записей на странице (0 - все)
CORDERS in clob , -- Сортировки
NINCLUDE_DEF in number , -- Признак включения описания колонок таблицы в ответ
COUT out clob -- Сериализованная таблица данных
) ;
/* Получение строк комплектации на основании маршрутного листа */
procedure FCDELIVERYLISTSP_DG_GET
(
NFCROUTLST in number , -- Р е г . номер маршрутного листа
NPAGE_NUMBER in number , -- Номер страницы (игнорируется при NPAGE_SIZE=0)
NPAGE_SIZE in number , -- Количество записей на странице (0 - все)
CORDERS in clob , -- Сортировки
NINCLUDE_DEF in number , -- Признак включения описания колонок таблицы в ответ
COUT out clob -- Сериализованная таблица данных
) ;
/* Получение товарных запасов на основании маршрутного листа */
procedure GOODSPARTIES_DG_GET
(
2024-05-09 17:41:14 +03:00
NFCROUTLST in number , -- Р е г . номер маршрутного листа
NPAGE_NUMBER in number , -- Номер страницы (игнорируется при NPAGE_SIZE=0)
NPAGE_SIZE in number , -- Количество записей на странице (0 - все)
CORDERS in clob , -- Сортировки
NINCLUDE_DEF in number , -- Признак включения описания колонок таблицы в ответ
COUT out clob -- Сериализованная таблица данных
2024-03-18 15:58:40 +03:00
) ;
/* Получение таблицы маршрутных листов, связанных с о спецификацией плана с учетом типа */
procedure FCROUTLST_DG_GET
(
NFCPRODPLANSP in number , -- Р е г . номер связанной спецификации плана
NTYPE in number , -- Тип спецификации плана (0 - Деталь, 1 - Изделие/сборочная единица, 3/4 - ПиП)
NPAGE_NUMBER in number , -- Номер страницы (игнорируется при NPAGE_SIZE=0)
NPAGE_SIZE in number , -- Количество записей на странице (0 - все)
CORDERS in clob , -- Сортировки
NINCLUDE_DEF in number , -- Признак включения описания колонок таблицы в ответ
COUT out clob -- Сериализованная таблица данных
) ;
2024-02-05 16:51:24 +03:00
/* Получение списка спецификаций планов и отчетов производства изделий для диаграммы Ганта */
procedure FCPRODPLANSP_GET
(
2024-02-14 15:18:50 +03:00
NCRN in number , -- Р е г . номер каталога
NLEVEL in number : = null , -- Уровень отбора
SSORT_FIELD in varchar2 : = ' DREP_DATE_TO ' , -- Поле сортировки
2024-04-03 16:11:04 +03:00
COUT out clob , -- Список задач
2024-02-14 15:18:50 +03:00
NMAX_LEVEL out number -- Максимальный уровень иерархии
2024-02-05 16:51:24 +03:00
) ;
2024-03-18 15:58:40 +03:00
2024-05-23 16:26:35 +03:00
/* Инициализация каталогов раздела "Планы и отчеты производства изделий" для панели "Производственная программа" */
procedure FCPRODPLAN_PP_CTLG_INIT
2024-02-05 16:51:24 +03:00
(
2024-02-14 15:18:50 +03:00
COUT out clob -- Список каталогов раздела "Планы и отчеты производства изделий"
2024-02-05 16:51:24 +03:00
) ;
2024-05-09 17:41:14 +03:00
/* Изменение приоритета партии маршрутного листа */
procedure FCROUTLST_PRIOR_PARTY_UPDATE
(
NFCROUTLST in number , -- Р е г . номер маршрутного листа
SPRIOR_PARTY in varchar -- Новое значение приоритета партии
) ;
/* Получение таблицы маршрутных листов, связанных с о спецификацией плана */
procedure FCROUTLST_DEPT_DG_GET
(
NFCPRODPLANSP in number , -- Р е г . номер связанной спецификации плана
NPAGE_NUMBER in number , -- Номер страницы (игнорируется при NPAGE_SIZE=0)
NPAGE_SIZE in number , -- Количество записей на странице (0 - все)
CORDERS in clob , -- Сортировки
NINCLUDE_DEF in number , -- Признак включения описания колонок таблицы в ответ
COUT out clob -- Сериализованная таблица данных
) ;
2024-05-30 15:54:31 +03:00
/* Получение таблицы строк маршрутного листа */
procedure FCROUTLSTSP_DEPT_DG_GET
2024-05-09 17:41:14 +03:00
(
NFCROUTLST in number , -- Р е г . номер маршрутного листа
NPAGE_NUMBER in number , -- Номер страницы (игнорируется при NPAGE_SIZE=0)
NPAGE_SIZE in number , -- Количество записей на странице (0 - все)
CORDERS in clob , -- Сортировки
NINCLUDE_DEF in number , -- Признак включения описания колонок таблицы в ответ
COUT out clob -- Сериализованная таблица данных
) ;
/* Получение таблицы ПиП на основании маршрутного листа, связанных с о спецификацией плана */
procedure INCOMEFROMDEPS_DEPT_DG_GET
(
NFCPRODPLANSP in number , -- Р е г . номер связанной спецификации плана
NPAGE_NUMBER in number , -- Номер страницы (игнорируется при NPAGE_SIZE=0)
NPAGE_SIZE in number , -- Количество записей на странице (0 - все)
CORDERS in clob , -- Сортировки
NINCLUDE_DEF in number , -- Признак включения описания колонок таблицы в ответ
COUT out clob -- Сериализованная таблица данных
) ;
/* Получение таблицы спецификаций планов и отчетов производства изделий */
procedure FCPRODPLANSP_DEPT_DG_GET
(
NFCPRODPLAN in number , -- Р е г . номер планов и отчетов производства изделий
NPAGE_NUMBER in number , -- Номер страницы (игнорируется при NPAGE_SIZE=0)
NPAGE_SIZE in number , -- Количество записей на странице (0 - все)
CORDERS in clob , -- Сортировки
NINCLUDE_DEF in number , -- Признак включения описания колонок таблицы в ответ
COUT out clob -- Сериализованная таблица данных
) ;
/* Инициализация записей раздела "Планы и отчеты производства изделий" */
procedure FCPRODPLAN_DEPT_INIT
(
COUT out clob -- Список записей раздела "Планы и отчеты производства изделий"
) ;
2024-07-10 15:41:09 +03:00
/* Выдать задания сменного задания */
2024-05-09 17:41:14 +03:00
procedure FCJOBSSP_ISSUE
(
2024-07-10 15:41:09 +03:00
NFCJOBS in number -- Р е г . номер сменного задания
2024-05-09 17:41:14 +03:00
) ;
2024-07-10 15:41:09 +03:00
/* Исключение станка из операции сменного задания */
procedure FCJOBSSP_EXC_EQCONFIG
2024-05-09 17:41:14 +03:00
(
2024-07-10 15:41:09 +03:00
NFCJOBSSP in number -- Р е г . номер строки сменного задания
2024-05-09 17:41:14 +03:00
) ;
2024-07-10 15:41:09 +03:00
/* Включение станка в строку сменного задания */
procedure FCJOBSSP_INC_EQCONFIG
2024-05-09 17:41:14 +03:00
(
2024-07-10 15:41:09 +03:00
NEQCONFIG in number , -- Р е г . номер состава оборудования
NFCJOBSSP in number , -- Р е г . номер строки сменного задания
NQUANT_PLAN in number -- Включаемое количество
2024-05-09 17:41:14 +03:00
) ;
2024-07-10 15:41:09 +03:00
/* Получение составов оборудования подразделения */
procedure EQCONFIG_DG_GET
2024-05-09 17:41:14 +03:00
(
2024-08-21 17:19:18 +03:00
NFCJOBS in number , -- Р е г . номер сменного задания
NFROM_ACTION in number : = 0 , -- Признак запуска из действия раздела (false - нет, true - да)
NPAGE_NUMBER in number , -- Номер страницы (игнорируется при NPAGE_SIZE=0)
NPAGE_SIZE in number , -- Количество записей на странице (0 - все)
CORDERS in clob , -- Сортировки
NINCLUDE_DEF in number , -- Признак включения описания колонок таблицы в ответ
COUT out clob -- Сериализованная таблица данных
2024-05-09 17:41:14 +03:00
) ;
2024-07-10 15:41:09 +03:00
/* Получение спецификации сменного задания */
2024-05-09 17:41:14 +03:00
procedure FCJOBSSP_DG_GET
(
NFCJOBS in number , -- Р е г . номер сменного задания
NPAGE_NUMBER in number , -- Номер страницы (игнорируется при NPAGE_SIZE=0)
NPAGE_SIZE in number , -- Количество записей на странице (0 - все)
CORDERS in clob , -- Сортировки
NINCLUDE_DEF in number , -- Признак включения описания колонок таблицы в ответ
COUT out clob -- Сериализованная таблица данных
) ;
/* Инициализация записей раздела "Планы и отчеты производства изделий" */
procedure FCJOBS_INIT
(
2024-08-21 17:19:18 +03:00
NFCJOBS in number : = null , -- Р е г . номер записи (если вызов из действия раздела)
COUT out clob -- Список записей раздела "Сменные задания"
2024-05-09 17:41:14 +03:00
) ;
2024-07-10 15:41:09 +03:00
/* Получение количества рабочих часов в сменах подразделения */
procedure INS_DEPARTMENT_WORKHOURS_GET
(
NSUBDIV in number , -- Р е г . номер подразделения
NWORKHOURS out number -- Количество рабочих часов
) ;
/* Получение количества рабочих дней месяца */
procedure ENPERIOD_WORKDAYS_GET
(
SMONTH_YEAR in varchar2 , -- Строковое представления месяца и года в формате (mm.yyyy)
NWORKDAYS out number -- Количество рабочих дней
) ;
/* Получение таблицы доступных подразделений (цехов) */
procedure INS_DEPARTMENT_DG_GET
(
SMONTH_YEAR in varchar2 , -- Строковое представления месяца и года в формате (mm.yyyy)
NPAGE_NUMBER in number , -- Номер страницы (игнорируется при NPAGE_SIZE=0)
NPAGE_SIZE in number , -- Количество записей на странице (0 - все)
NINCLUDE_DEF in number , -- Признак включения описания колонок таблицы в ответ
COUT out clob -- Сериализованная таблица данных
) ;
2024-05-09 17:41:14 +03:00
/* Получение загрузки цеха */
procedure FCJOBS_DEP_LOAD_DG_GET
(
2024-07-10 15:41:09 +03:00
NSUBDIV in number , -- Р е г . номер подразделения (цеха)
SMONTH_YEAR in varchar2 , -- Строковое представления месяца и года в формате (mm.yyyy)
NWORKHOURS in number , -- Количество рабочих часов
NPAGE_NUMBER in number , -- Номер страницы (игнорируется при NPAGE_SIZE=0)
NPAGE_SIZE in number , -- Количество записей на странице (0 - все)
CORDERS in clob , -- Сортировки
NINCLUDE_DEF in number , -- Признак включения описания колонок таблицы в ответ
COUT out clob -- Сериализованная таблица данных
2024-05-09 17:41:14 +03:00
) ;
2024-05-08 15:50:34 +03:00
2024-07-10 15:41:09 +03:00
/* Получение таблицы маршрутных листов связанной записи "Производственная программа" */
procedure FCROUTLST_DG_BY_LINKED_GET
2024-05-08 15:50:34 +03:00
(
2024-07-10 15:41:09 +03:00
NFCPRODPLANSP in number , -- Р е г . номер связанной строки плана
2024-05-08 15:50:34 +03:00
NPAGE_NUMBER in number , -- Номер страницы (игнорируется при NPAGE_SIZE=0)
NPAGE_SIZE in number , -- Количество записей на странице (0 - все)
CORDERS in clob , -- Сортировки
NINCLUDE_DEF in number , -- Признак включения описания колонок таблицы в ответ
COUT out clob -- Сериализованная таблица данных
) ;
2024-07-10 15:41:09 +03:00
/* Получение таблицы комплектовочных ведомостей связанной записи "Производственная программа" */
procedure FCDELIVSH_DG_BY_LINKED_GET
2024-05-08 15:50:34 +03:00
(
2024-07-10 15:41:09 +03:00
NFCPRODPLANSP in number , -- Р е г . номер связанной строки плана
2024-05-08 15:50:34 +03:00
NPAGE_NUMBER in number , -- Номер страницы (игнорируется при NPAGE_SIZE=0)
NPAGE_SIZE in number , -- Количество записей на странице (0 - все)
CORDERS in clob , -- Сортировки
NINCLUDE_DEF in number , -- Признак включения описания колонок таблицы в ответ
COUT out clob -- Сериализованная таблица данных
) ;
/* Получение таблицы записей "Планы и отчеты производства изделий" */
procedure FCPRODPLAN_GET
(
NCRN in number , -- Р е г . номер каталога
COUT out clob -- Сериализованная таблица данных
) ;
2024-05-23 16:26:35 +03:00
/* Инициализация каталогов раздела "Планы и отчеты производства изделий" для панели "Мониторинг сборки изделий" */
procedure FCPRODPLAN_AM_CTLG_INIT
2024-05-08 15:50:34 +03:00
(
COUT out clob -- Список каталогов раздела "Планы и отчеты производства изделий"
) ;
2024-02-05 16:51:24 +03:00
2024-05-18 00:56:32 +03:00
/* Считывание деталей производственного состава */
procedure FCPRODCMP_DETAILS_GET
(
2024-07-10 15:41:09 +03:00
NFCPRODPLANSP in number , -- Р е г . номер строки плана
2024-05-18 00:56:32 +03:00
COUT out clob -- Сериализованная таблица данных
) ;
2024-02-05 16:51:24 +03:00
end PKG_P8PANELS_MECHREC ;
/
create or replace package body PKG_P8PANELS_MECHREC as
/* Константы - цвета отображения */
2024-04-03 16:11:04 +03:00
SBG_COLOR_RED constant PKG_STD . TSTRING : = ' #ff000080 ' ; -- Цвет заливки красный
SBG_COLOR_YELLOW constant PKG_STD . TSTRING : = ' #e0db4480 ' ; -- Цвет заливки желтый
SBG_COLOR_GREEN constant PKG_STD . TSTRING : = ' #90ee9080 ' ; -- Цвет заливки зеленый
SBG_COLOR_GREY constant PKG_STD . TSTRING : = ' #d3d3d380 ' ; -- Цвет заливки серый
SBG_COLOR_BLACK constant PKG_STD . TSTRING : = ' #00000080 ' ; -- Цвет заливки черный
STEXT_COLOR_ORANGE constant PKG_STD . TSTRING : = ' #FF8C00 ' ; -- Цвет текста оранжевый
STEXT_COLOR_GREY constant PKG_STD . TSTRING : = ' #555 ' ; -- Цвет текста серый
2024-05-08 15:50:34 +03:00
/* Константы - параметры отборов планов ("Производственная программа") */
2024-02-14 15:18:50 +03:00
NFCPRODPLAN_CATEGORY constant PKG_STD . TNUMBER : = 1 ; -- Категория планов "Производственная программа"
NFCPRODPLAN_STATUS constant PKG_STD . TNUMBER : = 2 ; -- Статус планов "Утвержден"
SFCPRODPLAN_TYPE constant PKG_STD . TSTRING : = ' План ' ; -- Тип планов (мнемокод состояния)
2024-05-06 16:23:17 +03:00
NMAX_TASKS constant PKG_STD . TNUMBER : = 10000 ; -- Максимальное количество отображаемых задач
2024-05-08 15:50:34 +03:00
2024-05-07 17:37:23 +03:00
/* Константы - классы задач плана ("Производственная программа") */
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 ; -- Задача без связи
2024-05-08 15:50:34 +03:00
2024-05-07 17:37:23 +03:00
/* Константы - типы задач плана, содержание детализации ("Производственная программа") */
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 ; -- Нет детализации
2024-05-08 15:50:34 +03:00
2024-07-10 15:41:09 +03:00
/* Константы - типы дней ("Загрузка цеха") */
NDAY_TYPE_WORK_AFTER constant PKG_STD . TNUMBER : = 0 ; -- Рабочий день после текущей даты
NDAY_TYPE_HOLIDAY_AFTER constant PKG_STD . TNUMBER : = 1 ; -- Выходной день после текущей даты
NDAY_TYPE_WORK_BEFORE constant PKG_STD . TNUMBER : = 2 ; -- Рабочий день до текущей даты
NDAY_TYPE_HOLIDAY_BEFORE constant PKG_STD . TNUMBER : = 3 ; -- Выходной день до текущей даты
NDAY_TYPE_CURRENT_DAY constant PKG_STD . TNUMBER : = 4 ; -- Текущий день
/* Константы - параметры отборов планов ("Производственный план цеха") */
2024-05-09 17:41:14 +03:00
NFCPRODPLAN_DEPT_CTGR constant PKG_STD . TNUMBER : = 2 ; -- Категория планов "Цеховой план"
2024-05-08 15:50:34 +03:00
/* Константы - параметры отборов планов ("Мониторинг сборки изделий") */
2024-05-09 17:41:14 +03:00
NFCPRODPLAN_CATEGORY_MON constant PKG_STD . TNUMBER : = 0 ; -- Категория планов "Первичный документ"
NFCPRODPLAN_STATUS_MON constant PKG_STD . TNUMBER : = 2 ; -- Статус планов "Утвержден"
SFCPRODPLAN_TYPE_MON constant PKG_STD . TSTRING : = ' План ' ; -- Тип планов (мнемокод состояния)
2024-05-08 15:50:34 +03:00
2024-07-10 15:41:09 +03:00
/* Константы - мнемокоды ед. измерения */
2024-05-09 17:41:14 +03:00
SDICMUNTS_WD constant PKG_STD . TSTRING : = ' Ч/Ч ' ; -- Мнемокод ед. измерения нормочасов
2024-07-10 15:41:09 +03:00
SDICMUNTS_MIN constant PKG_STD . TSTRING : = ' МИН ' ; -- Мнемокод ед. измерения минут
SDICMUNTS_DAY constant PKG_STD . TSTRING : = ' Д ' ; -- Мнемокод ед. измерения дней
2024-05-09 17:41:14 +03:00
/* Константы - параметры отборов сменных заданий */
2024-07-10 15:41:09 +03:00
NFCJOBS_STATUS_NOT_WO constant PKG_STD . TNUMBER : = 0 ; -- Статус сменного задания "Н е отработано"
2024-05-07 17:37:23 +03:00
2024-02-05 16:51:24 +03:00
/* Константы - дополнительные атрибуты */
2024-03-18 15:58:40 +03:00
STASK_ATTR_START_FACT constant PKG_STD . TSTRING : = ' start_fact ' ; -- Запущено
STASK_ATTR_MAIN_QUANT constant PKG_STD . TSTRING : = ' main_quant ' ; -- Количество план
STASK_ATTR_REL_FACT constant PKG_STD . TSTRING : = ' rel_fact ' ; -- Количество сдано
STASK_ATTR_REP_DATE_TO constant PKG_STD . TSTRING : = ' rep_date_to ' ; -- Дата выпуска план
STASK_ATTR_DL constant PKG_STD . TSTRING : = ' detail_list ' ; -- Связанные документы
STASK_ATTR_TYPE constant PKG_STD . TSTRING : = ' type ' ; -- Тип (0 - Деталь, 1 - Изделие/сборочная единица)
2024-04-03 16:11:04 +03:00
STASK_ATTR_MEAS constant PKG_STD . TSTRING : = ' meas ' ; -- Единица измнения
2024-05-09 17:41:14 +03:00
/* Константы - дополнительные параметры */
2024-05-30 15:54:31 +03:00
SCOL_PATTERN_DATE constant PKG_STD . TSTRING : = ' dd_mm_yyyy ' ; -- Паттерн для динамической колонки граф ("де нь_ме с яц_г о д")
SFCROUTLSTSP_STATE_DOMAIN constant PKG_STD . TSTRING : = ' TFCROUTLSTSP_STATE ' ; -- Мнемокод домена состояния спецификации маршрутного листа
2024-05-18 00:56:32 +03:00
/* Константы - типовые присоединённые документы */
SFLINKTYPE_PREVIEW constant PKG_STD . TSTRING : = ' Предпросмотр ' ; -- Тип ПД для изображений предпросмотра
SFLINKTYPE_SVG_MODEL constant PKG_STD . TSTRING : = ' Векторная модель ' ; -- Тип ПД для SVG-модели
/* Константы - дополнительные свойства */
SDP_MODEL_ID constant PKG_STD . TSTRING : = ' ПУДП.MODEL_ID ' ; -- Идентификатор в SVG-модели
SDP_MODEL_BG_COLOR constant PKG_STD . TSTRING : = ' ПУДП.MODEL_BG_COLOR ' ; -- Цвет заливки в SVG-модели
2024-05-09 17:41:14 +03:00
/* Экземпляр дня загрузки цеха */
type TJOB_DAY is record
(
DDATE PKG_STD . TLDATE , -- Дата дня загрузки цеха
NVALUE PKG_STD . TQUANT , -- Значение доли трудоемкости смены
NTYPE PKG_STD . TNUMBER -- Тип дня (0 - выполняемый, 1 - выполненный)
) ;
2024-04-25 18:38:26 +03:00
2024-05-09 17:41:14 +03:00
/* Коллекция дней загрузки цеха */
type TJOB_DAYS is table of TJOB_DAY ;
/* Добавление дня в коллекцию дней загрузки цеха */
procedure TJOB_DAYS_ADD
(
TDAYS in out nocopy TJOB_DAYS , -- Коллекция дней загрузки цеха
DDATE in date , -- Дата дня загрузки цеха
NVALUE in number , -- Значение доли трудоемкости смены
NTYPE in number , -- Тип дня (0 - выполняемый, 1 - выполненный)
BCLEAR in boolean : = false -- Признак очистки результирующей коллекции перед добавлением таблицы
)
is
begin
/* Инициализируем коллекцию таблиц документа */
if ( ( TDAYS is null ) or ( BCLEAR ) ) then
TDAYS : = TJOB_DAYS ( ) ;
end if ;
/* Добавляем таблицу к документу */
TDAYS . EXTEND ( ) ;
TDAYS ( TDAYS . LAST ) . DDATE : = DDATE ;
TDAYS ( TDAYS . LAST ) . NVALUE : = NVALUE ;
TDAYS ( TDAYS . LAST ) . NTYPE : = NTYPE ;
end TJOB_DAYS_ADD ;
2024-03-18 15:58:40 +03:00
/* Инциализация списка маршрутных листов (с иерархией) */
procedure UTL_FCROUTLST_IDENT_INIT
(
2024-05-09 17:41:14 +03:00
NFCPRODPLANSP in number , -- Р е г . номер связанной спецификации плана
NIDENT out number -- Идентификатор отмеченных записей
2024-03-18 15:58:40 +03:00
)
is
/* Рекурсивная процедура формирования списка маршрутных листов */
procedure PUT_FCROUTLST
(
2024-05-09 17:41:14 +03:00
NIDENT in number , -- Идентификатор отмеченных записей
NFCROUTLST in number -- Р е г . номер маршрутного листа
2024-03-18 15:58:40 +03:00
)
is
2024-05-09 17:41:14 +03:00
NTMP PKG_STD . TNUMBER ; -- Буфер
2024-03-18 15:58:40 +03:00
begin
/* Добавление в список */
begin
P_SELECTLIST_INSERT ( NIDENT = > NIDENT , NDOCUMENT = > NFCROUTLST , SUNITCODE = > ' CostRouteLists ' , NRN = > NTMP ) ;
exception
when others then
return ;
end ;
/* Маршрутные листы, связанные с о строками добавленного */
for RLST in ( select distinct L . OUT_DOCUMENT as RN
from FCROUTLSTSP LS ,
DOCLINKS L
where LS . PRN = NFCROUTLST
and L . IN_DOCUMENT = LS . RN
and L . IN_UNITCODE = ' CostRouteListsSpecs '
and L . OUT_UNITCODE = ' CostRouteLists ' )
loop
/* Добавляем по данному листу */
PUT_FCROUTLST ( NIDENT = > NIDENT , NFCROUTLST = > RLST . RN ) ;
end loop ;
end PUT_FCROUTLST ;
begin
/* Генерируем идентификатор */
NIDENT : = GEN_IDENT ( ) ;
/* Цикл по связанным напрямую маршрутным листам */
for RLST in ( select D . RN
from FCROUTLST D
where D . RN in ( select L . OUT_DOCUMENT
from DOCLINKS L
where L . IN_DOCUMENT = NFCPRODPLANSP
and L . IN_UNITCODE = ' CostProductPlansSpecs '
and L . OUT_UNITCODE = ' CostRouteLists ' ) )
loop
/* Рекурсивная процедура формирования списка маршрутных листов */
PUT_FCROUTLST ( NIDENT = > NIDENT , NFCROUTLST = > RLST . RN ) ;
end loop ;
end UTL_FCROUTLST_IDENT_INIT ;
2024-05-09 17:41:14 +03:00
/* Считывание записи маршрутного листа */
procedure UTL_FCROUTLST_GET
(
NFCROUTLST in number , -- Р е г . номер маршрутного листа
RFCROUTLST out FCROUTLST % rowtype -- Запись маршрутного листа
)
is
begin
/* Считываем запись маршрутного листа */
begin
select T . * into RFCROUTLST from FCROUTLST T where T . RN = NFCROUTLST ;
exception
when others then
PKG_MSG . RECORD_NOT_FOUND ( NFLAG_SMART = > 0 , NDOCUMENT = > NFCROUTLST , SUNIT_TABLE = > ' FCROUTLST ' ) ;
end ;
end UTL_FCROUTLST_GET ;
2024-07-10 15:41:09 +03:00
/* Считывания р е г . номера подразделения пользователя */
function UTL_SUBDIV_RN_GET
2024-05-09 17:41:14 +03:00
(
NCOMPANY in number , -- Р е г . номер организации
SUSER in varchar2 -- Имя пользователя
2024-07-10 15:41:09 +03:00
) return number -- Р е г . номер подразделения
2024-05-09 17:41:14 +03:00
is
2024-07-10 15:41:09 +03:00
NRESULT PKG_STD . TNUMBER ; -- Р е г . номер подразделения
2024-05-09 17:41:14 +03:00
NVERSION PKG_STD . TREF ; -- Версия контрагентов
begin
/* Считываем версию контрагентов */
FIND_VERSION_BY_COMPANY ( NCOMPANY = > NCOMPANY , SUNITCODE = > ' AGNLIST ' , NVERSION = > NVERSION ) ;
2024-07-10 15:41:09 +03:00
/* Проверяем подразделение по исполнению сотрудника пользователя */
2024-05-09 17:41:14 +03:00
begin
2024-07-10 15:41:09 +03:00
select C . DEPTRN
into NRESULT
from CLNPSPFM C ,
CLNPSPFMTYPES CT
2024-05-09 17:41:14 +03:00
where exists ( select null
from CLNPERSONS CP
where exists ( select null
from AGNLIST T
where T . PERS_AUTHID = SUSER
and CP . PERS_AGENT = T . RN
and T . VERSION = NVERSION )
and C . PERSRN = CP . RN
and CP . COMPANY = NCOMPANY )
and C . COMPANY = NCOMPANY
and C . BEGENG < = sysdate
and ( C . ENDENG > = sysdate or C . ENDENG is null )
and C . CLNPSPFMTYPES = CT . RN
and CT . IS_PRIMARY = 1
and ROWNUM = 1 ;
exception
when others then
2024-07-10 15:41:09 +03:00
NRESULT : = 0 ;
2024-05-09 17:41:14 +03:00
end ;
/* Возвращаем результат */
2024-07-10 15:41:09 +03:00
return NRESULT ;
end UTL_SUBDIV_RN_GET ;
2024-05-09 17:41:14 +03:00
/* Проверка соответствия подразделения документа подразделению пользователя */
function UTL_SUBDIV_CHECK
(
NCOMPANY in number , -- Р е г . номер организации
NSUBDIV in number , -- Р е г . номер подразделения
SUSER in varchar2 -- Имя пользователя
) return number -- Подразделение подходит (0 - нет, 1 - да)
is
NRESULT PKG_STD . TNUMBER ; -- Подразделение подходит (0 - нет, 1 - да)
NVERSION PKG_STD . TREF ; -- Версия контрагентов
begin
/* Если р е г . номер подразделения пустой */
if ( NSUBDIV is null ) then
/* Возвращаем 0 */
return 0 ;
end if ;
/* Считываем версию контрагентов */
FIND_VERSION_BY_COMPANY ( NCOMPANY = > NCOMPANY , SUNITCODE = > ' AGNLIST ' , NVERSION = > NVERSION ) ;
/* Проверяем подразделение по исполнению сотрудника пользователя */
begin
select 1
into NRESULT
from DUAL
where NSUBDIV in ( select C . DEPTRN
from CLNPSPFM C ,
CLNPSPFMTYPES CT
where exists ( select null
from CLNPERSONS CP
where exists ( select null
from AGNLIST T
where T . PERS_AUTHID = SUSER
and CP . PERS_AGENT = T . RN
and T . VERSION = NVERSION )
and C . PERSRN = CP . RN
and CP . COMPANY = NCOMPANY )
and C . COMPANY = NCOMPANY
and C . BEGENG < = sysdate
and ( C . ENDENG > = sysdate or C . ENDENG is null )
and C . CLNPSPFMTYPES = CT . RN
and CT . IS_PRIMARY = 1 ) ;
exception
when others then
NRESULT : = 0 ;
end ;
/* Возвращаем результат */
return NRESULT ;
end UTL_SUBDIV_CHECK ;
/* Проверка соответствия подразделения документа подразделению пользователя (по иерархии) */
function UTL_SUBDIV_HIER_CHECK
(
2024-07-10 15:41:09 +03:00
NCOMPANY in number , -- Р е г . номер организации
NSUBDIV in number , -- Р е г . номер подразделения
SUSER in varchar2 , -- Имя пользователя
NSTART_SUBDIV in number : = null -- Р е г . номер родительского подразделения
) return number -- Подразделение подходит (0 - нет, 1 - да)
2024-05-09 17:41:14 +03:00
is
2024-07-10 15:41:09 +03:00
NRESULT PKG_STD . TNUMBER ; -- Подразделение подходит (0 - нет, 1 - да)
NVERSION PKG_STD . TREF ; -- Версия контрагентов
2024-05-09 17:41:14 +03:00
begin
/* Если р е г . номер подразделения пустой */
if ( NSUBDIV is null ) then
/* Возвращаем 0 */
return 0 ;
end if ;
2024-07-10 15:41:09 +03:00
/* Если родительское подразделение не задано */
if ( NSTART_SUBDIV is null ) then
/* Считываем версию контрагентов */
FIND_VERSION_BY_COMPANY ( NCOMPANY = > NCOMPANY , SUNITCODE = > ' AGNLIST ' , NVERSION = > NVERSION ) ;
/* Проверяем подразделение по исполнению сотрудника пользователя */
begin
select 1
into NRESULT
from DUAL
where exists ( select null
from INS_DEPARTMENT T ,
( select C . DEPTRN
from CLNPSPFM C ,
CLNPSPFMTYPES CT
where exists ( select null
from CLNPERSONS CP
where exists ( select null
from AGNLIST T
where T . PERS_AUTHID = SUSER
and CP . PERS_AGENT = T . RN
and T . VERSION = NVERSION )
and C . PERSRN = CP . RN
and CP . COMPANY = NCOMPANY )
and C . COMPANY = NCOMPANY
and C . BEGENG < = sysdate
and ( C . ENDENG > = sysdate or C . ENDENG is null )
and C . CLNPSPFMTYPES = CT . RN
and CT . IS_PRIMARY = 1 ) TMP
where T . RN = NSUBDIV
and ROWNUM = 1
start with T . RN = TMP . DEPTRN
connect by prior T . RN = T . PRN ) ;
exception
when others then
NRESULT : = 0 ;
end ;
else
/* Проверяем подразделение по исполнению сотрудника пользователя */
begin
select 1
into NRESULT
from DUAL
where exists ( select null
from INS_DEPARTMENT T
where T . RN = NSUBDIV
and ROWNUM = 1
start with T . RN = NSTART_SUBDIV
connect by prior T . RN = T . PRN ) ;
exception
when others then
NRESULT : = 0 ;
end ;
end if ;
/* Возвращаем результат */
return NRESULT ;
end UTL_SUBDIV_HIER_CHECK ;
/* Проверка наличия станка "В эксплуатации" в иерархии цеха */
function UTL_INS_DEP_HIER_EQ_CHECK
(
NCOMPANY in number , -- Р е г . номер организации
NINS_DEPARTMENT in number , -- Р е г . номер подразделения (цеха)
DDATE_TO in date -- Дата по
) return number -- Результат (0 - станка нет, 1 - станок есть)
is
NRESULT PKG_STD . TNUMBER ; -- Результат (0 - станка нет, 1 - станок есть)
begin
/* Проверяем наличие станка "В эксплуатации" в иерархии цеха */
2024-05-09 17:41:14 +03:00
begin
select 1
into NRESULT
2024-07-10 15:41:09 +03:00
from INS_DEPARTMENT H
where H . COMPANY = NCOMPANY
and exists ( select null
from SUBDIVSEQ EQ ,
EQCONFIG EQC
where EQ . PRN = H . RN
and EQC . RN = EQ . EQCONFIG
and EQC . OPER_DATE is not null
and EQC . OPER_DATE < = DDATE_TO
and ROWNUM = 1 )
and ROWNUM = 1
start with H . RN = NINS_DEPARTMENT
connect by prior H . RN = H . PRN ;
2024-05-09 17:41:14 +03:00
exception
when others then
NRESULT : = 0 ;
end ;
/* Возвращаем результат */
return NRESULT ;
2024-07-10 15:41:09 +03:00
end UTL_INS_DEP_HIER_EQ_CHECK ;
2024-05-09 17:41:14 +03:00
2024-07-10 15:41:09 +03:00
/* Проверка наличия состава оборудования */
procedure UTL_EQCONFIG_EXISTS
2024-05-09 17:41:14 +03:00
(
2024-07-10 15:41:09 +03:00
NEQCONFIG in number , -- Р е г . номер состава оборудования
2024-05-09 17:41:14 +03:00
NCOMPANY in number -- Р е г . номер организации
)
is
NEXISTS PKG_STD . TNUMBER ; -- Буфер
begin
/* Проверяем наличие оборудования */
begin
select T . RN
into NEXISTS
2024-07-10 15:41:09 +03:00
from EQCONFIG T
where T . RN = NEQCONFIG
2024-05-09 17:41:14 +03:00
and T . COMPANY = NCOMPANY ;
exception
when others then
2024-07-10 15:41:09 +03:00
P_EXCEPTION ( 0 , ' Рабочее место не найдено. ' ) ;
2024-05-09 17:41:14 +03:00
end ;
2024-07-10 15:41:09 +03:00
end UTL_EQCONFIG_EXISTS ;
2024-05-09 17:41:14 +03:00
/* Считывание р е г . номера основной спецификации плана из "Производственная программа" */
function UTL_FCPRODPLANSP_MAIN_GET
(
NCOMPANY in number , -- Р е г . номер организации
NFCPRODPLANSP in number -- Р е г . номер связанной спецификации плана
) return number -- Р е г . номер основной спецификации плана из "Производственная программа"
is
NRESULT PKG_STD . TREF ; -- Р е г . номер основной спецификации плана из "Производственная программа"
begin
/* Поиск связанной спецификации из "Производственная программа" */
begin
select S . RN
into NRESULT
from DOCLINKS T ,
FCPRODPLANSP S ,
FCPRODPLAN P
where T . OUT_DOCUMENT = NFCPRODPLANSP
and T . IN_UNITCODE = ' CostProductPlansSpecs '
and T . OUT_UNITCODE = ' CostProductPlansSpecs '
and S . RN = T . IN_DOCUMENT
and P . RN = S . PRN
2024-05-30 15:54:31 +03:00
and P . CATEGORY = NFCPRODPLAN_CATEGORY
2024-05-09 17:41:14 +03:00
and P . COMPANY = NCOMPANY
and ROWNUM = 1 ;
exception
when others then
NRESULT : = null ;
end ;
/* Возвращаем результат */
return NRESULT ;
end UTL_FCPRODPLANSP_MAIN_GET ;
2024-08-21 17:19:18 +03:00
/* Считывание цеха из заголовка сменного задания */
function UTL_FCJOBS_SUBDIV_GET
(
NFCJOBS in number -- Р е г . номер сменного задания
) return number -- Р е г . номер подразделения
is
NRESULT PKG_STD . TREF ; -- Р е г . номер подразделения
begin
/* Считываем цех сменного задания */
begin
select T . SUBDIV into NRESULT from FCJOBS T where T . RN = NFCJOBS ;
exception
when others then
NRESULT : = null ;
end ;
/* Возвращаем результат */
return NRESULT ;
end UTL_FCJOBS_SUBDIV_GET ;
2024-05-09 17:41:14 +03:00
2024-07-10 15:41:09 +03:00
/* Считывание записи строки сменного задания */
function UTL_FCJOBSSP_GET
(
NCOMPANY in number , -- Р е г . номер организации
NFCJOBSSP in number -- Р е г . номер строки сменного задания
) return FCJOBSSP % rowtype -- Запись строки сменного задания
is
RFCJOBSSP FCJOBSSP % rowtype ; -- Запись строки сменного задания
begin
/* Считываем запись строки сменного задания */
begin
select T . *
into RFCJOBSSP
from FCJOBSSP T
where T . RN = NFCJOBSSP
and T . COMPANY = NCOMPANY ;
exception
when others then
P_EXCEPTION ( 0 , ' Ошибка считывания строки сменного задания. ' ) ;
end ;
/* Возвращаем результат */
return RFCJOBSSP ;
end UTL_FCJOBSSP_GET ;
/* Считывание количества рабочих часов с учетом перерыва */
function UTL_WORK_TIME_GET
(
NTBOPERMODESP in number -- Р е г . номер смены
) return number -- Количество рабочих часов
is
NRESULT PKG_STD . TLNUMBER ; -- Количество рабочих часов
begin
/* Определяем количество рабочих часов с учетом перерывов */
begin
select ROUND ( ( TMP . WORK_MINUTS - COALESCE ( TMP . BREAK_MINUTS , 0 ) ) * 24 * 60 , 3 )
into NRESULT
from ( select case BOS . SIGN_SHIFT
when 0 then
( BOS . END_TIME - BOS . BEG_TIME )
else
( BOS . END_TIME + 1 - BOS . BEG_TIME )
end WORK_MINUTS ,
( select sum ( case
/* В один день */
when BOS . SIGN_SHIFT = 0 then
LEAST ( BOS . END_TIME , BMS . END_TIME ) - BMS . START_TIME
/* Перерыв с переходом дня */
when ( ( BOS . SIGN_SHIFT = 1 ) and ( BMS . START_TIME > = BMS . END_TIME ) ) then
( LEAST ( BOS . END_TIME , BMS . END_TIME ) + 1 ) - BMS . START_TIME
/* Первый день */
when ( ( BOS . SIGN_SHIFT = 1 ) and ( BMS . START_TIME > = BOS . BEG_TIME ) ) then
BMS . END_TIME - BMS . START_TIME
/* Второй день */
else
LEAST ( BOS . END_TIME , BMS . END_TIME ) - BMS . START_TIME
end ) BREAK_MIN
from TBBREAKMODESP BMS
where BMS . PRN = BO . BREAKMODE
and ( ( ( BOS . SIGN_SHIFT = 0 ) and
( ( BMS . START_TIME > = BOS . BEG_TIME ) and ( BMS . START_TIME < BOS . END_TIME ) ) ) or
( ( BOS . SIGN_SHIFT = 1 ) and
( ( BMS . START_TIME > = BOS . BEG_TIME ) or ( BMS . START_TIME < BOS . END_TIME ) ) ) ) ) BREAK_MINUTS
from TBOPERMODESP BOS ,
TBOPERMODE BO
where BOS . RN = NTBOPERMODESP
and BO . RN = BOS . PRN ) TMP ;
exception
when others then
NRESULT : = null ;
end ;
/* Возвращаем результат */
return NRESULT ;
end UTL_WORK_TIME_GET ;
2024-03-18 15:58:40 +03:00
/* Проверка наличия связанных маршрутных листов */
function LINK_FCROUTLST_CHECK
(
NCOMPANY in number , -- Р е г . номер организации
NFCPRODPLANSP in number , -- Р е г . номер спецификации плана
NSTATE in number : = null -- Состояние маршрутного листа
) return number -- Наличие связанного МЛ (0 - нет, 1 - есть)
is
NRESULT PKG_STD . TNUMBER ; -- Наличие связанного МЛ (0 - нет, 1 - есть)
begin
begin
select 1
into NRESULT
from DUAL
where exists ( select null
from DOCLINKS L ,
FCROUTLST F
where L . IN_DOCUMENT = NFCPRODPLANSP
and L . IN_UNITCODE = ' CostProductPlansSpecs '
and L . IN_COMPANY = NCOMPANY
and L . OUT_UNITCODE = ' CostRouteLists '
and L . OUT_COMPANY = NCOMPANY
and F . RN = L . OUT_DOCUMENT
and ( ( NSTATE is null ) or ( ( NSTATE is not null ) and ( F . STATE = NSTATE ) ) )
and ROWNUM = 1 ) ;
exception
when others then
NRESULT : = 0 ;
end ;
/* Возвращаем результат */
return NRESULT ;
end LINK_FCROUTLST_CHECK ;
2024-05-09 17:41:14 +03:00
2024-03-18 15:58:40 +03:00
/* Проверка наличия связанных приходов из подразделений */
function LINK_INCOMEFROMDEPS_CHECK
(
NCOMPANY in number , -- Р е г . номер организации
NFCPRODPLANSP in number , -- Р е г . номер спецификации плана
NSTATE in number : = null -- Состояние ПиП
) return number -- Наличие связанного ПиП (0 - нет, 1 - есть)
is
NRESULT PKG_STD . TNUMBER ; -- Наличие связанного ПиП (0 - нет, 1 - есть)
NFCROUTLST_IDENT PKG_STD . TREF ; -- Р е г . номер идентификатора отмеченных записей маршрутных листов
begin
/* Инициализируем список маршрутных листов */
UTL_FCROUTLST_IDENT_INIT ( NFCPRODPLANSP = > NFCPRODPLANSP , NIDENT = > NFCROUTLST_IDENT ) ;
/* Проверяем наличие */
begin
select 1
into NRESULT
from DUAL
where exists ( select null
from DOCLINKS L ,
INCOMEFROMDEPS F
where L . IN_DOCUMENT = NFCPRODPLANSP
and L . IN_UNITCODE = ' CostProductPlansSpecs '
and L . OUT_UNITCODE = ' IncomFromDeps '
and L . OUT_COMPANY = NCOMPANY
and F . RN = L . OUT_DOCUMENT
and F . COMPANY = NCOMPANY
and ( ( NSTATE is null ) or ( ( NSTATE is not null ) and ( F . DOC_STATE = NSTATE ) ) )
and ROWNUM = 1 )
or exists ( select null
from INCOMEFROMDEPS F
where F . RN in ( select L . OUT_DOCUMENT
from SELECTLIST SL ,
DOCLINKS L
where SL . IDENT = NFCROUTLST_IDENT
and SL . UNITCODE = ' CostRouteLists '
and L . IN_DOCUMENT = SL . DOCUMENT
and L . IN_UNITCODE = ' CostRouteLists '
and L . OUT_UNITCODE = ' IncomFromDeps ' ) ) ;
exception
when others then
NRESULT : = 0 ;
end ;
/* Очищаем отмеченные маршрутные листы */
P_SELECTLIST_CLEAR ( NIDENT = > NFCROUTLST_IDENT ) ;
/* Возвращаем результат */
return NRESULT ;
exception
when others then
/* Очищаем отмеченные маршрутные листы */
P_SELECTLIST_CLEAR ( NIDENT = > NFCROUTLST_IDENT ) ;
raise ;
end LINK_INCOMEFROMDEPS_CHECK ;
2024-05-09 17:41:14 +03:00
/*
П р о ц е д у р ы п а н е л и " Производственная программа "
* /
2024-04-25 18:38:26 +03:00
2024-03-18 15:58:40 +03:00
/* Получение таблицы ПиП на основании маршрутного листа, связанных с о спецификацией плана */
procedure INCOMEFROMDEPS_DG_GET
(
NFCPRODPLANSP in number , -- Р е г . номер связанной спецификации плана
NTYPE in number , -- Тип спецификации плана (2 - Н е включать "Состояние", 3 - включать)
NPAGE_NUMBER in number , -- Номер страницы (игнорируется при NPAGE_SIZE=0)
NPAGE_SIZE in number , -- Количество записей на странице (0 - все)
CORDERS in clob , -- Сортировки
NINCLUDE_DEF in number , -- Признак включения описания колонок таблицы в ответ
COUT out clob -- Сериализованная таблица данных
)
is
NCOMPANY PKG_STD . TREF : = GET_SESSION_COMPANY ( ) ; -- Организация сеанса
RO PKG_P8PANELS_VISUAL . TORDERS ; -- Сортировки
RDG PKG_P8PANELS_VISUAL . TDATA_GRID ; -- Описание таблицы
RDG_ROW PKG_P8PANELS_VISUAL . TROW ; -- Строка таблицы
NROW_FROM PKG_STD . TREF ; -- Номер строки с
NROW_TO PKG_STD . TREF ; -- Номер строки по
CSQL clob ; -- Буфер для запроса
ICURSOR integer ; -- К у р с о р для исполнения запроса
NFCROUTLST_IDENT PKG_STD . TREF ; -- Р е г . номер идентификатора отмеченных записей маршрутных листов
begin
/* Читем сортировки */
RO : = PKG_P8PANELS_VISUAL . TORDERS_FROM_XML ( CORDERS = > CORDERS ) ;
/* Преобразуем номер и размер страницы в номер строк с и по */
PKG_P8PANELS_VISUAL . UTL_ROWS_LIMITS_CALC ( NPAGE_NUMBER = > NPAGE_NUMBER ,
NPAGE_SIZE = > NPAGE_SIZE ,
NROW_FROM = > NROW_FROM ,
NROW_TO = > NROW_TO ) ;
/* Инициализируем таблицу данных */
RDG : = PKG_P8PANELS_VISUAL . TDATA_GRID_MAKE ( ) ;
/* Описываем колонки таблицы данных */
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' NRN ' ,
SCAPTION = > ' Р е г . номер' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_NUMB ,
BVISIBLE = > false ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' SDOC_INFO ' ,
SCAPTION = > ' Накладная ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_STR ,
BVISIBLE = > true ) ;
2024-05-09 17:41:14 +03:00
/* Если тип "Приход из подразделений и маршрутные листы", то необходимо включать состояние */
2024-05-07 17:37:23 +03:00
if ( NTYPE = NTASK_TYPE_INC_DEPS_RL ) then
2024-03-18 15:58:40 +03:00
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' SDOC_STATE ' ,
SCAPTION = > ' Состояние ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_STR ,
BVISIBLE = > true ) ;
end if ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' DWORK_DATE ' ,
SCAPTION = > ' Дата сдачи ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_DATE ,
BVISIBLE = > true ,
BORDER = > true ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' SDOC_VALID_INFO ' ,
SCAPTION = > ' Маршрутный лист ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_STR ,
BVISIBLE = > true ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' SOUT_DEPARTMENT ' ,
SCAPTION = > ' Сдающий цех ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_STR ,
BVISIBLE = > true ,
BORDER = > true ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' SSTORE ' ,
SCAPTION = > ' Склад цеха потребителя ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_STR ,
BVISIBLE = > true ,
BORDER = > true ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' NQUANT_FACT ' ,
SCAPTION = > ' Количество сдано ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_NUMB ,
BVISIBLE = > true ,
BORDER = > true ) ;
/* Инициализируем список маршрутных листов */
UTL_FCROUTLST_IDENT_INIT ( NFCPRODPLANSP = > NFCPRODPLANSP , NIDENT = > NFCROUTLST_IDENT ) ;
/* Обходим данные */
begin
/* Добавляем подсказку совместимости */
CSQL : = PKG_SQL_BUILD . COMPATIBLE ( SSQL = > CSQL ) ;
/* Формируем запрос */
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' select * ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from (select D.*, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > PKG_SQL_BUILD . SQLROWNUM ( ) | | ' NROW ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from (select T.RN NRN, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' DT.DOCCODE || ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' '' , '' || TRIM(T.DOC_PREF) || ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' '' - '' || TRIM(T.DOC_NUMB) || ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' '' , '' || TO_CHAR(T.DOC_DATE, ' | | PKG_SQL_BUILD . WRAP_STR ( SVALUE = > ' dd.mm.yyyy ' ) | | ' ) as SDOC_INFO, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' case T.DOC_STATE ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' when 0 then ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' ' | | PKG_SQL_BUILD . WRAP_STR ( SVALUE = > ' Н е отработан' ) ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' when 1 then ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' ' | | PKG_SQL_BUILD . WRAP_STR ( SVALUE = > ' Отработан как план ' ) ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' when 2 then ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' ' | | PKG_SQL_BUILD . WRAP_STR ( SVALUE = > ' Отработан как факт ' ) ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' else ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' null ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' end SDOC_STATE, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' T.WORK_DATE DWORK_DATE, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' DTV.DOCCODE || ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' '' , '' || T.VALID_DOCNUMB || ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' '' , '' || TO_CHAR(T.VALID_DOCDATE, ' | | PKG_SQL_BUILD . WRAP_STR ( SVALUE = > ' dd.mm.yyyy ' ) | | ' ) as SDOC_VALID_INFO, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' D.CODE SOUT_DEPARTMENT, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' S.AZS_NUMBER SSTORE, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' (select SUM(SP.QUANT_FACT) ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from INCOMEFROMDEPSSPEC SP ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where SP.PRN = T.RN) NQUANT_FACT ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from INCOMEFROMDEPS T left outer join DOCTYPES DTV on T.VALID_DOCTYPE = DTV.RN ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' left outer join INS_DEPARTMENT D on T.OUT_DEPARTMENT = D.RN, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' DOCTYPES DT, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' AZSAZSLISTMT S ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where ((T.RN in (select L.OUT_DOCUMENT ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from DOCLINKS L ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where L.IN_DOCUMENT = :NFCPRODPLANSP ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and L.IN_UNITCODE = ' | | PKG_SQL_BUILD . WRAP_STR ( SVALUE = > ' CostProductPlansSpecs ' ) ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and L.OUT_UNITCODE = ' | | PKG_SQL_BUILD . WRAP_STR ( SVALUE = > ' IncomFromDeps ' ) | | ' )) ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' or (T.RN in (select L.OUT_DOCUMENT ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from SELECTLIST SL, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' DOCLINKS L ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where SL.IDENT = :NFCROUTLST_IDENT ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and SL.UNITCODE = ' | | PKG_SQL_BUILD . WRAP_STR ( SVALUE = > ' CostRouteLists ' ) ) ;
2024-04-04 16:12:29 +03:00
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and L.IN_DOCUMENT = SL."DOCUMENT" ' ) ;
2024-03-18 15:58:40 +03:00
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and L.IN_UNITCODE = ' | | PKG_SQL_BUILD . WRAP_STR ( SVALUE = > ' CostRouteLists ' ) ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and L.OUT_UNITCODE = ' | | PKG_SQL_BUILD . WRAP_STR ( SVALUE = > ' IncomFromDeps ' ) | | ' ))) ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and T.COMPANY = :NCOMPANY ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and T.DOC_TYPE = DT.RN ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and T.STORE = S.RN ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' %ORDER_BY%) D) F ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where F.NROW between :NROW_FROM and :NROW_TO ' ) ;
/* Учтём сортировки */
PKG_P8PANELS_VISUAL . TORDERS_SET_QUERY ( RDATA_GRID = > RDG , RORDERS = > RO , SPATTERN = > ' %ORDER_BY% ' , CSQL = > CSQL ) ;
/* Разбираем е г о */
ICURSOR : = PKG_SQL_DML . OPEN_CURSOR ( SWHAT = > ' SELECT ' ) ;
PKG_SQL_DML . PARSE ( ICURSOR = > ICURSOR , SQUERY = > CSQL ) ;
/* Делаем подстановку параметров */
PKG_SQL_DML . BIND_VARIABLE_NUM ( ICURSOR = > ICURSOR , SNAME = > ' NCOMPANY ' , NVALUE = > NCOMPANY ) ;
PKG_SQL_DML . BIND_VARIABLE_NUM ( ICURSOR = > ICURSOR , SNAME = > ' NROW_FROM ' , NVALUE = > NROW_FROM ) ;
PKG_SQL_DML . BIND_VARIABLE_NUM ( ICURSOR = > ICURSOR , SNAME = > ' NROW_TO ' , NVALUE = > NROW_TO ) ;
PKG_SQL_DML . BIND_VARIABLE_NUM ( ICURSOR = > ICURSOR , SNAME = > ' NFCPRODPLANSP ' , NVALUE = > NFCPRODPLANSP ) ;
PKG_SQL_DML . BIND_VARIABLE_NUM ( ICURSOR = > ICURSOR , SNAME = > ' NFCROUTLST_IDENT ' , NVALUE = > NFCROUTLST_IDENT ) ;
/* Описываем структуру записи курсора */
PKG_SQL_DML . DEFINE_COLUMN_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 1 ) ;
PKG_SQL_DML . DEFINE_COLUMN_STR ( ICURSOR = > ICURSOR , IPOSITION = > 2 ) ;
PKG_SQL_DML . DEFINE_COLUMN_STR ( ICURSOR = > ICURSOR , IPOSITION = > 3 ) ;
PKG_SQL_DML . DEFINE_COLUMN_DATE ( ICURSOR = > ICURSOR , IPOSITION = > 4 ) ;
PKG_SQL_DML . DEFINE_COLUMN_STR ( ICURSOR = > ICURSOR , IPOSITION = > 5 ) ;
PKG_SQL_DML . DEFINE_COLUMN_STR ( ICURSOR = > ICURSOR , IPOSITION = > 6 ) ;
PKG_SQL_DML . DEFINE_COLUMN_STR ( ICURSOR = > ICURSOR , IPOSITION = > 7 ) ;
PKG_SQL_DML . DEFINE_COLUMN_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 8 ) ;
PKG_SQL_DML . DEFINE_COLUMN_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 9 ) ;
/* Делаем выборку */
if ( PKG_SQL_DML . EXECUTE ( ICURSOR = > ICURSOR ) = 0 ) then
null ;
end if ;
/* Обходим выбранные записи */
while ( PKG_SQL_DML . FETCH_ROWS ( ICURSOR = > ICURSOR ) > 0 )
loop
/* Добавляем колонки с данными */
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLN ( RROW = > RDG_ROW ,
SNAME = > ' NRN ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 1 ,
BCLEAR = > true ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLS ( RROW = > RDG_ROW ,
SNAME = > ' SDOC_INFO ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 2 ) ;
2024-05-09 17:41:14 +03:00
/* Если тип "Приход из подразделений и маршрутные листы", то необходимо включать состояние */
2024-05-07 17:37:23 +03:00
if ( NTYPE = NTASK_TYPE_INC_DEPS_RL ) then
2024-03-18 15:58:40 +03:00
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLS ( RROW = > RDG_ROW ,
SNAME = > ' SDOC_STATE ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 3 ) ;
end if ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLD ( RROW = > RDG_ROW ,
SNAME = > ' DWORK_DATE ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 4 ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLS ( RROW = > RDG_ROW ,
SNAME = > ' SDOC_VALID_INFO ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 5 ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLS ( RROW = > RDG_ROW ,
SNAME = > ' SOUT_DEPARTMENT ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 6 ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLS ( RROW = > RDG_ROW , SNAME = > ' SSTORE ' , ICURSOR = > ICURSOR , NPOSITION = > 7 ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLN ( RROW = > RDG_ROW ,
SNAME = > ' NQUANT_FACT ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 8 ) ;
/* Добавляем строку в таблицу */
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_ROW ( RDATA_GRID = > RDG , RROW = > RDG_ROW ) ;
end loop ;
exception
when others then
PKG_SQL_DML . CLOSE_CURSOR ( ICURSOR = > ICURSOR ) ;
raise ;
end ;
/* Очищаем отмеченные маршрутные листы */
P_SELECTLIST_CLEAR ( NIDENT = > NFCROUTLST_IDENT ) ;
/* Сериализуем описание */
COUT : = PKG_P8PANELS_VISUAL . TDATA_GRID_TO_XML ( RDATA_GRID = > RDG , NINCLUDE_DEF = > NINCLUDE_DEF ) ;
exception
when others then
/* Очищаем отмеченные маршрутные листы */
P_SELECTLIST_CLEAR ( NIDENT = > NFCROUTLST_IDENT ) ;
raise ;
end INCOMEFROMDEPS_DG_GET ;
2024-04-25 18:38:26 +03:00
2024-03-18 15:58:40 +03:00
/* Получение таблицы строк комплектации на основании маршрутного листа */
procedure FCDELIVERYLISTSP_DG_GET
(
NFCROUTLST in number , -- Р е г . номер маршрутного листа
NPAGE_NUMBER in number , -- Номер страницы (игнорируется при NPAGE_SIZE=0)
NPAGE_SIZE in number , -- Количество записей на странице (0 - все)
CORDERS in clob , -- Сортировки
NINCLUDE_DEF in number , -- Признак включения описания колонок таблицы в ответ
COUT out clob -- Сериализованная таблица данных
)
is
NCOMPANY PKG_STD . TREF : = GET_SESSION_COMPANY ( ) ; -- Организация сеанса
RO PKG_P8PANELS_VISUAL . TORDERS ; -- Сортировки
RDG PKG_P8PANELS_VISUAL . TDATA_GRID ; -- Описание таблицы
RDG_ROW PKG_P8PANELS_VISUAL . TROW ; -- Строка таблицы
NROW_FROM PKG_STD . TREF ; -- Номер строки с
NROW_TO PKG_STD . TREF ; -- Номер строки по
CSQL clob ; -- Буфер для запроса
ICURSOR integer ; -- К у р с о р для исполнения запроса
begin
/* Читем сортировки */
RO : = PKG_P8PANELS_VISUAL . TORDERS_FROM_XML ( CORDERS = > CORDERS ) ;
/* Преобразуем номер и размер страницы в номер строк с и по */
PKG_P8PANELS_VISUAL . UTL_ROWS_LIMITS_CALC ( NPAGE_NUMBER = > NPAGE_NUMBER ,
NPAGE_SIZE = > NPAGE_SIZE ,
NROW_FROM = > NROW_FROM ,
NROW_TO = > NROW_TO ) ;
/* Инициализируем таблицу данных */
RDG : = PKG_P8PANELS_VISUAL . TDATA_GRID_MAKE ( ) ;
/* Описываем колонки таблицы данных */
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' NRN ' ,
SCAPTION = > ' Р е г . номер' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_NUMB ,
BVISIBLE = > false ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' SMATRESPL_CODE ' ,
SCAPTION = > ' Обозначение ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_STR ,
2024-04-01 13:09:29 +03:00
BVISIBLE = > true ) ;
2024-03-18 15:58:40 +03:00
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' SMATRESPL_NAME ' ,
SCAPTION = > ' Наименование ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_STR ,
BVISIBLE = > true ,
BORDER = > true ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' NPROD_QUANT ' ,
SCAPTION = > ' Применяемость ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_NUMB ,
2024-04-01 13:09:29 +03:00
BVISIBLE = > true ) ;
2024-03-18 15:58:40 +03:00
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' NQUANT_PLAN ' ,
SCAPTION = > ' Количество план ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_NUMB ,
2024-04-01 13:09:29 +03:00
BVISIBLE = > true ) ;
2024-03-18 15:58:40 +03:00
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' NREST ' ,
SCAPTION = > ' Остаток ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_NUMB ,
2024-04-01 13:09:29 +03:00
BVISIBLE = > true ) ;
2024-03-18 15:58:40 +03:00
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' NQUANT_FACT ' ,
SCAPTION = > ' Скомплектовано ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_NUMB ,
BVISIBLE = > true ,
BORDER = > true ) ;
2024-04-01 13:09:29 +03:00
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' DRES_DATE_TO ' ,
SCAPTION = > ' Зарезервировано ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_DATE ,
BVISIBLE = > true ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' SMATRESPL_NOMEN ' ,
SCAPTION = > ' Номенклатура ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_STR ,
BVISIBLE = > true ) ;
2024-03-18 15:58:40 +03:00
/* Обходим данные */
begin
/* Добавляем подсказку совместимости */
CSQL : = PKG_SQL_BUILD . COMPATIBLE ( SSQL = > CSQL ) ;
/* Формируем запрос */
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' select * ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from (select D.*, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > PKG_SQL_BUILD . SQLROWNUM ( ) | | ' NROW ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from (select min(T.RN) NRN, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' T.RES_DATE_TO DRES_DATE_TO, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' NP.NOMEN_CODE SMATRESPL_NOMEN, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' CP.CODE SMATRESPL_CODE, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' CP."NAME" SMATRESPL_NAME, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' T.PROD_QUANT NPROD_QUANT, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' sum(T.QUANT_PLAN) NQUANT_PLAN, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' T.REST NREST, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' sum(T.QUANT_FACT) NQUANT_FACT ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from DOCLINKS DL, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' FCDELIVERYLIST TL, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' FCDELIVERYLISTSP T, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' FCMATRESOURCE CP left outer join DICNOMNS NP on CP.NOMENCLATURE = NP.RN ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where DL.IN_DOCUMENT = :NFCROUTLST ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and DL.IN_UNITCODE = ' | | PKG_SQL_BUILD . WRAP_STR ( SVALUE = > ' CostRouteLists ' ) ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and DL.OUT_UNITCODE = ' | | PKG_SQL_BUILD . WRAP_STR ( SVALUE = > ' CostDeliveryLists ' ) ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and TL.RN = DL.OUT_DOCUMENT ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and TL.COMPANY = :NCOMPANY ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and T.PRN = TL.RN ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and T.MATRESPL = CP.RN ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and exists (select null from V_USERPRIV UP where (UP."CATALOG" = T.CRN)) ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and exists (select null ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from V_USERPRIV UP ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where UP.JUR_PERS = T.JUR_PERS ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and UP.UNITCODE = ' | | PKG_SQL_BUILD . WRAP_STR ( SVALUE = > ' CostDeliveryLists ' ) | | ' ) ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' group by T.RES_DATE_TO, NP.NOMEN_CODE, CP.CODE, CP."NAME", T.PROD_QUANT, T.REST ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' %ORDER_BY%) D) F ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where F.NROW between :NROW_FROM and :NROW_TO ' ) ;
/* Учтём сортировки */
PKG_P8PANELS_VISUAL . TORDERS_SET_QUERY ( RDATA_GRID = > RDG , RORDERS = > RO , SPATTERN = > ' %ORDER_BY% ' , CSQL = > CSQL ) ;
/* Разбираем е г о */
ICURSOR : = PKG_SQL_DML . OPEN_CURSOR ( SWHAT = > ' SELECT ' ) ;
PKG_SQL_DML . PARSE ( ICURSOR = > ICURSOR , SQUERY = > CSQL ) ;
/* Делаем подстановку параметров */
PKG_SQL_DML . BIND_VARIABLE_NUM ( ICURSOR = > ICURSOR , SNAME = > ' NCOMPANY ' , NVALUE = > NCOMPANY ) ;
PKG_SQL_DML . BIND_VARIABLE_NUM ( ICURSOR = > ICURSOR , SNAME = > ' NROW_FROM ' , NVALUE = > NROW_FROM ) ;
PKG_SQL_DML . BIND_VARIABLE_NUM ( ICURSOR = > ICURSOR , SNAME = > ' NROW_TO ' , NVALUE = > NROW_TO ) ;
PKG_SQL_DML . BIND_VARIABLE_NUM ( ICURSOR = > ICURSOR , SNAME = > ' NFCROUTLST ' , NVALUE = > NFCROUTLST ) ;
/* Описываем структуру записи курсора */
PKG_SQL_DML . DEFINE_COLUMN_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 1 ) ;
PKG_SQL_DML . DEFINE_COLUMN_DATE ( ICURSOR = > ICURSOR , IPOSITION = > 2 ) ;
PKG_SQL_DML . DEFINE_COLUMN_STR ( ICURSOR = > ICURSOR , IPOSITION = > 3 ) ;
PKG_SQL_DML . DEFINE_COLUMN_STR ( ICURSOR = > ICURSOR , IPOSITION = > 4 ) ;
PKG_SQL_DML . DEFINE_COLUMN_STR ( ICURSOR = > ICURSOR , IPOSITION = > 5 ) ;
PKG_SQL_DML . DEFINE_COLUMN_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 6 ) ;
PKG_SQL_DML . DEFINE_COLUMN_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 7 ) ;
PKG_SQL_DML . DEFINE_COLUMN_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 8 ) ;
PKG_SQL_DML . DEFINE_COLUMN_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 9 ) ;
PKG_SQL_DML . DEFINE_COLUMN_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 10 ) ;
/* Делаем выборку */
if ( PKG_SQL_DML . EXECUTE ( ICURSOR = > ICURSOR ) = 0 ) then
null ;
end if ;
/* Обходим выбранные записи */
while ( PKG_SQL_DML . FETCH_ROWS ( ICURSOR = > ICURSOR ) > 0 )
loop
/* Добавляем колонки с данными */
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLN ( RROW = > RDG_ROW ,
SNAME = > ' NRN ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 1 ,
BCLEAR = > true ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLD ( RROW = > RDG_ROW ,
SNAME = > ' DRES_DATE_TO ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 2 ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLS ( RROW = > RDG_ROW ,
SNAME = > ' SMATRESPL_NOMEN ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 3 ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLS ( RROW = > RDG_ROW ,
SNAME = > ' SMATRESPL_CODE ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 4 ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLS ( RROW = > RDG_ROW ,
SNAME = > ' SMATRESPL_NAME ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 5 ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLN ( RROW = > RDG_ROW ,
SNAME = > ' NPROD_QUANT ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 6 ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLN ( RROW = > RDG_ROW ,
SNAME = > ' NQUANT_PLAN ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 7 ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLN ( RROW = > RDG_ROW , SNAME = > ' NREST ' , ICURSOR = > ICURSOR , NPOSITION = > 8 ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLN ( RROW = > RDG_ROW ,
SNAME = > ' NQUANT_FACT ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 9 ) ;
/* Добавляем строку в таблицу */
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_ROW ( RDATA_GRID = > RDG , RROW = > RDG_ROW ) ;
end loop ;
exception
when others then
PKG_SQL_DML . CLOSE_CURSOR ( ICURSOR = > ICURSOR ) ;
raise ;
end ;
/* Сериализуем описание */
COUT : = PKG_P8PANELS_VISUAL . TDATA_GRID_TO_XML ( RDATA_GRID = > RDG , NINCLUDE_DEF = > NINCLUDE_DEF ) ;
end FCDELIVERYLISTSP_DG_GET ;
2024-04-25 18:38:26 +03:00
2024-03-18 15:58:40 +03:00
/* Получение таблицы товарных запасов на основании маршрутного листа */
procedure GOODSPARTIES_DG_GET
(
NFCROUTLST in number , -- Р е г . номер маршрутного листа
NPAGE_NUMBER in number , -- Номер страницы (игнорируется при NPAGE_SIZE=0)
NPAGE_SIZE in number , -- Количество записей на странице (0 - все)
CORDERS in clob , -- Сортировки
NINCLUDE_DEF in number , -- Признак включения описания колонок таблицы в ответ
COUT out clob -- Сериализованная таблица данных
)
is
NSTORAGE PKG_STD . TREF ; -- Р е г . номер склада списания
NSTORAGE_IN PKG_STD . TREF ; -- Р е г . номер склада получения
NNOMENCLATURE PKG_STD . TREF ; -- Р е г . номер номенклатуры основного материала
NCOMPANY PKG_STD . TREF : = GET_SESSION_COMPANY ( ) ; -- Организация сеанса
RO PKG_P8PANELS_VISUAL . TORDERS ; -- Сортировки
RDG PKG_P8PANELS_VISUAL . TDATA_GRID ; -- Описание таблицы
RDG_ROW PKG_P8PANELS_VISUAL . TROW ; -- Строка таблицы
NROW_FROM PKG_STD . TREF ; -- Номер строки с
NROW_TO PKG_STD . TREF ; -- Номер строки по
CSQL clob ; -- Буфер для запроса
ICURSOR integer ; -- К у р с о р для исполнения запроса
DDATE PKG_STD . TLDATE ; -- Дата с /по
begin
/* Считываем информацию из маршрутного листа */
begin
select T . STORAGE ,
T . STORAGE_IN ,
F . NOMENCLATURE
into NSTORAGE ,
NSTORAGE_IN ,
NNOMENCLATURE
from FCROUTLST T ,
FCMATRESOURCE F
where T . MATRES_PLAN = F . RN ( + )
and T . RN = NFCROUTLST ;
exception
when others then
NSTORAGE : = null ;
NSTORAGE_IN : = null ;
NNOMENCLATURE : = null ;
end ;
/* Если номенклатура не указана */
if ( ( NNOMENCLATURE is null ) or ( ( NSTORAGE is null ) and ( NSTORAGE_IN is null ) ) ) then
/* Н е идем дальше */
return ;
end if ;
/* Инициализируем даты */
DDATE : = TRUNC ( sysdate ) ;
/* Читем сортировки */
RO : = PKG_P8PANELS_VISUAL . TORDERS_FROM_XML ( CORDERS = > CORDERS ) ;
/* Преобразуем номер и размер страницы в номер строк с и по */
PKG_P8PANELS_VISUAL . UTL_ROWS_LIMITS_CALC ( NPAGE_NUMBER = > NPAGE_NUMBER ,
NPAGE_SIZE = > NPAGE_SIZE ,
NROW_FROM = > NROW_FROM ,
NROW_TO = > NROW_TO ) ;
/* Описываем колонки таблицы данных */
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' SINDOC ' ,
SCAPTION = > ' Партия ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_STR ,
BVISIBLE = > true ,
BORDER = > true ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' SSTORE ' ,
SCAPTION = > ' Склад ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_STR ,
BVISIBLE = > true ,
BORDER = > true ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' NSALE ' ,
SCAPTION = > ' К продаже' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_NUMB ,
BVISIBLE = > true ,
BORDER = > true ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' NRESTFACT ' ,
SCAPTION = > ' Фактический остаток ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_NUMB ,
BVISIBLE = > true ,
BORDER = > true ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' NRESERV ' ,
SCAPTION = > ' Резерв ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_NUMB ,
BVISIBLE = > true ,
BORDER = > true ,
BFILTER = > false ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' SPRICEMEAS ' ,
SCAPTION = > ' Единица измерения ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_STR ,
BVISIBLE = > true ,
BORDER = > true ) ;
/* Обходим данные */
begin
/* Добавляем подсказку совместимости */
CSQL : = PKG_SQL_BUILD . COMPATIBLE ( SSQL = > CSQL ) ;
/* Формируем запрос */
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' select * ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from (select D.*, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > PKG_SQL_BUILD . SQLROWNUM ( ) | | ' NROW ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from (select I.CODE SINDOC, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' AZ.AZS_NUMBER SSTORE, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' least(H.MIN_RESTPLAN,H.MIN_RESTFACT) NSALE, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' H.RESTFACT NRESTFACT, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' H.RESERV NRESERV, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' case coalesce(GRP.NMEASTYPE, 0) ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' when 0 then MU1.MEAS_MNEMO ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' when 1 then MU2.MEAS_MNEMO ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' when 2 then MU3.MEAS_MNEMO ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' end SPRICEMEAS ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from GOODSPARTIES G, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' NOMMODIF MF, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' DICNOMNS NOM left outer join DICMUNTS MU2 on NOM.UMEAS_ALT = MU2.RN, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' GOODSSUPPLYHIST H left outer join NOMNMODIFPACK PAC on H.NOMNMODIFPACK = PAC.RN ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' left outer join NOMNPACK NPAC on PAC.NOMENPACK = NPAC.RN ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' left outer join DICMUNTS MU3 on NPAC.UMEAS = MU3.RN ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' left outer join V_GOODSSUPPLY_REGPRICE GRP on H.RN = GRP.NGOODSSUPPLYHIST, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' INCOMDOC I, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' GOODSSUPPLY S, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' DICMUNTS MU1, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' AZSAZSLISTMT AZ ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where G.COMPANY = :NCOMPANY ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and G.NOMMODIF = MF.RN ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and NOM.RN = MF.PRN ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and NOM.RN = :NNOMENCLATURE ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and I.RN = G.INDOC ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and S.PRN = G.RN ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and (((:NSTORAGE is not null) and (S.STORE = :NSTORAGE)) or ((:NSTORAGE_IN is not null) and (S.STORE = :NSTORAGE_IN))) ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and H.PRN = S.RN ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and AZ.RN = S.STORE ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and H.DATE_FROM <= :DDATE ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and (H.DATE_TO >= :DDATE or H.DATE_TO is null) ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and NOM.UMEAS_MAIN = MU1.RN ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and H.RESTFACT <> ' | | PKG_SQL_BUILD . WRAP_NUM ( NVALUE = > 0 ) ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and exists (select ' | | PKG_SQL_BUILD . SET_HINT ( SHINT = > ' INDEX(UP I_USERPRIV_JUR_PERS_ROLEID) ' ) | | ' null ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from USERPRIV UP ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where UP.JUR_PERS = G.JUR_PERS ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and UP.UNITCODE = ' | | PKG_SQL_BUILD . WRAP_STR ( SVALUE = > ' GoodsParties ' ) ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and UP.ROLEID in (select ' | | PKG_SQL_BUILD . SET_HINT ( SHINT = > ' INDEX(UR I_USERROLES_AUTHID_FK) ' ) | | ' UR.ROLEID ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from USERROLES UR ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where UR.AUTHID = UTILIZER()) ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' union all ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' select ' | | PKG_SQL_BUILD . SET_HINT ( SHINT = > ' INDEX(UP I_USERPRIV_JUR_PERS_AUTHID) ' ) | | ' null ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from USERPRIV UP ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where UP.JUR_PERS = G.JUR_PERS ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and UP.UNITCODE = ' | | PKG_SQL_BUILD . WRAP_STR ( SVALUE = > ' GoodsParties ' ) ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and UP.AUTHID = UTILIZER()) ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' %ORDER_BY%) D) F ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where F.NROW between :NROW_FROM and :NROW_TO ' ) ;
/* Учтём сортировки */
PKG_P8PANELS_VISUAL . TORDERS_SET_QUERY ( RDATA_GRID = > RDG , RORDERS = > RO , SPATTERN = > ' %ORDER_BY% ' , CSQL = > CSQL ) ;
/* Разбираем е г о */
ICURSOR : = PKG_SQL_DML . OPEN_CURSOR ( SWHAT = > ' SELECT ' ) ;
PKG_SQL_DML . PARSE ( ICURSOR = > ICURSOR , SQUERY = > CSQL ) ;
/* Делаем подстановку параметров */
PKG_SQL_DML . BIND_VARIABLE_NUM ( ICURSOR = > ICURSOR , SNAME = > ' NCOMPANY ' , NVALUE = > NCOMPANY ) ;
PKG_SQL_DML . BIND_VARIABLE_NUM ( ICURSOR = > ICURSOR , SNAME = > ' NROW_FROM ' , NVALUE = > NROW_FROM ) ;
PKG_SQL_DML . BIND_VARIABLE_NUM ( ICURSOR = > ICURSOR , SNAME = > ' NROW_TO ' , NVALUE = > NROW_TO ) ;
PKG_SQL_DML . BIND_VARIABLE_NUM ( ICURSOR = > ICURSOR , SNAME = > ' NNOMENCLATURE ' , NVALUE = > NNOMENCLATURE ) ;
PKG_SQL_DML . BIND_VARIABLE_NUM ( ICURSOR = > ICURSOR , SNAME = > ' NSTORAGE ' , NVALUE = > NSTORAGE ) ;
PKG_SQL_DML . BIND_VARIABLE_NUM ( ICURSOR = > ICURSOR , SNAME = > ' NSTORAGE_IN ' , NVALUE = > NSTORAGE_IN ) ;
PKG_SQL_DML . BIND_VARIABLE_DATE ( ICURSOR = > ICURSOR , SNAME = > ' DDATE ' , DVALUE = > DDATE ) ;
/* Описываем структуру записи курсора */
PKG_SQL_DML . DEFINE_COLUMN_STR ( ICURSOR = > ICURSOR , IPOSITION = > 1 ) ;
PKG_SQL_DML . DEFINE_COLUMN_STR ( ICURSOR = > ICURSOR , IPOSITION = > 2 ) ;
PKG_SQL_DML . DEFINE_COLUMN_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 3 ) ;
PKG_SQL_DML . DEFINE_COLUMN_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 4 ) ;
PKG_SQL_DML . DEFINE_COLUMN_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 5 ) ;
PKG_SQL_DML . DEFINE_COLUMN_STR ( ICURSOR = > ICURSOR , IPOSITION = > 6 ) ;
PKG_SQL_DML . DEFINE_COLUMN_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 7 ) ;
/* Делаем выборку */
if ( PKG_SQL_DML . EXECUTE ( ICURSOR = > ICURSOR ) = 0 ) then
null ;
end if ;
/* Обходим выбранные записи */
while ( PKG_SQL_DML . FETCH_ROWS ( ICURSOR = > ICURSOR ) > 0 )
loop
/* Добавляем колонки с данными */
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLS ( RROW = > RDG_ROW ,
SNAME = > ' SINDOC ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 1 ,
BCLEAR = > true ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLS ( RROW = > RDG_ROW , SNAME = > ' SSTORE ' , ICURSOR = > ICURSOR , NPOSITION = > 2 ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLN ( RROW = > RDG_ROW , SNAME = > ' NSALE ' , ICURSOR = > ICURSOR , NPOSITION = > 3 ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLN ( RROW = > RDG_ROW ,
SNAME = > ' NRESTFACT ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 4 ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLN ( RROW = > RDG_ROW , SNAME = > ' NRESERV ' , ICURSOR = > ICURSOR , NPOSITION = > 5 ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLS ( RROW = > RDG_ROW ,
SNAME = > ' SPRICEMEAS ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 6 ) ;
/* Добавляем строку в таблицу */
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_ROW ( RDATA_GRID = > RDG , RROW = > RDG_ROW ) ;
end loop ;
exception
when others then
PKG_SQL_DML . CLOSE_CURSOR ( ICURSOR = > ICURSOR ) ;
raise ;
end ;
/* Сериализуем описание */
COUT : = PKG_P8PANELS_VISUAL . TDATA_GRID_TO_XML ( RDATA_GRID = > RDG , NINCLUDE_DEF = > NINCLUDE_DEF ) ;
end GOODSPARTIES_DG_GET ;
2024-04-25 18:38:26 +03:00
2024-03-18 15:58:40 +03:00
/* Получение таблицы маршрутных листов, связанных с о спецификацией плана (по детали) */
procedure FCROUTLST_DG_BY_DTL
(
NFCPRODPLANSP in number , -- Р е г . номер связанной спецификации плана
NPAGE_NUMBER in number , -- Номер страницы (игнорируется при NPAGE_SIZE=0)
NPAGE_SIZE in number , -- Количество записей на странице (0 - все)
CORDERS in clob , -- Сортировки
NINCLUDE_DEF in number , -- Признак включения описания колонок таблицы в ответ
COUT out clob -- Сериализованная таблица данных
)
is
NCOMPANY PKG_STD . TREF : = GET_SESSION_COMPANY ( ) ; -- Организация сеанса
RO PKG_P8PANELS_VISUAL . TORDERS ; -- Сортировки
RDG PKG_P8PANELS_VISUAL . TDATA_GRID ; -- Описание таблицы
RDG_ROW PKG_P8PANELS_VISUAL . TROW ; -- Строка таблицы
NROW_FROM PKG_STD . TREF ; -- Номер строки с
NROW_TO PKG_STD . TREF ; -- Номер строки по
CSQL clob ; -- Буфер для запроса
ICURSOR integer ; -- К у р с о р для исполнения запроса
begin
/* Читем сортировки */
RO : = PKG_P8PANELS_VISUAL . TORDERS_FROM_XML ( CORDERS = > CORDERS ) ;
/* Преобразуем номер и размер страницы в номер строк с и по */
PKG_P8PANELS_VISUAL . UTL_ROWS_LIMITS_CALC ( NPAGE_NUMBER = > NPAGE_NUMBER ,
NPAGE_SIZE = > NPAGE_SIZE ,
NROW_FROM = > NROW_FROM ,
NROW_TO = > NROW_TO ) ;
/* Инициализируем таблицу данных */
RDG : = PKG_P8PANELS_VISUAL . TDATA_GRID_MAKE ( ) ;
/* Описываем колонки таблицы данных */
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' NRN ' ,
SCAPTION = > ' Р е г . номер' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_NUMB ,
BVISIBLE = > false ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' SDOCPREF ' ,
SCAPTION = > ' Префикс ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_STR ,
BVISIBLE = > true ,
BORDER = > true ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' SDOCNUMB ' ,
SCAPTION = > ' Номер ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_STR ,
BVISIBLE = > true ,
BORDER = > true ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' DEXEC_DATE ' ,
SCAPTION = > ' Дата запуска ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_DATE ,
BVISIBLE = > true ,
BORDER = > true ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' SMATRES_PLAN_NOMEN ' ,
SCAPTION = > ' Номенклатура основного материала ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_STR ,
BVISIBLE = > true ,
BORDER = > true ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' SMATRES_PLAN_NAME ' ,
SCAPTION = > ' Наименование основного материала ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_STR ,
BVISIBLE = > true ,
BORDER = > true ) ;
2024-04-01 13:09:29 +03:00
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' NQUANT ' ,
SCAPTION = > ' Количество запуска ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_NUMB ,
BVISIBLE = > true ,
BORDER = > true ) ;
2024-03-18 15:58:40 +03:00
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' NQUANT_PLAN ' ,
SCAPTION = > ' Выдать по норме ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_NUMB ,
BVISIBLE = > true ,
BORDER = > true ) ;
/* Обходим данные */
begin
/* Добавляем подсказку совместимости */
CSQL : = PKG_SQL_BUILD . COMPATIBLE ( SSQL = > CSQL ) ;
/* Формируем запрос */
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' select * ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from (select D.*, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > PKG_SQL_BUILD . SQLROWNUM ( ) | | ' NROW ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from (select T.RN NRN, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' T.DOCPREF SDOCPREF, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' T.DOCNUMB SDOCNUMB, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' T.EXEC_DATE DEXEC_DATE, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' (select NM2.NOMEN_CODE from DICNOMNS NM2 where F3.NOMENCLATURE = NM2.RN) SMATRES_PLAN_NOMEN, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' F3."NAME" SMATRES_PLAN_NAME, ' ) ;
2024-04-01 13:09:29 +03:00
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' T.QUANT NQUANT, ' ) ;
2024-03-18 15:58:40 +03:00
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' T.QUANT_PLAN NQUANT_PLAN ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from FCROUTLST T ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' left outer join FCMATRESOURCE F3 on T.MATRES_PLAN = F3.RN, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' DOCLINKS DL ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where DL.IN_DOCUMENT = :NFCPRODPLANSP ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and DL.IN_UNITCODE = ' | | PKG_SQL_BUILD . WRAP_STR ( SVALUE = > ' CostProductPlansSpecs ' ) ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and DL.OUT_UNITCODE = ' | | PKG_SQL_BUILD . WRAP_STR ( SVALUE = > ' CostRouteLists ' ) ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and T.RN = DL.OUT_DOCUMENT ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and T.COMPANY = :NCOMPANY ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and T."STATE" = ' | | PKG_SQL_BUILD . WRAP_NUM ( NVALUE = > 0 ) ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and exists (select ' | | PKG_SQL_BUILD . SET_HINT ( SHINT = > ' INDEX(UP I_USERPRIV_CATALOG_ROLEID) ' ) | | ' null ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from USERPRIV UP ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where UP."CATALOG" = T.CRN ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and UP.ROLEID in (select ' | | PKG_SQL_BUILD . SET_HINT ( SHINT = > ' INDEX(UR I_USERROLES_AUTHID_FK) ' ) | | ' UR.ROLEID ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from USERROLES UR ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where UR.AUTHID = UTILIZER()) ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' union all ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' select ' | | PKG_SQL_BUILD . SET_HINT ( SHINT = > ' INDEX(UP I_USERPRIV_CATALOG_AUTHID) ' ) | | ' null ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from USERPRIV UP ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where UP."CATALOG" = T.CRN ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and UP.AUTHID = UTILIZER()) ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and exists (select ' | | PKG_SQL_BUILD . SET_HINT ( SHINT = > ' INDEX(UP I_USERPRIV_JUR_PERS_ROLEID) ' ) | | ' null ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from USERPRIV UP ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where UP.JUR_PERS = T.JUR_PERS ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and UP.UNITCODE = ' | | PKG_SQL_BUILD . WRAP_STR ( SVALUE = > ' CostRouteLists ' ) ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and UP.ROLEID in (select ' | | PKG_SQL_BUILD . SET_HINT ( SHINT = > ' INDEX(UR I_USERROLES_AUTHID_FK) ' ) | | ' UR.ROLEID ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from USERROLES UR ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where UR.AUTHID = UTILIZER()) ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' union all ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' select ' | | PKG_SQL_BUILD . SET_HINT ( SHINT = > ' INDEX(UP I_USERPRIV_JUR_PERS_AUTHID) ' ) | | ' null ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from USERPRIV UP ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where UP.JUR_PERS = T.JUR_PERS ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and UP.UNITCODE = ' | | PKG_SQL_BUILD . WRAP_STR ( SVALUE = > ' CostRouteLists ' ) ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and UP.AUTHID = UTILIZER()) ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' %ORDER_BY%) D) F ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where F.NROW between :NROW_FROM and :NROW_TO ' ) ;
/* Учтём сортировки */
PKG_P8PANELS_VISUAL . TORDERS_SET_QUERY ( RDATA_GRID = > RDG , RORDERS = > RO , SPATTERN = > ' %ORDER_BY% ' , CSQL = > CSQL ) ;
/* Разбираем е г о */
ICURSOR : = PKG_SQL_DML . OPEN_CURSOR ( SWHAT = > ' SELECT ' ) ;
PKG_SQL_DML . PARSE ( ICURSOR = > ICURSOR , SQUERY = > CSQL ) ;
/* Делаем подстановку параметров */
PKG_SQL_DML . BIND_VARIABLE_NUM ( ICURSOR = > ICURSOR , SNAME = > ' NCOMPANY ' , NVALUE = > NCOMPANY ) ;
PKG_SQL_DML . BIND_VARIABLE_NUM ( ICURSOR = > ICURSOR , SNAME = > ' NROW_FROM ' , NVALUE = > NROW_FROM ) ;
PKG_SQL_DML . BIND_VARIABLE_NUM ( ICURSOR = > ICURSOR , SNAME = > ' NROW_TO ' , NVALUE = > NROW_TO ) ;
PKG_SQL_DML . BIND_VARIABLE_NUM ( ICURSOR = > ICURSOR , SNAME = > ' NFCPRODPLANSP ' , NVALUE = > NFCPRODPLANSP ) ;
/* Описываем структуру записи курсора */
PKG_SQL_DML . DEFINE_COLUMN_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 1 ) ;
PKG_SQL_DML . DEFINE_COLUMN_STR ( ICURSOR = > ICURSOR , IPOSITION = > 2 ) ;
PKG_SQL_DML . DEFINE_COLUMN_STR ( ICURSOR = > ICURSOR , IPOSITION = > 3 ) ;
PKG_SQL_DML . DEFINE_COLUMN_DATE ( ICURSOR = > ICURSOR , IPOSITION = > 4 ) ;
PKG_SQL_DML . DEFINE_COLUMN_STR ( ICURSOR = > ICURSOR , IPOSITION = > 5 ) ;
PKG_SQL_DML . DEFINE_COLUMN_STR ( ICURSOR = > ICURSOR , IPOSITION = > 6 ) ;
PKG_SQL_DML . DEFINE_COLUMN_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 7 ) ;
PKG_SQL_DML . DEFINE_COLUMN_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 8 ) ;
2024-04-01 13:09:29 +03:00
PKG_SQL_DML . DEFINE_COLUMN_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 9 ) ;
2024-03-18 15:58:40 +03:00
/* Делаем выборку */
if ( PKG_SQL_DML . EXECUTE ( ICURSOR = > ICURSOR ) = 0 ) then
null ;
end if ;
/* Обходим выбранные записи */
while ( PKG_SQL_DML . FETCH_ROWS ( ICURSOR = > ICURSOR ) > 0 )
loop
/* Добавляем колонки с данными */
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLN ( RROW = > RDG_ROW ,
SNAME = > ' NRN ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 1 ,
BCLEAR = > true ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLS ( RROW = > RDG_ROW ,
SNAME = > ' SDOCPREF ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 2 ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLS ( RROW = > RDG_ROW , SNAME = > ' SDOCNUMB ' , ICURSOR = > ICURSOR , NPOSITION = > 3 ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLD ( RROW = > RDG_ROW ,
SNAME = > ' DEXEC_DATE ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 4 ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLS ( RROW = > RDG_ROW ,
SNAME = > ' SMATRES_PLAN_NOMEN ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 5 ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLS ( RROW = > RDG_ROW ,
SNAME = > ' SMATRES_PLAN_NAME ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 6 ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLN ( RROW = > RDG_ROW ,
2024-04-01 13:09:29 +03:00
SNAME = > ' NQUANT ' ,
2024-03-18 15:58:40 +03:00
ICURSOR = > ICURSOR ,
NPOSITION = > 7 ) ;
2024-04-01 13:09:29 +03:00
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLN ( RROW = > RDG_ROW ,
SNAME = > ' NQUANT_PLAN ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 8 ) ;
2024-03-18 15:58:40 +03:00
/* Добавляем строку в таблицу */
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_ROW ( RDATA_GRID = > RDG , RROW = > RDG_ROW ) ;
end loop ;
exception
when others then
PKG_SQL_DML . CLOSE_CURSOR ( ICURSOR = > ICURSOR ) ;
raise ;
end ;
/* Сериализуем описание */
COUT : = PKG_P8PANELS_VISUAL . TDATA_GRID_TO_XML ( RDATA_GRID = > RDG , NINCLUDE_DEF = > NINCLUDE_DEF ) ;
end FCROUTLST_DG_BY_DTL ;
2024-04-25 18:38:26 +03:00
2024-03-18 15:58:40 +03:00
/* Получение таблицы маршрутных листов, связанных с о спецификацией плана (по изделию) */
procedure FCROUTLST_DG_BY_PRDCT
(
NFCPRODPLANSP in number , -- Р е г . номер связанной спецификации плана
NPAGE_NUMBER in number , -- Номер страницы (игнорируется при NPAGE_SIZE=0)
NPAGE_SIZE in number , -- Количество записей на странице (0 - все)
CORDERS in clob , -- Сортировки
NINCLUDE_DEF in number , -- Признак включения описания колонок таблицы в ответ
COUT out clob -- Сериализованная таблица данных
)
is
NCOMPANY PKG_STD . TREF : = GET_SESSION_COMPANY ( ) ; -- Организация сеанса
RO PKG_P8PANELS_VISUAL . TORDERS ; -- Сортировки
RDG PKG_P8PANELS_VISUAL . TDATA_GRID ; -- Описание таблицы
RDG_ROW PKG_P8PANELS_VISUAL . TROW ; -- Строка таблицы
NROW_FROM PKG_STD . TREF ; -- Номер строки с
NROW_TO PKG_STD . TREF ; -- Номер строки по
CSQL clob ; -- Буфер для запроса
ICURSOR integer ; -- К у р с о р для исполнения запроса
begin
/* Читем сортировки */
RO : = PKG_P8PANELS_VISUAL . TORDERS_FROM_XML ( CORDERS = > CORDERS ) ;
/* Преобразуем номер и размер страницы в номер строк с и по */
PKG_P8PANELS_VISUAL . UTL_ROWS_LIMITS_CALC ( NPAGE_NUMBER = > NPAGE_NUMBER ,
NPAGE_SIZE = > NPAGE_SIZE ,
NROW_FROM = > NROW_FROM ,
NROW_TO = > NROW_TO ) ;
/* Инициализируем таблицу данных */
RDG : = PKG_P8PANELS_VISUAL . TDATA_GRID_MAKE ( ) ;
/* Описываем колонки таблицы данных */
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' NRN ' ,
SCAPTION = > ' Р е г . номер' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_NUMB ,
BVISIBLE = > false ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' SDOCPREF ' ,
SCAPTION = > ' Префикс ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_STR ,
BVISIBLE = > true ,
BORDER = > true ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' SDOCNUMB ' ,
SCAPTION = > ' Номер ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_STR ,
BVISIBLE = > true ,
BORDER = > true ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' DEXEC_DATE ' ,
SCAPTION = > ' Дата запуска ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_DATE ,
BVISIBLE = > true ,
BORDER = > true ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' NQUANT ' ,
SCAPTION = > ' Количество запуска ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_NUMB ,
BVISIBLE = > true ,
BORDER = > true ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' DREL_DATE ' ,
SCAPTION = > ' Дата выпуска ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_DATE ,
BVISIBLE = > true ,
BORDER = > true ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' NREL_QUANT ' ,
SCAPTION = > ' Количество выпуска ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_NUMB ,
BVISIBLE = > true ,
BORDER = > true ) ;
/* Обходим данные */
begin
/* Добавляем подсказку совместимости */
CSQL : = PKG_SQL_BUILD . COMPATIBLE ( SSQL = > CSQL ) ;
/* Формируем запрос */
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' select * ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from (select D.*, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > PKG_SQL_BUILD . SQLROWNUM ( ) | | ' NROW ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from (select T.RN NRN, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' T.DOCPREF SDOCPREF, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' T.DOCNUMB SDOCNUMB, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' T.EXEC_DATE DEXEC_DATE, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' T.QUANT NQUANT, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' T.REL_DATE DREL_DATE, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' T.REL_QUANT NREL_QUANT ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from FCROUTLST T, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' DOCLINKS DL ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where DL.IN_DOCUMENT = :NFCPRODPLANSP ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and DL.IN_UNITCODE = ' | | PKG_SQL_BUILD . WRAP_STR ( SVALUE = > ' CostProductPlansSpecs ' ) ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and DL.OUT_UNITCODE = ' | | PKG_SQL_BUILD . WRAP_STR ( SVALUE = > ' CostRouteLists ' ) ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and T.RN = DL.OUT_DOCUMENT ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and T.COMPANY = :NCOMPANY ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and T."STATE" = ' | | PKG_SQL_BUILD . WRAP_NUM ( NVALUE = > 0 ) ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and exists (select ' | | PKG_SQL_BUILD . SET_HINT ( SHINT = > ' INDEX(UP I_USERPRIV_CATALOG_ROLEID) ' ) | | ' null ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from USERPRIV UP ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where UP."CATALOG" = T.CRN ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and UP.ROLEID in (select ' | | PKG_SQL_BUILD . SET_HINT ( SHINT = > ' INDEX(UR I_USERROLES_AUTHID_FK) ' ) | | ' UR.ROLEID ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from USERROLES UR ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where UR.AUTHID = UTILIZER()) ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' union all ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' select ' | | PKG_SQL_BUILD . SET_HINT ( SHINT = > ' INDEX(UP I_USERPRIV_CATALOG_AUTHID) ' ) | | ' null ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from USERPRIV UP ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where UP."CATALOG" = T.CRN ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and UP.AUTHID = UTILIZER()) ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and exists (select ' | | PKG_SQL_BUILD . SET_HINT ( SHINT = > ' INDEX(UP I_USERPRIV_JUR_PERS_ROLEID) ' ) | | ' null ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from USERPRIV UP ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where UP.JUR_PERS = T.JUR_PERS ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and UP.UNITCODE = ' | | PKG_SQL_BUILD . WRAP_STR ( SVALUE = > ' CostRouteLists ' ) ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and UP.ROLEID in (select ' | | PKG_SQL_BUILD . SET_HINT ( SHINT = > ' INDEX(UR I_USERROLES_AUTHID_FK) ' ) | | ' UR.ROLEID ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from USERROLES UR ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where UR.AUTHID = UTILIZER()) ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' union all ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' select ' | | PKG_SQL_BUILD . SET_HINT ( SHINT = > ' INDEX(UP I_USERPRIV_JUR_PERS_AUTHID) ' ) | | ' null ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from USERPRIV UP ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where UP.JUR_PERS = T.JUR_PERS ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and UP.UNITCODE = ' | | PKG_SQL_BUILD . WRAP_STR ( SVALUE = > ' CostRouteLists ' ) ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and UP.AUTHID = UTILIZER()) ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' %ORDER_BY%) D) F ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where F.NROW between :NROW_FROM and :NROW_TO ' ) ;
/* Учтём сортировки */
PKG_P8PANELS_VISUAL . TORDERS_SET_QUERY ( RDATA_GRID = > RDG , RORDERS = > RO , SPATTERN = > ' %ORDER_BY% ' , CSQL = > CSQL ) ;
/* Разбираем е г о */
ICURSOR : = PKG_SQL_DML . OPEN_CURSOR ( SWHAT = > ' SELECT ' ) ;
PKG_SQL_DML . PARSE ( ICURSOR = > ICURSOR , SQUERY = > CSQL ) ;
/* Делаем подстановку параметров */
PKG_SQL_DML . BIND_VARIABLE_NUM ( ICURSOR = > ICURSOR , SNAME = > ' NCOMPANY ' , NVALUE = > NCOMPANY ) ;
PKG_SQL_DML . BIND_VARIABLE_NUM ( ICURSOR = > ICURSOR , SNAME = > ' NROW_FROM ' , NVALUE = > NROW_FROM ) ;
PKG_SQL_DML . BIND_VARIABLE_NUM ( ICURSOR = > ICURSOR , SNAME = > ' NROW_TO ' , NVALUE = > NROW_TO ) ;
PKG_SQL_DML . BIND_VARIABLE_NUM ( ICURSOR = > ICURSOR , SNAME = > ' NFCPRODPLANSP ' , NVALUE = > NFCPRODPLANSP ) ;
/* Описываем структуру записи курсора */
PKG_SQL_DML . DEFINE_COLUMN_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 1 ) ;
PKG_SQL_DML . DEFINE_COLUMN_STR ( ICURSOR = > ICURSOR , IPOSITION = > 2 ) ;
PKG_SQL_DML . DEFINE_COLUMN_STR ( ICURSOR = > ICURSOR , IPOSITION = > 3 ) ;
PKG_SQL_DML . DEFINE_COLUMN_DATE ( ICURSOR = > ICURSOR , IPOSITION = > 4 ) ;
PKG_SQL_DML . DEFINE_COLUMN_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 5 ) ;
PKG_SQL_DML . DEFINE_COLUMN_DATE ( ICURSOR = > ICURSOR , IPOSITION = > 6 ) ;
PKG_SQL_DML . DEFINE_COLUMN_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 7 ) ;
PKG_SQL_DML . DEFINE_COLUMN_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 8 ) ;
/* Делаем выборку */
if ( PKG_SQL_DML . EXECUTE ( ICURSOR = > ICURSOR ) = 0 ) then
null ;
end if ;
/* Обходим выбранные записи */
while ( PKG_SQL_DML . FETCH_ROWS ( ICURSOR = > ICURSOR ) > 0 )
loop
/* Добавляем колонки с данными */
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLN ( RROW = > RDG_ROW ,
SNAME = > ' NRN ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 1 ,
BCLEAR = > true ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLS ( RROW = > RDG_ROW ,
SNAME = > ' SDOCPREF ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 2 ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLS ( RROW = > RDG_ROW , SNAME = > ' SDOCNUMB ' , ICURSOR = > ICURSOR , NPOSITION = > 3 ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLD ( RROW = > RDG_ROW ,
SNAME = > ' DEXEC_DATE ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 4 ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLN ( RROW = > RDG_ROW ,
SNAME = > ' NQUANT ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 5 ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLD ( RROW = > RDG_ROW ,
SNAME = > ' DREL_DATE ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 6 ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLN ( RROW = > RDG_ROW ,
SNAME = > ' NREL_QUANT ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 7 ) ;
/* Добавляем строку в таблицу */
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_ROW ( RDATA_GRID = > RDG , RROW = > RDG_ROW ) ;
end loop ;
exception
when others then
PKG_SQL_DML . CLOSE_CURSOR ( ICURSOR = > ICURSOR ) ;
raise ;
end ;
/* Сериализуем описание */
COUT : = PKG_P8PANELS_VISUAL . TDATA_GRID_TO_XML ( RDATA_GRID = > RDG , NINCLUDE_DEF = > NINCLUDE_DEF ) ;
end FCROUTLST_DG_BY_PRDCT ;
2024-04-25 18:38:26 +03:00
2024-03-18 15:58:40 +03:00
/* Получение таблицы маршрутных листов, связанных с о спецификацией плана (для приходов) */
procedure FCROUTLST_DG_BY_DEPS
(
NFCPRODPLANSP in number , -- Р е г . номер связанной спецификации плана
NPAGE_NUMBER in number , -- Номер страницы (игнорируется при NPAGE_SIZE=0)
NPAGE_SIZE in number , -- Количество записей на странице (0 - все)
CORDERS in clob , -- Сортировки
NINCLUDE_DEF in number , -- Признак включения описания колонок таблицы в ответ
COUT out clob -- Сериализованная таблица данных
)
is
NCOMPANY PKG_STD . TREF : = GET_SESSION_COMPANY ( ) ; -- Организация сеанса
RO PKG_P8PANELS_VISUAL . TORDERS ; -- Сортировки
RDG PKG_P8PANELS_VISUAL . TDATA_GRID ; -- Описание таблицы
RDG_ROW PKG_P8PANELS_VISUAL . TROW ; -- Строка таблицы
NROW_FROM PKG_STD . TREF ; -- Номер строки с
NROW_TO PKG_STD . TREF ; -- Номер строки по
CSQL clob ; -- Буфер для запроса
ICURSOR integer ; -- К у р с о р для исполнения запроса
begin
/* Читем сортировки */
RO : = PKG_P8PANELS_VISUAL . TORDERS_FROM_XML ( CORDERS = > CORDERS ) ;
/* Преобразуем номер и размер страницы в номер строк с и по */
PKG_P8PANELS_VISUAL . UTL_ROWS_LIMITS_CALC ( NPAGE_NUMBER = > NPAGE_NUMBER ,
NPAGE_SIZE = > NPAGE_SIZE ,
NROW_FROM = > NROW_FROM ,
NROW_TO = > NROW_TO ) ;
/* Инициализируем таблицу данных */
RDG : = PKG_P8PANELS_VISUAL . TDATA_GRID_MAKE ( ) ;
/* Описываем колонки таблицы данных */
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' NRN ' ,
SCAPTION = > ' Р е г . номер' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_NUMB ,
BVISIBLE = > false ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' SDOCPREF ' ,
SCAPTION = > ' Префикс ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_STR ,
BVISIBLE = > true ,
BORDER = > true ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' SDOCNUMB ' ,
SCAPTION = > ' Номер ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_STR ,
BVISIBLE = > true ,
BORDER = > true ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' DEXEC_DATE ' ,
SCAPTION = > ' Дата запуска ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_DATE ,
BVISIBLE = > true ,
BORDER = > true ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' NQUANT ' ,
SCAPTION = > ' Количество запуска ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_NUMB ,
BVISIBLE = > true ,
BORDER = > true ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' DREL_DATE ' ,
SCAPTION = > ' Дата выпуска ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_DATE ,
BVISIBLE = > true ,
BORDER = > true ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' NREL_QUANT ' ,
SCAPTION = > ' Количество выпуска ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_NUMB ,
BVISIBLE = > true ,
BORDER = > true ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' NQUANT_FACT ' ,
SCAPTION = > ' Сдано ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_NUMB ,
BVISIBLE = > true ,
BORDER = > true ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' NPROCENT ' ,
SCAPTION = > ' % готовности ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_NUMB ,
BVISIBLE = > true ,
BORDER = > true ) ;
/* Обходим данные */
begin
/* Добавляем подсказку совместимости */
CSQL : = PKG_SQL_BUILD . COMPATIBLE ( SSQL = > CSQL ) ;
/* Формируем запрос */
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' select * ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from (select D.*, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > PKG_SQL_BUILD . SQLROWNUM ( ) | | ' NROW ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from (select P.NRN, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' P.SDOCPREF, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' P.SDOCNUMB, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' P.DEXEC_DATE, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' P.NQUANT, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' P.DREL_DATE, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' P.NREL_QUANT, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' P.NQUANT_FACT, ' ) ;
2024-04-25 18:38:26 +03:00
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' case when (P.NT_SHT_PLAN <> 0) then ROUND(P.NLABOUR_FACT / P.NT_SHT_PLAN * 100, 3) else 0 end NPROCENT ' ) ;
2024-03-18 15:58:40 +03:00
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from (select T.RN NRN, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' T.DOCPREF SDOCPREF, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' T.DOCNUMB SDOCNUMB, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' T.EXEC_DATE DEXEC_DATE, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' T.QUANT NQUANT, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' T.REL_DATE DREL_DATE, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' T.REL_QUANT NREL_QUANT, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' (select SUM(SP.QUANT_FACT) ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from DOCLINKS D, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' INCOMEFROMDEPSSPEC SP ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where D.IN_UNITCODE = ' | | PKG_SQL_BUILD . WRAP_STR ( SVALUE = > ' CostRouteLists ' ) ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and D.IN_DOCUMENT = T.RN ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and D.OUT_UNITCODE = ' | | PKG_SQL_BUILD . WRAP_STR ( SVALUE = > ' IncomFromDeps ' ) ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and SP.PRN = D.OUT_DOCUMENT) NQUANT_FACT, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' (select SUM(SP.LABOUR_FACT) ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from FCROUTLSTSP SP ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where SP.PRN = T.RN) NLABOUR_FACT, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' (select SUM(SP.T_SHT_PLAN) ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from FCROUTLSTSP SP ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where SP.PRN = T.RN) NT_SHT_PLAN ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from FCROUTLST T, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' DOCLINKS DL ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where DL.IN_DOCUMENT = :NFCPRODPLANSP ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and DL.IN_UNITCODE = ' | | PKG_SQL_BUILD . WRAP_STR ( SVALUE = > ' CostProductPlansSpecs ' ) ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and DL.OUT_UNITCODE = ' | | PKG_SQL_BUILD . WRAP_STR ( SVALUE = > ' CostRouteLists ' ) ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and T.RN = DL.OUT_DOCUMENT ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and T.COMPANY = :NCOMPANY ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and T."STATE" = ' | | PKG_SQL_BUILD . WRAP_NUM ( NVALUE = > 1 ) ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and exists (select ' | | PKG_SQL_BUILD . SET_HINT ( SHINT = > ' INDEX(UP I_USERPRIV_CATALOG_ROLEID) ' ) | | ' null ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from USERPRIV UP ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where UP."CATALOG" = T.CRN ' ) ;
2024-04-25 18:38:26 +03:00
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and UP.ROLEID in (select ' | | PKG_SQL_BUILD . SET_HINT ( SHINT = > ' INDEX(UR I_USERROLES_AUTHID_FK) ' ) | | ' UR.ROLEID ' ) ;
2024-03-18 15:58:40 +03:00
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from USERROLES UR ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where UR.AUTHID = UTILIZER()) ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' union all ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' select ' | | PKG_SQL_BUILD . SET_HINT ( SHINT = > ' INDEX(UP I_USERPRIV_CATALOG_AUTHID) ' ) | | ' null ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from USERPRIV UP ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where UP."CATALOG" = T.CRN ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and UP.AUTHID = UTILIZER()) ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and exists (select ' | | PKG_SQL_BUILD . SET_HINT ( SHINT = > ' INDEX(UP I_USERPRIV_JUR_PERS_ROLEID) ' ) | | ' null ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from USERPRIV UP ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where UP.JUR_PERS = T.JUR_PERS ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and UP.UNITCODE = ' | | PKG_SQL_BUILD . WRAP_STR ( SVALUE = > ' CostRouteLists ' ) ) ;
2024-04-25 18:38:26 +03:00
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and UP.ROLEID in (select ' | | PKG_SQL_BUILD . SET_HINT ( SHINT = > ' INDEX(UR I_USERROLES_AUTHID_FK) ' ) | | ' UR.ROLEID ' ) ;
2024-03-18 15:58:40 +03:00
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from USERROLES UR ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where UR.AUTHID = UTILIZER()) ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' union all ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' select ' | | PKG_SQL_BUILD . SET_HINT ( SHINT = > ' INDEX(UP I_USERPRIV_JUR_PERS_AUTHID) ' ) | | ' null ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from USERPRIV UP ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where UP.JUR_PERS = T.JUR_PERS ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and UP.UNITCODE = ' | | PKG_SQL_BUILD . WRAP_STR ( SVALUE = > ' CostRouteLists ' ) ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and UP.AUTHID = UTILIZER())) P ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' %ORDER_BY%) D) F ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where F.NROW between :NROW_FROM and :NROW_TO ' ) ;
/* Учтём сортировки */
PKG_P8PANELS_VISUAL . TORDERS_SET_QUERY ( RDATA_GRID = > RDG , RORDERS = > RO , SPATTERN = > ' %ORDER_BY% ' , CSQL = > CSQL ) ;
/* Разбираем е г о */
ICURSOR : = PKG_SQL_DML . OPEN_CURSOR ( SWHAT = > ' SELECT ' ) ;
PKG_SQL_DML . PARSE ( ICURSOR = > ICURSOR , SQUERY = > CSQL ) ;
/* Делаем подстановку параметров */
PKG_SQL_DML . BIND_VARIABLE_NUM ( ICURSOR = > ICURSOR , SNAME = > ' NCOMPANY ' , NVALUE = > NCOMPANY ) ;
PKG_SQL_DML . BIND_VARIABLE_NUM ( ICURSOR = > ICURSOR , SNAME = > ' NROW_FROM ' , NVALUE = > NROW_FROM ) ;
PKG_SQL_DML . BIND_VARIABLE_NUM ( ICURSOR = > ICURSOR , SNAME = > ' NROW_TO ' , NVALUE = > NROW_TO ) ;
PKG_SQL_DML . BIND_VARIABLE_NUM ( ICURSOR = > ICURSOR , SNAME = > ' NFCPRODPLANSP ' , NVALUE = > NFCPRODPLANSP ) ;
/* Описываем структуру записи курсора */
PKG_SQL_DML . DEFINE_COLUMN_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 1 ) ;
PKG_SQL_DML . DEFINE_COLUMN_STR ( ICURSOR = > ICURSOR , IPOSITION = > 2 ) ;
PKG_SQL_DML . DEFINE_COLUMN_STR ( ICURSOR = > ICURSOR , IPOSITION = > 3 ) ;
PKG_SQL_DML . DEFINE_COLUMN_DATE ( ICURSOR = > ICURSOR , IPOSITION = > 4 ) ;
PKG_SQL_DML . DEFINE_COLUMN_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 5 ) ;
PKG_SQL_DML . DEFINE_COLUMN_DATE ( ICURSOR = > ICURSOR , IPOSITION = > 6 ) ;
PKG_SQL_DML . DEFINE_COLUMN_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 7 ) ;
PKG_SQL_DML . DEFINE_COLUMN_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 8 ) ;
PKG_SQL_DML . DEFINE_COLUMN_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 9 ) ;
PKG_SQL_DML . DEFINE_COLUMN_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 10 ) ;
/* Делаем выборку */
if ( PKG_SQL_DML . EXECUTE ( ICURSOR = > ICURSOR ) = 0 ) then
null ;
end if ;
/* Обходим выбранные записи */
while ( PKG_SQL_DML . FETCH_ROWS ( ICURSOR = > ICURSOR ) > 0 )
loop
/* Добавляем колонки с данными */
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLN ( RROW = > RDG_ROW ,
SNAME = > ' NRN ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 1 ,
BCLEAR = > true ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLS ( RROW = > RDG_ROW , SNAME = > ' SDOCPREF ' , ICURSOR = > ICURSOR , NPOSITION = > 2 ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLS ( RROW = > RDG_ROW , SNAME = > ' SDOCNUMB ' , ICURSOR = > ICURSOR , NPOSITION = > 3 ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLD ( RROW = > RDG_ROW ,
SNAME = > ' DEXEC_DATE ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 4 ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLN ( RROW = > RDG_ROW , SNAME = > ' NQUANT ' , ICURSOR = > ICURSOR , NPOSITION = > 5 ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLD ( RROW = > RDG_ROW ,
SNAME = > ' DREL_DATE ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 6 ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLN ( RROW = > RDG_ROW ,
SNAME = > ' NREL_QUANT ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 7 ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLN ( RROW = > RDG_ROW ,
SNAME = > ' NQUANT_FACT ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 8 ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLN ( RROW = > RDG_ROW , SNAME = > ' NPROCENT ' , ICURSOR = > ICURSOR , NPOSITION = > 9 ) ;
/* Добавляем строку в таблицу */
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_ROW ( RDATA_GRID = > RDG , RROW = > RDG_ROW ) ;
end loop ;
exception
when others then
PKG_SQL_DML . CLOSE_CURSOR ( ICURSOR = > ICURSOR ) ;
raise ;
end ;
/* Сериализуем описание */
COUT : = PKG_P8PANELS_VISUAL . TDATA_GRID_TO_XML ( RDATA_GRID = > RDG , NINCLUDE_DEF = > NINCLUDE_DEF ) ;
end FCROUTLST_DG_BY_DEPS ;
2024-04-25 18:38:26 +03:00
2024-03-18 15:58:40 +03:00
/* Получение таблицы маршрутных листов, связанных с о спецификацией плана с учетом типа */
procedure FCROUTLST_DG_GET
(
NFCPRODPLANSP in number , -- Р е г . номер связанной спецификации плана
2024-05-07 17:37:23 +03:00
NTYPE in number , -- Тип спецификации плана (см. константы NTASK_TYPE_*)
2024-03-18 15:58:40 +03:00
NPAGE_NUMBER in number , -- Номер страницы (игнорируется при NPAGE_SIZE=0)
NPAGE_SIZE in number , -- Количество записей на странице (0 - все)
CORDERS in clob , -- Сортировки
NINCLUDE_DEF in number , -- Признак включения описания колонок таблицы в ответ
COUT out clob -- Сериализованная таблица данных
)
is
begin
/* Выбираем сборку таблицы, исходя из типа спецификации плана */
case
/* Деталь */
2024-05-07 17:37:23 +03:00
when ( NTYPE = NTASK_TYPE_RL_WITH_GP ) then
2024-03-18 15:58:40 +03:00
/* Получаем таблицу по детали */
FCROUTLST_DG_BY_DTL ( NFCPRODPLANSP = > NFCPRODPLANSP ,
NPAGE_NUMBER = > NPAGE_NUMBER ,
NPAGE_SIZE = > NPAGE_SIZE ,
CORDERS = > CORDERS ,
NINCLUDE_DEF = > NINCLUDE_DEF ,
COUT = > COUT ) ;
/* Изделие / сборочная единица */
2024-05-07 17:37:23 +03:00
when ( NTYPE = NTASK_TYPE_RL_WITH_DL ) then
2024-03-18 15:58:40 +03:00
/* Получаем таблицу по изделию */
FCROUTLST_DG_BY_PRDCT ( NFCPRODPLANSP = > NFCPRODPLANSP ,
NPAGE_NUMBER = > NPAGE_NUMBER ,
NPAGE_SIZE = > NPAGE_SIZE ,
CORDERS = > CORDERS ,
NINCLUDE_DEF = > NINCLUDE_DEF ,
COUT = > COUT ) ;
/* Для приходов из подразделений */
2024-05-07 17:37:23 +03:00
when ( ( NTYPE = NTASK_TYPE_INC_DEPS_RL ) or ( NTYPE = NTASK_TYPE_RL ) ) then
2024-03-18 15:58:40 +03:00
/* Получаем таблицу по приходу */
FCROUTLST_DG_BY_DEPS ( NFCPRODPLANSP = > NFCPRODPLANSP ,
NPAGE_NUMBER = > NPAGE_NUMBER ,
NPAGE_SIZE = > NPAGE_SIZE ,
CORDERS = > CORDERS ,
NINCLUDE_DEF = > NINCLUDE_DEF ,
COUT = > COUT ) ;
else
P_EXCEPTION ( 0 ,
' Н е определен тип получения таблицы маршрутных листов.' ) ;
end case ;
end FCROUTLST_DG_GET ;
2024-04-25 18:38:26 +03:00
2024-02-05 16:51:24 +03:00
/* Получение списка спецификаций планов и отчетов производства изделий для диаграммы Ганта */
procedure FCPRODPLANSP_GET
(
2024-03-18 15:58:40 +03:00
NCRN in number , -- Р е г . номер каталога
NLEVEL in number : = null , -- Уровень отбора
SSORT_FIELD in varchar2 : = ' DREP_DATE_TO ' , -- Поле сортировки
2024-04-03 16:11:04 +03:00
COUT out clob , -- Список задач
2024-03-18 15:58:40 +03:00
NMAX_LEVEL out number -- Максимальный уровень иерархии
2024-02-05 16:51:24 +03:00
)
is
/* Переменные */
2024-03-18 15:58:40 +03:00
RG PKG_P8PANELS_VISUAL . TGANTT ; -- Описание диаграммы Ганта
RGT PKG_P8PANELS_VISUAL . TGANTT_TASK ; -- Описание задачи для диаграммы
BREAD_ONLY_DATES boolean : = false ; -- Флаг доступности дат проекта только для чтения
STASK_BG_COLOR PKG_STD . TSTRING ; -- Цвет заливки задачи
STASK_TEXT_COLOR PKG_STD . TSTRING ; -- Цвет текста задачи
STASK_BG_PROGRESS_COLOR PKG_STD . TSTRING ; -- Цвет заливки прогресса задачи
NTASK_PROGRESS PKG_STD . TNUMBER ; -- Прогресс выполнения задачи
DDATE_FROM PKG_STD . TLDATE ; -- Дата запуска спецификации
DDATE_TO PKG_STD . TLDATE ; -- Дата выпуска спецификации
STASK_CAPTION PKG_STD . TSTRING ; -- Описание задачи в Ганте
2024-05-07 17:37:23 +03:00
NTYPE PKG_STD . TNUMBER ; -- Тип задачи (см. константы NTASK_TYPE_*)
2024-03-18 15:58:40 +03:00
SDETAIL_LIST PKG_STD . TSTRING ; -- Ссылки на детализацию
2024-04-03 16:11:04 +03:00
SPLAN_TITLE PKG_STD . TSTRING ; -- Заголовок плана
2024-03-18 15:58:40 +03:00
NCOMPANY PKG_STD . TREF : = GET_SESSION_COMPANY ( ) ; -- Организация сеанса
2024-05-07 17:37:23 +03:00
NTASK_CLASS PKG_STD . TNUMBER ; -- Класс задачи (см. константы NCLASS_*)
2024-05-06 16:20:24 +03:00
NLEVEL_FILTER PKG_STD . TNUMBER ; -- Уровень для фильтра
2024-03-18 15:58:40 +03:00
2024-02-14 15:18:50 +03:00
/* Объединение значений в строковое представление */
function MAKE_INFO
(
SPROD_ORDER in varchar2 , -- Заказ
SNOMEN_NAME in varchar2 , -- Наименование номенклатуры
SSUBDIV_DLVR in varchar2 , -- Сдающее подразделение
NMAIN_QUANT in number -- Выпуск
) return varchar2 -- Описание задачи в Ганте
is
SRESULT PKG_STD . TSTRING ; -- Описание задачи в Ганте
begin
/* Соединяем информацию */
SRESULT : = STRCOMBINE ( SPROD_ORDER , SNOMEN_NAME , ' , ' ) ;
SRESULT : = STRCOMBINE ( SRESULT , SSUBDIV_DLVR , ' , ' ) ;
SRESULT : = STRCOMBINE ( SRESULT , TO_CHAR ( NMAIN_QUANT ) , ' , ' ) ;
/* Возвращаем результат */
return SRESULT ;
end MAKE_INFO ;
2024-03-18 15:58:40 +03:00
2024-04-25 18:38:26 +03:00
/* Считывание максимального уровня иерархии плана по каталогу */
function PRODPLAN_MAX_LEVEL_GET
(
2024-05-09 17:41:14 +03:00
NCRN in number -- Р е г . номер каталога планов
) return number -- Максимальный уровень иерархии
2024-04-25 18:38:26 +03:00
is
2024-05-09 17:41:14 +03:00
NRESULT PKG_STD . TNUMBER : = 1 ; -- Максимальный уровень иерархии
NTOTAL PKG_STD . TNUMBER : = 0 ; -- Сумма документов по проверяемому уровню
2024-04-25 18:38:26 +03:00
begin
2024-05-06 16:20:24 +03:00
/* Цикл по уровням каталога планов */
for REC in ( select level ,
count ( TMP . RN ) COUNT_DOCS
from ( select T . RN ,
T . UP_LEVEL
from FCPRODPLAN P ,
FCPRODPLANSP T ,
FINSTATE FS
where P . CRN = NCRN
and P . CATEGORY = NFCPRODPLAN_CATEGORY
and P . STATUS = NFCPRODPLAN_STATUS
and FS . RN = P . TYPE
and FS . CODE = SFCPRODPLAN_TYPE
and exists ( select /* + INDEX(UP I_USERPRIV_JUR_PERS_ROLEID) */
null
from USERPRIV UP
where UP . JUR_PERS = P . JUR_PERS
and UP . UNITCODE = ' CostProductPlans '
and UP . ROLEID in ( select /* + INDEX(UR I_USERROLES_AUTHID_FK) */
UR . ROLEID
from USERROLES UR
where UR . AUTHID = UTILIZER ( ) )
union all
select /* + INDEX(UP I_USERPRIV_JUR_PERS_AUTHID) */
null
from USERPRIV UP
where UP . JUR_PERS = P . JUR_PERS
and UP . UNITCODE = ' CostProductPlans '
and UP . AUTHID = UTILIZER ( ) )
and T . PRN = P . RN
and T . MAIN_QUANT > 0 ) TMP
connect by prior TMP . RN = TMP . UP_LEVEL
start with TMP . UP_LEVEL is null
group by level
order by level )
loop
/* Получаем количество задач с учетом текущего уровня */
NTOTAL : = NTOTAL + REC . COUNT_DOCS ;
/* Если сумма документов по текущему уровню превышает максимальное количество задач */
if ( NTOTAL > = NMAX_TASKS ) then
/* Выходим из цикла */
exit ;
end if ;
/* Указываем текущий уровень */
NRESULT : = REC . LEVEL ;
end loop ;
2024-04-25 18:38:26 +03:00
/* Возвращаем результат */
return NRESULT ;
end PRODPLAN_MAX_LEVEL_GET ;
/* Определение дат спецификации плана */
procedure FCPRODPLANSP_DATES_GET
(
2024-05-09 17:41:14 +03:00
DREP_DATE in date , -- Дата запуска спецификации
DREP_DATE_TO in date , -- Дата выпуска спецификации
DINCL_DATE in date , -- Дата включения в план спецификации
DDATE_FROM out date , -- Итоговая дата запуска спецификации
DDATE_TO out date -- Итоговая дата выпуска спецификации
2024-04-25 18:38:26 +03:00
)
is
begin
/* Если даты запуска и выпуска пусты */
if ( ( DREP_DATE is null ) and ( DREP_DATE_TO is null ) ) then
/* Указываем дату включения в план */
DDATE_FROM : = DINCL_DATE ;
DDATE_TO : = DINCL_DATE ;
else
/* Указываем даты исходя из дат запуска / выпуска */
DDATE_FROM : = COALESCE ( DREP_DATE , DREP_DATE_TO ) ;
DDATE_TO : = COALESCE ( DREP_DATE_TO , DREP_DATE ) ;
end if ;
end FCPRODPLANSP_DATES_GET ;
2024-02-14 15:18:50 +03:00
/* Инициализация динамических атрибутов */
procedure TASK_ATTRS_INIT
(
2024-05-06 16:20:24 +03:00
RG in out nocopy PKG_P8PANELS_VISUAL . TGANTT -- Описание диаграммы Ганта
2024-02-14 15:18:50 +03:00
)
is
begin
/* Добавим динамические атрибуты к спецификациям */
PKG_P8PANELS_VISUAL . TGANTT_ADD_TASK_ATTR ( RGANTT = > RG ,
2024-03-18 15:58:40 +03:00
SNAME = > STASK_ATTR_START_FACT ,
SCAPTION = > ' Запущено ' ) ;
2024-02-14 15:18:50 +03:00
PKG_P8PANELS_VISUAL . TGANTT_ADD_TASK_ATTR ( RGANTT = > RG ,
SNAME = > STASK_ATTR_MAIN_QUANT ,
2024-03-18 15:58:40 +03:00
SCAPTION = > ' Количество план ' ) ;
2024-02-14 15:18:50 +03:00
PKG_P8PANELS_VISUAL . TGANTT_ADD_TASK_ATTR ( RGANTT = > RG ,
SNAME = > STASK_ATTR_REL_FACT ,
2024-03-18 15:58:40 +03:00
SCAPTION = > ' Количество сдано ' ) ;
PKG_P8PANELS_VISUAL . TGANTT_ADD_TASK_ATTR ( RGANTT = > RG ,
SNAME = > STASK_ATTR_REP_DATE_TO ,
SCAPTION = > ' Дата выпуска план ' ) ;
2024-02-14 15:18:50 +03:00
PKG_P8PANELS_VISUAL . TGANTT_ADD_TASK_ATTR ( RGANTT = > RG ,
2024-03-18 15:58:40 +03:00
SNAME = > STASK_ATTR_DL ,
SCAPTION = > ' Анализ отклонений ' ) ;
PKG_P8PANELS_VISUAL . TGANTT_ADD_TASK_ATTR ( RGANTT = > RG , SNAME = > STASK_ATTR_TYPE , SCAPTION = > ' Тип ' ) ;
2024-04-03 16:11:04 +03:00
PKG_P8PANELS_VISUAL . TGANTT_ADD_TASK_ATTR ( RGANTT = > RG ,
SNAME = > STASK_ATTR_MEAS ,
SCAPTION = > ' Единица измерения ' ) ;
2024-02-14 15:18:50 +03:00
end TASK_ATTRS_INIT ;
2024-03-18 15:58:40 +03:00
2024-02-14 15:18:50 +03:00
/* Заполнение значений динамических атрибутов */
2024-04-25 18:38:26 +03:00
procedure TASK_ATTRS_FILL
2024-02-14 15:18:50 +03:00
(
RG in PKG_P8PANELS_VISUAL . TGANTT , -- Описание диаграммы Ганта
RGT in out nocopy PKG_P8PANELS_VISUAL . TGANTT_TASK , -- Описание задачи для диаграммы
2024-03-18 15:58:40 +03:00
NSTART_FACT in number , -- Запуск факт
2024-02-14 15:18:50 +03:00
NMAIN_QUANT in number , -- Выпуск
NREL_FACT in number , -- Выпуск факт
2024-03-18 15:58:40 +03:00
DREP_DATE_TO in date , -- Дата выпуска
2024-05-07 17:37:23 +03:00
NTYPE in number , -- Тип (см. константы NTASK_TYPE_*)
2024-04-03 16:11:04 +03:00
SDETAIL_LIST in varchar2 , -- Ссылки на детализацию
SMEAS in varchar2 -- Единица измерения
2024-02-14 15:18:50 +03:00
)
is
begin
/* Добавим доп. атрибуты */
PKG_P8PANELS_VISUAL . TGANTT_TASK_ADD_ATTR_VAL ( RGANTT = > RG ,
RTASK = > RGT ,
2024-03-18 15:58:40 +03:00
SNAME = > STASK_ATTR_START_FACT ,
SVALUE = > TO_CHAR ( NSTART_FACT ) ,
2024-02-14 15:18:50 +03:00
BCLEAR = > true ) ;
PKG_P8PANELS_VISUAL . TGANTT_TASK_ADD_ATTR_VAL ( RGANTT = > RG ,
RTASK = > RGT ,
SNAME = > STASK_ATTR_MAIN_QUANT ,
SVALUE = > TO_CHAR ( NMAIN_QUANT ) ) ;
PKG_P8PANELS_VISUAL . TGANTT_TASK_ADD_ATTR_VAL ( RGANTT = > RG ,
RTASK = > RGT ,
SNAME = > STASK_ATTR_REL_FACT ,
SVALUE = > TO_CHAR ( NREL_FACT ) ) ;
PKG_P8PANELS_VISUAL . TGANTT_TASK_ADD_ATTR_VAL ( RGANTT = > RG ,
RTASK = > RGT ,
2024-03-18 15:58:40 +03:00
SNAME = > STASK_ATTR_REP_DATE_TO ,
SVALUE = > TO_CHAR ( DREP_DATE_TO , ' dd.mm.yyyy hh24:mi ' ) ) ;
PKG_P8PANELS_VISUAL . TGANTT_TASK_ADD_ATTR_VAL ( RGANTT = > RG ,
RTASK = > RGT ,
SNAME = > STASK_ATTR_TYPE ,
SVALUE = > TO_CHAR ( NTYPE ) ) ;
2024-02-14 15:18:50 +03:00
PKG_P8PANELS_VISUAL . TGANTT_TASK_ADD_ATTR_VAL ( RGANTT = > RG ,
RTASK = > RGT ,
2024-03-18 15:58:40 +03:00
SNAME = > STASK_ATTR_DL ,
SVALUE = > SDETAIL_LIST ) ;
2024-04-03 16:11:04 +03:00
PKG_P8PANELS_VISUAL . TGANTT_TASK_ADD_ATTR_VAL ( RGANTT = > RG ,
RTASK = > RGT ,
SNAME = > STASK_ATTR_MEAS ,
SVALUE = > SMEAS ) ;
2024-04-25 18:38:26 +03:00
end TASK_ATTRS_FILL ;
/* Инициализация цветов */
procedure TASK_COLORS_INIT
(
2024-05-06 16:20:24 +03:00
RG in out nocopy PKG_P8PANELS_VISUAL . TGANTT -- Описание диаграммы Ганта
2024-04-25 18:38:26 +03:00
)
is
begin
/* Добавим описание цветов */
PKG_P8PANELS_VISUAL . TGANTT_ADD_TASK_COLOR ( RGANTT = > RG ,
SBG_COLOR = > SBG_COLOR_RED ,
SDESC = > ' Для спецификаций планов и отчетов производства изделий с «Дефицит запуска» != 0 или ' | |
' не имеющих связей с разделами «Маршрутный лист» или «Приход из подразделения», а также «Дата запуска» меньше текущей. ' ) ;
PKG_P8PANELS_VISUAL . TGANTT_ADD_TASK_COLOR ( RGANTT = > RG ,
SBG_COLOR = > SBG_COLOR_YELLOW ,
SDESC = > ' Для спецификаций планов и отчетов производства изделий с «Дефицит запуска» = 0 и «Выпуск факт» = 0. ' ) ;
PKG_P8PANELS_VISUAL . TGANTT_ADD_TASK_COLOR ( RGANTT = > RG ,
SBG_COLOR = > SBG_COLOR_GREEN ,
STEXT_COLOR = > STEXT_COLOR_GREY ,
SDESC = > ' Для спецификаций планов и отчетов производства изделий с «Дефицит выпуска» = 0. ' ) ;
PKG_P8PANELS_VISUAL . TGANTT_ADD_TASK_COLOR ( RGANTT = > RG ,
SBG_COLOR = > SBG_COLOR_GREEN ,
SBG_PROGRESS_COLOR = > SBG_COLOR_YELLOW ,
STEXT_COLOR = > STEXT_COLOR_GREY ,
SDESC = > ' Для спецификаций планов и отчетов производства изделий с «Дефицит запуска» = 0 и «Выпуск факт» != 0. ' ) ;
PKG_P8PANELS_VISUAL . TGANTT_ADD_TASK_COLOR ( RGANTT = > RG ,
SBG_COLOR = > SBG_COLOR_BLACK ,
STEXT_COLOR = > STEXT_COLOR_ORANGE ,
SDESC = > ' Для спецификаций планов и отчетов производства изделий с пустыми «Дата запуска» и «Дата выпуска» и не имеющих связей с разделами «Маршрутный лист» или «Приход из подразделения». ' ) ;
PKG_P8PANELS_VISUAL . TGANTT_ADD_TASK_COLOR ( RGANTT = > RG ,
SBG_COLOR = > SBG_COLOR_GREY ,
SDESC = > ' Для спецификаций планов и отчетов производства изделий не имеющих связей с разделами «Маршрутный лист» или «Приход из подразделения», а также «Дата запуска» больше текущей. ' ) ;
end TASK_COLORS_INIT ;
/* Опеределение класса задачи */
function GET_TASK_CLASS
(
2024-05-09 17:41:14 +03:00
NDEFRESLIZ in number , -- Дефицит запуска
NREL_FACT in number , -- Выпуск факт
NDEFSTART in number , -- Дефицит выпуска
DREP_DATE in date , -- Дата запуска спецификации
DREP_DATE_TO in date , -- Дата выпуска спецификации
NHAVE_LINK in number : = 0 -- Наличие связей с "Маршрутный лист" или "Приход из подразделения"
) return number -- Класс задачи
2024-04-25 18:38:26 +03:00
is
2024-05-09 17:41:14 +03:00
NTASK_CLASS PKG_STD . TNUMBER ; -- Класс задачи (см. константы NCLASS*)
2024-04-25 18:38:26 +03:00
begin
/* Если одна из дат не указана */
if ( ( DREP_DATE is null ) or ( DREP_DATE_TO is null ) ) then
/* Если спецификация также не имеет связей */
if ( NHAVE_LINK = 0 ) then
2024-05-07 17:37:23 +03:00
NTASK_CLASS : = NCLASS_WO_LINKS ;
2024-04-25 18:38:26 +03:00
end if ;
else
/* Если нет связанных документов */
if ( NHAVE_LINK = 0 ) then
/* Если дата запуска меньше текущей даты */
if ( DREP_DATE < = sysdate ) then
2024-05-07 17:37:23 +03:00
NTASK_CLASS : = NCLASS_WITH_DEFICIT ;
2024-04-25 18:38:26 +03:00
end if ;
/* Если дата больше текущей даты */
if ( DREP_DATE > sysdate ) then
2024-05-07 17:37:23 +03:00
NTASK_CLASS : = NCLASS_FUTURE_DATE ;
2024-04-25 18:38:26 +03:00
end if ;
end if ;
end if ;
/* Если класс не определен */
if ( NTASK_CLASS is null ) then
/* Если дефицит запуска <> 0 */
if ( NDEFRESLIZ < > 0 ) then
/* Если дефицит выпуска = 0 */
if ( NDEFSTART = 0 ) then
2024-05-07 17:37:23 +03:00
NTASK_CLASS : = NCLASS_WO_DEFICIT ;
2024-04-25 18:38:26 +03:00
else
2024-05-07 17:37:23 +03:00
NTASK_CLASS : = NCLASS_WITH_DEFICIT ;
2024-04-25 18:38:26 +03:00
end if ;
else
/* Если дефицит выпуска = 0 */
if ( NDEFSTART = 0 ) then
2024-05-07 17:37:23 +03:00
NTASK_CLASS : = NCLASS_WO_DEFICIT ;
2024-04-25 18:38:26 +03:00
else
/* Если дефицит запуска = 0 и выпуск факт = 0 */
if ( ( NDEFRESLIZ = 0 ) and ( NREL_FACT = 0 ) ) then
2024-05-07 17:37:23 +03:00
NTASK_CLASS : = NCLASS_FULL_DEFICIT ;
2024-04-25 18:38:26 +03:00
end if ;
/* Если дефицит запуска = 0 и выпуск факт <> 0 */
if ( ( NDEFRESLIZ = 0 ) and ( NREL_FACT < > 0 ) ) then
2024-05-07 17:37:23 +03:00
NTASK_CLASS : = NCLASS_PART_DEFICIT ;
2024-04-25 18:38:26 +03:00
end if ;
end if ;
end if ;
end if ;
/* Возвращаем результат */
return NTASK_CLASS ;
end GET_TASK_CLASS ;
2024-03-18 15:58:40 +03:00
/* Получение типа задачи */
procedure GET_TASK_TYPE
(
2024-05-09 17:41:14 +03:00
NCOMPANY in number , -- Р е г . номер организации
SSORT_FIELD in varchar2 , -- Тип сортировки
NFCPRODPLAN in number , -- Р е г . номер плана
NFCPRODPLANSP in number , -- Р е г . номер спецификации плана
NTASK_CLASS in number , -- Класс задачи (см. константы NCLASS_*)
NTYPE out number , -- Тип задачи (см. константы NTASK_TYPE_*)
SDETAIL_LIST out varchar2 -- Ссылки на детализацию
2024-03-18 15:58:40 +03:00
)
is
begin
/* Исходим сортировка по "Дата запуска" */
if ( SSORT_FIELD = ' DREP_DATE ' ) then
2024-05-07 17:37:23 +03:00
/* Если класс "С дефицитом запуска или датой меньше текущей" */
if ( NTASK_CLASS = NCLASS_WITH_DEFICIT ) then
2024-03-18 15:58:40 +03:00
/* Проверяем деталь или изделие */
begin
2024-05-07 17:37:23 +03:00
select NTASK_TYPE_RL_WITH_DL
2024-03-18 15:58:40 +03:00
into NTYPE
from DUAL
where exists ( select null
from FCPRODPLANSP SP
where SP . PRN = NFCPRODPLAN
and SP . UP_LEVEL = NFCPRODPLANSP ) ;
exception
when others then
2024-05-07 17:37:23 +03:00
NTYPE : = NTASK_TYPE_RL_WITH_GP ;
2024-03-18 15:58:40 +03:00
end ;
/* Проверяем наличие связей с маршрутными листами */
if ( LINK_FCROUTLST_CHECK ( NCOMPANY = > NCOMPANY , NFCPRODPLANSP = > NFCPRODPLANSP , NSTATE = > 0 ) = 0 ) then
/* Указываем, что маршрутных листов нет */
SDETAIL_LIST : = ' Нет маршрутных листов ' ;
2024-05-07 17:37:23 +03:00
NTYPE : = NTASK_TYPE_EMPTY ;
2024-03-18 15:58:40 +03:00
else
/* Указываем, что маршрутные листы есть */
SDETAIL_LIST : = ' Маршрутные листы ' ;
end if ;
else
/* Н е отображаем информацию о маршрутных листах */
2024-05-07 17:37:23 +03:00
NTYPE : = NTASK_TYPE_EMPTY ;
2024-03-18 15:58:40 +03:00
SDETAIL_LIST : = null ;
end if ;
else
2024-04-25 18:38:26 +03:00
/* Исходим от класса */
case
2024-05-07 17:37:23 +03:00
/* Если класс "Без дефицита выпуска" */
when ( NTASK_CLASS = NCLASS_WO_DEFICIT ) then
2024-03-18 15:58:40 +03:00
/* Проверяем наличией связей с приходов из подразделений */
if ( LINK_INCOMEFROMDEPS_CHECK ( NCOMPANY = > NCOMPANY , NFCPRODPLANSP = > NFCPRODPLANSP , NSTATE = > 2 ) = 0 ) then
/* Указываем, что приходов из подразделений нет */
SDETAIL_LIST : = ' Нет приходов из подразделений ' ;
2024-05-07 17:37:23 +03:00
NTYPE : = NTASK_TYPE_EMPTY ;
2024-03-18 15:58:40 +03:00
else
/* Указываем, что приходы из подразделений есть */
SDETAIL_LIST : = ' Приход из подразделений ' ;
2024-05-07 17:37:23 +03:00
NTYPE : = NTASK_TYPE_INC_DEPS ;
2024-03-18 15:58:40 +03:00
end if ;
2024-05-07 17:37:23 +03:00
/* Если класс "С частичным дефицитом выпуска" */
when ( NTASK_CLASS = NCLASS_PART_DEFICIT ) then
2024-03-18 15:58:40 +03:00
/* Проверяем наличией связей с приходов из подразделений */
if ( LINK_INCOMEFROMDEPS_CHECK ( NCOMPANY = > NCOMPANY , NFCPRODPLANSP = > NFCPRODPLANSP ) = 0 ) then
/* Указываем, что приходов из подразделений нет */
SDETAIL_LIST : = ' Нет приходов из подразделений ' ;
2024-05-07 17:37:23 +03:00
NTYPE : = NTASK_TYPE_EMPTY ;
2024-03-18 15:58:40 +03:00
else
/* Указываем, что приходы из подразделений есть */
SDETAIL_LIST : = ' Приход из подразделений ' ;
2024-05-07 17:37:23 +03:00
NTYPE : = NTASK_TYPE_INC_DEPS_RL ;
2024-03-18 15:58:40 +03:00
end if ;
2024-05-07 17:37:23 +03:00
/* Если класс "С дефицитом запуска или датой меньше текущей" или "С полным дефицитом выпуска" */
when ( ( NTASK_CLASS = NCLASS_FULL_DEFICIT ) or ( NTASK_CLASS = NCLASS_WITH_DEFICIT ) ) then
2024-03-18 15:58:40 +03:00
/* Проверяем наличие связей с маршрутными листами */
if ( LINK_FCROUTLST_CHECK ( NCOMPANY = > NCOMPANY , NFCPRODPLANSP = > NFCPRODPLANSP , NSTATE = > 1 ) = 0 ) then
/* Указываем, что маршрутных листов нет */
SDETAIL_LIST : = ' Нет маршрутных листов ' ;
2024-05-07 17:37:23 +03:00
NTYPE : = NTASK_TYPE_EMPTY ;
2024-03-18 15:58:40 +03:00
else
/* Указываем, что маршрутные листы есть */
SDETAIL_LIST : = ' Маршрутные листы ' ;
2024-05-07 17:37:23 +03:00
NTYPE : = NTASK_TYPE_RL ;
2024-03-18 15:58:40 +03:00
end if ;
2024-04-25 18:38:26 +03:00
/* Класс не поддерживается */
2024-03-18 15:58:40 +03:00
else
2024-04-25 18:38:26 +03:00
/* Для данных классов ничего не выводится */
2024-05-07 17:37:23 +03:00
NTYPE : = NTASK_TYPE_EMPTY ;
2024-03-18 15:58:40 +03:00
SDETAIL_LIST : = null ;
2024-04-25 18:38:26 +03:00
end case ;
2024-03-18 15:58:40 +03:00
end if ;
end GET_TASK_TYPE ;
2024-04-25 18:38:26 +03:00
/* Формирование цветовых характеристик для задачи */
procedure GET_TASK_COLORS
(
2024-05-07 17:37:23 +03:00
NTASK_CLASS in number , -- Класс задачи (см. константы NCLASS_*)
2024-04-25 18:38:26 +03:00
STASK_BG_COLOR out varchar2 , -- Цвет заливки спецификации
STASK_BG_PROGRESS_COLOR out varchar2 , -- Цвет заливки прогресса спецификации
STASK_TEXT_COLOR in out varchar2 -- Цвет текста
)
is
begin
/* Исходим от класса задачи */
case NTASK_CLASS
2024-05-07 17:37:23 +03:00
/* Без дефицита выпуска */
when NCLASS_WO_DEFICIT then
2024-04-25 18:38:26 +03:00
STASK_BG_COLOR : = SBG_COLOR_GREEN ;
STASK_TEXT_COLOR : = STEXT_COLOR_GREY ;
STASK_BG_PROGRESS_COLOR : = null ;
2024-05-07 17:37:23 +03:00
/* С частичным дефицитом выпуска */
when NCLASS_PART_DEFICIT then
2024-04-25 18:38:26 +03:00
STASK_BG_COLOR : = SBG_COLOR_GREEN ;
STASK_BG_PROGRESS_COLOR : = SBG_COLOR_YELLOW ;
STASK_TEXT_COLOR : = STEXT_COLOR_GREY ;
2024-05-07 17:37:23 +03:00
/* С полным дефицитом выпуска */
when NCLASS_FULL_DEFICIT then
2024-04-25 18:38:26 +03:00
STASK_BG_COLOR : = SBG_COLOR_YELLOW ;
STASK_TEXT_COLOR : = null ;
STASK_BG_PROGRESS_COLOR : = null ;
2024-05-07 17:37:23 +03:00
/* С дефицитом запуска или датой меньше текущей */
when NCLASS_WITH_DEFICIT then
2024-04-25 18:38:26 +03:00
STASK_BG_COLOR : = SBG_COLOR_RED ;
STASK_TEXT_COLOR : = null ;
STASK_BG_PROGRESS_COLOR : = null ;
2024-05-07 17:37:23 +03:00
/* Дата анализа еще не наступила */
when NCLASS_FUTURE_DATE then
2024-04-25 18:38:26 +03:00
STASK_BG_COLOR : = SBG_COLOR_GREY ;
STASK_TEXT_COLOR : = null ;
STASK_BG_PROGRESS_COLOR : = null ;
2024-05-07 17:37:23 +03:00
/* Задача без связи */
when NCLASS_WO_LINKS then
2024-04-25 18:38:26 +03:00
STASK_BG_COLOR : = SBG_COLOR_BLACK ;
STASK_TEXT_COLOR : = STEXT_COLOR_ORANGE ;
STASK_BG_PROGRESS_COLOR : = null ;
else
/* Н е определено */
STASK_BG_COLOR : = null ;
STASK_TEXT_COLOR : = null ;
STASK_BG_PROGRESS_COLOR : = null ;
end case ;
end GET_TASK_COLORS ;
2024-02-05 16:51:24 +03:00
begin
2024-04-03 16:11:04 +03:00
/* Определяем заголовок плана */
FIND_ACATALOG_RN ( NFLAG_SMART = > 0 ,
NCOMPANY = > NCOMPANY ,
NVERSION = > null ,
SUNITCODE = > ' CostProductPlans ' ,
NRN = > NCRN ,
SNAME = > SPLAN_TITLE ) ;
2024-02-05 16:51:24 +03:00
/* Инициализируем диаграмму Ганта */
2024-04-03 16:11:04 +03:00
RG : = PKG_P8PANELS_VISUAL . TGANTT_MAKE ( STITLE = > SPLAN_TITLE ,
2024-02-05 16:51:24 +03:00
NZOOM = > PKG_P8PANELS_VISUAL . NGANTT_ZOOM_DAY ,
BREAD_ONLY_DATES = > BREAD_ONLY_DATES ,
BREAD_ONLY_PROGRESS = > true ) ;
2024-02-14 15:18:50 +03:00
/* Инициализируем динамические атрибуты к спецификациям */
TASK_ATTRS_INIT ( RG = > RG ) ;
/* Инициализируем описания цветов */
TASK_COLORS_INIT ( RG = > RG ) ;
2024-02-05 16:51:24 +03:00
/* Определяем максимальный уровень иерархии */
2024-02-14 15:18:50 +03:00
NMAX_LEVEL : = PRODPLAN_MAX_LEVEL_GET ( NCRN = > NCRN ) ;
2024-05-06 16:20:24 +03:00
/* Определяем уровень фильтра */
NLEVEL_FILTER : = COALESCE ( NLEVEL , NMAX_LEVEL ) ;
2024-02-14 15:18:50 +03:00
/* Обходим данные */
2024-02-26 13:10:17 +03:00
for C in ( select TMP . * ,
level NTASK_LEVEL
from ( select T . RN NRN ,
T . PRN NPRN ,
( select PORD . NUMB from FACEACC PORD where PORD . RN = T . PROD_ORDER ) SPROD_ORDER ,
T . REP_DATE DREP_DATE ,
T . REP_DATE_TO DREP_DATE_TO ,
T . INCL_DATE DINCL_DATE ,
T . ROUTE SROUTE ,
2024-03-18 15:58:40 +03:00
( FM . CODE | | ' , ' | | FM . NAME ) SNAME ,
2024-02-26 13:10:17 +03:00
D . NOMEN_NAME SNOMEN_NAME ,
2024-03-18 15:58:40 +03:00
T . START_FACT NSTART_FACT ,
2024-02-26 13:10:17 +03:00
( T . QUANT_REST - T . START_FACT ) NDEFRESLIZ ,
T . REL_FACT NREL_FACT ,
( T . MAIN_QUANT - T . REL_FACT ) NDEFSTART ,
T . MAIN_QUANT NMAIN_QUANT ,
( select IDD . CODE from INS_DEPARTMENT IDD where IDD . RN = T . SUBDIV_DLVR ) SSUBDIV_DLVR ,
( select 1
from DUAL
where exists ( select null
from DOCLINKS L
where L . IN_DOCUMENT = T . RN
and L . IN_UNITCODE = ' CostProductPlansSpecs '
and ( L . OUT_UNITCODE = ' CostRouteLists ' or L . OUT_UNITCODE = ' IncomFromDeps ' )
and ROWNUM = 1 ) ) NHAVE_LINK ,
T . UP_LEVEL NUP_LEVEL ,
case SSORT_FIELD
when ' DREP_DATE_TO ' then
T . REP_DATE_TO
else
T . REP_DATE
2024-04-03 16:11:04 +03:00
end DORDER_DATE ,
DM . MEAS_MNEMO SMEAS
2024-02-26 13:10:17 +03:00
from FCPRODPLAN P ,
FINSTATE FS ,
FCPRODPLANSP T ,
FCMATRESOURCE FM ,
2024-04-03 16:11:04 +03:00
DICNOMNS D ,
DICMUNTS DM
2024-02-26 13:10:17 +03:00
where P . CRN = NCRN
and P . CATEGORY = NFCPRODPLAN_CATEGORY
and P . STATUS = NFCPRODPLAN_STATUS
and FS . RN = P . TYPE
and FS . CODE = SFCPRODPLAN_TYPE
and exists
( select /* + INDEX(UP I_USERPRIV_JUR_PERS_ROLEID) */
null
from USERPRIV UP
where UP . JUR_PERS = P . JUR_PERS
and UP . UNITCODE = ' CostProductPlans '
and UP . ROLEID in ( select /* + INDEX(UR I_USERROLES_AUTHID_FK) */
UR . ROLEID
from USERROLES UR
where UR . AUTHID = UTILIZER ( ) )
union all
select /* + INDEX(UP I_USERPRIV_JUR_PERS_AUTHID) */
null
from USERPRIV UP
where UP . JUR_PERS = P . JUR_PERS
and UP . UNITCODE = ' CostProductPlans '
and UP . AUTHID = UTILIZER ( ) )
and T . PRN = P . RN
2024-02-27 12:18:24 +03:00
and T . MAIN_QUANT > 0
2024-02-26 13:10:17 +03:00
and ( ( T . REP_DATE is not null ) or ( T . REP_DATE_TO is not null ) or ( T . INCL_DATE is not null ) )
and FM . RN = T . MATRES
2024-04-03 16:11:04 +03:00
and D . RN = FM . NOMENCLATURE
and D . UMEAS_MAIN = DM . RN ) TMP
2024-05-06 16:20:24 +03:00
where level < = NLEVEL_FILTER
2024-02-26 13:10:17 +03:00
connect by prior TMP . NRN = TMP . NUP_LEVEL
start with TMP . NUP_LEVEL is null
order siblings by TMP . DORDER_DATE asc )
loop
/* Формируем описание задачи в Ганте */
STASK_CAPTION : = MAKE_INFO ( SPROD_ORDER = > C . SPROD_ORDER ,
SNOMEN_NAME = > C . SNOMEN_NAME ,
SSUBDIV_DLVR = > C . SSUBDIV_DLVR ,
NMAIN_QUANT = > C . NMAIN_QUANT ) ;
2024-04-25 18:38:26 +03:00
/* Определяем класс задачи */
NTASK_CLASS : = GET_TASK_CLASS ( NDEFRESLIZ = > C . NDEFRESLIZ ,
NREL_FACT = > C . NREL_FACT ,
NDEFSTART = > C . NDEFSTART ,
DREP_DATE = > C . DREP_DATE ,
DREP_DATE_TO = > C . DREP_DATE_TO ,
NHAVE_LINK = > COALESCE ( C . NHAVE_LINK , 0 ) ) ;
2024-02-26 13:10:17 +03:00
/* Инициализируем даты и цвет (если необходимо) */
2024-04-25 18:38:26 +03:00
FCPRODPLANSP_DATES_GET ( DREP_DATE = > C . DREP_DATE ,
DREP_DATE_TO = > C . DREP_DATE_TO ,
DINCL_DATE = > C . DINCL_DATE ,
DDATE_FROM = > DDATE_FROM ,
DDATE_TO = > DDATE_TO ) ;
/* Формирование характеристик элемента ганта */
GET_TASK_COLORS ( NTASK_CLASS = > NTASK_CLASS ,
STASK_BG_COLOR = > STASK_BG_COLOR ,
STASK_BG_PROGRESS_COLOR = > STASK_BG_PROGRESS_COLOR ,
STASK_TEXT_COLOR = > STASK_TEXT_COLOR ) ;
2024-05-07 17:37:23 +03:00
/* Если класс задачи "С частичным дефицитом выпуска" */
if ( NTASK_CLASS = NCLASS_PART_DEFICIT ) then
2024-04-25 18:38:26 +03:00
/* Определяем пропорции прогресса */
NTASK_PROGRESS : = ROUND ( C . NREL_FACT / C . NMAIN_QUANT * 100 ) ;
else
/* Н е требуется */
NTASK_PROGRESS : = null ;
2024-02-05 16:51:24 +03:00
end if ;
2024-02-26 13:10:17 +03:00
/* Сформируем основную спецификацию */
RGT : = PKG_P8PANELS_VISUAL . TGANTT_TASK_MAKE ( NRN = > C . NRN ,
SNUMB = > COALESCE ( C . SROUTE , ' Отсутствует ' ) ,
SCAPTION = > STASK_CAPTION ,
2024-03-18 15:58:40 +03:00
SNAME = > C . SNAME ,
2024-02-26 13:10:17 +03:00
DSTART = > DDATE_FROM ,
DEND = > DDATE_TO ,
NPROGRESS = > NTASK_PROGRESS ,
SBG_COLOR = > STASK_BG_COLOR ,
STEXT_COLOR = > STASK_TEXT_COLOR ,
SBG_PROGRESS_COLOR = > STASK_BG_PROGRESS_COLOR ,
BREAD_ONLY = > true ,
BREAD_ONLY_DATES = > true ,
BREAD_ONLY_PROGRESS = > true ) ;
2024-03-18 15:58:40 +03:00
/* Определяем тип и ссылки на детализацию */
2024-04-25 18:38:26 +03:00
GET_TASK_TYPE ( NCOMPANY = > NCOMPANY ,
SSORT_FIELD = > SSORT_FIELD ,
NFCPRODPLAN = > C . NPRN ,
NFCPRODPLANSP = > C . NRN ,
NTASK_CLASS = > NTASK_CLASS ,
NTYPE = > NTYPE ,
SDETAIL_LIST = > SDETAIL_LIST ) ;
2024-02-26 13:10:17 +03:00
/* Заполним значение динамических атрибутов */
2024-04-25 18:38:26 +03:00
TASK_ATTRS_FILL ( RG = > RG ,
2024-02-26 13:10:17 +03:00
RGT = > RGT ,
2024-03-18 15:58:40 +03:00
NSTART_FACT = > C . NSTART_FACT ,
2024-02-26 13:10:17 +03:00
NMAIN_QUANT = > C . NMAIN_QUANT ,
NREL_FACT = > C . NREL_FACT ,
2024-03-18 15:58:40 +03:00
DREP_DATE_TO = > C . DREP_DATE_TO ,
NTYPE = > NTYPE ,
2024-04-03 16:11:04 +03:00
SDETAIL_LIST = > SDETAIL_LIST ,
SMEAS = > C . SMEAS ) ;
2024-02-26 13:10:17 +03:00
/* Собираем зависимости */
for LINK in ( select T . RN
from FCPRODPLANSP T
where T . PRN = C . NPRN
and T . UP_LEVEL = C . NRN
2024-02-27 12:18:24 +03:00
and T . MAIN_QUANT > 0
2024-05-06 16:20:24 +03:00
and NLEVEL_FILTER > = C . NTASK_LEVEL + 1 )
2024-02-05 16:51:24 +03:00
loop
2024-02-26 13:10:17 +03:00
/* Добавляем зависимости */
PKG_P8PANELS_VISUAL . TGANTT_TASK_ADD_DEPENDENCY ( RTASK = > RGT , NDEPENDENCY = > LINK . RN ) ;
2024-02-05 16:51:24 +03:00
end loop ;
2024-02-26 13:10:17 +03:00
/* Добавляем основную спецификацию в диаграмму */
PKG_P8PANELS_VISUAL . TGANTT_ADD_TASK ( RGANTT = > RG , RTASK = > RGT ) ;
end loop ;
2024-02-05 16:51:24 +03:00
/* Формируем список */
COUT : = PKG_P8PANELS_VISUAL . TGANTT_TO_XML ( RGANTT = > RG ) ;
end FCPRODPLANSP_GET ;
2024-03-18 15:58:40 +03:00
2024-05-23 16:26:35 +03:00
/* Инициализация каталогов раздела "Планы и отчеты производства изделий" для панели "Производственная программа" */
procedure FCPRODPLAN_PP_CTLG_INIT
2024-02-05 16:51:24 +03:00
(
2024-02-14 15:18:50 +03:00
COUT out clob -- Список каталогов раздела "Планы и отчеты производства изделий"
2024-02-05 16:51:24 +03:00
)
is
begin
/* Начинаем формирование XML */
PKG_XFAST . PROLOGUE ( ITYPE = > PKG_XFAST . CONTENT_ ) ;
/* Открываем корень */
PKG_XFAST . DOWN_NODE ( SNAME = > ' XDATA ' ) ;
/* Цикл по планам и отчетам производства изделий */
2024-02-27 12:18:24 +03:00
for REC in ( select T . RN as NRN ,
2024-02-16 17:24:08 +03:00
T . NAME as SNAME ,
( select count ( P . RN )
from FCPRODPLAN P ,
FINSTATE FS
where P . CRN = T . RN
and P . CATEGORY = NFCPRODPLAN_CATEGORY
and P . STATUS = NFCPRODPLAN_STATUS
2024-05-23 16:26:35 +03:00
and P . COMPANY = GET_SESSION_COMPANY ( )
2024-02-16 17:24:08 +03:00
and FS . RN = P . TYPE
and FS . CODE = SFCPRODPLAN_TYPE
2024-02-27 12:18:24 +03:00
and exists ( select PSP . RN
from FCPRODPLANSP PSP
where PSP . PRN = P . RN
and PSP . MAIN_QUANT > 0 )
and exists ( select /* + INDEX(UP I_USERPRIV_JUR_PERS_ROLEID) */
2024-02-16 17:24:08 +03:00
null
from USERPRIV UP
where UP . JUR_PERS = P . JUR_PERS
and UP . UNITCODE = ' CostProductPlans '
and UP . ROLEID in ( select /* + INDEX(UR I_USERROLES_AUTHID_FK) */
UR . ROLEID
from USERROLES UR
2024-02-26 13:10:17 +03:00
where UR . AUTHID = UTILIZER ( ) )
2024-02-16 17:24:08 +03:00
union all
select /* + INDEX(UP I_USERPRIV_JUR_PERS_AUTHID) */
null
from USERPRIV UP
where UP . JUR_PERS = P . JUR_PERS
and UP . UNITCODE = ' CostProductPlans '
2024-02-26 13:10:17 +03:00
and UP . AUTHID = UTILIZER ( ) ) ) as NCOUNT_DOCS
2024-02-14 15:18:50 +03:00
from ACATALOG T ,
UNITLIST UL
where T . DOCNAME = ' CostProductPlans '
and T . SIGNS = 1
and T . DOCNAME = UL . UNITCODE
2024-05-23 16:26:35 +03:00
and T . COMPANY = GET_SESSION_COMPANY ( )
2024-02-14 15:18:50 +03:00
and ( UL . SHOW_INACCESS_CTLG = 1 or exists
( select null from V_USERPRIV UP where UP . CATALOG = T . RN ) or exists
( select null
from ACATALOG T1
where exists ( select null from V_USERPRIV UP where UP . CATALOG = T1 . RN )
connect by prior T1 . RN = T1 . CRN
start with T1 . CRN = T . RN ) )
order by T . NAME asc )
2024-02-05 16:51:24 +03:00
loop
/* Открываем план */
2024-02-14 15:18:50 +03:00
PKG_XFAST . DOWN_NODE ( SNAME = > ' XFCPRODPLAN_CRNS ' ) ;
2024-02-05 16:51:24 +03:00
/* Описываем план */
PKG_XFAST . ATTR ( SNAME = > ' NRN ' , NVALUE = > REC . NRN ) ;
2024-02-14 15:18:50 +03:00
PKG_XFAST . ATTR ( SNAME = > ' SNAME ' , SVALUE = > REC . SNAME ) ;
2024-02-16 17:24:08 +03:00
PKG_XFAST . ATTR ( SNAME = > ' NCOUNT_DOCS ' , NVALUE = > REC . NCOUNT_DOCS ) ;
2024-02-05 16:51:24 +03:00
/* Закрываем план */
PKG_XFAST . UP ( ) ;
end loop ;
/* Закрываем корень */
PKG_XFAST . UP ( ) ;
/* Сериализуем */
COUT : = PKG_XFAST . SERIALIZE_TO_CLOB ( ) ;
/* Завершаем формирование XML */
PKG_XFAST . EPILOGUE ( ) ;
exception
when others then
/* Завершаем формирование XML */
PKG_XFAST . EPILOGUE ( ) ;
/* Вернем ошибку */
PKG_STATE . DIAGNOSTICS_STACKED ( ) ;
P_EXCEPTION ( 0 , PKG_STATE . SQL_ERRM ( ) ) ;
2024-05-23 16:26:35 +03:00
end FCPRODPLAN_PP_CTLG_INIT ;
2024-05-09 17:41:14 +03:00
/*
П р о ц е д у р ы п а н е л и " Производственный план цеха "
* /
/* Изменение приоритета партии маршрутного листа */
procedure FCROUTLST_PRIOR_PARTY_UPDATE
(
NFCROUTLST in number , -- Р е г . номер маршрутного листа
SPRIOR_PARTY in varchar -- Новое значение приоритета партии
)
is
RFCROUTLST FCROUTLST % rowtype ; -- Запись маршрутного листа
begin
/* Проверяем нет ли лишних символов */
if ( ( SPRIOR_PARTY is not null ) and ( REGEXP_COUNT ( SPRIOR_PARTY , ' [^0123456789]+ ' ) > 0 ) ) then
P_EXCEPTION ( 0 , ' Значение приоритета должно быть целым числом. ' ) ;
end if ;
/* Считываем запись маршрутного листа */
UTL_FCROUTLST_GET ( NFCROUTLST = > NFCROUTLST , RFCROUTLST = > RFCROUTLST ) ;
/* Исправляем приоритет партии */
RFCROUTLST . PRIOR_PARTY : = TO_NUMBER ( SPRIOR_PARTY ) ;
/* Базовое исправление маршрутного листа */
P_FCROUTLST_BASE_UPDATE ( NRN = > RFCROUTLST . RN ,
NCOMPANY = > RFCROUTLST . COMPANY ,
NDOCTYPE = > RFCROUTLST . DOCTYPE ,
SDOCPREF = > RFCROUTLST . DOCPREF ,
SDOCNUMB = > RFCROUTLST . DOCNUMB ,
DDOCDATE = > RFCROUTLST . DOCDATE ,
SBARCODE = > RFCROUTLST . BARCODE ,
NJUR_PERS = > RFCROUTLST . JUR_PERS ,
NSTATE = > RFCROUTLST . STATE ,
DCHANGE_DATE = > RFCROUTLST . CHANGE_DATE ,
NFACEACC = > RFCROUTLST . FACEACC ,
NPR_COND = > RFCROUTLST . PR_COND ,
NMATRES = > RFCROUTLST . MATRES ,
NNOMCLASSIF = > RFCROUTLST . NOMCLASSIF ,
NARTICLE = > RFCROUTLST . ARTICLE ,
NQUANT = > RFCROUTLST . QUANT ,
NMATRES_PLAN = > RFCROUTLST . MATRES_PLAN ,
NMEASURE_TYPE = > RFCROUTLST . MEASURE_TYPE ,
NQUANT_PLAN = > RFCROUTLST . QUANT_PLAN ,
NMATRES_FACT = > RFCROUTLST . MATRES_FACT ,
NQUANT_FACT = > RFCROUTLST . QUANT_FACT ,
DOUT_DATE = > RFCROUTLST . OUT_DATE ,
NBLANK = > RFCROUTLST . BLANK ,
NDETAILS_COUNT = > RFCROUTLST . DETAILS_COUNT ,
NSUPPLY = > RFCROUTLST . SUPPLY ,
NSTORAGE = > RFCROUTLST . STORAGE ,
NSTORAGE_IN = > RFCROUTLST . STORAGE_IN ,
NPRODCMP = > RFCROUTLST . PRODCMP ,
NPRODCMPSP = > RFCROUTLST . PRODCMPSP ,
DREL_DATE = > RFCROUTLST . REL_DATE ,
NREL_QUANT = > RFCROUTLST . REL_QUANT ,
NPRIOR_ORDER = > RFCROUTLST . PRIOR_ORDER ,
NPRIOR_PARTY = > RFCROUTLST . PRIOR_PARTY ,
NROUTSHT = > RFCROUTLST . ROUTSHT ,
NROUTE = > RFCROUTLST . ROUTE ,
NCALC_SCHEME = > RFCROUTLST . CALC_SCHEME ,
NPER_MATRES = > RFCROUTLST . PER_MATRES ,
NCOST_ARTICLE = > RFCROUTLST . COST_ARTICLE ,
NVALID_DOCTYPE = > RFCROUTLST . VALID_DOCTYPE ,
SVALID_DOCNUMB = > RFCROUTLST . VALID_DOCNUMB ,
DVALID_DOCDATE = > RFCROUTLST . VALID_DOCDATE ,
SNOTE = > RFCROUTLST . NOTE ,
NPARTY = > RFCROUTLST . PARTY ,
DEXEC_DATE = > RFCROUTLST . EXEC_DATE ,
SSEP_NUMB = > RFCROUTLST . SEP_NUMB ,
SINT_NUMB = > RFCROUTLST . INT_NUMB ) ;
end FCROUTLST_PRIOR_PARTY_UPDATE ;
/* Получение таблицы маршрутных листов, связанных с о спецификацией плана */
procedure FCROUTLST_DEPT_DG_GET
(
NFCPRODPLANSP in number , -- Р е г . номер связанной спецификации плана
NPAGE_NUMBER in number , -- Номер страницы (игнорируется при NPAGE_SIZE=0)
NPAGE_SIZE in number , -- Количество записей на странице (0 - все)
CORDERS in clob , -- Сортировки
NINCLUDE_DEF in number , -- Признак включения описания колонок таблицы в ответ
COUT out clob -- Сериализованная таблица данных
)
is
NCOMPANY PKG_STD . TREF : = GET_SESSION_COMPANY ( ) ; -- Организация сеанса
RO PKG_P8PANELS_VISUAL . TORDERS ; -- Сортировки
RDG PKG_P8PANELS_VISUAL . TDATA_GRID ; -- Описание таблицы
RDG_ROW PKG_P8PANELS_VISUAL . TROW ; -- Строка таблицы
NROW_FROM PKG_STD . TREF ; -- Номер строки с
NROW_TO PKG_STD . TREF ; -- Номер строки по
CSQL clob ; -- Буфер для запроса
ICURSOR integer ; -- К у р с о р для исполнения запроса
NFCROUTLST_IDENT PKG_STD . TREF ; -- Р е г . номер идентификатора отмеченных записей маршрутных листов
NFCMATRESOURCE PKG_STD . TREF ; -- Р е г . номер материального р е с у р с а записи спецификации плана
NFCROUTLST PKG_STD . TREF ; -- Р е г . номер связанного маршрутного листа
NFCPRODPLANSP_MAIN PKG_STD . TREF ; -- Р е г . номер основного состава из "Производственная программа"
NFCROUTLSTORD_QUANT PKG_STD . TLNUMBER ; -- Сумма "Количество" в спецификации "Заказы" маршрутного листа
/* Считывание материального р е с у р с а спецификации плана */
function MATRES_RN_GET
(
NFCPRODPLANSP in number -- Р е г . номер спецификации плана
) return number -- Р е г . номер материального р е с у р с а
is
NRESULT PKG_STD . TREF ; -- Р е г . номер материального р е с у р с а
begin
/* Считываем р е г . номер материального р е с у р с а */
begin
select T . MATRES into NRESULT from FCPRODPLANSP T where T . RN = NFCPRODPLANSP ;
exception
when others then
P_EXCEPTION ( 0 ,
' Ошибка считывания материального р е с у р с а спецификации плана. ' ) ;
end ;
/* Возвращаем результат */
return NRESULT ;
end MATRES_RN_GET ;
/* Проверка прямой связи между МЛ и спецификацией плана "Заказы" */
function FCROUTLSTORD_QUANT_GET
(
NFCROUTLST in number -- Р е г . номер маршрутного листа
) return number -- Сумма "Количество" в спецификации "Заказы"
is
NRESULT PKG_STD . TLNUMBER ; -- Сумма "Количество" в спецификации "Заказы"
begin
/* Считываем сумму "Количество" из спецификации "Заказы" */
begin
select COALESCE ( sum ( T . QUANT ) , 0 ) into NRESULT from FCROUTLSTORD T where T . PRN = NFCROUTLST ;
exception
when others then
NRESULT : = 0 ;
end ;
/* Возвращаем результат */
return NRESULT ;
end FCROUTLSTORD_QUANT_GET ;
begin
/* Читем сортировки */
RO : = PKG_P8PANELS_VISUAL . TORDERS_FROM_XML ( CORDERS = > CORDERS ) ;
/* Преобразуем номер и размер страницы в номер строк с и по */
PKG_P8PANELS_VISUAL . UTL_ROWS_LIMITS_CALC ( NPAGE_NUMBER = > NPAGE_NUMBER ,
NPAGE_SIZE = > NPAGE_SIZE ,
NROW_FROM = > NROW_FROM ,
NROW_TO = > NROW_TO ) ;
/* Инициализируем таблицу данных */
RDG : = PKG_P8PANELS_VISUAL . TDATA_GRID_MAKE ( ) ;
/* Описываем колонки таблицы данных */
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' NRN ' ,
SCAPTION = > ' Р е г . номер' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_NUMB ,
BVISIBLE = > false ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' SDOC_INFO ' ,
SCAPTION = > ' Документ (тип, №, дата) ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_STR ,
BVISIBLE = > true ,
BORDER = > true ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' NQUANT ' ,
SCAPTION = > ' Количество план ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_NUMB ,
BVISIBLE = > true ,
BORDER = > true ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' NPROCENT ' ,
SCAPTION = > ' Готовность партии ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_NUMB ,
BVISIBLE = > true ,
BORDER = > true ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' NPRIOR_PARTY ' ,
SCAPTION = > ' Приоритет партии ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_NUMB ,
BVISIBLE = > true ,
BORDER = > true ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' SPROD_ORDER ' ,
SCAPTION = > ' Заказ ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_STR ,
BVISIBLE = > false ) ;
/* ! Пока отключен */
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' NCHANGE_FACEACC ' ,
SCAPTION = > ' Изменить заказ ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_NUMB ,
BVISIBLE = > false ,
BORDER = > true ) ;
/* Считываем р е г . номер связанной спецификации из "Производственная программа" */
NFCPRODPLANSP_MAIN : = UTL_FCPRODPLANSP_MAIN_GET ( NCOMPANY = > NCOMPANY , NFCPRODPLANSP = > NFCPRODPLANSP ) ;
/* Если спецификация производственной программы найдена */
if ( NFCPRODPLANSP_MAIN is not null ) then
/* Считывание материального р е с у р с а спецификации плана */
NFCMATRESOURCE : = MATRES_RN_GET ( NFCPRODPLANSP = > NFCPRODPLANSP_MAIN ) ;
/* Инициализируем список маршрутных листов */
UTL_FCROUTLST_IDENT_INIT ( NFCPRODPLANSP = > NFCPRODPLANSP_MAIN , NIDENT = > NFCROUTLST_IDENT ) ;
/* Обходим данные */
begin
/* Добавляем подсказку совместимости */
CSQL : = PKG_SQL_BUILD . COMPATIBLE ( SSQL = > CSQL ) ;
/* Формируем запрос */
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' select * ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from (select D.*, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > PKG_SQL_BUILD . SQLROWNUM ( ) | | ' NROW ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from (select P.NRN, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' P.SDOC_INFO, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' P.NQUANT, ' ) ;
2024-08-21 17:19:18 +03:00
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' case when (P.NT_SHT_PLAN <> 0) then ROUND(P.NLABOUR_FACT / P.NT_SHT_PLAN * 100, 2) else 0 end NPROCENT, ' ) ;
2024-05-09 17:41:14 +03:00
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' P.NPRIOR_PARTY, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' P.SPROD_ORDER ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from (select T.RN NRN, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' DT.DOCCODE || ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' '' , '' || TRIM(T.DOCPREF) || ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' '' - '' || TRIM(T.DOCNUMB) || ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' '' , '' || TO_CHAR(T.DOCDATE, ' | | PKG_SQL_BUILD . WRAP_STR ( SVALUE = > ' dd.mm.yyyy ' ) | | ' ) as SDOC_INFO, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' T.QUANT NQUANT, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' (select SUM(SP.LABOUR_FACT) ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from FCROUTLSTSP SP ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where SP.PRN = T.RN) NLABOUR_FACT, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' (select SUM(SP.T_SHT_PLAN) ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from FCROUTLSTSP SP ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where SP.PRN = T.RN) NT_SHT_PLAN, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' T.PRIOR_PARTY NPRIOR_PARTY, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' (select F.NUMB from FACEACC F where T.FACEACC = F.RN ) SPROD_ORDER ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from FCROUTLST T, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' DOCTYPES DT ' ) ;
2024-07-10 15:41:09 +03:00
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where T.RN in (select SL."DOCUMENT" ' ) ;
2024-05-09 17:41:14 +03:00
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from SELECTLIST SL ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where SL.IDENT = :NFCROUTLST_IDENT ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and SL.UNITCODE = ' | | PKG_SQL_BUILD . WRAP_STR ( SVALUE = > ' CostRouteLists ' ) | | ' ) ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and T.COMPANY = :NCOMPANY ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and T."STATE" = ' | | PKG_SQL_BUILD . WRAP_NUM ( NVALUE = > 1 ) ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and T.MATRES = :NFCMATRESOURCE ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and DT.RN = T.DOCTYPE ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and exists (select ' | | PKG_SQL_BUILD . SET_HINT ( SHINT = > ' INDEX(UP I_USERPRIV_CATALOG_ROLEID) ' ) | | ' null ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from USERPRIV UP ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where UP."CATALOG" = T.CRN ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and UP.ROLEID in (select ' | | PKG_SQL_BUILD . SET_HINT ( SHINT = > ' INDEX(UR I_USERROLES_AUTHID_FK) ' ) | | ' UR.ROLEID ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from USERROLES UR ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where UR.AUTHID = UTILIZER()) ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' union all ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' select ' | | PKG_SQL_BUILD . SET_HINT ( SHINT = > ' INDEX(UP I_USERPRIV_CATALOG_AUTHID) ' ) | | ' null ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from USERPRIV UP ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where UP."CATALOG" = T.CRN ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and UP.AUTHID = UTILIZER()) ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and exists (select ' | | PKG_SQL_BUILD . SET_HINT ( SHINT = > ' INDEX(UP I_USERPRIV_JUR_PERS_ROLEID) ' ) | | ' null ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from USERPRIV UP ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where UP.JUR_PERS = T.JUR_PERS ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and UP.UNITCODE = ' | | PKG_SQL_BUILD . WRAP_STR ( SVALUE = > ' CostRouteLists ' ) ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and UP.ROLEID in (select ' | | PKG_SQL_BUILD . SET_HINT ( SHINT = > ' INDEX(UR I_USERROLES_AUTHID_FK) ' ) | | ' UR.ROLEID ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from USERROLES UR ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where UR.AUTHID = UTILIZER()) ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' union all ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' select ' | | PKG_SQL_BUILD . SET_HINT ( SHINT = > ' INDEX(UP I_USERPRIV_JUR_PERS_AUTHID) ' ) | | ' null ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from USERPRIV UP ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where UP.JUR_PERS = T.JUR_PERS ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and UP.UNITCODE = ' | | PKG_SQL_BUILD . WRAP_STR ( SVALUE = > ' CostRouteLists ' ) ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and UP.AUTHID = UTILIZER())) P ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' %ORDER_BY%) D) F ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where F.NROW between :NROW_FROM and :NROW_TO ' ) ;
/* Учтём сортировки */
PKG_P8PANELS_VISUAL . TORDERS_SET_QUERY ( RDATA_GRID = > RDG , RORDERS = > RO , SPATTERN = > ' %ORDER_BY% ' , CSQL = > CSQL ) ;
/* Разбираем е г о */
ICURSOR : = PKG_SQL_DML . OPEN_CURSOR ( SWHAT = > ' SELECT ' ) ;
PKG_SQL_DML . PARSE ( ICURSOR = > ICURSOR , SQUERY = > CSQL ) ;
/* Делаем подстановку параметров */
PKG_SQL_DML . BIND_VARIABLE_NUM ( ICURSOR = > ICURSOR , SNAME = > ' NCOMPANY ' , NVALUE = > NCOMPANY ) ;
PKG_SQL_DML . BIND_VARIABLE_NUM ( ICURSOR = > ICURSOR , SNAME = > ' NROW_FROM ' , NVALUE = > NROW_FROM ) ;
PKG_SQL_DML . BIND_VARIABLE_NUM ( ICURSOR = > ICURSOR , SNAME = > ' NROW_TO ' , NVALUE = > NROW_TO ) ;
PKG_SQL_DML . BIND_VARIABLE_NUM ( ICURSOR = > ICURSOR , SNAME = > ' NFCROUTLST_IDENT ' , NVALUE = > NFCROUTLST_IDENT ) ;
PKG_SQL_DML . BIND_VARIABLE_NUM ( ICURSOR = > ICURSOR , SNAME = > ' NFCMATRESOURCE ' , NVALUE = > NFCMATRESOURCE ) ;
/* Описываем структуру записи курсора */
PKG_SQL_DML . DEFINE_COLUMN_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 1 ) ;
PKG_SQL_DML . DEFINE_COLUMN_STR ( ICURSOR = > ICURSOR , IPOSITION = > 2 ) ;
PKG_SQL_DML . DEFINE_COLUMN_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 3 ) ;
PKG_SQL_DML . DEFINE_COLUMN_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 4 ) ;
PKG_SQL_DML . DEFINE_COLUMN_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 5 ) ;
PKG_SQL_DML . DEFINE_COLUMN_STR ( ICURSOR = > ICURSOR , IPOSITION = > 6 ) ;
PKG_SQL_DML . DEFINE_COLUMN_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 7 ) ;
/* Делаем выборку */
if ( PKG_SQL_DML . EXECUTE ( ICURSOR = > ICURSOR ) = 0 ) then
null ;
end if ;
/* Обходим выбранные записи */
while ( PKG_SQL_DML . FETCH_ROWS ( ICURSOR = > ICURSOR ) > 0 )
loop
/* Читаем данные из курсора */
PKG_SQL_DML . COLUMN_VALUE_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 1 , NVALUE = > NFCROUTLST ) ;
/* Добавляем колонку с р е г . номером */
PKG_P8PANELS_VISUAL . TROW_ADD_COL ( RROW = > RDG_ROW , SNAME = > ' NRN ' , NVALUE = > NFCROUTLST , BCLEAR = > true ) ;
/* Добавляем колонки с данными */
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLN ( RROW = > RDG_ROW ,
SNAME = > ' NRN ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 1 ,
BCLEAR = > true ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLS ( RROW = > RDG_ROW ,
SNAME = > ' SDOC_INFO ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 2 ) ;
/* Проверяем наличие прямой связи между МЛ и спецификацией плана */
if ( PKG_DOCLINKS . FIND ( NFLAG_SMART = > 1 ,
SIN_UNITCODE = > ' CostProductPlansSpecs ' ,
NIN_DOCUMENT = > NFCPRODPLANSP_MAIN ,
NIN_PRN_DOCUMENT = > null ,
SOUT_UNITCODE = > ' CostRouteLists ' ,
NOUT_DOCUMENT = > NFCROUTLST ,
NOUT_PRN_DOCUMENT = > null ) = 1 ) then
/* Получаем сумму "Количество" из спецификации "Заказы" */
NFCROUTLSTORD_QUANT : = FCROUTLSTORD_QUANT_GET ( NFCROUTLST = > NFCROUTLST ) ;
/* Если сумма "Количество" в "Заказы" больше 0 */
if ( NFCROUTLSTORD_QUANT > 0 ) then
/* Указываем её */
PKG_P8PANELS_VISUAL . TROW_ADD_COL ( RROW = > RDG_ROW , SNAME = > ' NQUANT ' , NVALUE = > NFCROUTLSTORD_QUANT ) ;
else
/* Берем из заголовка МЛ */
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLN ( RROW = > RDG_ROW ,
SNAME = > ' NQUANT ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 3 ) ;
end if ;
else
/* Указываем 0 */
PKG_P8PANELS_VISUAL . TROW_ADD_COL ( RROW = > RDG_ROW , SNAME = > ' NQUANT ' , NVALUE = > 0 ) ;
end if ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLN ( RROW = > RDG_ROW , SNAME = > ' NPROCENT ' , ICURSOR = > ICURSOR , NPOSITION = > 4 ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLN ( RROW = > RDG_ROW ,
SNAME = > ' NPRIOR_PARTY ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 5 ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLS ( RROW = > RDG_ROW ,
SNAME = > ' SPROD_ORDER ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 6 ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_COL ( RROW = > RDG_ROW , SNAME = > ' NCHANGE_FACEACC ' , SVALUE = > null ) ;
/* Добавляем строку в таблицу */
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_ROW ( RDATA_GRID = > RDG , RROW = > RDG_ROW ) ;
end loop ;
exception
when others then
PKG_SQL_DML . CLOSE_CURSOR ( ICURSOR = > ICURSOR ) ;
raise ;
end ;
/* Очищаем отмеченные маршрутные листы */
P_SELECTLIST_CLEAR ( NIDENT = > NFCROUTLST_IDENT ) ;
end if ;
/* Сериализуем описание */
COUT : = PKG_P8PANELS_VISUAL . TDATA_GRID_TO_XML ( RDATA_GRID = > RDG , NINCLUDE_DEF = > NINCLUDE_DEF ) ;
exception
when others then
/* Очищаем отмеченные маршрутные листы */
P_SELECTLIST_CLEAR ( NIDENT = > NFCROUTLST_IDENT ) ;
raise ;
end FCROUTLST_DEPT_DG_GET ;
2024-05-30 15:54:31 +03:00
/* Получение таблицы строк маршрутного листа */
procedure FCROUTLSTSP_DEPT_DG_GET
2024-05-09 17:41:14 +03:00
(
NFCROUTLST in number , -- Р е г . номер маршрутного листа
NPAGE_NUMBER in number , -- Номер страницы (игнорируется при NPAGE_SIZE=0)
NPAGE_SIZE in number , -- Количество записей на странице (0 - все)
CORDERS in clob , -- Сортировки
NINCLUDE_DEF in number , -- Признак включения описания колонок таблицы в ответ
COUT out clob -- Сериализованная таблица данных
)
is
NCOMPANY PKG_STD . TREF : = GET_SESSION_COMPANY ( ) ; -- Организация сеанса
RO PKG_P8PANELS_VISUAL . TORDERS ; -- Сортировки
RDG PKG_P8PANELS_VISUAL . TDATA_GRID ; -- Описание таблицы
RDG_ROW PKG_P8PANELS_VISUAL . TROW ; -- Строка таблицы
NROW_FROM PKG_STD . TREF ; -- Номер строки с
NROW_TO PKG_STD . TREF ; -- Номер строки по
CSQL clob ; -- Буфер для запроса
ICURSOR integer ; -- К у р с о р для исполнения запроса
2024-05-30 15:54:31 +03:00
NSTATE PKG_STD . TNUMBER ; -- Состояние
2024-05-09 17:41:14 +03:00
2024-05-30 15:54:31 +03:00
/* Считывание текстового представления состояния строки маршрутного листа */
function FCROUTLSTSP_STATE_NAME_GET
2024-05-09 17:41:14 +03:00
(
2024-05-30 15:54:31 +03:00
NSTATE in number -- Состояние строки маршрутного листа
) return varchar2 -- Наименование состояния строки маршрутного листа
2024-05-09 17:41:14 +03:00
is
2024-05-30 15:54:31 +03:00
SRESULT PKG_STD . TSTRING ; -- Наименование состояния строки маршрутного листа
2024-05-09 17:41:14 +03:00
begin
2024-05-30 15:54:31 +03:00
/* Считываем наименование состояния по домену */
2024-05-09 17:41:14 +03:00
begin
2024-05-30 15:54:31 +03:00
select V . NAME
into SRESULT
from DMSDOMAINS T ,
DMSENUMVALUES V
where T . CODE = SFCROUTLSTSP_STATE_DOMAIN
and V . PRN = T . RN
and V . VALUE_NUM = NSTATE ;
2024-05-09 17:41:14 +03:00
exception
when others then
2024-05-30 15:54:31 +03:00
SRESULT : = null ;
2024-05-09 17:41:14 +03:00
end ;
/* Возвращаем результат */
2024-05-30 15:54:31 +03:00
return SRESULT ;
end FCROUTLSTSP_STATE_NAME_GET ;
2024-05-09 17:41:14 +03:00
begin
/* Читем сортировки */
RO : = PKG_P8PANELS_VISUAL . TORDERS_FROM_XML ( CORDERS = > CORDERS ) ;
/* Преобразуем номер и размер страницы в номер строк с и по */
PKG_P8PANELS_VISUAL . UTL_ROWS_LIMITS_CALC ( NPAGE_NUMBER = > NPAGE_NUMBER ,
NPAGE_SIZE = > NPAGE_SIZE ,
NROW_FROM = > NROW_FROM ,
NROW_TO = > NROW_TO ) ;
/* Инициализируем таблицу данных */
RDG : = PKG_P8PANELS_VISUAL . TDATA_GRID_MAKE ( ) ;
/* Описываем колонки таблицы данных */
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' NRN ' ,
SCAPTION = > ' Р е г . номер' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_NUMB ,
BVISIBLE = > false ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
2024-05-30 15:54:31 +03:00
SNAME = > ' SSTATE ' ,
SCAPTION = > ' Состояние ' ,
2024-05-09 17:41:14 +03:00
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_STR ,
2024-05-30 15:54:31 +03:00
BVISIBLE = > true ) ;
2024-05-09 17:41:14 +03:00
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
2024-05-30 15:54:31 +03:00
SNAME = > ' SOPER_NUMB ' ,
SCAPTION = > ' Номер операции ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_STR ,
BVISIBLE = > true ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' SROUTSHTSP_NAME ' ,
SCAPTION = > ' Операция ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_STR ,
BVISIBLE = > true ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' SSUBDIV ' ,
SCAPTION = > ' Цех, участок ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_STR ,
BVISIBLE = > true ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' NQUANT_PLAN ' ,
SCAPTION = > ' План ' ,
2024-05-09 17:41:14 +03:00
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_NUMB ,
2024-05-30 15:54:31 +03:00
BVISIBLE = > true ) ;
2024-05-09 17:41:14 +03:00
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
2024-05-30 15:54:31 +03:00
SNAME = > ' NQUANT_FACT ' ,
SCAPTION = > ' Факт ' ,
2024-05-09 17:41:14 +03:00
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_NUMB ,
2024-05-30 15:54:31 +03:00
BVISIBLE = > true ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' NT_SHT_PLAN ' ,
SCAPTION = > ' Трудоемкость план ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_NUMB ,
BVISIBLE = > true ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' NLABOUR_FACT ' ,
SCAPTION = > ' Трудоемкость факт ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_NUMB ,
BVISIBLE = > true ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' SMUNIT ' ,
SCAPTION = > ' ЕИ трудоемкости ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_STR ,
BVISIBLE = > true ) ;
/* Обходим данные */
begin
/* Добавляем подсказку совместимости */
CSQL : = PKG_SQL_BUILD . COMPATIBLE ( SSQL = > CSQL ) ;
/* Формируем запрос */
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' select * ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from (select D.*, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > PKG_SQL_BUILD . SQLROWNUM ( ) | | ' NROW ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from (select T.RN NRN, ' ) ;
2024-07-10 15:41:09 +03:00
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' T."STATE" NSTATE, ' ) ;
2024-05-30 15:54:31 +03:00
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' T.OPER_NUMB SOPER_NUMB, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' trim(T.OPER_NUMB) || '' , '' || ' ) ;
2024-07-10 15:41:09 +03:00
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' trim(COALESCE(( select O."NAME" from FCOPERTYPES O where T.OPER_TPS = O.RN ), T.OPER_UK)) SROUTSHTSP_NAME, ' ) ;
2024-05-30 15:54:31 +03:00
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' ( select I.CODE from INS_DEPARTMENT I where T.SUBDIV = I.RN ) SSUBDIV, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' T.QUANT_PLAN NQUANT_PLAN, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' T.QUANT_FACT NQUANT_FACT, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' T.T_SHT_PLAN NT_SHT_PLAN, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' T.LABOUR_FACT NLABOUR_FACT, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' ( select D.MEAS_MNEMO from DICMUNTS D where T.MUNIT = D.RN ) SMUNIT ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from FCROUTLSTSP T ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where T.PRN = :NFCROUTLST ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and T.COMPANY = :NCOMPANY ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' %ORDER_BY%) D) F ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where F.NROW between :NROW_FROM and :NROW_TO ' ) ;
/* Учтём сортировки */
PKG_P8PANELS_VISUAL . TORDERS_SET_QUERY ( RDATA_GRID = > RDG , RORDERS = > RO , SPATTERN = > ' %ORDER_BY% ' , CSQL = > CSQL ) ;
/* Разбираем е г о */
ICURSOR : = PKG_SQL_DML . OPEN_CURSOR ( SWHAT = > ' SELECT ' ) ;
PKG_SQL_DML . PARSE ( ICURSOR = > ICURSOR , SQUERY = > CSQL ) ;
/* Делаем подстановку параметров */
PKG_SQL_DML . BIND_VARIABLE_NUM ( ICURSOR = > ICURSOR , SNAME = > ' NCOMPANY ' , NVALUE = > NCOMPANY ) ;
PKG_SQL_DML . BIND_VARIABLE_NUM ( ICURSOR = > ICURSOR , SNAME = > ' NROW_FROM ' , NVALUE = > NROW_FROM ) ;
PKG_SQL_DML . BIND_VARIABLE_NUM ( ICURSOR = > ICURSOR , SNAME = > ' NROW_TO ' , NVALUE = > NROW_TO ) ;
PKG_SQL_DML . BIND_VARIABLE_NUM ( ICURSOR = > ICURSOR , SNAME = > ' NFCROUTLST ' , NVALUE = > NFCROUTLST ) ;
/* Описываем структуру записи курсора */
PKG_SQL_DML . DEFINE_COLUMN_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 1 ) ;
PKG_SQL_DML . DEFINE_COLUMN_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 2 ) ;
PKG_SQL_DML . DEFINE_COLUMN_STR ( ICURSOR = > ICURSOR , IPOSITION = > 3 ) ;
PKG_SQL_DML . DEFINE_COLUMN_STR ( ICURSOR = > ICURSOR , IPOSITION = > 4 ) ;
PKG_SQL_DML . DEFINE_COLUMN_STR ( ICURSOR = > ICURSOR , IPOSITION = > 5 ) ;
PKG_SQL_DML . DEFINE_COLUMN_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 6 ) ;
PKG_SQL_DML . DEFINE_COLUMN_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 7 ) ;
PKG_SQL_DML . DEFINE_COLUMN_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 8 ) ;
PKG_SQL_DML . DEFINE_COLUMN_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 9 ) ;
PKG_SQL_DML . DEFINE_COLUMN_STR ( ICURSOR = > ICURSOR , IPOSITION = > 10 ) ;
PKG_SQL_DML . DEFINE_COLUMN_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 11 ) ;
/* Делаем выборку */
if ( PKG_SQL_DML . EXECUTE ( ICURSOR = > ICURSOR ) = 0 ) then
null ;
end if ;
/* Обходим выбранные записи */
while ( PKG_SQL_DML . FETCH_ROWS ( ICURSOR = > ICURSOR ) > 0 )
loop
/* Добавляем колонки с данными */
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLN ( RROW = > RDG_ROW ,
SNAME = > ' NRN ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 1 ,
BCLEAR = > true ) ;
/* Читаем состояние из курсора */
PKG_SQL_DML . COLUMN_VALUE_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 2 , NVALUE = > NSTATE ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_COL ( RROW = > RDG_ROW ,
SNAME = > ' SSTATE ' ,
SVALUE = > FCROUTLSTSP_STATE_NAME_GET ( NSTATE = > NSTATE ) ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLS ( RROW = > RDG_ROW ,
SNAME = > ' SOPER_NUMB ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 3 ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLS ( RROW = > RDG_ROW ,
SNAME = > ' SROUTSHTSP_NAME ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 4 ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLS ( RROW = > RDG_ROW , SNAME = > ' SSUBDIV ' , ICURSOR = > ICURSOR , NPOSITION = > 5 ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLN ( RROW = > RDG_ROW ,
SNAME = > ' NQUANT_PLAN ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 6 ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLN ( RROW = > RDG_ROW ,
SNAME = > ' NQUANT_FACT ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 7 ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLN ( RROW = > RDG_ROW ,
SNAME = > ' NT_SHT_PLAN ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 8 ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLN ( RROW = > RDG_ROW ,
SNAME = > ' NLABOUR_FACT ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 9 ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLS ( RROW = > RDG_ROW , SNAME = > ' SMUNIT ' , ICURSOR = > ICURSOR , NPOSITION = > 10 ) ;
/* Добавляем строку в таблицу */
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_ROW ( RDATA_GRID = > RDG , RROW = > RDG_ROW ) ;
end loop ;
exception
when others then
PKG_SQL_DML . CLOSE_CURSOR ( ICURSOR = > ICURSOR ) ;
raise ;
end ;
2024-05-09 17:41:14 +03:00
/* Сериализуем описание */
COUT : = PKG_P8PANELS_VISUAL . TDATA_GRID_TO_XML ( RDATA_GRID = > RDG , NINCLUDE_DEF = > NINCLUDE_DEF ) ;
2024-05-30 15:54:31 +03:00
end FCROUTLSTSP_DEPT_DG_GET ;
2024-05-09 17:41:14 +03:00
/* Получение таблицы ПиП на основании маршрутного листа, связанных с о спецификацией плана */
procedure INCOMEFROMDEPS_DEPT_DG_GET
(
NFCPRODPLANSP in number , -- Р е г . номер связанной спецификации плана
NPAGE_NUMBER in number , -- Номер страницы (игнорируется при NPAGE_SIZE=0)
NPAGE_SIZE in number , -- Количество записей на странице (0 - все)
CORDERS in clob , -- Сортировки
NINCLUDE_DEF in number , -- Признак включения описания колонок таблицы в ответ
COUT out clob -- Сериализованная таблица данных
)
is
NCOMPANY PKG_STD . TREF : = GET_SESSION_COMPANY ( ) ; -- Организация сеанса
RO PKG_P8PANELS_VISUAL . TORDERS ; -- Сортировки
RDG PKG_P8PANELS_VISUAL . TDATA_GRID ; -- Описание таблицы
RDG_ROW PKG_P8PANELS_VISUAL . TROW ; -- Строка таблицы
NROW_FROM PKG_STD . TREF ; -- Номер строки с
NROW_TO PKG_STD . TREF ; -- Номер строки по
CSQL clob ; -- Буфер для запроса
ICURSOR integer ; -- К у р с о р для исполнения запроса
NFCPRODPLANSP_MAIN PKG_STD . TREF ; -- Р е г . номер основного состава из "Производственная программа"
NFCROUTLST_IDENT PKG_STD . TREF ; -- Р е г . номер идентификатора отмеченных записей маршрутных листов
begin
/* Читем сортировки */
RO : = PKG_P8PANELS_VISUAL . TORDERS_FROM_XML ( CORDERS = > CORDERS ) ;
/* Преобразуем номер и размер страницы в номер строк с и по */
PKG_P8PANELS_VISUAL . UTL_ROWS_LIMITS_CALC ( NPAGE_NUMBER = > NPAGE_NUMBER ,
NPAGE_SIZE = > NPAGE_SIZE ,
NROW_FROM = > NROW_FROM ,
NROW_TO = > NROW_TO ) ;
/* Инициализируем таблицу данных */
RDG : = PKG_P8PANELS_VISUAL . TDATA_GRID_MAKE ( ) ;
/* Описываем колонки таблицы данных */
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' NRN ' ,
SCAPTION = > ' Р е г . номер' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_NUMB ,
BVISIBLE = > false ) ;
2024-05-30 15:54:31 +03:00
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' SSTATE ' ,
SCAPTION = > ' Состояние ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_STR ,
BVISIBLE = > true ) ;
2024-05-09 17:41:14 +03:00
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' SDOC_INFO ' ,
SCAPTION = > ' Документ (тип, №, дата) ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_STR ,
BVISIBLE = > true ,
BORDER = > true ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' NQUANT_FACT ' ,
SCAPTION = > ' Количество сдано ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_NUMB ,
BVISIBLE = > true ,
BORDER = > true ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' DDUE_DATE ' ,
SCAPTION = > ' Дата сдачи ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_DATE ,
BVISIBLE = > true ,
BORDER = > true ) ;
/* Считываем р е г . номер связанной спецификации из "Производственная программа" */
NFCPRODPLANSP_MAIN : = UTL_FCPRODPLANSP_MAIN_GET ( NCOMPANY = > NCOMPANY , NFCPRODPLANSP = > NFCPRODPLANSP ) ;
/* Если спецификация производственной программы найдена */
if ( NFCPRODPLANSP_MAIN is not null ) then
/* Инициализируем список маршрутных листов */
UTL_FCROUTLST_IDENT_INIT ( NFCPRODPLANSP = > NFCPRODPLANSP_MAIN , NIDENT = > NFCROUTLST_IDENT ) ;
/* Обходим данные */
begin
/* Добавляем подсказку совместимости */
CSQL : = PKG_SQL_BUILD . COMPATIBLE ( SSQL = > CSQL ) ;
/* Формируем запрос */
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' select * ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from (select D.*, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > PKG_SQL_BUILD . SQLROWNUM ( ) | | ' NROW ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from (select T.RN NRN, ' ) ;
2024-05-30 15:54:31 +03:00
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' SUBSTR(F_DOCSTATE_PLAN_FACT(T.DOC_STATE), 1, 20) SSTATE, ' ) ;
2024-05-09 17:41:14 +03:00
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' DT.DOCCODE || ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' '' , '' || TRIM(T.DOC_PREF) || ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' '' - '' || TRIM(T.DOC_NUMB) || ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' '' , '' || TO_CHAR(T.DOC_DATE, ' | | PKG_SQL_BUILD . WRAP_STR ( SVALUE = > ' dd.mm.yyyy ' ) | | ' ) as SDOC_INFO, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' (select SUM(SP.QUANT_FACT) ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from INCOMEFROMDEPSSPEC SP ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where SP.PRN = T.RN) NQUANT_FACT, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' T.WORK_DATE as DDUE_DATE ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from INCOMEFROMDEPS T, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' DOCTYPES DT ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where ((T.RN in (select L.OUT_DOCUMENT ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from DOCLINKS L ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where L.IN_DOCUMENT = :NFCPRODPLANSP ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and L.IN_UNITCODE = ' | | PKG_SQL_BUILD . WRAP_STR ( SVALUE = > ' CostProductPlansSpecs ' ) ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and L.OUT_UNITCODE = ' | | PKG_SQL_BUILD . WRAP_STR ( SVALUE = > ' IncomFromDeps ' ) | | ' )) ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' or (T.RN in (select L.OUT_DOCUMENT ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' from SELECTLIST SL, ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' DOCLINKS L ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where SL.IDENT = :NFCROUTLST_IDENT ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and SL.UNITCODE = ' | | PKG_SQL_BUILD . WRAP_STR ( SVALUE = > ' CostRouteLists ' ) ) ;
2024-07-10 15:41:09 +03:00
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and L.IN_DOCUMENT = SL."DOCUMENT" ' ) ;
2024-05-09 17:41:14 +03:00
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and L.IN_UNITCODE = ' | | PKG_SQL_BUILD . WRAP_STR ( SVALUE = > ' CostRouteLists ' ) ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and L.OUT_UNITCODE = ' | | PKG_SQL_BUILD . WRAP_STR ( SVALUE = > ' IncomFromDeps ' ) | | ' ))) ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and T.COMPANY = :NCOMPANY ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' and T.DOC_TYPE = DT.RN ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' %ORDER_BY%) D) F ' ) ;
PKG_SQL_BUILD . APPEND ( SSQL = > CSQL , SELEMENT1 = > ' where F.NROW between :NROW_FROM and :NROW_TO ' ) ;
/* Учтём сортировки */
PKG_P8PANELS_VISUAL . TORDERS_SET_QUERY ( RDATA_GRID = > RDG , RORDERS = > RO , SPATTERN = > ' %ORDER_BY% ' , CSQL = > CSQL ) ;
/* Разбираем е г о */
ICURSOR : = PKG_SQL_DML . OPEN_CURSOR ( SWHAT = > ' SELECT ' ) ;
PKG_SQL_DML . PARSE ( ICURSOR = > ICURSOR , SQUERY = > CSQL ) ;
/* Делаем подстановку параметров */
PKG_SQL_DML . BIND_VARIABLE_NUM ( ICURSOR = > ICURSOR , SNAME = > ' NCOMPANY ' , NVALUE = > NCOMPANY ) ;
PKG_SQL_DML . BIND_VARIABLE_NUM ( ICURSOR = > ICURSOR , SNAME = > ' NROW_FROM ' , NVALUE = > NROW_FROM ) ;
PKG_SQL_DML . BIND_VARIABLE_NUM ( ICURSOR = > ICURSOR , SNAME = > ' NROW_TO ' , NVALUE = > NROW_TO ) ;
PKG_SQL_DML . BIND_VARIABLE_NUM ( ICURSOR = > ICURSOR , SNAME = > ' NFCPRODPLANSP ' , NVALUE = > NFCPRODPLANSP_MAIN ) ;
PKG_SQL_DML . BIND_VARIABLE_NUM ( ICURSOR = > ICURSOR , SNAME = > ' NFCROUTLST_IDENT ' , NVALUE = > NFCROUTLST_IDENT ) ;
/* Описываем структуру записи курсора */
PKG_SQL_DML . DEFINE_COLUMN_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 1 ) ;
PKG_SQL_DML . DEFINE_COLUMN_STR ( ICURSOR = > ICURSOR , IPOSITION = > 2 ) ;
2024-05-30 15:54:31 +03:00
PKG_SQL_DML . DEFINE_COLUMN_STR ( ICURSOR = > ICURSOR , IPOSITION = > 3 ) ;
PKG_SQL_DML . DEFINE_COLUMN_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 4 ) ;
PKG_SQL_DML . DEFINE_COLUMN_DATE ( ICURSOR = > ICURSOR , IPOSITION = > 5 ) ;
PKG_SQL_DML . DEFINE_COLUMN_NUM ( ICURSOR = > ICURSOR , IPOSITION = > 6 ) ;
2024-05-09 17:41:14 +03:00
/* Делаем выборку */
if ( PKG_SQL_DML . EXECUTE ( ICURSOR = > ICURSOR ) = 0 ) then
null ;
end if ;
/* Обходим выбранные записи */
while ( PKG_SQL_DML . FETCH_ROWS ( ICURSOR = > ICURSOR ) > 0 )
loop
/* Добавляем колонки с данными */
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLN ( RROW = > RDG_ROW ,
SNAME = > ' NRN ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 1 ,
BCLEAR = > true ) ;
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLS ( RROW = > RDG_ROW ,
2024-05-30 15:54:31 +03:00
SNAME = > ' SSTATE ' ,
2024-05-09 17:41:14 +03:00
ICURSOR = > ICURSOR ,
NPOSITION = > 2 ) ;
2024-05-30 15:54:31 +03:00
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLS ( RROW = > RDG_ROW ,
SNAME = > ' SDOC_INFO ' ,
ICURSOR = > ICURSOR ,
NPOSITION = > 3 ) ;
2024-05-09 17:41:14 +03:00
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLN ( RROW = > RDG_ROW ,
SNAME = > ' NQUANT_FACT ' ,
ICURSOR = > ICURSOR ,
2024-05-30 15:54:31 +03:00
NPOSITION = > 4 ) ;
2024-05-09 17:41:14 +03:00
PKG_P8PANELS_VISUAL . TROW_ADD_CUR_COLD ( RROW = > RDG_ROW ,
SNAME = > ' DDUE_DATE ' ,
ICURSOR = > ICURSOR ,
2024-05-30 15:54:31 +03:00
NPOSITION = > 5 ) ;
2024-05-09 17:41:14 +03:00
/* Добавляем строку в таблицу */
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_ROW ( RDATA_GRID = > RDG , RROW = > RDG_ROW ) ;
end loop ;
exception
when others then
PKG_SQL_DML . CLOSE_CURSOR ( ICURSOR = > ICURSOR ) ;
raise ;
end ;
/* Очищаем отмеченные маршрутные листы */
P_SELECTLIST_CLEAR ( NIDENT = > NFCROUTLST_IDENT ) ;
end if ;
/* Сериализуем описание */
COUT : = PKG_P8PANELS_VISUAL . TDATA_GRID_TO_XML ( RDATA_GRID = > RDG , NINCLUDE_DEF = > NINCLUDE_DEF ) ;
exception
when others then
/* Очищаем отмеченные маршрутные листы */
P_SELECTLIST_CLEAR ( NIDENT = > NFCROUTLST_IDENT ) ;
raise ;
end INCOMEFROMDEPS_DEPT_DG_GET ;
/* Получение таблицы спецификаций планов и отчетов производства изделий */
procedure FCPRODPLANSP_DEPT_DG_GET
(
NFCPRODPLAN in number , -- Р е г . номер планов и отчетов производства изделий
NPAGE_NUMBER in number , -- Номер страницы (игнорируется при NPAGE_SIZE=0)
NPAGE_SIZE in number , -- Количество записей на странице (0 - все)
CORDERS in clob , -- Сортировки
NINCLUDE_DEF in number , -- Признак включения описания колонок таблицы в ответ
COUT out clob -- Сериализованная таблица данных
)
is
NCOMPANY PKG_STD . TREF : = GET_SESSION_COMPANY ( ) ; -- Организация сеанса
RO PKG_P8PANELS_VISUAL . TORDERS ; -- Сортировки
RDG PKG_P8PANELS_VISUAL . TDATA_GRID ; -- Описание таблицы
RDG_ROW PKG_P8PANELS_VISUAL . TROW ; -- Строка таблицы
NROW_FROM PKG_STD . TREF ; -- Номер строки с
NROW_TO PKG_STD . TREF ; -- Номер строки по
CSQL clob ; -- Буфер для запроса
ICURSOR integer ; -- К у р с о р для исполнения запроса
NFCPRODPLANSP PKG_STD . TREF ; -- Р е г . номер спецификации плана
DDATE PKG_STD . TLDATE : = sysdate ; -- Текущая дата
NSUM_PLAN PKG_STD . TLNUMBER ; -- Сумма плана по строке
NSUM_FACT PKG_STD . TLNUMBER ; -- Сумма факта по строке
DDATE_FROM PKG_STD . TLDATE ; -- Дата начала месяца
DDATE_TO PKG_STD . TLDATE ; -- Дата окончания месяца
NFCROUTLST_IDENT PKG_STD . TREF ; -- Р е г . номер идентификатора отмеченных записей маршрутных листов
NFCPRODPLANSP_MAIN PKG_STD . TREF ; -- Р е г . номер основного состава из "Производственная программа"
NMODIF PKG_STD . TREF ; -- Р е г . номер модификации
/* Считывание номенклатуры по спецификации плана */
function FCPRODPLANSP_MODIF_GET
(
NFCPRODPLANSP in number -- Р е г . номер связанной спецификации плана
) return number -- Р е г . номер модификации номенклатуры
is
NRESULT PKG_STD . TREF ; -- Р е г . номер модификации номенклатуры
begin
/* Считываем р е г . номер модификации спецификации плана */
begin
select F . NOMEN_MODIF
into NRESULT
2024-05-30 15:54:31 +03:00
from FCPRODPLANSP T ,
2024-05-09 17:41:14 +03:00
FCMATRESOURCE F
where T . RN = NFCPRODPLANSP
and F . RN = T . MATRES ;
exception
when others then
NRESULT : = null ;
end ;
/* Возвращаем результат */
return NRESULT ;
end FCPRODPLANSP_MODIF_GET ;
/* Инициализация дней месяца */
procedure INIT_DAYS
(
RDG in out nocopy PKG_P8PANELS_VISUAL . TDATA_GRID , -- Описание таблицы
DDATE_FROM in date , -- Дата начала месяца
DDATE_TO in date -- Дата окончания месяца
)
is
DDATE PKG_STD . TLDATE ; -- Сформированная дата дня
NMONTH PKG_STD . TNUMBER ; -- Текущий месяц
NYEAR PKG_STD . TNUMBER ; -- Текущий год
SDATE_NAME PKG_STD . TSTRING ; -- Строковое представление даты для наименования колонки
SPARENT_NAME PKG_STD . TSTRING ; -- Наименование родительской строки
begin
/* Считываем месяц и год текущей даты */
NMONTH : = D_MONTH ( DDATE = > sysdate ) ;
NYEAR : = D_YEAR ( DDATE = > sysdate ) ;
/* Цикл по дням месяца */
for I in D_DAY ( DDATE = > DDATE_FROM ) . . D_DAY ( DDATE = > DDATE_TO )
loop
/* Формируем дату дня */
DDATE : = TO_DATE ( TO_CHAR ( I ) | | ' . ' | | TO_CHAR ( NMONTH ) | | ' . ' | | TO_CHAR ( NYEAR ) , ' dd.mm.yyyy ' ) ;
/* Строковое представление даты для наименования колонки */
SDATE_NAME : = TO_CHAR ( DDATE , SCOL_PATTERN_DATE ) ;
/* Формируем наименование родительской строки */
SPARENT_NAME : = ' N_ ' | | SDATE_NAME | | ' _PLAN_FACT ' ;
/* Описываем родительскую колонку таблицы данных */
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > SPARENT_NAME ,
SCAPTION = > LPAD ( D_DAY ( DDATE ) , 2 , ' 0 ' ) ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_STR ,
SPARENT = > ' NVALUE_BY_DAYS ' ) ;
end loop ;
end INIT_DAYS ;
2024-05-30 15:54:31 +03:00
/* Расчет факта выпусков плана */
procedure FCPRODPLANSP_CALC
(
NFCPRODPLAN in number , -- Р е г . номер планов и отчетов производства изделий
NCOMPANY in number -- Р е г . номер организации
)
is
NIDENT PKG_STD . TREF ; -- Идентификатор отмеченных записей
NTMP PKG_STD . TREF ; -- Буфер
begin
/* Генерируем идентификатор отмеченных записей */
NIDENT : = GEN_IDENT ( ) ;
/* Цикл по записям спецификации плана */
for REC in ( select T . RN from FCPRODPLANSP T where T . PRN = NFCPRODPLAN )
loop
/* Добавляем запись в отмеченные записи */
P_SELECTLIST_INSERT ( NIDENT = > NIDENT , NDOCUMENT = > REC . RN , SUNITCODE = > ' CostProductPlansSpecs ' , NRN = > NTMP ) ;
end loop ;
/* Расчет факта */
P_FCPRODPLANSP_BASE_CALC_FACT ( NCOMPANY = > NCOMPANY , NIDENT = > NIDENT ) ;
/* Очистка отмеченных записей */
P_SELECTLIST_CLEAR ( NIDENT = > NIDENT ) ;
exception
when others then
/* Очистка отмеченных записей */
P_SELECTLIST_CLEAR ( NIDENT = > NIDENT ) ;
end FCPRODPLANSP_CALC ;
2024-05-09 17:41:14 +03:00
begin
2024-05-30 15:54:31 +03:00
/* Если это выбор плана */
if ( NINCLUDE_DEF = 1 ) then
/* Расчет факта выпусков плана */
FCPRODPLANSP_CALC ( NFCPRODPLAN = > NFCPRODPLAN , NCOMPANY = > NCOMPANY ) ;
end if ;
2024-05-09 17:41:14 +03:00
/* Читем сортировки */
RO : = PKG_P8PANELS_VISUAL . TORDERS_FROM_XML ( CORDERS = > CORDERS ) ;
/* Преобразуем номер и размер страницы в номер строк с и по */
PKG_P8PANELS_VISUAL . UTL_ROWS_LIMITS_CALC ( NPAGE_NUMBER = > NPAGE_NUMBER ,
NPAGE_SIZE = > NPAGE_SIZE ,
NROW_FROM = > NROW_FROM ,
NROW_TO = > NROW_TO ) ;
/* Инициализируем таблицу данных */
2024-05-30 15:54:31 +03:00
RDG : = PKG_P8PANELS_VISUAL . TDATA_GRID_MAKE ( BFIXED_HEADER = > true , NFIXED_COLUMNS = > 7 ) ;
2024-05-09 17:41:14 +03:00
/* Описываем колонки таблицы данных */
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' NRN ' ,
SCAPTION = > ' Р е г . номер' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_NUMB ,
BVISIBLE = > false ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' SSTATUS ' ,
SCAPTION = > ' Статус ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_STR ,
BVISIBLE = > false ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' SPROD_ORDER ' ,
SCAPTION = > ' Заказ ' ,
SDATA_TYPE = > PKG_P8PANELS_VISUAL . SDATA_TYPE_STR ,
BVISIBLE = > true ,
BORDER = > true ,
SHINT = > ' Содержит ссылку на связанные сдаточные накладные. ' ,
NWIDTH = > 100 ) ;
PKG_P8PANELS_VISUAL . TDATA_GRID_ADD_COL_DEF ( RDATA_GRID = > RDG ,
SNAME = > ' SMATRES_CODE ' ,