Федеральное агентство радиорекламы занимается размещением сетевой и мультилокальной рекламы на радио, а также рекламой в Digital Audio. Для такого бизнеса прайс-лист радиостанции - не просто файл с ценами, а основа будущего медиаплана: в нем зашиты город, станция, период действия, стоимость спотов, НДС, скидки, сезонные коэффициенты, наценки и другие условия, которые влияют на итоговый бюджет рекламной кампании.
До проекта команда работала в старой десктопной системе на Delphi и Firebird, созданной примерно 10-15 лет назад. Она закрывала базовый процесс, но ее интерфейс, техническая база и внутренняя логика уже не соответствовали текущим задачам команды. Поддерживать и развивать такое решение было сложно: по системе оставалось мало документации, а часть знаний о ее устройстве была завязана на разработчика, который давно не участвовал в проекте.
Перед нами стояла задача не просто обновить интерфейс, а заменить старое приложение новым рабочим инструментом: сохранить привычную бизнес-логику, перенести накопленные данные и заложить основу для дальнейшего развития продукта.
Почему медиапланирование на радио сложно автоматизировать
Радиостанции передают условия размещения в разных форматах: PDF, DOC, PNG, TXT, письма с вложениями и другие файлы. Прайс-листы могут приходить не только по почте: радиостанция может направить их менеджеру по любому рабочему каналу. Эти условия нужно привести к единой структуре, связать с конкретным городом и радиостанцией, проверить актуальность, а затем использовать в расчетах.
Медиаплан при этом остается ключевым рабочим документом для коммуникации с клиентами и контрагентами. Он должен быть понятным, точным и пригодным для дальнейшей работы в Excel: с разбивкой по месяцам, расчетом стоимости спотов, итогами, скидками, НДС и сводными таблицами.
Сложность проекта была в том, что приложение должно было соединить два мира:
- привычный Excel-формат, в котором участники рынка продолжают работать с медиапланами;
- централизованную веб-систему, где хранятся прайс-листы, письма, справочники, роли и расчетные правила.
Задача
На этапе технического проектирования мы разобрали старую систему, восстановили ключевые пользовательские сценарии и описали будущую архитектуру. После этого перешли к разработке нового приложения.
Нужно было реализовать:
- полноценную замену старой системы;
-
миграцию исторических данных;
-
новый интерфейс и дизайн-систему;
-
модуль управления прайс-листами;
-
генератор медиапланов;
-
модуль хранения писем и вложений;
-
справочники городов, радиостанций и пользователей;
-
ролевую модель для специалистов и администраторов;
-
основу для дальнейших доработок после первого релиза.
Отдельным условием было сохранить логику, к которой привыкли пользователи. Новое приложение не должно было ломать рабочий процесс команды: наоборот, оно должно было сделать его современнее, прозрачнее и удобнее.
Решение
Новое веб-приложение вместо устаревшей системы
Мы спроектировали и разработали модульное веб-приложение на PHP/Symfony и Vue/PrimeVue. Бэкенд отвечает за бизнес-логику, расчеты, работу с данными и REST API. Фронтенд дает пользователям современный интерфейс для управления прайс-листами, медиапланами, письмами и справочниками.
Дизайн приложения также был разработан с нуля на стороне PWD. Бизнес-аналитик подготовил прототипы, после чего дизайнер собрал интерфейсы на UI-ките, а команда разработки реализовала их в продукте. В результате заказчик получил не просто техническую замену старого решения, а новое приложение с понятной навигацией, актуальным визуальным языком и удобными сценариями работы.
По сути, мы сохранили ядро старого бизнес-процесса, но перенесли его в новую архитектуру: обновили интерфейс, добавили новые функции, сделали работу с данными более прозрачной и подготовили систему к дальнейшему развитию.
Миграция: перенесли историческую базу по всей России
В старой системе накопился большой объем данных за годы работы компании. В новую систему были перенесены города, радиостанции, пользователи, медиапланы и прайс-листы.
По оценке команды, речь идет о базе федерального масштаба: в справочниках присутствуют города по всей России, включая небольшие населенные пункты, а количество прайс-листов составляет десятки тысяч записей. В рабочем списке прайс-листов отображалось 506 страниц по 50 элементов, то есть более 25 тысяч прайс-листов с разными статусами: устаревшие, текущие и будущие.
Это важно для бизнеса: новое приложение стало не пустой оболочкой, а продолжением накопленной базы. Команда заказчика смогла перейти в новую систему без потери исторических данных и рабочих связей между городами, станциями и условиями размещения.
Модуль прайс-листов: единая база коммерческих условий
Прайс-лист в системе стал полноценной сущностью, а не просто прикрепленным файлом. Пользователь может создать прайс, связать его с городом и радиостанцией, указать период действия, тип прайса, НДС, инфляцию, предоплату, скидки, наценки, сезонные коэффициенты и другие параметры.

