Аудио формат:
В большинстве оптовых компаний есть 1С, есть CRM, есть сайт и есть куча Excel-файлов, которые их связывают. Вопрос «сколько мы заработали на этой товарной группе в июне» превращается в неделю переписки, а ответов получается три — от отдела продаж, от бухгалтерии и из Power BI, который кто-то настроил полтора года назад.
Я построил систему, которая закрывает этот разрыв целиком: от чтения базы 1С до окна переписки с клиентом внутри корпоративного портала. Она работает в компании-дистрибьюторе больше полугода, ей пользуются около 120 сотрудников каждый день, и её данные сходятся с учётом до последнего знака.
Ниже — подробный разбор: как устроен каждый слой, что умеет каждый продукт и как это внедряется в другой компании. Все названия и данные на иллюстрациях изменены, скриншоты сделаны на демонстрационном наборе.
Что не работает в обычной схеме
Типичная картина, которую я вижу почти в каждой компании такого размера:
- Отчёты живут в файлах. Кто-то собирает выгрузку, кладёт её в общую папку, дальше файл копируется и правится. Один такой рабочий файл, который мне показывали, весил 750 мегабайт и открывался четыре минуты.
- Одни и те же цифры считаются по-разному. В одном отчёте выручка с НДС, в другом без, в третьем внутренние перемещения между своими юрлицами посчитаны как продажи. Никто не виноват — просто правило не записано нигде, кроме головы автора.
- Часть данных не существует в принципе. Суммы доставки лежат в личном кабинете перевозчика и попадают в учёт с задержкой в месяц-два. Данные о рынке — в открытых реестрах, которые кто-то выгружает руками. Переписка с клиентом — в личном телефоне менеджера и уходит вместе с ним.
- Отчёт нельзя проверить. Он показывает число, но откуда оно взялось и почему отличается от 1С — выяснить невозможно.
Дальше начинается самое дорогое: спор о том, чьи цифры верные, занимает больше времени, чем работа с самими цифрами.
Что получилось в итоге
Единый контур: данные из десяти источников собираются в одно хранилище, пересчитываются в готовые витрины и раздаются людям там, где они уже работают — в портале отчётов, в личном кабинете, в CRM и в окне переписки с клиентом.
Общая схема контура данных. Названия систем обобщены.Ключевые характеристики работающей системы:
| Параметр | Значение |
|---|---|
| Источников данных | 10 |
| Конвейеров загрузки | 19 (14 активных) |
| Шаг обновления данных из учёта | 30 минут |
| Объём хранилища | 44 ГБ |
| Строк в самой большой таблице | 13,1 млн |
| Готовых отчётов | 47 |
| Пользователей | около 120 |
| Расхождение выручки с учётной системой | 0,0000% |
| Лицензионные платежи за пользователей | нет, всё ПО свободное |
Слой 1. Как данные забираются из 1С
Проблема нечитаемой базы
Базы 1С устроены так, что таблицы в них называются нечитаемо: вместо «Контрагенты» — набор букв и цифр. Обычно компании решают это покупкой стороннего инструмента, который строит поверх базы понятные представления.
Я написал свой генератор. Он читает служебный словарь метаданных прямо из базы и создаёт представления с человеческими именами — справочники, документы с табличными частями, регистры сведений, накопления и расчёта, перечисления, планы видов характеристик. Отдельно собираются служебные таблицы: значения всех перечислений и типы регистраторов документов — без них ссылки в регистрах не расшифровать.
Практический смысл: в новой компании это первый запускаемый инструмент, и он делает базу пригодной для работы за один прогон, без ручного разбора чужой конфигурации и без дополнительных лицензий.
Три стратегии инкрементальной загрузки
Забирать всю базу каждый раз невозможно — это терабайт. Забирать «изменённое с прошлого раза» в 1С тоже не так просто: у разных объектов признак изменения разный. Работают три стратегии:
- По версии данных. Справочники и документы: 1С хранит служебное поле версии, которое растёт при любой правке. Забираем всё, что больше запомненной отметки.
- По дате. Регистры-факты: продажи, расчёты, движения склада. Берём окно последних дней с перекрытием — документ, проведённый задним числом, попадает в следующий же прогон.
- По родителю. Строки документов: тянем не все 7,5 млн строк, а только принадлежащие шапкам, которые изменились.
Каждая загрузка идемпотентна: повторный запуск не задваивает строки, потому что запись идёт через первичный ключ с обновлением при конфликте. Это важнее, чем кажется — оно позволяет спокойно перезапускать любой конвейер, не думая о последствиях.
Оркестрация и наблюдаемость
Девятнадцать конвейеров с расписаниями от «каждые 30 минут» до «раз в месяц». Каждый прогон пишет журнал: сколько строк прочитано, сколько записано, сколько времени заняло, где остановилась отметка инкремента.
Служебная панель: состояние конвейеров, история запусков, отставание данных. Данные демонстрационные.Отдельно ночью работает сверка: система берёт окно в 60 дней, перечитывает регистры заново и удаляет строки, которых в учёте больше нет (документ мог быть удалён или перепроведён). Без этого шага хранилище медленно расходится с источником, и обнаруживается это через полгода на неприятном совещании.
Слой 2. Хранилище
Реляционная СУБД с расширением для временных рядов. Крупные факты нарезаны по месяцам, поэтому запрос за квартал читает три куска, а не всю историю.
Модель классическая: измерения (клиенты, товары, склады, сотрудники, подразделения) и факты (продажи, расчёты, заказы, движения склада, план и факт). Но есть особенность, ради которой стоит читать этот раздел, если вы работаете с 1С.
Ключи аналитики: главная ловушка данных 1С
В 1С факт продажи не ссылается на справочник клиентов напрямую. Между ними стоит промежуточный объект — ключ аналитики учёта. Таких ключей несколько: по партнёрам (кто купил), по номенклатуре (что продали), по партиям (чей товар продали).
Что это значит на практике:
- Попытка соединить факт со справочником «в лоб» даёт пустой результат — и это ещё хороший случай, потому что ошибка видна сразу.
- Плохой случай: в справочнике клиентов есть два похожих поля — сам контрагент и партнёр (группа компаний). Для большинства записей они совпадают, поэтому подмена почти незаметна. Но не для всех: в одном отчёте такая ошибка молча теряла 10–20% поставщиков бренда, отправляя их в категорию «не определён». Отчёт не падал. Он просто был неверным.
Отдельная схема хранит кадровый контур, отдельная — переписку с клиентами, отдельная — реестр соответствий между системами. Про последний ниже, это ключевая часть.
Слой 3. Витрины и одна версия правды
Отчёты никогда не читают сырые факты. Между ними — 53 витрины, которые пересобираются ночью и хранят уже посчитанные разрезы.
Главное здесь — не производительность, а единое определение выручки. Это отдельное представление, которое отвечает на вопрос «что в этой компании считается продажей»:
- без НДС;
- без внутренних юрлиц группы (перемещение товара между своими компаниями — не продажа);
- только по разрешённым типам документов;
- без служебных складов и акционных сегментов.
Все эти правила вынесены в справочник-реестр исключений, а не зашиты в каждый запрос. Меняется в одном месте — применяется везде.
Результат сверки с учётной системой — расхождение 0,0000%. Именно это, а не количество графиков, делает отчёты рабочим инструментом: когда финансовый директор проверяет цифру в 1С и она сходится, спор заканчивается.
Продукт 1. Портал отчётов
Основное рабочее место: каталог из 47 отчётов по продажам, закупкам, складу, логистике, персоналу и сводкам для руководства.
Каталог: папки по направлениям, поиск, время последнего обновления каждого отчёта. Данные демонстрационные.Из чего состоит отчёт
Каждый отчёт описывается конфигурацией — набором колонок, фильтров, показателей и графиков. Что доступно:
- Типы колонок: текст, число, деньги, проценты, дата, месяц, ссылка на карточку, цветовые правила по значению (например, маржа ниже порога подсвечивается).
- Плитки показателей над таблицей: сумма, среднее, доля, отклонение от прошлого периода со стрелкой роста или падения.
- Фильтры: период, месяц, множественный выбор из справочника, поиск с подсказками, переключатели (например, «с НДС / без НДС»), быстрые пресеты.
- Графики: динамика по месяцам, столбцы по категориям, круговая диаграмма долей. График по датам автоматически схлопывается до месяцев и сортируется хронологически.
- Вкладки: один отчёт может показывать один и тот же предмет на разных уровнях подробности — сводка, детализация, справочник.
- Выгрузка в Excel — с теми же фильтрами, что на экране.
Отчёт «План и факт продаж»: плитки показателей, динамика, таблица с прогресс-барами и статусами. Данные демонстрационные.Сводные таблицы: конструирование разрезов
Отдельный режим — иерархическая сводная таблица, работающая как матрица в Power BI. Измерения задаются произвольным списком любой глубины: например, «филиал → менеджер → сегмент → клиент». Узлы раскрываются и сворачиваются, агрегаты пересчитываются на лету.
Тонкости, которые пришлось решать:
- Проценты не суммируются. Если колонка — это доля, в узле она пересчитывается как отношение сумм числителя и знаменателя, а не как сумма процентов.
- Строки нижнего уровня иногда перекрываются (например, товарные цели вложены в общий оборот). Для таких случаев есть флаг: агрегаты узлов считаются только по неперекрывающимся строкам, иначе итог задваивался бы.
- Итоги сводной обязаны сходиться с итогами обычной таблицы — это проверяется автоматически, о чём ниже.
Сводная: филиал → менеджер → направление, раскрытие по клику, маржа пересчитывается в узлах. Данные демонстрационные.Права: кто какие строки видит
Доступ разграничивается на двух уровнях:
- Папки — какие отчёты человек вообще видит в каталоге.
- Область видимости — какие строки внутри отчёта. Задаётся узлами структуры предприятия из учётной системы: выдали руководителю его отдел — поддерево разворачивается само. Менеджер видит своих клиентов, руководитель — своё дерево, директор — компанию целиком.
Важная деталь реализации: учётка, заведённая автоматически из оргструктуры, создаётся выключенной, если отдел сотрудника ещё не сопоставлен узлу учётной системы. Пустая область видимости в такой системе означает «ограничений нет» — то есть автосоздание без этой защиты открыло бы новому человеку данные всей компании.
Права сотрудника: узлы структуры предприятия слева, доступные папки справа, журнал изменений внизу. Данные демонстрационные.Что ещё умеет портал
- Вход из корпоративного портала без отдельного логина. Отчёты открываются вкладкой внутри CRM: система спрашивает у портала, кому принадлежит токен, находит сотрудника в оргструктуре и выдаёт ему собственный доступ с его правами.
- Карта клиентов с фильтрами и слоями: свои клиенты, клиенты без заказов, организации рынка, которых у нас нет. С карты ставится задача полевому представителю.
Карта: слои включаются независимо, размер точки — объём закупок, визит ставится прямо из карточки. Данные демонстрационные.- Редактируемые справочники прямо в отчёте: планы продаж, признаки клиентов, загрузка прайсов поставщиков — то, что раньше жило в Excel и присылалось по почте.
- Черновики. Новый отчёт сначала виден только администратору: он работает, проходит все проверки, но пользователям не показывается ни в каталоге, ни по прямой ссылке — пока цифры не сверены с учётом вручную.
- Полнотекстовый поиск по каталогу с синонимами: «дебиторка», «долги», «просрочка» ведут к одному отчёту.
Продукт 2. Личный кабинет сотрудника
Отдельное приложение, доступное с телефона: сотрудник видит свои показатели и свои задачи, не открывая ни 1С, ни отчёты.
Кабинет: выполнение плана, задания на день, ближайшие оплаты. Данные демонстрационные.Что туда уезжает
Платформа отправляет в кабинет тринадцать наборов данных:
- оргструктура и сотрудники — с их кодами в учётной системе;
- справочник показателей — отправляется раньше значений, иначе показатель с незнакомым кодом будет отклонён;
- показатели за период — продажи, маржа, план и факт, активные клиенты;
- показатели по сегментам — те же цифры в разрезе товарных направлений;
- долги клиентов и задания по ним;
- оплаты поставщикам — почасовой снимок в течение рабочего дня;
- сроки поставок и справочник поставщиков;
- штатное расписание, производственный календарь, отсутствия сотрудников;
- типы заданий и сами задания.
Задания: работа приходит сама
Это главное отличие кабинета от «ещё одного дашборда». Задание не ставится руководителем вручную — оно рождается из данных:
- Просроченный долг. Клиент, сумма, срок просрочки, документ. Отказаться нельзя — только выполнить или перенести. Результаты: оплатил, обещал оплату, спорит по документам, не дозвонился.
- Клиент замолчал. Раньше покупал регулярно, теперь пауза дольше обычного. Результаты: дозвонился, не берёт трубку, отказ.
- Сдвиг срока поставки. Поставщик сдвинул дату — предупредить клиента, который этот товар ждёт.
У каждого задания есть приоритет, группа (финансы, продажи, снабжение) и набор допустимых действий. Ответ сотрудника возвращается обратно и становится частью аналитики: видно, какие задания выполняются, какие переносятся неделями и по каким клиентам обещания не выполняются.
Инженерные детали, которые важны на практике
- Выдача доступа отправляется мгновенно. Кабинет показывает кнопку «Отчёты» только тем, у кого доступ действительно есть. Раньше это узнавалось из почасовой выгрузки — администратор выдавал права, а кнопка появлялась «когда-нибудь потом».
- Приём идемпотентен. Повторная присылка того же пакета отвечает «уже принято», поэтому обрыв связи безопасен.
- Разделение ошибок. Обрыв сети и перегрузка приёмника повторяются автоматически; ошибка в самих данных не повторяется, а чинится — иначе система бесконечно шлёт заведомо неверный пакет.
- Недоступность кабинета не ломает работу внутри. Он живёт на внешнем сервере, и его падение не мешает ни выдаче прав, ни отчётам.
Продукт 3. Переписка с клиентами
Клиенты пишут в мессенджеры — это данность. Проблема в том, что переписка идёт с личных телефонов менеджеров: компания не видит историю, не может подхватить диалог при увольнении и не знает, о чём вообще разговаривают с клиентом.
Окно переписки собирает три канала в одном месте и встраивается вкладкой в корпоративный портал.
Три канала в одной очереди, карточка клиента в шапке, распознанная заявка прямо в диалоге. Данные демонстрационные.Три канала
- Личные рабочие аккаунты в Telegram. Сотрудник подключает аккаунт по QR-коду, сессия шифруется и хранится в закрытом контуре.
- MAX — российский мессенджер, подключается так же.
- Открытые линии корпоративного портала — виджет сайта, сообщества в соцсетях, коннекторы. В нашем случае этот канал оказался самым нагруженным: почти две тысячи сессий и полтысячи клиентов в месяц — больше, чем в личных мессенджерах.
Движок очередей, папок и прав одинаков для всех трёх: различается только то, откуда берутся сообщения. Благодаря этому четвёртый канал добавляется без переписывания логики.
Что умеет окно
- папки со счётчиками: требуют ответа, жду клиента, передано коллеге, закрытые;
- автоматическая раздача новых обращений и передача диалога коллеге;
- автозакрытие «залежавшихся» диалогов, по которым никто не отвечает;
- статусы прочтения, реакции, ответы на конкретное сообщение;
- вложения: файлы принимаются и отдаются, хранятся во внутреннем контуре, а не в памяти контейнера;
- шаблоны ответов — часто повторяющиеся формулировки в один клик;
- полнотекстовый поиск по сообщениям, клиентам и номерам телефонов.
- собеседник опознаётся по номеру телефона и связывается с карточкой клиента: менеджер видит, кто пишет, что этот клиент покупал, есть ли у него долг и кто за него отвечает;
- если номера в CRM нет, контакт заводится автоматически, а связка запоминается — больше система его не спутает.
- оператор — свои диалоги;
- аудитор («корректор») — видит папки всех менеджеров: нужен для контроля качества переписки;
- администратор продукта — настраивает линии, раздаёт роли, назначает операторов линии, передаёт администрирование;
- доступ к открытым линиям выдаётся отделу, а не отдельным людям: у линии нет владельца, её ведёт подразделение целиком.
- живые события приходят в браузер по постоянному соединению — новое сообщение появляется без обновления страницы;
- видно, кто из коллег сейчас смотрит этот же диалог, — чтобы двое не отвечали одновременно;
- исходящие сообщения идут через очередь с повторами: если мессенджер недоступен, сообщение не теряется, а уходит позже;
- сторож следит за состоянием подключений и поднимает их сам.
Отдельная деталь для тех, кто будет повторять: под нагрузкой прямое соединение с мессенджером рвалось примерно раз в минуту, и отправка упиралась в таймаут. Помог транзит через собственный узел — трафик идёт в обычном защищённом туннеле, а служебный ключ узла умеет только пробрасывать порты и не может выполнять на нём команды.
Правовая рамка — не формальность
Переписка сотрудника с клиентом — это тайна связи. Сбор законен только при уведомлении, подписанном до подключения аккаунта. В системе это не инструкция, а ограничение базы: пока не проставлена дата подписи, аккаунт нельзя включить технически. Тексты переписки не передаются в языковые модели ни при каких условиях.
Продукт 4. Распознавание заявок из пяти каналов
Клиент редко присылает аккуратный список артикулов. Он пишет словами: «перчатки М двадцать упаковок, салфетки десять, и что-то вместо ветоши, которую в прошлый раз брали». Менеджер тратит на превращение этого в заказ 10–20 минут.
Сервис распознавания превращает текст или фотографию счёта в позиции номенклатуры с оценкой уверенности. Он подключён к пяти точкам входа:
Каналы распознавания и то, что считается по каждому из них. Схема обобщена.- Виджет на сайте — клиент вставляет свой список сам и получает готовую корзину.
Клиент вставляет список своими словами и получает собранную корзину с ценами по своему договору. Данные демонстрационные.- Бот в корпоративном портале — заявка приходит сотруднику в чат уже разобранной.
Тот же разбор внутри портала: сотрудник пересылает боту сообщение клиента и создаёт заказ из ответа. Данные демонстрационные.- Личные мессенджеры — менеджер выделяет сообщения клиента прямо в окне переписки и получает позиции.
- Открытые линии — то же самое для обращений с сайта и из соцсетей.
- Фотография или скан счёта — снимок бумажной заявки.
Спорные позиции не выдумываются, а помечаются: «ветошь — три варианта, нужно уточнить». Цены сервис не считает принципиально — их считает учётная система по договору с конкретным клиентом.
Что из этого получается для аналитики
Раньше ни один шаг этого пути не сохранялся: воронка считалась на лету, обращения к помощнику жили в журнале сервиса до перезапуска. Теперь по каждому каналу видно:
- сколько заявок распознано и сколько позиций в них;
- сколько клиент подтвердил, а сколько удалил;
- сколько дошло до заказа и превратилось в деньги;
- сколько стоило распознавание (расход на модель по каждой заявке);
- как часто сотрудник правит распознанное и какие оценки ставит.
Последние два пункта — материал для улучшения: видно, на каких формулировках модель ошибается и окупается ли она вообще.
Воронка от заявки до оплаты и сравнение каналов: точность, доходимость до заказа, доля правок. Данные демонстрационные.Продукт 5. Интеграция с сайтом
На сайт интернет-магазина уходят рассчитанные данные — то, что клиент видит в карточке товара:
- Аналоги. Если позиции нет в наличии или клиент хочет дешевле — в карточке появляются замены, рассчитанные из справочника номенклатуры.
- Сопутствующие товары («с этим товаром покупают»), посчитанные по реальным корзинам, а не по интуиции контент-менеджера.
Оба блока в карточке товара наполняются из хранилища. Данные демонстрационные.Инженерные детали, которые экономят время при повторении:
- Каталог сайта уже́ ассортимента учёта: часть товаров сайту неизвестна, и ответ «товар не найден» для них — норма, а не сбой загрузки. Падать нужно только на сетевых ошибках.
- Обе выгрузки умеют работать вхолостую: сначала прогон с журналом и без записи, потом включение. Журнал общий, различается только свойство товара.
- Ответ сайта нужно разбирать по телу, а не по коду HTTP: частичный успех, когда нашлась половина связок, — типичная ситуация.
Обратно с сайта приходят заказы и корзины — обычным путём, через учётную систему, вместе с остальными продажами.
Как всё это связано между собой
Восемь систем вокруг общего ядра. Названия обобщены.Главный архитектурный принцип: ни одна пара внешних систем не связана напрямую. Всё идёт через ядро, где лежит реестр соответствий.
Зачем это нужно, проще всего показать на клиенте. В учётной системе он — код документа. В CRM — компания со своим номером. В открытых реестрах — ИНН. В мессенджере — номер телефона. На сайте — товарный идентификатор. Пока эти связки живут в головах и выгрузках, «топ-клиенты» отдела продаж и «топ-клиенты» бухгалтерии — разные списки.
Отдельная связка — сотрудник: его учётная запись в корпоративном портале, его код в учётной системе и его узел в оргструктуре. На ней держится всё разграничение доступа: и в отчётах, и в кабинете, и в переписке.
Сверка карточек и реквизитов: очередь расхождений, автоматические решения и те, что требуют человека. Данные демонстрационные.Отдельный сервис постоянно сверяет карточки клиентов между учётной системой и CRM: сравнивает названия, ИНН, КПП, адреса и типы контрагентов, ведёт реестр соответствий и очередь расхождений. Часть решений применяется автоматически, спорные — дубли, разные реквизиты у одной компании — выносятся человеку. По умолчанию сервис работает вхолостую: считает и журналирует, но в CRM не пишет, пока запись не включат сознательно.
Что уходит обратно во внешние системы:
| Куда | Что | Как часто |
|---|---|---|
| CRM | Карточки компаний и юридические реквизиты из учёта | по очереди изменений |
| CRM | График отсутствий сотрудников | ежедневно |
| CRM | Уведомления о сбоях и событиях | по событию |
| Личный кабинет | Показатели, задания, долги, оплаты поставщикам | сутки + ежечасно |
| Личный кабинет | Выданный доступ к отчётам | мгновенно |
| Сервис визитов | Постановка визита с карты клиентов | по действию |
| Сайт | Аналоги и сопутствующие товары | еженедельно |
Наружу система всегда ходит сама. Ни один внешний сервис не имеет доступа внутрь сети.
Продукт 6. Панель для собственника и руководителей
Отдельное приложение с ключевыми показателями компании: выручка, прибыль, дебиторка, долг поставщикам, выполнение планов по филиалам и направлениям. Свой вход, свой набор пользователей, те же витрины — то есть те же цифры, что в отчётах у менеджеров.
Панель руководителя: показатели за период, выполнение планов, блок «требует внимания». Данные демонстрационные.Блок «требует внимания» формируется автоматически из тех же данных: рост просрочки, отставание филиала от плана с учётом дня месяца, клиенты категории А, которые перестали покупать. Это не настраиваемые виджеты, а конкретные правила, написанные под бизнес — и в этом смысл: собственнику не нужен конструктор, ему нужен короткий список того, что пошло не так.
Как проверяется, что отчёт не врёт
Самая дорогая ошибка в аналитике — отчёт, который исправно открывается и показывает неверные числа. Ревизия однажды нашла девять таких: суммы считались по всей витрине, а не по фильтру; страницы дублировались при сортировке по неуникальной колонке; итоги сводной не сходились с итогами таблицы.
Поэтому перед выпуском отчёт проходит четыре барьера:
- Сверка конфигурации со схемой хранилища. Все колонки, фильтры и графики, объявленные в отчёте, существуют в витрине. Ловится до деплоя, а не при первом открытии.
- Инварианты данных. Автоматические проверки по всем отчётам сразу: сумма равна сумме строк; страницы не пересекаются и порядок воспроизводим; итоги сводной сходятся с итогами таблицы; колонка разграничения заполнена; строки с пустыми значениями в разрезе не исчезают из выборки; все ручки отчёта и выгрузка живы.
- Живой браузер. Настоящий Chromium открывает каталог, поиск и несколько отчётов и роняет деплой на любой ошибке в консоли. Нужен потому, что серверные проверки дёргают API и фронтенд не видят по устройству: однажды правка плиток уронила каждую страницу отчёта, а обе серверные проверки остались зелёными.
- Режим черновика. Отчёт работает, прошёл все проверки, виден администратору — но пользователям не показывается, пока человек не сверит цифры с учётной системой вручную.
Первые три барьера останавливают выкладку автоматически. Четвёртый снимается человеком — и это правильно: машина проверяет согласованность, а соответствие реальности проверяет тот, кто знает бизнес.
Что это дало компании
Три эффекта, которые видно в работе.
Несколько конкретных находок, которые окупили разработку:
- Переплаты клиентов не учитывались в просрочке. Отчёт выбрасывал отрицательные остатки по отдельным заказам, и клиент, который компании фактически ничего не должен, числился в просрочке — менеджер шёл разговаривать с ним о долге. После того как переплата стала гасить долги того же клиента, как в акте сверки, ложная просрочка исчезла у двенадцати клиентов, суммарно около 286 тысяч рублей.
- Продажи в разрезе поставщика считались пропорцией. Раньше их оценивали по доле в закупках, и с учётом они не сходились. Теперь берётся фактический поставщик каждой проданной партии. Попутно нашлась ошибка связывания, из-за которой 10–20% поставщиков молча уходили в «не определён».
- Отпуска вносились дважды. Кадровик заполнял график в портале руками, повторяя то, что уже внёс в кадровый учёт. Теперь данные едут автоматически.
Сколько это стоит содержать
Вся платформа живёт на одном офисном сервере: 32 гигабайта памяти, около двадцати служб в контейнерах, хранилище 44 гигабайта.
- Лицензий за пользователя нет. Всё ПО — свободное: СУБД, оркестратор, панели наблюдения. Коммерческие BI-системы считают деньги за каждого пользователя, и при сотне сотрудников это ежегодная статья, растущая вместе с компанией. Здесь добавить сотрудника — значит выдать доступ, а не купить место.
- Основная статья — разработка и сопровождение. Отчёт выпускается не тогда, когда «показывает данные», а когда его цифры сверены. Это работа, и её нужно закладывать.
- Инфраструктура минимальна. Отдельный сервер под аналитику нужен, но это обычная машина, а не кластер.
Как это внедряется в другой компании
Разделение простое: движок переносится, содержательный слой пишется заново. Движок — это загрузка из учётной системы, хранилище, механизм отчётов, права, барьеры качества, интеграционные клиенты. Содержательный слой — определение выручки, витрины, конкретные отчёты, реестр исключений и интеграции с вашими системами.
Порядок работ
- Доступ к базе учётной системы — лучше к реплике, а не к боевой базе.
- Генерация представлений — база становится читаемой за один прогон.
- Развёртывание стека и первичная загрузка — хранилище, конвейеры, первые факты.
- Определение выручки и сверка с учётом — самый важный этап (см. ниже).
- Первые 5–7 отчётов, закрывающих реальную боль, а не «чтобы было».
- Права по оргструктуре и интеграции — вход из вашего портала, кабинет, обмены.
Где проекты обычно застревают
Не на технике, а на четвёртом этапе. У большинства компаний нет письменного ответа на вопрос, что считать выручкой. Внутренние юрлица, возвраты, акционные склады, розница без документов, перемещения между складами — каждое такое правило кто-то держит в голове. Пока правила не выписаны и не сверены, любые отчёты будут спорными, сколько бы графиков в них ни было.
Поэтому первый этап любого внедрения — не установка ПО, а разговор с финансистом и главным бухгалтером.
Что стоит проверить до начала
- На чём работает ваша 1С. Генератор представлений работает с базами на Microsoft SQL Server. Если у вас PostgreSQL, путь получения читаемых данных будет другим, и это влияет на срок и цену. Это первый вопрос, который я задаю.
- Кто обслуживает вашу учётную систему. Прямое чтение базы — обычная практика, но согласовать её с подрядчиком лучше письменно и заранее.
- Есть ли человек с вашей стороны, который может ответить на вопрос «что считается продажей» и имеет право это решение принять.
- Персональные данные. Кадровый контур и переписка с клиентами — отдельные правовые режимы, их рамку нужно выстроить до сбора данных, а не после.
Я построил эту систему целиком: от чтения базы 1С до окна переписки внутри корпоративного портала, включая загрузку, хранилище, движок отчётов, разграничение доступа, интеграции с CRM, кабинетом, сайтом и мессенджерами, а также контур проверки качества данных.
