Интеграция 1С с BI-системами (Power BI, Apache Superset, Yandex DataLens)

Интеграция 1С с BI-системами (Power BI, Apache Superset, Yandex DataLens)

Введение. Платформа 1С:Предприятие широко используется для ведения учета и хранения данных по различным направлениям бизнеса[1]. Эти данные представляют большой интерес для бизнес-аналитики, однако напрямую подключиться к базе 1С и выгрузить информацию непросто, так как 1С – закрытая проприетарная система[2]. Более того, лицензионная политика прямо запрещает прямое обращение к базе данных 1С через SQL-запросы[3]. Поэтому для интеграции 1С с внешними BI-инструментами используются специальные механизмы и обходные пути. В этом руководстве мы рассмотрим основные подходы к импорту данных из 1С в популярные BI-системы (Microsoft Power BI, Apache Superset, Yandex DataLens), их настройку, плюсы и минусы, а также вопросы прав доступа и безопасности. Также приведем практический кейс – выгрузка данных из 1С в CSV по расписанию с последующим подключением Power BI к этому файлу.

1. Использование СКД для подготовки данных

Система компоновки данных (СКД) – встроенный механизм 1С для формирования отчетов и наборов данных. СКД позволяет описать желаемый результат отчета (набор полей, группировки, условия) без детального программирования алгоритма – платформа сама строит итоговый набор данных по заданным настройкам[4]. Этот механизм быстро и эффективно сводит данные из различных таблиц 1С, позволяет выполнять расчеты, строить сводные таблицы, диаграммы и т.д., без написания кода[5]. Благодаря СКД можно подготовить нужные данные в удобном виде перед их выгрузкой во внешнюю BI-систему.

Практическое применение СКД: В конфигурациях 1С уже есть преднастроенные универсальные отчеты на базе СКД. Вы можете настроить «Универсальный отчет» или создать свой отчет с нужными полями и фильтрами (например, отобрать продажи за период с детализацией по товарам). После этого 1С позволяет экспортировать полученный отчет в распространенные форматы – Excel, CSV, XML – вручную или автоматически.

Особенно полезна функция «Рассылка отчетов»: она позволяет задать расписание для формирования отчета и сохранения файла. Например, можно настроить, что каждое утро 1С формирует нужный отчет и сохраняет его в файл CSV. В настройках рассылки указываются: какой отчет использовать, формат выгрузки (Excel, CSV или XML), расписание, и куда складывать файл – в локальную папку или на FTP-сервер[6]. Таким образом, СКД в сочетании с планировщиком 1С избавляет от ручной работы по регулярной выгрузке данных.

Плюсы подхода СКД:

  • Не нарушает лицензию и логику 1С. Выгрузка выполняется штатными средствами 1С, что сохраняет целостность данных. Используются те же бизнес-правила, что и в интерфейсе 1С.

  • Гибкость подготовки данных. СКД позволяет объединять данные из разных источников (справочники, документы, регистры) и делать вычисляемые поля. Можно получить готовые сводные данные, которые сразу подходят для BI.

  • Автоматизация встроенными средствами. С помощью регламентных заданий и «Рассылки отчетов» можно настроить регулярную выгрузку без дополнительного программирования. Например, ежедневный экспорт отчета в CSV-файл на сервере.

Минусы и ограничения:

  • Требуется настройка отчетов. Если нужного отчета нет «из коробки», понадобится помощь специалиста 1С для создания отчета/обработки на СКД с нужным набором данных[7]. Для сложных выгрузок нужно разбираться в структуре данных 1С и языке запросов 1С.

  • Полные выгрузки без инкремента. Стандартные отчеты выгружают все выбранные данные целиком. При каждом обновлении приходится формировать и сохранять заново весь отчет, нет простого механизма выгрузки только изменений (инкремента)[8]. Это может быть неэффективно на больших объемах.

  • Ограниченная масштабируемость. Подход с экспортом отчетов подходит для относительно небольших объемов данных и числа показателей. По мере роста количества выгрузок и данных увеличивается риск ошибок и ручной работы[8]. В крупных проектах поддерживать множество различных отчетов для выгрузки тяжело.

Тем не менее, для малого и среднего бизнеса метод с подготовкой данных через СКД часто является самым простым стартовым решением. Вы получаете отлаженный в 1С набор данных и можете вручную или автоматически переносить его в BI (через файлы или другие методы). Далее рассмотрим более прямые способы передачи данных – через веб-сервисы.

2. Подключение к данным 1С по OData

Интерфейс OData – стандартный RESTful API, поддерживаемый платформой 1С. Начиная с версии 8.3.5, в 1С появился стандартный протокол OData 3.0 для доступа к данным через HTTP[9]. Проще говоря, OData позволяет получать данные из базы 1С по веб-запросу – в формате XML или JSON – без необходимости писать код в самой 1С. С помощью OData можно читать (и в некоторых случаях изменять) объекты 1С – справочники, документы, регистры – используя единый веб-протокол.

Как настроить OData в 1С: Для работы OData необходимо опубликовать информационную базу 1С на веб-сервере и включить поддержку OData. Делается это через толстый клиент 1С: под администратором зайдите в меню Администрирование – Публикация на веб-сервере, выберите имя публикации и установите флажок «Публиковать стандартный интерфейс OData», затем нажмите «Опубликовать»[10]. После успешной публикации ваш сервис OData станет доступен по URL-адресу вида:

http://\<сервер>/\<имя базы>/odata/standard.odata

(протокол и порт зависят от настроек веб-сервера, также можно использовать HTTPS). Например: http://server-company/TradeDB/odata/standard.odata.

