ОС Курсовая работа · тема №20

Система учёта
основных средств «ОСнова»

Здесь собрано всё, что нужно знать о проекте: как его запустить, что умеет каждый экран, на чём он написан, как устроена база данных и как система считает амортизацию. Читать можно по порядку или сразу переходить к нужному разделу через меню слева.

экранов в системе10
таблиц в базе данных9
печатные формы4
автоматических проверок11

Коротко о предметной области

Тема: «Проектирование системы автоматизации учёта поступления и выбытия основных средств на предприятии». Вымышленное предприятие ООО «Кедр-Мебель» (Пермь) делает корпусную мебель: у него станки, здания, транспорт, компьютеры — 47 объектов в пяти подразделениях, история с 2020 года. Бухгалтер принимает объекты к учёту, перемещает между цехами, списывает и каждый месяц начисляет амортизацию. Раньше всё это считалось в Excel, а акты заполнялись в Word. Система «ОСнова» сама считает амортизацию, печатает документы по формам ОС-1, ОС-2, ОС-4 и не даёт сделать типичные ошибки.

01 Как запустить

Запуск за пять шагов

Программировать ничего не нужно. Всё запускается двойным щелчком по файлу, а база данных заполняется сама.

1

Установить Docker Desktop

Docker — это программа, которая запускает проект в «контейнерах»: изолированных коробках, где уже установлено всё нужное. Скачать бесплатно с официального сайта docker.com (Docker Desktop for Windows), установить и перезагрузить компьютер, если попросит.

Важно: перед каждым запуском проекта Docker Desktop должен быть открыт, а внизу слева в его окне должна гореть зелёная надпись Engine running.
2

Распаковать архив

Распакуйте osnova.zip в папку, в пути к которой нет русских букв и пробелов, например C:\osnova.

3

Дважды щёлкнуть «Запустить.bat»

Файл лежит в корне папки проекта. Он проверит, что Docker запущен, соберёт и запустит систему и сам откроет браузер. Первый запуск занимает 5–10 минут и требует интернета: Docker скачивает всё нужное. Потом — несколько секунд.

4

Или то же самое командой

Откройте папку проекта в проводнике, правой кнопкой по пустому месту → «Открыть в Терминале», вставьте команду и нажмите Enter:

docker compose up --build

В этом случае окно терминала не закрывайте: пока оно открыто, система работает.

5

Открыть в браузере

http://localhost:8080
ЛогинПарольРоль
buhbuh2026Бухгалтер по учёту ОС — Мельникова Ольга Викторовна
glavbuhglavbuh2026Главный бухгалтер — Зуев Павел Андреевич

База данных через phpMyAdmin: http://localhost:8081, база osnova.

Остановить

Дважды щёлкнуть Остановить.bat. Или в Docker Desktop → Containers → fixed-assets → кнопка «стоп».

Запустить снова

Снова Запустить.bat. Второй раз ничего не скачивается, система стартует за несколько секунд.

Вернуть демо-данные

Дважды щёлкнуть Сбросить данные.bat. Всё добавленное удалится, база станет как после первого запуска.

02 Экраны системы

Что умеет каждый экран

Навигация — меню слева: «Учёт» (главная, основные средства, амортизация), «Документы» (поступление, перемещение, списание, журнал) и «Настройки» (справочники). Наверху — открытый период, переключатель темы, внизу меню — пользователь и кнопка выхода. Скриншоты меняются вместе с темой этой страницы, по клику открываются крупно.

03 Сценарий защиты

Что показывать на защите (5–7 минут)

Перед защитой: запустить проект, затем Сбросить данные.bat, чтобы данные были чистые. Тему лучше выбрать светлую: на проекторе она читается лучше. В браузере нажать F11, чтобы окно было на весь экран.
1

Вход и главная · 1 минута

Щёлкнуть строчку buh / buh2026 под формой → «Войти». На главной показать объекты в эксплуатации, стоимость, амортизацию за год, графики по группам и подразделениям. Обратить внимание на жёлтое предупреждение про непроведённый акт списания.

«Система ведёт учёт основных средств: принимает к учёту, перемещает, списывает и каждый месяц сама считает амортизацию».

2

Реестр и карточка · 1 минута

