diff --git a/app/panels/mech_rec_cost_jobs_manage/fcjobssp.js b/app/panels/mech_rec_cost_jobs_manage/fcjobssp.js
index 7f6e6c4..fae1f43 100644
--- a/app/panels/mech_rec_cost_jobs_manage/fcjobssp.js
+++ b/app/panels/mech_rec_cost_jobs_manage/fcjobssp.js
@@ -247,7 +247,7 @@ CostJobsSpecsInclude.propTypes = {
//-----------
//Таблица информации о строках сменного задания
-const CostJobsSpecsDataGrid = ({ task, haveNote }) => {
+const CostJobsSpecsDataGrid = ({ task, haveNote, fromAction }) => {
//Собственное состояние - Включение в задание
const [includeEquipment, setIncludeEquipment] = useState({ NFCJOBSSP: null, NEQCONFIG: null, NVALUE: 0 });
@@ -255,7 +255,7 @@ const CostJobsSpecsDataGrid = ({ task, haveNote }) => {
const [costJobsSpecs, setCostJobsSpecs, issueCostJobsSpecs] = useCostJobsSpecs(task);
//Собственное состояние - таблица рабочих центров
- const [equipConfiguration, setEquipConfiguration, includeEquipConfiguration, excludeEquipConfiguration] = useEquipConfiguration(task);
+ const [equipConfiguration, setEquipConfiguration, includeEquipConfiguration, excludeEquipConfiguration] = useEquipConfiguration(task, fromAction);
//При изменении состояния сортировки операций
const costJobsSpecOrderChanged = ({ orders }) => setCostJobsSpecs(pv => ({ ...pv, orders: [...orders], pageNumber: 1, reload: true }));
@@ -468,7 +468,8 @@ const CostJobsSpecsDataGrid = ({ task, haveNote }) => {
//Контроль свойств - Таблица информации о строках сменного задания
CostJobsSpecsDataGrid.propTypes = {
task: PropTypes.number.isRequired,
- haveNote: PropTypes.bool.isRequired
+ haveNote: PropTypes.bool.isRequired,
+ fromAction: PropTypes.bool.isRequired
};
//----------------
diff --git a/app/panels/mech_rec_cost_jobs_manage/hooks.js b/app/panels/mech_rec_cost_jobs_manage/hooks.js
index 5f49f01..ef5b645 100644
--- a/app/panels/mech_rec_cost_jobs_manage/hooks.js
+++ b/app/panels/mech_rec_cost_jobs_manage/hooks.js
@@ -1,9 +1,15 @@
+/*
+ Парус 8 - Панели мониторинга - ПУП - Выдача сменного задания
+ Кастомные хуки
+*/
+
//---------------------
//Подключение библиотек
//---------------------
import React, { useState, useCallback, useEffect, useContext } from "react"; //Классы React
import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером
+import { NavigationCtx } from "../../context/navigation"; //Контекст навигации
import { object2Base64XML } from "../../core/utils"; //Вспомогательные функции
//---------
@@ -39,18 +45,20 @@ const useCostJobs = () => {
jobList: [],
jobListLoaded: false,
selectedJob: {},
- dataLoaded: false
+ fromAction: false
});
//Подключение к контексту взаимодействия с сервером
const { executeStored } = useContext(BackEndСtx);
+ //Подключение к контексту навигации
+ const { getNavigationSearch } = useContext(NavigationCtx);
//При подключении компонента к странице
useEffect(() => {
- const initPlans = async () => {
+ const initPlans = async NRN => {
const data = await executeStored({
stored: "PKG_P8PANELS_MECHREC.FCJOBS_INIT",
- args: {},
+ args: { NFCJOBS: NRN ? parseInt(NRN) : null },
respArg: "COUT",
isArray: name => name === "XFCJOBS",
attributeValueProcessor: (name, val) => (["NHAVE_NOTE"].includes(name) ? val == 1 : val)
@@ -59,11 +67,16 @@ const useCostJobs = () => {
...pv,
init: true,
jobList: [...(data.XFCJOBS || [])],
- jobListLoaded: true
+ selectedJob: data.XFCJOBS_SELECTED ? data.XFCJOBS_SELECTED : {},
+ jobListLoaded: true,
+ fromAction: NRN ? true : false
}));
};
if (!state.init) {
- initPlans();
+ //Считаем параметры, переданные из действия
+ const actionPrms = getNavigationSearch();
+ //Иницализируем планы
+ initPlans(actionPrms.NRN);
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
@@ -163,7 +176,7 @@ const useCostJobsSpecs = task => {
};
//Хук для таблицы рабочих центров
-const useEquipConfiguration = task => {
+const useEquipConfiguration = (task, fromAction) => {
//Собственное состояние - таблица данных
const [equipConfiguration, setEquipConfiguration] = useState({
task: null,
@@ -232,6 +245,7 @@ const useEquipConfiguration = task => {
stored: "PKG_P8PANELS_MECHREC.EQCONFIG_DG_GET",
args: {
NFCJOBS: task,
+ NFROM_ACTION: fromAction ? 1 : 0,
CORDERS: { VALUE: object2Base64XML(equipConfiguration.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB },
NPAGE_NUMBER: equipConfiguration.pageNumber,
NPAGE_SIZE: DATA_GRID_PAGE_SIZE,
@@ -261,7 +275,8 @@ const useEquipConfiguration = task => {
equipConfiguration.selectedRow,
equipConfiguration.task,
task,
- executeStored
+ executeStored,
+ fromAction
]);
return [equipConfiguration, setEquipConfiguration, includeEquipConfiguration, excludeEquipConfiguration];
diff --git a/app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js b/app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js
index d54167e..6ad6111 100644
--- a/app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js
+++ b/app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js
@@ -96,8 +96,7 @@ const MechRecCostJobs = () => {
setState(pv => ({
...pv,
selectedJob: job,
- showJobList: false,
- dataLoaded: false
+ showJobList: false
}));
};
@@ -107,8 +106,7 @@ const MechRecCostJobs = () => {
setState(pv => ({
...pv,
selectedJob: {},
- showJobList: false,
- dataLoaded: false
+ showJobList: false
}));
};
@@ -132,7 +130,7 @@ const MechRecCostJobs = () => {
<>
{`Сменное задание №${state.selectedJob.SDOC_NUMB} на ${state.selectedJob.SPERIOD}`}
{`${state.selectedJob.SSUBDIV}`}
-
+
>
) : !state.selectedJob.NRN ? (
diff --git a/app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js b/app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js
index 75f5021..d02c517 100644
--- a/app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js
+++ b/app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js
@@ -20,7 +20,8 @@ import { useCostDeliveryLists } from "./backend_dg"; //Собственные х
//Стили
const STYLES = {
- CONTAINER: { margin: "5px 0px", textAlign: "center" }
+ CONTAINER: { margin: "5px 0px", textAlign: "center" },
+ DATA_GRID_CELL_COVERED: { backgroundColor: "lightblue" }
};
//------------------------------------
@@ -32,7 +33,7 @@ const dataCellRender = ({ row, columnDef }) => {
//Если "Количество план" равно или меньше "Остаток"
if (row["NQUANT_PLAN"] <= row["NREST"]) {
return {
- cellStyle: { backgroundColor: "lightblue" },
+ cellStyle: { ...STYLES.DATA_GRID_CELL_COVERED },
data: row[columnDef]
};
} else {
diff --git a/app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js b/app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js
index be18627..e208026 100644
--- a/app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js
+++ b/app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js
@@ -20,7 +20,8 @@ import { useGoodsParties } from "./backend_dg"; //Собственные хук
//Стили
const STYLES = {
- CONTAINER: { margin: "5px 0px", textAlign: "center" }
+ CONTAINER: { margin: "5px 0px", textAlign: "center" },
+ DATA_GRID_CELL_COVERED: { backgroundColor: "lightblue" }
};
//------------------------------------
@@ -32,7 +33,7 @@ const dataCellRender = ({ row, columnDef, quantPlanSum }) => {
//Если остаток больше суммы "Выдать по норме" - закрашиваем голубым
if (row["NRESTFACT"] >= quantPlanSum) {
return {
- cellStyle: { backgroundColor: "lightblue" },
+ cellStyle: { ...STYLES.DATA_GRID_CELL_COVERED },
data: row[columnDef]
};
} else {
diff --git a/app/panels/mech_rec_dept_cost_jobs/components/filter.js b/app/panels/mech_rec_dept_cost_jobs/components/filter.js
index 4ae8604..0c1b1f0 100644
--- a/app/panels/mech_rec_dept_cost_jobs/components/filter.js
+++ b/app/panels/mech_rec_dept_cost_jobs/components/filter.js
@@ -36,7 +36,8 @@ const currentYear = currentDate.getUTCFullYear();
//Стили
const STYLES = {
- FILTER_BLOCK: { maxWidth: "200px" }
+ FILTER_CONTAINER: { display: "flex", flexDirection: "row", justifyContent: "flex-start", alignItems: "flex-end" },
+ FILTER_BLOCK: { maxWidth: "200px", display: "flex" }
};
//------------------------------------
@@ -71,7 +72,7 @@ DepartmentsDataGrid.propTypes = {
//Компонент фильтра
const FilterComponent = ({ filter, setFilter, handleMonthChange, handleSelectDeparture }) => {
return (
-
+
Цех
@@ -95,7 +96,7 @@ const FilterComponent = ({ filter, setFilter, handleMonthChange, handleSelectDep
label="Цех"
/>
-
+
handleMonthChange(-1)}>
navigate_before
diff --git a/app/panels/mech_rec_dept_cost_jobs/components/ins_department_dg.js b/app/panels/mech_rec_dept_cost_jobs/components/ins_department_dg.js
index 61a5791..a305bef 100644
--- a/app/panels/mech_rec_dept_cost_jobs/components/ins_department_dg.js
+++ b/app/panels/mech_rec_dept_cost_jobs/components/ins_department_dg.js
@@ -20,7 +20,8 @@ import { useInsDepartment } from "../hooks"; //Состояние таблицы
//Стили
const STYLES = {
- CONTAINER: { margin: "5px 0px", textAlign: "center" }
+ CONTAINER: { margin: "5px 0px", textAlign: "center" },
+ DATA_GRID_CELL_DEFAULT: { cursor: "pointer", backgroundColor: "#ADD8E6" }
};
//------------------------------------
@@ -30,7 +31,7 @@ const STYLES = {
//Генерация ссылок на строках
const dataCellRender = ({ row, columnDef, handleSelectDeparture }) => {
return {
- cellStyle: { cursor: "pointer", backgroundColor: "#ADD8E6" },
+ cellStyle: { ...STYLES.DATA_GRID_CELL_DEFAULT },
cellProps: {
onClick: () => {
handleSelectDeparture({ NRN: row["NRN"], SCODE: row["SCODE"].toString(), SNAME: row["SNAME"] });
diff --git a/app/panels/mech_rec_dept_cost_jobs/hooks.js b/app/panels/mech_rec_dept_cost_jobs/hooks.js
index 907ab64..e5ef297 100644
--- a/app/panels/mech_rec_dept_cost_jobs/hooks.js
+++ b/app/panels/mech_rec_dept_cost_jobs/hooks.js
@@ -178,7 +178,7 @@ const useFilter = (currentMonth, currentYear) => {
openedDepartment: false,
department: { ...department },
workHours: data.NWORKHOURS,
- totalWorkHours: filter.workDays * data.NWORKHOURS
+ totalWorkHours: Math.round(filter.workDays * data.NWORKHOURS)
}));
},
[executeStored, filter.workDays]
diff --git a/db/PKG_P8PANELS_MECHREC.pck b/db/PKG_P8PANELS_MECHREC.pck
index 3d01c91..4ae2fb8 100644
--- a/db/PKG_P8PANELS_MECHREC.pck
+++ b/db/PKG_P8PANELS_MECHREC.pck
@@ -173,12 +173,13 @@ create or replace package PKG_P8PANELS_MECHREC as
/* Получение составов оборудования подразделения */
procedure EQCONFIG_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 -- Сериализованная таблица данных
+ 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 -- Сериализованная таблица данных
);
/* Получение спецификации сменного задания */
@@ -195,7 +196,8 @@ create or replace package PKG_P8PANELS_MECHREC as
/* Инициализация записей раздела "Планы и отчеты производства изделий" */
procedure FCJOBS_INIT
(
- COUT out clob -- Список записей раздела "Сменные задания"
+ NFCJOBS in number := null, -- Рег. номер записи (если вызов из действия раздела)
+ COUT out clob -- Список записей раздела "Сменные задания"
);
/* Получение количества рабочих часов в сменах подразделения */
@@ -710,6 +712,25 @@ create or replace package body PKG_P8PANELS_MECHREC as
/* Возвращаем результат */
return NRESULT;
end UTL_FCPRODPLANSP_MAIN_GET;
+
+ /* Считывание цеха из заголовка сменного задания */
+ 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;
/* Считывание записи строки сменного задания */
function UTL_FCJOBSSP_GET
@@ -3041,7 +3062,7 @@ create or replace package body PKG_P8PANELS_MECHREC as
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,');
- PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' case when (P.NT_SHT_PLAN <> 0) then P.NLABOUR_FACT / P.NT_SHT_PLAN * 100 else 0 end NPROCENT,');
+ 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,');
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,');
@@ -4747,6 +4768,7 @@ create or replace package body PKG_P8PANELS_MECHREC as
procedure EQCONFIG_DG_GET
(
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, -- Сортировки
@@ -4821,8 +4843,14 @@ create or replace package body PKG_P8PANELS_MECHREC as
NCOMPANY => NCOMPANY,
SMEAS_MNEMO => SDICMUNTS_WD,
NRN => NDICMUNTS_WD);
- /* Считываем рег. номер подразделения пользователя */
- NSUBDIV := UTL_SUBDIV_RN_GET(NCOMPANY => NCOMPANY, SUSER => UTILIZER());
+ /* Если выполняется из заголовка СЗ */
+ if (NFROM_ACTION = 1) then
+ /* Считываем рег. номер цеха из сменного задания */
+ NSUBDIV := UTL_FCJOBS_SUBDIV_GET(NFCJOBS => NFCJOBS);
+ else
+ /* Считываем рег. номер подразделения пользователя */
+ NSUBDIV := UTL_SUBDIV_RN_GET(NCOMPANY => NCOMPANY, SUSER => UTILIZER());
+ end if;
/* Если подразделение считано */
if (NSUBDIV is not null) then
/* Обходим данные */
@@ -4924,6 +4952,7 @@ create or replace package body PKG_P8PANELS_MECHREC as
/* Инициализация записей раздела "Планы и отчеты производства изделий" */
procedure FCJOBS_INIT
(
+ NFCJOBS in number := null, -- Рег. номер записи (если вызов из действия раздела)
COUT out clob -- Список записей раздела "Сменные задания"
)
is
@@ -4931,9 +4960,18 @@ create or replace package body PKG_P8PANELS_MECHREC as
SUTILIZER PKG_STD.TSTRING := UTILIZER(); -- Пользователь сеанса
NVERSION PKG_STD.TREF; -- Версия контрагентов
SDOC_INFO PKG_STD.TSTRING; -- Информация о документе
+ NSUBDIV PKG_STD.TREF; -- Рег. номер цеха
begin
/* Считываем версию контрагентов */
FIND_VERSION_BY_COMPANY(NCOMPANY => NCOMPANY, SUNITCODE => 'AGNLIST', NVERSION => NVERSION);
+ /* Если вызов из действия раздела */
+ if (NFCJOBS is not null) then
+ /* Считываем рег. номер цеха из сменного задания */
+ NSUBDIV := UTL_FCJOBS_SUBDIV_GET(NFCJOBS => NFCJOBS);
+ else
+ /* Считываем рег. номер подразделения пользователя */
+ NSUBDIV := UTL_SUBDIV_RN_GET(NCOMPANY => NCOMPANY, SUSER => SUTILIZER);
+ end if;
/* Начинаем формирование XML */
PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_);
/* Открываем корень */
@@ -4956,28 +4994,29 @@ create or replace package body PKG_P8PANELS_MECHREC as
where S.PRN = T.RN
and S.NOTE is not null
and ROWNUM = 1) NHAVE_NOTE
- from FCJOBS T,
+ from (select J.*
+ from FCJOBS J
+ where J.COMPANY = NCOMPANY
+ and J.STATE = NFCJOBS_STATUS_NOT_WO
+ and J.DOCDATE >= TRUNC(sysdate)
+ and J.SUBDIV = NSUBDIV
+ and exists (select null from V_USERPRIV UP where UP.CATALOG = J.CRN)
+ and exists (select null
+ from V_USERPRIV UP
+ where UP.JUR_PERS = J.JUR_PERS
+ and UP.UNITCODE = 'CostJobs')
+ union
+ select J_RN.*
+ from FCJOBS J_RN
+ where J_RN.RN = NFCJOBS) T,
DOCTYPES DT,
INS_DEPARTMENT INS,
TBOPERMODESP PER
- where T.COMPANY = NCOMPANY
- and T.STATE = NFCJOBS_STATUS_NOT_WO
- and T.DOCDATE >= TRUNC(sysdate)
- and DT.RN = T.DOCTYPE
+ where DT.RN = T.DOCTYPE
and T.SUBDIV = INS.RN(+)
and T.TBOPERMODESP = PER.RN(+)
- and PKG_P8PANELS_MECHREC.UTL_SUBDIV_CHECK(T.COMPANY, T.SUBDIV, SUTILIZER) = 1
- and exists (select null from V_USERPRIV UP where UP.CATALOG = T.CRN)
- and exists (select null
- from V_USERPRIV UP
- where UP.JUR_PERS = T.JUR_PERS
- and UP.UNITCODE = 'CostJobs')
order by SDOC_INFO)
loop
- /* Открываем план */
- PKG_XFAST.DOWN_NODE(SNAME => 'XFCJOBS');
- /* Описываем план */
- PKG_XFAST.ATTR(SNAME => 'NRN', NVALUE => REC.NRN);
/* Если указана смена */
if (REC.STBOPERMODESP is not null) then
/* Указываем информацию документа со сменой */
@@ -4986,6 +5025,10 @@ create or replace package body PKG_P8PANELS_MECHREC as
/* Указываем информацию документа без смены */
SDOC_INFO := REC.SDOC_INFO;
end if;
+ /* Открываем план */
+ PKG_XFAST.DOWN_NODE(SNAME => 'XFCJOBS');
+ /* Описываем план */
+ PKG_XFAST.ATTR(SNAME => 'NRN', NVALUE => REC.NRN);
PKG_XFAST.ATTR(SNAME => 'SDOC_INFO', SVALUE => SDOC_INFO);
PKG_XFAST.ATTR(SNAME => 'SDOC_NUMB', SVALUE => REC.SDOC_NUMB);
PKG_XFAST.ATTR(SNAME => 'SSUBDIV', SVALUE => REC.SSUBDIV);
@@ -4993,6 +5036,20 @@ create or replace package body PKG_P8PANELS_MECHREC as
PKG_XFAST.ATTR(SNAME => 'NHAVE_NOTE', NVALUE => COALESCE(REC.NHAVE_NOTE, 0));
/* Закрываем план */
PKG_XFAST.UP();
+ /* Если вызов из действия, то указываем выбранный */
+ if (NFCJOBS = REC.NRN) then
+ /* Открываем план */
+ PKG_XFAST.DOWN_NODE(SNAME => 'XFCJOBS_SELECTED');
+ /* Описываем план */
+ PKG_XFAST.ATTR(SNAME => 'NRN', NVALUE => REC.NRN);
+ PKG_XFAST.ATTR(SNAME => 'SDOC_INFO', SVALUE => SDOC_INFO);
+ PKG_XFAST.ATTR(SNAME => 'SDOC_NUMB', SVALUE => REC.SDOC_NUMB);
+ PKG_XFAST.ATTR(SNAME => 'SSUBDIV', SVALUE => REC.SSUBDIV);
+ PKG_XFAST.ATTR(SNAME => 'SPERIOD', SVALUE => REC.SPERIOD);
+ PKG_XFAST.ATTR(SNAME => 'NHAVE_NOTE', NVALUE => COALESCE(REC.NHAVE_NOTE, 0));
+ /* Закрываем план */
+ PKG_XFAST.UP();
+ end if;
end loop;
/* Закрываем корень */
PKG_XFAST.UP();
@@ -5150,21 +5207,6 @@ create or replace package body PKG_P8PANELS_MECHREC as
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.BGNDATE <= :DDATE_TO');
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and ((T.ENDDATE is null) or ((T.ENDDATE is not null) and (T.ENDDATE >= :DDATE_FROM)))');
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and ' || PKG_SQL_BUILD.PKG_NAME(SNAME => 'PKG_P8PANELS_MECHREC.UTL_INS_DEP_HIER_EQ_CHECK') || '(T.COMPANY, T.RN, :DDATE_TO) = 1');
- /*PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and exists (');
- PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' select null');
- PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from INS_DEPARTMENT H');
- PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where H.COMPANY = :NCOMPANY');
- PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and exists (select null');
- PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from SUBDIVSEQ EQ,');
- PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' EQCONFIG EQC');
- PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where EQ.PRN = H.RN');
- PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and EQC.RN = EQ.EQCONFIG');
- PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and EQC.OPER_DATE is not null');
- PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and EQC.OPER_DATE <= :DDATE_TO');
- PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ' || PKG_SQL_BUILD.ROWLIMIT(NLIMIT => 1, BAND => true) || ')');
- PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ' || PKG_SQL_BUILD.ROWLIMIT(NLIMIT => 1, BAND => true));
- PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' start with H.RN = T.RN');
- PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' connect by prior H.RN = H.PRN)');*/
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ) D) F');
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where F.NROW between :NROW_FROM and :NROW_TO');
/* Разбираем его */