Как сопоставить таблицы 1С с базой данных SQL Server и настроить автоматический запуск обработки?

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

При интеграции 1С со сторонними системами отчетности, такими как Microsoft SQL Server Reporting Services (SSRS) или BI-платформами, разработчики часто сталкиваются с задачей прямого чтения таблиц СУБД, а также с необходимостью регулярной фоновой подготовки данных. Разберем, как устроена структура хранения данных 1С в реляционных базах, как правильно определять имена таблиц и полей, какие риски несет прямое чтение и как настроить автоматический запуск обработок по расписанию.

Как узнать соответствие объектов метаданных и физических таблиц в SQL Server

В системных таблицах СУБД (таких как MS SQL Server или PostgreSQL) метаданные 1С не хранятся в открытом текстовом виде — конфигурация упакована в сжатые бинарные данные в служебных таблицах CONFIG и PARAMS. Сами таблицы и поля получают технические префиксы и идентификаторы:

  1. Таблицы объектов: _Reference (справочники), _Document (документы), _InfoReg (регистры сведений), _AccumReg (регистры накопления), _VT (табличные части).
  2. Поля и реквизиты: поля пользователя получают префикс _Fld с уникальным числовым номером.

Для программного сопоставления объектов конфигурации и таблиц СУБД в платформе 1С предусмотрен встроенный метод ПолучитьСтруктуруХраненияБазыДанных(). Рассмотрим пример кода для получения таблицы соответствия:


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

Для Каждого СтрТаблица Из СтруктураБД Цикл
    ИмяОбъекта1С = СтрТаблица.ИмяМетаданных;
    ИмяТаблицыSQL = СтрТаблица.ИмяТаблицыХранения;
    
    // Перебираем поля текущей таблицы
    Для Каждого СтрПоле Из СтрТаблица.Поля Цикл
        ИмяРеквизита1С = СтрПоле.ИмяРеквизита;
        ИмяКолонкиSQL  = СтрПоле.ИмяПоляХранения;
    КонецЦикла;
КонецЦикла;

Параметр Истина во втором аргументе позволяет получить детальную информацию о полях таблиц, их назначении и типах данных.

Особенности структуры данных 1С в СУБД и риски прямого чтения

Прямое выполнение запросов SELECT к таблицам СУБД в обход платформы 1С сопряжено со множеством технических сложностей и ограничений:

  1. Составные типы данных: если реквизит может принимать значения нескольких типов (например, документ или справочник), в таблице СУБД он разбивается на несколько колонок (_TYPE — код типа, _RTRef — тип ссылки, _RRRef — ссылка на запись). При изменении состава типов реквизита в конфигурации структура колонок SQL перестраивается, что ломает ранее написанные прямые запросы.
  2. Хранение ссылок (GUID): ссылки представлены типом binary(16). Порядок байтов в 1С отличается от стандартного типа uniqueidentifier в MS SQL Server, поэтому прямое преобразование требует перестановки байтов.
  3. Смещение дат: в базах 1С часто используется смещение дат на 2000 лет вперед (для корректной работы с нулевыми датами). В таких случаях дату из СУБД приходится корректировать функцией DATEADD.
  4. Блокировки рабочей базы: выполнение тяжелых аналитических SQL-запросов к рабочей базе может приводить к блокировкам транзакций и взаимным блокировкам (deadlocks) пользователей. При прямом чтении обязательно требуется применять хинт WITH (NOLOCK) или выносить аналитику на вторичные реплики.
  5. Лицензионные условия: прямое обращение к таблицам 1С в обход платформы нарушает лицензионное соглашение фирмы «1С».

Альтернативные способы интеграции с системами отчетности

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

  1. Внешнее COM-соединение: использование V83.COMConnector позволяет выполнять штатные запросы 1С, где платформа автоматически рассчитывает остатки, срезы регистров и разворачивает составные типы.
  2. OData (REST) и HTTP-сервисы: платформа позволяет отдавать готовые структуры данных в формате JSON или XML для систем визуализации и отчетности.
  3. Выгрузка в отдельную витрину данных (DWH): фоновый процесс в 1С собирает плоскую таблицу показателей и записывает ее в отдельную базу SQL, из которой отчетные системы строят аналитику без нагрузки на рабочую систему 1С.

Автоматический запуск обработки по расписанию

Для регулярного формирования данных и записи их в регистр или витрину разберем два основных способа автоматизации:

  1. Через регламентное задание 1С (клиент-серверный режим):

    В дереве метаданных конфигурации создается объект Регламентное задание. В его свойствах указывается имя процедуры общего модуля (модуль должен иметь флажки Сервер и Вызов сервера) и настраивается расписание (например, каждый день в 03:00). В клиент-серверном варианте кластер серверов 1С запускает фоновое задание самостоятельно без участия интерактивного сеанса.

  2. Запуск внешней обработки через Планировщик задач (Task Scheduler):

    Если обработка не встроена в конфигурацию, ее можно вызывать пакетно командной строкой:

    
    "C:\Program Files\1cv8\common\1cv8.exe" ENTERPRISE /S "ServerName\BaseName" /N "RobotUser" /P "Password" /Execute "C:\Scripts\FillData.epf"
    

    В самой обработке (в модуле объекта или при открытии управляемой формы) обязательно должен вызываться метод завершения сеанса:

    
    Процедура ВыполнитьАлгоритм()
        // Логика расчета и записи данных в регистр
        ЗаполнитьДанныеРегистра();
        
        // Завершаем работу сеанса робота
        ЗавершитьРаботуСистемы(Ложь);
    КонецПроцедуры
    

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

← На главную