«Основные средства» → в поиске набрать ФР-3200 → открыть станок. Показать реквизиты и график: сплошная линия — уже начислено, пунктир — прогноз. Станок амортизируется способом уменьшаемого остатка, поэтому в первые годы стоимость падает быстрее.

3

Поступление · 1,5 минуты

«Поступление»: станок кромкооблицовочный КО-600, 5-я группа, срок 96 мес., стоимость 1 450 000, дата 15.09.2026, раскройный цех, МОЛ Кондратьев, поставщик СтанкоПромСнаб → «Принять к учёту» → «Печать акта ОС-1».

«Система проверяет, что стоимость не меньше 100 тысяч и срок подходит под группу. Справа сразу расчёт: 1 450 000 / 96 = 15 104 ₽ в месяц, начисление начнётся с октября».

4

Перемещение и защита от ошибки · 1 минута

«Перемещение»: ноутбук для конструкторского бюро → «Администрация», МОЛ Никонова → «Провести перемещение». Затем «Амортизация»: кнопка «Начислить» серая, сверху предупреждение.

«Начислить нельзя: есть акт списания МФУ, который ещё не проведён. Иначе амортизация попала бы на объект, который уже списывают».

5

Главный бухгалтер проводит списание · 1 минута

Выйти (значок рядом с фамилией внизу меню) → войти как glavbuh → «Журнал операций» → в строке СП-26/001 «Провести» → значок принтера, акт ОС-4.

«Акт оформил бухгалтер, а провести его может только главный бухгалтер. Финансовый результат: выручки нет, остаточная стоимость ноль, расходы на демонтаж 1 500 ₽ — убыток 1 500 ₽».

6

Начисление амортизации · 1 минута

«Амортизация» → «Начислить за сентябрь 2026» → подтвердить. В «Закрытых периодах» у сентября открыть «Ведомость». Вернуться на главную — цифры обновились.

«Система посчитала амортизацию по каждому объекту и закрыла сентябрь. Задним числом в закрытом месяце документы оформить уже нельзя».

Материалы к защите

osnova.zipпроект целиком: исходный код, файлы запуска, README
diagrams.zip8 диаграмм для записки в .drawio и .png
Шпаргалка«Защита — шпаргалка.pdf»: сценарий со скриншотами, что нажать и что сказать, ответы на вопросы
04 Стек технологий

Из чего сделана система

Любое веб-приложение состоит из трёх частей: то, что видит пользователь (клиент), логика, которая считает и сохраняет (сервер), и место хранения данных (база данных). «Стек» — это список инструментов, на которых всё это написано.

язык

JavaScript

Язык программирования, на котором написан весь проект: и клиент в браузере, и сервер. Один язык на всё — проще разбираться и поддерживать.

интерфейс

React 19

Библиотека, которая собирает страницу из «кубиков»-компонентов: карточек, кнопок, таблиц. Один раз сделанный компонент используется на всех экранах.

сборка

Vite

Инструмент, который собирает клиент в готовые файлы для браузера, а при разработке мгновенно показывает изменения. Переходы между страницами — React Router.

оформление

CSS Modules

Стили лежат рядом с каждым компонентом и не мешают друг другу. Светлая и тёмная тема — два набора цветовых переменных. Иконки — Tabler Icons.

графики

Chart.js

Библиотека графиков: начисления по месяцам, структура по группам и подразделениям, кривая остаточной стоимости в карточке объекта.

сервер

Node.js + Express

Сервер принимает запросы от клиента, проверяет права пользователя и данные, считает амортизацию и сохраняет результат в базу.

база данных

MySQL 8.4

Популярная бесплатная реляционная база данных. Хранит объекты, документы, начисления, справочники и пользователей.

просмотр базы

phpMyAdmin

Веб-программа, чтобы посмотреть таблицы базы в браузере. Удобно показать комиссии, как хранятся данные.

запуск

Docker

Запускает систему в четырёх контейнерах: frontend (клиент), backend (сервер), mysql (база) и phpmyadmin. На компьютер не нужно ничего ставить, кроме Docker Desktop.

Как это работает вместе

1

Пользователь открывает систему в браузере, контейнер frontend отдаёт ему готовый клиент на React.

2

Клиент запрашивает данные у сервера по адресам /api/..., например список объектов.

3

