diff --git a/app/panels/prj_help/img/411.png b/app/panels/prj_help/img/411.png new file mode 100644 index 0000000..2555a28 Binary files /dev/null and b/app/panels/prj_help/img/411.png differ diff --git a/app/panels/prj_help/img/412.png b/app/panels/prj_help/img/412.png new file mode 100644 index 0000000..6d229a4 Binary files /dev/null and b/app/panels/prj_help/img/412.png differ diff --git a/app/panels/prj_help/img/421.png b/app/panels/prj_help/img/421.png new file mode 100644 index 0000000..a7f1a12 Binary files /dev/null and b/app/panels/prj_help/img/421.png differ diff --git a/app/panels/prj_help/img/422.png b/app/panels/prj_help/img/422.png new file mode 100644 index 0000000..8f870be Binary files /dev/null and b/app/panels/prj_help/img/422.png differ diff --git a/app/panels/prj_help/img/431.png b/app/panels/prj_help/img/431.png new file mode 100644 index 0000000..46757de Binary files /dev/null and b/app/panels/prj_help/img/431.png differ diff --git a/app/panels/prj_help/img/432.png b/app/panels/prj_help/img/432.png new file mode 100644 index 0000000..70383ca Binary files /dev/null and b/app/panels/prj_help/img/432.png differ diff --git a/app/panels/prj_help/img/433.png b/app/panels/prj_help/img/433.png new file mode 100644 index 0000000..cf856bf Binary files /dev/null and b/app/panels/prj_help/img/433.png differ diff --git a/app/panels/prj_help/img/434.png b/app/panels/prj_help/img/434.png new file mode 100644 index 0000000..d17f94a Binary files /dev/null and b/app/panels/prj_help/img/434.png differ diff --git a/app/panels/prj_help/img/441.png b/app/panels/prj_help/img/441.png new file mode 100644 index 0000000..c64e92f Binary files /dev/null and b/app/panels/prj_help/img/441.png differ diff --git a/app/panels/prj_help/img/442.png b/app/panels/prj_help/img/442.png new file mode 100644 index 0000000..f246ffa Binary files /dev/null and b/app/panels/prj_help/img/442.png differ diff --git a/app/panels/prj_help/img/443.png b/app/panels/prj_help/img/443.png new file mode 100644 index 0000000..d1cad27 Binary files /dev/null and b/app/panels/prj_help/img/443.png differ diff --git a/app/panels/prj_help/img/444.png b/app/panels/prj_help/img/444.png new file mode 100644 index 0000000..add70f8 Binary files /dev/null and b/app/panels/prj_help/img/444.png differ diff --git a/app/panels/prj_help/img/451.png b/app/panels/prj_help/img/451.png new file mode 100644 index 0000000..30a377d Binary files /dev/null and b/app/panels/prj_help/img/451.png differ diff --git a/app/panels/prj_help/img/461.png b/app/panels/prj_help/img/461.png new file mode 100644 index 0000000..52ba2a4 Binary files /dev/null and b/app/panels/prj_help/img/461.png differ diff --git a/app/panels/prj_help/img/471.png b/app/panels/prj_help/img/471.png new file mode 100644 index 0000000..cb75f8e Binary files /dev/null and b/app/panels/prj_help/img/471.png differ diff --git a/app/panels/prj_help/img/711.png b/app/panels/prj_help/img/711.png new file mode 100644 index 0000000..f2fee9a Binary files /dev/null and b/app/panels/prj_help/img/711.png differ diff --git a/app/panels/prj_help/img/721.png b/app/panels/prj_help/img/721.png new file mode 100644 index 0000000..e92577a Binary files /dev/null and b/app/panels/prj_help/img/721.png differ diff --git a/app/panels/prj_help/img/722.png b/app/panels/prj_help/img/722.png new file mode 100644 index 0000000..8825663 Binary files /dev/null and b/app/panels/prj_help/img/722.png differ diff --git a/app/panels/prj_help/img/723.png b/app/panels/prj_help/img/723.png new file mode 100644 index 0000000..cf24527 Binary files /dev/null and b/app/panels/prj_help/img/723.png differ diff --git a/app/panels/prj_help/img/741.png b/app/panels/prj_help/img/741.png new file mode 100644 index 0000000..98de5d7 Binary files /dev/null and b/app/panels/prj_help/img/741.png differ diff --git a/app/panels/prj_help/prj_help.js b/app/panels/prj_help/prj_help.js index bbbfb2d..a479bfc 100644 --- a/app/panels/prj_help/prj_help.js +++ b/app/panels/prj_help/prj_help.js @@ -7,7 +7,7 @@ //Подключение библиотек //--------------------- -import React, { useContext } from "react"; //Классы React +import React, { useContext, useState } from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента import { Box, @@ -23,8 +23,11 @@ import { TableHead, TableRow, TableCell, - TableBody + TableBody, + Fab, + Icon } from "@mui/material"; //Интерфейсные элементы +import { BUTTONS } from "../../../app.text"; //Текстовые ресурсы import { ApplicationСtx } from "../../context/application"; //Контекст приложения import img211 from "./img/211.png"; //Изображение import img212 from "./img/212.png"; //Изображение @@ -47,6 +50,26 @@ import img33 from "./img/33.png"; //Изображение import img34 from "./img/34.png"; //Изображение import img35 from "./img/35.png"; //Изображение import img36 from "./img/36.png"; //Изображение +import img411 from "./img/411.png"; //Изображение +import img412 from "./img/412.png"; //Изображение +import img421 from "./img/421.png"; //Изображение +import img422 from "./img/422.png"; //Изображение +import img431 from "./img/431.png"; //Изображение +import img432 from "./img/432.png"; //Изображение +import img433 from "./img/433.png"; //Изображение +import img434 from "./img/434.png"; //Изображение +import img441 from "./img/441.png"; //Изображение +import img442 from "./img/442.png"; //Изображение +import img443 from "./img/443.png"; //Изображение +import img444 from "./img/444.png"; //Изображение +import img451 from "./img/451.png"; //Изображение +import img461 from "./img/461.png"; //Изображение +import img471 from "./img/471.png"; //Изображение +import img711 from "./img/711.png"; //Изображение +import img721 from "./img/721.png"; //Изображение +import img722 from "./img/722.png"; //Изображение +import img723 from "./img/723.png"; //Изображение +import img741 from "./img/741.png"; //Изображение //--------- //Константы @@ -69,13 +92,17 @@ const STYLES = { PRGF_TABLE: { paddingTop: "20px", paddingBottom: "20px", display: "flex", justifyContent: "center" }, TABLE: { width: "80%" }, TABLE_TITLE: { backgroundColor: "lightgray" }, - TABLE_SUBTITLE: { textAlign: "center", backgroundColor: "#f3eded", fontWeight: "bold" } + TABLE_SUBTITLE: { textAlign: "center", backgroundColor: "#f3eded", fontWeight: "bold" }, + FAB_BACK: { position: "absolute", right: "20px", marginTop: "20px" } }; //-------------------------------- //Вспомогательные функции и классы //-------------------------------- +//Переход к элементу страницы +const scrollToElement = id => document.getElementById(id).scrollIntoView(); + //Заголовок первого уровня const Hdr1 = ({ id, children }) => ( @@ -140,7 +167,7 @@ Img.propTypes = { src: PropTypes.string.isRequired }; -//Ссылка на раздел +//Ссылка на раздел Системы const UnitLink = ({ unitCode, children }) => { //Подключение к контексту приложения const { pOnlineShowUnit } = useContext(ApplicationСtx); @@ -153,21 +180,109 @@ const UnitLink = ({ unitCode, children }) => { ); }; -//Контроль свойств - Ссылка на раздел +//Контроль свойств - Ссылка на раздел Системы UnitLink.propTypes = { unitCode: PropTypes.string.isRequired, children: PropTypes.any }; +//Ссылка на главу инструкции +const ChapterLink = ({ id, dstId, onClick, children }) => { + //Генерация содержимого + return ( + { + scrollToElement(dstId); + if (onClick && id) onClick(id); + }} + > + {children} + + ); +}; + +//Контроль свойств - Ссылка на главу инструкции +ChapterLink.propTypes = { + id: PropTypes.string, + dstId: PropTypes.string.isRequired, + onClick: PropTypes.func, + children: PropTypes.any +}; + +//Ссылка на информационную панель +const PanelLink = ({ panelName, children }) => { + //Подключение к контексту приложения + const { configUrlBase, findPanelByName, pOnlineShowTab } = useContext(ApplicationСtx); + + //Генерация содержимого + return ( + { + const panel = findPanelByName(panelName); + if (panel) pOnlineShowTab({ id: panel.name, url: `${configUrlBase}${panel.url}`, caption: panel.caption }); + }} + > + {children} + + ); +}; + +//Контроль свойств - Ссылка на информационную панель +PanelLink.propTypes = { + panelName: PropTypes.string.isRequired, + children: PropTypes.any +}; + //----------- //Тело модуля //----------- //Корневая панель работ проектов const PrjHelp = () => { + //Собственное состояние + const [navStack, setNavStack] = useState([]); + + //Переход по оглавлению + const handleTitleClick = id => { + scrollToElement(id); + setNavStack([]); + }; + + //Обработка на нажатие ссылки на раздел + const handleChapterLinkClick = backId => { + const tmp = [...navStack]; + tmp.push(backId); + setNavStack(tmp); + }; + + //Обработка нажатия на кнопку "Назад" + const handleBackClick = () => { + if (navStack.length > 0) { + const tmp = [...navStack]; + const backId = tmp.pop(); + scrollToElement(backId); + setNavStack(tmp); + } + }; + //Генерация содержимого return ( + {navStack.length > 0 ? ( + + arrow_back_ios + {BUTTONS.NAVIGATE_BACK} + + ) : null} @@ -177,11 +292,7 @@ const PrjHelp = () => { {CONTENT.map((c, i) => ( - { - document.getElementById(c.id).scrollIntoView(); - }} - > + handleTitleClick(c.id)}> @@ -418,7 +529,7 @@ const PrjHelp = () => { Номер шифра затрат система генерирует автоматически. При необходимости его можно исправить. Далее необходимо нажать копку ОК. - 2.4. Регистрация договора с заказчиком + 2.4. Регистрация договора с заказчиком После заключения договора с заказчиком необходимо выделить законтрактованные этапы проекта, вызвать правой кнопкой мыши контекстное меню и выбрать пункт Формирование > Договор с внешним заказчиком. @@ -474,9 +585,210 @@ const PrjHelp = () => { Затем документ необходимо пометить как действующий. 4. Исполнение + 4.1. Формирование авансового счета по договору с заказчиком + + Необходимо отобрать договор с заказчиком в одноименном штатном регистре системы, + выбрать этап, вызвать контекстное меню и выбрать пункт Формирование > Счет на оплату. + + + Система визуализирует окно реквизитов счета на оплату. + + Необходимо заполнить реквизиты счета и нажать кнопку ОК. + + Система зарегистрирует документ в{" "} + соответствующем документарном регистре системы. + + 4.2. Регистрация договоров с соисполнителями / поставщиками / подрядчиками + + После заключения договора с соисполнителем / поставщиком / подрядчиком необходимо выбрать этап проекта, в рамках которого + был заключен договор, вызвать правой кнопкой мыши контекстное меню и выбрать пункт Формирование > Договор с внешним + исполнителем. + + + Система визуализирует окно параметров действия. + + Необходимо заполнить параметры действия и нажать кнопку ОК. + + Система сформирует договор с исполнителем в соответствующем регистре системы. + + + Запись в регистре “Договоры” может быть отредактирована посредством штатных действий “Исправить” контекстного меню + заголовка раздела. Также может быть отредактирован каждый этап договора. + + + В момент двустороннего подписания договора требуется перевести документ в состояние “Утвержден” посредством + соответствующего действия контекстного меню раздела аналогично тому, как это выполняется и для договора с заказчиком (см. + выше{" "} + + раздел 2.4 + {" "} + настоящей Инструкции). + + + В момент перехода к двустороннему исполнению этапа договора требуется перевести этап в состояние “Открыт” посредством + соответствующего действия контекстного меню раздела аналогично тому, как это выполняется и для договора с заказчиком (см. + выше{" "} + + раздел 2.4 + {" "} + настоящей Инструкции). + + 4.3. Регистрация счета по договору с исполнителем + + При поступлении счета от исполнителя необходимо отобрать договор с исполнителем в{" "} + одноименном штатном регистре системы, выбрать этап, вызвать контекстное меню и + выбрать пункт Формирование > Входящий счет на оплату. + + + Система визуализирует окно параметров действия. + + Необходимо заполнить параметры и нажать кнопку ОК. + Система визуализирует окно реквизитов счета на оплату. + + Необходимо заполнить реквизиты счета и нажать кнопку ОК. + + Система зарегистрирует документ в{" "} + соответствующем документарном регистре системы. + + + Далее документ может быть отредактирован посредством штатных действий “Исправить” контекстного меню заголовка раздела. + Также может быть отредактирована спецификация документа. + + + По окончании редактирования счета документ подлежит утверждению посредством соответствующего действия контекстного меню + раздела. + + + 4.4. Регистрация актов и товарных накладных по договору с исполнителем + + При поступлении акта/товарной накладной от исполнителя необходимо отобрать договор с исполнителем в{" "} + одноименном штатном регистре системы, выбрать этап, вызвать контекстное меню и + выбрать пункт Формирование > Приходная накладная. + + + Система визуализирует окно параметров действия. + + Необходимо заполнить параметры и нажать кнопку ОК. + Система визуализирует буфер формирования документа. + + Необходимо нажать кнопку ОК. + + Система зарегистрирует документ в{" "} + соответствующем документарном регистре системы. + + + Далее документ может быть отредактирован посредством штатных действий “Исправить” контекстного меню заголовка раздела. + Также может быть отредактирована спецификация документа. + + + По окончании редактирования документ подлежит утверждению посредством соответствующего действия контекстного меню раздела. + + + 4.5. Ведение реестра финансовых документов по проекту + + Система позволяет получить доступ ко всем документам по данному этапу проекта с возможностью перехода в соответствующие + документарные регистры системы: +

