Бухгалтерская компания вела 2 600 сделок в CRM, но не знала экономику по клиентам: сколько часов уходит на обслуживание и что остаётся после себестоимости. Мы собрали BI-отчёт по рентабельности и встроили его прямо в портал — с живыми данными, настраиваемыми нормами и тремя срезами в один клик.
Рентабельность клиентов считалась запросом в конструкторе BI: 300 строк SQL, полсотни пользовательских полей и два смарт-процесса. Цифра получалась — но жила отдельно от CRM, не обновлялась и не давала ответить на главный вопрос: этот клиент нам выгоден?
Отчёт открывался в стороннем конструкторе. Руководитель видел таблицу, но не мог перейти в сделку и разобраться, откуда взялась сумма.
Часы на обслуживание и постоянные расходы были зашиты в текст запроса. Изменилась аренда или ставка — снова идти в код.
Запрос отдавал факт: сколько выписок и сотрудников. Перевести это в часы и в рубли себестоимости приходилось в отдельной таблице.
-- одна из 15 веток расчёта нормо-часов базового тарифа CASE WHEN crm_deal_uf.UF_CRM_1697028607706 = 'ИП' AND crm_deal_uf.UF_CRM_1697028744107 LIKE '%Патент%' AND crm_deal_uf.UF_CRM_1697028773 LIKE '%С оборотами%' THEN 1.9 WHEN crm_deal_uf.UF_CRM_1697028607706 <> 'ИП' AND crm_deal_uf.UF_CRM_1697028744107 LIKE '%УСН доходы (С НДС)%' AND crm_deal_uf.UF_CRM_1742787087894 LIKE '%22%' THEN 4.4 /* … ещё 13 условий … */ ELSE 0 END AS "baza_kof", -- и так по каждому из 26 показателей SUM(DISTINCT TRY_CAST(NULLIF(TRIM(Kolichestvo_avansovykh_otchetov), '') AS DOUBLE)), SUM(DISTINCT TRY_CAST(NULLIF(TRIM(Otrazhenie_operatsii_VED), '') AS DOUBLE)), SUM(DISTINCT TRY_CAST(NULLIF(TRIM(Registratsiya_DKP_v_FGIS), '') AS DOUBLE))
Вместо запроса — локальное приложение Битрикс24. Оно само забирает данные из CRM, держит их в актуальном состоянии по событиям и считает экономику по нормам, которые бухгалтерия задаёт сама.
REST забирает сделки воронки, компании, ответственных и два смарт-процесса — со всеми полями.
Значения списков приходят как ID — приложение разворачивает их в текст по справочникам портала.
Копия данных лежит рядом с отчётом: он открывается мгновенно и не нагружает портал.
Битрикс присылает событие об изменении сделки или компании — обновляется одна запись.
Отчёт открывается пунктом меню портала. Отдельный логин не нужен — вход через Битрикс24.
Ниже живая копия интерфейса. Переключайте срез данных, меняйте параметры себестоимости и открывайте карточку клиента — всё считается на лету, как в реальном приложении.
Воронка бухобслуживания · сделок в периоде: 8
Меняйте суммы — база пересчитается, а вслед за ней вся себестоимость в отчёте. В рабочей версии значения хранятся помесячно: июль не влияет на август.
Первый сотрудник дороже, каждый следующий — по своей ставке. Пять человек = 1 × первый + 4 × следующий.
Главное отличие от прежнего запроса: ни одна цифра не зашита в код. Всё, что влияет на результат, редактируется в интерфейсе — и отчёт пересчитывается сразу.
Список постоянных расходов ведётся по месяцам: аренда, лицензии, ФОТ, налоги. Значения июля влияют только на июль — август считается отдельно и наследует прошлый месяц как черновик.
Форма собственности × система налогообложения × наличие оборотов. Пятнадцать сочетаний, у каждого — часы с оборотами и без. Раньше это были те самые 300 строк SQL.
Первый сотрудник трудозатратнее последующих, иностранные граждане считаются по отдельным ставкам. Логика вынесена в понятные поля, а не в формулу.
Кассы, маркетплейсы, ВЭД, лизинг, акты сверок, авансовые отчёты — время на единицу. Появилась новая услуга — добавляется строкой, без релиза.
Отдельный сервис рядом с порталом: собственная база, свой домен с SSL, обновления по событиям Битрикс24 и встройка через JS-SDK.
Разберём, какие данные уже есть в вашей CRM и что мешает превратить их в управленческий отчёт.