F
Fand_igor

Личный кабинет ординатуры с динамическими формами и интеграцией с 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С;
  • работа с табличными частями, файлами, справочниками и этапами кампании;
  • реализация модераторских и административных сценариев;
  • построение расширяемой архитектуры для дальнейшего развития личного кабинета.