Сервер на Express проверяет, кто вошёл и какая у него роль, достаёт данные из MySQL и возвращает их клиенту.

4

Пользователь нажимает кнопку, например «Начислить за сентябрь». Сервер считает амортизацию по каждому объекту и сохраняет всё одной транзакцией: либо всё, либо ничего.

5

Клиент обновляет экран и показывает результат.

Почему выбран именно этот стек

  • Распространённый и бесплатный: React, Node.js и MySQL — одни из самых популярных технологий для веб-приложений.
  • Один язык на всё: клиент и сервер написаны на JavaScript.
  • Реляционная база данных: MySQL поддерживает связи между таблицами и транзакции, это важно для учёта.
  • Простой запуск: Docker снимает проблему «у меня не запускается» — система поднимается одной командой на любом компьютере.
  • Без внешних сервисов: система полностью автономна, после первого запуска ей не нужен интернет.
05 Структура проекта

Где что лежит

Проект делится на две папки: backend — сервер и frontend — клиент. Самое интересное для записки — расчёт амортизации в backend/src/depreciation.js.

osnova/корень проекта
├─ docker-compose.ymlописание четырёх контейнеров: клиент, сервер, база данных, phpMyAdmin
├─ Запустить.batзапуск системы и открытие браузера; рядом «Остановить» и «Сбросить данные»
├─ README.mdкраткая инструкция: запуск, пользователи, формулы
├─ db/init/01_schema.sqlсоздание всех 9 таблиц базы данных — основа для ER-диаграммы
├─ backend/сервер
│ ├─ src/index.jsзапуск сервера, подключение обработчиков, первичное заполнение базы
│ ├─ src/depreciation.jsрасчёт амортизации: линейный способ и способ уменьшаемого остатка, график по месяцам
│ ├─ src/rules.jsправила: проверка стоимости и срока, финансовый результат списания, закрытые периоды
│ ├─ src/ledger.jsостаточная стоимость объектов, нумерация документов
│ ├─ src/auth.jsвход, выход, проверка роли пользователя
│ ├─ src/routes/обработчики запросов: объекты, документы, амортизация, справочники, главная
│ ├─ src/seed.jsдемонстрационные данные: 47 объектов, история с 2020 года
│ └─ test/11 автоматических проверок расчётов и правил (запуск: npm test)
└─ frontend/клиент
├─ src/pages/страницы: главная, реестр, карточка, поступление, перемещение, списание, журнал, амортизация, справочники, печатные формы
├─ src/components/общие «кубики»: кнопки, поля, таблицы, окна, полоска износа
├─ src/layout/боковое меню и верхняя панель
└─ src/styles/цвета светлой и тёмной темы, шрифты
06 База данных

9 таблиц в трёх группах

База данных — как Excel-файл с листами: каждый лист — таблица, строки — записи, столбцы — свойства. Таблицы связаны по номерам: в документе записан не весь объект, а только его номер, и по нему находится объект.

Первичный ключ (PK)

Уникальный номер записи, как номер паспорта. Повторяться не может.

Внешний ключ (FK)

Ссылка на запись в другой таблице. Например, «номер подразделения» у объекта.

Один ко многим

В одном подразделении много объектов, но каждый объект числится в одном подразделении.

справочники постоянная информация

usersПользователи: логин, пароль в зашифрованном виде, ФИО, роль (бухгалтер или главный бухгалтер).
asset_groupsАмортизационные группы: номер 1–10, название, минимальный и максимальный срок полезного использования в месяцах.
departmentsПодразделения: раскройный цех, сборочный цех, склад готовой продукции, транспортный участок, администрация.
responsible_personsМатериально ответственные лица: ФИО, должность, подразделение.
counterpartiesКонтрагенты: название, ИНН, вид — поставщик, покупатель или оба.

объекты и документы что происходит с имуществом

assetsОсновные средства: инвентарный номер, наименование, группа, подразделение, МОЛ, первоначальная стоимость, срок, способ амортизации, дата ввода, статус, дата выбытия.
operationsДокументы: номер, вид (поступление, перемещение, списание), дата, объект, откуда и куда, контрагент, выручка и расходы при списании, остаточная стоимость, статус (черновик или проведён), кто оформил и кто провёл.

амортизация ежемесячные начисления

