Разбор базы 1С в SQL Server: как настроить безопасную выгрузку и автоматизировать отчеты для Power BI

Бизнес-аналитик 1С v8.3 (Управляемые формы) Управленческий учет IT и автоматизация бизнеса
← На главную

Многие аналитики и начинающие разработчики при получении доступа к SQL-серверу рабочей базы 1С сталкиваются с иллюзией простоты. Кажется, что достаточно написать несколько простых запросов с операторами JOIN, и все необходимые данные мгновенно окажутся в Excel или Power BI. Однако реальность преподносит неприятный сюрприз: структура базы данных состоит из тысяч таблиц со сложными техническими именами вроде _AccumRg20050 и полями типа _Fld20051. Попытки расшифровать эти данные вручную или с помощью сомнительных обработок часто приводят к неполным данным, ошибкам и нарушению работы всей системы.

В этой статье мы подробно разберем, как устроена структура таблиц 1С на сервере управления базами данных (СУБД), проанализируем основные риски прямого обращения к SQL-базе и рассмотрим безопасные, легальные альтернативы автоматизации отчетности, которые сберегут ваше время и избавят от технических сбоев.

Почему прямое чтение SQL-таблиц 1С — это опасный путь?

Прежде чем приступать к написанию запросов на уровне СУБД, давайте выясним, с какими скрытыми техническими препятствиями и рисками сопряжен этот подход:

  1. Динамическая смена идентификаторов таблиц. Имена физических таблиц в SQL (например, числовые индексы в _AccumRg20050) генерируются платформой динамически. Если администратор выполнит выгрузку и загрузку базы через файл формата .dt или обновит конфигурацию 1С, эти индексы могут измениться. В результате все ваши тщательно написанные SQL-скрипты в один момент перестанут работать.
  2. Проблема сдвига дат (Date Offset). По умолчанию платформа 1С хранит даты в SQL со сдвигом на 2000 лет вперед. Это сделано для корректной поддержки пустых дат в СУБД. Например, дата продажи 15.05.2023 будет записана в таблице как 15.05.4023. При прямых запросах вам придется вручную вычитать этот сдвиг во всех условиях и полях выбора.
  3. Бинарный формат уникальных идентификаторов. Ссылочные поля (ID документов, справочников) хранятся в формате binary(16). Более того, порядок байт в них перевернут относительно стандартного представления UUID в SQL Server. Соединять таблицы по таким полям крайне неудобно без специальных функций конвертации.
  4. Сложная логика итогов в регистрах. Регистры накопления и бухгалтерии состоят из нескольких физических таблиц: таблицы движений (актуальные записи) и таблиц итогов (рассчитанные остатки на конец каждого месяца). Чтобы выгрузить актуальный остаток на текущую дату, обычного запроса SELECT к одной таблице будет недостаточно — придется писать громоздкие алгоритмы расчета, которые платформа 1С «под капотом» выполняет автоматически.
  5. Угроза производительности (Блокировки). Запуск «тяжелого» аналитического запроса из Power BI напрямую к рабочей базе данных во время активной работы пользователей может привести к наложению блокировок на таблицы СУБД. В итоге пользователи в программе увидят ошибку «Превышено время ожидания блокировки», а работа компании будет парализована.
  6. Лицензионные ограничения. Прямое обращение к таблицам СУБД в обход программного интерфейса платформы (за исключением некоторых регламентированных случаев) нарушает лицензионное соглашение с фирмой 1С.

Как безопасно расшифровать структуру таблиц СУБД

Если перед вами все же стоит задача изучить структуру хранения данных, не нужно использовать неофициальные обработки из интернета, которые часто отображают нечитаемые символы. Платформа 1С имеет встроенный безопасный инструмент для получения схемы данных.

Для решения этой задачи воспользуемся программным методом ПолучитьСтруктуруХраненияБазыДанных(). Этот метод возвращает полную таблицу соответствий метаданных 1С (документов, справочников, регистров) и физических таблиц SQL.

Рассмотрим пример создания простейшего кода в 1С, который выгрузит всю структуру БД в удобном формате:


ВыборкаСтруктуры = ПолучитьСтруктуруХраненияБазыДанных(, Истина);
ТабличныйДок = Новый ТабличныйДокумент;

// Заполняем заголовки и выгружаем результат для анализа
Для Каждого СтрокаТаблицы Из ВыборкаСтруктуры Цикл
    // Здесь пишется код выгрузки в файл Excel или текстовую таблицу
КонецЦикла;

Этот метод абсолютно безопасен, всегда возвращает актуальные имена таблиц и полей для вашей текущей конфигурации и позволяет быстро сориентироваться в схеме БД.

Как «подсмотреть» готовый SQL-запрос платформы 1С

Если вам необходимо воспроизвести сложный отчет на уровне СУБД, отличным решением будет анализ запроса, который сама платформа генерирует и отправляет на SQL Server. Выяснить структуру запроса можно двумя способами:

  1. Использование SQL Server Profiler (или Extended Events). Запустите профайлер на сервере MS SQL, настройте фильтр по имени вашей базы данных и выполните нужный отчет в режиме предприятия 1С. Вы увидите готовый T-SQL код.
  2. Настройка технологического журнала 1С. Создайте файл конфигурации технологического журнала logcfg.xml в каталоге установки платформы и настройте сбор событий работы с СУБД.

