ЦИТК-863 - вызов панели из раздела "Сменные задания" из заголовка СЗ

This commit is contained in:
Dollerino 2024-08-21 17:19:18 +03:00
parent b4ef8cb564
commit 8ee22fa350
5 changed files with 107 additions and 56 deletions

View File

@ -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 }); 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 [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 })); const costJobsSpecOrderChanged = ({ orders }) => setCostJobsSpecs(pv => ({ ...pv, orders: [...orders], pageNumber: 1, reload: true }));
@ -468,7 +468,8 @@ const CostJobsSpecsDataGrid = ({ task, haveNote }) => {
//Контроль свойств - Таблица информации о строках сменного задания //Контроль свойств - Таблица информации о строках сменного задания
CostJobsSpecsDataGrid.propTypes = { CostJobsSpecsDataGrid.propTypes = {
task: PropTypes.number.isRequired, task: PropTypes.number.isRequired,
haveNote: PropTypes.bool.isRequired haveNote: PropTypes.bool.isRequired,
fromAction: PropTypes.bool.isRequired
}; };
//---------------- //----------------

View File

@ -9,6 +9,7 @@
import React, { useState, useCallback, useEffect, useContext } from "react"; //Классы React import React, { useState, useCallback, useEffect, useContext } from "react"; //Классы React
import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером
import { NavigationCtx } from "../../context/navigation"; //Контекст навигации
import { object2Base64XML } from "../../core/utils"; //Вспомогательные функции import { object2Base64XML } from "../../core/utils"; //Вспомогательные функции
//--------- //---------
@ -44,18 +45,20 @@ const useCostJobs = () => {
jobList: [], jobList: [],
jobListLoaded: false, jobListLoaded: false,
selectedJob: {}, selectedJob: {},
dataLoaded: false fromAction: false
}); });
//Подключение к контексту взаимодействия с сервером //Подключение к контексту взаимодействия с сервером
const { executeStored } = useContext(BackEndСtx); const { executeStored } = useContext(BackEndСtx);
//Подключение к контексту навигации
const { getNavigationSearch } = useContext(NavigationCtx);
//При подключении компонента к странице //При подключении компонента к странице
useEffect(() => { useEffect(() => {
const initPlans = async () => { const initPlans = async NRN => {
const data = await executeStored({ const data = await executeStored({
stored: "PKG_P8PANELS_MECHREC.FCJOBS_INIT", stored: "PKG_P8PANELS_MECHREC.FCJOBS_INIT",
args: {}, args: { NFCJOBS: NRN ? parseInt(NRN) : null },
respArg: "COUT", respArg: "COUT",
isArray: name => name === "XFCJOBS", isArray: name => name === "XFCJOBS",
attributeValueProcessor: (name, val) => (["NHAVE_NOTE"].includes(name) ? val == 1 : val) attributeValueProcessor: (name, val) => (["NHAVE_NOTE"].includes(name) ? val == 1 : val)
@ -64,11 +67,16 @@ const useCostJobs = () => {
...pv, ...pv,
init: true, init: true,
jobList: [...(data.XFCJOBS || [])], jobList: [...(data.XFCJOBS || [])],
jobListLoaded: true selectedJob: data.XFCJOBS_SELECTED ? data.XFCJOBS_SELECTED : {},
jobListLoaded: true,
fromAction: NRN ? true : false
})); }));
}; };
if (!state.init) { if (!state.init) {
initPlans(); //Считаем параметры, переданные из действия
const actionPrms = getNavigationSearch();
//Иницализируем планы
initPlans(actionPrms.NRN);
} }
// eslint-disable-next-line react-hooks/exhaustive-deps // eslint-disable-next-line react-hooks/exhaustive-deps
}, []); }, []);
@ -168,7 +176,7 @@ const useCostJobsSpecs = task => {
}; };
//Хук для таблицы рабочих центров //Хук для таблицы рабочих центров
const useEquipConfiguration = task => { const useEquipConfiguration = (task, fromAction) => {
//Собственное состояние - таблица данных //Собственное состояние - таблица данных
const [equipConfiguration, setEquipConfiguration] = useState({ const [equipConfiguration, setEquipConfiguration] = useState({
task: null, task: null,
@ -237,6 +245,7 @@ const useEquipConfiguration = task => {
stored: "PKG_P8PANELS_MECHREC.EQCONFIG_DG_GET", stored: "PKG_P8PANELS_MECHREC.EQCONFIG_DG_GET",
args: { args: {
NFCJOBS: task, NFCJOBS: task,
NFROM_ACTION: fromAction ? 1 : 0,
CORDERS: { VALUE: object2Base64XML(equipConfiguration.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB }, CORDERS: { VALUE: object2Base64XML(equipConfiguration.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB },
NPAGE_NUMBER: equipConfiguration.pageNumber, NPAGE_NUMBER: equipConfiguration.pageNumber,
NPAGE_SIZE: DATA_GRID_PAGE_SIZE, NPAGE_SIZE: DATA_GRID_PAGE_SIZE,
@ -266,7 +275,8 @@ const useEquipConfiguration = task => {
equipConfiguration.selectedRow, equipConfiguration.selectedRow,
equipConfiguration.task, equipConfiguration.task,
task, task,
executeStored executeStored,
fromAction
]); ]);
return [equipConfiguration, setEquipConfiguration, includeEquipConfiguration, excludeEquipConfiguration]; return [equipConfiguration, setEquipConfiguration, includeEquipConfiguration, excludeEquipConfiguration];

View File

@ -96,8 +96,7 @@ const MechRecCostJobs = () => {
setState(pv => ({ setState(pv => ({
...pv, ...pv,
selectedJob: job, selectedJob: job,
showJobList: false, showJobList: false
dataLoaded: false
})); }));
}; };
@ -107,8 +106,7 @@ const MechRecCostJobs = () => {
setState(pv => ({ setState(pv => ({
...pv, ...pv,
selectedJob: {}, selectedJob: {},
showJobList: false, showJobList: false
dataLoaded: false
})); }));
}; };
@ -132,7 +130,7 @@ const MechRecCostJobs = () => {
<> <>
<Typography variant={"h6"}>{`Сменное задание №${state.selectedJob.SDOC_NUMB} на ${state.selectedJob.SPERIOD}`}</Typography> <Typography variant={"h6"}>{`Сменное задание №${state.selectedJob.SDOC_NUMB} на ${state.selectedJob.SPERIOD}`}</Typography>
<Typography variant={"h6"}>{`${state.selectedJob.SSUBDIV}`}</Typography> <Typography variant={"h6"}>{`${state.selectedJob.SSUBDIV}`}</Typography>
<CostJobsSpecsDataGrid task={state.selectedJob.NRN} haveNote={state.selectedJob.NHAVE_NOTE} /> <CostJobsSpecsDataGrid task={state.selectedJob.NRN} haveNote={state.selectedJob.NHAVE_NOTE} fromAction={state.fromAction} />
</> </>
) : !state.selectedJob.NRN ? ( ) : !state.selectedJob.NRN ? (
<InlineMsgInfo okBtn={false} text={"Укажите сменное задание для отображения информации"} /> <InlineMsgInfo okBtn={false} text={"Укажите сменное задание для отображения информации"} />

View File

@ -178,7 +178,7 @@ const useFilter = (currentMonth, currentYear) => {
openedDepartment: false, openedDepartment: false,
department: { ...department }, department: { ...department },
workHours: data.NWORKHOURS, workHours: data.NWORKHOURS,
totalWorkHours: filter.workDays * data.NWORKHOURS totalWorkHours: Math.round(filter.workDays * data.NWORKHOURS)
})); }));
}, },
[executeStored, filter.workDays] [executeStored, filter.workDays]