В модуле реализованы:
- создание черновиков, просмотр, редактирование, удаление и копирование прайс-листов;
-
поиск, фильтрация, сортировка и пагинация списка;
-
настройка отображения списка;
-
детальная карточка прайс-листа с вкладками по смысловым блокам;
-
создание города или радиостанции прямо из карточки прайса;
-
привязка писем и файлов к конкретному прайс-листу;
-
статусы и визуальная подсветка прайсов по актуальности;
-
блокировка прайсов, которые нельзя использовать в расчете;
-
контроль дубликатов активных прайс-листов по связке "город + радиостанция".
Отдельно была реализована функция копирования прайс-листа. Она появилась как пострелизная доработка: в первоначальный релиз функция не вошла из-за оптимизации объема работ, но после запуска заказчик вернулся к ней как к важному ускорителю ежедневной работы. При копировании система учитывает ограничения, чтобы новый прайс не конфликтовал с предыдущим по календарным интервалам и другим важным параметрам.
Генератор медиапланов: от выбранных прайсов к Excel-файлу
Один из ключевых модулей приложения - генератор медиапланов. Пользователь выбирает прайс-листы из базы, задает параметры рекламной кампании, календарные интервалы и время выхода, после чего система формирует Excel-файл в нужном формате.

В генераторе реализованы:
- индивидуальная страница медиаплана для специалиста, чтобы разные пользователи не затирали данные друг друга;
-
список радиостанций, сгруппированных по городам;
-
поиск по городу и радиостанции;
-
выбор одного или нескольких прайс-листов для медиаплана;
-
сортировка временных и календарных интервалов;
-
сохранение медиаплана и версионность через создание копии при генерации;
-
запуск генерации с подтверждением;
-
прогресс выполнения по количеству обработанных месяцев;
-
размещение каждого прайс-листа на отдельном листе Excel;
-
формирование клиентской и менеджерской сводных таблиц;
-
разные режимы итогов: без сводки, без разделения, с разбивкой по месяцам, по НДС, по месяцам и НДС.
Медиаплан может включать до 100-200 прайс-листов в одном файле. Система собирает данные из выбранных прайсов и формирует документ, в котором по каждому листу доступны расчетные блоки, месяцы, споты, минуты, скидки, НДС и итоговый бюджет.
Что осталось в Excel и почему
Excel в проекте не был "остатком прошлого", который нужно любой ценой убрать. Для рынка это привычный формат обмена медиапланами с клиентами и контрагентами, поэтому мы сохранили его как финальный рабочий документ.
В веб-приложении остались подготовка и управление данными:
- структурирование прайс-листов;
-
выбор городов, радиостанций и условий;
-
хранение исходных писем;
-
настройка параметров медиаплана;
-
запуск генерации;
-
разграничение доступа.
В Excel вынесена финальная рабочая форма медиаплана: документ, который можно передавать дальше, согласовывать и использовать в процессе размещения. При этом файл генерируется из централизованных данных, а не собирается вручную с нуля.
Такой подход позволил не ломать привычный сценарий работы команды и контрагентов, но убрать значительную часть ручной подготовки из самого процесса.
Ролевая модель: разные сценарии для специалистов и администраторов
В системе предусмотрено разделение прав. Специалист по медиапланам работает со своим разделом и видит ограниченный набор функций, необходимый для подготовки медиапланов. Администратор получает доступ ко всем возможностям системы: прайс-листам, медиапланам, письмам, справочникам, пользователям и дополнительным операциям.
Такая модель помогает разделить ответственность:
- специалисты по прайс-листам поддерживают базу коммерческих условий;
-
специалисты по медиапланам формируют документы для рекламных кампаний;
-
администраторы управляют системой, справочниками и расширенными сценариями.
Система рассчитана не только на внутреннюю команду заказчика. Доступ к ней могут получать и внешние участники процесса: например, менеджеры со стороны контрагентов, которые работают с прайс-листами и передают данные. Технически решение закладывалось с запасом по росту и может поддерживать сотни пользователей, хотя реальная активная нагрузка зависит от того, сколько партнеров заказчик переведет в систему.
Письма и вложения: источник прайса всегда под рукой
Так как прайс-листы часто приходят письмами или передаются менеджерам по другим каналам, в приложении реализован отдельный модуль для работы с письмами и файлами.
Система позволяет:
- автоматически подгружать письма по настройкам почты;
-
вручную запускать синхронизацию;
-
загружать письма с устройства в форматах OFT, MSG и TXT;
-
исключать повторную загрузку уже существующих писем;
-
хранить отправителя, получателя, тему, тело письма и вложения;
-
искать и фильтровать письма;
-
привязывать письма и файлы к конкретным прайс-листам.
Это закрывает важную операционную задачу: если нужно проверить источник условий, пользователь может перейти от прайс-листа к связанному письму и вложениям, а не искать документ в почте или локальных папках.
Пострелизное развитие: защита файлов и обработка медиапланов
После первого релиза у заказчика появились новые запросы к системе. Один из них - защита сформированного Excel-файла. В медиаплан добавили брендирование, чтобы сохранить авторство документа и снизить риск его некорректного использования.
Также появилась задача ограничить редактирование файла, чтобы контрагенты не могли произвольно менять суммы и другие расчетные данные.
Еще одно направление развития - обработка уже заполненного медиаплана. Этот сценарий нужен, когда специалист сформировал медиаплан, отправил его контрагенту, а затем получил обратно файл с ручными изменениями: удаленными блоками, заполненными спотами, измененными ячейками или дополнительными данными.
Для следующего этапа была подготовлена отдельная спецификация. По этой логике администратор загружает Excel-файл обратно в систему, приложение распознает прайс-листы внутри документа, сопоставляет их с базой, предлагает выбрать найденные позиции и генерирует новый корректный медиаплан. При обработке система должна забирать из файла пользовательские изменения, но пересчитывать ключевые коммерческие данные по актуальным прайс-листам из приложения.
Такой механизм должен снизить объем ручной сверки: вместо сравнения двух Excel-файлов пользователь сможет получить обработанный документ, где сохранены нужные изменения, а расчетные данные приведены к правилам системы.
Результат
PWD помогла заказчику перейти от устаревшей легаси-системы к современному веб-приложению для ежедневной работы с прайс-листами и медиапланами.
Что получил заказчик:
- полноценную замену старого приложения;
-
новый интерфейс и дизайн, разработанные с нуля;
-
перенесенную историческую базу по городам, радиостанциям, пользователям, медиапланам и прайс-листам;
-
единую систему хранения прайс-листов и исходных писем;
-
контроль актуальности и применимости прайсов;
-
автоматическую генерацию сложных Excel-медиапланов;
-
ролевую модель для специалистов и администраторов;
-
основу для дальнейших доработок после запуска.
Решение сохранило привычный для бизнеса Excel-контур, но перенесло подготовку данных, контроль и часть расчетной логики в централизованное приложение. За счет этого команда получила более управляемый процесс: от исходного письма с прайсом до готового медиаплана для клиента. Новое приложение стало основой, которую можно развивать дальше без зависимости от старой системы и ее ограничений.