При интеграции 1С со сторонними системами отчетности, такими как Microsoft SQL Server Reporting Services (SSRS) или BI-платформами, разработчики часто сталкиваются с задачей прямого чтения таблиц СУБД, а также с необходимостью регулярной фоновой подготовки данных. Разберем, как устроена структура хранения данных 1С в реляционных базах, как правильно определять имена таблиц и полей, какие риски несет прямое чтение и как настроить автоматический запуск обработок по расписанию.
В системных таблицах СУБД (таких как MS SQL Server или PostgreSQL) метаданные 1С не хранятся в открытом текстовом виде — конфигурация упакована в сжатые бинарные данные в служебных таблицах CONFIG и PARAMS. Сами таблицы и поля получают технические префиксы и идентификаторы:
_Reference (справочники), _Document (документы), _InfoReg (регистры сведений), _AccumReg (регистры накопления), _VT (табличные части)._Fld с уникальным числовым номером.Для программного сопоставления объектов конфигурации и таблиц СУБД в платформе 1С предусмотрен встроенный метод ПолучитьСтруктуруХраненияБазыДанных(). Рассмотрим пример кода для получения таблицы соответствия:
// Получаем структуру всех таблиц базы данных
СтруктураБД = ПолучитьСтруктуруХраненияБазыДанных( , Истина);
Для Каждого СтрТаблица Из СтруктураБД Цикл
ИмяОбъекта1С = СтрТаблица.ИмяМетаданных;
ИмяТаблицыSQL = СтрТаблица.ИмяТаблицыХранения;
// Перебираем поля текущей таблицы
Для Каждого СтрПоле Из СтрТаблица.Поля Цикл
ИмяРеквизита1С = СтрПоле.ИмяРеквизита;
ИмяКолонкиSQL = СтрПоле.ИмяПоляХранения;
КонецЦикла;
КонецЦикла;
Параметр Истина во втором аргументе позволяет получить детальную информацию о полях таблиц, их назначении и типах данных.
Прямое выполнение запросов SELECT к таблицам СУБД в обход платформы 1С сопряжено со множеством технических сложностей и ограничений:
_TYPE — код типа, _RTRef — тип ссылки, _RRRef — ссылка на запись). При изменении состава типов реквизита в конфигурации структура колонок SQL перестраивается, что ломает ранее написанные прямые запросы.binary(16). Порядок байтов в 1С отличается от стандартного типа uniqueidentifier в MS SQL Server, поэтому прямое преобразование требует перестановки байтов.DATEADD.WITH (NOLOCK) или выносить аналитику на вторичные реплики.Вместо прямого SQL-доступа к таблицам рекомендуется использовать штатные механизмы:
V83.COMConnector позволяет выполнять штатные запросы 1С, где платформа автоматически рассчитывает остатки, срезы регистров и разворачивает составные типы.Для регулярного формирования данных и записи их в регистр или витрину разберем два основных способа автоматизации:
В дереве метаданных конфигурации создается объект Регламентное задание. В его свойствах указывается имя процедуры общего модуля (модуль должен иметь флажки Сервер и Вызов сервера) и настраивается расписание (например, каждый день в 03:00). В клиент-серверном варианте кластер серверов 1С запускает фоновое задание самостоятельно без участия интерактивного сеанса.
Если обработка не встроена в конфигурацию, ее можно вызывать пакетно командной строкой:
"C:\Program Files\1cv8\common\1cv8.exe" ENTERPRISE /S "ServerName\BaseName" /N "RobotUser" /P "Password" /Execute "C:\Scripts\FillData.epf"
В самой обработке (в модуле объекта или при открытии управляемой формы) обязательно должен вызываться метод завершения сеанса:
Процедура ВыполнитьАлгоритм()
// Логика расчета и записи данных в регистр
ЗаполнитьДанныеРегистра();
// Завершаем работу сеанса робота
ЗавершитьРаботуСистемы(Ложь);
КонецПроцедуры
Использование регламентных заданий и штатных интерфейсов платформы обеспечивает стабильность работы системы, исключает ошибки при обновлении конфигурации и сохраняет целостность базы данных.