Ноябрь 2025 - август 2026

Электронный журнал: переработка логики и интеграции с 1С

Принял сильно проблемное приложение для учебных журналов, ведомостей и успеваемости и практически полностью переписал его логику. Дизайн не менял: сохранил существующее оформление и привычные пользователям разделы. Переработал поведение клиентской части, серверную обработку, получение и сохранение данных, интеграцию с 1С и кэширование. После этого продолжил исправлять замечания, развивать возможности и сопровождать систему.

Кейс описан без названия организации, имён участников, данных обучающихся и адресов рабочих систем.

С чем работает приложение

  • Преподаватель ведёт доступные ему журналы, занятия, оценки и ведомости.
  • Методист работает с расширенными списками, фильтрами и отчётами по учебным периодам.
  • Обучающийся просматривает собственную текущую и итоговую успеваемость.
  • Администратор управляет подключением к 1С, справкой, режимом технических работ и серверным кэшем.

Основные учебные данные поступают из 1С. SQLite хранит локальные настройки, комментарии и серверный кэш.

Что было и что стало

СценарийДо доработокПосле доработок
Открытие списковДлительный ответ 1С задерживал отображение данныхЗагрузка списков перенесена в фон; пользователь видит состояние загрузки, а доступная резервная версия кэша обновляется без ожидания полного ответа
Выставление оценокБыстрые изменения создавали конкурирующие запросы; отображение могло расходиться с сохранёнными даннымиИзменения одного журнала проходят последовательно, у ячейки есть индикатор сохранения, отображение синхронизируется с результатом
Исправление оценкиТребовалось согласовать изменение с контрактом 1С и корректно показать результатПервичная и исправленная оценки видны как «старая/новая»; удаление исправления сохраняет первичную оценку
Копирование занятияМожно было повторно отправить запрос или выбрать архивный журналФорма блокируется на время копирования, без целевой группы кнопка недоступна, архивные журналы исключены из выбора
Фильтры и периодыВстречались дубли, несовместимые значения и неверный порядок семестровСписки очищены от дублей, зависимые фильтры согласованы, несовместимый выбор сбрасывается, состояние разделов разделено
Формирование отчётаСмена параметров вызывала лишние запросы; выбранный период учитывался некорректноДанные запрашиваются при формировании отчёта, учитывают интервал дат, одинаковые запросы не дублируются
Работа с ведомостямиТребовали исправления оценки, номера билетов и обработка удалённых записейДобавлено удаление оценки через 1С, текущий номер билета подставляется в форму, удалённые ведомости скрываются и блокируются
Доступ к даннымТребовалось усилить проверку роли и доступа к конкретному журналуСервер использует подписанную сессию и проверяет доступ к журналам и ведомостям; административная сессия отделена от пользовательской
ОбслуживаниеНастройки кэша и сохранность локальной базы требовали доработкиКэшем можно управлять из админки, а рабочая SQLite хранится отдельно от контейнера

Как развивал проект

1. Переписал логику без изменения дизайна

Разделил клиентские вызовы, API-обработчики и серверные функции. Централизовал подключение к SQLite, перенёс настройки интеграции из клиентского файла в серверное хранилище. Привёл обработку ошибок к единому подходу, исправил серверную загрузку, сериализацию дат и ошибки согласования серверного HTML с React.

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

2. Сделал сохранение и редактирование понятнее

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

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

Добавил комментарии к занятиям с индикатором и окном просмотра, выделение рубежного контроля, возврат из журнала в нужный список. Исправил наложение оценок на закреплённые столбцы при горизонтальной прокрутке и поведение ввода в Chrome и Opera.

3. Сократил лишнее ожидание и повторные обращения

Внедрил серверный кэш на SQLite с отдельными сроками хранения для разных данных. Одинаковые одновременно выполняемые запросы объединяются. Для списков предусмотрена выдача доступной резервной версии с последующим фоновым обновлением. После изменений связанные записи кэша сбрасываются; принудительное обновление ожидает новый ответ 1С.

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

Результат: меньше повторных запросов к 1С и понятнее поведение интерфейса при медленном ответе. Точное ускорение зависит от данных и внешней системы; сравнительные замеры в этом кейсе не приводятся.

4. Продолжил работу с ведомостями, отчётами и печатью

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

Доработал печатные формы журналов и ведомостей, в том числе получение форм, сформированных на стороне 1С, и вывод оценок прописью.

5. Готовил ТЗ для разработчиков 1С

Работа охватывала обе стороны интеграции. Разбирал, где проблема возникает в веб-приложении, а где требуется изменение на стороне 1С. Готовил ТЗ для разработчиков 1С: описывал ожидаемое поведение, параметры запросов, структуру ответов, ошибки и условия проверки результата.

Согласовывал исправления и улучшения логики 1С, в том числе обработку изменения и удаления оценок и признаки удалённых ведомостей. После доработок на их стороне адаптировал веб-приложение и проверял согласованный сценарий обмена. Изменения в 1С выполняли разработчики 1С; мой вклад включал постановку задачи, согласование контрактов и проверку интеграции.

6. Усилил проверку прав и подготовил обслуживание

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

Добавил режим технических работ, редактируемую справку и проверку подключения к 1С. В админке доступны включение и отключение кэша, сроки хранения, статистика и очистка. Улучшил сообщения об ошибках входа и результате сохранения настроек.

Подготовил запуск в Docker, исключил рабочую базу из образа и предусмотрел её отдельное хранение. Обновил зависимости и перевёл шрифт на локальное подключение.

Проверка результата

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

Это сведения о выполненных проверках этапа разработки. Они не заменяют повторную проверку текущего рабочего окружения и интеграции с 1С после обновлений.

Моя роль и техническая основа

Практически полностью переписал логику проблемного проекта при сохранении дизайна. Разбирал исходные ошибки, перерабатывал клиентское поведение и серверную часть, готовил ТЗ для разработчиков 1С, согласовывал изменения на их стороне и проверял обмен. Затем продолжил развитие и сопровождение по замечаниям пользователей и новым требованиям.

Стек: Next.js, React, TypeScript, Node.js, SQLite, better-sqlite3, REST API 1С, Tailwind CSS, Docker.

Для преподавателя результат выражается в более понятном сохранении оценок и работе с занятиями. Для методиста - в согласованных фильтрах, периодах и отчётах. Для сопровождения - в серверной проверке доступа, управляемом кэше и отдельном хранении рабочей базы.