Compare commits

...

3 Commits

29 changed files with 3873 additions and 3685 deletions

308
README.md
View File

@ -1341,18 +1341,18 @@ const MyPanel = () => {
Такие свойства как `columnsDef`, `groups`, `rows` компонента `P8PDataGrid` требуют от разработчика передачи данных в определённом формате. Это не обязательно должна быть информация из БД Системы, можно, например, просто объявить переменные в коде панели, задать им соответствующие значения и передать в компонент. Но изначально, таблица данных задумывалась для отображения сведений, полученных их учётных регистров Системы. Такие сведения, как правило, собираются хранимым объектом БД, исполняемым из панели посредством вызова `executeStored`. С целью снижения трудозатрат на приведение собранных хранимым объектом данных к форматам, потребляемым `P8PDataGrid`, реализован специальный API на стороне сервера БД. Такие свойства как `columnsDef`, `groups`, `rows` компонента `P8PDataGrid` требуют от разработчика передачи данных в определённом формате. Это не обязательно должна быть информация из БД Системы, можно, например, просто объявить переменные в коде панели, задать им соответствующие значения и передать в компонент. Но изначально, таблица данных задумывалась для отображения сведений, полученных их учётных регистров Системы. Такие сведения, как правило, собираются хранимым объектом БД, исполняемым из панели посредством вызова `executeStored`. С целью снижения трудозатрат на приведение собранных хранимым объектом данных к форматам, потребляемым `P8PDataGrid`, реализован специальный API на стороне сервера БД.
Для таблицы данных это (см. детальные описания программных интерфейсов в пакете `PKG_P8PANELS_VISUAL`): Для таблицы данных это (см. детальные описания программных интерфейсов в пакете `PKG_P8PANELS_VISUAL`):
`PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE` - функция, инициализация таблицы данных, возвращает объект для хранения описания таблицы\ `PKG_P8PANELS_VISUAL.TDG_MAKE` - функция, инициализация таблицы данных, возвращает объект для хранения описания таблицы\
`PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF` - процедура, добавление описания колонки в таблицу, принимает на вход объект с описанием таблицы и параметры, описывающие добавляемую колонку (её имя, заголовок, тип данных, видимость, доступность отбора и сортировки, набор предопределённых значений и т.д.)\ `PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF` - процедура, добавление описания колонки в таблицу, принимает на вход объект с описанием таблицы и параметры, описывающие добавляемую колонку (её имя, заголовок, тип данных, видимость, доступность отбора и сортировки, набор предопределённых значений и т.д.)\
`PKG_P8PANELS_VISUAL.TCOL_VALS_ADD` - процедура, служит для формирования коллекции предопределённых значений колонки таблицы (подготовленная коллекция передаётся в `RCOL_VALS` вызова `TDATA_GRID_ADD_COL_DEF`, если необходимо)\ `PKG_P8PANELS_VISUAL.TDG_COL_VALS_ADD` - процедура, служит для формирования коллекции предопределённых значений колонки таблицы (подготовленная коллекция передаётся в `RCOL_VALS` вызова `TDG_ADD_COL_DEF`, если необходимо)\
`PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_GROUP` - процедура, служит для добавления описания группы в таблицу данных, на вход принимает объект для хранения описания таблицы и параметры добавляемой группы\ `PKG_P8PANELS_VISUAL.TDG_ADD_GROUP` - процедура, служит для добавления описания группы в таблицу данных, на вход принимает объект для хранения описания таблицы и параметры добавляемой группы\
`PKG_P8PANELS_VISUAL.TROW_ADD_COL` - процедура, добавляет значение колонки к строке таблицы (значение указывается явно в `[S|N|D]VALUE`)\ `PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL` - процедура, добавляет значение колонки к строке таблицы (значение указывается явно в `[S|N|D]VALUE`)\
`PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COL[S|N|D]` - процедура, добавляет значение колонки к строке таблицы (значение указывается через ссылку на номер колонки `NPOSITION` в курсоре `ICURSOR` динамического SQL)\ `PKG_P8PANELS_VISUAL.TDG_ROW_ADD_CUR_COL[S|N|D]` - процедура, добавляет значение колонки к строке таблицы (значение указывается через ссылку на номер колонки `NPOSITION` в курсоре `ICURSOR` динамического SQL)\
`PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW` - процедура, добавляет сформированную строку со значениями колонок в таблицу данных, на вход принимает объект для хранения описания таблицы и описание строки, сформированное вызовами `TROW_ADD_COL` и `TROW_ADD_CUR_COL[S|N|D]`, а так же год группы, в которую должна быть включена строка\ `PKG_P8PANELS_VISUAL.TDG_ADD_ROW` - процедура, добавляет сформированную строку со значениями колонок в таблицу данных, на вход принимает объект для хранения описания таблицы и описание строки, сформированное вызовами `TDG_ROW_ADD_COL` и `TDG_ROW_ADD_CUR_COL[S|N|D]`, а так же год группы, в которую должна быть включена строка\
`PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML` - функция, производит сериализацию объекта, описывающего таблицу данных, в специальный XML-формат, корректно интерпретируемый клиентским компонентом `P8PDataGrid` при передаче в WEB-приложение\ `PKG_P8PANELS_VISUAL.TDG_TO_XML` - функция, производит сериализацию объекта, описывающего таблицу данных, в специальный XML-формат, корректно интерпретируемый клиентским компонентом `P8PDataGrid` при передаче в WEB-приложение\
`PKG_P8PANELS_VISUAL.TORDERS_FROM_XML` - функция, служит для десериализации (как правило, полученного от клиентского приложения) состояния сортировок в коллекцию формата `TORDERS`, на вход принимает `CLOB` с сериализованным состоянием сортировок таблицы в виде `BASE64(<orders><name>ИМЯ</name><direction>ASC|DESC</direction></orders>...)` (клиентское приложение должно обеспечить передачу состояния сортировок в этом формате, см. пример ниже)\ `PKG_P8PANELS_VISUAL.TDG_ORDERS_FROM_XML` - функция, служит для десериализации (как правило, полученного от клиентского приложения) состояния сортировок в коллекцию формата `TORDERS`, на вход принимает `CLOB` с сериализованным состоянием сортировок таблицы в виде `BASE64(<orders><name>ИМЯ</name><direction>ASC|DESC</direction></orders>...)` (клиентское приложение должно обеспечить передачу состояния сортировок в этом формате, см. пример ниже)\
`PKG_P8PANELS_VISUAL.TORDERS_SET_QUERY` - процедура, вспомогательная утилита, производит в тексте SQL-запроса, поданного на вход, замену указанного шаблона на конструкцию `order by`, сформированную с учётом переданной коллекции `RORDERS`\ `PKG_P8PANELS_VISUAL.TDG_ORDERS_SET_QUERY` - процедура, вспомогательная утилита, производит в тексте SQL-запроса, поданного на вход, замену указанного шаблона на конструкцию `order by`, сформированную с учётом переданной коллекции `RORDERS`\
`PKG_P8PANELS_VISUAL.TFILTERS_FROM_XML` - функция, служит для десериализации (как правило, полученного от клиентского приложения) состояния фильтров в коллекцию формата `TFILTERS`, на вход принимает `CLOB` с сериализованным состоянием фильтров таблицы в виде `BASE64(<filters><name>ИМЯ</name><from>ЗНАЧЕНИЕ</from><to>ЗНАЧЕНИЕ</to></filters>...)` (клиентское приложение должно обеспечить передачу состояния фильтров в этом формате, см. пример ниже)\ `PKG_P8PANELS_VISUAL.TDG_FILTERS_FROM_XML` - функция, служит для десериализации (как правило, полученного от клиентского приложения) состояния фильтров в коллекцию формата `TFILTERS`, на вход принимает `CLOB` с сериализованным состоянием фильтров таблицы в виде `BASE64(<filters><name>ИМЯ</name><from>ЗНАЧЕНИЕ</from><to>ЗНАЧЕНИЕ</to></filters>...)` (клиентское приложение должно обеспечить передачу состояния фильтров в этом формате, см. пример ниже)\
`PKG_P8PANELS_VISUAL.TFILTERS_SET_QUERY` - процедура, вспомогательная утилита, производит вызов указанной серверной процедуры отбора с учётом переданных переменных окружения и значений в `RFILTERS`\ `PKG_P8PANELS_VISUAL.TDG_FILTERS_SET_QUERY` - процедура, вспомогательная утилита, производит вызов указанной серверной процедуры отбора с учётом переданных переменных окружения и значений в `RFILTERS`\
`PKG_P8PANELS_VISUAL.UTL_ROWS_LIMITS_CALC` - процедура, вспомогательная утилита, служит для конвертации номера страницы данных и размера страницы данных в границы диапазона строк выборки (как правило, клиентскому приложению удобнее прислать на сервер текущий номер страницы и её размер, в то время к в запросах, для выборки, удобнее применять границы диапазонов строк) `PKG_P8PANELS_VISUAL.UTL_ROWS_LIMITS_CALC` - процедура, вспомогательная утилита, служит для конвертации номера страницы данных и размера страницы данных в границы диапазона строк выборки (как правило, клиентскому приложению удобнее прислать на сервер текущий номер страницы и её размер, в то время к в запросах, для выборки, удобнее применять границы диапазонов строк)
**Пример** **Пример**
@ -1372,11 +1372,11 @@ const MyPanel = () => {
is is
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса
NIDENT PKG_STD.TREF := GEN_IDENT(); -- Идентификатор отбора NIDENT PKG_STD.TREF := GEN_IDENT(); -- Идентификатор отбора
RF PKG_P8PANELS_VISUAL.TFILTERS; -- Фильтры RF PKG_P8PANELS_VISUAL.TDG_FILTERS; -- Фильтры
RO PKG_P8PANELS_VISUAL.TORDERS; -- Сортировки RO PKG_P8PANELS_VISUAL.TDG_ORDERS; -- Сортировки
RDG PKG_P8PANELS_VISUAL.TDATA_GRID; -- Описание таблицы RDG PKG_P8PANELS_VISUAL.TDG; -- Описание таблицы
RAGN_TYPES PKG_P8PANELS_VISUAL.TCOL_VALS; -- Предопределенные значения "Типа контрагентов" RAGN_TYPES PKG_P8PANELS_VISUAL.TDG_COL_VALS; -- Предопределенные значения "Типа контрагентов"
RDG_ROW PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы RDG_ROW PKG_P8PANELS_VISUAL.TDG_ROW; -- Строка таблицы
NROW_FROM PKG_STD.TREF; -- Номер строки с NROW_FROM PKG_STD.TREF; -- Номер строки с
NROW_TO PKG_STD.TREF; -- Номер строки по NROW_TO PKG_STD.TREF; -- Номер строки по
CSQL clob; -- Буфер для запроса CSQL clob; -- Буфер для запроса
@ -1387,71 +1387,71 @@ const MyPanel = () => {
NAGNTYPE PKG_STD.TREF; -- Буфер для "Типа" NAGNTYPE PKG_STD.TREF; -- Буфер для "Типа"
begin begin
/* Читаем фильтры */ /* Читаем фильтры */
RF := PKG_P8PANELS_VISUAL.TFILTERS_FROM_XML(CFILTERS => CFILTERS); RF := PKG_P8PANELS_VISUAL.TDG_FILTERS_FROM_XML(CFILTERS => CFILTERS);
/* Читем сортировки */ /* Читем сортировки */
RO := PKG_P8PANELS_VISUAL.TORDERS_FROM_XML(CORDERS => CORDERS); RO := PKG_P8PANELS_VISUAL.TDG_ORDERS_FROM_XML(CORDERS => CORDERS);
/* Преобразуем номер и размер страницы в номер строк с и по */ /* Преобразуем номер и размер страницы в номер строк с и по */
PKG_P8PANELS_VISUAL.UTL_ROWS_LIMITS_CALC(NPAGE_NUMBER => NPAGE_NUMBER, PKG_P8PANELS_VISUAL.UTL_ROWS_LIMITS_CALC(NPAGE_NUMBER => NPAGE_NUMBER,
NPAGE_SIZE => NPAGE_SIZE, NPAGE_SIZE => NPAGE_SIZE,
NROW_FROM => NROW_FROM, NROW_FROM => NROW_FROM,
NROW_TO => NROW_TO); NROW_TO => NROW_TO);
/* Инициализируем таблицу данных */ /* Инициализируем таблицу данных */
RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(BFIXED_HEADER => true, NFIXED_COLUMNS => 2); RDG := PKG_P8PANELS_VISUAL.TDG_MAKE(BFIXED_HEADER => true, NFIXED_COLUMNS => 2);
/* Описываем колонки таблицы данных */ /* Описываем колонки таблицы данных */
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'SAGNABBR', SNAME => 'SAGNABBR',
SCAPTION => 'Мнемокод', SCAPTION => 'Мнемокод',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
SCOND_FROM => 'AgentAbbr', SCOND_FROM => 'AgentAbbr',
BVISIBLE => true, BVISIBLE => true,
BORDER => true, BORDER => true,
BFILTER => true, BFILTER => true,
NWIDTH => 150); NWIDTH => 150);
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'SAGNINFO', SNAME => 'SAGNINFO',
SCAPTION => 'Сведения', SCAPTION => 'Сведения',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
BVISIBLE => true, BVISIBLE => true,
BORDER => false, BORDER => false,
BFILTER => false, BFILTER => false,
BEXPANDABLE => true, BEXPANDABLE => true,
NWIDTH => 300); NWIDTH => 300);
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'SAGNNAME', SNAME => 'SAGNNAME',
SCAPTION => 'Наименование', SCAPTION => 'Наименование',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
SCOND_FROM => 'AgentName', SCOND_FROM => 'AgentName',
BVISIBLE => true, BVISIBLE => true,
BORDER => true, BORDER => true,
BFILTER => true, BFILTER => true,
SPARENT => 'SAGNINFO', SPARENT => 'SAGNINFO',
NWIDTH => 200); NWIDTH => 200);
PKG_P8PANELS_VISUAL.TCOL_VALS_ADD(RCOL_VALS => RAGN_TYPES, NVALUE => 0); PKG_P8PANELS_VISUAL.TDG_COL_VALS_ADD(RCOL_VALS => RAGN_TYPES, NVALUE => 0);
PKG_P8PANELS_VISUAL.TCOL_VALS_ADD(RCOL_VALS => RAGN_TYPES, NVALUE => 1); PKG_P8PANELS_VISUAL.TDG_COL_VALS_ADD(RCOL_VALS => RAGN_TYPES, NVALUE => 1);
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'NAGNTYPE', SNAME => 'NAGNTYPE',
SCAPTION => 'Тип', SCAPTION => 'Тип',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
SCOND_FROM => 'AgentType', SCOND_FROM => 'AgentType',
BVISIBLE => true, BVISIBLE => true,
BORDER => true, BORDER => true,
BFILTER => true, BFILTER => true,
SPARENT => 'SAGNINFO', SPARENT => 'SAGNINFO',
NWIDTH => 100, NWIDTH => 100,
RCOL_VALS => RAGN_TYPES, RCOL_VALS => RAGN_TYPES,
SHINT => 'В Системе бывают контрагенты двух типов:<br>' || SHINT => 'В Системе бывают контрагенты двух типов:<br>' ||
'<b style="color:blue">Юридическое лицо</b> - организация, которая имеет в собственности, хозяйственном ведении ' || '<b style="color:blue">Юридическое лицо</b> - организация, которая имеет в собственности, хозяйственном ведении ' ||
'или оперативном управлении обособленное имущество, отвечает по своим обязательствам этим имуществом, может от своего ' || 'или оперативном управлении обособленное имущество, отвечает по своим обязательствам этим имуществом, может от своего ' ||
'имени приобретать и осуществлять имущественные и личные неимущественные права, отвечать по своим обязанностям.<br>' || 'имени приобретать и осуществлять имущественные и личные неимущественные права, отвечать по своим обязанностям.<br>' ||
'<b style="color:green">Физическое лицо</b> - субъект правовых отношений, представляющий собой одного человека.'); '<b style="color:green">Физическое лицо</b> - субъект правовых отношений, представляющий собой одного человека.');
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'SFULLNAME', SNAME => 'SFULLNAME',
SCAPTION => 'Полное наименование', SCAPTION => 'Полное наименование',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR); SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR);
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'SAGNIDNUMB', SNAME => 'SAGNIDNUMB',
SCAPTION => 'ИНН', SCAPTION => 'ИНН',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR); SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR);
/* Обходим данные */ /* Обходим данные */
begin begin
/* Добавляем подсказку совместимости */ /* Добавляем подсказку совместимости */
@ -1477,14 +1477,17 @@ const MyPanel = () => {
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and AG.RN in (select ID from COND_BROKER_IDSMART where IDENT = :NIDENT) %ORDER_BY%) D) F'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and AG.RN in (select ID from COND_BROKER_IDSMART where IDENT = :NIDENT) %ORDER_BY%) 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');
/* Учтём сортировки */ /* Учтём сортировки */
PKG_P8PANELS_VISUAL.TORDERS_SET_QUERY(RDATA_GRID => RDG, RORDERS => RO, SPATTERN => '%ORDER_BY%', CSQL => CSQL); PKG_P8PANELS_VISUAL.TDG_ORDERS_SET_QUERY(RDATA_GRID => RDG,
RORDERS => RO,
SPATTERN => '%ORDER_BY%',
CSQL => CSQL);
/* Учтём фильтры */ /* Учтём фильтры */
PKG_P8PANELS_VISUAL.TFILTERS_SET_QUERY(NIDENT => NIDENT, PKG_P8PANELS_VISUAL.TDG_FILTERS_SET_QUERY(NIDENT => NIDENT,
NCOMPANY => NCOMPANY, NCOMPANY => NCOMPANY,
SUNIT => 'AGNLIST', SUNIT => 'AGNLIST',
SPROCEDURE => 'P_AGNLIST_BASE_COND', SPROCEDURE => 'P_AGNLIST_BASE_COND',
RDATA_GRID => RDG, RDATA_GRID => RDG,
RFILTERS => RF); RFILTERS => RF);
/* Разбираем его */ /* Разбираем его */
ICURSOR := PKG_SQL_DML.OPEN_CURSOR(SWHAT => 'SELECT'); ICURSOR := PKG_SQL_DML.OPEN_CURSOR(SWHAT => 'SELECT');
PKG_SQL_DML.PARSE(ICURSOR => ICURSOR, SQUERY => CSQL); PKG_SQL_DML.PARSE(ICURSOR => ICURSOR, SQUERY => CSQL);
@ -1512,29 +1515,38 @@ const MyPanel = () => {
if (NAGNTYPE = 0) then if (NAGNTYPE = 0) then
SGROUP := 'JUR'; SGROUP := 'JUR';
SAGNINFO := SAGNNAME || ', ЮЛ'; SAGNINFO := SAGNNAME || ', ЮЛ';
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_GROUP(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_GROUP(RDATA_GRID => RDG,
SNAME => SGROUP, SNAME => SGROUP,
SCAPTION => 'Юридические лица', SCAPTION => 'Юридические лица',
BEXPANDABLE => true, BEXPANDABLE => true,
BEXPANDED => false); BEXPANDED => false);
else else
SGROUP := 'PERS'; SGROUP := 'PERS';
SAGNINFO := SAGNNAME || ', ФЛ'; SAGNINFO := SAGNNAME || ', ФЛ';
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_GROUP(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_GROUP(RDATA_GRID => RDG,
SNAME => SGROUP, SNAME => SGROUP,
SCAPTION => 'Физические лица', SCAPTION => 'Физические лица',
BEXPANDABLE => true, BEXPANDABLE => true,
BEXPANDED => false); BEXPANDED => false);
end if; end if;
RDG_ROW := PKG_P8PANELS_VISUAL.TROW_MAKE(SGROUP => SGROUP); RDG_ROW := PKG_P8PANELS_VISUAL.TDG_ROW_MAKE(SGROUP => SGROUP);
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SAGNABBR', ICURSOR => ICURSOR, NPOSITION => 1); PKG_P8PANELS_VISUAL.TDG_ROW_ADD_CUR_COLS(RROW => RDG_ROW,
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SAGNINFO', SVALUE => SAGNINFO); SNAME => 'SAGNABBR',
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SAGNNAME', SVALUE => SAGNNAME); ICURSOR => ICURSOR,
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NAGNTYPE', NVALUE => NAGNTYPE); NPOSITION => 1);
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SFULLNAME', ICURSOR => ICURSOR, NPOSITION => 4); PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SAGNINFO', SVALUE => SAGNINFO);
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SAGNIDNUMB', ICURSOR => ICURSOR, NPOSITION => 5); PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SAGNNAME', SVALUE => SAGNNAME);
PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NAGNTYPE', NVALUE => NAGNTYPE);
PKG_P8PANELS_VISUAL.TDG_ROW_ADD_CUR_COLS(RROW => RDG_ROW,
SNAME => 'SFULLNAME',
ICURSOR => ICURSOR,
NPOSITION => 4);
PKG_P8PANELS_VISUAL.TDG_ROW_ADD_CUR_COLS(RROW => RDG_ROW,
SNAME => 'SAGNIDNUMB',
ICURSOR => ICURSOR,
NPOSITION => 5);
/* Добавляем строку в таблицу */ /* Добавляем строку в таблицу */
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); PKG_P8PANELS_VISUAL.TDG_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW);
end loop; end loop;
/* Освобождаем курсор */ /* Освобождаем курсор */
PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR); PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR);
@ -1544,7 +1556,7 @@ const MyPanel = () => {
raise; raise;
end; end;
/* Сериализуем описание */ /* Сериализуем описание */
COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF); COUT := PKG_P8PANELS_VISUAL.TDG_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF);
end DATA_GRID; end DATA_GRID;
``` ```
@ -1617,14 +1629,14 @@ export const groupCellRender = () => ({ cellStyle: { padding: "2px" } });
//Пример: Таблица данных "P8PDataGrid" //Пример: Таблица данных "P8PDataGrid"
const DataGrid = ({ title }) => { const DataGrid = ({ title }) => {
//Собственное состояние - таблица данных //Собственное состояние - таблица данных
const [dataGrid, setdataGrid] = useState({ const [dataGrid, setDataGrid] = useState({
dataLoaded: false, dataLoaded: false,
columnsDef: [], columnsDef: [],
filters: null, filters: null,
orders: null, orders: null,
groups: [], groups: [],
rows: [], rows: [],
reload: true, reloading: true,
pageNumber: 1, pageNumber: 1,
morePages: true, morePages: true,
fixedHeader: false, fixedHeader: false,
@ -1639,7 +1651,7 @@ const DataGrid = ({ title }) => {
//Загрузка данных таблицы с сервера //Загрузка данных таблицы с сервера
const loadData = useCallback(async () => { const loadData = useCallback(async () => {
if (dataGrid.reload) { if (dataGrid.reloading) {
const data = await executeStored({ const data = await executeStored({
stored: "PKG_P8PANELS_SAMPLES.DATA_GRID", stored: "PKG_P8PANELS_SAMPLES.DATA_GRID",
args: { args: {
@ -1651,32 +1663,31 @@ const DataGrid = ({ title }) => {
}, },
respArg: "COUT" respArg: "COUT"
}); });
setdataGrid(pv => ({ setDataGrid(pv => ({
...pv, ...pv,
fixedHeader: data.XDATA_GRID.fixedHeader, ...data.XDATA_GRID,
fixedColumns: data.XDATA_GRID.fixedColumns, columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],
rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], groups: data.XDATA_GRID.groups
groups: data.XGROUPS
? pv.pageNumber == 1 ? pv.pageNumber == 1
? [...data.XGROUPS] ? [...data.XDATA_GRID.groups]
: [...pv.groups, ...data.XGROUPS.filter(g => !pv.groups.find(pg => pg.name == g.name))] : [...pv.groups, ...data.XDATA_GRID.groups.filter(g => !pv.groups.find(pg => pg.name == g.name))]
: [...pv.groups], : [...pv.groups],
dataLoaded: true, dataLoaded: true,
reload: false, reloading: false,
morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE morePages: (data.XDATA_GRID.rows || []).length >= DATA_GRID_PAGE_SIZE
})); }));
} }
}, [dataGrid.reload, dataGrid.filters, dataGrid.orders, dataGrid.dataLoaded, dataGrid.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]); }, [dataGrid.reloading, dataGrid.filters, dataGrid.orders, dataGrid.dataLoaded, dataGrid.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]);
//При изменении состояния фильтра //При изменении состояния фильтра
const handleFilterChanged = ({ filters }) => setdataGrid(pv => ({ ...pv, filters: [...filters], pageNumber: 1, reload: true })); const handleFilterChanged = ({ filters }) => setDataGrid(pv => ({ ...pv, filters: [...filters], pageNumber: 1, reloading: true }));
//При изменении состояния сортировки //При изменении состояния сортировки
const handleOrderChanged = ({ orders }) => setdataGrid(pv => ({ ...pv, orders: [...orders], pageNumber: 1, reload: true })); const handleOrderChanged = ({ orders }) => setDataGrid(pv => ({ ...pv, orders: [...orders], pageNumber: 1, reloading: true }));
//При изменении количества отображаемых страниц //При изменении количества отображаемых страниц
const handlePagesCountChanged = () => setdataGrid(pv => ({ ...pv, pageNumber: pv.pageNumber + 1, reload: true })); const handlePagesCountChanged = () => setDataGrid(pv => ({ ...pv, pageNumber: pv.pageNumber + 1, reloading: true }));
//При нажатии на копку контрагента //При нажатии на копку контрагента
const handleAgnButtonClicked = agnCode => pOnlineShowDocument({ unitCode: "AGNLIST", document: agnCode, inRnParameter: "in_AGNABBR" }); const handleAgnButtonClicked = agnCode => pOnlineShowDocument({ unitCode: "AGNLIST", document: agnCode, inRnParameter: "in_AGNABBR" });
@ -1684,7 +1695,7 @@ const DataGrid = ({ title }) => {
//При необходимости обновить данные таблицы //При необходимости обновить данные таблицы
useEffect(() => { useEffect(() => {
loadData(); loadData();
}, [dataGrid.reload, loadData]); }, [dataGrid.reloading, loadData]);
//Генерация содержимого //Генерация содержимого
return ( return (
@ -1699,15 +1710,8 @@ const DataGrid = ({ title }) => {
<P8PDataGrid <P8PDataGrid
{...P8P_DATA_GRID_CONFIG_PROPS} {...P8P_DATA_GRID_CONFIG_PROPS}
containerComponentProps={{ elevation: 6, style: STYLES.DATA_GRID_CONTAINER }} containerComponentProps={{ elevation: 6, style: STYLES.DATA_GRID_CONTAINER }}
columnsDef={dataGrid.columnsDef} {...dataGrid}
groups={dataGrid.groups}
rows={dataGrid.rows}
size={P8P_DATA_GRID_SIZE.LARGE} size={P8P_DATA_GRID_SIZE.LARGE}
fixedHeader={dataGrid.fixedHeader}
fixedColumns={dataGrid.fixedColumns}
filtersInitial={dataGrid.filters}
morePages={dataGrid.morePages}
reloading={dataGrid.reload}
valueFormatter={valueFormatter} valueFormatter={valueFormatter}
headCellRender={headCellRender} headCellRender={headCellRender}
dataCellRender={dataCellRender} dataCellRender={dataCellRender}
@ -2126,12 +2130,10 @@ const taskDialogRenderer = ({ task, close }) => {
//Пример: Диаграмма Ганта "P8Gantt" //Пример: Диаграмма Ганта "P8Gantt"
const Gantt = ({ title }) => { const Gantt = ({ title }) => {
//Собственное состояние //Собственное состояние
const [state, setState] = useState({ const [gantt, setGantt] = useState({
init: false, init: false,
dataLoaded: false, dataLoaded: false,
ident: null, ident: null,
ganttDef: {},
ganttTasks: [],
useCustomTaskDialog: false useCustomTaskDialog: false
}); });
@ -2142,21 +2144,21 @@ const Gantt = ({ title }) => {
const loadData = useCallback(async () => { const loadData = useCallback(async () => {
const data = await executeStored({ const data = await executeStored({
stored: "PKG_P8PANELS_SAMPLES.GANTT", stored: "PKG_P8PANELS_SAMPLES.GANTT",
args: { NIDENT: state.ident }, args: { NIDENT: gantt.ident },
attributeValueProcessor: (name, val) => attributeValueProcessor: (name, val) =>
name == "numb" ? undefined : ["start", "end"].includes(name) ? formatDateJSONDateOnly(val) : val, name == "numb" ? undefined : ["start", "end"].includes(name) ? formatDateJSONDateOnly(val) : val,
respArg: "COUT" respArg: "COUT"
}); });
setState(pv => ({ ...pv, dataLoaded: true, ganttDef: { ...data.XGANTT_DEF }, ganttTasks: [...data.XGANTT_TASKS] })); setGantt(pv => ({ ...pv, dataLoaded: true, ...data.XGANTT }));
}, [state.ident, executeStored]); }, [gantt.ident, executeStored]);
//Инициализация данных диаграммы //Инициализация данных диаграммы
const initData = useCallback(async () => { const initData = useCallback(async () => {
if (!state.init) { if (!gantt.init) {
const data = await executeStored({ stored: "PKG_P8PANELS_SAMPLES.GANTT_INIT", args: { NIDENT: state.ident } }); const data = await executeStored({ stored: "PKG_P8PANELS_SAMPLES.GANTT_INIT", args: { NIDENT: gantt.ident } });
setState(pv => ({ ...pv, init: true, ident: data.NIDENT })); setGantt(pv => ({ ...pv, init: true, ident: data.NIDENT }));
} }
}, [state.init, state.ident, executeStored]); }, [gantt.init, gantt.ident, executeStored]);
//Изменение данных диаграммы //Изменение данных диаграммы
const modifyData = useCallback( const modifyData = useCallback(
@ -2164,13 +2166,13 @@ const Gantt = ({ title }) => {
try { try {
await executeStored({ await executeStored({
stored: "PKG_P8PANELS_SAMPLES.GANTT_MODIFY", stored: "PKG_P8PANELS_SAMPLES.GANTT_MODIFY",
args: { NIDENT: state.ident, NRN: rn, DDATE_FROM: new Date(start), DDATE_TO: new Date(end) } args: { NIDENT: gantt.ident, NRN: rn, DDATE_FROM: new Date(start), DDATE_TO: new Date(end) }
}); });
} finally { } finally {
loadData(); loadData();
} }
}, },
[state.ident, executeStored, loadData] [gantt.ident, executeStored, loadData]
); );
//Обработка измненения сроков задачи в диаграмме Гантта //Обработка измненения сроков задачи в диаграмме Гантта
@ -2180,8 +2182,8 @@ const Gantt = ({ title }) => {
//При необходимости обновить данные таблицы //При необходимости обновить данные таблицы
useEffect(() => { useEffect(() => {
if (state.ident) loadData(); if (gantt.ident) loadData();
}, [state.ident, loadData]); }, [gantt.ident, loadData]);
//При подключении компонента к странице //При подключении компонента к странице
useEffect(() => { useEffect(() => {
@ -2196,23 +2198,21 @@ const Gantt = ({ title }) => {
{title} {title}
</Typography> </Typography>
<FormControlLabel <FormControlLabel
control={<Checkbox onChange={() => setState(pv => ({ ...pv, useCustomTaskDialog: !pv.useCustomTaskDialog }))} />} sx={STYLES.CONTROL}
control={<Checkbox onChange={() => setGantt(pv => ({ ...pv, useCustomTaskDialog: !pv.useCustomTaskDialog }))} />}
label="Отображать пользовательский диалог задачи" label="Отображать пользовательский диалог задачи"
/> />
<Grid container spacing={0} direction="column" alignItems="center"> <Grid container direction="column" alignItems="center">
<Grid item xs={12}> <Grid item xs={12}>
{state.dataLoaded ? ( {gantt.dataLoaded ? (
<Box sx={STYLES.GANTT_CONTAINER} p={1}> <P8PGantt
<P8PGantt {...P8P_GANTT_CONFIG_PROPS}
{...P8P_GANTT_CONFIG_PROPS} {...gantt}
{...state.ganttDef} containerStyle={STYLES.GANTT_CONTAINER}
height={GANTT_HEIGHT} onTaskDatesChange={handleTaskDatesChange}
tasks={state.ganttTasks} taskAttributeRenderer={taskAttributeRenderer}
onTaskDatesChange={handleTaskDatesChange} taskDialogRenderer={gantt.useCustomTaskDialog ? taskDialogRenderer : null}
taskAttributeRenderer={taskAttributeRenderer} />
taskDialogRenderer={state.useCustomTaskDialog ? taskDialogRenderer : null}
/>
</Box>
) : null} ) : null}
</Grid> </Grid>
</Grid> </Grid>

View File

@ -33,34 +33,42 @@ const DISPLAY_SIZE = {
//Типовые пути конвертации в массив (при переводе XML -> JSON) //Типовые пути конвертации в массив (при переводе XML -> JSON)
const XML_ALWAYS_ARRAY_PATHS = [ const XML_ALWAYS_ARRAY_PATHS = [
"XRESPOND.XPAYLOAD.XOUT_ARGUMENTS", "XRESPOND.XPAYLOAD.XOUT_ARGUMENTS",
"XRESPOND.XPAYLOAD.XROWS", "XRESPOND.XPAYLOAD.XDATA_GRID.rows",
"XRESPOND.XPAYLOAD.XCOLUMNS_DEF", "XRESPOND.XPAYLOAD.XDATA_GRID.columnsDef",
"XRESPOND.XPAYLOAD.XCOLUMNS_DEF.values", "XRESPOND.XPAYLOAD.XDATA_GRID.columnsDef.values",
"XRESPOND.XPAYLOAD.XGROUPS", "XRESPOND.XPAYLOAD.XDATA_GRID.groups",
"XRESPOND.XPAYLOAD.XGANTT_DEF.taskAttributes", "XRESPOND.XPAYLOAD.XGANTT.taskAttributes",
"XRESPOND.XPAYLOAD.XGANTT_DEF.taskColors", "XRESPOND.XPAYLOAD.XGANTT.taskColors",
"XRESPOND.XPAYLOAD.XGANTT_TASKS", "XRESPOND.XPAYLOAD.XGANTT.tasks",
"XRESPOND.XPAYLOAD.XGANTT_TASKS.dependencies", "XRESPOND.XPAYLOAD.XGANTT.tasks.dependencies",
"XRESPOND.XPAYLOAD.XCHART.labels", "XRESPOND.XPAYLOAD.XCHART.labels",
"XRESPOND.XPAYLOAD.XCHART.datasets", "XRESPOND.XPAYLOAD.XCHART.datasets",
"XRESPOND.XPAYLOAD.XCHART.datasets.data", "XRESPOND.XPAYLOAD.XCHART.datasets.data",
"XRESPOND.XPAYLOAD.XCHART.datasets.items" "XRESPOND.XPAYLOAD.XCHART.datasets.items",
"XRESPOND.XPAYLOAD.XCYCLOGRAM.taskAttributes",
"XRESPOND.XPAYLOAD.XCYCLOGRAM.columns",
"XRESPOND.XPAYLOAD.XCYCLOGRAM.groups",
"XRESPOND.XPAYLOAD.XCYCLOGRAM.tasks"
]; ];
//Типовые шаблоны конвертации в массив (при переводе XML -> JSON) //Типовые шаблоны конвертации в массив (при переводе XML -> JSON)
const XML_ALWAYS_ARRAY_PATH_PATTERNS = [ const XML_ALWAYS_ARRAY_PATH_PATTERNS = [
/(.*)XROWS$/, /(.*)XDATA_GRID.rows$/,
/(.*)XCOLUMNS_DEF$/, /(.*)XDATA_GRID.columnsDef$/,
/(.*)XCOLUMNS_DEF.values$/, /(.*)XDATA_GRID.columnsDef.values$/,
/(.*)XGROUPS$/, /(.*)XDATA_GRID.groups$/,
/(.*)XGANTT_DEF.taskAttributes$/, /(.*)XGANTT.taskAttributes$/,
/(.*)XGANTT_DEF.taskColors$/, /(.*)XGANTT.taskColors$/,
/(.*)XGANTT_TASKS$/, /(.*)XGANTT.tasks$/,
/(.*)XGANTT_TASKS.dependencies$/, /(.*)XGANTT.tasks.dependencies$/,
/(.*)XCHART.labels$/, /(.*)XCHART.labels$/,
/(.*)XCHART.datasets$/, /(.*)XCHART.datasets$/,
/(.*)XCHART.datasets.data$/, /(.*)XCHART.datasets.data$/,
/(.*)XCHART.datasets.items$/ /(.*)XCHART.datasets.items$/,
/(.*)XCYCLOGRAM.taskAttributes$/,
/(.*)XCYCLOGRAM.columns$/,
/(.*)XCYCLOGRAM.groups$/,
/(.*)XCYCLOGRAM.tasks$/
]; ];
//Типовой постфикс тега для массива (при переводе XML -> JSON) //Типовой постфикс тега для массива (при переводе XML -> JSON)
@ -68,11 +76,13 @@ const XML_ALWAYS_ARRAY_POSTFIX = "__SYSTEM__ARRAY__";
//Типовые шаблоны конвертации значения атрибута в строку (при переводе XML -> JSON) //Типовые шаблоны конвертации значения атрибута в строку (при переводе XML -> JSON)
const XML_ATTR_ALWAYS_STR_PATH_PATTERNS = [ const XML_ATTR_ALWAYS_STR_PATH_PATTERNS = [
/(.*)XCOLUMNS_DEF.name$/, /(.*)XDATA_GRID.columnsDef.name$/,
/(.*)XCOLUMNS_DEF.caption$/, /(.*)XDATA_GRID.columnsDef.caption$/,
/(.*)XCOLUMNS_DEF.parent$/, /(.*)XDATA_GRID.columnsDef.parent$/,
/(.*)XGROUPS.name$/, /(.*)XDATA_GRID.groups.name$/,
/(.*)XGROUPS.caption$/ /(.*)XDATA_GRID.groups.caption$/,
/(.*)XCYCLOGRAM.columns.name$/,
/(.*)XCYCLOGRAM.groups.name$/
]; ];
//----------- //-----------

View File

@ -119,8 +119,8 @@ const EqsPrfrm = () => {
let cF = 0; let cF = 0;
let sF = 0; let sF = 0;
let properties = []; let properties = [];
if (data.XROWS != null) { if (data.XDATA_GRID.rows != null) {
data.XROWS.map(row => { data.XDATA_GRID.rows.map(row => {
properties = []; properties = [];
Object.entries(row).forEach(([key, value]) => properties.push({ name: key, data: value })); Object.entries(row).forEach(([key, value]) => properties.push({ name: key, data: value }));
let info2 = properties.find(element => { let info2 = properties.find(element => {
@ -156,11 +156,10 @@ const EqsPrfrm = () => {
} }
setDataGrid(pv => ({ setDataGrid(pv => ({
...pv, ...pv,
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, ...data.XDATA_GRID,
rows: [...(data.XROWS || [])], columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,
fixedHeader: data.XDATA_GRID.fixedHeader, rows: [...(data.XDATA_GRID.rows || [])],
fixedColumns: data.XDATA_GRID.fixedColumns, groups: [...(data.XDATA_GRID.groups || [])],
groups: [...(data.XGROUPS || [])],
dataLoaded: true, dataLoaded: true,
reload: false reload: false
})); }));

View File

@ -195,9 +195,10 @@ const useProductDetailsTable = (planSpec, product, orders, pageNumber, stored) =
}); });
setData(pv => ({ setData(pv => ({
...pv, ...pv,
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, ...data.XDATA_GRID,
rows: pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,
morePages: DATA_GRID_PAGE_SIZE == 0 ? false : (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE, rows: pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],
morePages: DATA_GRID_PAGE_SIZE == 0 ? false : (data.XDATA_GRID.rows || []).length >= DATA_GRID_PAGE_SIZE,
init: true init: true
})); }));
} finally { } finally {

View File

@ -150,12 +150,13 @@ const useCostJobsSpecs = task => {
}); });
setCostJobsSpecs(pv => ({ setCostJobsSpecs(pv => ({
...pv, ...pv,
...data.XDATA_GRID,
task: task, task: task,
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,
rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],
dataLoaded: true, dataLoaded: true,
reload: false, reload: false,
morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE morePages: (data.XDATA_GRID.rows || []).length >= DATA_GRID_PAGE_SIZE
})); }));
}; };
loadData(); loadData();
@ -256,12 +257,13 @@ const useEquipConfiguration = (task, fromAction) => {
}); });
setEquipConfiguration(pv => ({ setEquipConfiguration(pv => ({
...pv, ...pv,
...data.XDATA_GRID,
task: task, task: task,
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,
rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],
dataLoaded: true, dataLoaded: true,
reload: false, reload: false,
morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE morePages: (data.XDATA_GRID.rows || []).length >= DATA_GRID_PAGE_SIZE
})); }));
}; };
loadData(); loadData();

View File

@ -53,14 +53,15 @@ const useCostRouteLists = (task, taskType) => {
}); });
setCostRouteLists(pv => ({ setCostRouteLists(pv => ({
...pv, ...pv,
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, ...data.XDATA_GRID,
rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,
rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],
dataLoaded: true, dataLoaded: true,
reload: false, reload: false,
morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE, morePages: (data.XDATA_GRID.rows || []).length >= DATA_GRID_PAGE_SIZE,
quantPlanSum: data.XROWS ? data.XROWS.reduce((a, b) => a + b["NQUANT_PLAN"], 0) : 0, quantPlanSum: data.XDATA_GRID.rows ? data.XDATA_GRID.rows.reduce((a, b) => a + b["NQUANT_PLAN"], 0) : 0,
uniqueNomns: data.XROWS uniqueNomns: data.XDATA_GRID.rows
? data.XROWS.reduce((accumulator, current) => { ? data.XDATA_GRID.rows.reduce((accumulator, current) => {
if (!accumulator.find(item => item.SMATRES_PLAN_NOMEN === current.SMATRES_PLAN_NOMEN)) { if (!accumulator.find(item => item.SMATRES_PLAN_NOMEN === current.SMATRES_PLAN_NOMEN)) {
accumulator.push(current); accumulator.push(current);
} }
@ -122,11 +123,12 @@ const useIncomFromDeps = (task, taskType) => {
}); });
setIncomFromDeps(pv => ({ setIncomFromDeps(pv => ({
...pv, ...pv,
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, ...data.XDATA_GRID,
rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,
rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],
dataLoaded: true, dataLoaded: true,
reload: false, reload: false,
morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE morePages: (data.XDATA_GRID.rows || []).length >= DATA_GRID_PAGE_SIZE
})); }));
} }
// eslint-disable-next-line react-hooks/exhaustive-deps // eslint-disable-next-line react-hooks/exhaustive-deps
@ -172,11 +174,12 @@ const useGoodsParties = mainRowRN => {
}); });
setGoodsParties(pv => ({ setGoodsParties(pv => ({
...pv, ...pv,
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, ...data.XDATA_GRID,
rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,
rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],
dataLoaded: true, dataLoaded: true,
reload: false, reload: false,
morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE morePages: (data.XDATA_GRID.rows || []).length >= DATA_GRID_PAGE_SIZE
})); }));
} }
// eslint-disable-next-line react-hooks/exhaustive-deps // eslint-disable-next-line react-hooks/exhaustive-deps
@ -223,11 +226,12 @@ const useCostDeliveryLists = mainRowRN => {
}); });
setCostDeliveryLists(pv => ({ setCostDeliveryLists(pv => ({
...pv, ...pv,
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, ...data.XDATA_GRID,
rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,
rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],
dataLoaded: true, dataLoaded: true,
reload: false, reload: false,
morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE morePages: (data.XDATA_GRID.rows || []).length >= DATA_GRID_PAGE_SIZE
})); }));
} }
// eslint-disable-next-line react-hooks/exhaustive-deps // eslint-disable-next-line react-hooks/exhaustive-deps

View File

@ -97,7 +97,7 @@ const parseProdPlanSpXML = async xmlDoc => {
attributeValueProcessor: (name, val) => attributeValueProcessor: (name, val) =>
["numb", "title"].includes(name) ? undefined : ["start", "end"].includes(name) ? formatDateJSONDateOnly(val) : val ["numb", "title"].includes(name) ? undefined : ["start", "end"].includes(name) ? formatDateJSONDateOnly(val) : val
}); });
return data.XDATA; return data.XDATA.XGANTT;
}; };
//Форматирование для отображения количества документов //Форматирование для отображения количества документов
@ -237,8 +237,7 @@ const MechRecCostProdPlans = () => {
selectedPlanCtlgLevel: null, selectedPlanCtlgLevel: null,
selectedPlanCtlgSort: null, selectedPlanCtlgSort: null,
selectedPlanCtlgMenuItems: null, selectedPlanCtlgMenuItems: null,
selectedPlanCtlgGanttDef: {}, gantt: {},
selectedPlanCtlgSpecs: [],
selectedTaskDetail: null, selectedTaskDetail: null,
selectedTaskDetailType: null, selectedTaskDetailType: null,
planSpec: null planSpec: null
@ -282,8 +281,7 @@ const MechRecCostProdPlans = () => {
selectedPlanCtlgLevel: null, selectedPlanCtlgLevel: null,
selectedPlanCtlgSort: null, selectedPlanCtlgSort: null,
selectedPlanCtlgMenuItems: null, selectedPlanCtlgMenuItems: null,
selectedPlanCtlgSpecs: [], gantt: {},
selectedPlanCtlgGanttDef: {},
showPlanList: false, showPlanList: false,
selectedTaskDetail: null, selectedTaskDetail: null,
selectedTaskDetailType: null selectedTaskDetailType: null
@ -300,8 +298,7 @@ const MechRecCostProdPlans = () => {
selectedPlanCtlgLevel: null, selectedPlanCtlgLevel: null,
selectedPlanCtlgSort: null, selectedPlanCtlgSort: null,
selectedPlanCtlgMenuItems: null, selectedPlanCtlgMenuItems: null,
selectedPlanCtlgSpecs: [], gantt: {},
selectedPlanCtlgGanttDef: {},
showPlanList: false, showPlanList: false,
selectedTaskDetail: null, selectedTaskDetail: null,
selectedTaskDetailType: null selectedTaskDetailType: null
@ -324,8 +321,7 @@ const MechRecCostProdPlans = () => {
? state.selectedPlanCtlgMenuItems ? state.selectedPlanCtlgMenuItems
: [...Array(data.NMAX_LEVEL).keys()].map(el => el + 1), : [...Array(data.NMAX_LEVEL).keys()].map(el => el + 1),
selectedPlanCtlgSpecsLoaded: true, selectedPlanCtlgSpecsLoaded: true,
selectedPlanCtlgGanttDef: doc.XGANTT_DEF ? { ...doc.XGANTT_DEF } : {}, gantt: { ...doc, tasks: [...(doc?.tasks || [])] }
selectedPlanCtlgSpecs: [...(doc?.XGANTT_TASKS || [])]
})); }));
}, },
// eslint-disable-next-line react-hooks/exhaustive-deps // eslint-disable-next-line react-hooks/exhaustive-deps
@ -401,7 +397,7 @@ const MechRecCostProdPlans = () => {
<Grid container> <Grid container>
<Grid item xs={12}> <Grid item xs={12}>
{state.selectedPlanCtlgSpecsLoaded ? ( {state.selectedPlanCtlgSpecsLoaded ? (
state.selectedPlanCtlgSpecs.length === 0 ? ( state.gantt.tasks.length === 0 ? (
<Box pt={3}> <Box pt={3}>
<InlineMsgInfo <InlineMsgInfo
okBtn={false} okBtn={false}
@ -459,10 +455,9 @@ const MechRecCostProdPlans = () => {
) : null} ) : null}
<P8PGantt <P8PGantt
{...P8P_GANTT_CONFIG_PROPS} {...P8P_GANTT_CONFIG_PROPS}
{...state.selectedPlanCtlgGanttDef} {...state.gantt}
containerStyle={STYLES.GANTT_CONTAINER} containerStyle={STYLES.GANTT_CONTAINER}
titleStyle={STYLES.GANTT_TITLE} titleStyle={STYLES.GANTT_TITLE}
tasks={state.selectedPlanCtlgSpecs}
taskDialogRenderer={prms => taskDialogRenderer({ ...prms, handleTaskDetailOpen })} taskDialogRenderer={prms => taskDialogRenderer({ ...prms, handleTaskDetailOpen })}
/> />
</Box> </Box>

View File

@ -62,13 +62,12 @@ const useMechRecDeptCostJobs = (subdiv, fullDate, workHours) => {
}); });
setCostJobs(pv => ({ setCostJobs(pv => ({
...pv, ...pv,
fixedHeader: data.XDATA_GRID.fixedHeader, ...data.XDATA_GRID,
fixedColumns: data.XDATA_GRID.fixedColumns, columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],
rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],
dataLoaded: true, dataLoaded: true,
reload: false, reload: false,
morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE_LARGE, morePages: (data.XDATA_GRID.rows || []).length >= DATA_GRID_PAGE_SIZE_LARGE,
date: fullDate date: fullDate
})); }));
}; };
@ -109,11 +108,12 @@ const useInsDepartment = fullDate => {
}); });
setInsDepartments(pv => ({ setInsDepartments(pv => ({
...pv, ...pv,
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, ...data.XDATA_GRID,
rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,
rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],
dataLoaded: true, dataLoaded: true,
reload: false, reload: false,
morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE_SMALL morePages: (data.XDATA_GRID.rows || []).length >= DATA_GRID_PAGE_SIZE_SMALL
})); }));
}; };
if (insDepartments.reload) { if (insDepartments.reload) {

View File

@ -75,13 +75,12 @@ const useDeptCostProdPlans = () => {
}); });
setState(pv => ({ setState(pv => ({
...pv, ...pv,
fixedHeader: data.XDATA_GRID.fixedHeader, ...data.XDATA_GRID,
fixedColumns: data.XDATA_GRID.fixedColumns, columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],
rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],
dataLoaded: true, dataLoaded: true,
reload: false, reload: false,
morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE_LARGE morePages: (data.XDATA_GRID.rows || []).length >= DATA_GRID_PAGE_SIZE_LARGE
})); }));
}; };
if (state.reload) { if (state.reload) {
@ -144,11 +143,12 @@ const useCostRouteLists = task => {
}); });
setCostRouteLists(pv => ({ setCostRouteLists(pv => ({
...pv, ...pv,
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, ...data.XDATA_GRID,
rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,
rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],
dataLoaded: true, dataLoaded: true,
reload: false, reload: false,
morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE_SMALL morePages: (data.XDATA_GRID.rows || []).length >= DATA_GRID_PAGE_SIZE_SMALL
})); }));
}; };
if (costRouteLists.reload && task) { if (costRouteLists.reload && task) {
@ -202,11 +202,12 @@ const useCostRouteListsSpecs = mainRowRN => {
}); });
setCostRouteListsSpecs(pv => ({ setCostRouteListsSpecs(pv => ({
...pv, ...pv,
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, ...data.XDATA_GRID,
rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,
rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],
dataLoaded: true, dataLoaded: true,
reload: false, reload: false,
morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE_LARGE morePages: (data.XDATA_GRID.rows || []).length >= DATA_GRID_PAGE_SIZE_LARGE
})); }));
}; };
if (costRouteListsSpecs.reload) { if (costRouteListsSpecs.reload) {
@ -258,11 +259,12 @@ const useIncomFromDeps = task => {
}); });
setIncomFromDeps(pv => ({ setIncomFromDeps(pv => ({
...pv, ...pv,
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, ...data.XDATA_GRID,
rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,
rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],
dataLoaded: true, dataLoaded: true,
reload: false, reload: false,
morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE_LARGE morePages: (data.XDATA_GRID.rows || []).length >= DATA_GRID_PAGE_SIZE_LARGE
})); }));
}; };
if (incomFromDeps.reload) { if (incomFromDeps.reload) {

View File

@ -84,11 +84,12 @@ const Projects = () => {
}); });
setProjectsDataGrid(pv => ({ setProjectsDataGrid(pv => ({
...pv, ...pv,
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, ...data.XDATA_GRID,
rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,
rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],
dataLoaded: true, dataLoaded: true,
reload: false, reload: false,
morePages: (data.XROWS || []).length >= configSystemPageSize morePages: (data.XDATA_GRID.rows || []).length >= configSystemPageSize
})); }));
} }
}, [ }, [

View File

@ -57,8 +57,9 @@ const StageArts = ({ stage, filters }) => {
}); });
setStageArtsDataGrid(pv => ({ setStageArtsDataGrid(pv => ({
...pv, ...pv,
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, ...data.XDATA_GRID,
rows: [...(data.XROWS || [])], columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,
rows: [...(data.XDATA_GRID.rows || [])],
dataLoaded: true, dataLoaded: true,
reload: false reload: false
})); }));

