Личный кабинет ординатуры с динамическими формами и интеграцией с 1С
Разрабатывал личный кабинет ординатуры в связке с 1С совместно с 1С-разработчиком. Со своей стороны проектировал и реализовывал веб-часть на Yii2, включая модуль динамических форм, хранение данных, файловый контур, настройки приёмной кампании, работу со справочниками и обратную передачу данных в 1С.
Ключевая ценность проекта заключалась в том, что формы и часть бизнес-логики не были жёстко зашиты в интерфейс. Я реализовал универсальный механизм, который позволял получать структуру форм из 1С в формате JSON, сохранять её в базе, рендерить в личном кабинете, валидировать введённые данные и затем отправлять уже заполненные анкеты и заявления обратно в 1С в ожидаемой структуре.
Отдельной частью моей работы было проектирование интеграционного слоя между 1С и личным кабинетом. Я продумывал структуру JSON-запросов и ответов, правила поведения форм, состав передаваемых сущностей, логику сценариев и подготавливал документацию для обмена данными между 1С и ЛК.
Контекст проекта
Проект решал задачу цифровизации процессов приёмной кампании в ординатуру:
- регистрацию поступающих;
- ведение анкеты и персональных данных;
- заполнение и сопровождение заявлений;
- работу модераторов с проверкой, комментариями и статусами;
- синхронизацию справочников, этапов кампании и настроек из 1С;
- обмен файлами и документами между личным кабинетом и внешней системой.
По сути это был не просто набор веб-форм, а прикладной личный кабинет с собственной платформой динамических форм поверх интеграции с 1С.
Что было реализовано
- Реализовал модуль
dynamicformкак отдельный контур приложения для работы с динамическими формами. - Спроектировал API-взаимодействие между 1С и личным кабинетом на уровне структуры запросов, ответов и пользовательских сценариев.
- Подготавливал документацию для JSON-структур, по которым 1С передавала схемы форм, справочники, настройки и принимала обратно анкеты и заявления.
- Построил модель хранения структуры формы через секции, формы, блоки, поля, типы элементов и события.
- Реализовал загрузку структуры динамических форм из 1С через API с авторизацией, разбором JSON и сохранением в локальную БД.
- Добавил механизм актуальности форм и событий, чтобы обновления из 1С не ломали текущую логику и позволяли управлять версиями структуры.
- Сделал единый
DynamicFormWidget, который рендерил форму по имени, UID секции или UID формы и использовался в разных сценариях кабинета. - Подключил динамические формы в регистрацию поступающего, анкету, редактирование отдельных блоков, работу с заявлениями и модальными окнами.
- Реализовал сохранение значений динамических полей с привязкой к пользователю, заявлению, сессии формы, блоку, группе строк и табличным элементам.
- Поддержал табличные блоки и повторяющиеся группы данных, где одна форма могла содержать несколько строк с одинаковой структурой полей.
- Реализовал сохранение файлов внутри динамических форм с отдельным файловым модулем, метаданными файлов и API-доступом по токену.
- Добавил серверную валидацию динамических полей на основе конфигурации формы и типа элемента.
- Реализовал дополнительные валидаторы для прикладных реквизитов, включая СНИЛС и другие идентификационные данные.
- Сделал проверку уникальности и сценарии восстановления доступа по паспортным данным через связку локальной БД и API 1С.
- При регистрации нового пользователя сохранял не только аккаунт, но и профиль поступающего, персональные данные и документы, привязанные к динамической форме.
- Реализовал сбор и нормализацию данных анкеты и заявления перед передачей обратно в 1С.
- Собирал вложенные структуры для 1С с сохранением UID секций, форм, блоков, полей, сортировки, типов элементов, таблиц и групп строк.
- Поддержал отдельную сериализацию полей и табличных частей, чтобы веб-форма могла быть корректно преобразована обратно в формат обмена с 1С.
- Добавил сохранение отладочных JSON-файлов для контроля структуры отправляемых данных.
- Реализовал административные сценарии обновления динамических форм и журналов из 1С через консольные команды и запуск из веб-интерфейса.
- Добавил отдельный контур настроек приёмной кампании: сроки, этапы, события, фильтры, флаги обязательности и поведение отдельных пользовательских сценариев.
- Реализовал модераторские сценарии работы с заявлениями: комментарии, выбор блоков на проверку, смену статусов, просмотр списков и сопровождение заявлений.
- Подключил справочники и журналы из 1С для выбора значений в динамических полях и последующей расшифровки данных в интерфейсе.
- Реализовал загрузку и обновление адресных данных ФИАС из 1С, включая хранение по регионам и версионность выгрузки.
Что было важно технически
- Динамические формы были отвязаны от жёстко заданного HTML и собирались на основе структуры, пришедшей из 1С.
- Слой интеграции проектировался не как набор разрозненных вызовов, а как согласованный API-контракт между 1С и веб-приложением.
- Один и тот же движок использовался для разных сценариев: регистрация, анкета, заявление, редактирование отдельных блоков, модальные формы.
- Значения хранились не просто как плоские поля, а как связанная структура с
section_uid,form_uid,block_uid,field_uid,group_uid,statement_uidиsession_uid. - Для табличных частей использовал отдельную логику группировки строк и повторяющихся блоков, чтобы сохранить совместимость с моделью данных 1С.
- Обратную передачу заявления в 1С делал не на уровне примитивного массива полей, а с полной реконструкцией структуры формы и сортировкой элементов.
- Для обмена с 1С проектировал состав JSON-пакетов, правила сериализации данных и поведение API в зависимости от сценария пользователя.
- Валидация строилась динамически в зависимости от конфигурации поля и типа элемента.
- Обновление форм и справочников было вынесено в отдельные консольные сценарии, чтобы не завязывать обмен с 1С только на пользовательские действия.
- Для файлов реализовал отдельный модуль загрузки и защищённый API-контур получения.
Что показывает проект
- Опыт плотной совместной работы с 1С-разработчиком на уровне структуры обмена, схемы JSON и прикладной логики.
- Опыт проектирования API и документации для интеграции между 1С и личным кабинетом.
- Умение проектировать не только формы, но и универсальный движок динамических форм с хранением схемы и данных.
- Умение переводить внешнюю структуру 1С в рабочий веб-интерфейс и обратно.
- Опыт построения сложной модели данных для личного кабинета, где есть пользователи, анкеты, заявления, файлы, справочники, этапы кампании и роли.
- Опыт работы с кабинетами для внутренних и внешних пользователей, где важны роли, модерация, статусы и история изменений.
Технологии
- PHP
- Yii2
- MySQL
- Bootstrap 5
- JavaScript
- jQuery
- Yii HTTP Client
- JSON API
- SOAP
- 1С API integration
- ФИАС
Моя роль
Моя роль была ключевой со стороны веб-разработки. Я участвовал в проектировании решений вместе с 1С-разработчиком и реализовывал веб-часть личного кабинета: модуль динамических форм, хранение и валидацию данных, пользовательские сценарии регистрации и подачи заявлений, файловый контур, административные настройки, интеграцию со справочниками и обратную передачу данных в 1С. Дополнительно проектировал API-контракт между 1С и ЛК, продумывал структуру JSON, сценарии поведения и готовил документацию для корректного обмена данными между системами.
Практическая ценность проекта
Этот проект хорошо показывает не просто разработку кабинета на Yii2, а создание прикладной платформы поверх 1С-интеграции:
- проектирование собственного механизма динамических форм;
- проектирование API и JSON-контрактов для интеграции между 1С и веб-приложением;
- двусторонний обмен сложными структурами данных с 1С;
- работа с табличными частями, файлами, справочниками и этапами кампании;
- реализация модераторских и административных сценариев;
- построение расширяемой архитектуры для дальнейшего развития личного кабинета.