diff --git a/app/panels/prj_help/img/211.png b/app/panels/prj_help/img/211.png
new file mode 100644
index 0000000..6bcd808
Binary files /dev/null and b/app/panels/prj_help/img/211.png differ
diff --git a/app/panels/prj_help/img/212.png b/app/panels/prj_help/img/212.png
new file mode 100644
index 0000000..c1edef9
Binary files /dev/null and b/app/panels/prj_help/img/212.png differ
diff --git a/app/panels/prj_help/img/213.png b/app/panels/prj_help/img/213.png
new file mode 100644
index 0000000..8bc388d
Binary files /dev/null and b/app/panels/prj_help/img/213.png differ
diff --git a/app/panels/prj_help/img/214.png b/app/panels/prj_help/img/214.png
new file mode 100644
index 0000000..172f5a8
Binary files /dev/null and b/app/panels/prj_help/img/214.png differ
diff --git a/app/panels/prj_help/img/215.png b/app/panels/prj_help/img/215.png
new file mode 100644
index 0000000..f71aa9c
Binary files /dev/null and b/app/panels/prj_help/img/215.png differ
diff --git a/app/panels/prj_help/img/221.png b/app/panels/prj_help/img/221.png
new file mode 100644
index 0000000..94bff90
Binary files /dev/null and b/app/panels/prj_help/img/221.png differ
diff --git a/app/panels/prj_help/img/222.png b/app/panels/prj_help/img/222.png
new file mode 100644
index 0000000..77992f8
Binary files /dev/null and b/app/panels/prj_help/img/222.png differ
diff --git a/app/panels/prj_help/img/223.png b/app/panels/prj_help/img/223.png
new file mode 100644
index 0000000..4d940c0
Binary files /dev/null and b/app/panels/prj_help/img/223.png differ
diff --git a/app/panels/prj_help/img/231.png b/app/panels/prj_help/img/231.png
new file mode 100644
index 0000000..41de4e9
Binary files /dev/null and b/app/panels/prj_help/img/231.png differ
diff --git a/app/panels/prj_help/img/232.png b/app/panels/prj_help/img/232.png
new file mode 100644
index 0000000..98e32c5
Binary files /dev/null and b/app/panels/prj_help/img/232.png differ
diff --git a/app/panels/prj_help/img/241.png b/app/panels/prj_help/img/241.png
new file mode 100644
index 0000000..98f9ebd
Binary files /dev/null and b/app/panels/prj_help/img/241.png differ
diff --git a/app/panels/prj_help/img/242.png b/app/panels/prj_help/img/242.png
new file mode 100644
index 0000000..aba22f6
Binary files /dev/null and b/app/panels/prj_help/img/242.png differ
diff --git a/app/panels/prj_help/img/243.png b/app/panels/prj_help/img/243.png
new file mode 100644
index 0000000..a3b4d7b
Binary files /dev/null and b/app/panels/prj_help/img/243.png differ
diff --git a/app/panels/prj_help/img/244.png b/app/panels/prj_help/img/244.png
new file mode 100644
index 0000000..aebfab8
Binary files /dev/null and b/app/panels/prj_help/img/244.png differ
diff --git a/app/panels/prj_help/img/245.png b/app/panels/prj_help/img/245.png
new file mode 100644
index 0000000..7ee3feb
Binary files /dev/null and b/app/panels/prj_help/img/245.png differ
diff --git a/app/panels/prj_help/img/31.png b/app/panels/prj_help/img/31.png
new file mode 100644
index 0000000..66af5c8
Binary files /dev/null and b/app/panels/prj_help/img/31.png differ
diff --git a/app/panels/prj_help/img/32.png b/app/panels/prj_help/img/32.png
new file mode 100644
index 0000000..293e62f
Binary files /dev/null and b/app/panels/prj_help/img/32.png differ
diff --git a/app/panels/prj_help/img/33.png b/app/panels/prj_help/img/33.png
new file mode 100644
index 0000000..fbe6d43
Binary files /dev/null and b/app/panels/prj_help/img/33.png differ
diff --git a/app/panels/prj_help/img/34.png b/app/panels/prj_help/img/34.png
new file mode 100644
index 0000000..0bdf2a3
Binary files /dev/null and b/app/panels/prj_help/img/34.png differ
diff --git a/app/panels/prj_help/img/35.png b/app/panels/prj_help/img/35.png
new file mode 100644
index 0000000..f40ffdc
Binary files /dev/null and b/app/panels/prj_help/img/35.png differ
diff --git a/app/panels/prj_help/img/36.png b/app/panels/prj_help/img/36.png
new file mode 100644
index 0000000..4485793
Binary files /dev/null and b/app/panels/prj_help/img/36.png differ
diff --git a/app/panels/prj_help/index.js b/app/panels/prj_help/index.js
new file mode 100644
index 0000000..78d0459
--- /dev/null
+++ b/app/panels/prj_help/index.js
@@ -0,0 +1,16 @@
+/*
+ Парус 8 - Панели мониторинга - ПУП - Работы проектов
+ Панель мониторинга: Описание макета (пользовательская инструкция)
+*/
+
+//---------------------
+//Подключение библиотек
+//---------------------
+
+import { PrjHelp } from "./prj_help"; //Корневая панель пользовательской инструкции
+
+//----------------
+//Интерфейс модуля
+//----------------
+
+export const RootClass = PrjHelp;
diff --git a/app/panels/prj_help/prj_help.js b/app/panels/prj_help/prj_help.js
new file mode 100644
index 0000000..bbbfb2d
--- /dev/null
+++ b/app/panels/prj_help/prj_help.js
@@ -0,0 +1,491 @@
+/*
+ Парус 8 - Панели мониторинга - ПУП - Работы проектов
+ Панель мониторинга: Описание макета (пользовательская инструкция)
+*/
+
+//---------------------
+//Подключение библиотек
+//---------------------
+
+import React, { useContext } from "react"; //Классы React
+import PropTypes from "prop-types"; //Контроль свойств компонента
+import {
+ Box,
+ Grid,
+ Typography,
+ Link,
+ List,
+ ListItem,
+ ListItemButton,
+ ListItemText,
+ Divider,
+ Table,
+ TableHead,
+ TableRow,
+ TableCell,
+ TableBody
+} from "@mui/material"; //Интерфейсные элементы
+import { ApplicationСtx } from "../../context/application"; //Контекст приложения
+import img211 from "./img/211.png"; //Изображение
+import img212 from "./img/212.png"; //Изображение
+import img213 from "./img/213.png"; //Изображение
+import img214 from "./img/214.png"; //Изображение
+import img215 from "./img/215.png"; //Изображение
+import img221 from "./img/221.png"; //Изображение
+import img222 from "./img/222.png"; //Изображение
+import img223 from "./img/223.png"; //Изображение
+import img231 from "./img/231.png"; //Изображение
+import img232 from "./img/232.png"; //Изображение
+import img241 from "./img/241.png"; //Изображение
+import img242 from "./img/242.png"; //Изображение
+import img243 from "./img/243.png"; //Изображение
+import img244 from "./img/244.png"; //Изображение
+import img245 from "./img/245.png"; //Изображение
+import img31 from "./img/31.png"; //Изображение
+import img32 from "./img/32.png"; //Изображение
+import img33 from "./img/33.png"; //Изображение
+import img34 from "./img/34.png"; //Изображение
+import img35 from "./img/35.png"; //Изображение
+import img36 from "./img/36.png"; //Изображение
+
+//---------
+//Константы
+//---------
+
+//Оглавление
+const CONTENT = [
+ { id: "prg1", caption: "1. Назначение документа" },
+ { id: "prg2", caption: "2. Инициация проекта" },
+ { id: "prg3", caption: "3. Планирование" },
+ { id: "prg4", caption: "4. Исполнение" },
+ { id: "prg5", caption: "5. Мониторинг и контроль" },
+ { id: "prg6", caption: "6. Корректировка планов" },
+ { id: "prg7", caption: "7. Завершение проекта" }
+];
+
+//Стили
+const STYLES = {
+ IMG: { textAlign: "center", padding: "10px" },
+ 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" }
+};
+
+//--------------------------------
+//Вспомогательные функции и классы
+//--------------------------------
+
+//Заголовок первого уровня
+const Hdr1 = ({ id, children }) => (
+
+ {children}
+
+);
+
+//Контроль свойств - Заголовок первого уровня
+Hdr1.propTypes = {
+ id: PropTypes.string,
+ children: PropTypes.any
+};
+
+//Заголовок второго уровня
+const Hdr2 = ({ id, children }) => (
+
+ {children}
+
+);
+
+//Контроль свойств - Заголовок второго уровня
+Hdr2.propTypes = {
+ id: PropTypes.string,
+ children: PropTypes.any
+};
+
+//Заголовок третьего уровня
+const Hdr3 = ({ id, children }) => (
+
+ {children}
+
+);
+
+//Контроль свойств - Заголовок третьего уровня
+Hdr3.propTypes = {
+ id: PropTypes.string,
+ children: PropTypes.any
+};
+
+//Параграф
+const Prgf = ({ style, children }) => (
+
+ {children}
+
+);
+
+//Контроль свойств - Параграф
+Prgf.propTypes = {
+ style: PropTypes.object,
+ children: PropTypes.any
+};
+
+//Изображение
+const Img = ({ src }) => (
+
+
+
+);
+
+//Контроль свойств - Изображение
+Img.propTypes = {
+ src: PropTypes.string.isRequired
+};
+
+//Ссылка на раздел
+const UnitLink = ({ unitCode, children }) => {
+ //Подключение к контексту приложения
+ const { pOnlineShowUnit } = useContext(ApplicationСtx);
+
+ //Генерация содержимого
+ return (
+ pOnlineShowUnit({ unitCode })}>
+ {children}
+
+ );
+};
+
+//Контроль свойств - Ссылка на раздел
+UnitLink.propTypes = {
+ unitCode: PropTypes.string.isRequired,
+ children: PropTypes.any
+};
+
+//-----------
+//Тело модуля
+//-----------
+
+//Корневая панель работ проектов
+const PrjHelp = () => {
+ //Генерация содержимого
+ return (
+
+
+
+
+ Управление экономикой проектов
+
+
+
+ {CONTENT.map((c, i) => (
+
+ {
+ document.getElementById(c.id).scrollIntoView();
+ }}
+ >
+
+
+
+ ))}
+
+
+
+
+ Управление экономикой проектов
+ 1. Назначение документа
+
+ Документ предназначен для ответственного экономиста по проекту НИОКР и содержит описание порядка применения средств
+ автоматизации на базе ПП “ПАРУС-Предприятие 8” при исполнении процесса управления экономикой проектов НИОКР на каждых его
+ этапах:
+
1) Инициация проекта
+
2) Планирование
+
3) Исполнение
+
4) Мониторинг и контроль
+
5) Корректировка планов
+
6) Завершение проекта
+
+ 2. Инициация проекта
+ 2.1. Регистрация информации о проекте
+
+ В момент инициации проекта требуется зарегистрировать запись в соответствующем учетном регистре системы, доступ к которому
+ осуществляется из главного меню Учет > Проекты.
+
+
+
+ Система визуализирует окно параметров отбора проектов. При необходимости можно установить нужные фильтры и нажать кнопку
+ ОК.
+
+
+ В открывшемся регистре требуется вызвать контекстное меню правой кнопкой мыши и выбрать пункт “Добавить”.
+
+ Система визуализирует окно параметров действия.
+
+ Требуется заполнить реквизиты проекта согласно правилам, приведенным ниже в таблице и нажать кнопку ОК.
+
+
+
+
+ № п/п
+ Наименование реквизита
+ Правила заполнения
+
+
+
+
+
+ Проект
+
+
+
+ 1
+ Мнемокод
+ Внутренний код проекта (номер заказа, шифр работ)
+
+
+ 2
+ Наименование
+ Полное наименование проекта
+
+
+ 3
+ Условное наименование
+ Согласованный с заказчиком код проекта
+
+
+ 4
+ Ожидаемые результаты
+ Заполнить при необходимости
+
+
+ 5
+ Идентификатор государственного контракта
+ Выбрать из словаря ИГК в том случае, если проекта выполняется в рамках ГОЗ
+
+
+ 6
+ Документ-основание
+
+ Указать номер договора с заказчиком, номер внутриорганизационного приказа либо иного документа инициации
+ проекта
+
+
+
+ 7
+ Тип
+ Выбрать из словаря подходящий тип проекта
+
+
+ 8
+ Внешний заказчик
+ Выбрать из словаря в том случае, если проект инициирован внешним заказчиком
+
+
+ 9
+ Подразделение-заказчик
+
+ Выбрать из словаря в том случае, если проект является внутренним (например, НИОКР для собственных нужд,
+ инвестиционные проекты …)
+
+
+
+ 10
+ Ответственный
+ Выбрать из словаря ответственного сотрудника за исполнение проектных работ
+
+
+ 11
+ Подразделение-ответственный
+ Выбрать из словаря ответственное подразделение-исполнитель проектных работ
+
+
+ 12
+ Дата начала план
+ Указать плановую дату начала выполнения проектных работ
+
+
+ 13
+ Дата окончания план
+ Указать плановую дату окончания выполнения проектных работ
+
+
+
+ Суммы, трудоемкость
+
+
+
+ 14
+ Стоимость
+ Задать плановую стоимость проекта
+
+
+ 15
+ ЕИ трудоемкости
+ Выбрать из словаря единицу измерения трудоемкости проекта
+
+
+
+ Настройки
+
+
+
+ 16
+ Схема калькуляции
+ Выбрать из словаря подходящую структуру плановой калькуляции по проекту
+
+
+
+
+
+ При начале выполнения проектных работ требуется перевести проект в состояние “Открыт” посредством соответствующего
+ действия контекстного меню раздела.
+
+
+ 2.2. Регистрация этапов проекта
+ Далее необходимо выполнить регистрацию этапов проекта.
+
+ В подчиненной таблице “Этапы проекта” требуется вызвать контекстное меню правой кнопкой мыши и выбрать пункт “Добавить”.
+
+
+ Система визуализирует окно параметров действия.
+
+ Требуется заполнить реквизиты этапа проекта согласно правилам, приведенным ниже в таблице и нажать кнопку ОК.
+
+
+
+
+ № п/п
+ Наименование реквизита
+ Правила заполнения
+
+
+
+
+
+ Этап проекта
+
+
+
+ 1
+ Номер
+ Указать номер этапа проекта п/п
+
+
+ 2
+ Наименование
+ Полное наименование этапа проекта
+
+
+ 3
+ Ожидаемые результаты
+ Заполнить при необходимости
+
+
+ 4
+ Дата начала план
+ Указать плановую дату начала выполнения этапа проектных работ
+
+
+ 5
+ Дата окончания план
+ Указать плановую дату окончания выполнения этапа проектных работ
+
+
+
+ Суммы, трудоемкость
+
+
+
+ 6
+ Стоимость этапа
+ Задать плановую стоимость этапа проекта
+
+
+
+
+
+ При начале выполнения проектных работ по этапу требуется перевести этап проекта проект в состояние “Открыт” посредством
+ соответствующего действия контекстного меню раздела.
+
+
+ 2.3. Формирование шифра затрат
+
+ После регистрации этапа проекта требуется выделить запись этапа, вызвать правой кнопкой мыши контекстное меню и выбрать
+ пункт “ЦИТК. Указать шифр затрат”.
+
+
+ Система визуализирует окно параметров действия.
+
+
+ Номер шифра затрат система генерирует автоматически. При необходимости его можно исправить. Далее необходимо нажать копку
+ ОК.
+
+ 2.4. Регистрация договора с заказчиком
+
+ После заключения договора с заказчиком необходимо выделить законтрактованные этапы проекта, вызвать правой кнопкой мыши
+ контекстное меню и выбрать пункт Формирование > Договор с внешним заказчиком.
+
+
+ Система визуализирует окно параметров действия.
+
+ Необходимо заполнить параметры действия и нажать кнопку ОК.
+
+ Система сформирует договор с заказчиком в соответствующем регистре системы.
+ Договор связан с записью регистра “Проекты” посредством штатного механизма взаимосвязей документов.
+
+
+
+ Запись в регистре “Договоры” может быть отредактирована посредством штатных действий “Исправить” контекстного меню
+ заголовка раздела. Также может быть отредактирован каждый этап договора.
+
+
+ В момент двустороннего подписания договора требуется перевести документ в состояние “Утвержден” посредством
+ соответствующего действия контекстного меню раздела.
+
+
+
+ В момент перехода к двустороннему исполнению этапа договора требуется перевести этап в состояние “Открыт” посредством
+ соответствующего действия контекстного меню раздела.
+
+
+ 3. Планирование
+
+ При получении плановой калькуляции по этапу от службы ценообразования требуется зарегистрировать данный документ в
+ соответствующем регистре системы.
+
+
+ Система визуализирует окно параметров действия.
+
+ Необходимо заполнить реквизиты плановой калькуляции и нажать кнопку ОК.
+
+ Далее необходимо сформировать перечень статей калькуляции посредством одноименного действия контекстного меню раздела.
+
+
+
+ Далее необходимо указать плановые суммы прямых статей затрат посредством штатного действия “Исправить” контекстного меню.
+
+
+ Затем необходимо выполнить расчет косвенных статей затрат посредством одноименного действия контекстного меню раздела.
+
+
+
+ В момент двустороннегго согласования плановой калькуляции необходимо утвердить документ посредством одноименного действия
+ контекстного меню раздела.
+
+
+ Затем документ необходимо пометить как действующий.
+
+ 4. Исполнение
+ 5. Мониторинг и контроль
+ 6. Корректировка планов
+ 7. Завершение проекта
+
+
+
+
+ );
+};
+
+//----------------
+//Интерфейс модуля
+//----------------
+
+export { PrjHelp };
diff --git a/img/prj_help.jpg b/img/prj_help.jpg
new file mode 100644
index 0000000..1b9005e
Binary files /dev/null and b/img/prj_help.jpg differ
diff --git a/package-lock.json b/package-lock.json
index b442801..f1e68e8 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -21,6 +21,7 @@
"eslint-plugin-react": "^7.33.1",
"eslint-plugin-react-hooks": "^4.6.0",
"fast-xml-parser": "^4.2.7",
+ "file-loader": "^6.2.0",
"query-string": "^8.1.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
@@ -1589,6 +1590,14 @@
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
},
+ "node_modules/big.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -1871,6 +1880,14 @@
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.488.tgz",
"integrity": "sha512-Dv4sTjiW7t/UWGL+H8ZkgIjtUAVZDgb/PwGWvMsCT7jipzUV/u5skbLXPFKb6iV0tiddVi/bcS2/kUrczeWgIQ=="
},
+ "node_modules/emojis-list": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
+ "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
"node_modules/enhanced-resolve": {
"version": "5.15.0",
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz",
@@ -2483,6 +2500,25 @@
"node": "^10.12.0 || >=12.0.0"
}
},
+ "node_modules/file-loader": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz",
+ "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==",
+ "dependencies": {
+ "loader-utils": "^2.0.0",
+ "schema-utils": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ },
+ "peerDependencies": {
+ "webpack": "^4.0.0 || ^5.0.0"
+ }
+ },
"node_modules/filter-obj": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-5.1.0.tgz",
@@ -3329,6 +3365,19 @@
"node": ">=6.11.5"
}
},
+ "node_modules/loader-utils": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
+ "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
+ "dependencies": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^2.1.2"
+ },
+ "engines": {
+ "node": ">=8.9.0"
+ }
+ },
"node_modules/locate-path": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
diff --git a/package.json b/package.json
index e4dc471..94f3769 100644
--- a/package.json
+++ b/package.json
@@ -31,6 +31,7 @@
"eslint-plugin-react": "^7.33.1",
"eslint-plugin-react-hooks": "^4.6.0",
"fast-xml-parser": "^4.2.7",
+ "file-loader": "^6.2.0",
"query-string": "^8.1.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
diff --git a/webpack.config.js b/webpack.config.js
index 0717bfa..a1e6f9c 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -1,3 +1,4 @@
+/* eslint-disable */
/*
Парус 8 - Панели мониторинга
Настройки упаковщика
@@ -40,6 +41,13 @@ module.exports = {
presets: ["@babel/preset-react"]
}
}
+ },
+ {
+ test: /\.(jpg|png|svg)$/,
+ loader: "file-loader",
+ options: {
+ name: "[path][name].[hash].[ext]"
+ }
}
]
}