💡 Примечание: В новых версиях типовых конфигураций 1С доступ ко всем объектам через OData по умолчанию закрыт[11]. Администратор 1С должен явно разрешить нужные объекты для OData – например, включить в настройках конфигурации возможность использования OData для конкретных справочников, документов и регистров. Также убедитесь, что пользователь, от имени которого выполняются OData-запросы, имеет права на внешнее соединение и чтение соответствующих объектов[12] (в 1С существует отдельное право на работу через веб-сервисы).

После публикации и настройки прав можно получать данные. Формат запросов OData в 1С соответствует стандарту OData v3. Например, чтобы получить список номенклатуры, вы обращаетесь по URL (GET-запросу):

http(s)://\<сервер>/\<база>/odata/standard.odata/Catalog_Номенклатура?$format=json

Этот запрос вернет список элементов справочника «Номенклатура» в формате JSON (по умолчанию возвращается XML, поэтому используется параметр $format=json для удобства). Можно добавлять параметры $filter, $select, $expand для фильтрации, выбора полей и связанных объектов, соответственно – аналогично стандарту OData 3.0[13][14].

Подключение Power BI через OData: Большим плюсом OData является то, что Microsoft Power BI имеет встроенный коннектор OData. В Power BI Desktop достаточно выбрать источник OData Feed («OData-канал») и указать URL вашего сервиса OData. Порядок действий: в Power BI нажмите «Получить данные», выберите OData Feed, введите URL публикации 1С (например, https://server/TradeDB/odata/standard.odata)[\[15\]](https://alexrovich.ru/info/articles/integratsiya-1s-i-powerbi/#:~:text=1,URL%20%D0%BF%D1%83%D0%B1%D0%BB%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D0%B8%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%20%D0%B8%D0%B7%201%D0%A1). Затем укажите учетные данные для доступа – как правило, тип аутентификации Basic, вводятся логин и пароль пользователя 1С, которому разрешено OData. После подключения вы увидите список доступных объектов (наборы данных) и сможете выбрать нужные справочники/документы, которые хотите загрузить в Power BI[16][17]. Power BI импортирует данные и позволит настроить обновление по расписанию (через Power BI Gateway при подключении к локальной 1С).

Подключение Yandex DataLens и Superset через OData: В отличие от Power BI, другие BI-системы не имеют штатной поддержки протокола OData. Yandex DataLens на момент написания не умеет напрямую брать данные по OData (нет встроенного коннектора к веб-сервисам 1С). Apache Superset также работает с SQL-источниками данных (через SQLAlchemy) и не предназначен для прямого обращения к REST API. Поэтому для интеграции 1С с DataLens/Superset можно использовать OData как промежуточный слой – например, написать скрипт, который будет периодически запрашивать данные из 1С OData и складывать их в базу данных, к которой уже подключится BI-система. Но прямого «подключиться к OData из DataLens» нет. Именно поэтому чаще вместо прямого использования OData с этими инструментами применяются альтернативные подходы (см. следующий раздел) либо специальные коннекторы. Например, Yandex DataLens предлагает партнерский коннектор «Экстрактор 1С», который под капотом использует механизмы OData/REST и выгружает данные в облачную БД для последующего анализа[3][18].

Плюсы использования OData:

  • Стандартный интерфейс и минимум кода. Не требуется писать собственные обработки в 1С для каждой выгрузки – достаточно включить стандартный веб-сервис. Это относительно быстро и не требует глубокого вмешательства в конфигурацию.

  • Актуальные данные по запросу. BI-система может в любой момент сделать запрос к 1С и получить свежие данные (в пределах поддерживаемой нагрузки). OData особенно удобен для получения небольших оперативных выборок данных в режиме близком к реальному времени[19].

  • Фильтрация и выбор полей на стороне 1С. Протокол OData поддерживает фильтры, сортировку, проекцию полей, объединение связанных объектов и другие операции на стороне сервера. Это позволяет запрашивать только нужные данные, уменьшая трафик и объем пост-обработки.

Минусы и особые моменты OData:

  • Настройка публикации и безопасность. Необходимо поднять веб-сервис 1С на сервере (IIS, Apache или встроенный), что открывает доступ к данным через сеть[20]. Если сервис публикуется в интернет, возникают риски утечки данных[21]. Требуется обеспечить безопасность: использовать HTTPS, сильные пароли, возможно ограничить доступ по IP или через VPN. В компаниях с жесткой политикой безопасности часто запрещено публиковать базу 1С наружу.

  • Ограничения протокола. OData не предназначен для очень сложных запросов и огромных выборок. Длина URL-запроса ограничена, поэтому при попытке сделать чрезмерно сложный фильтр или запрос с множеством условий вы получите ошибку[22]. Кроме того, производительность OData невысока на больших объемах данных – тысячи записей еще можно выгрузить, но десятки-сотни тысяч строк будут передаваться очень долго[23]. При большом количестве объектов и запросов OData-сервис может работать нестабильно и стать узким местом системы.

  • Потребление лицензий и ресурсов. В режиме клиент-сервер каждый OData-запрос к 1С создает сессию от имени пользователя, который обращается. Это может занимать клиентскую лицензию 1С на время запроса[24] (для COM-соединения явно указано потребление лицензии, для OData зависит от режима, но обычно учитывается как тонкий клиент). Кроме того, выполнение запроса нагружает сервер 1С (по сути, OData запрос – это тот же запрос 1С). Поэтому массовое одновременное обращение BI к OData (например, множество дэшбордов) способно создать нагрузку на 1С.

Таким образом, OData хорошо подходит для периодической выборки относительно небольших объемов данных (например, справочники, ежедневные агрегаты) и для случаев, когда нужно быстро наладить интеграцию с Power BI без разработки. Для больших данных или очень строгих требований к надежности лучше рассмотреть другие методы.

3. Альтернативные способы интеграции данных 1С и BI

Помимо отчетов и OData, существуют другие способы извлечения данных из 1С. Выбор зависит от размеров данных, требований к актуальности, бюджета и навыков. Рассмотрим плюсы, минусы и особенности нескольких альтернативных подходов.

3.1 Прямой доступ к базе 1С (SQL)

Структура данных 1С хранится в реляционной СУБД (например, Microsoft SQL Server или PostgreSQL) – если ваша инфобаза работает в клиент-серверном режиме. Теоретически BI-система (или вы сами) можете подключиться напрямую к этой базе данных и строить SQL-запросы к таблицам 1С. Однако этот путь официально не поддерживается и нарушает лицензионное соглашение 1С[3]. Компания 1С предостерегает: прямое подключение к SQL-базе 1С может привести к повреждению базы или проблемам в работе, а также служит основанием для отказа в технической поддержке[25].

Даже если рисками пренебречь, есть серьезные технические сложности:

  • Непонятная структура таблиц. Внутренние таблицы и поля 1С не имеют «человеческих» имен – они зашифрованы/кодированы идентификаторами[26]. Например, справочник «Контрагенты» может храниться в таблице с именем вроде _Reference123 с полями _Fld245Type и т.п. Без расшифровки метаданных очень трудно понять, где какие данные. Существуют инструменты и скрипты, которые читают метаданные 1С и строят понятные представления (SQL VIEW) с «расшифрованными» названиями столбцов[27]. Некоторые из них бесплатны, другие коммерческие, но их нужно устанавливать и поддерживать отдельно.

  • Отсутствие бизнес-логики. При обращении напрямую к SQL-таблицам вы обходите уровень бизнес-логики 1С. Например, в 1С может быть логика «пометка удаления», проведение документов, актуальность остатков – всего этого при простом SELECT из базы вы не учитываете. Есть риск получить некорректные данные для аналитики, если неправильно объединить таблицы или не отфильтровать «лишние» записи.

  • Сложность SQL-запросов. Чтобы получить связные данные, нужно разбираться в связях между таблицами 1С. А они нетривиальны: например, значения перечислений, реквизитов-характеристик хранятся в отдельных таблицах. Среднему пользователю или аналитику написать правильный SQL к базе 1С практически нереально без специального знания конфигурации[28]. Даже опытному 1С-программисту может понадобиться время, чтобы составить большой JOIN по многим таблицам для воссоздания того или иного отчета.

  • Отсутствие приращений и отслеживания изменений. SQL-выборка не знает, что поменялось с прошлого раза – вы либо забираете всю таблицу целиком, либо как-то вручную сверяете. Обычно приходится каждый раз повторять запрос и выгружать все, а это неэффективно[29]. Настроить механизм инкрементальной загрузки (CDC) из базы 1С – нетривиальная задача, так как в таблицах 1С нет, например, явных меток времени последнего изменения каждой бизнес-сущности (можно отслеживать через Версионирование в 1С или с помощью триггеров в SQL, но это сложная доработка).

Вывод: Прямое подключение BI (будь то Superset, DataLens или любой другой) к продуктивной базе 1С – не рекомендуется. Оно нарушает поддержку, требует глубокого разбора структуры и несет риск ошибок. В крайнем случае, некоторые компании идут на это, создавая реплику базы 1С (например, настроив Log Shipping или стриминг WAL для PostgreSQL в отдельное хранилище) и подключая BI к копии. Но даже тогда без расшифровки метаданных получить осмысленные поля трудно. Если очень нужно, существуют коммерческие продукты-коннекторы, которые автоматически строят представления SQL с удобными названиями (например, ATK BIView от компании АTK)[30][31]. Такие коннекторы могут значительно сэкономить время на создание модели данных, но формально они тоже работают с прямой базой и поэтому не соответствуют политике 1С[32].

Читай также:  Внедрение Сквозной Бизнес-Аналитики: От ROMI до Power BI и Битрикс24

3.2 Экспорт в промежуточную SQL-базу (выгрузка через запросы)

Более безопасная альтернатива прямому чтению – построить аналитическую базу-«витрину», куда регулярно выгружать данные из 1С. Идея в том, чтобы написать серию запросов или обработок, которые вытягивают из 1С нужные таблицы и складывают их (например, через ODBC/JDBC или SQL-запросы) в отдельную базу данных (например, PostgreSQL, ClickHouse, MS SQL). В эту же базу могут стекаться данные и из других систем. Затем BI-система подключается только к этой аналитической базе.

Преимущества подхода:

  • Нет нагрузки на боевую 1С при анализе. Все тяжелые аналитические запросы выполняются по внешней базе, 1С же лишь периодически выгружает обновления (например, ночью).

  • Единое хранилище данных. Можно объединить данные из 1С и других источников (CRM, сайты, и т.п.) и сделать сквозную аналитику. В 1С:Аналитике (встроенной BI 1С) это затруднительно[33][34].

  • Гибкость пост-обработки. В промежуточной базе можно доводить данные до ума с помощью SQL, хранимых процедур, триггеров – рассчитав нужные метрики заранее.

Однако минусы во многом похожи на прямое подключение:

  • Фактически дублирование данных 1С вне платформы. Хотя вы и не лезете в живую базу 1С напрямую, но все равно «обходите» платформу – а значит, такие выгрузки тоже не приветствуются 1С (формально нарушение лицензии, если реализовано через прямые SQL-запросы к базе)[35][36]. Если же выгрузка реализована через механизм 1С (например, внешняя обработка, которая с помощью COM или HTTP сервиса выгружает данные) – это лучше в плане лицензии, но тогда упираемся в ограничение по скорости выгрузки.

  • Большие трудозатраты на разработку и поддержку. Нужно разработать и отладить отдельные SQL-запросы/обработки для выгрузки каждого необходимого объекта: отдельно по справочникам, документам, регистрами[36]. Причем запросы должны учитывать особенности конфигурации (например, фильтровать только проведенные документы, раскодировать ссылки и т.д.). Затем эти выгрузки нужно сопровождать: при обновлении конфигурации 1С (изменении структуры) – править запросы, добавлять новые поля в витрину и т.д.[37]. По сути, вы сами создаете маленькое хранилище данных – это дорого и долго. В крупных компаниях бюджеты таких проектов могут исчисляться миллионами рублей[38].

  • Риск рассинхронизации и ошибок. Всегда есть вероятность, что выгрузка чего-то не учтет, где-то преобразует данные неверно. При большом объеме ручной работы и ручного кода возможны несостыковки между 1С и витриной, которые сложно отлавливать. Требуется тщательно тестировать и валидировать данные, иначе в BI-отчетах будут ошибки[39].

Таким образом, собственная аналитическая база имеет смысл, когда объем данных очень большой или нужно объединить множество источников, и компания готова вложиться в полноценное DWH-хранилище. Для малого и среднего бизнеса создание и обслуживание отдельного хранилища может быть избыточно. Часто вместо этого выбирают готовые решения – те же коннекторы и экстракторы данных.

Примечание: Решения вроде 1С:Аналитика (поставляется фирмой 1С) как раз и представляют собой попытку встроенного хранилища. Но функциональность 1С:Аналитики довольно ограничена[33], и она работает только с данными 1С – не поможет, если нужно соединять с внешними данными. Поэтому многие предпочитают внешние BI-платформы с более широкими возможностями.

3.3 Обмен через REST/SOAP web-сервисы (кастомный API)

Помимо стандартизированного OData, платформа 1С позволяет создавать пользовательские веб-сервисы. Есть два подхода:

  • SOAP-веб-сервисы 1С: в конфигураторе можно описать веб-сервис (методы, которые будут доступны по SOAP). Внешние приложения могут вызывать эти методы и получать данные в виде, формируемом программистом. Сейчас SOAP теряет популярность, и его обычно используют для интеграции с другими корпоративными системами, но для BI его применять неудобно (нужно кодировать парсинг SOAP-ответов).

  • HTTP-сервисы (REST): 1С позволяет обрабатывать произвольные HTTP-запросы. В конфигурации можно прописать HTTP-сервис, который по определенному URL будет запускать вашу функцию на 1С. Вы сами определяете формат данных (JSON, CSV, XML) и логику – по сути, строите мини-API к 1С. Это гибкий способ реализовать практически любую интеграцию.

Например, можно разработать HTTP-сервис /export/sales, который на GET запрос выдает последние продажи в формате JSON. Внутри 1С этот сервис выполнит запрос к регистрам и вернет результат. BI-система (если умеет работать с JSON API) может периодически опрашивать этот URL. В случае DataLens или Superset, которые не умеют сами ходить по REST, можно сделать промежуточный скрипт-загрузчик.

Преимущества кастомных REST-сервисов:

  • Формат данных и логика полностью под вашим контролем. Можно вернуть JSON в нужной структуре, сразу агрегированный, с нужными фильтрами – то есть минимальная обработка на стороне BI.

  • Можно реализовать инкрементальную выгрузку: например, HTTP-сервис может принимать параметр ?since=datetime и отдавать только записи, измененные после указанной даты. Так можно оптимизировать обмен.

  • Безопасность можно настроить точечно: закрыть сервис базовой авторизацией, токенами API, выводить только определенные данные и т.п.

Недостатки:

  • Требуется писать код на 1С. Нужно уверенно программировать на языке 1С (платформе) и понимать, как поднять и поддерживать веб-сервис.

  • Сервис нужно где-то разместить. Если база 1С файловая или не опубликована через веб-сервер, придётся настраивать публикацию (как и для OData). В итоге вы все равно открываете 1С наружу, со всеми вопросами безопасности.

  • Поддержка и масштабируемость: с ростом числа методов API и интеграций управлять ими становится сложно. Для этого 1С предлагает продукт 1C:Enterprise Шина (ESB) – централизованную шину данных. Но 1С:Шина – это отдельный платный продукт, который оправдан, только если интеграций десятки[40], к тому же она сама не является готовым источником данных для BI[41] (это инфраструктура для обмена сообщениями).

В целом, написание собственных REST-сервисов в 1С имеет смысл, если у вас есть квалификация 1С-разработчика и нужны очень специфичные интеграции, которые не покрываются OData. Для задач BI это используется редко – проще либо OData, либо файлы/SQL. Тем не менее, упомянем, что такой способ есть, и некоторые компании делают целые микросервисы на 1С, отдающие данные в нужных разрезах.

3.4 COM-соединение (COMConnector)

Еще один способ получения данных – использовать COM-интерфейс 1С. Платформа 1С может выступать как COM-сервер (ActiveX объект) на Windows. Внешнее приложение (например, скрипт на Python, C#, VBScript, даже Excel VBA) может через COMConnector запустить фоновую копию 1С, подключиться к базе и выполнять код на языке 1С. Таким образом, COM-соединение позволяет программно управлять 1С из вне, например, вызывать методы, читать справочники и т.д. Этот механизм изначально задумывался для обмена данными между двумя базами 1С, но его можно применить и для выгрузки в BI[42].

Как это работает на практике: вы создаете, скажем, скрипт на VBScript/PowerShell, который:

  1. Создает COM-объект V83.COMConnector и с его помощью открывает информационную базу 1С (нужно указать путь к базе или соединение к серверу, а также учетные данные пользователя 1С).

  2. Получив объект Application, вы можете вызвать, например, метод NewObject(«Запрос») и выполнить запрос 1С, или вызвать заранее написанную в конфигурации общую процедуру, которая возвращает нужные данные.

  3. Полученные данные записать в файл или сразу в нужный источник (например, тот же Excel или базу).

Этот способ дает полный доступ к возможностям платформы 1С, но у него есть существенные минусы:

  • Работает только на Windows. COMConnector – технология Windows/COM. Если ваша BI-инфраструктура на Linux (тот же Superset обычно на Linux-сервере), использовать COM-напрямую не выйдет, нужен Windows-хост.

  • Нужен установленный клиент 1С на том же компьютере. Версия 1С должна соответствовать разрядности приложения, которое вызывает COM (например, 64-разрядный Python потребует 64-битную 1С). Настройка окружения может быть нетривиальной[43].

  • Расход лицензий и ресурсов. Каждое COM-соединение потребляет одну клиентскую лицензию 1С[44], как полноценный пользователь. Если у вас ограничено число лицензий, массированный обмен через COM их быстро израсходует. Также при подключении через COM происходит загрузка почти всей информационной базы в память (инициализация контекста), что может занимать значительное время для крупных баз[45].

  • Необходимость писать код. Нужно писать код сразу на двух сторонах: снаружи (скрипт на языке интеграции) и, часто, внутри 1С (например, общая процедура, которую вызывает COM). Требуются навыки в языке 1С и языке внешнего скрипта.

В итоге COM-соединение применяется в случаях, когда другие методы невозможны (например, нельзя опубликовать веб-сервис, а прямого доступа к SQL нет). В современные BI-проекты COM включают редко, так как это устаревающая технология с точки зрения интеграции данных. Тем не менее, она может выручить, если нужно получить данные из файловой базы 1С: к файловой базе невозможно подключиться по SQL или OData без сервера, а вот через COM – можно открыть файл-базу и прочитать данные. В таких ситуациях COM – чуть ли не единственный вариант автоматизации.

3.5 Прочие варианты и инструменты

Сторонние коннекторы и «экстракторы». На рынке существуют готовые решения для выгрузки данных из 1С в SQL-ориентированные хранилища. Мы уже упоминали ATK BIView (генерирует SQL-представления для 1С) и «Экстрактор 1С» от Денвик. Последний, например, устанавливается как расширение в базу 1С и автоматически выгружает все данные (в том числе из файловых баз 8.2/8.3) в отдельные таблицы MS SQL или ClickHouse[46][47]. Он поддерживает инкрементальную загрузку (отслеживает изменения) и может работать по расписанию[47], плюс рассчитан на высокую скорость (многопоточность). Подобные инструменты избавляют от ручной разработки, однако за удобство приходится платить – это коммерческие продукты, требующие лицензирования (например, для «Экстрактора 1С» нужна отдельная лицензия на каждую базу 1С[48]). Они могут быть оправданы, если ценой является существенная экономия времени и трудозатрат в крупном проекте. Но для малого бизнеса часто лучше начать с бесплатных методов, описанных выше, и перейти к коннекторам при росте объемов.

1С:Шина данных. Коротко отметим, что 1С:Enterprise Шина – это программная шина (ESB) для обмена сообщениями между системами. Она умеет подключаться к различным системам через коннекторы (SOAP, HTTP, JDBC, FTP, и др.)[49]. Теоретически через шину можно настроить выгрузку из 1С в другую БД или API. Однако шина не предназначена для аналитических выгрузок как таковых[41] – это скорее инфраструктурный инструмент для предприятий с десятками интеграций. Внедрение шины – длительный и дорогой процесс, оправданный только при очень высоких требованиях и масштабе[50]. Для задачи BI интеграции она избыточна.

4. Кейс: Выгрузка CSV по расписанию и подключение Power BI по ссылке

Сценарий: предположим, нужно организовать ежедневную выгрузку определенных данных из 1С (например, остатки товаров или продажи за день) в файл CSV, публиковать этот файл на веб-сервере, и подключить к нему Power BI. Такой подход хорош тем, что разгружает 1С – все тяжелые расчеты выполняются в заранее спланированное время, а BI просто забирает уже подготовленный файл. Рассмотрим, как это реализовать на практике:

1. Настройка выгрузки CSV в 1С. Мы можем использовать уже обсуждаемые механизмы: СКД + регламентное задание. Например, создадим в 1С внешний отчет или обработку, которая формирует нужный набор данных (через запрос). Затем нужно записать этот набор в CSV-файл. В 1С нет встроенной функции «ВыгрузитьВCSV», поэтому придется сформировать текст самостоятельно. Ниже приведен упрощенный пример кода на 1С, демонстрирующий основные шаги: выполнили запрос, получили ТаблицуЗначений, сформировали строки CSV и записали их в файл:

// Процедура формирования CSV-файла с данными номенклатуры
Запрос \= Новый Запрос;
Запрос.Текст \=
«ВЫБРАТЬ
| Номенклатура.Код КАК Код,
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.ЕдиницаИзмерения КАК Единица
|ИЗ Справочник.Номенклатура КАК Номенклатура»;
ТаблицаЗначений \= Запрос.Выполнить().Выгрузить(); // Выполняем запрос и получаем таблицу результата

// Формируем текст CSV (с заголовком)
Разделитель \= «;»;
ТекстCSV \= «Код» + Разделитель + «Единица» + Разделитель + «Наименование» + Символы.ПС;
Для Каждого Запись Из ТаблицаЗначений Цикл
ТекстCSV \= ТекстCSV + Запись.Код + Разделитель + Запись.Единица + Разделитель + Запись.Наименование + Символы.ПС;
КонецЦикла;

// Записываем текст в файл (UTF-8 без BOM, либо ANSI, зависит от требуемого формата)
ФайлCSV \= «C:\Exports\Nomenklatura.csv»;
ТекстовыйФайл \= Новый ЗаписьТекста(ФайлCSV, КодировкаТекста.UTF8);
ТекстовыйФайл.ЗаписатьСтроку(ТекстCSV);
ТекстовыйФайл.Закрыть();

В реальности код нужно доработать: убедиться, что разделитель (например ; или |) не встречается в самих данных; возможно, оборачивать текстовые поля в кавычки; выбрать кодировку (UTF-8 предпочтительна для корректного отображения). Тем не менее, общий принцип отражен в примере: с помощью объектов Запрос и ЗаписьТекста данные выгружаются из 1С в файл на диске[51][52].

Читай также:  ODS и витрины данных (Data Marts) в BI

Процедуру выгрузки CSV следует вызывать автоматически. Для этого в конфигурации 1С настраивается регламентное задание (фоновое задание по расписанию). Допустим, нужно ежедневное обновление: настраиваем задание на 1:00 ночи, которое запускает нашу обработку/отчет выгрузки. В типовых конфигурациях можно интегрировать эту обработку через механизм «Дополнительных отчетов и обработок» и вызывать из планировщика.

2. Размещение файла на HTTPS. После того, как файл генерируется, его надо сделать доступным по ссылке. Здесь несколько вариантов:

  • Внутренний веб-сервер: Если 1С уже опубликована через веб-сервер (IIS/Apache), можно настроить виртуальный каталог, указывающий на папку с выгрузками CSV. Тогда файл будет доступен по URL вида https://yourserver/reports/Nomenklatura.csv. Можно ограничить доступ базовой авторизацией или настроить доступ только из локальной сети.

  • Отдельный HTTP(S)-сервер: Если 1С не опубликована, можно настроить небольшой веб-сервер (например, IIS на Windows) просто для раздачи файлов. Регламентное задание будет сохранять CSV прямо в папку веб-сервера (как указано C:\Exports\, смонтированную на сайт). Стоит позаботиться о безопасности: либо не публиковать этот сайт в интернет, либо включить на нем авторизацию (Basic Auth over HTTPS) или хотя бы генерировать сложное имя файла/путь, неизвестное посторонним.

  • Облачное хранилище или файловой шаринг: Альтернативно, 1С может скриптом отправлять файл на FTP/SFTP или в облако (например, Amazon S3, Yandex Object Storage и т.п.). Однако это требует дополнительных скриптов или использования HTTP-запросов из 1С. Проще держать файл на своем сервере.

Предпочтительно использовать HTTPS, чтобы шифровать передаваемые данные. Для внутреннего использования можно обойтись и HTTP (если, например, Power BI шлюз доступа стоит в той же сети и подключается по HTTP), но в целом сейчас всё стараются перевести на HTTPS.

3. Подключение Power BI к CSV по ссылке. В Power BI Desktop выберите «Получить данные» – «Веб». Укажите URL файла CSV (тот самый, где разместили файл, например https://yourserver/reports/Nomenklatura.csv). Power BI может запросить учетные данные доступа: если вы настроили базовую авторизацию, выберите тип Basic и введите логин/пароль, либо Windows (если интегрирована Windows-аутентификация). После этого Power BI загрузит CSV. Вам будет предложено указать разделитель CSV (обычно запятая или точка с запятой) и Power Query отобразит данные в табличном виде. Далее работайте с ними как обычно – настраивайте типы столбцов, создавайте визуализации.

Обновление данных: Поскольку файл формируется каждую ночь, в Power BI можно настроить обновление (Refresh). В Power BI Desktop просто нажимайте «Обновить» для получения новых данных. Если отчет публикуется в Power BI Service, для обновления по ссылке потребуется настроить шлюз данных (on-premises data gateway), если ссылка на CSV не общедоступна. В самом Power BI Service при настройке планового обновления укажите время, соответствующее тому, когда файл гарантированно обновлен (например, каждое утро в 7:00, после ночной генерации в 1:00). Power BI будет обращаться к URL и получать обновленный CSV.

В Yandex DataLens подключение к CSV делается иначе: DataLens умеет загружать данные из файлов, но обычно это разовая загрузка или подключение к облачному хранилищу. В DataLens вы можете создать датасет с типом «Файл» и загрузить CSV вручную, либо подключиться к файлу в Yandex Object Storage (S3) – тогда DataLens может обновлять данные по расписанию, считывая новый файл. Если нужно автоматизировать, можно настроить скрипт, который каждый день заливает CSV в Yandex Object Storage с тем же именем – DataLens будет его подхватывать. Либо использовать упомянутый «Экстрактор 1С», который интегрируется с DataLens напрямую.

4. Права доступа и безопасность в таком решении: Здесь мы намеренно разделили процесс получения данных и процесс их использования. 1С сама выгружает файл, поэтому права в 1С должны быть настроены на запуск задания (обычно задания выполняются от имени встроенного администратора или другого пользователя с полными правами на чтение нужных данных). Следует убедиться, что в выгружаемый CSV не попадают данные, которые не должны быть раскрыты аналитикам или внешним пользователям. Если требуется, можно выгружать разные файлы для разных ролей (но в рамках одного BI отчета это сложно разделить, поэтому лучше очищать/обезличивать данные заранее, либо контролировать доступ к самим отчетам BI).

На стороне веб-сервера, раздающего CSV, позаботьтесь о том, чтобы ссылка не стала общедоступной без вашего ведома. Если файл содержит конфиденциальную информацию, лучше закрыть доступ хотя бы базовой аутентификацией (Power BI умеет хранить и передавать базовый логин/пароль при обновлении). Если же решите упростить и оставить без авторизации, то ограничьте URL знанием – например, используйте нестандартный порт или длинный уникальный путь к файлу, не публикуйте его открыто.

Наконец, мониторинг: стоит настроить уведомления или проверки, что процесс выгрузки прошел успешно. Например, если по какой-то причине 1С не смогла сформировать файл (ошибка, сбой), чтобы вы это вовремя узнали – иначе BI будет продолжать показывать старые данные. Можно реализовать отправку почты из 1С после успешной выгрузки или настроить сторожок на веб-сервере, который проверяет обновление файла.

5. Особенности интеграции с Apache Superset и Yandex DataLens

Рассмотрев все методы, обобщим рекомендации именно для Superset и DataLens, так как они несколько отличаются от Power BI в подходе к источникам данных.

Apache Superset: этот open-source BI инструмент подключается к данным через SQLAlchemy (поддерживает множество СУБД: PostgreSQL, MySQL, ClickHouse, Oracle, etc.[53]). Прямого коннектора к 1С у него нет, поэтому Superset может работать с данными 1С только опосредованно:

  • Если база 1С на MS SQL/PostgreSQL и политика компании допускает прямое чтение, можно подключить Superset прямо к этой базе (через соответствующий драйвер SQL). Но, как обсуждали, придется разбираться в схемах таблиц. На практике лучше не так.

  • Оптимальный путь – загрузка данных 1С в промежуточную БД, доступную Superset. Например, с помощью скриптов или инструмента-экстрактора выгружаете данные 1С в PostgreSQL или ClickHouse (эти СУБД хорошо поддерживаются Superset). Далее в Superset создаете подключение к этой БД и работаете с уже «чистыми» табличками. Часто для удобства создают представления (VIEW) с понятными названиями колонок – т.е. делают мини-модель данных для аналитики.

  • Альтернативно, Superset позволяет загружать CSV-файлы вручную (есть функция Upload CSV в интерфейсе). Можно, например, выгрузить из 1С CSV и через веб-интерфейс Superset импортировать его в внутреннюю SQLite базу. Но это подходит только для небольших статических наборов данных или разовых анализов. Для регулярных обновлений этот путь неудобен – лучше, чтобы Superset обращался к внешней базе, куда данные загружаются по расписанию.

В контексте рассмотренных методов: Superset хорошо сочетается с методом 3.2 (промежуточная база) и 3.5 (готовые коннекторы). Например, коннектор «Экстрактор 1С в BI» от Денвик может выгружать данные в ClickHouse или PostgreSQL, к которым Superset потом подключается[46][54]. Напрямую к OData Superset не подключается, к файлам CSV – только через импорт.

Yandex DataLens: этот облачный BI-сервис от Яндекса также не умеет обращаться напрямую к платформе 1С или ее механизмам. DataLens поддерживает подключения к облачным БД (Yandex DB, ClickHouse, PostgreSQL и др.), а также к источникам типа CSV и Google Sheets[55]. Поэтому варианты такие:

  • Выгрузка данных 1С в облачную БД: например, в Yandex Managed ClickHouse или PostgreSQL (Managed Service). Далее DataLens подключается к этой базе (через встроенные коннекторы) и строит датасеты на SQL-запросах. Этот способ аналогичен описанному для Superset.

  • Загрузка данных через партнерский коннектор «Экстрактор 1С»: Яндекс предлагает готовое решение от фирмы Денвик, где вы устанавливаете расширение в 1С, оно автоматически создает облачную базу ClickHouse и загружает туда все данные, а DataLens подключается к этой базе по токену[18][48]. Это удобный путь, но платный (нужна лицензия на каждую базу 1С). Зато он снимает головную боль с настройкой – все уже сделано за вас, остается только строить дашборды.

  • CSV/файлы в DataLens: DataLens позволяет загружать собственные данные. Вы можете каждый день обновлять CSV-файл и перезагружать его в DataLens (вручную через интерфейс или с помощью API DataLens). Также DataLens поддерживает привязку к файлам в Yandex Object Storage: можно разместить CSV там и настроить DataLens Materialized View, которая по расписанию перечитывает файл (до 1 раза в час, по документации). Таким образом, можно обойтись даже без базы данных – 1С будет складывать CSV в Object Storage (напрямую REST-запросом или через промежуточный скрипт), а DataLens его подхватывать. Этот способ требует некоторой DevOps-настройки, но не требует покупать коннекторы.

  • Подключение к Google Sheets: В некоторых случаях данные из 1С можно выгружать в Google Sheets (через OData + скрипт, либо через Comma). DataLens умеет подключаться к Google Sheets таблицам. Однако это решение для очень небольших объемов и при наличии Google-инфраструктуры.

По сравнению с Power BI, DataLens и Superset чаще предполагают, что вы подготовите хранилище данных для них. Встраивать логику выгрузки непосредственно в них сложнее, поэтому на этапе интеграции с 1С обычно используют либо файлы, либо промежуточные БД. Универсальных рецептов нет – выбор зависит от возможностей конкретной компании. Малый бизнес часто начинает с CSV-файлов по расписанию, потому что это проще всего и не требует дополнительных лицензий. При росте задач могут перейти к OData + Power BI для более интерактивного получения данных. В крупных внедрениях нередко сразу закладывают выгрузку в Data Warehouse или используют специализированные коннекторы, чтобы минимизировать кастомную разработку.

6. Ссылки на документацию и ресурсы

Для углубления темы и пошаговых инструкций приведем несколько полезных источников:

  • Официальная документация 1С по веб-сервисам и OData: раздел «Механизмы интернет-сервисов» в руководстве разработчика 1С[56][57], а также статья 1C-Developer о правилах формирования запросов OData[58]. На сайте 42clouds есть примеры работы с OData в 1С[59].

  • Публикация OData-сервиса: справка по настройке публикации 1С на веб-сервере (например, руководство SamaraSoft с описанием шага включения OData)[10].

  • Статья по интеграции 1С и Power BI через OData: например, блог Alexrovich с описанием шагов подключения Power BI к OData 1С[17].

  • Обзор способов выгрузки данных из 1С для аналитики: большая статья на Хабре, сравнивающая 7 методов извлечения данных (SQL, файлы, OData, COM, 1С:Шина, коннекторы и пр.)[2][60].

  • Пример реализации CSV-выгрузки в 1С: статья компании WiseAdvice о загрузке и выгрузке CSV в 1С с примером кода обработки[51][61].

  • Интеграция 1С и Yandex DataLens: обзор способов от команды Yolva IT-консалтинг[62][28], а также инструкция Яндекс.Облака по использованию «Экстрактора 1С» для DataLens[3][18].

  • Документация Apache Superset: официальные гайды по подключению баз данных через SQLAlchemy (на superset.apache.org) – пригодится при настройке подключения Superset к PostgreSQL/ClickHouse с данными 1С.

  • Ресурсы сообщества 1С: форум Infostart (infostart.ru) – множество обсуждений по выгрузке данных, готовые обработки для OData и REST; Mista.ru – форумы 1С, где часто обсуждают, как вытянуть данные.

Этот гайд охватил основные варианты интеграции 1С с BI-системами. Выбор метода зависит от ваших задач и ограничений: для оперативности и простоты подходят OData и регулярные выгрузки CSV, для масштабируемости – хранилище данных или коннекторы, а для полной гибкости – собственные API/COM-скрипты. Всегда учитывайте вопросы безопасности и лицензии 1С при организации обмена данными. При правильном подходе вы сможете извлечь максимум ценной информации из 1С и совместить ее с мощными средствами визуализации, чтобы получить действенную бизнес-аналитику.


[1] [2] [6] [7] [8] [19] [20] [21] [22] [23] [24] [25] [26] [27] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [49] [50] [60] 7 способов выгрузить данные из 1С для бизнес-аналитики / Хабр

https://habr.com/ru/articles/827992/

[3] [18] [48] Загружаем данные в Yandex DataLens напрямую из 1С: инструкция | Yandex Cloud

https://yandex.cloud/ru/blog/posts/2024/08/1c-to-datalens

[4] Конструктор СКД В 1С | CORS Academy

https://cors.su/eto-interesno/konstruktor-skd-v-1s/

[5] Что такое СКД: просто о сложном — ВДГБ

https://www.vdgb.ru/blog/chto-takoe-skd-prosto-o-slozhnom/

[9] [11] [12] [13] [14] Импорт из 1С:Предприятие по протоколу OData · Демопримеры

https://examples.loginom.ru/integration-1c-odata/index.html

[10] Публикация web-сервиса OData

https://samarasoft.com/docs/1c-connector/admin-guide/web-service-odata-publication/

[15] [16] [17] Интеграция 1С и PowerBI — ALEXROVICH.RU

https://alexrovich.ru/info/articles/integratsiya-1s-i-powerbi/

[28] [62] Как подключить Yandex DataLens к 1С? — Ёлва

https://yolva-it.ru/2023/11/15/yandex-datalens/

[51] [52] [61] Загрузка и выгрузка из CSV в 1С

https://wiseadvice-it.ru/o-kompanii/blog/articles/zagruzka-i-vygruzka-iz-csv-v-1s/

[53] [54] [55] Сравнение Yandex Datalens с Apache Superset — системы анализа и визуализации данных

https://bi.denvic.ru/blog/yandex-datalens-vybor-za-vami/

[56] Глава 18. Механизмы интернет-сервисов — 1С:ИТС

https://its.1c.ru/db/v838doc/bookmark/dev/TI000000783

[57] 5.23 Интерфейс OData — 1С:ИТС

https://its.1c.ru/db/bsp3111doc/content/2942/hdoc

[58] Интерфейс OData: правила формирования условия отбора

https://42clouds.com/ru-ru/manuals/interfeys-odata-pravila-formirovaniya-usloviya-otbora/

[59] Работа с данными приложения в сервисе 1С:Фреш через …

https://1cfresh.com/articles/data_odata