БД: Панель финансов проекта - атрибуты финансирования договора соисполнителя этапа
This commit is contained in:
parent
86a8b43c8c
commit
04a9e5c9b4
@ -9,17 +9,34 @@
|
|||||||
|
|
||||||
import React, { useState, useCallback, useEffect, useContext } from "react"; //Классы React
|
import React, { useState, useCallback, useEffect, useContext } from "react"; //Классы React
|
||||||
import PropTypes from "prop-types"; //Контроль свойств компонента
|
import PropTypes from "prop-types"; //Контроль свойств компонента
|
||||||
import { Box, Stack, Grid, Paper, Table, TableBody, TableRow, TableCell, Typography, Button, Link } from "@mui/material"; //Интерфейсные компоненты
|
import { Box, Stack, Grid, Paper, Table, TableBody, TableRow, TableCell, Typography, Button, Link, Icon } from "@mui/material"; //Интерфейсные компоненты
|
||||||
import { hasValue, formatDateRF, formatNumberRFCurrency, object2Base64XML } from "../../core/utils"; //Вспомогательные процедуры и функции
|
import { hasValue, formatDateRF, formatNumberRFCurrency, object2Base64XML } from "../../core/utils"; //Вспомогательные процедуры и функции
|
||||||
|
import { TEXTS } from "../../../app.text"; //Тектовые ресурсы и константы
|
||||||
import { P8PDataGrid, P8P_DATA_GRID_SIZE, P8P_DATA_GRID_FILTER_SHAPE } from "../../components/p8p_data_grid"; //Таблица данных
|
import { P8PDataGrid, P8P_DATA_GRID_SIZE, P8P_DATA_GRID_FILTER_SHAPE } from "../../components/p8p_data_grid"; //Таблица данных
|
||||||
import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером
|
import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером
|
||||||
import { ApplicationСtx } from "../../context/application"; //Контекст приложения
|
import { ApplicationСtx } from "../../context/application"; //Контекст приложения
|
||||||
|
import { MessagingСtx } from "../../context/messaging"; //Контекст сообщений
|
||||||
import { P8P_DATA_GRID_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения
|
import { P8P_DATA_GRID_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения
|
||||||
|
|
||||||
//-----------------------
|
//-----------------------
|
||||||
//Вспомогательные функции
|
//Вспомогательные функции
|
||||||
//-----------------------
|
//-----------------------
|
||||||
|
|
||||||
|
//Формирование значения для контрольных колонок
|
||||||
|
const formatCtrlValue = (value, addText = false) => {
|
||||||
|
if (hasValue(value)) {
|
||||||
|
const [text, icon, color] = value == 0 ? ["В норме", "done", "green"] : ["Требует внимания", "error", "red"];
|
||||||
|
return (
|
||||||
|
<Stack direction="row" gap={0.5} alignItems="center" justifyContent="center">
|
||||||
|
<Icon title={text} sx={{ color }}>
|
||||||
|
{icon}
|
||||||
|
</Icon>
|
||||||
|
{addText == true ? text : null}
|
||||||
|
</Stack>
|
||||||
|
);
|
||||||
|
} else return value;
|
||||||
|
};
|
||||||
|
|
||||||
//Форматирование значений колонок
|
//Форматирование значений колонок
|
||||||
const valueFormatter = ({ value, columnDef }) => {
|
const valueFormatter = ({ value, columnDef }) => {
|
||||||
switch (columnDef.name) {
|
switch (columnDef.name) {
|
||||||
@ -27,6 +44,8 @@ const valueFormatter = ({ value, columnDef }) => {
|
|||||||
case "DCSTAGE_BEGIN_DATE":
|
case "DCSTAGE_BEGIN_DATE":
|
||||||
case "DCSTAGE_END_DATE":
|
case "DCSTAGE_END_DATE":
|
||||||
return formatDateRF(value);
|
return formatDateRF(value);
|
||||||
|
case "NCTRL_FIN":
|
||||||
|
return formatCtrlValue(value, true);
|
||||||
}
|
}
|
||||||
return value;
|
return value;
|
||||||
};
|
};
|
||||||
@ -54,11 +73,24 @@ const dataCellRender = ({ row, columnDef }, pOnlineShowDocument) => {
|
|||||||
</Link>
|
</Link>
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
|
case "NCTRL_FIN":
|
||||||
|
return {
|
||||||
|
data: (
|
||||||
|
<Stack sx={{ justifyContent: "right" }} direction="row" spacing={1}>
|
||||||
|
{row[columnDef.name] === 1 ? (
|
||||||
|
<div style={{ color: "red", display: "flex", alignItems: "center" }} title="Счетов к оплате">
|
||||||
|
{formatNumberRFCurrency(row["NPAY_IN_REST"])}
|
||||||
|
</div>
|
||||||
|
) : null}
|
||||||
|
{formatCtrlValue(row[columnDef.name], false)}
|
||||||
|
</Stack>
|
||||||
|
)
|
||||||
|
};
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
//Генерация представления расширения строки
|
//Генерация представления расширения строки
|
||||||
const rowExpandRender = ({ columnsDef, row }, pOnlineShowDocument) => {
|
const rowExpandRender = ({ columnsDef, row }, pOnlineShowDocument, showStageContractPaymentAccountsIn, showStageContractPayNotes) => {
|
||||||
const cardColumns = columnsDef.filter(
|
const cardColumns = columnsDef.filter(
|
||||||
columnDef =>
|
columnDef =>
|
||||||
columnDef.visible == false &&
|
columnDef.visible == false &&
|
||||||
@ -95,17 +127,22 @@ const rowExpandRender = ({ columnsDef, row }, pOnlineShowDocument) => {
|
|||||||
</Typography>
|
</Typography>
|
||||||
</TableCell>
|
</TableCell>
|
||||||
<TableCell sx={{ paddingLeft: 0 }}>
|
<TableCell sx={{ paddingLeft: 0 }}>
|
||||||
{hasValue(row[`SLNK_UNIT_${cardColumn.name}`]) && hasValue(row[`NLNK_DOCUMENT_${cardColumn.name}`]) ? (
|
{(hasValue(row[`SLNK_UNIT_${cardColumn.name}`]) && hasValue(row[`NLNK_DOCUMENT_${cardColumn.name}`])) ||
|
||||||
|
["NPAY_IN", "NFIN_OUT"].includes(cardColumn.name) ? (
|
||||||
<Link
|
<Link
|
||||||
component="button"
|
component="button"
|
||||||
variant="body2"
|
variant="body2"
|
||||||
align="left"
|
align="left"
|
||||||
underline="always"
|
underline="always"
|
||||||
onClick={() =>
|
onClick={() =>
|
||||||
pOnlineShowDocument({
|
cardColumn.name === "NPAY_IN"
|
||||||
unitCode: row[`SLNK_UNIT_${cardColumn.name}`],
|
? showStageContractPaymentAccountsIn(row.NRN)
|
||||||
document: row[`NLNK_DOCUMENT_${cardColumn.name}`]
|
: cardColumn.name === "NFIN_OUT"
|
||||||
})
|
? showStageContractPayNotes(row.NRN)
|
||||||
|
: pOnlineShowDocument({
|
||||||
|
unitCode: row[`SLNK_UNIT_${cardColumn.name}`],
|
||||||
|
document: row[`NLNK_DOCUMENT_${cardColumn.name}`]
|
||||||
|
})
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
<Typography variant="h6" color="text.secondary">
|
<Typography variant="h6" color="text.secondary">
|
||||||
@ -151,7 +188,10 @@ const StageContracts = ({ stage, filters }) => {
|
|||||||
const { executeStored, SERV_DATA_TYPE_CLOB } = useContext(BackEndСtx);
|
const { executeStored, SERV_DATA_TYPE_CLOB } = useContext(BackEndСtx);
|
||||||
|
|
||||||
//Подключение к контексту приложения
|
//Подключение к контексту приложения
|
||||||
const { pOnlineShowDocument, configSystemPageSize } = useContext(ApplicationСtx);
|
const { pOnlineShowDocument, pOnlineShowUnit, configSystemPageSize } = useContext(ApplicationСtx);
|
||||||
|
|
||||||
|
//Подключение к контексту сообщений
|
||||||
|
const { showMsgErr } = useContext(MessagingСtx);
|
||||||
|
|
||||||
//Загрузка данных этапов с сервера
|
//Загрузка данных этапов с сервера
|
||||||
const loadStageContracts = useCallback(async () => {
|
const loadStageContracts = useCallback(async () => {
|
||||||
@ -192,6 +232,26 @@ const StageContracts = ({ stage, filters }) => {
|
|||||||
SERV_DATA_TYPE_CLOB
|
SERV_DATA_TYPE_CLOB
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
//Отображение выходящих счетов на оплату от соисполнителя этапа
|
||||||
|
const showStageContractPaymentAccountsIn = async contract => {
|
||||||
|
const data = await executeStored({
|
||||||
|
stored: "PKG_P8PANELS_PROJECTS.STAGE_CONTRACTS_SELECT_PAY_IN",
|
||||||
|
args: { NPROJECTSTAGEPF: contract }
|
||||||
|
});
|
||||||
|
if (data.NIDENT) pOnlineShowUnit({ unitCode: "PaymentAccountsIn", inputParameters: [{ name: "in_SelectList_Ident", value: data.NIDENT }] });
|
||||||
|
else showMsgErr(TEXTS.NO_DATA_FOUND);
|
||||||
|
};
|
||||||
|
|
||||||
|
//Отображение фактических платежей соисполнителю этапа
|
||||||
|
const showStageContractPayNotes = async contract => {
|
||||||
|
const data = await executeStored({
|
||||||
|
stored: "PKG_P8PANELS_PROJECTS.STAGE_CONTRACTS_SELECT_FIN_OUT",
|
||||||
|
args: { NPROJECTSTAGEPF: contract }
|
||||||
|
});
|
||||||
|
if (data.NIDENT) pOnlineShowUnit({ unitCode: "PayNotes", inputParameters: [{ name: "in_SelectList_Ident", value: data.NIDENT }] });
|
||||||
|
else showMsgErr(TEXTS.NO_DATA_FOUND);
|
||||||
|
};
|
||||||
|
|
||||||
//При изменении состояния фильтра
|
//При изменении состояния фильтра
|
||||||
const handleFilterChanged = ({ filters }) => setStageContractsDataGrid(pv => ({ ...pv, filters, pageNumber: 1, reload: true }));
|
const handleFilterChanged = ({ filters }) => setStageContractsDataGrid(pv => ({ ...pv, filters, pageNumber: 1, reload: true }));
|
||||||
|
|
||||||
@ -220,7 +280,9 @@ const StageContracts = ({ stage, filters }) => {
|
|||||||
reloading={stageContractsDataGrid.reload}
|
reloading={stageContractsDataGrid.reload}
|
||||||
expandable={true}
|
expandable={true}
|
||||||
dataCellRender={prms => dataCellRender(prms, pOnlineShowDocument)}
|
dataCellRender={prms => dataCellRender(prms, pOnlineShowDocument)}
|
||||||
rowExpandRender={prms => rowExpandRender(prms, pOnlineShowDocument)}
|
rowExpandRender={prms =>
|
||||||
|
rowExpandRender(prms, pOnlineShowDocument, showStageContractPaymentAccountsIn, showStageContractPayNotes)
|
||||||
|
}
|
||||||
valueFormatter={valueFormatter}
|
valueFormatter={valueFormatter}
|
||||||
onOrderChanged={handleOrderChanged}
|
onOrderChanged={handleOrderChanged}
|
||||||
onFilterChanged={handleFilterChanged}
|
onFilterChanged={handleFilterChanged}
|
||||||
|
@ -98,20 +98,20 @@ const headCellRender = ({ columnDef }) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
//Генерация представления ячейки c данными
|
//Генерация представления ячейки c данными
|
||||||
const dataCellRender = ({ row, columnDef }, showStageArts) => {
|
const dataCellRender = ({ row, columnDef }, showStageArts, showStageContracts) => {
|
||||||
switch (columnDef.name) {
|
switch (columnDef.name) {
|
||||||
case "NSTATE":
|
case "NSTATE":
|
||||||
return {
|
return {
|
||||||
cellProps: { align: "center" },
|
cellProps: { align: "center" },
|
||||||
data: formatStageStatusValue(row[columnDef.name], false)
|
data: formatStageStatusValue(row[columnDef.name], false)
|
||||||
};
|
};
|
||||||
case "NCTRL_FIN":
|
|
||||||
case "NCTRL_COEXEC":
|
case "NCTRL_COEXEC":
|
||||||
case "NCTRL_ACT":
|
case "NCTRL_ACT":
|
||||||
return {
|
return {
|
||||||
cellProps: { align: "center" },
|
cellProps: { align: "center" },
|
||||||
data: formatCtrlValue(row[columnDef.name], false)
|
data: formatCtrlValue(row[columnDef.name], false)
|
||||||
};
|
};
|
||||||
|
case "NCTRL_FIN":
|
||||||
case "NCTRL_CONTR":
|
case "NCTRL_CONTR":
|
||||||
case "NCTRL_COST":
|
case "NCTRL_COST":
|
||||||
return {
|
return {
|
||||||
@ -119,7 +119,11 @@ const dataCellRender = ({ row, columnDef }, showStageArts) => {
|
|||||||
data: hasValue(row[columnDef.name]) ? (
|
data: hasValue(row[columnDef.name]) ? (
|
||||||
<IconButton
|
<IconButton
|
||||||
onClick={() =>
|
onClick={() =>
|
||||||
showStageArts({ stage: row.NRN, stageNumb: row.SNUMB, filters: [{ name: columnDef.name, from: row[columnDef.name] }] })
|
(columnDef.name === "NCTRL_FIN" ? showStageContracts : showStageArts)({
|
||||||
|
stage: row.NRN,
|
||||||
|
stageNumb: row.SNUMB,
|
||||||
|
filters: [{ name: columnDef.name, from: row[columnDef.name] }]
|
||||||
|
})
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
{formatCtrlValue(row[columnDef.name], false)}
|
{formatCtrlValue(row[columnDef.name], false)}
|
||||||
@ -353,7 +357,7 @@ const Stages = ({ project, projectName, filters }) => {
|
|||||||
reloading={stagesDataGrid.reload}
|
reloading={stagesDataGrid.reload}
|
||||||
expandable={true}
|
expandable={true}
|
||||||
headCellRender={headCellRender}
|
headCellRender={headCellRender}
|
||||||
dataCellRender={prms => dataCellRender(prms, showStageArts)}
|
dataCellRender={prms => dataCellRender(prms, showStageArts, showStageContracts)}
|
||||||
rowExpandRender={prms =>
|
rowExpandRender={prms =>
|
||||||
rowExpandRender(prms, pOnlineShowDocument, showStageArts, showStageContracts, showStagePayNotes, showStageCostNotes)
|
rowExpandRender(prms, pOnlineShowDocument, showStageArts, showStageContracts, showStagePayNotes, showStageCostNotes)
|
||||||
}
|
}
|
||||||
|
@ -123,7 +123,7 @@ create or replace package PKG_P8PANELS_PROJECTS as
|
|||||||
function STAGES_GET_CTRL_FIN
|
function STAGES_GET_CTRL_FIN
|
||||||
(
|
(
|
||||||
NRN in number -- Рег. номер этапа проекта
|
NRN in number -- Рег. номер этапа проекта
|
||||||
) return number; -- Состояние (0 - без отклонений, 1 - есть отклонения)
|
) return number; -- Состояние (null - не определено, 0 - без отклонений, 1 - есть отклонения)
|
||||||
|
|
||||||
/* Получение состояния контрактации этапа проекта */
|
/* Получение состояния контрактации этапа проекта */
|
||||||
function STAGES_GET_CTRL_CONTR
|
function STAGES_GET_CTRL_CONTR
|
||||||
@ -239,6 +239,37 @@ create or replace package PKG_P8PANELS_PROJECTS as
|
|||||||
/* Список договоров этапа проекта */
|
/* Список договоров этапа проекта */
|
||||||
procedure STAGE_CONTRACTS_COND;
|
procedure STAGE_CONTRACTS_COND;
|
||||||
|
|
||||||
|
/* Подбор входящих счетов на оплату соисполнителя этапа проекта */
|
||||||
|
procedure STAGE_CONTRACTS_SELECT_PAY_IN
|
||||||
|
(
|
||||||
|
NPROJECTSTAGEPF in number, -- Рег. номер соисполнителя этапа проекта
|
||||||
|
NIDENT out number -- Идентификатор буфера подобранных (списка отмеченных записей, null - не найдено)
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Подбор платежей финансирования соисполнителя этапа проекта */
|
||||||
|
procedure STAGE_CONTRACTS_SELECT_FIN_OUT
|
||||||
|
(
|
||||||
|
NPROJECTSTAGEPF in number, -- Рег. номер соисполнителя этапа проекта
|
||||||
|
NIDENT out number -- Идентификатор буфера подобранных (списка отмеченных записей, null - не найдено)
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Получение состояния финансирования по договору соисполнителя этапа проекта */
|
||||||
|
function STAGE_CONTRACTS_GET_CTRL_FIN
|
||||||
|
(
|
||||||
|
NPROJECTSTAGEPF in number -- Рег. номер соисполнителя этапа проекта
|
||||||
|
) return number; -- Состояние (null - не определено, 0 - без отклонений, 1 - есть отклонения)
|
||||||
|
|
||||||
|
/* Получение сведений по договору соисполнителя этапа проекта */
|
||||||
|
procedure STAGE_CONTRACTS_GET
|
||||||
|
(
|
||||||
|
NPROJECTSTAGEPF in number, -- Рег. номер соисполнителя этапа проекта
|
||||||
|
NINC_FIN in number := 0, -- Включить сведения о финансированеии (0 - нет, 1 - да)
|
||||||
|
NPAY_IN out number, -- Сведения о финансировании - сумма акцептованных счетов на оплату
|
||||||
|
NFIN_OUT out number, -- Сведения о финансировании - сумма оплаченных счетов на оплату
|
||||||
|
NPAY_IN_REST out number, -- Сведения о финансировании - сумма оставшихся к оплате счетов на оплату
|
||||||
|
NCTRL_FIN out number -- Сведения о финансировани - состояние (null - не определено, 0 - без отклонений, 1 - есть отклонения)
|
||||||
|
);
|
||||||
|
|
||||||
/* Список договоров этапа проекта */
|
/* Список договоров этапа проекта */
|
||||||
procedure STAGE_CONTRACTS_LIST
|
procedure STAGE_CONTRACTS_LIST
|
||||||
(
|
(
|
||||||
@ -421,25 +452,38 @@ text="ПРАВА ДОСТУПА!!!!"
|
|||||||
/* Получение состояния финансирования проекта */
|
/* Получение состояния финансирования проекта */
|
||||||
function GET_CTRL_FIN
|
function GET_CTRL_FIN
|
||||||
(
|
(
|
||||||
NRN in number -- Рег. номер проекта
|
NRN in number -- Рег. номер проекта
|
||||||
) return number -- Состояние (null - не определено, 0 - без отклонений, 1 - есть отклонения)
|
) return number -- Состояние (null - не определено, 0 - без отклонений, 1 - есть отклонения)
|
||||||
is
|
is
|
||||||
BFOUND boolean := false; -- Флаг наличия этапов
|
NSTAGE_CTRL PKG_STD.TNUMBER; -- Состояние этапа
|
||||||
|
NCNT_STAGES PKG_STD.TNUMBER :=0; -- Количество этапов
|
||||||
|
NCNT_NULL PKG_STD.TNUMBER :=0; -- Количество "безконтрольных" этапов
|
||||||
begin
|
begin
|
||||||
/* Обходим этапы */
|
/* Обходим этапы */
|
||||||
for C in (select PS.RN from PROJECTSTAGE PS where PS.PRN = NRN)
|
for C in (select PS.RN from PROJECTSTAGE PS where PS.PRN = NRN)
|
||||||
loop
|
loop
|
||||||
/* Выставим флаг наличия этапов */
|
/* Увеличим счётчик этапов */
|
||||||
BFOUND := true;
|
NCNT_STAGES := NCNT_STAGES + 1;
|
||||||
|
/* Получим состояние этапа */
|
||||||
|
NSTAGE_CTRL := STAGES_GET_CTRL_FIN(NRN => C.RN);
|
||||||
|
/* Подсчитаем количество "безконтрольных" */
|
||||||
|
if (NSTAGE_CTRL is null) then
|
||||||
|
NCNT_NULL := NCNT_NULL + 1;
|
||||||
|
end if;
|
||||||
/* Если у этапа есть отклонение - оно есть и у проекта */
|
/* Если у этапа есть отклонение - оно есть и у проекта */
|
||||||
if (STAGES_GET_CTRL_FIN(NRN => C.RN) = 1) then
|
if (NSTAGE_CTRL = 1) then
|
||||||
return 1;
|
return 1;
|
||||||
end if;
|
end if;
|
||||||
end loop;
|
end loop;
|
||||||
|
/* Если ни один этап не подлежит контролю - то и состояние проекта тоже */
|
||||||
|
if (NCNT_NULL = NCNT_STAGES) then
|
||||||
|
return null;
|
||||||
|
end if;
|
||||||
/* Если мы здесь - отклонений нет */
|
/* Если мы здесь - отклонений нет */
|
||||||
if (BFOUND) then
|
if (NCNT_STAGES > 0) then
|
||||||
return 0;
|
return 0;
|
||||||
else
|
else
|
||||||
|
/* Нет этапов и нет контроля */
|
||||||
return null;
|
return null;
|
||||||
end if;
|
end if;
|
||||||
end GET_CTRL_FIN;
|
end GET_CTRL_FIN;
|
||||||
@ -801,7 +845,7 @@ text="ПРАВА ДОСТУПА!!!!"
|
|||||||
PKG_P8PANELS_VISUAL.TCOL_VALS_ADD(RCOL_VALS => RCOL_VALS, NVALUE => 1);
|
PKG_P8PANELS_VISUAL.TCOL_VALS_ADD(RCOL_VALS => RCOL_VALS, NVALUE => 1);
|
||||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||||
SNAME => 'NCTRL_FIN',
|
SNAME => 'NCTRL_FIN',
|
||||||
SCAPTION => 'Финансирование',
|
SCAPTION => 'Финансирование (исходящее)',
|
||||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
|
||||||
SCOND_FROM => 'EDCTRL_FIN',
|
SCOND_FROM => 'EDCTRL_FIN',
|
||||||
BORDER => true,
|
BORDER => true,
|
||||||
@ -1203,7 +1247,7 @@ text="ПРАВА ДОСТУПА!!!!"
|
|||||||
NRES PKG_STD.TNUMBER; -- Буфер для рузультата
|
NRES PKG_STD.TNUMBER; -- Буфер для рузультата
|
||||||
begin
|
begin
|
||||||
/* Суммируем фактические платежи нужного направления по лицевому счёту затрат этапа */
|
/* Суммируем фактические платежи нужного направления по лицевому счёту затрат этапа */
|
||||||
select COALESCE(sum(PN.PAY_SUM * (PN.CURR_RATE_BASE/PN.CURR_RATE)), 0)
|
select COALESCE(sum(PN.PAY_SUM * (PN.CURR_RATE_BASE / PN.CURR_RATE)), 0)
|
||||||
into NRES
|
into NRES
|
||||||
from PAYNOTES PN,
|
from PAYNOTES PN,
|
||||||
DICTOPER O
|
DICTOPER O
|
||||||
@ -1244,11 +1288,40 @@ text="ПРАВА ДОСТУПА!!!!"
|
|||||||
/* Получение состояния финансирования этапа проекта */
|
/* Получение состояния финансирования этапа проекта */
|
||||||
function STAGES_GET_CTRL_FIN
|
function STAGES_GET_CTRL_FIN
|
||||||
(
|
(
|
||||||
NRN in number -- Рег. номер этапа проекта
|
NRN in number -- Рег. номер этапа проекта
|
||||||
) return number -- Состояние (0 - без отклонений, 1 - есть отклонения)
|
) return number -- Состояние (null - не определено, 0 - без отклонений, 1 - есть отклонения)
|
||||||
is
|
is
|
||||||
|
NCONTR_CTRL PKG_STD.TNUMBER; -- Состояние соисполнителя этапа
|
||||||
|
NCNT_CONTR PKG_STD.TNUMBER :=0; -- Количество соисполнителей этапа
|
||||||
|
NCNT_NULL PKG_STD.TNUMBER :=0; -- Количество "безконтрольных" соисполнителей этапа
|
||||||
begin
|
begin
|
||||||
return 0;
|
/* Обходим соисполнителей этапа */
|
||||||
|
for C in (select PSPF.RN from PROJECTSTAGEPF PSPF where PSPF.PRN = NRN)
|
||||||
|
loop
|
||||||
|
/* Увеличим счётчик соисполнителей */
|
||||||
|
NCNT_CONTR := NCNT_CONTR + 1;
|
||||||
|
/* Получим состояние соисполнителя */
|
||||||
|
NCONTR_CTRL := STAGE_CONTRACTS_GET_CTRL_FIN(NPROJECTSTAGEPF => C.RN);
|
||||||
|
/* Подсчитаем количество "безконтрольных" */
|
||||||
|
if (NCONTR_CTRL is null) then
|
||||||
|
NCNT_NULL := NCNT_NULL + 1;
|
||||||
|
end if;
|
||||||
|
/* Если у соисполнителя есть отклонение - оно есть и у этапа */
|
||||||
|
if (NCONTR_CTRL = 1) then
|
||||||
|
return 1;
|
||||||
|
end if;
|
||||||
|
end loop;
|
||||||
|
/* Если ни один соисполнитель не подлежит контролю - то и состояние жтапа тоже */
|
||||||
|
if (NCNT_NULL = NCNT_CONTR) then
|
||||||
|
return null;
|
||||||
|
end if;
|
||||||
|
/* Если мы здесь - отклонений нет */
|
||||||
|
if (NCNT_CONTR > 0) then
|
||||||
|
return 0;
|
||||||
|
else
|
||||||
|
/* Нет соисполнителей и нет контроля */
|
||||||
|
return null;
|
||||||
|
end if;
|
||||||
end STAGES_GET_CTRL_FIN;
|
end STAGES_GET_CTRL_FIN;
|
||||||
|
|
||||||
/* Получение состояния контрактации этапа проекта */
|
/* Получение состояния контрактации этапа проекта */
|
||||||
@ -1567,7 +1640,7 @@ text="ПРАВА ДОСТУПА!!!!"
|
|||||||
PKG_P8PANELS_VISUAL.TCOL_VALS_ADD(RCOL_VALS => RCOL_VALS, NVALUE => 1);
|
PKG_P8PANELS_VISUAL.TCOL_VALS_ADD(RCOL_VALS => RCOL_VALS, NVALUE => 1);
|
||||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||||
SNAME => 'NCTRL_FIN',
|
SNAME => 'NCTRL_FIN',
|
||||||
SCAPTION => 'Финансирование',
|
SCAPTION => 'Финансирование (исходящее)',
|
||||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
|
||||||
SCOND_FROM => 'EDCTRL_FIN',
|
SCOND_FROM => 'EDCTRL_FIN',
|
||||||
BORDER => true,
|
BORDER => true,
|
||||||
@ -2267,8 +2340,196 @@ text="ПРАВА ДОСТУПА!!!!"
|
|||||||
SCONDITION_NAME_FROM => 'EDDOC_DATEFrom',
|
SCONDITION_NAME_FROM => 'EDDOC_DATEFrom',
|
||||||
SCONDITION_NAME_TO => 'EDDOC_DATETo',
|
SCONDITION_NAME_TO => 'EDDOC_DATETo',
|
||||||
SJOINS => 'PRN <- RN;CONTRACTS');
|
SJOINS => 'PRN <- RN;CONTRACTS');
|
||||||
|
/* Контроль финансирования */
|
||||||
|
if (PKG_COND_BROKER.CONDITION_EXISTS(SCONDITION_NAME => 'EDCTRL_FIN') = 1) then
|
||||||
|
PKG_COND_BROKER.ADD_CLAUSE(SCLAUSE => 'PKG_P8PANELS_PROJECTS.STAGE_CONTRACTS_GET_CTRL_FIN(RN) = :EDCTRL_FIN');
|
||||||
|
PKG_COND_BROKER.BIND_VARIABLE(SVARIABLE_NAME => 'EDCTRL_FIN',
|
||||||
|
NVALUE => PKG_COND_BROKER.GET_CONDITION_NUM(SCONDITION_NAME => 'EDCTRL_FIN'));
|
||||||
|
end if;
|
||||||
end STAGE_CONTRACTS_COND;
|
end STAGE_CONTRACTS_COND;
|
||||||
|
|
||||||
|
/* Подбор входящих счетов на оплату соисполнителя этапа проекта */
|
||||||
|
procedure STAGE_CONTRACTS_SELECT_PAY_IN
|
||||||
|
(
|
||||||
|
NPROJECTSTAGEPF in number, -- Рег. номер соисполнителя этапа проекта
|
||||||
|
NIDENT out number -- Идентификатор буфера подобранных (списка отмеченных записей, null - не найдено)
|
||||||
|
)
|
||||||
|
is
|
||||||
|
NSELECTLIST PKG_STD.TREF; -- Рег. номер добавленной записи буфера подобранных
|
||||||
|
begin
|
||||||
|
/* Подберём счета */
|
||||||
|
for C in (select PAI.COMPANY,
|
||||||
|
PAI.RN
|
||||||
|
from PROJECTSTAGEPF PSPF,
|
||||||
|
PROJECTSTAGE PS,
|
||||||
|
PAYACCIN PAI
|
||||||
|
where PSPF.RN = NPROJECTSTAGEPF
|
||||||
|
and PSPF.PRN = PS.RN
|
||||||
|
and PSPF.FACEACC = PAI.FACEACC
|
||||||
|
and PAI.DOC_STATE = 1
|
||||||
|
and exists (select null
|
||||||
|
from PAYACCINSPCLC PCLC
|
||||||
|
where PCLC.PRN in (select PAIS.RN from PAYACCINSPEC PAIS where PAIS.PRN = PAI.RN)
|
||||||
|
and PCLC.FACEACCOUNT = PS.FACEACC))
|
||||||
|
loop
|
||||||
|
/* Сформируем идентификатор буфера */
|
||||||
|
if (NIDENT is null) then
|
||||||
|
NIDENT := GEN_IDENT();
|
||||||
|
end if;
|
||||||
|
/* Добавим подобранное в список отмеченных записей */
|
||||||
|
P_SELECTLIST_BASE_INSERT(NIDENT => NIDENT,
|
||||||
|
NCOMPANY => C.COMPANY,
|
||||||
|
NDOCUMENT => C.RN,
|
||||||
|
SUNITCODE => 'PaymentAccountsIn',
|
||||||
|
SACTIONCODE => null,
|
||||||
|
NCRN => null,
|
||||||
|
NDOCUMENT1 => null,
|
||||||
|
SUNITCODE1 => null,
|
||||||
|
SACTIONCODE1 => null,
|
||||||
|
NRN => NSELECTLIST);
|
||||||
|
end loop;
|
||||||
|
end STAGE_CONTRACTS_SELECT_PAY_IN;
|
||||||
|
|
||||||
|
/* Подбор платежей финансирования соисполнителя этапа проекта */
|
||||||
|
procedure STAGE_CONTRACTS_SELECT_FIN_OUT
|
||||||
|
(
|
||||||
|
NPROJECTSTAGEPF in number, -- Рег. номер соисполнителя этапа проекта
|
||||||
|
NIDENT out number -- Идентификатор буфера подобранных (списка отмеченных записей, null - не найдено)
|
||||||
|
)
|
||||||
|
is
|
||||||
|
NSELECTLIST PKG_STD.TREF; -- Рег. номер добавленной записи буфера подобранных
|
||||||
|
begin
|
||||||
|
/* Подберём платежи */
|
||||||
|
for C in (select PN.COMPANY,
|
||||||
|
PN.RN
|
||||||
|
from PROJECTSTAGEPF PSPF,
|
||||||
|
PROJECTSTAGE PS,
|
||||||
|
PAYNOTES PN
|
||||||
|
where PSPF.RN = NPROJECTSTAGEPF
|
||||||
|
and PSPF.PRN = PS.RN
|
||||||
|
and PSPF.FACEACC = PN.FACEACC
|
||||||
|
and PN.SIGNPLAN = 0
|
||||||
|
and exists (select null
|
||||||
|
from PAYNOTESCLC PNCLC
|
||||||
|
where PNCLC.PRN = PN.RN
|
||||||
|
and PNCLC.FACEACCOUNT = PS.FACEACC))
|
||||||
|
loop
|
||||||
|
/* Сформируем идентификатор буфера */
|
||||||
|
if (NIDENT is null) then
|
||||||
|
NIDENT := GEN_IDENT();
|
||||||
|
end if;
|
||||||
|
/* Добавим подобранное в список отмеченных записей */
|
||||||
|
P_SELECTLIST_BASE_INSERT(NIDENT => NIDENT,
|
||||||
|
NCOMPANY => C.COMPANY,
|
||||||
|
NDOCUMENT => C.RN,
|
||||||
|
SUNITCODE => 'PayNotes',
|
||||||
|
SACTIONCODE => null,
|
||||||
|
NCRN => null,
|
||||||
|
NDOCUMENT1 => null,
|
||||||
|
SUNITCODE1 => null,
|
||||||
|
SACTIONCODE1 => null,
|
||||||
|
NRN => NSELECTLIST);
|
||||||
|
end loop;
|
||||||
|
end STAGE_CONTRACTS_SELECT_FIN_OUT;
|
||||||
|
|
||||||
|
/* Получение состояния финансирования по договору соисполнителя этапа проекта */
|
||||||
|
function STAGE_CONTRACTS_GET_CTRL_FIN
|
||||||
|
(
|
||||||
|
NPROJECTSTAGEPF in number -- Рег. номер соисполнителя этапа проекта
|
||||||
|
) return number -- Состояние (null - не определено, 0 - без отклонений, 1 - есть отклонения)
|
||||||
|
is
|
||||||
|
NTMP PKG_STD.TNUMBER; -- Буфер для вызова процедуры расчёта
|
||||||
|
NCTRL_FIN PKG_STD.TNUMBER; -- Буфер для результата
|
||||||
|
begin
|
||||||
|
/* Получим сведения по договору соисполнителя этапа */
|
||||||
|
STAGE_CONTRACTS_GET(NPROJECTSTAGEPF => NPROJECTSTAGEPF,
|
||||||
|
NINC_FIN => 1,
|
||||||
|
NPAY_IN => NTMP,
|
||||||
|
NFIN_OUT => NTMP,
|
||||||
|
NPAY_IN_REST => NTMP,
|
||||||
|
NCTRL_FIN => NCTRL_FIN);
|
||||||
|
/* Вернём результат */
|
||||||
|
return NCTRL_FIN;
|
||||||
|
end STAGE_CONTRACTS_GET_CTRL_FIN;
|
||||||
|
|
||||||
|
/* Получение сведений по договору соисполнителя этапа проекта */
|
||||||
|
procedure STAGE_CONTRACTS_GET
|
||||||
|
(
|
||||||
|
NPROJECTSTAGEPF in number, -- Рег. номер соисполнителя этапа проекта
|
||||||
|
NINC_FIN in number := 0, -- Включить сведения о финансированеии (0 - нет, 1 - да)
|
||||||
|
NPAY_IN out number, -- Сведения о финансировании - сумма акцептованных счетов на оплату
|
||||||
|
NFIN_OUT out number, -- Сведения о финансировании - сумма оплаченных счетов на оплату
|
||||||
|
NPAY_IN_REST out number, -- Сведения о финансировании - сумма оставшихся к оплате счетов на оплату
|
||||||
|
NCTRL_FIN out number -- Сведения о финансировани - состояние (null - не определено, 0 - без отклонений, 1 - есть отклонения)
|
||||||
|
)
|
||||||
|
is
|
||||||
|
NPS_FACEACC PKG_STD.TREF; -- Рег. номер лицевого счета затрат этапа проекта
|
||||||
|
begin
|
||||||
|
/* Читаем лицевой счёт затрат родительского этапа проекта */
|
||||||
|
begin
|
||||||
|
select PS.FACEACC
|
||||||
|
into NPS_FACEACC
|
||||||
|
from PROJECTSTAGEPF PSPF,
|
||||||
|
PROJECTSTAGE PS
|
||||||
|
where PSPF.RN = NPROJECTSTAGEPF
|
||||||
|
and PSPF.PRN = PS.RN;
|
||||||
|
exception
|
||||||
|
when others then
|
||||||
|
NPS_FACEACC := null;
|
||||||
|
end;
|
||||||
|
/* Если ЛС этапа проекта нашли */
|
||||||
|
if (NPS_FACEACC is not null) then
|
||||||
|
/* Если нужны сведения о финансировании */
|
||||||
|
if (NINC_FIN = 1) then
|
||||||
|
/* Сумма акцептованных счетов на оплату - по ВСО с ЛС соисполнителя этапа проекта, в калькуляции которых присутствует ЛС затрат этапа проекта */
|
||||||
|
select sum(PAI.SUMMWITHNDS * PAI.FA_BASECOURS)
|
||||||
|
into NPAY_IN
|
||||||
|
from PROJECTSTAGEPF PSPF,
|
||||||
|
PAYACCIN PAI
|
||||||
|
where PSPF.RN = NPROJECTSTAGEPF
|
||||||
|
and PSPF.FACEACC = PAI.FACEACC
|
||||||
|
and PAI.DOC_STATE = 1
|
||||||
|
and exists (select null
|
||||||
|
from PAYACCINSPCLC PCLC
|
||||||
|
where PCLC.PRN in (select PAIS.RN from PAYACCINSPEC PAIS where PAIS.PRN = PAI.RN)
|
||||||
|
and PCLC.FACEACCOUNT = NPS_FACEACC);
|
||||||
|
/* Сумма оплаченных счетов на оплату - по расходным факт. ЖП с ЛС соисполнителя этапа проекта, в калькуляции которых присутствует ЛС затрат этапа проекта */
|
||||||
|
select sum(PN.PAY_SUM * (PN.CURR_RATE_BASE / PN.CURR_RATE))
|
||||||
|
into NFIN_OUT
|
||||||
|
from PROJECTSTAGEPF PSPF,
|
||||||
|
PAYNOTES PN
|
||||||
|
where PSPF.RN = NPROJECTSTAGEPF
|
||||||
|
and PSPF.FACEACC = PN.FACEACC
|
||||||
|
and PN.SIGNPLAN = 0
|
||||||
|
and exists (select null
|
||||||
|
from PAYNOTESCLC PNCLC
|
||||||
|
where PNCLC.PRN = PN.RN
|
||||||
|
and PNCLC.FACEACCOUNT = NPS_FACEACC);
|
||||||
|
/* Сумма оставшихся к оплате счетов на оплату */
|
||||||
|
NPAY_IN_REST := COALESCE(NPAY_IN, 0) - COALESCE(NFIN_OUT, 0);
|
||||||
|
/* Контроль отклонений (состояние) */
|
||||||
|
if (NPAY_IN is null) then
|
||||||
|
NCTRL_FIN := null;
|
||||||
|
else
|
||||||
|
if (NPAY_IN_REST > 0) then
|
||||||
|
NCTRL_FIN := 1;
|
||||||
|
else
|
||||||
|
NCTRL_FIN := 0;
|
||||||
|
end if;
|
||||||
|
end if;
|
||||||
|
/* Приведение значений */
|
||||||
|
NPAY_IN := COALESCE(NPAY_IN, 0);
|
||||||
|
NFIN_OUT := COALESCE(NFIN_OUT, 0);
|
||||||
|
end if;
|
||||||
|
else
|
||||||
|
/* Без ЛС этапа проекта посчитать ничего не можем */
|
||||||
|
NPAY_IN := 0;
|
||||||
|
NFIN_OUT := 0;
|
||||||
|
NPAY_IN_REST := 0;
|
||||||
|
NCTRL_FIN := null;
|
||||||
|
end if;
|
||||||
|
end STAGE_CONTRACTS_GET;
|
||||||
|
|
||||||
/* Список договоров этапа проекта */
|
/* Список договоров этапа проекта */
|
||||||
procedure STAGE_CONTRACTS_LIST
|
procedure STAGE_CONTRACTS_LIST
|
||||||
(
|
(
|
||||||
@ -2287,10 +2548,17 @@ text="ПРАВА ДОСТУПА!!!!"
|
|||||||
RO PKG_P8PANELS_VISUAL.TORDERS; -- Сортировки
|
RO PKG_P8PANELS_VISUAL.TORDERS; -- Сортировки
|
||||||
RDG PKG_P8PANELS_VISUAL.TDATA_GRID; -- Описание таблицы
|
RDG PKG_P8PANELS_VISUAL.TDATA_GRID; -- Описание таблицы
|
||||||
RDG_ROW PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы
|
RDG_ROW PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы
|
||||||
|
RCOL_VALS PKG_P8PANELS_VISUAL.TCOL_VALS; -- Предопределённые значения столбцов
|
||||||
NROW_FROM PKG_STD.TREF; -- Номер строки с
|
NROW_FROM PKG_STD.TREF; -- Номер строки с
|
||||||
NROW_TO PKG_STD.TREF; -- Номер строки по
|
NROW_TO PKG_STD.TREF; -- Номер строки по
|
||||||
CSQL clob; -- Буфер для запроса
|
CSQL clob; -- Буфер для запроса
|
||||||
ICURSOR integer; -- Курсор для исполнения запроса
|
ICURSOR integer; -- Курсор для исполнения запроса
|
||||||
|
NPROJECTSTAGEPF PKG_STD.TREF; -- Рег. номер соисполнителя этапа проекта
|
||||||
|
NSUMM PKG_STD.TNUMBER; -- Сумма по договору соисполнителя
|
||||||
|
NPAY_IN PKG_STD.TNUMBER; -- Сведения о финансировании - сумма акцептованных счетов на оплату
|
||||||
|
NFIN_OUT PKG_STD.TNUMBER; -- Сведения о финансировании - сумма оплаченных счетов на оплату
|
||||||
|
NPAY_IN_REST PKG_STD.TNUMBER; -- Сведения о финансировании - сумма оставшихся к оплате счетов на оплату
|
||||||
|
NCTRL_FIN PKG_STD.TNUMBER; -- Сведения о финансировани - состояние (null - не определено, 0 - без отклонений, 1 - есть отклонения)
|
||||||
begin
|
begin
|
||||||
/* Читаем фильтры */
|
/* Читаем фильтры */
|
||||||
RF := PKG_P8PANELS_VISUAL.TFILTERS_FROM_XML(CFILTERS => CFILTERS);
|
RF := PKG_P8PANELS_VISUAL.TFILTERS_FROM_XML(CFILTERS => CFILTERS);
|
||||||
@ -2423,6 +2691,36 @@ text="ПРАВА ДОСТУПА!!!!"
|
|||||||
SCOND_FROM => 'EDSCOST_ART',
|
SCOND_FROM => 'EDSCOST_ART',
|
||||||
BORDER => true,
|
BORDER => true,
|
||||||
BFILTER => true);
|
BFILTER => true);
|
||||||
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||||
|
SNAME => 'NPAY_IN',
|
||||||
|
SCAPTION => 'Акцептовано счетов на оплату',
|
||||||
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
|
||||||
|
BVISIBLE => false);
|
||||||
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||||
|
SNAME => 'NFIN_OUT',
|
||||||
|
SCAPTION => 'Оплачено счетов',
|
||||||
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
|
||||||
|
BVISIBLE => false);
|
||||||
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||||
|
SNAME => 'NPAY_IN_REST',
|
||||||
|
SCAPTION => 'Осталось оплатить счетов',
|
||||||
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
|
||||||
|
BVISIBLE => false);
|
||||||
|
PKG_P8PANELS_VISUAL.TCOL_VALS_ADD(RCOL_VALS => RCOL_VALS, NVALUE => 0, BCLEAR => true);
|
||||||
|
PKG_P8PANELS_VISUAL.TCOL_VALS_ADD(RCOL_VALS => RCOL_VALS, NVALUE => 1);
|
||||||
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||||
|
SNAME => 'NCTRL_FIN',
|
||||||
|
SCAPTION => 'Финансирование (исходящее)',
|
||||||
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
|
||||||
|
SCOND_FROM => 'EDCTRL_FIN',
|
||||||
|
BORDER => true,
|
||||||
|
BFILTER => true,
|
||||||
|
RCOL_VALS => RCOL_VALS);
|
||||||
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
|
||||||
|
SNAME => 'NREST',
|
||||||
|
SCAPTION => 'Общий остаток к оплате по договору',
|
||||||
|
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
|
||||||
|
BVISIBLE => false);
|
||||||
/* Обходим данные */
|
/* Обходим данные */
|
||||||
begin
|
begin
|
||||||
/* Собираем запрос */
|
/* Собираем запрос */
|
||||||
@ -2510,11 +2808,8 @@ text="ПРАВА ДОСТУПА!!!!"
|
|||||||
while (PKG_SQL_DML.FETCH_ROWS(ICURSOR => ICURSOR) > 0)
|
while (PKG_SQL_DML.FETCH_ROWS(ICURSOR => ICURSOR) > 0)
|
||||||
loop
|
loop
|
||||||
/* Добавляем колонки с данными */
|
/* Добавляем колонки с данными */
|
||||||
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW,
|
PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 1, NVALUE => NPROJECTSTAGEPF);
|
||||||
SNAME => 'NRN',
|
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NRN', NVALUE => NPROJECTSTAGEPF, BCLEAR => true);
|
||||||
ICURSOR => ICURSOR,
|
|
||||||
NPOSITION => 1,
|
|
||||||
BCLEAR => true);
|
|
||||||
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW,
|
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW,
|
||||||
SNAME => 'SDOC_PREF',
|
SNAME => 'SDOC_PREF',
|
||||||
ICURSOR => ICURSOR,
|
ICURSOR => ICURSOR,
|
||||||
@ -2573,12 +2868,24 @@ text="ПРАВА ДОСТУПА!!!!"
|
|||||||
SNAME => 'DCSTAGE_END_DATE',
|
SNAME => 'DCSTAGE_END_DATE',
|
||||||
ICURSOR => ICURSOR,
|
ICURSOR => ICURSOR,
|
||||||
NPOSITION => 17);
|
NPOSITION => 17);
|
||||||
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, SNAME => 'NSUMM', ICURSOR => ICURSOR, NPOSITION => 18);
|
PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 18, NVALUE => NSUMM);
|
||||||
|
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NSUMM', NVALUE => NSUMM);
|
||||||
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SCURR', ICURSOR => ICURSOR, NPOSITION => 19);
|
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SCURR', ICURSOR => ICURSOR, NPOSITION => 19);
|
||||||
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW,
|
PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW,
|
||||||
SNAME => 'SCOST_ART',
|
SNAME => 'SCOST_ART',
|
||||||
ICURSOR => ICURSOR,
|
ICURSOR => ICURSOR,
|
||||||
NPOSITION => 20);
|
NPOSITION => 20);
|
||||||
|
STAGE_CONTRACTS_GET(NPROJECTSTAGEPF => NPROJECTSTAGEPF,
|
||||||
|
NINC_FIN => 1,
|
||||||
|
NPAY_IN => NPAY_IN,
|
||||||
|
NFIN_OUT => NFIN_OUT,
|
||||||
|
NPAY_IN_REST => NPAY_IN_REST,
|
||||||
|
NCTRL_FIN => NCTRL_FIN);
|
||||||
|
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NPAY_IN', NVALUE => NPAY_IN);
|
||||||
|
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NFIN_OUT', NVALUE => NFIN_OUT);
|
||||||
|
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NPAY_IN_REST', NVALUE => NPAY_IN_REST);
|
||||||
|
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NCTRL_FIN', NVALUE => NCTRL_FIN);
|
||||||
|
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NREST', NVALUE => NSUMM - COALESCE(NFIN_OUT, 0));
|
||||||
/* Добавляем строку в таблицу */
|
/* Добавляем строку в таблицу */
|
||||||
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW);
|
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW);
|
||||||
end loop;
|
end loop;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user