forked from CITKParus/P8-Panels
ЦИТК-800 - Изменение программного интерфейса P8PDataGrid. P8PDataGrid и P8PGantt приведены к единому формату данных с сервера
This commit is contained in:
parent
686d8ee5aa
commit
b617a27c48
308
README.md
308
README.md
@ -1341,18 +1341,18 @@ const MyPanel = () => {
|
||||
Такие свойства как `columnsDef`, `groups`, `rows` компонента `P8PDataGrid` требуют от разработчика передачи данных в определённом формате. Это не обязательно должна быть информация из БД Системы, можно, например, просто объявить переменные в коде панели, задать им соответствующие значения и передать в компонент. Но изначально, таблица данных задумывалась для отображения сведений, полученных их учётных регистров Системы. Такие сведения, как правило, собираются хранимым объектом БД, исполняемым из панели посредством вызова `executeStored`. С целью снижения трудозатрат на приведение собранных хранимым объектом данных к форматам, потребляемым `P8PDataGrid`, реализован специальный API на стороне сервера БД.
|
||||
|
||||
Для таблицы данных это (см. детальные описания программных интерфейсов в пакете `PKG_P8PANELS_VISUAL`):
|
||||
`PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE` - функция, инициализация таблицы данных, возвращает объект для хранения описания таблицы\
|
||||
`PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF` - процедура, добавление описания колонки в таблицу, принимает на вход объект с описанием таблицы и параметры, описывающие добавляемую колонку (её имя, заголовок, тип данных, видимость, доступность отбора и сортировки, набор предопределённых значений и т.д.)\
|
||||
`PKG_P8PANELS_VISUAL.TCOL_VALS_ADD` - процедура, служит для формирования коллекции предопределённых значений колонки таблицы (подготовленная коллекция передаётся в `RCOL_VALS` вызова `TDATA_GRID_ADD_COL_DEF`, если необходимо)\
|
||||
`PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_GROUP` - процедура, служит для добавления описания группы в таблицу данных, на вход принимает объект для хранения описания таблицы и параметры добавляемой группы\
|
||||
`PKG_P8PANELS_VISUAL.TROW_ADD_COL` - процедура, добавляет значение колонки к строке таблицы (значение указывается явно в `[S|N|D]VALUE`)\
|
||||
`PKG_P8PANELS_VISUAL.TROW_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.TDATA_GRID_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.TORDERS_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.TFILTERS_SET_QUERY` - процедура, вспомогательная утилита, производит вызов указанной серверной процедуры отбора с учётом переданных переменных окружения и значений в `RFILTERS`\
|
||||
`PKG_P8PANELS_VISUAL.TDG_MAKE` - функция, инициализация таблицы данных, возвращает объект для хранения описания таблицы\
|
||||
`PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF` - процедура, добавление описания колонки в таблицу, принимает на вход объект с описанием таблицы и параметры, описывающие добавляемую колонку (её имя, заголовок, тип данных, видимость, доступность отбора и сортировки, набор предопределённых значений и т.д.)\
|
||||
`PKG_P8PANELS_VISUAL.TDG_COL_VALS_ADD` - процедура, служит для формирования коллекции предопределённых значений колонки таблицы (подготовленная коллекция передаётся в `RCOL_VALS` вызова `TDG_ADD_COL_DEF`, если необходимо)\
|
||||
`PKG_P8PANELS_VISUAL.TDG_ADD_GROUP` - процедура, служит для добавления описания группы в таблицу данных, на вход принимает объект для хранения описания таблицы и параметры добавляемой группы\
|
||||
`PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL` - процедура, добавляет значение колонки к строке таблицы (значение указывается явно в `[S|N|D]VALUE`)\
|
||||
`PKG_P8PANELS_VISUAL.TDG_ROW_ADD_CUR_COL[S|N|D]` - процедура, добавляет значение колонки к строке таблицы (значение указывается через ссылку на номер колонки `NPOSITION` в курсоре `ICURSOR` динамического SQL)\
|
||||
`PKG_P8PANELS_VISUAL.TDG_ADD_ROW` - процедура, добавляет сформированную строку со значениями колонок в таблицу данных, на вход принимает объект для хранения описания таблицы и описание строки, сформированное вызовами `TDG_ROW_ADD_COL` и `TDG_ROW_ADD_CUR_COL[S|N|D]`, а так же год группы, в которую должна быть включена строка\
|
||||
`PKG_P8PANELS_VISUAL.TDG_TO_XML` - функция, производит сериализацию объекта, описывающего таблицу данных, в специальный XML-формат, корректно интерпретируемый клиентским компонентом `P8PDataGrid` при передаче в WEB-приложение\
|
||||
`PKG_P8PANELS_VISUAL.TDG_ORDERS_FROM_XML` - функция, служит для десериализации (как правило, полученного от клиентского приложения) состояния сортировок в коллекцию формата `TORDERS`, на вход принимает `CLOB` с сериализованным состоянием сортировок таблицы в виде `BASE64(<orders><name>ИМЯ</name><direction>ASC|DESC</direction></orders>...)` (клиентское приложение должно обеспечить передачу состояния сортировок в этом формате, см. пример ниже)\
|
||||
`PKG_P8PANELS_VISUAL.TDG_ORDERS_SET_QUERY` - процедура, вспомогательная утилита, производит в тексте SQL-запроса, поданного на вход, замену указанного шаблона на конструкцию `order by`, сформированную с учётом переданной коллекции `RORDERS`\
|
||||
`PKG_P8PANELS_VISUAL.TDG_FILTERS_FROM_XML` - функция, служит для десериализации (как правило, полученного от клиентского приложения) состояния фильтров в коллекцию формата `TFILTERS`, на вход принимает `CLOB` с сериализованным состоянием фильтров таблицы в виде `BASE64(<filters><name>ИМЯ</name><from>ЗНАЧЕНИЕ</from><to>ЗНАЧЕНИЕ</to></filters>...)` (клиентское приложение должно обеспечить передачу состояния фильтров в этом формате, см. пример ниже)\
|
||||
`PKG_P8PANELS_VISUAL.TDG_FILTERS_SET_QUERY` - процедура, вспомогательная утилита, производит вызов указанной серверной процедуры отбора с учётом переданных переменных окружения и значений в `RFILTERS`\
|
||||
`PKG_P8PANELS_VISUAL.UTL_ROWS_LIMITS_CALC` - процедура, вспомогательная утилита, служит для конвертации номера страницы данных и размера страницы данных в границы диапазона строк выборки (как правило, клиентскому приложению удобнее прислать на сервер текущий номер страницы и её размер, в то время к в запросах, для выборки, удобнее применять границы диапазонов строк)
|
||||
|
||||
**Пример**
|
||||
@ -1372,11 +1372,11 @@ const MyPanel = () => {
|
||||
is
|
||||
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса
|
||||
NIDENT PKG_STD.TREF := GEN_IDENT(); -- Идентификатор отбора
|
||||
RF PKG_P8PANELS_VISUAL.TFILTERS; -- Фильтры
|
||||
RO PKG_P8PANELS_VISUAL.TORDERS; -- Сортировки
|
||||
RDG PKG_P8PANELS_VISUAL.TDATA_GRID; -- Описание таблицы
|
||||
RAGN_TYPES PKG_P8PANELS_VISUAL.TCOL_VALS; -- Предопределенные значения "Типа контрагентов"
|
||||
RDG_ROW PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы
|
||||
RF PKG_P8PANELS_VISUAL.TDG_FILTERS; -- Фильтры
|
||||
RO PKG_P8PANELS_VISUAL.TDG_ORDERS; -- Сортировки
|
||||
RDG PKG_P8PANELS_VISUAL.TDG; -- Описание таблицы
|
||||
RAGN_TYPES PKG_P8PANELS_VISUAL.TDG_COL_VALS; -- Предопределенные значения "Типа контрагентов"
|
||||
RDG_ROW PKG_P8PANELS_VISUAL.TDG_ROW; -- Строка таблицы
|
||||
NROW_FROM PKG_STD.TREF; -- Номер строки с
|
||||
NROW_TO PKG_STD.TREF; -- Номер строки по
|
||||
CSQL clob; -- Буфер для запроса
|
||||
@ -1387,71 +1387,71 @@ const MyPanel = () => {
|
||||
NAGNTYPE PKG_STD.TREF; -- Буфер для "Типа"
|
||||
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,
|
||||
NPAGE_SIZE => NPAGE_SIZE,
|
||||
NROW_FROM => NROW_FROM,
|
||||
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,
|
||||
SNAME => 'SAGNABBR',
|
||||
SCAPTION => 'Мнемокод',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
SCOND_FROM => 'AgentAbbr',
|
||||
BVISIBLE => true,
|
||||
BORDER => true,
|
||||
BFILTER => true,
|
||||
NWIDTH => 150);
|
||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'SAGNINFO',
|
||||
SCAPTION => 'Сведения',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
BVISIBLE => true,
|
||||
BORDER => false,
|
||||
BFILTER => false,
|
||||
BEXPANDABLE => true,
|
||||
NWIDTH => 300);
|
||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'SAGNNAME',
|
||||
SCAPTION => 'Наименование',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
SCOND_FROM => 'AgentName',
|
||||
BVISIBLE => true,
|
||||
BORDER => true,
|
||||
BFILTER => true,
|
||||
SPARENT => 'SAGNINFO',
|
||||
NWIDTH => 200);
|
||||
PKG_P8PANELS_VISUAL.TCOL_VALS_ADD(RCOL_VALS => RAGN_TYPES, NVALUE => 0);
|
||||
PKG_P8PANELS_VISUAL.TCOL_VALS_ADD(RCOL_VALS => RAGN_TYPES, NVALUE => 1);
|
||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'NAGNTYPE',
|
||||
SCAPTION => 'Тип',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
|
||||
SCOND_FROM => 'AgentType',
|
||||
BVISIBLE => true,
|
||||
BORDER => true,
|
||||
BFILTER => true,
|
||||
SPARENT => 'SAGNINFO',
|
||||
NWIDTH => 100,
|
||||
RCOL_VALS => RAGN_TYPES,
|
||||
SHINT => 'В Системе бывают контрагенты двух типов:<br>' ||
|
||||
'<b style="color:blue">Юридическое лицо</b> - организация, которая имеет в собственности, хозяйственном ведении ' ||
|
||||
'или оперативном управлении обособленное имущество, отвечает по своим обязательствам этим имуществом, может от своего ' ||
|
||||
'имени приобретать и осуществлять имущественные и личные неимущественные права, отвечать по своим обязанностям.<br>' ||
|
||||
'<b style="color:green">Физическое лицо</b> - субъект правовых отношений, представляющий собой одного человека.');
|
||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'SFULLNAME',
|
||||
SCAPTION => 'Полное наименование',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR);
|
||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'SAGNIDNUMB',
|
||||
SCAPTION => 'ИНН',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'SAGNABBR',
|
||||
SCAPTION => 'Мнемокод',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
SCOND_FROM => 'AgentAbbr',
|
||||
BVISIBLE => true,
|
||||
BORDER => true,
|
||||
BFILTER => true,
|
||||
NWIDTH => 150);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'SAGNINFO',
|
||||
SCAPTION => 'Сведения',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
BVISIBLE => true,
|
||||
BORDER => false,
|
||||
BFILTER => false,
|
||||
BEXPANDABLE => true,
|
||||
NWIDTH => 300);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'SAGNNAME',
|
||||
SCAPTION => 'Наименование',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
SCOND_FROM => 'AgentName',
|
||||
BVISIBLE => true,
|
||||
BORDER => true,
|
||||
BFILTER => true,
|
||||
SPARENT => 'SAGNINFO',
|
||||
NWIDTH => 200);
|
||||
PKG_P8PANELS_VISUAL.TDG_COL_VALS_ADD(RCOL_VALS => RAGN_TYPES, NVALUE => 0);
|
||||
PKG_P8PANELS_VISUAL.TDG_COL_VALS_ADD(RCOL_VALS => RAGN_TYPES, NVALUE => 1);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'NAGNTYPE',
|
||||
SCAPTION => 'Тип',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
|
||||
SCOND_FROM => 'AgentType',
|
||||
BVISIBLE => true,
|
||||
BORDER => true,
|
||||
BFILTER => true,
|
||||
SPARENT => 'SAGNINFO',
|
||||
NWIDTH => 100,
|
||||
RCOL_VALS => RAGN_TYPES,
|
||||
SHINT => 'В Системе бывают контрагенты двух типов:<br>' ||
|
||||
'<b style="color:blue">Юридическое лицо</b> - организация, которая имеет в собственности, хозяйственном ведении ' ||
|
||||
'или оперативном управлении обособленное имущество, отвечает по своим обязательствам этим имуществом, может от своего ' ||
|
||||
'имени приобретать и осуществлять имущественные и личные неимущественные права, отвечать по своим обязанностям.<br>' ||
|
||||
'<b style="color:green">Физическое лицо</b> - субъект правовых отношений, представляющий собой одного человека.');
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'SFULLNAME',
|
||||
SCAPTION => 'Полное наименование',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'SAGNIDNUMB',
|
||||
SCAPTION => 'ИНН',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR);
|
||||
/* Обходим данные */
|
||||
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 => ' 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,
|
||||
NCOMPANY => NCOMPANY,
|
||||
SUNIT => 'AGNLIST',
|
||||
SPROCEDURE => 'P_AGNLIST_BASE_COND',
|
||||
RDATA_GRID => RDG,
|
||||
RFILTERS => RF);
|
||||
PKG_P8PANELS_VISUAL.TDG_FILTERS_SET_QUERY(NIDENT => NIDENT,
|
||||
NCOMPANY => NCOMPANY,
|
||||
SUNIT => 'AGNLIST',
|
||||
SPROCEDURE => 'P_AGNLIST_BASE_COND',
|
||||
RDATA_GRID => RDG,
|
||||
RFILTERS => RF);
|
||||
/* Разбираем его */
|
||||
ICURSOR := PKG_SQL_DML.OPEN_CURSOR(SWHAT => 'SELECT');
|
||||
PKG_SQL_DML.PARSE(ICURSOR => ICURSOR, SQUERY => CSQL);
|
||||
@ -1512,29 +1515,38 @@ const MyPanel = () => {
|
||||
if (NAGNTYPE = 0) then
|
||||
SGROUP := 'JUR';
|
||||
SAGNINFO := SAGNNAME || ', ЮЛ';
|
||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_GROUP(RDATA_GRID => RDG,
|
||||
SNAME => SGROUP,
|
||||
SCAPTION => 'Юридические лица',
|
||||
BEXPANDABLE => true,
|
||||
BEXPANDED => false);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_GROUP(RDATA_GRID => RDG,
|
||||
SNAME => SGROUP,
|
||||
SCAPTION => 'Юридические лица',
|
||||
BEXPANDABLE => true,
|
||||
BEXPANDED => false);
|
||||
else
|
||||
SGROUP := 'PERS';
|
||||
SAGNINFO := SAGNNAME || ', ФЛ';
|
||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_GROUP(RDATA_GRID => RDG,
|
||||
SNAME => SGROUP,
|
||||
SCAPTION => 'Физические лица',
|
||||
BEXPANDABLE => true,
|
||||
BEXPANDED => false);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_GROUP(RDATA_GRID => RDG,
|
||||
SNAME => SGROUP,
|
||||
SCAPTION => 'Физические лица',
|
||||
BEXPANDABLE => true,
|
||||
BEXPANDED => false);
|
||||
end if;
|
||||
RDG_ROW := PKG_P8PANELS_VISUAL.TROW_MAKE(SGROUP => SGROUP);
|
||||
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SAGNABBR', ICURSOR => ICURSOR, NPOSITION => 1);
|
||||
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SAGNINFO', SVALUE => SAGNINFO);
|
||||
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SAGNNAME', SVALUE => SAGNNAME);
|
||||
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NAGNTYPE', NVALUE => NAGNTYPE);
|
||||
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SFULLNAME', ICURSOR => ICURSOR, NPOSITION => 4);
|
||||
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SAGNIDNUMB', ICURSOR => ICURSOR, NPOSITION => 5);
|
||||
RDG_ROW := PKG_P8PANELS_VISUAL.TDG_ROW_MAKE(SGROUP => SGROUP);
|
||||
PKG_P8PANELS_VISUAL.TDG_ROW_ADD_CUR_COLS(RROW => RDG_ROW,
|
||||
SNAME => 'SAGNABBR',
|
||||
ICURSOR => ICURSOR,
|
||||
NPOSITION => 1);
|
||||
PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SAGNINFO', SVALUE => SAGNINFO);
|
||||
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;
|
||||
/* Освобождаем курсор */
|
||||
PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR);
|
||||
@ -1544,7 +1556,7 @@ const MyPanel = () => {
|
||||
raise;
|
||||
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;
|
||||
```
|
||||
|
||||
@ -1617,14 +1629,14 @@ export const groupCellRender = () => ({ cellStyle: { padding: "2px" } });
|
||||
//Пример: Таблица данных "P8PDataGrid"
|
||||
const DataGrid = ({ title }) => {
|
||||
//Собственное состояние - таблица данных
|
||||
const [dataGrid, setdataGrid] = useState({
|
||||
const [dataGrid, setDataGrid] = useState({
|
||||
dataLoaded: false,
|
||||
columnsDef: [],
|
||||
filters: null,
|
||||
orders: null,
|
||||
groups: [],
|
||||
rows: [],
|
||||
reload: true,
|
||||
reloading: true,
|
||||
pageNumber: 1,
|
||||
morePages: true,
|
||||
fixedHeader: false,
|
||||
@ -1639,7 +1651,7 @@ const DataGrid = ({ title }) => {
|
||||
|
||||
//Загрузка данных таблицы с сервера
|
||||
const loadData = useCallback(async () => {
|
||||
if (dataGrid.reload) {
|
||||
if (dataGrid.reloading) {
|
||||
const data = await executeStored({
|
||||
stored: "PKG_P8PANELS_SAMPLES.DATA_GRID",
|
||||
args: {
|
||||
@ -1651,32 +1663,31 @@ const DataGrid = ({ title }) => {
|
||||
},
|
||||
respArg: "COUT"
|
||||
});
|
||||
setdataGrid(pv => ({
|
||||
setDataGrid(pv => ({
|
||||
...pv,
|
||||
fixedHeader: data.XDATA_GRID.fixedHeader,
|
||||
fixedColumns: data.XDATA_GRID.fixedColumns,
|
||||
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,
|
||||
rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],
|
||||
groups: data.XGROUPS
|
||||
...data.XDATA_GRID,
|
||||
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 || [])],
|
||||
groups: data.XDATA_GRID.groups
|
||||
? pv.pageNumber == 1
|
||||
? [...data.XGROUPS]
|
||||
: [...pv.groups, ...data.XGROUPS.filter(g => !pv.groups.find(pg => pg.name == g.name))]
|
||||
? [...data.XDATA_GRID.groups]
|
||||
: [...pv.groups, ...data.XDATA_GRID.groups.filter(g => !pv.groups.find(pg => pg.name == g.name))]
|
||||
: [...pv.groups],
|
||||
dataLoaded: true,
|
||||
reload: false,
|
||||
morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE
|
||||
reloading: false,
|
||||
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" });
|
||||
@ -1684,7 +1695,7 @@ const DataGrid = ({ title }) => {
|
||||
//При необходимости обновить данные таблицы
|
||||
useEffect(() => {
|
||||
loadData();
|
||||
}, [dataGrid.reload, loadData]);
|
||||
}, [dataGrid.reloading, loadData]);
|
||||
|
||||
//Генерация содержимого
|
||||
return (
|
||||
@ -1699,15 +1710,8 @@ const DataGrid = ({ title }) => {
|
||||
<P8PDataGrid
|
||||
{...P8P_DATA_GRID_CONFIG_PROPS}
|
||||
containerComponentProps={{ elevation: 6, style: STYLES.DATA_GRID_CONTAINER }}
|
||||
columnsDef={dataGrid.columnsDef}
|
||||
groups={dataGrid.groups}
|
||||
rows={dataGrid.rows}
|
||||
{...dataGrid}
|
||||
size={P8P_DATA_GRID_SIZE.LARGE}
|
||||
fixedHeader={dataGrid.fixedHeader}
|
||||
fixedColumns={dataGrid.fixedColumns}
|
||||
filtersInitial={dataGrid.filters}
|
||||
morePages={dataGrid.morePages}
|
||||
reloading={dataGrid.reload}
|
||||
valueFormatter={valueFormatter}
|
||||
headCellRender={headCellRender}
|
||||
dataCellRender={dataCellRender}
|
||||
@ -2126,12 +2130,10 @@ const taskDialogRenderer = ({ task, close }) => {
|
||||
//Пример: Диаграмма Ганта "P8Gantt"
|
||||
const Gantt = ({ title }) => {
|
||||
//Собственное состояние
|
||||
const [state, setState] = useState({
|
||||
const [gantt, setGantt] = useState({
|
||||
init: false,
|
||||
dataLoaded: false,
|
||||
ident: null,
|
||||
ganttDef: {},
|
||||
ganttTasks: [],
|
||||
useCustomTaskDialog: false
|
||||
});
|
||||
|
||||
@ -2142,21 +2144,21 @@ const Gantt = ({ title }) => {
|
||||
const loadData = useCallback(async () => {
|
||||
const data = await executeStored({
|
||||
stored: "PKG_P8PANELS_SAMPLES.GANTT",
|
||||
args: { NIDENT: state.ident },
|
||||
args: { NIDENT: gantt.ident },
|
||||
attributeValueProcessor: (name, val) =>
|
||||
name == "numb" ? undefined : ["start", "end"].includes(name) ? formatDateJSONDateOnly(val) : val,
|
||||
respArg: "COUT"
|
||||
});
|
||||
setState(pv => ({ ...pv, dataLoaded: true, ganttDef: { ...data.XGANTT_DEF }, ganttTasks: [...data.XGANTT_TASKS] }));
|
||||
}, [state.ident, executeStored]);
|
||||
setGantt(pv => ({ ...pv, dataLoaded: true, ...data.XGANTT }));
|
||||
}, [gantt.ident, executeStored]);
|
||||
|
||||
//Инициализация данных диаграммы
|
||||
const initData = useCallback(async () => {
|
||||
if (!state.init) {
|
||||
const data = await executeStored({ stored: "PKG_P8PANELS_SAMPLES.GANTT_INIT", args: { NIDENT: state.ident } });
|
||||
setState(pv => ({ ...pv, init: true, ident: data.NIDENT }));
|
||||
if (!gantt.init) {
|
||||
const data = await executeStored({ stored: "PKG_P8PANELS_SAMPLES.GANTT_INIT", args: { NIDENT: gantt.ident } });
|
||||
setGantt(pv => ({ ...pv, init: true, ident: data.NIDENT }));
|
||||
}
|
||||
}, [state.init, state.ident, executeStored]);
|
||||
}, [gantt.init, gantt.ident, executeStored]);
|
||||
|
||||
//Изменение данных диаграммы
|
||||
const modifyData = useCallback(
|
||||
@ -2164,13 +2166,13 @@ const Gantt = ({ title }) => {
|
||||
try {
|
||||
await executeStored({
|
||||
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 {
|
||||
loadData();
|
||||
}
|
||||
},
|
||||
[state.ident, executeStored, loadData]
|
||||
[gantt.ident, executeStored, loadData]
|
||||
);
|
||||
|
||||
//Обработка измненения сроков задачи в диаграмме Гантта
|
||||
@ -2180,8 +2182,8 @@ const Gantt = ({ title }) => {
|
||||
|
||||
//При необходимости обновить данные таблицы
|
||||
useEffect(() => {
|
||||
if (state.ident) loadData();
|
||||
}, [state.ident, loadData]);
|
||||
if (gantt.ident) loadData();
|
||||
}, [gantt.ident, loadData]);
|
||||
|
||||
//При подключении компонента к странице
|
||||
useEffect(() => {
|
||||
@ -2196,23 +2198,21 @@ const Gantt = ({ title }) => {
|
||||
{title}
|
||||
</Typography>
|
||||
<FormControlLabel
|
||||
control={<Checkbox onChange={() => setState(pv => ({ ...pv, useCustomTaskDialog: !pv.useCustomTaskDialog }))} />}
|
||||
sx={STYLES.CONTROL}
|
||||
control={<Checkbox onChange={() => setGantt(pv => ({ ...pv, useCustomTaskDialog: !pv.useCustomTaskDialog }))} />}
|
||||
label="Отображать пользовательский диалог задачи"
|
||||
/>
|
||||
<Grid container spacing={0} direction="column" alignItems="center">
|
||||
<Grid container direction="column" alignItems="center">
|
||||
<Grid item xs={12}>
|
||||
{state.dataLoaded ? (
|
||||
<Box sx={STYLES.GANTT_CONTAINER} p={1}>
|
||||
<P8PGantt
|
||||
{...P8P_GANTT_CONFIG_PROPS}
|
||||
{...state.ganttDef}
|
||||
height={GANTT_HEIGHT}
|
||||
tasks={state.ganttTasks}
|
||||
onTaskDatesChange={handleTaskDatesChange}
|
||||
taskAttributeRenderer={taskAttributeRenderer}
|
||||
taskDialogRenderer={state.useCustomTaskDialog ? taskDialogRenderer : null}
|
||||
/>
|
||||
</Box>
|
||||
{gantt.dataLoaded ? (
|
||||
<P8PGantt
|
||||
{...P8P_GANTT_CONFIG_PROPS}
|
||||
{...gantt}
|
||||
containerStyle={STYLES.GANTT_CONTAINER}
|
||||
onTaskDatesChange={handleTaskDatesChange}
|
||||
taskAttributeRenderer={taskAttributeRenderer}
|
||||
taskDialogRenderer={gantt.useCustomTaskDialog ? taskDialogRenderer : null}
|
||||
/>
|
||||
) : null}
|
||||
</Grid>
|
||||
</Grid>
|
||||
|
@ -33,34 +33,42 @@ const DISPLAY_SIZE = {
|
||||
//Типовые пути конвертации в массив (при переводе XML -> JSON)
|
||||
const XML_ALWAYS_ARRAY_PATHS = [
|
||||
"XRESPOND.XPAYLOAD.XOUT_ARGUMENTS",
|
||||
"XRESPOND.XPAYLOAD.XROWS",
|
||||
"XRESPOND.XPAYLOAD.XCOLUMNS_DEF",
|
||||
"XRESPOND.XPAYLOAD.XCOLUMNS_DEF.values",
|
||||
"XRESPOND.XPAYLOAD.XGROUPS",
|
||||
"XRESPOND.XPAYLOAD.XGANTT_DEF.taskAttributes",
|
||||
"XRESPOND.XPAYLOAD.XGANTT_DEF.taskColors",
|
||||
"XRESPOND.XPAYLOAD.XGANTT_TASKS",
|
||||
"XRESPOND.XPAYLOAD.XGANTT_TASKS.dependencies",
|
||||
"XRESPOND.XPAYLOAD.XDATA_GRID.rows",
|
||||
"XRESPOND.XPAYLOAD.XDATA_GRID.columnsDef",
|
||||
"XRESPOND.XPAYLOAD.XDATA_GRID.columnsDef.values",
|
||||
"XRESPOND.XPAYLOAD.XDATA_GRID.groups",
|
||||
"XRESPOND.XPAYLOAD.XGANTT.taskAttributes",
|
||||
"XRESPOND.XPAYLOAD.XGANTT.taskColors",
|
||||
"XRESPOND.XPAYLOAD.XGANTT.tasks",
|
||||
"XRESPOND.XPAYLOAD.XGANTT.tasks.dependencies",
|
||||
"XRESPOND.XPAYLOAD.XCHART.labels",
|
||||
"XRESPOND.XPAYLOAD.XCHART.datasets",
|
||||
"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)
|
||||
const XML_ALWAYS_ARRAY_PATH_PATTERNS = [
|
||||
/(.*)XROWS$/,
|
||||
/(.*)XCOLUMNS_DEF$/,
|
||||
/(.*)XCOLUMNS_DEF.values$/,
|
||||
/(.*)XGROUPS$/,
|
||||
/(.*)XGANTT_DEF.taskAttributes$/,
|
||||
/(.*)XGANTT_DEF.taskColors$/,
|
||||
/(.*)XGANTT_TASKS$/,
|
||||
/(.*)XGANTT_TASKS.dependencies$/,
|
||||
/(.*)XDATA_GRID.rows$/,
|
||||
/(.*)XDATA_GRID.columnsDef$/,
|
||||
/(.*)XDATA_GRID.columnsDef.values$/,
|
||||
/(.*)XDATA_GRID.groups$/,
|
||||
/(.*)XGANTT.taskAttributes$/,
|
||||
/(.*)XGANTT.taskColors$/,
|
||||
/(.*)XGANTT.tasks$/,
|
||||
/(.*)XGANTT.tasks.dependencies$/,
|
||||
/(.*)XCHART.labels$/,
|
||||
/(.*)XCHART.datasets$/,
|
||||
/(.*)XCHART.datasets.data$/,
|
||||
/(.*)XCHART.datasets.items$/
|
||||
/(.*)XCHART.datasets.items$/,
|
||||
/(.*)XCYCLOGRAM.taskAttributes$/,
|
||||
/(.*)XCYCLOGRAM.columns$/,
|
||||
/(.*)XCYCLOGRAM.groups$/,
|
||||
/(.*)XCYCLOGRAM.tasks$/
|
||||
];
|
||||
|
||||
//Типовой постфикс тега для массива (при переводе XML -> JSON)
|
||||
@ -68,11 +76,13 @@ const XML_ALWAYS_ARRAY_POSTFIX = "__SYSTEM__ARRAY__";
|
||||
|
||||
//Типовые шаблоны конвертации значения атрибута в строку (при переводе XML -> JSON)
|
||||
const XML_ATTR_ALWAYS_STR_PATH_PATTERNS = [
|
||||
/(.*)XCOLUMNS_DEF.name$/,
|
||||
/(.*)XCOLUMNS_DEF.caption$/,
|
||||
/(.*)XCOLUMNS_DEF.parent$/,
|
||||
/(.*)XGROUPS.name$/,
|
||||
/(.*)XGROUPS.caption$/
|
||||
/(.*)XDATA_GRID.columnsDef.name$/,
|
||||
/(.*)XDATA_GRID.columnsDef.caption$/,
|
||||
/(.*)XDATA_GRID.columnsDef.parent$/,
|
||||
/(.*)XDATA_GRID.groups.name$/,
|
||||
/(.*)XDATA_GRID.groups.caption$/,
|
||||
/(.*)XCYCLOGRAM.columns.name$/,
|
||||
/(.*)XCYCLOGRAM.groups.name$/
|
||||
];
|
||||
|
||||
//-----------
|
||||
|
@ -119,8 +119,8 @@ const EqsPrfrm = () => {
|
||||
let cF = 0;
|
||||
let sF = 0;
|
||||
let properties = [];
|
||||
if (data.XROWS != null) {
|
||||
data.XROWS.map(row => {
|
||||
if (data.XDATA_GRID.rows != null) {
|
||||
data.XDATA_GRID.rows.map(row => {
|
||||
properties = [];
|
||||
Object.entries(row).forEach(([key, value]) => properties.push({ name: key, data: value }));
|
||||
let info2 = properties.find(element => {
|
||||
@ -156,11 +156,10 @@ const EqsPrfrm = () => {
|
||||
}
|
||||
setDataGrid(pv => ({
|
||||
...pv,
|
||||
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,
|
||||
rows: [...(data.XROWS || [])],
|
||||
fixedHeader: data.XDATA_GRID.fixedHeader,
|
||||
fixedColumns: data.XDATA_GRID.fixedColumns,
|
||||
groups: [...(data.XGROUPS || [])],
|
||||
...data.XDATA_GRID,
|
||||
columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,
|
||||
rows: [...(data.XDATA_GRID.rows || [])],
|
||||
groups: [...(data.XDATA_GRID.groups || [])],
|
||||
dataLoaded: true,
|
||||
reload: false
|
||||
}));
|
||||
|
@ -195,9 +195,10 @@ const useProductDetailsTable = (planSpec, product, orders, pageNumber, stored) =
|
||||
});
|
||||
setData(pv => ({
|
||||
...pv,
|
||||
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,
|
||||
rows: pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],
|
||||
morePages: DATA_GRID_PAGE_SIZE == 0 ? false : (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE,
|
||||
...data.XDATA_GRID,
|
||||
columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,
|
||||
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
|
||||
}));
|
||||
} finally {
|
||||
|
@ -150,12 +150,13 @@ const useCostJobsSpecs = task => {
|
||||
});
|
||||
setCostJobsSpecs(pv => ({
|
||||
...pv,
|
||||
...data.XDATA_GRID,
|
||||
task: task,
|
||||
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,
|
||||
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,
|
||||
reload: false,
|
||||
morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE
|
||||
morePages: (data.XDATA_GRID.rows || []).length >= DATA_GRID_PAGE_SIZE
|
||||
}));
|
||||
};
|
||||
loadData();
|
||||
@ -256,12 +257,13 @@ const useEquipConfiguration = (task, fromAction) => {
|
||||
});
|
||||
setEquipConfiguration(pv => ({
|
||||
...pv,
|
||||
...data.XDATA_GRID,
|
||||
task: task,
|
||||
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,
|
||||
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,
|
||||
reload: false,
|
||||
morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE
|
||||
morePages: (data.XDATA_GRID.rows || []).length >= DATA_GRID_PAGE_SIZE
|
||||
}));
|
||||
};
|
||||
loadData();
|
||||
|
@ -53,14 +53,15 @@ const useCostRouteLists = (task, taskType) => {
|
||||
});
|
||||
setCostRouteLists(pv => ({
|
||||
...pv,
|
||||
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,
|
||||
rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],
|
||||
...data.XDATA_GRID,
|
||||
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,
|
||||
reload: false,
|
||||
morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE,
|
||||
quantPlanSum: data.XROWS ? data.XROWS.reduce((a, b) => a + b["NQUANT_PLAN"], 0) : 0,
|
||||
uniqueNomns: data.XROWS
|
||||
? data.XROWS.reduce((accumulator, current) => {
|
||||
morePages: (data.XDATA_GRID.rows || []).length >= DATA_GRID_PAGE_SIZE,
|
||||
quantPlanSum: data.XDATA_GRID.rows ? data.XDATA_GRID.rows.reduce((a, b) => a + b["NQUANT_PLAN"], 0) : 0,
|
||||
uniqueNomns: data.XDATA_GRID.rows
|
||||
? data.XDATA_GRID.rows.reduce((accumulator, current) => {
|
||||
if (!accumulator.find(item => item.SMATRES_PLAN_NOMEN === current.SMATRES_PLAN_NOMEN)) {
|
||||
accumulator.push(current);
|
||||
}
|
||||
@ -122,11 +123,12 @@ const useIncomFromDeps = (task, taskType) => {
|
||||
});
|
||||
setIncomFromDeps(pv => ({
|
||||
...pv,
|
||||
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,
|
||||
rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],
|
||||
...data.XDATA_GRID,
|
||||
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,
|
||||
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
|
||||
@ -172,11 +174,12 @@ const useGoodsParties = mainRowRN => {
|
||||
});
|
||||
setGoodsParties(pv => ({
|
||||
...pv,
|
||||
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,
|
||||
rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],
|
||||
...data.XDATA_GRID,
|
||||
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,
|
||||
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
|
||||
@ -223,11 +226,12 @@ const useCostDeliveryLists = mainRowRN => {
|
||||
});
|
||||
setCostDeliveryLists(pv => ({
|
||||
...pv,
|
||||
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,
|
||||
rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],
|
||||
...data.XDATA_GRID,
|
||||
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,
|
||||
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
|
||||
|
@ -97,7 +97,7 @@ const parseProdPlanSpXML = async xmlDoc => {
|
||||
attributeValueProcessor: (name, 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,
|
||||
selectedPlanCtlgSort: null,
|
||||
selectedPlanCtlgMenuItems: null,
|
||||
selectedPlanCtlgGanttDef: {},
|
||||
selectedPlanCtlgSpecs: [],
|
||||
gantt: {},
|
||||
selectedTaskDetail: null,
|
||||
selectedTaskDetailType: null,
|
||||
planSpec: null
|
||||
@ -282,8 +281,7 @@ const MechRecCostProdPlans = () => {
|
||||
selectedPlanCtlgLevel: null,
|
||||
selectedPlanCtlgSort: null,
|
||||
selectedPlanCtlgMenuItems: null,
|
||||
selectedPlanCtlgSpecs: [],
|
||||
selectedPlanCtlgGanttDef: {},
|
||||
gantt: {},
|
||||
showPlanList: false,
|
||||
selectedTaskDetail: null,
|
||||
selectedTaskDetailType: null
|
||||
@ -300,8 +298,7 @@ const MechRecCostProdPlans = () => {
|
||||
selectedPlanCtlgLevel: null,
|
||||
selectedPlanCtlgSort: null,
|
||||
selectedPlanCtlgMenuItems: null,
|
||||
selectedPlanCtlgSpecs: [],
|
||||
selectedPlanCtlgGanttDef: {},
|
||||
gantt: {},
|
||||
showPlanList: false,
|
||||
selectedTaskDetail: null,
|
||||
selectedTaskDetailType: null
|
||||
@ -324,8 +321,7 @@ const MechRecCostProdPlans = () => {
|
||||
? state.selectedPlanCtlgMenuItems
|
||||
: [...Array(data.NMAX_LEVEL).keys()].map(el => el + 1),
|
||||
selectedPlanCtlgSpecsLoaded: true,
|
||||
selectedPlanCtlgGanttDef: doc.XGANTT_DEF ? { ...doc.XGANTT_DEF } : {},
|
||||
selectedPlanCtlgSpecs: [...(doc?.XGANTT_TASKS || [])]
|
||||
gantt: { ...doc, tasks: [...(doc?.tasks || [])] }
|
||||
}));
|
||||
},
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
@ -401,7 +397,7 @@ const MechRecCostProdPlans = () => {
|
||||
<Grid container>
|
||||
<Grid item xs={12}>
|
||||
{state.selectedPlanCtlgSpecsLoaded ? (
|
||||
state.selectedPlanCtlgSpecs.length === 0 ? (
|
||||
state.gantt.tasks.length === 0 ? (
|
||||
<Box pt={3}>
|
||||
<InlineMsgInfo
|
||||
okBtn={false}
|
||||
@ -459,10 +455,9 @@ const MechRecCostProdPlans = () => {
|
||||
) : null}
|
||||
<P8PGantt
|
||||
{...P8P_GANTT_CONFIG_PROPS}
|
||||
{...state.selectedPlanCtlgGanttDef}
|
||||
{...state.gantt}
|
||||
containerStyle={STYLES.GANTT_CONTAINER}
|
||||
titleStyle={STYLES.GANTT_TITLE}
|
||||
tasks={state.selectedPlanCtlgSpecs}
|
||||
taskDialogRenderer={prms => taskDialogRenderer({ ...prms, handleTaskDetailOpen })}
|
||||
/>
|
||||
</Box>
|
||||
|
@ -62,13 +62,12 @@ const useMechRecDeptCostJobs = (subdiv, fullDate, workHours) => {
|
||||
});
|
||||
setCostJobs(pv => ({
|
||||
...pv,
|
||||
fixedHeader: data.XDATA_GRID.fixedHeader,
|
||||
fixedColumns: data.XDATA_GRID.fixedColumns,
|
||||
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,
|
||||
rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],
|
||||
...data.XDATA_GRID,
|
||||
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,
|
||||
reload: false,
|
||||
morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE_LARGE,
|
||||
morePages: (data.XDATA_GRID.rows || []).length >= DATA_GRID_PAGE_SIZE_LARGE,
|
||||
date: fullDate
|
||||
}));
|
||||
};
|
||||
@ -109,11 +108,12 @@ const useInsDepartment = fullDate => {
|
||||
});
|
||||
setInsDepartments(pv => ({
|
||||
...pv,
|
||||
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,
|
||||
rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],
|
||||
...data.XDATA_GRID,
|
||||
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,
|
||||
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) {
|
||||
|
@ -75,13 +75,12 @@ const useDeptCostProdPlans = () => {
|
||||
});
|
||||
setState(pv => ({
|
||||
...pv,
|
||||
fixedHeader: data.XDATA_GRID.fixedHeader,
|
||||
fixedColumns: data.XDATA_GRID.fixedColumns,
|
||||
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,
|
||||
rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],
|
||||
...data.XDATA_GRID,
|
||||
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,
|
||||
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) {
|
||||
@ -144,11 +143,12 @@ const useCostRouteLists = task => {
|
||||
});
|
||||
setCostRouteLists(pv => ({
|
||||
...pv,
|
||||
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,
|
||||
rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],
|
||||
...data.XDATA_GRID,
|
||||
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,
|
||||
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) {
|
||||
@ -202,11 +202,12 @@ const useCostRouteListsSpecs = mainRowRN => {
|
||||
});
|
||||
setCostRouteListsSpecs(pv => ({
|
||||
...pv,
|
||||
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,
|
||||
rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],
|
||||
...data.XDATA_GRID,
|
||||
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,
|
||||
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) {
|
||||
@ -258,11 +259,12 @@ const useIncomFromDeps = task => {
|
||||
});
|
||||
setIncomFromDeps(pv => ({
|
||||
...pv,
|
||||
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,
|
||||
rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],
|
||||
...data.XDATA_GRID,
|
||||
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,
|
||||
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) {
|
||||
|
@ -84,11 +84,12 @@ const Projects = () => {
|
||||
});
|
||||
setProjectsDataGrid(pv => ({
|
||||
...pv,
|
||||
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,
|
||||
rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],
|
||||
...data.XDATA_GRID,
|
||||
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,
|
||||
reload: false,
|
||||
morePages: (data.XROWS || []).length >= configSystemPageSize
|
||||
morePages: (data.XDATA_GRID.rows || []).length >= configSystemPageSize
|
||||
}));
|
||||
}
|
||||
}, [
|
||||
|
@ -57,8 +57,9 @@ const StageArts = ({ stage, filters }) => {
|
||||
});
|
||||
setStageArtsDataGrid(pv => ({
|
||||
...pv,
|
||||
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,
|
||||
rows: [...(data.XROWS || [])],
|
||||
...data.XDATA_GRID,
|
||||
columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,
|
||||
rows: [...(data.XDATA_GRID.rows || [])],
|
||||
dataLoaded: true,
|
||||
reload: false
|
||||
}));
|
||||
|
@ -67,11 +67,12 @@ const StageContracts = ({ stage, filters }) => {
|
||||
});
|
||||
setStageContractsDataGrid(pv => ({
|
||||
...pv,
|
||||
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,
|
||||
rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],
|
||||
...data.XDATA_GRID,
|
||||
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,
|
||||
reload: false,
|
||||
morePages: (data.XROWS || []).length >= configSystemPageSize
|
||||
morePages: (data.XDATA_GRID.rows || []).length >= configSystemPageSize
|
||||
}));
|
||||
}
|
||||
}, [
|
||||
|
@ -71,11 +71,12 @@ const Stages = ({ project, projectName, filters }) => {
|
||||
});
|
||||
setStagesDataGrid(pv => ({
|
||||
...pv,
|
||||
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,
|
||||
rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],
|
||||
...data.XDATA_GRID,
|
||||
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,
|
||||
reload: false,
|
||||
morePages: (data.XROWS || []).length >= configSystemPageSize
|
||||
morePages: (data.XDATA_GRID.rows || []).length >= configSystemPageSize
|
||||
}));
|
||||
}
|
||||
}, [
|
||||
|
@ -55,11 +55,10 @@ const PrjGraph = () => {
|
||||
const data = await executeStored({ stored: "PKG_P8PANELS_PROJECTS.GRAPH", args: {}, respArg: "COUT" });
|
||||
setdataGrid(pv => ({
|
||||
...pv,
|
||||
fixedHeader: data.XDATA_GRID.fixedHeader,
|
||||
fixedColumns: data.XDATA_GRID.fixedColumns,
|
||||
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,
|
||||
rows: [...(data.XROWS || [])],
|
||||
groups: [...(data.XGROUPS || [])],
|
||||
...data.XDATA_GRID,
|
||||
columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,
|
||||
rows: [...(data.XDATA_GRID.rows || [])],
|
||||
groups: [...(data.XDATA_GRID.groups || [])],
|
||||
dataLoaded: true,
|
||||
reload: false
|
||||
}));
|
||||
|
@ -57,11 +57,12 @@ const LabFactRptDtl = ({ periodId, title, onHide }) => {
|
||||
});
|
||||
setFactRptDtl(pv => ({
|
||||
...pv,
|
||||
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,
|
||||
rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],
|
||||
...data.XDATA_GRID,
|
||||
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,
|
||||
reload: false,
|
||||
morePages: (data.XROWS || []).length >= configSystemPageSize
|
||||
morePages: (data.XDATA_GRID.rows || []).length >= configSystemPageSize
|
||||
}));
|
||||
}
|
||||
}, [
|
||||
|
@ -56,11 +56,12 @@ const LabPlanFOTDtl = ({ periodId, title, onHide }) => {
|
||||
});
|
||||
setPlanFOTDtl(pv => ({
|
||||
...pv,
|
||||
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,
|
||||
rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],
|
||||
...data.XDATA_GRID,
|
||||
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,
|
||||
reload: false,
|
||||
morePages: (data.XROWS || []).length >= configSystemPageSize
|
||||
morePages: (data.XDATA_GRID.rows || []).length >= configSystemPageSize
|
||||
}));
|
||||
}
|
||||
}, [
|
||||
|
@ -61,11 +61,12 @@ const LabPlanJobsDtl = ({ periodId, title, onHide, onProjectClick }) => {
|
||||
});
|
||||
setPlanJobsDtl(pv => ({
|
||||
...pv,
|
||||
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,
|
||||
rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],
|
||||
...data.XDATA_GRID,
|
||||
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,
|
||||
reload: false,
|
||||
morePages: (data.XROWS || []).length >= configSystemPageSize
|
||||
morePages: (data.XDATA_GRID.rows || []).length >= configSystemPageSize
|
||||
}));
|
||||
}
|
||||
}, [
|
||||
|
@ -265,8 +265,7 @@ const PrjJobs = () => {
|
||||
selectedProjectJobsLoaded: false,
|
||||
selectedProject: null,
|
||||
selectedProjectDocRn: null,
|
||||
selectedProjectGanttDef: {},
|
||||
selectedProjectTasks: [],
|
||||
gantt: {},
|
||||
showInitDialog: false
|
||||
});
|
||||
|
||||
@ -308,8 +307,9 @@ const PrjJobs = () => {
|
||||
setState(pv => ({
|
||||
...pv,
|
||||
selectedProjectJobsLoaded: true,
|
||||
selectedProjectGanttDef: tasksOnly === true ? { ...pv.selectedProjectGanttDef } : data.XGANTT_DEF ? { ...data.XGANTT_DEF } : {},
|
||||
selectedProjectTasks: [...data.XGANTT_TASKS]
|
||||
gantt: {
|
||||
...(tasksOnly === true ? { ...pv.gantt, tasks: [...data.XGANTT.tasks] } : data.XGANTT ? { ...data.XGANTT } : {})
|
||||
}
|
||||
}));
|
||||
},
|
||||
[executeStored, state.ident, state.selectedProject]
|
||||
@ -394,8 +394,7 @@ const PrjJobs = () => {
|
||||
selectedProject: project,
|
||||
selectedProjectDocRn: projectDocRn,
|
||||
selectedProjectJobsLoaded: false,
|
||||
selectedProjectTasks: [],
|
||||
selectedProjectGanttDef: {},
|
||||
gantt: {},
|
||||
showProjectsList: false
|
||||
}));
|
||||
};
|
||||
@ -407,8 +406,7 @@ const PrjJobs = () => {
|
||||
selectedProjectJobsLoaded: false,
|
||||
selectedProject: null,
|
||||
selectedProjectDocRn: null,
|
||||
selectedProjectTasks: [],
|
||||
selectedProjectGanttDef: {},
|
||||
gantt: {},
|
||||
showProjectsList: false
|
||||
}));
|
||||
|
||||
@ -515,11 +513,10 @@ const PrjJobs = () => {
|
||||
{state.selectedProjectJobsLoaded ? (
|
||||
<P8PGantt
|
||||
{...P8P_GANTT_CONFIG_PROPS}
|
||||
{...state.selectedProjectGanttDef}
|
||||
{...state.gantt}
|
||||
containerStyle={STYLES.GANTT_CONTAINER}
|
||||
titleStyle={STYLES.GANTT_TITLE}
|
||||
onTitleClick={handleTitleClick}
|
||||
tasks={state.selectedProjectTasks}
|
||||
onTaskDatesChange={handleTaskDatesChange}
|
||||
taskAttributeRenderer={taskAttributeRenderer}
|
||||
/>
|
||||
|
@ -79,11 +79,12 @@ const ResMon = ({ ident, onPlanJobsDtlProjectClick }) => {
|
||||
});
|
||||
setPeriods(pv => ({
|
||||
...pv,
|
||||
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,
|
||||
rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],
|
||||
...data.XDATA_GRID,
|
||||
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,
|
||||
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]);
|
||||
|
@ -97,16 +97,15 @@ const useConf = (currentTab, handleSectionChange) => {
|
||||
sections.map(s => {
|
||||
let dg = {};
|
||||
Object.assign(dg, dataGrid, {
|
||||
...s.XDATA.XDATA_GRID,
|
||||
rn: s.NRN,
|
||||
code: s.SCODE,
|
||||
name: s.SNAME,
|
||||
delete_allow: s.NDELETE_ALLOW,
|
||||
dataLoaded: true,
|
||||
columnsDef: [...(s.XDATA.XCOLUMNS_DEF || [])],
|
||||
groups: [...(s.XDATA.XGROUPS || [])],
|
||||
rows: [...(s.XDATA.XROWS || [])],
|
||||
fixedHeader: s.XDATA.XDATA_GRID.fixedHeader,
|
||||
fixedColumns: s.XDATA.XDATA_GRID.fixedColumns,
|
||||
columnsDef: [...(s.XDATA.XDATA_GRID.columnsDef || [])],
|
||||
groups: [...(s.XDATA.XDATA_GRID.groups || [])],
|
||||
rows: [...(s.XDATA.XDATA_GRID.rows || [])],
|
||||
reload: false
|
||||
});
|
||||
//Если раздел имеет составы показателей
|
||||
|
@ -239,8 +239,7 @@ const Cyclogram = ({ title }) => {
|
||||
const data = await executeStored({
|
||||
stored: "PKG_P8PANELS_SAMPLES.CYCLOGRAM",
|
||||
args: { NIDENT: state.ident },
|
||||
attributeValueProcessor: (name, val) =>
|
||||
name === "name" ? undefined : ["ddate_start", "ddate_end"].includes(name) ? formatDateJSONDateOnly(val) : val,
|
||||
attributeValueProcessor: (name, val) => (["ddate_start", "ddate_end"].includes(name) ? formatDateJSONDateOnly(val) : val),
|
||||
respArg: "COUT"
|
||||
});
|
||||
setState(pv => ({ ...pv, dataLoaded: true, ...data.XCYCLOGRAM, reload: false }));
|
||||
|
@ -86,14 +86,14 @@ export const groupCellRender = () => ({ cellStyle: { padding: "2px" } });
|
||||
//Пример: Таблица данных "P8PDataGrid"
|
||||
const DataGrid = ({ title }) => {
|
||||
//Собственное состояние - таблица данных
|
||||
const [dataGrid, setdataGrid] = useState({
|
||||
const [dataGrid, setDataGrid] = useState({
|
||||
dataLoaded: false,
|
||||
columnsDef: [],
|
||||
filters: null,
|
||||
orders: null,
|
||||
groups: [],
|
||||
rows: [],
|
||||
reload: true,
|
||||
reloading: true,
|
||||
pageNumber: 1,
|
||||
morePages: true,
|
||||
fixedHeader: false,
|
||||
@ -108,7 +108,7 @@ const DataGrid = ({ title }) => {
|
||||
|
||||
//Загрузка данных таблицы с сервера
|
||||
const loadData = useCallback(async () => {
|
||||
if (dataGrid.reload) {
|
||||
if (dataGrid.reloading) {
|
||||
const data = await executeStored({
|
||||
stored: "PKG_P8PANELS_SAMPLES.DATA_GRID",
|
||||
args: {
|
||||
@ -120,32 +120,31 @@ const DataGrid = ({ title }) => {
|
||||
},
|
||||
respArg: "COUT"
|
||||
});
|
||||
setdataGrid(pv => ({
|
||||
setDataGrid(pv => ({
|
||||
...pv,
|
||||
fixedHeader: data.XDATA_GRID.fixedHeader,
|
||||
fixedColumns: data.XDATA_GRID.fixedColumns,
|
||||
columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,
|
||||
rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],
|
||||
groups: data.XGROUPS
|
||||
...data.XDATA_GRID,
|
||||
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 || [])],
|
||||
groups: data.XDATA_GRID.groups
|
||||
? pv.pageNumber == 1
|
||||
? [...data.XGROUPS]
|
||||
: [...pv.groups, ...data.XGROUPS.filter(g => !pv.groups.find(pg => pg.name == g.name))]
|
||||
? [...data.XDATA_GRID.groups]
|
||||
: [...pv.groups, ...data.XDATA_GRID.groups.filter(g => !pv.groups.find(pg => pg.name == g.name))]
|
||||
: [...pv.groups],
|
||||
dataLoaded: true,
|
||||
reload: false,
|
||||
morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE
|
||||
reloading: false,
|
||||
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" });
|
||||
@ -153,7 +152,7 @@ const DataGrid = ({ title }) => {
|
||||
//При необходимости обновить данные таблицы
|
||||
useEffect(() => {
|
||||
loadData();
|
||||
}, [dataGrid.reload, loadData]);
|
||||
}, [dataGrid.reloading, loadData]);
|
||||
|
||||
//Генерация содержимого
|
||||
return (
|
||||
@ -168,15 +167,8 @@ const DataGrid = ({ title }) => {
|
||||
<P8PDataGrid
|
||||
{...P8P_DATA_GRID_CONFIG_PROPS}
|
||||
containerComponentProps={{ elevation: 6, style: STYLES.DATA_GRID_CONTAINER }}
|
||||
columnsDef={dataGrid.columnsDef}
|
||||
groups={dataGrid.groups}
|
||||
rows={dataGrid.rows}
|
||||
{...dataGrid}
|
||||
size={P8P_DATA_GRID_SIZE.LARGE}
|
||||
fixedHeader={dataGrid.fixedHeader}
|
||||
fixedColumns={dataGrid.fixedColumns}
|
||||
filtersInitial={dataGrid.filters}
|
||||
morePages={dataGrid.morePages}
|
||||
reloading={dataGrid.reload}
|
||||
valueFormatter={valueFormatter}
|
||||
headCellRender={headCellRender}
|
||||
dataCellRender={dataCellRender}
|
||||
|
@ -97,12 +97,10 @@ const taskDialogRenderer = ({ task, close }) => {
|
||||
//Пример: Диаграмма Ганта "P8Gantt"
|
||||
const Gantt = ({ title }) => {
|
||||
//Собственное состояние
|
||||
const [state, setState] = useState({
|
||||
const [gantt, setGantt] = useState({
|
||||
init: false,
|
||||
dataLoaded: false,
|
||||
ident: null,
|
||||
ganttDef: {},
|
||||
ganttTasks: [],
|
||||
useCustomTaskDialog: false
|
||||
});
|
||||
|
||||
@ -113,21 +111,21 @@ const Gantt = ({ title }) => {
|
||||
const loadData = useCallback(async () => {
|
||||
const data = await executeStored({
|
||||
stored: "PKG_P8PANELS_SAMPLES.GANTT",
|
||||
args: { NIDENT: state.ident },
|
||||
args: { NIDENT: gantt.ident },
|
||||
attributeValueProcessor: (name, val) =>
|
||||
name == "numb" ? undefined : ["start", "end"].includes(name) ? formatDateJSONDateOnly(val) : val,
|
||||
respArg: "COUT"
|
||||
});
|
||||
setState(pv => ({ ...pv, dataLoaded: true, ganttDef: { ...data.XGANTT_DEF }, ganttTasks: [...data.XGANTT_TASKS] }));
|
||||
}, [state.ident, executeStored]);
|
||||
setGantt(pv => ({ ...pv, dataLoaded: true, ...data.XGANTT }));
|
||||
}, [gantt.ident, executeStored]);
|
||||
|
||||
//Инициализация данных диаграммы
|
||||
const initData = useCallback(async () => {
|
||||
if (!state.init) {
|
||||
const data = await executeStored({ stored: "PKG_P8PANELS_SAMPLES.GANTT_INIT", args: { NIDENT: state.ident } });
|
||||
setState(pv => ({ ...pv, init: true, ident: data.NIDENT }));
|
||||
if (!gantt.init) {
|
||||
const data = await executeStored({ stored: "PKG_P8PANELS_SAMPLES.GANTT_INIT", args: { NIDENT: gantt.ident } });
|
||||
setGantt(pv => ({ ...pv, init: true, ident: data.NIDENT }));
|
||||
}
|
||||
}, [state.init, state.ident, executeStored]);
|
||||
}, [gantt.init, gantt.ident, executeStored]);
|
||||
|
||||
//Изменение данных диаграммы
|
||||
const modifyData = useCallback(
|
||||
@ -135,13 +133,13 @@ const Gantt = ({ title }) => {
|
||||
try {
|
||||
await executeStored({
|
||||
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 {
|
||||
loadData();
|
||||
}
|
||||
},
|
||||
[state.ident, executeStored, loadData]
|
||||
[gantt.ident, executeStored, loadData]
|
||||
);
|
||||
|
||||
//Обработка измненения сроков задачи в диаграмме Гантта
|
||||
@ -151,8 +149,8 @@ const Gantt = ({ title }) => {
|
||||
|
||||
//При необходимости обновить данные таблицы
|
||||
useEffect(() => {
|
||||
if (state.ident) loadData();
|
||||
}, [state.ident, loadData]);
|
||||
if (gantt.ident) loadData();
|
||||
}, [gantt.ident, loadData]);
|
||||
|
||||
//При подключении компонента к странице
|
||||
useEffect(() => {
|
||||
@ -168,20 +166,19 @@ const Gantt = ({ title }) => {
|
||||
</Typography>
|
||||
<FormControlLabel
|
||||
sx={STYLES.CONTROL}
|
||||
control={<Checkbox onChange={() => setState(pv => ({ ...pv, useCustomTaskDialog: !pv.useCustomTaskDialog }))} />}
|
||||
control={<Checkbox onChange={() => setGantt(pv => ({ ...pv, useCustomTaskDialog: !pv.useCustomTaskDialog }))} />}
|
||||
label="Отображать пользовательский диалог задачи"
|
||||
/>
|
||||
<Grid container direction="column" alignItems="center">
|
||||
<Grid item xs={12}>
|
||||
{state.dataLoaded ? (
|
||||
{gantt.dataLoaded ? (
|
||||
<P8PGantt
|
||||
{...P8P_GANTT_CONFIG_PROPS}
|
||||
{...state.ganttDef}
|
||||
{...gantt}
|
||||
containerStyle={STYLES.GANTT_CONTAINER}
|
||||
tasks={state.ganttTasks}
|
||||
onTaskDatesChange={handleTaskDatesChange}
|
||||
taskAttributeRenderer={taskAttributeRenderer}
|
||||
taskDialogRenderer={state.useCustomTaskDialog ? taskDialogRenderer : null}
|
||||
taskDialogRenderer={gantt.useCustomTaskDialog ? taskDialogRenderer : null}
|
||||
/>
|
||||
) : null}
|
||||
</Grid>
|
||||
|
@ -227,10 +227,10 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as
|
||||
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации
|
||||
SPRJ_GROUP_NAME PKG_STD.TSTRING; -- Наименование группы для проекта
|
||||
BEXPANDED boolean; -- Флаг раскрытости уровня
|
||||
RDG PKG_P8PANELS_VISUAL.TDATA_GRID; -- Описание таблицы
|
||||
RDG_ROW_INFO PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы с информацией по объекту ремонта
|
||||
RDG_ROW_PLAN PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы с планом по объекту ремонта
|
||||
RDG_ROW_FACT PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы с фактом по объекту ремонта
|
||||
RDG PKG_P8PANELS_VISUAL.TDG; -- Описание таблицы
|
||||
RDG_ROW_INFO PKG_P8PANELS_VISUAL.TDG_ROW; -- Строка таблицы с информацией по объекту ремонта
|
||||
RDG_ROW_PLAN PKG_P8PANELS_VISUAL.TDG_ROW; -- Строка таблицы с планом по объекту ремонта
|
||||
RDG_ROW_FACT PKG_P8PANELS_VISUAL.TDG_ROW; -- Строка таблицы с фактом по объекту ремонта
|
||||
NCURYEAR PKG_STD.TNUMBER; -- Текущий год
|
||||
NCURMONTH 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'));
|
||||
/* Инициализируем таблицу данных */
|
||||
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,
|
||||
SNAME => 'SOBJINFO',
|
||||
SCAPTION => 'Информация по объекту ремонта',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
NWIDTH => 80);
|
||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'SINFO',
|
||||
SCAPTION => 'Объект ремонта',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
NWIDTH => 80);
|
||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'SWRKTYPE',
|
||||
SCAPTION => 'Тип работ',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
SPARENT => 'SINFO',
|
||||
NWIDTH => 80);
|
||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'NRN',
|
||||
SCAPTION => 'Рег. номер',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
|
||||
BVISIBLE => false);
|
||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'SWORKNAME',
|
||||
SCAPTION => 'Наименование работы',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
BVISIBLE => false);
|
||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'STECHOBJCODE',
|
||||
SCAPTION => 'Код тех. объекта',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
BVISIBLE => false);
|
||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'STECHOBJNAME',
|
||||
SCAPTION => 'Наименование тех. объекта',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
BVISIBLE => false);
|
||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'SBELONG',
|
||||
SCAPTION => 'Принадлежность',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
BVISIBLE => false);
|
||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'SPRODOBJ',
|
||||
SCAPTION => 'Производственный объект',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
BVISIBLE => false);
|
||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'STECHSERV',
|
||||
SCAPTION => 'Тех. служба',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
BVISIBLE => false);
|
||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'SRESPDEP',
|
||||
SCAPTION => 'Отвественное подразделение',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
BVISIBLE => false);
|
||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'STECSERVCODE',
|
||||
SCAPTION => 'Вид ремонта',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
BVISIBLE => false);
|
||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'DDATEPLANBEG',
|
||||
SCAPTION => 'Начало работы (план)',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE,
|
||||
BVISIBLE => false);
|
||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'DDATEPLANEND',
|
||||
SCAPTION => 'Окончание работы (план)',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE,
|
||||
BVISIBLE => false);
|
||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'DDATEFACTBEG',
|
||||
SCAPTION => 'Начало работы (факт)',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE,
|
||||
BVISIBLE => false);
|
||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'DDATEFACTEND',
|
||||
SCAPTION => 'Окончание работы (факт)',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE,
|
||||
BVISIBLE => false);
|
||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'STECSRVKINDCODE',
|
||||
SCAPTION => 'Код типа работы',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
BVISIBLE => false);
|
||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'STECSRVKINDNAME',
|
||||
SCAPTION => 'Наименование типа работы',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
BVISIBLE => false);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'SOBJINFO',
|
||||
SCAPTION => 'Информация по объекту ремонта',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
NWIDTH => 80);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'SINFO',
|
||||
SCAPTION => 'Объект ремонта',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
NWIDTH => 80);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'SWRKTYPE',
|
||||
SCAPTION => 'Тип работ',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
SPARENT => 'SINFO',
|
||||
NWIDTH => 80);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'NRN',
|
||||
SCAPTION => 'Рег. номер',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
|
||||
BVISIBLE => false);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'SWORKNAME',
|
||||
SCAPTION => 'Наименование работы',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
BVISIBLE => false);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'STECHOBJCODE',
|
||||
SCAPTION => 'Код тех. объекта',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
BVISIBLE => false);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'STECHOBJNAME',
|
||||
SCAPTION => 'Наименование тех. объекта',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
BVISIBLE => false);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'SBELONG',
|
||||
SCAPTION => 'Принадлежность',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
BVISIBLE => false);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'SPRODOBJ',
|
||||
SCAPTION => 'Производственный объект',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
BVISIBLE => false);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'STECHSERV',
|
||||
SCAPTION => 'Тех. служба',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
BVISIBLE => false);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'SRESPDEP',
|
||||
SCAPTION => 'Отвественное подразделение',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
BVISIBLE => false);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'STECSERVCODE',
|
||||
SCAPTION => 'Вид ремонта',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
BVISIBLE => false);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'DDATEPLANBEG',
|
||||
SCAPTION => 'Начало работы (план)',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE,
|
||||
BVISIBLE => false);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'DDATEPLANEND',
|
||||
SCAPTION => 'Окончание работы (план)',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE,
|
||||
BVISIBLE => false);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'DDATEFACTBEG',
|
||||
SCAPTION => 'Начало работы (факт)',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE,
|
||||
BVISIBLE => false);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'DDATEFACTEND',
|
||||
SCAPTION => 'Окончание работы (факт)',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE,
|
||||
BVISIBLE => false);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'STECSRVKINDCODE',
|
||||
SCAPTION => 'Код типа работы',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
BVISIBLE => false);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'STECSRVKINDNAME',
|
||||
SCAPTION => 'Наименование типа работы',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
BVISIBLE => false);
|
||||
/* Очистка коллекций */
|
||||
PKG_CONTVALLOC1S.PURGE(RCONTAINER => YM);
|
||||
PKG_CONTVALLOC1S.PURGE(RCONTAINER => MCLR);
|
||||
@ -530,12 +530,12 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as
|
||||
else
|
||||
BEXPANDED := false;
|
||||
end if;
|
||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => '_' || TO_CHAR(Y) || '_' || TO_CHAR(M),
|
||||
SCAPTION => LPAD(TO_CHAR(M), 2, '0') || ' ' || TO_CHAR(Y),
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
BEXPANDABLE => true,
|
||||
BEXPANDED => BEXPANDED);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => '_' || TO_CHAR(Y) || '_' || TO_CHAR(M),
|
||||
SCAPTION => LPAD(TO_CHAR(M), 2, '0') || ' ' || TO_CHAR(Y),
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
BEXPANDABLE => true,
|
||||
BEXPANDED => BEXPANDED);
|
||||
/* Подсчёт кол-ва дней в месяце */
|
||||
NTOTALDAYS := TO_NUMBER(TO_CHAR(LAST_DAY(TO_DATE('01.' || LPAD(TO_CHAR(M), 2, '0') || '.' || TO_CHAR(Y),
|
||||
'dd.mm.yyyy')),
|
||||
@ -544,12 +544,11 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as
|
||||
/* Цикл по дням месяца */
|
||||
for D in 1 .. NTOTALDAYS
|
||||
loop
|
||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => '_' || TO_CHAR(Y) || '_' || TO_CHAR(M) || '_' ||
|
||||
TO_CHAR(D),
|
||||
SCAPTION => TO_CHAR(D, '99'),
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
SPARENT => '_' || TO_CHAR(Y) || '_' || TO_CHAR(M));
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => '_' || TO_CHAR(Y) || '_' || TO_CHAR(M) || '_' || TO_CHAR(D),
|
||||
SCAPTION => TO_CHAR(D, '99'),
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
SPARENT => '_' || TO_CHAR(Y) || '_' || TO_CHAR(M));
|
||||
end loop;
|
||||
end loop;
|
||||
end loop;
|
||||
@ -573,7 +572,7 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as
|
||||
if (NFROMYEAR = NTOYEAR) then
|
||||
NMS := NFROMMONTH;
|
||||
NME := NTOMONTH;
|
||||
/* Иначе вычисляем кол-во месяцев в каждом году периода отчёта */
|
||||
/* Иначе вычисляем кол-во месяцев в каждом году периода отчёта */
|
||||
else
|
||||
if (Y = NFROMYEAR) then
|
||||
NMS := NFROMMONTH;
|
||||
@ -590,14 +589,14 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as
|
||||
for M in NMS .. NME
|
||||
loop
|
||||
SPERIODNAME := '_' || TO_CHAR(Y) || '_' || TO_CHAR(M);
|
||||
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW_INFO,
|
||||
SNAME => SPERIODNAME,
|
||||
SVALUE => 'план: ' || HOURS_STR(NHOURS => TRUNC(PKG_CONTVALLOC1S.GETN(RCONTAINER => YM,
|
||||
SROWID => SPERIODNAME || '_P'),
|
||||
1)) || ' факт: ' ||
|
||||
HOURS_STR(NHOURS => TRUNC(PKG_CONTVALLOC1S.GETN(RCONTAINER => YM,
|
||||
SROWID => SPERIODNAME || '_F'),
|
||||
1)));
|
||||
PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW_INFO,
|
||||
SNAME => SPERIODNAME,
|
||||
SVALUE => 'план: ' || HOURS_STR(NHOURS => TRUNC(PKG_CONTVALLOC1S.GETN(RCONTAINER => YM,
|
||||
SROWID => SPERIODNAME || '_P'),
|
||||
1)) || ' факт: ' ||
|
||||
HOURS_STR(NHOURS => TRUNC(PKG_CONTVALLOC1S.GETN(RCONTAINER => YM,
|
||||
SROWID => SPERIODNAME || '_F'),
|
||||
1)));
|
||||
/* Добавление в коллекцию трудоёмкость план */
|
||||
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;
|
||||
/* Добавление строки с трудоёмкостью */
|
||||
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;
|
||||
/* Добавление группы с объектом ремонта */
|
||||
SCURTECHOBJ := QQ.STECHOBJNAME;
|
||||
SPRJ_GROUP_NAME := SCURTECHOBJ;
|
||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_GROUP(RDATA_GRID => RDG,
|
||||
SNAME => SPRJ_GROUP_NAME,
|
||||
SCAPTION => QQ.STECHOBJNAME,
|
||||
BEXPANDABLE => false);
|
||||
RDG_ROW_INFO := PKG_P8PANELS_VISUAL.TROW_MAKE(SGROUP => SPRJ_GROUP_NAME);
|
||||
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW_INFO, SNAME => 'SOBJINFO', SVALUE => SCURTECHOBJ);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_GROUP(RDATA_GRID => RDG,
|
||||
SNAME => SPRJ_GROUP_NAME,
|
||||
SCAPTION => QQ.STECHOBJNAME,
|
||||
BEXPANDABLE => false);
|
||||
RDG_ROW_INFO := PKG_P8PANELS_VISUAL.TDG_ROW_MAKE(SGROUP => SPRJ_GROUP_NAME);
|
||||
PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW_INFO, SNAME => 'SOBJINFO', SVALUE => SCURTECHOBJ);
|
||||
end if;
|
||||
/* Формируем имя группы для вида ремонта */
|
||||
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 (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;
|
||||
/* Добавляем строку факта */
|
||||
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)
|
||||
loop
|
||||
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW_FACT,
|
||||
SNAME => CR,
|
||||
SVALUE => PKG_CONTVALLOC1S.GETS(RCONTAINER => MCLR, SROWID => CR));
|
||||
PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW_FACT,
|
||||
SNAME => CR,
|
||||
SVALUE => PKG_CONTVALLOC1S.GETS(RCONTAINER => MCLR, SROWID => CR));
|
||||
CR := PKG_CONTVALLOC1S.NEXT_(RCONTAINER => MCLR, SROWID => CR);
|
||||
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;
|
||||
PKG_CONTVALLOC1S.PURGE(RCONTAINER => MCLR);
|
||||
/* Добвим группу для вида ремонта */
|
||||
SPRJ_GROUP_NAME := SCURTSKCODE;
|
||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_GROUP(RDATA_GRID => RDG,
|
||||
SNAME => SPRJ_GROUP_NAME,
|
||||
SCAPTION => QQ.STECSRVKINDCODE,
|
||||
BEXPANDABLE => false);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_GROUP(RDATA_GRID => RDG,
|
||||
SNAME => SPRJ_GROUP_NAME,
|
||||
SCAPTION => QQ.STECSRVKINDCODE,
|
||||
BEXPANDABLE => false);
|
||||
/* Строка плана */
|
||||
RDG_ROW_PLAN := PKG_P8PANELS_VISUAL.TROW_MAKE(SGROUP => SPRJ_GROUP_NAME);
|
||||
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW_PLAN, SNAME => 'SOBJINFO', SVALUE => QQ.STECSRVKINDCODE);
|
||||
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW_PLAN, SNAME => 'SWRKTYPE', SVALUE => 'План');
|
||||
RDG_ROW_PLAN := PKG_P8PANELS_VISUAL.TDG_ROW_MAKE(SGROUP => SPRJ_GROUP_NAME);
|
||||
PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW_PLAN, SNAME => 'SOBJINFO', SVALUE => QQ.STECSRVKINDCODE);
|
||||
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);
|
||||
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW_FACT, SNAME => 'SWRKTYPE', SVALUE => 'Факт');
|
||||
RDG_ROW_FACT := PKG_P8PANELS_VISUAL.TDG_ROW_MAKE(SGROUP => SPRJ_GROUP_NAME);
|
||||
PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW_FACT, SNAME => 'SWRKTYPE', SVALUE => 'Факт');
|
||||
/* Добавляем в заполненные группы */
|
||||
PKG_CONTVALLOC1S.PUTS(RCONTAINER => GF, SROWID => SPRJ_GROUP_NAME, SVALUE => '');
|
||||
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') =
|
||||
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,
|
||||
SROWID => SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN',
|
||||
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') =
|
||||
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,
|
||||
SROWID => SPRJ_GROUP_NAME || ' ' || SPERIODNAME || ' PLAN',
|
||||
SVALUE => '');
|
||||
@ -783,37 +782,37 @@ create or replace package body PKG_P8PANELS_EQUIPSRV as
|
||||
for M in NMS .. NME
|
||||
loop
|
||||
SPERIODNAME := '_' || TO_CHAR(Y) || '_' || TO_CHAR(M);
|
||||
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW_INFO,
|
||||
SNAME => SPERIODNAME,
|
||||
SVALUE => 'план: ' || HOURS_STR(NHOURS => TRUNC(PKG_CONTVALLOC1S.GETN(RCONTAINER => YM,
|
||||
SROWID => SPERIODNAME || '_P'),
|
||||
1)) || ' факт: ' ||
|
||||
HOURS_STR(NHOURS => TRUNC(PKG_CONTVALLOC1S.GETN(RCONTAINER => YM,
|
||||
SROWID => SPERIODNAME || '_F'),
|
||||
1)));
|
||||
PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW_INFO,
|
||||
SNAME => SPERIODNAME,
|
||||
SVALUE => 'план: ' || HOURS_STR(NHOURS => TRUNC(PKG_CONTVALLOC1S.GETN(RCONTAINER => YM,
|
||||
SROWID => SPERIODNAME || '_P'),
|
||||
1)) || ' факт: ' ||
|
||||
HOURS_STR(NHOURS => TRUNC(PKG_CONTVALLOC1S.GETN(RCONTAINER => YM,
|
||||
SROWID => SPERIODNAME || '_F'),
|
||||
1)));
|
||||
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;
|
||||
/* План для последней записи */
|
||||
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;
|
||||
/* Факт для последней записи */
|
||||
if ((RDG_ROW_FACT.RCOLS is not null) and (NROWS = 0)) then
|
||||
CR := PKG_CONTVALLOC1S.FIRST_(RCONTAINER => MCLR);
|
||||
for Z in 1 .. PKG_CONTVALLOC1S.COUNT_(RCONTAINER => MCLR)
|
||||
loop
|
||||
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW_FACT,
|
||||
SNAME => CR,
|
||||
SVALUE => PKG_CONTVALLOC1S.GETS(RCONTAINER => MCLR, SROWID => CR));
|
||||
PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW_FACT,
|
||||
SNAME => CR,
|
||||
SVALUE => PKG_CONTVALLOC1S.GETS(RCONTAINER => MCLR, SROWID => CR));
|
||||
CR := PKG_CONTVALLOC1S.NEXT_(RCONTAINER => MCLR, SROWID => CR);
|
||||
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 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 => MCLR);
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -784,8 +784,8 @@ create or replace package body PKG_P8PANELS_RRPCONFED as
|
||||
is
|
||||
NVERSION PKG_STD.TREF; -- Рег. номер версии словаря контрагентов
|
||||
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса
|
||||
RDG PKG_P8PANELS_VISUAL.TDATA_GRID; -- Описание таблицы
|
||||
RDG_ROW PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы
|
||||
RDG PKG_P8PANELS_VISUAL.TDG; -- Описание таблицы
|
||||
RDG_ROW PKG_P8PANELS_VISUAL.TDG_ROW; -- Строка таблицы
|
||||
CDG clob; -- XML данных раздела
|
||||
CXML PKG_CONTVALLOC2NS.TCONTAINER; -- Контейнер для данных XML
|
||||
RRRPCONFSCTNMRK RRPCONFSCTNMRK%rowtype; -- Рег. номер показателя
|
||||
@ -798,8 +798,8 @@ create or replace package body PKG_P8PANELS_RRPCONFED as
|
||||
/* Инициализация колонок граф показателей */
|
||||
procedure MARKS_COLUMNS_INIT
|
||||
(
|
||||
RDG in out nocopy PKG_P8PANELS_VISUAL.TDATA_GRID, -- Описание таблицы
|
||||
NRRPCONFSCTN in number -- Рег. номер раздела
|
||||
RDG in out nocopy PKG_P8PANELS_VISUAL.TDG, -- Описание таблицы
|
||||
NRRPCONFSCTN in number -- Рег. номер раздела
|
||||
)
|
||||
is
|
||||
begin
|
||||
@ -816,35 +816,35 @@ create or replace package body PKG_P8PANELS_RRPCONFED as
|
||||
order by C.CODE)
|
||||
loop
|
||||
/* Наименование графы */
|
||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'SCOL_' || REC.CODE,
|
||||
SCAPTION => REC.NAME,
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
NWIDTH => 200);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'SCOL_' || REC.CODE,
|
||||
SCAPTION => REC.NAME,
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
NWIDTH => 200);
|
||||
/* Рег. номер графы */
|
||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'NCOL_RN_' || REC.CODE,
|
||||
SCAPTION => REC.NAME || ' рег. номер',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
|
||||
BVISIBLE => false);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'NCOL_RN_' || REC.CODE,
|
||||
SCAPTION => REC.NAME || ' рег. номер',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
|
||||
BVISIBLE => false);
|
||||
/* Рег. номер показателя */
|
||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'NMARK_RN_' || REC.CODE,
|
||||
SCAPTION => REC.NAME || ' рег. номер показателя',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
|
||||
BVISIBLE => false);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'NMARK_RN_' || REC.CODE,
|
||||
SCAPTION => REC.NAME || ' рег. номер показателя',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
|
||||
BVISIBLE => false);
|
||||
/* Мнемокод показателя */
|
||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'SMARK_CODE_' || REC.CODE,
|
||||
SCAPTION => REC.NAME || ' мнемокод показателя',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
BVISIBLE => false);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'SMARK_CODE_' || REC.CODE,
|
||||
SCAPTION => REC.NAME || ' мнемокод показателя',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
BVISIBLE => false);
|
||||
/* Для составов показтелей */
|
||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'MARK_CNS_' || REC.CODE,
|
||||
SCAPTION => REC.NAME || ' состав показателя',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
BVISIBLE => false);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'MARK_CNS_' || REC.CODE,
|
||||
SCAPTION => REC.NAME || ' состав показателя',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
BVISIBLE => false);
|
||||
end loop;
|
||||
end MARKS_COLUMNS_INIT;
|
||||
|
||||
@ -897,25 +897,25 @@ create or replace package body PKG_P8PANELS_RRPCONFED as
|
||||
order by T.CODE)
|
||||
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,
|
||||
SNAME => 'SROW_NAME',
|
||||
SCAPTION => '',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
NWIDTH => 150);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'SROW_NAME',
|
||||
SCAPTION => '',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
NWIDTH => 150);
|
||||
/* Формируем структуру заголовка */
|
||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'SROW_CODE',
|
||||
SCAPTION => 'Мнемокод строки',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
BVISIBLE => false);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'SROW_CODE',
|
||||
SCAPTION => 'Мнемокод строки',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
BVISIBLE => false);
|
||||
/* Формируем структуру заголовка */
|
||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'NROW_RN',
|
||||
SCAPTION => 'Рег. номер строки',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
|
||||
BVISIBLE => false);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'NROW_RN',
|
||||
SCAPTION => 'Рег. номер строки',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
|
||||
BVISIBLE => false);
|
||||
/* Если раздел содержит показатели */
|
||||
if (S.NMARKS_EXISTS = 1) then
|
||||
/* Инициализируем колонки граф */
|
||||
@ -938,11 +938,11 @@ create or replace package body PKG_P8PANELS_RRPCONFED as
|
||||
LPAD(R.CODE, 20, '0'))
|
||||
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,
|
||||
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);
|
||||
/* Заполняем рег. номер графы */
|
||||
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,
|
||||
SNAME => 'NMARK_RN_' || C.CODE,
|
||||
NVALUE => RRRPCONFSCTNMRK.RN);
|
||||
PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW,
|
||||
SNAME => 'NMARK_RN_' || C.CODE,
|
||||
NVALUE => RRRPCONFSCTNMRK.RN);
|
||||
/* Если ошибка считывания показателя */
|
||||
if (RRRPCONFSCTNMRK.RN is not null) then
|
||||
/* Заполняем мнемокод показателя */
|
||||
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW,
|
||||
SNAME => 'SMARK_CODE_' || C.CODE,
|
||||
SVALUE => RRRPCONFSCTNMRK.CODE);
|
||||
PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW,
|
||||
SNAME => 'SMARK_CODE_' || C.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 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 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.PUTS(RCONTAINER => CXML, NTABID => S.RNUM, SROWID => 'CODE', SVALUE => S.SCODE);
|
||||
|
@ -257,11 +257,11 @@ create or replace package body PKG_P8PANELS_SAMPLES as
|
||||
is
|
||||
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса
|
||||
NIDENT PKG_STD.TREF := GEN_IDENT(); -- Идентификатор отбора
|
||||
RF PKG_P8PANELS_VISUAL.TFILTERS; -- Фильтры
|
||||
RO PKG_P8PANELS_VISUAL.TORDERS; -- Сортировки
|
||||
RDG PKG_P8PANELS_VISUAL.TDATA_GRID; -- Описание таблицы
|
||||
RAGN_TYPES PKG_P8PANELS_VISUAL.TCOL_VALS; -- Предопределенные значения "Типа контрагентов"
|
||||
RDG_ROW PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы
|
||||
RF PKG_P8PANELS_VISUAL.TDG_FILTERS; -- Фильтры
|
||||
RO PKG_P8PANELS_VISUAL.TDG_ORDERS; -- Сортировки
|
||||
RDG PKG_P8PANELS_VISUAL.TDG; -- Описание таблицы
|
||||
RAGN_TYPES PKG_P8PANELS_VISUAL.TDG_COL_VALS; -- Предопределенные значения "Типа контрагентов"
|
||||
RDG_ROW PKG_P8PANELS_VISUAL.TDG_ROW; -- Строка таблицы
|
||||
NROW_FROM PKG_STD.TREF; -- Номер строки с
|
||||
NROW_TO PKG_STD.TREF; -- Номер строки по
|
||||
CSQL clob; -- Буфер для запроса
|
||||
@ -272,71 +272,71 @@ create or replace package body PKG_P8PANELS_SAMPLES as
|
||||
NAGNTYPE PKG_STD.TREF; -- Буфер для "Типа"
|
||||
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,
|
||||
NPAGE_SIZE => NPAGE_SIZE,
|
||||
NROW_FROM => NROW_FROM,
|
||||
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,
|
||||
SNAME => 'SAGNABBR',
|
||||
SCAPTION => 'Мнемокод',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
SCOND_FROM => 'AgentAbbr',
|
||||
BVISIBLE => true,
|
||||
BORDER => true,
|
||||
BFILTER => true,
|
||||
NWIDTH => 150);
|
||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'SAGNINFO',
|
||||
SCAPTION => 'Сведения',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
BVISIBLE => true,
|
||||
BORDER => false,
|
||||
BFILTER => false,
|
||||
BEXPANDABLE => true,
|
||||
NWIDTH => 300);
|
||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'SAGNNAME',
|
||||
SCAPTION => 'Наименование',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
SCOND_FROM => 'AgentName',
|
||||
BVISIBLE => true,
|
||||
BORDER => true,
|
||||
BFILTER => true,
|
||||
SPARENT => 'SAGNINFO',
|
||||
NWIDTH => 200);
|
||||
PKG_P8PANELS_VISUAL.TCOL_VALS_ADD(RCOL_VALS => RAGN_TYPES, NVALUE => 0);
|
||||
PKG_P8PANELS_VISUAL.TCOL_VALS_ADD(RCOL_VALS => RAGN_TYPES, NVALUE => 1);
|
||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'NAGNTYPE',
|
||||
SCAPTION => 'Тип',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
|
||||
SCOND_FROM => 'AgentType',
|
||||
BVISIBLE => true,
|
||||
BORDER => true,
|
||||
BFILTER => true,
|
||||
SPARENT => 'SAGNINFO',
|
||||
NWIDTH => 100,
|
||||
RCOL_VALS => RAGN_TYPES,
|
||||
SHINT => 'В Системе бывают контрагенты двух типов:<br>' ||
|
||||
'<b style="color:blue">Юридическое лицо</b> - организация, которая имеет в собственности, хозяйственном ведении ' ||
|
||||
'или оперативном управлении обособленное имущество, отвечает по своим обязательствам этим имуществом, может от своего ' ||
|
||||
'имени приобретать и осуществлять имущественные и личные неимущественные права, отвечать по своим обязанностям.<br>' ||
|
||||
'<b style="color:green">Физическое лицо</b> - субъект правовых отношений, представляющий собой одного человека.');
|
||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'SFULLNAME',
|
||||
SCAPTION => 'Полное наименование',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR);
|
||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'SAGNIDNUMB',
|
||||
SCAPTION => 'ИНН',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'SAGNABBR',
|
||||
SCAPTION => 'Мнемокод',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
SCOND_FROM => 'AgentAbbr',
|
||||
BVISIBLE => true,
|
||||
BORDER => true,
|
||||
BFILTER => true,
|
||||
NWIDTH => 150);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'SAGNINFO',
|
||||
SCAPTION => 'Сведения',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
BVISIBLE => true,
|
||||
BORDER => false,
|
||||
BFILTER => false,
|
||||
BEXPANDABLE => true,
|
||||
NWIDTH => 300);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'SAGNNAME',
|
||||
SCAPTION => 'Наименование',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
SCOND_FROM => 'AgentName',
|
||||
BVISIBLE => true,
|
||||
BORDER => true,
|
||||
BFILTER => true,
|
||||
SPARENT => 'SAGNINFO',
|
||||
NWIDTH => 200);
|
||||
PKG_P8PANELS_VISUAL.TDG_COL_VALS_ADD(RCOL_VALS => RAGN_TYPES, NVALUE => 0);
|
||||
PKG_P8PANELS_VISUAL.TDG_COL_VALS_ADD(RCOL_VALS => RAGN_TYPES, NVALUE => 1);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'NAGNTYPE',
|
||||
SCAPTION => 'Тип',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
|
||||
SCOND_FROM => 'AgentType',
|
||||
BVISIBLE => true,
|
||||
BORDER => true,
|
||||
BFILTER => true,
|
||||
SPARENT => 'SAGNINFO',
|
||||
NWIDTH => 100,
|
||||
RCOL_VALS => RAGN_TYPES,
|
||||
SHINT => 'В Системе бывают контрагенты двух типов:<br>' ||
|
||||
'<b style="color:blue">Юридическое лицо</b> - организация, которая имеет в собственности, хозяйственном ведении ' ||
|
||||
'или оперативном управлении обособленное имущество, отвечает по своим обязательствам этим имуществом, может от своего ' ||
|
||||
'имени приобретать и осуществлять имущественные и личные неимущественные права, отвечать по своим обязанностям.<br>' ||
|
||||
'<b style="color:green">Физическое лицо</b> - субъект правовых отношений, представляющий собой одного человека.');
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'SFULLNAME',
|
||||
SCAPTION => 'Полное наименование',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||
SNAME => 'SAGNIDNUMB',
|
||||
SCAPTION => 'ИНН',
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR);
|
||||
/* Обходим данные */
|
||||
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 => ' 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,
|
||||
NCOMPANY => NCOMPANY,
|
||||
SUNIT => 'AGNLIST',
|
||||
SPROCEDURE => 'P_AGNLIST_BASE_COND',
|
||||
RDATA_GRID => RDG,
|
||||
RFILTERS => RF);
|
||||
PKG_P8PANELS_VISUAL.TDG_FILTERS_SET_QUERY(NIDENT => NIDENT,
|
||||
NCOMPANY => NCOMPANY,
|
||||
SUNIT => 'AGNLIST',
|
||||
SPROCEDURE => 'P_AGNLIST_BASE_COND',
|
||||
RDATA_GRID => RDG,
|
||||
RFILTERS => RF);
|
||||
/* Разбираем его */
|
||||
ICURSOR := PKG_SQL_DML.OPEN_CURSOR(SWHAT => 'SELECT');
|
||||
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_NUM(ICURSOR => ICURSOR, IPOSITION => 3);
|
||||
PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 4);
|
||||
PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 5);
|
||||
PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 5);
|
||||
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 6);
|
||||
/* Делаем выборку */
|
||||
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
|
||||
SGROUP := 'JUR';
|
||||
SAGNINFO := SAGNNAME || ', ЮЛ';
|
||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_GROUP(RDATA_GRID => RDG,
|
||||
SNAME => SGROUP,
|
||||
SCAPTION => 'Юридические лица',
|
||||
BEXPANDABLE => true,
|
||||
BEXPANDED => false);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_GROUP(RDATA_GRID => RDG,
|
||||
SNAME => SGROUP,
|
||||
SCAPTION => 'Юридические лица',
|
||||
BEXPANDABLE => true,
|
||||
BEXPANDED => false);
|
||||
else
|
||||
SGROUP := 'PERS';
|
||||
SAGNINFO := SAGNNAME || ', ФЛ';
|
||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_GROUP(RDATA_GRID => RDG,
|
||||
SNAME => SGROUP,
|
||||
SCAPTION => 'Физические лица',
|
||||
BEXPANDABLE => true,
|
||||
BEXPANDED => false);
|
||||
PKG_P8PANELS_VISUAL.TDG_ADD_GROUP(RDATA_GRID => RDG,
|
||||
SNAME => SGROUP,
|
||||
SCAPTION => 'Физические лица',
|
||||
BEXPANDABLE => true,
|
||||
BEXPANDED => false);
|
||||
end if;
|
||||
RDG_ROW := PKG_P8PANELS_VISUAL.TROW_MAKE(SGROUP => SGROUP);
|
||||
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SAGNABBR', ICURSOR => ICURSOR, NPOSITION => 1);
|
||||
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SAGNINFO', SVALUE => SAGNINFO);
|
||||
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SAGNNAME', SVALUE => SAGNNAME);
|
||||
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NAGNTYPE', NVALUE => NAGNTYPE);
|
||||
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SFULLNAME', ICURSOR => ICURSOR, NPOSITION => 4);
|
||||
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SAGNIDNUMB', ICURSOR => ICURSOR, NPOSITION => 5);
|
||||
RDG_ROW := PKG_P8PANELS_VISUAL.TDG_ROW_MAKE(SGROUP => SGROUP);
|
||||
PKG_P8PANELS_VISUAL.TDG_ROW_ADD_CUR_COLS(RROW => RDG_ROW,
|
||||
SNAME => 'SAGNABBR',
|
||||
ICURSOR => ICURSOR,
|
||||
NPOSITION => 1);
|
||||
PKG_P8PANELS_VISUAL.TDG_ROW_ADD_COL(RROW => RDG_ROW, SNAME => 'SAGNINFO', SVALUE => SAGNINFO);
|
||||
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;
|
||||
/* Освобождаем курсор */
|
||||
PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR);
|
||||
@ -429,7 +441,7 @@ create or replace package body PKG_P8PANELS_SAMPLES as
|
||||
raise;
|
||||
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;
|
||||
|
||||
/* График */
|
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user