Пример настройки файла logcfg.xml для фиксации SQL-запросов к СУБД MS SQL:


<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
    <log location="C:\v8_logs" history="2">
        <event>
            <eq property="Name" value="DBMSSQL"/>
        </event>
        <property name="all"/>
    </log>
</config>

Проанализировав полученный лог, мы сможем увидеть структуру связей таблиц, которую платформа использует для построения отчета. Однако помните, что автоматически сгенерированные запросы перегружены техническими конструкциями и временными таблицами, поэтому использовать их напрямую для BI-систем без глубокой переработки крайне затруднительно.

Решение №1: Настройка автоматической рассылки отчетов средствами 1С

Для решения задачи ежедневного обновления аналитики (например, выгрузки 14 отчетов к 6 часам утра) оптимальным и самым простым решением является использование типового функционала 1С — Рассылка отчетов. Этот механизм работает полностью в автоматическом режиме на стороне сервера и не требует написания SQL-запросов.

Выполним настройку по шагам:

  1. Откройте нужный вам отчет (например, «Анализ доступности товаров на складах»), настройте необходимые группировки, фильтры и сохраните его как Вариант отчета.
  2. Перейдите в раздел администрирования или воспользуйтесь поиском по функциям и найдите справочник Рассылки отчетов.
  3. Создайте новую рассылку. В поле «Отправлять» выберите созданный ранее вариант отчета.
  4. Перейдите на вкладку Доставка (папка и эл. почта). Здесь мы можем гибко настроить способ сохранения файлов:
    • Поставить флажок Публиковать и выбрать сетевой каталог (папку на диске или в локальной сети), либо настроить отправку по протоколу FTP.
    • При публикации в папку укажите имя файла. Платформа 1С умеет автоматически перезаписывать файлы новыми данными при каждом запуске рассылки, что идеально подходит для Power Query и Power BI, настроенных на чтение из этой папки.
  5. Настройте Расписание рассылки. Задайте ежедневное время старта (например, в 5:30 утра).

Этот способ полностью решает проблему обновления данных: утром вы приходите на работу, файлы в сетевой папке уже обновлены сервером 1С по расписанию, а ваш Power BI автоматически подтягивает свежие данные при обновлении модели.

Решение №2: Использование протокола OData для прямой связи с Power BI

Если вам требуется настроить прямое подключение BI-системы к базе данных без промежуточных файлов в папках, воспользуйтесь штатным механизмом платформы — автоматическим REST-сервисом по протоколу OData. Это современный, полностью легальный и безопасный инструмент.

Разберем алгоритм работы с OData:

  1. Администратор 1С публикует информационную базу на веб-сервере (IIS или Apache) с включенной опцией Публиковать стандартный интерфейс OData.
  2. В Power BI или Power Query вы выбираете источник данных Получить данные -> Из интернета (или специализированный коннектор OData-канал).
  3. Адрес запроса будет выглядеть следующим образом:

    http://имя_сервера/имя_публикации/odata/standard.odata/

  4. При таком подключении Power BI «увидит» все ваши справочники, документы и регистры с их реальными русскими названиями (например, Справочник_Номенклатура вместо непонятных SQL-префиксов).

Использование OData позволяет полностью обойти проблемы со сдвигом дат, дешифровкой UUID и изменением индексов таблиц при обновлениях конфигурации. Все преобразования платформа берет на себя.

Решение №3: Организация безопасной работы через SQL-представления (Views)

Если объемы данных исчисляются миллионами строк, а OData работает недостаточно быстро, вы можете использовать гибридный подход — обращение к СУБД через SQL-представления (Views) на копии базы данных.

Для реализации этого сценария выполните следующие действия:

  1. Создайте реплику базы данных. Настройте механизм репликации (например, MS SQL AlwaysOn) или ежедневное ночное восстановление резервной копии рабочей базы на тестовом сервере. Категорически запрещено запускать тяжелую аналитику на основной транзакционной базе!
  2. Используйте SQL-представления (Views). Чтобы не зависеть от изменения номеров таблиц в 1С при обновлениях, создайте в базе данных SQL специальные представления. Представление будет выступать «прослойкой» между сырыми таблицами 1С и вашим отчетом в Power BI.
  3. Пример создания представления для справочника номенклатуры:
    
    CREATE VIEW v_Номенклатура AS
    SELECT 
        _IDRRef AS Ссылка_ID,
        _Description AS Наименование,
        _Code AS Код
    FROM _Reference131 -- Здесь указывается текущая физическая таблица 1С
    
  4. Если после обновления конфигурации имя таблицы изменится на _Reference145, вам достаточно будет переписать один этот View, а сам отчет в Power BI, подключенный к v_Номенклатура, продолжит работать без изменений.

Проанализировав все варианты, мы видим, что прямой разбор SQL-таблиц «в лоб» — это наиболее трудоемкий метод, требующий постоянной поддержки работоспособности запросов. Использование штатной автоматической рассылки отчетов в папку или подключение по OData позволит вам решить задачу интеграции гораздо быстрее, надежнее и безопаснее.

← На главную