Ноябрь 2025 - август 2026
Электронный журнал: переработка логики и интеграции с 1С
Принял сильно проблемное приложение для учебных журналов, ведомостей и успеваемости и практически полностью переписал его логику. Дизайн не менял: сохранил существующее оформление и привычные пользователям разделы. Переработал поведение клиентской части, серверную обработку, получение и сохранение данных, интеграцию с 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.
Для преподавателя результат выражается в более понятном сохранении оценок и работе с занятиями. Для методиста - в согласованных фильтрах, периодах и отчётах. Для сопровождения - в серверной проверке доступа, управляемом кэше и отдельном хранении рабочей базы.