View File

@ -173,12 +173,13 @@ create or replace package PKG_P8PANELS_MECHREC as
/* Получение составов оборудования подразделения */ /* Получение составов оборудования подразделения */
procedure EQCONFIG_DG_GET procedure EQCONFIG_DG_GET
( (
NFCJOBS in number, -- Рег. номер сменного задания NFCJOBS in number, -- Рег. номер сменного задания
NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) NFROM_ACTION in number := 0, -- Признак запуска из действия раздела (false - нет, true - да)
NPAGE_SIZE in number, -- Количество записей на странице (0 - все) NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0)
CORDERS in clob, -- Сортировки NPAGE_SIZE in number, -- Количество записей на странице (0 - все)
NINCLUDE_DEF in number, -- Признак включения описания колонок таблицы в ответ CORDERS in clob, -- Сортировки
COUT out clob -- Сериализованная таблица данных NINCLUDE_DEF in number, -- Признак включения описания колонок таблицы в ответ
COUT out clob -- Сериализованная таблица данных
); );
/* Получение спецификации сменного задания */ /* Получение спецификации сменного задания */
@ -195,7 +196,8 @@ create or replace package PKG_P8PANELS_MECHREC as
/* Инициализация записей раздела "Планы и отчеты производства изделий" */ /* Инициализация записей раздела "Планы и отчеты производства изделий" */
procedure FCJOBS_INIT procedure FCJOBS_INIT
( (
COUT out clob -- Список записей раздела "Сменные задания" NFCJOBS in number := null, -- Рег. номер записи (если вызов из действия раздела)
COUT out clob -- Список записей раздела "Сменные задания"
); );
/* Получение количества рабочих часов в сменах подразделения */ /* Получение количества рабочих часов в сменах подразделения */
@ -711,6 +713,25 @@ create or replace package body PKG_P8PANELS_MECHREC as
return NRESULT; return NRESULT;
end UTL_FCPRODPLANSP_MAIN_GET; 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 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 => ' from (select P.NRN,');
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' P.SDOC_INFO,'); 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 => ' 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.NPRIOR_PARTY,');
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' P.SPROD_ORDER'); 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 => ' from (select T.RN NRN,');
@ -4747,6 +4768,7 @@ create or replace package body PKG_P8PANELS_MECHREC as
procedure EQCONFIG_DG_GET procedure EQCONFIG_DG_GET
( (
NFCJOBS in number, -- Рег. номер сменного задания NFCJOBS in number, -- Рег. номер сменного задания
NFROM_ACTION in number := 0, -- Признак запуска из действия раздела (false - нет, true - да)
NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0)
NPAGE_SIZE in number, -- Количество записей на странице (0 - все) NPAGE_SIZE in number, -- Количество записей на странице (0 - все)
CORDERS in clob, -- Сортировки CORDERS in clob, -- Сортировки
@ -4821,8 +4843,14 @@ create or replace package body PKG_P8PANELS_MECHREC as
NCOMPANY => NCOMPANY, NCOMPANY => NCOMPANY,
SMEAS_MNEMO => SDICMUNTS_WD, SMEAS_MNEMO => SDICMUNTS_WD,
NRN => NDICMUNTS_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 if (NSUBDIV is not null) then
/* Обходим данные */ /* Обходим данные */
@ -4924,6 +4952,7 @@ create or replace package body PKG_P8PANELS_MECHREC as
/* Инициализация записей раздела "Планы и отчеты производства изделий" */ /* Инициализация записей раздела "Планы и отчеты производства изделий" */
procedure FCJOBS_INIT procedure FCJOBS_INIT
( (
NFCJOBS in number := null, -- Рег. номер записи (если вызов из действия раздела)
COUT out clob -- Список записей раздела "Сменные задания" COUT out clob -- Список записей раздела "Сменные задания"
) )
is is
@ -4931,9 +4960,18 @@ create or replace package body PKG_P8PANELS_MECHREC as
SUTILIZER PKG_STD.TSTRING := UTILIZER(); -- Пользователь сеанса SUTILIZER PKG_STD.TSTRING := UTILIZER(); -- Пользователь сеанса
NVERSION PKG_STD.TREF; -- Версия контрагентов NVERSION PKG_STD.TREF; -- Версия контрагентов
SDOC_INFO PKG_STD.TSTRING; -- Информация о документе SDOC_INFO PKG_STD.TSTRING; -- Информация о документе
NSUBDIV PKG_STD.TREF; -- Рег. номер цеха
begin begin
/* Считываем версию контрагентов */ /* Считываем версию контрагентов */
FIND_VERSION_BY_COMPANY(NCOMPANY => NCOMPANY, SUNITCODE => 'AGNLIST', NVERSION => NVERSION); 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 */ /* Начинаем формирование XML */
PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_); 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 where S.PRN = T.RN
and S.NOTE is not null and S.NOTE is not null
and ROWNUM = 1) NHAVE_NOTE 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, DOCTYPES DT,
INS_DEPARTMENT INS, INS_DEPARTMENT INS,
TBOPERMODESP PER TBOPERMODESP PER
where T.COMPANY = NCOMPANY where DT.RN = T.DOCTYPE
and T.STATE = NFCJOBS_STATUS_NOT_WO
and T.DOCDATE >= TRUNC(sysdate)
and DT.RN = T.DOCTYPE
and T.SUBDIV = INS.RN(+) and T.SUBDIV = INS.RN(+)
and T.TBOPERMODESP = PER.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) order by SDOC_INFO)
loop loop
/* Открываем план */
PKG_XFAST.DOWN_NODE(SNAME => 'XFCJOBS');
/* Описываем план */
PKG_XFAST.ATTR(SNAME => 'NRN', NVALUE => REC.NRN);
/* Если указана смена */ /* Если указана смена */
if (REC.STBOPERMODESP is not null) then 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; SDOC_INFO := REC.SDOC_INFO;
end if; 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_INFO', SVALUE => SDOC_INFO);
PKG_XFAST.ATTR(SNAME => 'SDOC_NUMB', SVALUE => REC.SDOC_NUMB); PKG_XFAST.ATTR(SNAME => 'SDOC_NUMB', SVALUE => REC.SDOC_NUMB);
PKG_XFAST.ATTR(SNAME => 'SSUBDIV', SVALUE => REC.SSUBDIV); 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.ATTR(SNAME => 'NHAVE_NOTE', NVALUE => COALESCE(REC.NHAVE_NOTE, 0));
/* Закрываем план */ /* Закрываем план */
PKG_XFAST.UP(); 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; end loop;
/* Закрываем корень */ /* Закрываем корень */
PKG_XFAST.UP(); 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.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 ((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 ' || 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 => ' ) D) F');
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where F.NROW between :NROW_FROM and :NROW_TO'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where F.NROW between :NROW_FROM and :NROW_TO');
/* Разбираем его */ /* Разбираем его */