+ 1) Счета на оплату +

+

+ 2) Расходные накладные на отпуск потребителям +

+

+ 3) Входящие счета на оплату +

+

+ 4) Приходные накладные +

+
+ + 4.6. Учет фактической оплаты + + Система позволяет получить доступ к фактически проведенным платежным поручениям по данному этапу проекта с возможностью + перехода в соответствующий учетный регистр системы. + + + 4.7. Учет фактических затрат + + Система позволяет получить доступ к фактическим затратам по данному этапу проекта с возможностью перехода в{" "} + соответствующий учетный регистр системы. + + 5. Мониторинг и контроль + + В информационной панели Экономика проектов система обеспечивает мониторинг + исполнения проекта по следующим основным объектам контроля: +

1) Финансирование

+

2) Контрактация

+

3) Договоры с соисполнителями

+

4) Сроки

+

5) Затраты

+

6) Актирование

+
6. Корректировка планов + + Система обеспечивает возможность корректировки экономической структуры проекта в том числе и в процессе его исполнения (с + сохранением истории изменений): +

1) Изменение стоимости этапов проекта (например, при увеличении/уменьшении объема работ)

+

2) Корректировку сроков этапов проекта (например, при изменении требований заказчика)

+

3) Добавление новых этапов проекта

+

4) Разделение этапов проекта

