DEEONE/Кейсы/Холдинг на 14 юрлиц
10 / Производство · Многоюрлицевый холдинг

14 юрлиц, 20+ баз 1С —
консолидация за сутки вместо 3 недель

Федеральный производитель минеральной воды: несколько скважин в разных регионах, собранные последовательным выкупом независимых площадок. У каждой — своё юрлицо, свои базы, своя история учёта. Собственник получал консолидированную картину с лагом в месяц. Мы собрали единую модель данных поверх всего этого зоопарка.

14
Операционных юрлиц в одной модели
20+
Баз 1С сведены в единый справочник
1день
Вместо 3 недель на закрытие
1.5M
Строк ЦРПТ ежемесячно
§ 01 — Задача

Что было до нас

Холдинг сложился из скупки независимых производств — по одному юрлицу на каждую скважину. Каждая площадка десятилетиями жила в своём контуре: свой план счетов, свои справочники номенклатуры, свои методики. После объединения ничего из этого не унифицировали — поверх поставили общую 1С:ERP для операционной деятельности, но 6–8 баз 1С:Бухгалтерии и столько же баз 1С:ЗУП остались на местах. Плюс ещё несколько справочных и технологических баз.

Результат: одна и та же бутылка в базе региона А называлась не так, как в базе региона Б. Чтобы сверстать консолидированный P&L, финансовый отдел брал выгрузки из каждой базы, ручником матчил номенклатуру через Excel, клеил в сводную таблицу. На один отчёт уходило 3–5 дней; на полный периодный пакет — 3 недели. Когда собственник задавал вопрос про прошлый месяц, ему отвечали по позапрошлому.

Параллельно встала задача подключить обязательные внешние источники: ЦРПТ (оборот маркированной продукции) и Nielsen (доли рынка и дистрибуция). В Excel это уже не помещалось физически.

§ 02 — Решение

Единая модель поверх зоопарка

Задача — не переделывать учёт на местах (никто не даст), а построить семантический слой, в котором все 20+ баз говорят на одном языке. Ключевое звено — собственный мост номенклатуры.

Data layer

DWH на MS SQL Server, staging по источникам

Отдельная staging-схема на каждую базу 1С. SSIS-пакеты тянут инкремент ночью, историю храним целиком — пересобрать любой период можно без повторного обращения к источникам.

Mapping

Таблица-мост tb — единый справочник SKU

Ключ связи — внешний код номенклатуры каждой базы, значение — канонический SKU холдинга. Маппинг ведёт товароведческая служба в отдельном интерфейсе; новые позиции попадают в очередь на согласование.

External

ЦРПТ и Nielsen как самостоятельные источники

Из ЦРПТ забираем разбивки month × channel × SKU × region × city × brand × sub_brand. Python-загрузчик CRPTloader_fast.py работает ночью через SQLAlchemy с чанкингом — как устроен скрипт. Nielsen приходит выгрузками — их парсит отдельный SSIS.

Semantic

SSAS Tabular с общими мерами

Одна модель на всё: операционные цифры из 1С:ERP, бухгалтерская сверка из 1С:Бух, ФОТ из 1С:ЗУП, маркировочный оборот из ЦРПТ, доли рынка из Nielsen. Меры согласованы с финансовой дирекцией.

Access

RLS по географии

Собственник и финансовый директор видят консолидированный срез. Руководитель региона — только свои скважины и свои юрлица. Права настраиваются в Tabular по связке пользователь → регион.

Ops

Ночная загрузка + алерты

Оркестрация через SQL Server Agent: сначала SSIS по всем источникам, потом Python-блок для ЦРПТ, потом обработка Tabular. Любой сбой падает алертом в Telegram дежурному инженеру.

§ 03 — Архитектура

Как это устроено

Слева — десятки учётных систем и два внешних API. В центре — DWH со staging и единой моделью, где работает мост номенклатуры. Справа — Tabular-куб и Power BI с ролями доступа.

SOURCES DWH · MS SQL SERVER DELIVERY 1С:ERP Операционный контур · продажи, склад 1С:Бухгалтерия × 6–8 По одной базе на каждое юрлицо 1С:ЗУП × 6–8 Штат, ФОТ, начисления по регионам Прочие базы 1С Технологические и справочные ЦРПТ Маркировка · month × SKU × region × brand Nielsen Доли рынка, дистрибуция, выгрузки Staging Схема на источник, SSIS-пакеты, инкремент по ночам в 02:00 Core · мост номенклатуры Таблица tb — канонический SKU, FK от каждого внешнего кода, очередь на согласование товароведов Marts P&L, CF, продажи × регион × SKU, план/факт, маркировочный оборот Python · CRPTloader_fast pyodbc + SQLAlchemy + pandas, чанкинг 1.5M строк/мес SSAS Tabular Единые меры DAX, консолидация всех юрлиц, процессинг по расписанию Power BI + RLS Роли по географии: регион → свои юрлица Собственник · CFO Консолидированный P&L за сутки Региональные руководители Только свой периметр NIGHTLY · SSIS + PYTHON → TABULAR PROCESS → POWER BI REFRESH

Мост tb — сердце архитектуры: один физический SKU имеет одно имя во всех 20+ базах.

§ 04 — Результат

Что получил холдинг

~3 нед → 1 день
Закрытие периода. Собственник смотрит вчерашний день, а не прошлый квартал.
1 SKU = 1 имя
Единая номенклатура через мост tb. Цифры в разрезах по регионам сходятся без ручной сверки.
~1.5Mстр/мес
Автоматическая загрузка данных ЦРПТ. Маркировочный оборот виден рядом с продажами 1С.

Мы впервые видим консолидированную картину в течение суток, а не ждём месяц. Раньше это значило — руководитель отвечает на вопросы собственника по прошлому кварталу. Теперь — по вчерашнему дню.

Финансовый директор холдинга
Производство · Минеральная вода
§ 05 — Стек

На чём собрано

MS SQL Server SSIS SSAS Tabular Power BI Python pyodbc SQLAlchemy pandas ЦРПТ API Nielsen exports 1С:ERP 1С:Бухгалтерия 1С:ЗУП RLS
§ Консультация · 30 минут

Много юрлиц
и разные базы?

Покажем, как собрать единую модель, не переделывая учёт на местах. Разберём ваши источники и прикинем, с чего стартовать.

Телефон+7 918 042 34 43
Время откликаВ течение рабочего дня