View File

@ -67,11 +67,12 @@ const StageContracts = ({ stage, filters }) => {
}); });
setStageContractsDataGrid(pv => ({ setStageContractsDataGrid(pv => ({
...pv, ...pv,
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, ...data.XDATA_GRID,
rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,
rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],
dataLoaded: true, dataLoaded: true,
reload: false, reload: false,
morePages: (data.XROWS || []).length >= configSystemPageSize morePages: (data.XDATA_GRID.rows || []).length >= configSystemPageSize
})); }));
} }
}, [ }, [

View File

@ -71,11 +71,12 @@ const Stages = ({ project, projectName, filters }) => {
}); });
setStagesDataGrid(pv => ({ setStagesDataGrid(pv => ({
...pv, ...pv,
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, ...data.XDATA_GRID,
rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,
rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],
dataLoaded: true, dataLoaded: true,
reload: false, reload: false,
morePages: (data.XROWS || []).length >= configSystemPageSize morePages: (data.XDATA_GRID.rows || []).length >= configSystemPageSize
})); }));
} }
}, [ }, [

View File

@ -55,11 +55,10 @@ const PrjGraph = () => {
const data = await executeStored({ stored: "PKG_P8PANELS_PROJECTS.GRAPH", args: {}, respArg: "COUT" }); const data = await executeStored({ stored: "PKG_P8PANELS_PROJECTS.GRAPH", args: {}, respArg: "COUT" });
setdataGrid(pv => ({ setdataGrid(pv => ({
...pv, ...pv,
fixedHeader: data.XDATA_GRID.fixedHeader, ...data.XDATA_GRID,
fixedColumns: data.XDATA_GRID.fixedColumns, columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, rows: [...(data.XDATA_GRID.rows || [])],
rows: [...(data.XROWS || [])], groups: [...(data.XDATA_GRID.groups || [])],
groups: [...(data.XGROUPS || [])],
dataLoaded: true, dataLoaded: true,
reload: false reload: false
})); }));

View File

@ -57,11 +57,12 @@ const LabFactRptDtl = ({ periodId, title, onHide }) => {
}); });
setFactRptDtl(pv => ({ setFactRptDtl(pv => ({
...pv, ...pv,
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, ...data.XDATA_GRID,
rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,
rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],
dataLoaded: true, dataLoaded: true,
reload: false, reload: false,
morePages: (data.XROWS || []).length >= configSystemPageSize morePages: (data.XDATA_GRID.rows || []).length >= configSystemPageSize
})); }));
} }
}, [ }, [

View File

@ -56,11 +56,12 @@ const LabPlanFOTDtl = ({ periodId, title, onHide }) => {
}); });
setPlanFOTDtl(pv => ({ setPlanFOTDtl(pv => ({
...pv, ...pv,
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, ...data.XDATA_GRID,
rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,
rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],
dataLoaded: true, dataLoaded: true,
reload: false, reload: false,
morePages: (data.XROWS || []).length >= configSystemPageSize morePages: (data.XDATA_GRID.rows || []).length >= configSystemPageSize
})); }));
} }
}, [ }, [

View File

@ -61,11 +61,12 @@ const LabPlanJobsDtl = ({ periodId, title, onHide, onProjectClick }) => {
}); });
setPlanJobsDtl(pv => ({ setPlanJobsDtl(pv => ({
...pv, ...pv,
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, ...data.XDATA_GRID,
rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,
rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],
dataLoaded: true, dataLoaded: true,
reload: false, reload: false,
morePages: (data.XROWS || []).length >= configSystemPageSize morePages: (data.XDATA_GRID.rows || []).length >= configSystemPageSize
})); }));
} }
}, [ }, [

View File

@ -265,8 +265,7 @@ const PrjJobs = () => {
selectedProjectJobsLoaded: false, selectedProjectJobsLoaded: false,
selectedProject: null, selectedProject: null,
selectedProjectDocRn: null, selectedProjectDocRn: null,
selectedProjectGanttDef: {}, gantt: {},
selectedProjectTasks: [],
showInitDialog: false showInitDialog: false
}); });
@ -308,8 +307,9 @@ const PrjJobs = () => {
setState(pv => ({ setState(pv => ({
...pv, ...pv,
selectedProjectJobsLoaded: true, selectedProjectJobsLoaded: true,
selectedProjectGanttDef: tasksOnly === true ? { ...pv.selectedProjectGanttDef } : data.XGANTT_DEF ? { ...data.XGANTT_DEF } : {}, gantt: {
selectedProjectTasks: [...data.XGANTT_TASKS] ...(tasksOnly === true ? { ...pv.gantt, tasks: [...data.XGANTT.tasks] } : data.XGANTT ? { ...data.XGANTT } : {})
}
})); }));
}, },
[executeStored, state.ident, state.selectedProject] [executeStored, state.ident, state.selectedProject]
@ -394,8 +394,7 @@ const PrjJobs = () => {
selectedProject: project, selectedProject: project,
selectedProjectDocRn: projectDocRn, selectedProjectDocRn: projectDocRn,
selectedProjectJobsLoaded: false, selectedProjectJobsLoaded: false,
selectedProjectTasks: [], gantt: {},
selectedProjectGanttDef: {},
showProjectsList: false showProjectsList: false
})); }));
}; };
@ -407,8 +406,7 @@ const PrjJobs = () => {
selectedProjectJobsLoaded: false, selectedProjectJobsLoaded: false,
selectedProject: null, selectedProject: null,
selectedProjectDocRn: null, selectedProjectDocRn: null,
selectedProjectTasks: [], gantt: {},
selectedProjectGanttDef: {},
showProjectsList: false showProjectsList: false
})); }));
@ -515,11 +513,10 @@ const PrjJobs = () => {
{state.selectedProjectJobsLoaded ? ( {state.selectedProjectJobsLoaded ? (
<P8PGantt <P8PGantt
{...P8P_GANTT_CONFIG_PROPS} {...P8P_GANTT_CONFIG_PROPS}
{...state.selectedProjectGanttDef} {...state.gantt}
containerStyle={STYLES.GANTT_CONTAINER} containerStyle={STYLES.GANTT_CONTAINER}
titleStyle={STYLES.GANTT_TITLE} titleStyle={STYLES.GANTT_TITLE}
onTitleClick={handleTitleClick} onTitleClick={handleTitleClick}
tasks={state.selectedProjectTasks}
onTaskDatesChange={handleTaskDatesChange} onTaskDatesChange={handleTaskDatesChange}
taskAttributeRenderer={taskAttributeRenderer} taskAttributeRenderer={taskAttributeRenderer}
/> />

View File

@ -79,11 +79,12 @@ const ResMon = ({ ident, onPlanJobsDtlProjectClick }) => {
}); });
setPeriods(pv => ({ setPeriods(pv => ({
...pv, ...pv,
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, ...data.XDATA_GRID,
rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,
rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],
dataLoaded: true, dataLoaded: true,
reload: false, reload: false,
morePages: (data.XROWS || []).length >= configSystemPageSize morePages: (data.XDATA_GRID.rows || []).length >= configSystemPageSize
})); }));
} }
}, [ident, peridos.reload, peridos.orders, peridos.dataLoaded, peridos.pageNumber, executeStored, configSystemPageSize, SERV_DATA_TYPE_CLOB]); }, [ident, peridos.reload, peridos.orders, peridos.dataLoaded, peridos.pageNumber, executeStored, configSystemPageSize, SERV_DATA_TYPE_CLOB]);