+

5) Объединение этапов проекта

+

+ 6) Корректировку плановой калькуляции путем регистрации новой версии документа (например, в результате подписания + протокола согласования фиксированной цены этапа проектных работ) – порядок регистрации документа описан выше в разделе + 3 настоящей Инструкции +

+
+ + В случае изменения структуры этапов проекта (разделение либо объединение этапов проекта) в процессе его исполнения + обеспечивается возможность: +

1) Изменить привязку внешнего исполнителя (перенести с одного этапа на другой)

+

2) Выполнить переброску финансирования (как входящего, так и исходящего)

+

3) Выполнить переброску накопленных фактических затрат

+
7. Завершение проекта + 7.1. Закрытие этапа проекта + + По окончании выполнения проектных работ по этапу требуется перевести этап проекта в состояние “Закрыт” посредством + соответствующего действия контекстного меню раздела. + + + 7.2. Формирование акта выполненных работ по договору с заказчиком + + Необходимо отобрать договор с заказчиком в одноименном штатном регистре системы, + выбрать этап, вызвать контекстное меню и выбрать пункт Формирование > Расходная накладная на отпуск потребителям. + + + Система визуализирует буфер формирования документа. Необходимо нажать кнопку ОК. + + + Система зарегистрирует документ в{" "} + соответствующем документарном регистре системы. + + + Далее документ может быть отредактирован посредством штатных действий “Исправить” контекстного меню заголовка раздела. + Также может быть отредактирована спецификация документа. + + + По окончании редактирования документ подлежит утверждению посредством соответствующего действия контекстного меню раздела. + + + 7.3. Формирование счета на окончательный расчет с заказчиком + + Порядок формирования счета на окончательный расчет полностью аналогичен порядку формирования авансового счета, подробно + описанному выше в{" "} + + разделе 4.1 + {" "} + настоящей Инструкции. + + 7.4. Закрытие проекта + + По окончании выполнения проектных работ по всем этапам требуется перевести проект в состояние “Закрыт” посредством + соответствующего действия контекстного меню раздела. + +