depreciation_runsНачисление за месяц: период, общая сумма, кто и когда начислил. Есть запись за месяц — значит, месяц закрыт.
depreciation_entriesСтроки начисления по каждому объекту: сумма за месяц, накопленная амортизация, остаточная стоимость.

ER-диаграмма

ER-диаграмма

Состояния документа

Диаграмма состояний документа

Черновик → Проведён. Поступление и перемещение проводятся сразу. Акт списания сначала сохраняется черновиком, провести его может только главный бухгалтер. Черновик можно удалить, проведённый документ — нет.

07 Как считается амортизация

Математика простыми словами

Амортизация — постепенный перенос стоимости объекта на расходы. Объект изнашивается, и каждый месяц часть его стоимости списывается. В системе два способа.

Линейный способ

Каждый месяц одинаковая сумма: стоимость делится на срок в месяцах.

А(мес) = Стоимость / Срок (мес.)

Уменьшаемого остатка

В первые годы списывается больше, потом меньше. Сумма пересчитывается раз в год от остатка, коэффициент k = 2.

А(год) = Остаток × k / Срок (лет)

Финансовый результат

Считается при списании. Если меньше нуля — это убыток.

Выручка − Остаток − Расходы

Когда начисляется

Начисление начинается с месяца, следующего за месяцем принятия к учёту, и прекращается, когда стоимость полностью списана или объект выбыл.

Принят 15.09.2026 → первое начисление за октябрь
Последний месяц срока → списывается весь остаток

При способе уменьшаемого остатка А(мес) = А(год) / 12. В последний месяц срока списывается вся оставшаяся стоимость, чтобы остаток стал ровно нулём.

Правила, которые проверяет система

  • Стоимость основного средства — не меньше 100 000 ₽, иначе это не основное средство.
  • Срок полезного использования должен попадать в границы амортизационной группы (например, 5-я группа — свыше 7 и до 10 лет включительно, 85–120 месяцев).
  • В закрытом месяце нельзя оформить документ задним числом.
  • Начислить амортизацию нельзя, пока есть непроведённый акт списания.
  • Проводить списание и отменять начисление может только главный бухгалтер.

Примеры для записки

ЛинейныйСтанок КО-600 за 1 450 000 ₽, срок 96 мес. → 1 450 000 / 96 = 15 104,17 ₽ в месяц, 181 250 ₽ в год
Уменьш. остаткаСтанок ФР-3200 за 1 902 600 ₽, срок 96 мес. = 8 лет → первый год 1 902 600 × 2 / 8 = 475 650 ₽, в месяц 39 637,50 ₽
Второй годостаток 1 902 600 − 475 650 = 1 426 950 → 1 426 950 × 2 / 8 = 356 737,50 ₽ — сумма уменьшается
СписаниеМФУ: выручки нет, остаточная стоимость 0, расходы на демонтаж 1 500 ₽ → 0 − 0 − 1 500 = убыток 1 500 ₽

В коде это функция buildSchedule в файле backend/src/depreciation.js: она строит график начислений по месяцам. Тот же расчёт система показывает справа на экране «Поступление».

08 Диаграммы для записки

Восемь готовых диаграмм

Каждая есть в двух видах: .drawio — можно открыть и поправить в бесплатной программе draw.io (app.diagrams.net), и .png — сразу вставить в Word. Все лежат в архиве diagrams.zip. Нажмите на картинку, чтобы увеличить.

09 Если не работает

Частые проблемы

«Запустить.bat» пишет, что Docker не запущен

Откройте Docker Desktop из меню «Пуск» и подождите, пока внизу слева появится зелёная надпись «Engine running». Затем запустите файл ещё раз.

«docker» не является командой / не найден

Docker Desktop не установлен или не перезапущен терминал после установки. Установите Docker Desktop, перезагрузите компьютер.

Docker Desktop не запускается, ошибка про виртуализацию или WSL

На старых ноутбуках в BIOS бывает выключена виртуализация, а иногда не хватает компонента WSL. Включите виртуализацию в BIOS (Intel VT-x или AMD-V) и в PowerShell от администратора выполните wsl --install, затем перезагрузите компьютер.

«port is already allocated» — порт занят

Порт 8080 занят другой программой. Запустите на другом порту и откройте http://localhost:8085:

$env:APP_PORT=8085; docker compose up --build

Если занят порт phpMyAdmin 8081 — так же через $env:PMA_PORT=8086.

Браузер пишет «Не удаётся получить доступ к сайту»

Сервер ещё стартует. Подождите 30 секунд и обновите страницу (F5). Не помогло — ещё раз Запустить.bat.

Кнопка «Начислить» серая уже после проведения акта

Обновите страницу (F5): экран амортизации ещё показывает старое состояние.

Нужно начать с полностью чистой базы

Обычно хватает Сбросить данные.bat. Если нужно удалить базу целиком и создать заново:

docker compose down -v docker compose up --build
10 Вопросы комиссии

Что могут спросить и что ответить

Что такое основные средства?

Имущество, которое используется больше 12 месяцев и стоит дороже 100 000 рублей: здания, станки, транспорт, оборудование.

Какие способы амортизации есть в системе?

Линейный — каждый месяц одинаковая сумма, стоимость делится на срок. Уменьшаемого остатка с коэффициентом 2 — в первые годы списывается больше, потом меньше: годовая сумма = остаточная стоимость на начало года × 2 / срок в годах.

Что такое амортизационная группа?

По классификации основных средств все объекты делятся на 10 групп по сроку службы. Например, 5-я группа — свыше 7 и до 10 лет включительно. Система не даст указать срок вне группы.

Какие документы формирует система?

ОС-1 — акт о приёме-передаче (поступление), ОС-2 — накладная на внутреннее перемещение, ОС-4 — акт о списании. Плюс ведомость начисления амортизации за месяц.

Зачем закрывать периоды?

Чтобы после начисления амортизации никто не изменил данные за прошлый месяц задним числом. Это защищает отчётность.

Зачем две роли?

Разделение обязанностей. Бухгалтер оформляет документы, а проведение списания и отмену начисления делает только главный бухгалтер. Так меньше риск ошибки или злоупотребления.

Как обеспечивается целостность данных?

Начисление за месяц и изменение объектов при проведении документов выполняются в транзакции: либо всё, либо ничего. Таблицы связаны внешними ключами, поэтому нельзя сослаться на несуществующий объект или подразделение.

Как хранятся пароли и как система понимает, кто вошёл?

Пароли хранятся не в открытом виде, а в виде хеша (алгоритм bcrypt). После входа сервер выдаёт браузеру токен (JWT) в защищённом cookie и по нему при каждом запросе определяет пользователя и его роль.

Как проверялась правильность расчётов?

Для расчётов написаны автоматические тесты (11 проверок): оба способа амортизации сверены с ручным расчётом, проверены финансовый результат списания и правила документов. Запуск — npm test в папке backend.

Чем это лучше 1С?

Это не замена 1С, а узкая система под одну задачу: проще, бесплатная, её легко освоить. Учебный проект показывает, как такая автоматизация устроена изнутри.

Что можно доработать?

Инвентаризацию со сканированием QR-кодов на объектах, переоценку и модернизацию, налоговый учёт, выгрузку в 1С и отчёты в Excel.

11 Словарик

Термины

Основное средство (ОС)Имущество дороже 100 000 ₽, которое служит больше года: станок, здание, автомобиль.
Первоначальная стоимостьСколько стоил объект при принятии к учёту.
Остаточная стоимостьПервоначальная стоимость минус уже начисленная амортизация.
Срок полезного использованияСколько месяцев объект будет приносить пользу; за это время списывается вся стоимость.
МОЛМатериально ответственное лицо — сотрудник, который отвечает за объект в своём подразделении.
Инвентарный номерУникальный номер объекта, по нему объект находят в учёте и на месте.
Проведение документаДокумент вступает в силу: объект снимается с учёта, меняет подразделение и т. п.
Закрытый периодМесяц, за который уже начислена амортизация; менять его задним числом нельзя.
Frontend / клиентВсё, что видит пользователь в браузере.
Backend / серверЧасть программы «за кулисами»: проверяет данные, считает, сохраняет в базу.
APIНабор адресов, по которым клиент обращается к серверу, например /api/assets.
ТранзакцияГруппа изменений в базе, которая выполняется целиком или не выполняется совсем.
КонтейнерИзолированная «коробка» Docker, в которой работает программа со всем необходимым.