У производителя оборудования почти пять тысяч партнёров по стране. Каждому учётная система считает годовой план закупок и ведёт факт: сколько счетов выставлено, сколько оплачено, по каким товарным группам и в каком месяце. Вся эта картина живёт внутри 1С - там, куда дилер не имеет и не должен иметь доступа.
Почему письмо с таблицей не работает
Разговор вендора с дилером традиционно выглядит так: менеджер выгружает из 1С таблицу, пересылает её по почте, дилер открывает файл и видит срез недельной давности. К следующему разговору цифры снова устарели. На сотню дилеров это сотня писем, и ни один партнёр не может в любой момент ответить себе на простой вопрос: "я иду по плану или отстаю?".
Есть и более серьёзная проблема. Итоговый процент выполнения скрывает главное. Дилер может идти ровно по графику года и при этом не продать ни одной единицы из целой товарной группы: вендор теряет продажи там, где даже не подозревает о провале, а дилер не видит, где у него точка роста. Одна сводная цифра не говорит ни тому, ни другому ничего полезного.
Требовалось перенести управленческую картину из 1С в личный кабинет: чтобы дилер открыл сайт и увидел свой план, свой факт и ту разбивку, за которой стоит конкретное решение.
Решение
Панель дилера: счета, план и выполнение
Дилер заходит в раздел "Статистика покупок" и видит панель, собранную из данных учётной системы. Вот реальная картина одного из региональных дилеров сети, июль 2026 года.
План и факт сайт не рассчитывает сам - они приходят из 1С обычными выгрузками, очередь проверяется каждые ~10 секунд. Цифра в кабинете и цифра в учётной системе не расходятся никогда. Причём сходятся они не только с 1С, но и между собой: сумма оплаченных счетов равна факту года, сумма планов по месяцам - годовому плану, до рубля. Такую панель можно проверять калькулятором, и на ней строится доверие дилера.
Один процент прячет одиннадцать
Дилер идёт по графику. Казалось бы, разговор окончен. Вкладка "По товарным группам" показывает, что это не так.
Одиннадцать товарных групп - одиннадцать разных историй: по одним дилер опережает график, по другим отстаёт, а по группе "Шипы и комплекты дошиповки" факт за год - ноль. Ради этой разбивки раздел и делался: каждая отстающая строка - готовая тема разговора менеджера с партнёром, и видят её обе стороны одновременно, в одних и тех же числах.
Год по месяцам
Вторая вкладка раскладывает тот же год по месяцам. Закупка идёт волнами: спокойный январь, всплеск в феврале, пик в мае - закупка за пиковый месяц в разы больше спокойного. Дилер оборудования закупается под сезон, и кабинет показывает этот ритм так, как он есть в учётной системе.
Месячный план тоже приходит из 1С, поэтому сверяться можно на любом горизонте: год, квартал, месяц. Видно и то, что осень у дилера загружена планом сильнее лета - к этому можно готовиться заранее.
Та же разбивка глазами вендора
Разбивка по группам полезна дилеру. Но у вендора дилеров с годовым планом - сорок четыре, и одни и те же строки у всех сразу складываются в картину, которую не даст ни один сводный отчёт.
Сводный отчёт по сети говорит: продажи группы "Борторасширители" просели. Кто виноват и что делать - неизвестно: может, у кого-то из дилеров просто плохой год.
Одинаковые строки по всем дилерам показывают: план по группе поставлен 44 партнёрам, продажи за год - ровно у четырёх. Сорок из сорока четырёх не продали ни одной единицы.
Это уже разговор не про дилера, а про то, что группа не доходит до сети целиком: вопрос к обучению продавцов, к выкладке, к цене - но точно не к конкретному партнёру. Такую картину видно только тогда, когда план и факт лежат в одном месте, разложены по одинаковым группам и обновляются сами.
Один дилер - шесть юридических лиц
Оптовый партнёр редко работает через одно юридическое лицо. У дилера из нашего примера их шесть, а у самого крупного партнёра сети - шестьдесят четыре.
План при этом один: он поставлен дилеру, а не юридическому лицу. Поэтому и статистика собирается по партнёру - под чьим бы юридическим лицом сотрудник ни вошёл на сайт, он видит единую картину всей своей группы компаний. Складывать шесть отчётов вручную не нужно, и ошибиться в этом сложении невозможно. Это продолжение решения из кабинета оптового клиента, где один аккаунт работает от нескольких юридических лиц.
Каталог и цены для учётной системы дилера
Дилер не только покупает - он и сам продаёт: ведёт свой склад и свою витрину. Значит, ему нужен весь каталог вендора - артикулы, статусы, остатки и его собственные цены - в файле, который загружается в его 1С.
Раздел "Выгрузка товаров и цен" отдаёт такой файл по одной ссылке. Рядом - инструкция по сопоставлению кодов номенклатуры с кодами в учётной системе дилера и прайс-лист отдельным файлом. Цены в выгрузке те же, что и на витрине: это те же 19 сегментов, что и в разборе про персональные цены на одной витрине. Готовить тысячи персональных файлов не нужно - сегментов всего девятнадцать.
Как это устроено внутри
Три разных отчёта учётной системы - по годам, по товарным группам, по месяцам - попадают в одно хранилище и различаются не таблицей, а сочетанием заполненных полей: у годовой строки месяц и группа пусты, у группы заполнена группа, у месяца - месяц. Детали по каждому узлу:
| Решение | Как сделано |
|---|---|
| Одно хранилище на три отчёта | Годы, товарные группы и месяцы лежат в одной таблице; тип строки задан признаком и сочетанием "месяц заполнен / группа заполнена". Три файла из 1С обрабатывает один обработчик в трёх режимах - вместо трёх копий одного кода |
| Обновление без перезаписи | Каждая строка ищется по составному ключу "партнёр + год + группа или месяц": найдена - обновляется, не найдена - создаётся. Повторная выгрузка не стирает накопленное, а актуализирует его |
| Запись только по факту изменений | Перед записью числа сравниваются приведёнными к одному типу: хранилище отдаёт строки, а учётная система - числа. Строка, в которой ничего не поменялось, не переписывается: обмен не создаёт лишней нагрузки на базу |
| Процент выполнения | Считается на сайте: отношение суммы факта к сумме плана по тем годам, где план задан. Одна формула обслуживает итог, товарную группу и месяц - три числа согласованы между собой по построению |
| Товарные группы | Приходят кодами номенклатурных групп 1С; названия подставляются из разделов каталога одним запросом на всю страницу. Строки, у которых группа в 1С не указана, собираются в "Прочее" и всегда выводятся последними |
| Доступ к разделу | Не роль и не группа пользователей, а цепочка данных "юридическое лицо - партнёр - код". Правами управляет 1С: новый дилер получает раздел без участия администратора сайта |
| Глубина статистики | Текущий и предыдущий год: в кабинете сравнивают себя с собой год назад, а не листают архив |
| Переключение года | Оба года отдаются в разметке сразу - переключатель показывает нужный без обращения к серверу |
| Чтение хранилища | Типизированный класс с явной картой полей вместо разбора настроек хранилища на каждое обращение: меньше запросов к базе и обычное автодополнение в редакторе кода |
| Файл каталога для дилера | Готовится заранее, по файлу на сегмент; имя файла - код сегмента. Ссылка на скачивание не содержит пути, а код перед подстановкой очищается - запросить чужой сегмент невозможно |
| Отдача файла | Потоком, порциями по 1 МБ: размер каталога не влияет на потребление памяти |
Почему процент выполнения считается на сайте, если 1С присылает готовый. Поле с процентом действительно приходит: казалось бы, достаточно вывести его на экран. Но процент нужен одновременно в трёх местах: в итоговой строке, в каждой товарной группе и в каждом месяце. Пока формула одна и живёт на сайте, эти числа гарантированно согласованы между собой и с планом, который выведен в соседней колонке. Дилер, проверяющий панель калькулятором, всегда получает то же, что видит на экране, - а доверие к цифрам в кабинете строится именно на таких проверках.
Что это дало бизнесу
| Раньше | Стало |
|---|---|
| План дилера жил только в 1С; отчёт - письмо менеджера с таблицей | План, факт и выполнение - в кабинете дилера; отчёт открывается сам, письма не нужны |
| Дилер видел срез недельной давности | Данные обновляются с частотой выгрузок из 1С; очередь проверяется каждые ~10 секунд |
| Сводный процент выполнения - и больше ничего | Разбивка по товарным группам и месяцам: ноль по группе виден сразу |
| У дилера с шестью юридическими лицами - шесть отчётов | Одна картина на всю группу компаний, под каким бы лицом ни вошёл сотрудник |
| Вендор не видел, где сеть теряет продажи целиком | Одинаковые строки по всем дилерам: план у 44, продают 4 - вопрос к продвижению группы, а не к партнёру |
| Каталог с ценами - по запросу менеджеру | Каталог и цены сегмента - по одной ссылке, файл готов заранее |
| Новый дилер - заявка на доступ администратору сайта | Доступ приходит из 1С вместе с данными |
В цифрах
| Показатель | Значение |
|---|---|
| Партнёров сети со своей статистикой в кабинете | 4 697 |
| Строк плана и факта | 43 342 - годы, товарные группы, месяцы |
| Счетов в хранилище | 79 780 выставленных и оплаченных за два года |
| Разрезов отчётности в одном хранилище | 3; новый разрез - без новой таблицы и правок на сайте |
| Подхват выгрузок сайтом | очередь проверяется каждые ~10 секунд |
| Файлов каталога для дилеров | 19 - по одному на сегмент покупателей, вместо тысяч персональных |
| Юридических лиц у крупнейшего партнёра сети | 64 |
| Товарных групп в разбивке дилера из примера | 11 |
| Дилеров с годовым планом по группе "Борторасширители" | 44, продажи за год - у 4 |
| Глубина статистики | текущий и предыдущий год |
Кабинет дилера - часть большой B2B-платформы: каталог, персональные цены и двусторонний обмен с 1С. Что вошло в проект целиком - в кейсе B2B e-commerce платформы.