View File

@ -97,16 +97,15 @@ const useConf = (currentTab, handleSectionChange) => {
sections.map(s => { sections.map(s => {
let dg = {}; let dg = {};
Object.assign(dg, dataGrid, { Object.assign(dg, dataGrid, {
...s.XDATA.XDATA_GRID,
rn: s.NRN, rn: s.NRN,
code: s.SCODE, code: s.SCODE,
name: s.SNAME, name: s.SNAME,
delete_allow: s.NDELETE_ALLOW, delete_allow: s.NDELETE_ALLOW,
dataLoaded: true, dataLoaded: true,
columnsDef: [...(s.XDATA.XCOLUMNS_DEF || [])], columnsDef: [...(s.XDATA.XDATA_GRID.columnsDef || [])],
groups: [...(s.XDATA.XGROUPS || [])], groups: [...(s.XDATA.XDATA_GRID.groups || [])],
rows: [...(s.XDATA.XROWS || [])], rows: [...(s.XDATA.XDATA_GRID.rows || [])],
fixedHeader: s.XDATA.XDATA_GRID.fixedHeader,
fixedColumns: s.XDATA.XDATA_GRID.fixedColumns,
reload: false reload: false
}); });
//Если раздел имеет составы показателей //Если раздел имеет составы показателей

View File

@ -239,8 +239,7 @@ const Cyclogram = ({ title }) => {
const data = await executeStored({ const data = await executeStored({
stored: "PKG_P8PANELS_SAMPLES.CYCLOGRAM", stored: "PKG_P8PANELS_SAMPLES.CYCLOGRAM",
args: { NIDENT: state.ident }, args: { NIDENT: state.ident },
attributeValueProcessor: (name, val) => attributeValueProcessor: (name, val) => (["ddate_start", "ddate_end"].includes(name) ? formatDateJSONDateOnly(val) : val),
name === "name" ? undefined : ["ddate_start", "ddate_end"].includes(name) ? formatDateJSONDateOnly(val) : val,
respArg: "COUT" respArg: "COUT"
}); });
setState(pv => ({ ...pv, dataLoaded: true, ...data.XCYCLOGRAM, reload: false })); setState(pv => ({ ...pv, dataLoaded: true, ...data.XCYCLOGRAM, reload: false }));

View File

@ -86,14 +86,14 @@ export const groupCellRender = () => ({ cellStyle: { padding: "2px" } });
//Пример: Таблица данных "P8PDataGrid" //Пример: Таблица данных "P8PDataGrid"
const DataGrid = ({ title }) => { const DataGrid = ({ title }) => {
//Собственное состояние - таблица данных //Собственное состояние - таблица данных
const [dataGrid, setdataGrid] = useState({ const [dataGrid, setDataGrid] = useState({
dataLoaded: false, dataLoaded: false,
columnsDef: [], columnsDef: [],
filters: null, filters: null,
orders: null, orders: null,
groups: [], groups: [],
rows: [], rows: [],
reload: true, reloading: true,
pageNumber: 1, pageNumber: 1,
morePages: true, morePages: true,
fixedHeader: false, fixedHeader: false,
@ -108,7 +108,7 @@ const DataGrid = ({ title }) => {
//Загрузка данных таблицы с сервера //Загрузка данных таблицы с сервера
const loadData = useCallback(async () => { const loadData = useCallback(async () => {
if (dataGrid.reload) { if (dataGrid.reloading) {
const data = await executeStored({ const data = await executeStored({
stored: "PKG_P8PANELS_SAMPLES.DATA_GRID", stored: "PKG_P8PANELS_SAMPLES.DATA_GRID",
args: { args: {
@ -120,32 +120,31 @@ const DataGrid = ({ title }) => {
}, },
respArg: "COUT" respArg: "COUT"
}); });
setdataGrid(pv => ({ setDataGrid(pv => ({
...pv, ...pv,
fixedHeader: data.XDATA_GRID.fixedHeader, ...data.XDATA_GRID,
fixedColumns: data.XDATA_GRID.fixedColumns, columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],
rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], groups: data.XDATA_GRID.groups
groups: data.XGROUPS
? pv.pageNumber == 1 ? pv.pageNumber == 1
? [...data.XGROUPS] ? [...data.XDATA_GRID.groups]
: [...pv.groups, ...data.XGROUPS.filter(g => !pv.groups.find(pg => pg.name == g.name))] : [...pv.groups, ...data.XDATA_GRID.groups.filter(g => !pv.groups.find(pg => pg.name == g.name))]
: [...pv.groups], : [...pv.groups],
dataLoaded: true, dataLoaded: true,
reload: false, reloading: false,
morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE morePages: (data.XDATA_GRID.rows || []).length >= DATA_GRID_PAGE_SIZE
})); }));
} }
}, [dataGrid.reload, dataGrid.filters, dataGrid.orders, dataGrid.dataLoaded, dataGrid.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]); }, [dataGrid.reloading, dataGrid.filters, dataGrid.orders, dataGrid.dataLoaded, dataGrid.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]);
//При изменении состояния фильтра //При изменении состояния фильтра
const handleFilterChanged = ({ filters }) => setdataGrid(pv => ({ ...pv, filters: [...filters], pageNumber: 1, reload: true })); const handleFilterChanged = ({ filters }) => setDataGrid(pv => ({ ...pv, filters: [...filters], pageNumber: 1, reloading: true }));
//При изменении состояния сортировки //При изменении состояния сортировки
const handleOrderChanged = ({ orders }) => setdataGrid(pv => ({ ...pv, orders: [...orders], pageNumber: 1, reload: true })); const handleOrderChanged = ({ orders }) => setDataGrid(pv => ({ ...pv, orders: [...orders], pageNumber: 1, reloading: true }));
//При изменении количества отображаемых страниц //При изменении количества отображаемых страниц
const handlePagesCountChanged = () => setdataGrid(pv => ({ ...pv, pageNumber: pv.pageNumber + 1, reload: true })); const handlePagesCountChanged = () => setDataGrid(pv => ({ ...pv, pageNumber: pv.pageNumber + 1, reloading: true }));
//При нажатии на копку контрагента //При нажатии на копку контрагента
const handleAgnButtonClicked = agnCode => pOnlineShowDocument({ unitCode: "AGNLIST", document: agnCode, inRnParameter: "in_AGNABBR" }); const handleAgnButtonClicked = agnCode => pOnlineShowDocument({ unitCode: "AGNLIST", document: agnCode, inRnParameter: "in_AGNABBR" });
@ -153,7 +152,7 @@ const DataGrid = ({ title }) => {
//При необходимости обновить данные таблицы //При необходимости обновить данные таблицы
useEffect(() => { useEffect(() => {
loadData(); loadData();
}, [dataGrid.reload, loadData]); }, [dataGrid.reloading, loadData]);
//Генерация содержимого //Генерация содержимого
return ( return (
@ -168,15 +167,8 @@ const DataGrid = ({ title }) => {
<P8PDataGrid <P8PDataGrid
{...P8P_DATA_GRID_CONFIG_PROPS} {...P8P_DATA_GRID_CONFIG_PROPS}
containerComponentProps={{ elevation: 6, style: STYLES.DATA_GRID_CONTAINER }} containerComponentProps={{ elevation: 6, style: STYLES.DATA_GRID_CONTAINER }}
columnsDef={dataGrid.columnsDef} {...dataGrid}
groups={dataGrid.groups}
rows={dataGrid.rows}
size={P8P_DATA_GRID_SIZE.LARGE} size={P8P_DATA_GRID_SIZE.LARGE}
fixedHeader={dataGrid.fixedHeader}
fixedColumns={dataGrid.fixedColumns}
filtersInitial={dataGrid.filters}
morePages={dataGrid.morePages}
reloading={dataGrid.reload}
valueFormatter={valueFormatter} valueFormatter={valueFormatter}
headCellRender={headCellRender} headCellRender={headCellRender}
dataCellRender={dataCellRender} dataCellRender={dataCellRender}

View File

@ -97,12 +97,10 @@ const taskDialogRenderer = ({ task, close }) => {
//Пример: Диаграмма Ганта "P8Gantt" //Пример: Диаграмма Ганта "P8Gantt"
const Gantt = ({ title }) => { const Gantt = ({ title }) => {
//Собственное состояние //Собственное состояние
const [state, setState] = useState({ const [gantt, setGantt] = useState({
init: false, init: false,
dataLoaded: false, dataLoaded: false,
ident: null, ident: null,
ganttDef: {},
ganttTasks: [],
useCustomTaskDialog: false useCustomTaskDialog: false
}); });
@ -113,21 +111,21 @@ const Gantt = ({ title }) => {
const loadData = useCallback(async () => { const loadData = useCallback(async () => {
const data = await executeStored({ const data = await executeStored({
stored: "PKG_P8PANELS_SAMPLES.GANTT", stored: "PKG_P8PANELS_SAMPLES.GANTT",
args: { NIDENT: state.ident }, args: { NIDENT: gantt.ident },
attributeValueProcessor: (name, val) => attributeValueProcessor: (name, val) =>
name == "numb" ? undefined : ["start", "end"].includes(name) ? formatDateJSONDateOnly(val) : val, name == "numb" ? undefined : ["start", "end"].includes(name) ? formatDateJSONDateOnly(val) : val,
respArg: "COUT" respArg: "COUT"
}); });
setState(pv => ({ ...pv, dataLoaded: true, ganttDef: { ...data.XGANTT_DEF }, ganttTasks: [...data.XGANTT_TASKS] })); setGantt(pv => ({ ...pv, dataLoaded: true, ...data.XGANTT }));
}, [state.ident, executeStored]); }, [gantt.ident, executeStored]);
//Инициализация данных диаграммы //Инициализация данных диаграммы
const initData = useCallback(async () => { const initData = useCallback(async () => {
if (!state.init) { if (!gantt.init) {
const data = await executeStored({ stored: "PKG_P8PANELS_SAMPLES.GANTT_INIT", args: { NIDENT: state.ident } }); const data = await executeStored({ stored: "PKG_P8PANELS_SAMPLES.GANTT_INIT", args: { NIDENT: gantt.ident } });
setState(pv => ({ ...pv, init: true, ident: data.NIDENT })); setGantt(pv => ({ ...pv, init: true, ident: data.NIDENT }));
} }
}, [state.init, state.ident, executeStored]); }, [gantt.init, gantt.ident, executeStored]);
//Изменение данных диаграммы //Изменение данных диаграммы
const modifyData = useCallback( const modifyData = useCallback(
@ -135,13 +133,13 @@ const Gantt = ({ title }) => {
try { try {
await executeStored({ await executeStored({
stored: "PKG_P8PANELS_SAMPLES.GANTT_MODIFY", stored: "PKG_P8PANELS_SAMPLES.GANTT_MODIFY",
args: { NIDENT: state.ident, NRN: rn, DDATE_FROM: new Date(start), DDATE_TO: new Date(end) } args: { NIDENT: gantt.ident, NRN: rn, DDATE_FROM: new Date(start), DDATE_TO: new Date(end) }
}); });
} finally { } finally {
loadData(); loadData();
} }
}, },
[state.ident, executeStored, loadData] [gantt.ident, executeStored, loadData]
); );
//Обработка измненения сроков задачи в диаграмме Гантта //Обработка измненения сроков задачи в диаграмме Гантта
@ -151,8 +149,8 @@ const Gantt = ({ title }) => {
//При необходимости обновить данные таблицы //При необходимости обновить данные таблицы
useEffect(() => { useEffect(() => {
if (state.ident) loadData(); if (gantt.ident) loadData();
}, [state.ident, loadData]); }, [gantt.ident, loadData]);
//При подключении компонента к странице //При подключении компонента к странице
useEffect(() => { useEffect(() => {
@ -168,20 +166,19 @@ const Gantt = ({ title }) => {
</Typography> </Typography>
<FormControlLabel <FormControlLabel
sx={STYLES.CONTROL} sx={STYLES.CONTROL}
control={<Checkbox onChange={() => setState(pv => ({ ...pv, useCustomTaskDialog: !pv.useCustomTaskDialog }))} />} control={<Checkbox onChange={() => setGantt(pv => ({ ...pv, useCustomTaskDialog: !pv.useCustomTaskDialog }))} />}
label="Отображать пользовательский диалог задачи" label="Отображать пользовательский диалог задачи"
/> />
<Grid container direction="column" alignItems="center"> <Grid container direction="column" alignItems="center">
<Grid item xs={12}> <Grid item xs={12}>
{state.dataLoaded ? ( {gantt.dataLoaded ? (
<P8PGantt <P8PGantt
{...P8P_GANTT_CONFIG_PROPS} {...P8P_GANTT_CONFIG_PROPS}
{...state.ganttDef} {...gantt}
containerStyle={STYLES.GANTT_CONTAINER} containerStyle={STYLES.GANTT_CONTAINER}
tasks={state.ganttTasks}
onTaskDatesChange={handleTaskDatesChange} onTaskDatesChange={handleTaskDatesChange}
taskAttributeRenderer={taskAttributeRenderer} taskAttributeRenderer={taskAttributeRenderer}
taskDialogRenderer={state.useCustomTaskDialog ? taskDialogRenderer : null} taskDialogRenderer={gantt.useCustomTaskDialog ? taskDialogRenderer : null}
/> />
) : null} ) : null}
</Grid> </Grid>

View File

@ -227,10 +227,10 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации
SPRJ_GROUP_NAME PKG_STD.TSTRING; -- Наименование группы для проекта SPRJ_GROUP_NAME PKG_STD.TSTRING; -- Наименование группы для проекта
BEXPANDED boolean; -- Флаг раскрытости уровня BEXPANDED boolean; -- Флаг раскрытости уровня
RDG PKG_P8PANELS_VISUAL.TDATA_GRID; -- Описание таблицы RDG PKG_P8PANELS_VISUAL.TDG; -- Описание таблицы
RDG_ROW_INFO PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы с информацией по объекту ремонта RDG_ROW_INFO PKG_P8PANELS_VISUAL.TDG_ROW; -- Строка таблицы с информацией по объекту ремонта
RDG_ROW_PLAN PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы с планом по объекту ремонта RDG_ROW_PLAN PKG_P8PANELS_VISUAL.TDG_ROW; -- Строка таблицы с планом по объекту ремонта
RDG_ROW_FACT PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы с фактом по объекту ремонта RDG_ROW_FACT PKG_P8PANELS_VISUAL.TDG_ROW; -- Строка таблицы с фактом по объекту ремонта
NCURYEAR PKG_STD.TNUMBER; -- Текущий год NCURYEAR PKG_STD.TNUMBER; -- Текущий год
NCURMONTH PKG_STD.TNUMBER; -- Текущий месяц NCURMONTH PKG_STD.TNUMBER; -- Текущий месяц
NTOTALDAYS PKG_STD.TNUMBER; -- Дней в текущем месяце NTOTALDAYS PKG_STD.TNUMBER; -- Дней в текущем месяце
@ -399,99 +399,99 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as
/* Определим дату конца периода */ /* Определим дату конца периода */
NTODATE := LAST_DAY(TO_DATE('01.' || LPAD(TO_CHAR(NTOMONTH), 2, '0') || '.' || TO_CHAR(NTOYEAR), 'dd.mm.yyyy')); NTODATE := LAST_DAY(TO_DATE('01.' || LPAD(TO_CHAR(NTOMONTH), 2, '0') || '.' || TO_CHAR(NTOYEAR), 'dd.mm.yyyy'));
/* Инициализируем таблицу данных */ /* Инициализируем таблицу данных */
RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(BFIXED_HEADER => true, NFIXED_COLUMNS => 2); RDG := PKG_P8PANELS_VISUAL.TDG_MAKE(BFIXED_HEADER => true, NFIXED_COLUMNS => 2);
/* Формируем структуру заголовка */ /* Формируем структуру заголовка */
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'SOBJINFO', SNAME => 'SOBJINFO',
SCAPTION => 'Информация по объекту ремонта', SCAPTION => 'Информация по объекту ремонта',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
NWIDTH => 80); NWIDTH => 80);
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'SINFO', SNAME => 'SINFO',
SCAPTION => 'Объект ремонта', SCAPTION => 'Объект ремонта',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
NWIDTH => 80); NWIDTH => 80);
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'SWRKTYPE', SNAME => 'SWRKTYPE',
SCAPTION => 'Тип работ', SCAPTION => 'Тип работ',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
SPARENT => 'SINFO', SPARENT => 'SINFO',
NWIDTH => 80); NWIDTH => 80);
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'NRN', SNAME => 'NRN',
SCAPTION => 'Рег. номер', SCAPTION => 'Рег. номер',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
BVISIBLE => false); BVISIBLE => false);
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'SWORKNAME', SNAME => 'SWORKNAME',
SCAPTION => 'Наименование работы', SCAPTION => 'Наименование работы',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
BVISIBLE => false); BVISIBLE => false);
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'STECHOBJCODE', SNAME => 'STECHOBJCODE',
SCAPTION => 'Код тех. объекта', SCAPTION => 'Код тех. объекта',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
BVISIBLE => false); BVISIBLE => false);
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'STECHOBJNAME', SNAME => 'STECHOBJNAME',
SCAPTION => 'Наименование тех. объекта', SCAPTION => 'Наименование тех. объекта',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
BVISIBLE => false); BVISIBLE => false);
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'SBELONG', SNAME => 'SBELONG',
SCAPTION => 'Принадлежность', SCAPTION => 'Принадлежность',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
BVISIBLE => false); BVISIBLE => false);
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'SPRODOBJ', SNAME => 'SPRODOBJ',
SCAPTION => 'Производственный объект', SCAPTION => 'Производственный объект',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
BVISIBLE => false); BVISIBLE => false);
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'STECHSERV', SNAME => 'STECHSERV',
SCAPTION => 'Тех. служба', SCAPTION => 'Тех. служба',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
BVISIBLE => false); BVISIBLE => false);
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'SRESPDEP', SNAME => 'SRESPDEP',
SCAPTION => 'Отвественное подразделение', SCAPTION => 'Отвественное подразделение',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
BVISIBLE => false); BVISIBLE => false);
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'STECSERVCODE', SNAME => 'STECSERVCODE',
SCAPTION => 'Вид ремонта', SCAPTION => 'Вид ремонта',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
BVISIBLE => false); BVISIBLE => false);
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'DDATEPLANBEG', SNAME => 'DDATEPLANBEG',
SCAPTION => 'Начало работы (план)', SCAPTION => 'Начало работы (план)',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE,
BVISIBLE => false); BVISIBLE => false);
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'DDATEPLANEND', SNAME => 'DDATEPLANEND',
SCAPTION => 'Окончание работы (план)', SCAPTION => 'Окончание работы (план)',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE,
BVISIBLE => false); BVISIBLE => false);
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'DDATEFACTBEG', SNAME => 'DDATEFACTBEG',
SCAPTION => 'Начало работы (факт)', SCAPTION => 'Начало работы (факт)',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE,
BVISIBLE => false); BVISIBLE => false);
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'DDATEFACTEND', SNAME => 'DDATEFACTEND',
SCAPTION => 'Окончание работы (факт)', SCAPTION => 'Окончание работы (факт)',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE,
BVISIBLE => false); BVISIBLE => false);
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'STECSRVKINDCODE', SNAME => 'STECSRVKINDCODE',
SCAPTION => 'Код типа работы', SCAPTION => 'Код типа работы',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
BVISIBLE => false); BVISIBLE => false);
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'STECSRVKINDNAME', SNAME => 'STECSRVKINDNAME',
SCAPTION => 'Наименование типа работы', SCAPTION => 'Наименование типа работы',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
BVISIBLE => false); BVISIBLE => false);
/* Очистка коллекций */ /* Очистка коллекций */
PKG_CONTVALLOC1S.PURGE(RCONTAINER => YM); PKG_CONTVALLOC1S.PURGE(RCONTAINER => YM);
PKG_CONTVALLOC1S.PURGE(RCONTAINER => MCLR); PKG_CONTVALLOC1S.PURGE(RCONTAINER => MCLR);
@ -530,12 +530,12 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as
else else
BEXPANDED := false; BEXPANDED := false;
end if; end if;
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => '_' || TO_CHAR(Y) || '_' || TO_CHAR(M), SNAME => '_' || TO_CHAR(Y) || '_' || TO_CHAR(M),
SCAPTION => LPAD(TO_CHAR(M), 2, '0') || ' ' || TO_CHAR(Y), SCAPTION => LPAD(TO_CHAR(M), 2, '0') || ' ' || TO_CHAR(Y),
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
BEXPANDABLE => true, BEXPANDABLE => true,
BEXPANDED => BEXPANDED); BEXPANDED => BEXPANDED);
/* Подсчёт кол-ва дней в месяце */ /* Подсчёт кол-ва дней в месяце */
NTOTALDAYS := TO_NUMBER(TO_CHAR(LAST_DAY(TO_DATE('01.' || LPAD(TO_CHAR(M), 2, '0') || '.' || TO_CHAR(Y), NTOTALDAYS := TO_NUMBER(TO_CHAR(LAST_DAY(TO_DATE('01.' || LPAD(TO_CHAR(M), 2, '0') || '.' || TO_CHAR(Y),
'dd.mm.yyyy')), 'dd.mm.yyyy')),
@ -544,12 +544,11 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as
/* Цикл по дням месяца */ /* Цикл по дням месяца */
for D in 1 .. NTOTALDAYS for D in 1 .. NTOTALDAYS
loop loop
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => '_' || TO_CHAR(Y) || '_' || TO_CHAR(M) || '_' || SNAME => '_' || TO_CHAR(Y) || '_' || TO_CHAR(M) || '_' || TO_CHAR(D),
TO_CHAR(D), SCAPTION => TO_CHAR(D, '99'),
SCAPTION => TO_CHAR(D, '99'), SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, SPARENT => '_' || TO_CHAR(Y) || '_' || TO_CHAR(M));
SPARENT => '_' || TO_CHAR(Y) || '_' || TO_CHAR(M));
end loop; end loop;
end loop; end loop;
end loop; end loop;
@ -573,7 +572,7 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as
if (NFROMYEAR = NTOYEAR) then if (NFROMYEAR = NTOYEAR) then
NMS := NFROMMONTH; NMS := NFROMMONTH;
NME := NTOMONTH; NME := NTOMONTH;
/* Иначе вычисляем кол-во месяцев в каждом году периода отчёта */ /* Иначе вычисляем кол-во месяцев в каждом году периода отчёта */
else else
if (Y = NFROMYEAR) then if (Y = NFROMYEAR) then
NMS := NFROMMONTH; NMS := NFROMMONTH;
@ -590,14 +589,14 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as
for M in NMS .. NME for M in NMS .. NME
loop loop
SPERIODNAME := '_' || TO_CHAR(Y) || '_' || TO_CHAR(M); SPERIODNAME := '_' || TO_CHAR(Y) || '_' || TO_CHAR(M);
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW_INFO, PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW_INFO,
SNAME => SPERIODNAME, SNAME => SPERIODNAME,
SVALUE => 'план: ' || HOURS_STR(NHOURS => TRUNC(PKG_CONTVALLOC1S.GETN(RCONTAINER => YM, SVALUE => 'план: ' || HOURS_STR(NHOURS => TRUNC(PKG_CONTVALLOC1S.GETN(RCONTAINER => YM,
SROWID => SPERIODNAME || '_P'), SROWID => SPERIODNAME || '_P'),
1)) || ' факт: ' || 1)) || ' факт: ' ||
HOURS_STR(NHOURS => TRUNC(PKG_CONTVALLOC1S.GETN(RCONTAINER => YM, HOURS_STR(NHOURS => TRUNC(PKG_CONTVALLOC1S.GETN(RCONTAINER => YM,
SROWID => SPERIODNAME || '_F'), SROWID => SPERIODNAME || '_F'),
1))); 1)));
/* Добавление в коллекцию трудоёмкость план */ /* Добавление в коллекцию трудоёмкость план */
PKG_CONTVALLOC1S.PUTN(RCONTAINER => YM, SROWID => SPERIODNAME || '_P', NVALUE => 0); PKG_CONTVALLOC1S.PUTN(RCONTAINER => YM, SROWID => SPERIODNAME || '_P', NVALUE => 0);
/* Добавление в коллекцию трудоёмкость факт */ /* Добавление в коллекцию трудоёмкость факт */
@ -605,17 +604,17 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as
end loop; end loop;
end loop; end loop;
/* Добавление строки с трудоёмкостью */ /* Добавление строки с трудоёмкостью */
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW_INFO); PKG_P8PANELS_VISUAL.TDG_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW_INFO);
end if; end if;
/* Добавление группы с объектом ремонта */ /* Добавление группы с объектом ремонта */
SCURTECHOBJ := QQ.STECHOBJNAME; SCURTECHOBJ := QQ.STECHOBJNAME;
SPRJ_GROUP_NAME := SCURTECHOBJ; SPRJ_GROUP_NAME := SCURTECHOBJ;
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_GROUP(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_GROUP(RDATA_GRID => RDG,
SNAME => SPRJ_GROUP_NAME, SNAME => SPRJ_GROUP_NAME,
SCAPTION => QQ.STECHOBJNAME, SCAPTION => QQ.STECHOBJNAME,
BEXPANDABLE => false); BEXPANDABLE => false);
RDG_ROW_INFO := PKG_P8PANELS_VISUAL.TROW_MAKE(SGROUP => SPRJ_GROUP_NAME); RDG_ROW_INFO := PKG_P8PANELS_VISUAL.TDG_ROW_MAKE(SGROUP => SPRJ_GROUP_NAME);
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW_INFO, SNAME => 'SOBJINFO', SVALUE => SCURTECHOBJ); PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW_INFO, SNAME => 'SOBJINFO', SVALUE => SCURTECHOBJ);
end if; end if;
/* Формируем имя группы для вида ремонта */ /* Формируем имя группы для вида ремонта */
SCURTSKCODE := SCURTECHOBJ || '_' || QQ.STECSRVKINDCODE; SCURTSKCODE := SCURTECHOBJ || '_' || QQ.STECSRVKINDCODE;
@ -623,7 +622,7 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as
if (PKG_CONTVALLOC1S.EXISTS_(RCONTAINER => GF, SROWID => SCURTSKCODE) = false) then if (PKG_CONTVALLOC1S.EXISTS_(RCONTAINER => GF, SROWID => SCURTSKCODE) = false) then
/* Добавляем строку плана */ /* Добавляем строку плана */
if (RDG_ROW_PLAN.RCOLS is not null) then if (RDG_ROW_PLAN.RCOLS is not null) then
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW_PLAN); PKG_P8PANELS_VISUAL.TDG_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW_PLAN);
end if; end if;
/* Добавляем строку факта */ /* Добавляем строку факта */
if (RDG_ROW_FACT.RCOLS is not null) then if (RDG_ROW_FACT.RCOLS is not null) then
@ -631,27 +630,27 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as
/* Цикл по коллекции для закрашивания месяцев */ /* Цикл по коллекции для закрашивания месяцев */
for Z in 1 .. PKG_CONTVALLOC1S.COUNT_(RCONTAINER => MCLR) for Z in 1 .. PKG_CONTVALLOC1S.COUNT_(RCONTAINER => MCLR)
loop loop
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW_FACT, PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW_FACT,
SNAME => CR, SNAME => CR,
SVALUE => PKG_CONTVALLOC1S.GETS(RCONTAINER => MCLR, SROWID => CR)); SVALUE => PKG_CONTVALLOC1S.GETS(RCONTAINER => MCLR, SROWID => CR));
CR := PKG_CONTVALLOC1S.NEXT_(RCONTAINER => MCLR, SROWID => CR); CR := PKG_CONTVALLOC1S.NEXT_(RCONTAINER => MCLR, SROWID => CR);
end loop; end loop;
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW_FACT); PKG_P8PANELS_VISUAL.TDG_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW_FACT);
end if; end if;
PKG_CONTVALLOC1S.PURGE(RCONTAINER => MCLR); PKG_CONTVALLOC1S.PURGE(RCONTAINER => MCLR);
/* Добвим группу для вида ремонта */ /* Добвим группу для вида ремонта */
SPRJ_GROUP_NAME := SCURTSKCODE; SPRJ_GROUP_NAME := SCURTSKCODE;
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_GROUP(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_GROUP(RDATA_GRID => RDG,
SNAME => SPRJ_GROUP_NAME, SNAME => SPRJ_GROUP_NAME,
SCAPTION => QQ.STECSRVKINDCODE, SCAPTION => QQ.STECSRVKINDCODE,
BEXPANDABLE => false); BEXPANDABLE => false);
/* Строка плана */ /* Строка плана */
RDG_ROW_PLAN := PKG_P8PANELS_VISUAL.TROW_MAKE(SGROUP => SPRJ_GROUP_NAME); RDG_ROW_PLAN := PKG_P8PANELS_VISUAL.TDG_ROW_MAKE(SGROUP => SPRJ_GROUP_NAME);
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW_PLAN, SNAME => 'SOBJINFO', SVALUE => QQ.STECSRVKINDCODE); PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW_PLAN, SNAME => 'SOBJINFO', SVALUE => QQ.STECSRVKINDCODE);
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW_PLAN, SNAME => 'SWRKTYPE', SVALUE => 'План'); PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW_PLAN, SNAME => 'SWRKTYPE', SVALUE => 'План');
/* Строка факта */ /* Строка факта */
RDG_ROW_FACT := PKG_P8PANELS_VISUAL.TROW_MAKE(SGROUP => SPRJ_GROUP_NAME); RDG_ROW_FACT := PKG_P8PANELS_VISUAL.TDG_ROW_MAKE(SGROUP => SPRJ_GROUP_NAME);
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW_FACT, SNAME => 'SWRKTYPE', SVALUE => 'Факт'); PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW_FACT, SNAME => 'SWRKTYPE', SVALUE => 'Факт');
/* Добавляем в заполненные группы */ /* Добавляем в заполненные группы */
PKG_CONTVALLOC1S.PUTS(RCONTAINER => GF, SROWID => SPRJ_GROUP_NAME, SVALUE => ''); PKG_CONTVALLOC1S.PUTS(RCONTAINER => GF, SROWID => SPRJ_GROUP_NAME, SVALUE => '');
end if; end if;
@ -676,7 +675,7 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as
/* Закрашивание месяца плана синим */ /* Закрашивание месяца плана синим */
if (PKG_CONTVALLOC1S.EXISTS_(RCONTAINER => COLS, SROWID => SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN') = if (PKG_CONTVALLOC1S.EXISTS_(RCONTAINER => COLS, SROWID => SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN') =
false) then false) then
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW_PLAN, SNAME => SPERIODNAME, SVALUE => 'blue'); PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW_PLAN, SNAME => SPERIODNAME, SVALUE => 'blue');
PKG_CONTVALLOC1S.PUTS(RCONTAINER => COLS, PKG_CONTVALLOC1S.PUTS(RCONTAINER => COLS,
SROWID => SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN', SROWID => SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN',
SVALUE => ''); SVALUE => '');
@ -686,7 +685,7 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as
/* Закрашивание дня плана синим */ /* Закрашивание дня плана синим */
if (PKG_CONTVALLOC1S.EXISTS_(RCONTAINER => COLS, SROWID => SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN') = if (PKG_CONTVALLOC1S.EXISTS_(RCONTAINER => COLS, SROWID => SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN') =
false) then false) then
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW_PLAN, SNAME => SPERIODNAME, SVALUE => 'blue'); PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW_PLAN, SNAME => SPERIODNAME, SVALUE => 'blue');
PKG_CONTVALLOC1S.PUTS(RCONTAINER => COLS, PKG_CONTVALLOC1S.PUTS(RCONTAINER => COLS,
SROWID => SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN', SROWID => SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN',
SVALUE => ''); SVALUE => '');
@ -783,37 +782,37 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as
for M in NMS .. NME for M in NMS .. NME
loop loop
SPERIODNAME := '_' || TO_CHAR(Y) || '_' || TO_CHAR(M); SPERIODNAME := '_' || TO_CHAR(Y) || '_' || TO_CHAR(M);
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW_INFO, PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW_INFO,
SNAME => SPERIODNAME, SNAME => SPERIODNAME,
SVALUE => 'план: ' || HOURS_STR(NHOURS => TRUNC(PKG_CONTVALLOC1S.GETN(RCONTAINER => YM, SVALUE => 'план: ' || HOURS_STR(NHOURS => TRUNC(PKG_CONTVALLOC1S.GETN(RCONTAINER => YM,
SROWID => SPERIODNAME || '_P'), SROWID => SPERIODNAME || '_P'),
1)) || ' факт: ' || 1)) || ' факт: ' ||
HOURS_STR(NHOURS => TRUNC(PKG_CONTVALLOC1S.GETN(RCONTAINER => YM, HOURS_STR(NHOURS => TRUNC(PKG_CONTVALLOC1S.GETN(RCONTAINER => YM,
SROWID => SPERIODNAME || '_F'), SROWID => SPERIODNAME || '_F'),
1))); 1)));
end loop; end loop;
end loop; end loop;
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW_INFO); PKG_P8PANELS_VISUAL.TDG_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW_INFO);
end if; end if;
/* План для последней записи */ /* План для последней записи */
if ((RDG_ROW_PLAN.RCOLS is not null) and (NROWS = 0)) then if ((RDG_ROW_PLAN.RCOLS is not null) and (NROWS = 0)) then
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW_PLAN); PKG_P8PANELS_VISUAL.TDG_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW_PLAN);
end if; end if;
/* Факт для последней записи */ /* Факт для последней записи */
if ((RDG_ROW_FACT.RCOLS is not null) and (NROWS = 0)) then if ((RDG_ROW_FACT.RCOLS is not null) and (NROWS = 0)) then
CR := PKG_CONTVALLOC1S.FIRST_(RCONTAINER => MCLR); CR := PKG_CONTVALLOC1S.FIRST_(RCONTAINER => MCLR);
for Z in 1 .. PKG_CONTVALLOC1S.COUNT_(RCONTAINER => MCLR) for Z in 1 .. PKG_CONTVALLOC1S.COUNT_(RCONTAINER => MCLR)
loop loop
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW_FACT, PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW_FACT,
SNAME => CR, SNAME => CR,
SVALUE => PKG_CONTVALLOC1S.GETS(RCONTAINER => MCLR, SROWID => CR)); SVALUE => PKG_CONTVALLOC1S.GETS(RCONTAINER => MCLR, SROWID => CR));
CR := PKG_CONTVALLOC1S.NEXT_(RCONTAINER => MCLR, SROWID => CR); CR := PKG_CONTVALLOC1S.NEXT_(RCONTAINER => MCLR, SROWID => CR);
end loop; end loop;
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW_FACT); PKG_P8PANELS_VISUAL.TDG_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW_FACT);
end if; end if;
end loop; end loop;
/* Сериализуем описание */ /* Сериализуем описание */
COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => 1); COUT := PKG_P8PANELS_VISUAL.TDG_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => 1);
/* Очищаем контейнеры */ /* Очищаем контейнеры */
PKG_CONTVALLOC1S.PURGE(RCONTAINER => YM); PKG_CONTVALLOC1S.PURGE(RCONTAINER => YM);
PKG_CONTVALLOC1S.PURGE(RCONTAINER => MCLR); PKG_CONTVALLOC1S.PURGE(RCONTAINER => MCLR);

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -784,8 +784,8 @@ create or replace package body PKG_P8PANELS_RRPCONFED as
is is
NVERSION PKG_STD.TREF; -- Рег. номер версии словаря контрагентов NVERSION PKG_STD.TREF; -- Рег. номер версии словаря контрагентов
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса
RDG PKG_P8PANELS_VISUAL.TDATA_GRID; -- Описание таблицы RDG PKG_P8PANELS_VISUAL.TDG; -- Описание таблицы
RDG_ROW PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы RDG_ROW PKG_P8PANELS_VISUAL.TDG_ROW; -- Строка таблицы
CDG clob; -- XML данных раздела CDG clob; -- XML данных раздела
CXML PKG_CONTVALLOC2NS.TCONTAINER; -- Контейнер для данных XML CXML PKG_CONTVALLOC2NS.TCONTAINER; -- Контейнер для данных XML
RRRPCONFSCTNMRK RRPCONFSCTNMRK%rowtype; -- Рег. номер показателя RRRPCONFSCTNMRK RRPCONFSCTNMRK%rowtype; -- Рег. номер показателя
@ -798,8 +798,8 @@ create or replace package body PKG_P8PANELS_RRPCONFED as
/* Инициализация колонок граф показателей */ /* Инициализация колонок граф показателей */
procedure MARKS_COLUMNS_INIT procedure MARKS_COLUMNS_INIT
( (
RDG in out nocopy PKG_P8PANELS_VISUAL.TDATA_GRID, -- Описание таблицы RDG in out nocopy PKG_P8PANELS_VISUAL.TDG, -- Описание таблицы
NRRPCONFSCTN in number -- Рег. номер раздела NRRPCONFSCTN in number -- Рег. номер раздела
) )
is is
begin begin
@ -816,35 +816,35 @@ create or replace package body PKG_P8PANELS_RRPCONFED as
order by C.CODE) order by C.CODE)
loop loop
/* Наименование графы */ /* Наименование графы */
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'SCOL_' || REC.CODE, SNAME => 'SCOL_' || REC.CODE,
SCAPTION => REC.NAME, SCAPTION => REC.NAME,
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
NWIDTH => 200); NWIDTH => 200);
/* Рег. номер графы */ /* Рег. номер графы */
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'NCOL_RN_' || REC.CODE, SNAME => 'NCOL_RN_' || REC.CODE,
SCAPTION => REC.NAME || ' рег. номер', SCAPTION => REC.NAME || ' рег. номер',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
BVISIBLE => false); BVISIBLE => false);
/* Рег. номер показателя */ /* Рег. номер показателя */
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'NMARK_RN_' || REC.CODE, SNAME => 'NMARK_RN_' || REC.CODE,
SCAPTION => REC.NAME || ' рег. номер показателя', SCAPTION => REC.NAME || ' рег. номер показателя',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
BVISIBLE => false); BVISIBLE => false);
/* Мнемокод показателя */ /* Мнемокод показателя */
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'SMARK_CODE_' || REC.CODE, SNAME => 'SMARK_CODE_' || REC.CODE,
SCAPTION => REC.NAME || ' мнемокод показателя', SCAPTION => REC.NAME || ' мнемокод показателя',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
BVISIBLE => false); BVISIBLE => false);
/* Для составов показтелей */ /* Для составов показтелей */
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'MARK_CNS_' || REC.CODE, SNAME => 'MARK_CNS_' || REC.CODE,
SCAPTION => REC.NAME || ' состав показателя', SCAPTION => REC.NAME || ' состав показателя',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
BVISIBLE => false); BVISIBLE => false);
end loop; end loop;
end MARKS_COLUMNS_INIT; end MARKS_COLUMNS_INIT;
@ -897,25 +897,25 @@ create or replace package body PKG_P8PANELS_RRPCONFED as
order by T.CODE) order by T.CODE)
loop loop
/* Инициализируем таблицу данных */ /* Инициализируем таблицу данных */
RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(BFIXED_HEADER => true, NFIXED_COLUMNS => 1); RDG := PKG_P8PANELS_VISUAL.TDG_MAKE(BFIXED_HEADER => true, NFIXED_COLUMNS => 1);
/* Формируем структуру заголовка */ /* Формируем структуру заголовка */
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'SROW_NAME', SNAME => 'SROW_NAME',
SCAPTION => '', SCAPTION => '',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
NWIDTH => 150); NWIDTH => 150);
/* Формируем структуру заголовка */ /* Формируем структуру заголовка */
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'SROW_CODE', SNAME => 'SROW_CODE',
SCAPTION => 'Мнемокод строки', SCAPTION => 'Мнемокод строки',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
BVISIBLE => false); BVISIBLE => false);
/* Формируем структуру заголовка */ /* Формируем структуру заголовка */
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'NROW_RN', SNAME => 'NROW_RN',
SCAPTION => 'Рег. номер строки', SCAPTION => 'Рег. номер строки',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
BVISIBLE => false); BVISIBLE => false);
/* Если раздел содержит показатели */ /* Если раздел содержит показатели */
if (S.NMARKS_EXISTS = 1) then if (S.NMARKS_EXISTS = 1) then
/* Инициализируем колонки граф */ /* Инициализируем колонки граф */
@ -938,11 +938,11 @@ create or replace package body PKG_P8PANELS_RRPCONFED as
LPAD(R.CODE, 20, '0')) LPAD(R.CODE, 20, '0'))
loop loop
/* Заполняем наименование строки */ /* Заполняем наименование строки */
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SROW_NAME', SVALUE => R.NAME, BCLEAR => true); PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SROW_NAME', SVALUE => R.NAME, BCLEAR => true);
/* Заполняем мнемокод строки */ /* Заполняем мнемокод строки */
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SROW_CODE', SVALUE => R.CODE); PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SROW_CODE', SVALUE => R.CODE);
/* Заполняем рег. номер строки */ /* Заполняем рег. номер строки */
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NROW_RN', NVALUE => R.RN); PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NROW_RN', NVALUE => R.RN);
/* Обходим графы раздела */ /* Обходим графы раздела */
for C in (select C.RN, for C in (select C.RN,
C.CODE, C.CODE,
@ -963,29 +963,29 @@ create or replace package body PKG_P8PANELS_RRPCONFED as
/* Считываем показатель по строке/графе */ /* Считываем показатель по строке/графе */
RRRPCONFSCTNMRK := RRPCONFSCTNMRK_GET_ROWCOL(NRRPCONFSCTN => S.NRN, NRRPROW => R.RN, NRRPCOLUMN => C.RN); RRRPCONFSCTNMRK := RRPCONFSCTNMRK_GET_ROWCOL(NRRPCONFSCTN => S.NRN, NRRPROW => R.RN, NRRPCOLUMN => C.RN);
/* Заполняем рег. номер графы */ /* Заполняем рег. номер графы */
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SCOL_' || C.CODE, SVALUE => C.NAME); PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SCOL_' || C.CODE, SVALUE => C.NAME);
/* Заполняем рег. номер графы */ /* Заполняем рег. номер графы */
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NCOL_RN_' || C.CODE, NVALUE => C.RN); PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NCOL_RN_' || C.CODE, NVALUE => C.RN);
/* Заполняем рег. номер показателя */ /* Заполняем рег. номер показателя */
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW,
SNAME => 'NMARK_RN_' || C.CODE, SNAME => 'NMARK_RN_' || C.CODE,
NVALUE => RRRPCONFSCTNMRK.RN); NVALUE => RRRPCONFSCTNMRK.RN);
/* Если ошибка считывания показателя */ /* Если ошибка считывания показателя */
if (RRRPCONFSCTNMRK.RN is not null) then if (RRRPCONFSCTNMRK.RN is not null) then
/* Заполняем мнемокод показателя */ /* Заполняем мнемокод показателя */
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW,
SNAME => 'SMARK_CODE_' || C.CODE, SNAME => 'SMARK_CODE_' || C.CODE,
SVALUE => RRRPCONFSCTNMRK.CODE); SVALUE => RRRPCONFSCTNMRK.CODE);
/* Добавляем атрибут состава показателей */ /* Добавляем атрибут состава показателей */
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'MARK_CNS_' || C.CODE, SVALUE => null); PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW, SNAME => 'MARK_CNS_' || C.CODE, SVALUE => null);
end if; end if;
end loop; end loop;
/* Добавим строку для раздела */ /* Добавим строку для раздела */
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); PKG_P8PANELS_VISUAL.TDG_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW);
end loop; end loop;
end if; end if;
/* Сериализуем описание */ /* Сериализуем описание */
CDG := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => 1); CDG := PKG_P8PANELS_VISUAL.TDG_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => 1);
/* Заполняем контейнер данными о разделе */ /* Заполняем контейнер данными о разделе */
PKG_CONTVALLOC2NS.PUTN(RCONTAINER => CXML, NTABID => S.RNUM, SROWID => 'RN', NVALUE => S.NRN); PKG_CONTVALLOC2NS.PUTN(RCONTAINER => CXML, NTABID => S.RNUM, SROWID => 'RN', NVALUE => S.NRN);
PKG_CONTVALLOC2NS.PUTS(RCONTAINER => CXML, NTABID => S.RNUM, SROWID => 'CODE', SVALUE => S.SCODE); PKG_CONTVALLOC2NS.PUTS(RCONTAINER => CXML, NTABID => S.RNUM, SROWID => 'CODE', SVALUE => S.SCODE);

