Часто при внедрении систем бизнес-аналитики (BI), таких как PowerBI, Qlik или Tableau, возникает потребность в оперативном получении данных из 1С. Например, для построения дашбордов по текущим остаткам товаров на складах в конфигурации 1С:Комплексная автоматизация 2.5. Нередко подрядчики по аналитике предлагают самый прямолинейный подход — настроить представления (Views) напрямую в базе данных MSSQL, читая внутренние таблицы 1С. Давайте разберем по шагам, насколько это решение адекватно, какие риски оно несет и какие альтернативы мы можем применить.
На первый взгляд, использование представлений (Views) в базе данных кажется идеальным решением. Прямые SQL-запросы — это действительно самый быстрый и оперативный способ получения больших массивов данных. Однако архитектура платформы 1С накладывает ряд серьезных ограничений. Проанализируем основные проблемы, с которыми мы гарантированно столкнемся при таком подходе.
_AccumRg12345 или _Fld6789). При реструктуризации базы, глобальных обновлениях конфигурации или изменении типов полей эти имена могут поменяться. Любое обновление может мгновенно «сломать» наши настроенные представления, что потребует ручного пересоздания вьюшек.Рассмотрим более правильные с точки зрения архитектуры варианты передачи данных из 1С во внешние системы.
1. Использование HTTP-сервисов
Это один из самых рекомендуемых способов для оперативного обмена. Мы создаем на стороне 1С свой собственный HTTPСервис, который выполняет запрос к базе средствами встроенного языка 1С и отдает результат в формате JSON.
В этом случае мы пишем привычный запрос к виртуальным таблицам:
Функция ДанныеДляBIПолучить(Запрос)
ЗапросБД = Новый Запрос;
ЗапросБД.Текст =
"ВЫБРАТЬ
| ТоварыНаСкладахОстатки.Склад.Наименование КАК Склад,
| ТоварыНаСкладахОстатки.Номенклатура.Артикул КАК Артикул,
| ТоварыНаСкладахОстатки.ВНаличииОстаток КАК Остаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки";
Результат = ЗапросБД.Выполнить().Выгрузить();
// Логика сериализации ТаблицыЗначений в JSON
Ответ = Новый HTTPСервисОтвет(200);
Ответ.УстановитьТелоИзСтроки(СтрокаJSON);
Возврат Ответ;
КонецФункции
Плюсы: не зависит от структуры SQL, работают права доступа, нет проблем с обновлениями. Минус: на сверхбольших объемах данных формирование и сериализация JSON могут потреблять ресурсы сервера 1С.
2. Использование стандарта OData
Платформа позволяет опубликовать стандартный интерфейс OData в пару кликов. В PowerBI есть готовые коннекторы для работы с OData. Это требует минимальных усилий программиста 1С. Однако стоит учесть, что OData может работать медленно на больших объемах сложных таблиц и также чувствительна к переименованию объектов метаданных внутри самой конфигурации 1С.
3. Использование витрин данных (промежуточных таблиц)
Если BI-системе нужен именно SQL-доступ, мы можем реализовать архитектуру «витрин». В 1С создаются специальные регистры сведений (или внешние таблицы), которые содержат уже подготовленные, плоские данные для аналитики. Фоновое РегламентноеЗадание периодически обновляет эти данные. Таким образом, BI-система читает стабильную таблицу, которая никогда не меняет свою структуру при обновлении основной конфигурации, и не мешает транзакционной работе пользователей.
4. 1С:Аналитика и Дата Акселератор
Если задача состоит именно в аналитике, стоит рассмотреть штатный механизм платформы — «Копия базы данных» (Дата Акселератор). Он позволяет реплицировать нужные таблицы в отдельную структуру в оперативной памяти (in-memory). Система сама следит за обновлениями, а аналитические запросы выполняются молниеносно и не нагружают основную транзакционную базу.
Если политическое или техническое решение уже принято, и нам необходимо использовать представления, давайте проанализируем, как минимизировать риски.
WITH (NOLOCK) в ваших SQL-запросах. Это укажет SQL-серверу не устанавливать разделяемые блокировки при чтении. Да, мы можем получить эффект «грязного чтения» (считать строку, транзакция по которой еще не завершена), но зато мы не парализуем работу бухгалтеров и менеджеров в 1С.
SELECT
_Fld123 AS Nomenklatura,
_Fld124 AS Kolichestvo
FROM _AccumRgT567 WITH (NOLOCK)
РегистрСведений, который будет хранить маппинг (соответствие) имен таблиц метаданных и их физических имен в SQL. При обновлении конфигурации вы сможете автоматически генерировать и пересоздавать скрипты представлений (Views), читая этот регистр, что спасет вас от рутинного поиска изменившихся имен таблиц вида _InfoReg123.Подводя итог, можно с уверенностью сказать: прямой доступ к базе через MSSQL Views для 1С является устаревшим и высокорисковым решением. Для современных проектов рекомендуется использовать HTTP-сервисы, публикацию копий баз данных через Дата Акселератор или интеграцию через брокеры сообщений (шины данных). Это обеспечит стабильность системы после обновлений и сохранит корпоративную безопасность.