При работе с крупными холдингами или государственными структурами часто возникает задача формирования единого аналитического отчета, который должен собирать данные из сотен разрозненных информационных баз (ИБ). В нашем случае рассматривается ситуация с 800 организациями, работающими в различных конфигурациях, таких как Зарплата и Управление Персоналом (ЗУП) и Бухгалтерия предприятия (БП). Основной вопрос заключается в том, как собрать фактические начисления, планы и командировочные расходы, не обрушив при этом серверы и не заставив пользователя ждать формирования отчета часами.
Проанализируем ситуацию: попытка «дергать» данные через API (HTTP или веб-сервисы) напрямую из 800 баз в момент нажатия кнопки «Сформировать» — это путь к техническому коллапсу. Время ожидания ответа от каждой базы, сетевые задержки и ограничения веб-серверов сделают такой процесс невозможным. Рассмотрим более надежные и производительные варианты решения этой задачи.
Это наиболее стабильный вариант для работы с таким огромным количеством источников. Вместо того чтобы обращаться к базам-источникам в реальном времени, мы создаем центральную «базу-концентратор». Разберем этот подход по шагам:
Библиотеки стандартных подсистем (БСП). В ней не должно быть лишнего функционала — только необходимые регистры сведений или накопления для хранения плоских таблиц данных.ПланыОбмена. Это позволит передавать не всю базу целиком, а только измененные или новые записи.Рассмотрим пример упрощенного кода для передачи данных из периферийной базы в центральную через HTTP-сервис:
Процедура ОтправитьДанныеВЦентр()
ДанныеДляОтправки = СформироватьПакетДанных(); // Собираем ТЗ или Структуру
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ДанныеДляОтправки);
СтрокаJSON = ЗаписьJSON.Закрыть();
НТТПСоединение = Новый HTTPСоединение("server.central.db", , "user", "pass");
Запрос = Новый HTTPЗапрос("/v1/data/receiver");
Запрос.УстановитьТелоИзСтроки(СтрокаJSON);
Попытка
Ответ = НТТПСоединение.ОтправитьДляОбработки(Запрос);
Исключение
ЗаписатьЛогОшибки(ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Если бюджет на разработку ограничен, а данные нужны «почти в реальном времени», можно воспользоваться механизмом OData. Платформа 1С позволяет опубликовать базу на веб-сервере, открыв доступ к объектам метаданных без написания кода.
Однако, как мы выяснили, последовательный опрос 800 баз займет слишком много времени. Для решения этой проблемы проанализируем возможность параллельной обработки. Разберем алгоритм:
ФоновыеЗадания.Важный нюанс: Использование REST JSON считается более производительным по сравнению со стандартным OData, так как позволяет передавать только необходимые поля и использовать более компактный формат данных.
В системах с 800 узлами неизбежны ситуации, когда часть баз будет недоступна (проблемы со связью, технические работы). Чтобы данные не терялись, рассмотрим внедрение 1С:Шина. Это современное решение для асинхронного обмена данными.
Принцип работы в этой ситуации будет следующим:
Такой подход гарантирует целостность данных: даже если центральная база была выключена, после включения она заберет все накопившиеся данные из шины.
Для максимально быстрого формирования отчетов по миллионам строк данных (а при 800 базах их будет именно столько) стоит рассмотреть связку 1С:Аналитика + ClickHouse.
ClickHouse — это колоночная СУБД, предназначенная именно для аналитических отчетов. Данные из 1С выгружаются в ClickHouse, а 1С:Аналитика строит по ним мгновенные дашборды. В последних версиях платформы предусмотрены механизмы интеграции, позволяющие объединять данные из разных источников на уровне интерфейса.
Выясним одну из самых скрытых проблем: сопоставление данных. В 800 базах один и тот же сотрудник или статья затрат могут иметь разные коды или наименования. Чтобы отчет не превратился в хаос, нам необходимо:
Поскольку мы работаем с данными из Зарплаты и Управления Персоналом, крайне важно помнить о законе о персональных данных. Рассмотрим способы легальной работы в сводном отчете:
Анонимизация: Если для сводного отчета контролирующему органу не нужны конкретные ФИО, а важны только суммы по категориям персонала, передавайте данные в обезличенном виде. Вместо ФИО используйте уникальный хеш-код. Это позволит избежать создания «супер-базы» с персональными данными тысяч сотрудников, что накладывает очень жесткие требования к защите серверной инфраструктуры по требованиям ФСТЭК.
Подводя итог нашему анализу, рекомендуем следующую стратегию:
1С (хранилище), куда данные будут попадать регламентно по модели Push.HTTP-сервисы для приема данных в центральной базе.Планов обмена для минимизации трафика.1С:Аналитику.Такая архитектура обеспечит стабильность работы, актуальность данных и высокую скорость формирования отчетов даже при дальнейшем росте количества организаций.