View File

@ -257,11 +257,11 @@ create or replace package body PKG_P8PANELS_SAMPLES as
is is
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса
NIDENT PKG_STD.TREF := GEN_IDENT(); -- Идентификатор отбора NIDENT PKG_STD.TREF := GEN_IDENT(); -- Идентификатор отбора
RF PKG_P8PANELS_VISUAL.TFILTERS; -- Фильтры RF PKG_P8PANELS_VISUAL.TDG_FILTERS; -- Фильтры
RO PKG_P8PANELS_VISUAL.TORDERS; -- Сортировки RO PKG_P8PANELS_VISUAL.TDG_ORDERS; -- Сортировки
RDG PKG_P8PANELS_VISUAL.TDATA_GRID; -- Описание таблицы RDG PKG_P8PANELS_VISUAL.TDG; -- Описание таблицы
RAGN_TYPES PKG_P8PANELS_VISUAL.TCOL_VALS; -- Предопределенные значения "Типа контрагентов" RAGN_TYPES PKG_P8PANELS_VISUAL.TDG_COL_VALS; -- Предопределенные значения "Типа контрагентов"
RDG_ROW PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы RDG_ROW PKG_P8PANELS_VISUAL.TDG_ROW; -- Строка таблицы
NROW_FROM PKG_STD.TREF; -- Номер строки с NROW_FROM PKG_STD.TREF; -- Номер строки с
NROW_TO PKG_STD.TREF; -- Номер строки по NROW_TO PKG_STD.TREF; -- Номер строки по
CSQL clob; -- Буфер для запроса CSQL clob; -- Буфер для запроса
@ -272,71 +272,71 @@ create or replace package body PKG_P8PANELS_SAMPLES as
NAGNTYPE PKG_STD.TREF; -- Буфер для "Типа" NAGNTYPE PKG_STD.TREF; -- Буфер для "Типа"
begin begin
/* Читаем фильтры */ /* Читаем фильтры */
RF := PKG_P8PANELS_VISUAL.TFILTERS_FROM_XML(CFILTERS => CFILTERS); RF := PKG_P8PANELS_VISUAL.TDG_FILTERS_FROM_XML(CFILTERS => CFILTERS);
/* Читем сортировки */ /* Читем сортировки */
RO := PKG_P8PANELS_VISUAL.TORDERS_FROM_XML(CORDERS => CORDERS); RO := PKG_P8PANELS_VISUAL.TDG_ORDERS_FROM_XML(CORDERS => CORDERS);
/* Преобразуем номер и размер страницы в номер строк с и по */ /* Преобразуем номер и размер страницы в номер строк с и по */
PKG_P8PANELS_VISUAL.UTL_ROWS_LIMITS_CALC(NPAGE_NUMBER => NPAGE_NUMBER, PKG_P8PANELS_VISUAL.UTL_ROWS_LIMITS_CALC(NPAGE_NUMBER => NPAGE_NUMBER,
NPAGE_SIZE => NPAGE_SIZE, NPAGE_SIZE => NPAGE_SIZE,
NROW_FROM => NROW_FROM, NROW_FROM => NROW_FROM,
NROW_TO => NROW_TO); NROW_TO => NROW_TO);
/* Инициализируем таблицу данных */ /* Инициализируем таблицу данных */
RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(BFIXED_HEADER => true, NFIXED_COLUMNS => 2); RDG := PKG_P8PANELS_VISUAL.TDG_MAKE(BFIXED_HEADER => true, NFIXED_COLUMNS => 2);
/* Описываем колонки таблицы данных */ /* Описываем колонки таблицы данных */
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'SAGNABBR', SNAME => 'SAGNABBR',
SCAPTION => 'Мнемокод', SCAPTION => 'Мнемокод',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
SCOND_FROM => 'AgentAbbr', SCOND_FROM => 'AgentAbbr',
BVISIBLE => true, BVISIBLE => true,
BORDER => true, BORDER => true,
BFILTER => true, BFILTER => true,
NWIDTH => 150); NWIDTH => 150);
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'SAGNINFO', SNAME => 'SAGNINFO',
SCAPTION => 'Сведения', SCAPTION => 'Сведения',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
BVISIBLE => true, BVISIBLE => true,
BORDER => false, BORDER => false,
BFILTER => false, BFILTER => false,
BEXPANDABLE => true, BEXPANDABLE => true,
NWIDTH => 300); NWIDTH => 300);
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'SAGNNAME', SNAME => 'SAGNNAME',
SCAPTION => 'Наименование', SCAPTION => 'Наименование',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
SCOND_FROM => 'AgentName', SCOND_FROM => 'AgentName',
BVISIBLE => true, BVISIBLE => true,
BORDER => true, BORDER => true,
BFILTER => true, BFILTER => true,
SPARENT => 'SAGNINFO', SPARENT => 'SAGNINFO',
NWIDTH => 200); NWIDTH => 200);
PKG_P8PANELS_VISUAL.TCOL_VALS_ADD(RCOL_VALS => RAGN_TYPES, NVALUE => 0); PKG_P8PANELS_VISUAL.TDG_COL_VALS_ADD(RCOL_VALS => RAGN_TYPES, NVALUE => 0);
PKG_P8PANELS_VISUAL.TCOL_VALS_ADD(RCOL_VALS => RAGN_TYPES, NVALUE => 1); PKG_P8PANELS_VISUAL.TDG_COL_VALS_ADD(RCOL_VALS => RAGN_TYPES, NVALUE => 1);
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'NAGNTYPE', SNAME => 'NAGNTYPE',
SCAPTION => 'Тип', SCAPTION => 'Тип',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
SCOND_FROM => 'AgentType', SCOND_FROM => 'AgentType',
BVISIBLE => true, BVISIBLE => true,
BORDER => true, BORDER => true,
BFILTER => true, BFILTER => true,
SPARENT => 'SAGNINFO', SPARENT => 'SAGNINFO',
NWIDTH => 100, NWIDTH => 100,
RCOL_VALS => RAGN_TYPES, RCOL_VALS => RAGN_TYPES,
SHINT => 'В Системе бывают контрагенты двух типов:<br>' || SHINT => 'В Системе бывают контрагенты двух типов:<br>' ||
'<b style="color:blue">Юридическое лицо</b> - организация, которая имеет в собственности, хозяйственном ведении ' || '<b style="color:blue">Юридическое лицо</b> - организация, которая имеет в собственности, хозяйственном ведении ' ||
'или оперативном управлении обособленное имущество, отвечает по своим обязательствам этим имуществом, может от своего ' || 'или оперативном управлении обособленное имущество, отвечает по своим обязательствам этим имуществом, может от своего ' ||
'имени приобретать и осуществлять имущественные и личные неимущественные права, отвечать по своим обязанностям.<br>' || 'имени приобретать и осуществлять имущественные и личные неимущественные права, отвечать по своим обязанностям.<br>' ||
'<b style="color:green">Физическое лицо</b> - субъект правовых отношений, представляющий собой одного человека.'); '<b style="color:green">Физическое лицо</b> - субъект правовых отношений, представляющий собой одного человека.');
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'SFULLNAME', SNAME => 'SFULLNAME',
SCAPTION => 'Полное наименование', SCAPTION => 'Полное наименование',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR); SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR);
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'SAGNIDNUMB', SNAME => 'SAGNIDNUMB',
SCAPTION => 'ИНН', SCAPTION => 'ИНН',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR); SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR);
/* Обходим данные */ /* Обходим данные */
begin begin
/* Добавляем подсказку совместимости */ /* Добавляем подсказку совместимости */
@ -362,14 +362,17 @@ create or replace package body PKG_P8PANELS_SAMPLES as
PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and AG.RN in (select ID from COND_BROKER_IDSMART where IDENT = :NIDENT) %ORDER_BY%) D) F'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and AG.RN in (select ID from COND_BROKER_IDSMART where IDENT = :NIDENT) %ORDER_BY%) 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');
/* Учтём сортировки */ /* Учтём сортировки */
PKG_P8PANELS_VISUAL.TORDERS_SET_QUERY(RDATA_GRID => RDG, RORDERS => RO, SPATTERN => '%ORDER_BY%', CSQL => CSQL); PKG_P8PANELS_VISUAL.TDG_ORDERS_SET_QUERY(RDATA_GRID => RDG,
RORDERS => RO,
SPATTERN => '%ORDER_BY%',
CSQL => CSQL);
/* Учтём фильтры */ /* Учтём фильтры */
PKG_P8PANELS_VISUAL.TFILTERS_SET_QUERY(NIDENT => NIDENT, PKG_P8PANELS_VISUAL.TDG_FILTERS_SET_QUERY(NIDENT => NIDENT,
NCOMPANY => NCOMPANY, NCOMPANY => NCOMPANY,
SUNIT => 'AGNLIST', SUNIT => 'AGNLIST',
SPROCEDURE => 'P_AGNLIST_BASE_COND', SPROCEDURE => 'P_AGNLIST_BASE_COND',
RDATA_GRID => RDG, RDATA_GRID => RDG,
RFILTERS => RF); RFILTERS => RF);
/* Разбираем его */ /* Разбираем его */
ICURSOR := PKG_SQL_DML.OPEN_CURSOR(SWHAT => 'SELECT'); ICURSOR := PKG_SQL_DML.OPEN_CURSOR(SWHAT => 'SELECT');
PKG_SQL_DML.PARSE(ICURSOR => ICURSOR, SQUERY => CSQL); PKG_SQL_DML.PARSE(ICURSOR => ICURSOR, SQUERY => CSQL);
@ -382,7 +385,7 @@ create or replace package body PKG_P8PANELS_SAMPLES as
PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 2); 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 => 3);
PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 4); 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_STR(ICURSOR => ICURSOR, IPOSITION => 5);
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 6); PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 6);
/* Делаем выборку */ /* Делаем выборку */
if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then
@ -397,29 +400,38 @@ create or replace package body PKG_P8PANELS_SAMPLES as
if (NAGNTYPE = 0) then if (NAGNTYPE = 0) then
SGROUP := 'JUR'; SGROUP := 'JUR';
SAGNINFO := SAGNNAME || ', ЮЛ'; SAGNINFO := SAGNNAME || ', ЮЛ';
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_GROUP(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_GROUP(RDATA_GRID => RDG,
SNAME => SGROUP, SNAME => SGROUP,
SCAPTION => 'Юридические лица', SCAPTION => 'Юридические лица',
BEXPANDABLE => true, BEXPANDABLE => true,
BEXPANDED => false); BEXPANDED => false);
else else
SGROUP := 'PERS'; SGROUP := 'PERS';
SAGNINFO := SAGNNAME || ', ФЛ'; SAGNINFO := SAGNNAME || ', ФЛ';
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_GROUP(RDATA_GRID => RDG, PKG_P8PANELS_VISUAL.TDG_ADD_GROUP(RDATA_GRID => RDG,
SNAME => SGROUP, SNAME => SGROUP,
SCAPTION => 'Физические лица', SCAPTION => 'Физические лица',
BEXPANDABLE => true, BEXPANDABLE => true,
BEXPANDED => false); BEXPANDED => false);
end if; end if;
RDG_ROW := PKG_P8PANELS_VISUAL.TROW_MAKE(SGROUP => SGROUP); RDG_ROW := PKG_P8PANELS_VISUAL.TDG_ROW_MAKE(SGROUP => SGROUP);
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SAGNABBR', ICURSOR => ICURSOR, NPOSITION => 1); PKG_P8PANELS_VISUAL.TDG_ROW_ADD_CUR_COLS(RROW => RDG_ROW,
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SAGNINFO', SVALUE => SAGNINFO); SNAME => 'SAGNABBR',
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SAGNNAME', SVALUE => SAGNNAME); ICURSOR => ICURSOR,
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NAGNTYPE', NVALUE => NAGNTYPE); NPOSITION => 1);
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SFULLNAME', ICURSOR => ICURSOR, NPOSITION => 4); PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SAGNINFO', SVALUE => SAGNINFO);
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SAGNIDNUMB', ICURSOR => ICURSOR, NPOSITION => 5); PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SAGNNAME', SVALUE => SAGNNAME);
PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NAGNTYPE', NVALUE => NAGNTYPE);
PKG_P8PANELS_VISUAL.TDG_ROW_ADD_CUR_COLS(RROW => RDG_ROW,
SNAME => 'SFULLNAME',
ICURSOR => ICURSOR,
NPOSITION => 4);
PKG_P8PANELS_VISUAL.TDG_ROW_ADD_CUR_COLS(RROW => RDG_ROW,
SNAME => 'SAGNIDNUMB',
ICURSOR => ICURSOR,
NPOSITION => 5);
/* Добавляем строку в таблицу */ /* Добавляем строку в таблицу */
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); PKG_P8PANELS_VISUAL.TDG_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW);
end loop; end loop;
/* Освобождаем курсор */ /* Освобождаем курсор */
PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR); PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR);
@ -429,7 +441,7 @@ create or replace package body PKG_P8PANELS_SAMPLES as
raise; raise;
end; end;
/* Сериализуем описание */ /* Сериализуем описание */
COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF); COUT := PKG_P8PANELS_VISUAL.TDG_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF);
end DATA_GRID; end DATA_GRID;
/* График */ /* График */

File diff suppressed because it is too large Load Diff