При работе с высоконагруженными базами данных на платформе 1С:Предприятие часто возникает соблазн ускорить выполнение тяжелых операций (например, работу с большими регистрами сведений) с помощью хранимых процедур или прямых запросов к СУБД. Рассмотрим подробнее, как это соотносится с лицензионной политикой фирмы «1С» и какими техническими рисками сопровождается подобное решение.
Проанализируем основное ограничение, которое накладывает фирма «1С». Согласно официальной позиции, использование любых недокументированных средств для построения решений на платформе запрещено. Это означает, что:
Запрос, СправочникМенеджер, ДокументОбъект и т. д.).Выясним причину столь жестких ограничений. Используя инструменты вроде SQL Базомер (8.2, 8.3), можно изучить структуру, но работа «в обход» платформы опасна по нескольким техническим причинам:
Инвалидация кэша: Сервер приложений 1С кэширует данные. Если вы, проанализировав Размер таблицы SQL базы 1С, измените запись напрямую в SQL, сервер 1С не узнает об этом. В результате пользователи будут видеть старые данные или возникнут ошибки при попытке записи через платформу.
Нарушение логической целостности: Платформа 1С при записи объекта выполняет множество скрытых действий. Даже используя специализированный Поиск и замена дублей справочников SQL (8.3) (УФ), стоит помнить, что SQL-скрипт не сможет корректно воспроизвести всю бизнес-логику платформы (итоги, права доступа, версионирование).
Сложность структуры: Имена таблиц в SQL (например, _InfoReg123) генерируются платформой. Разобраться в них поможет обработка Структура хранения базы данных, иначе прямые запросы «сломаются» после первого же обновления конфигурации.
Проанализируем ситуацию с точки зрения системного администрирования. Существует тонкая грань между «построением решений» и обслуживанием базы. Рассмотрим примеры действий, которые обычно не считаются нарушением:
Иногда прямое вмешательство в SQL становится единственным способом спасти базу при аппаратных сбоях. Рассмотрим пример восстановления целостности конфигурации, когда база не открывается в Конфигураторе из-за битых данных. В таких случаях программисты могут прибегнуть к замене таблицы Config из живой копии:
DELETE FROM BrokenDB.dbo.Config;
INSERT INTO BrokenDB.dbo.Config SELECT * FROM HealthyDB.dbo.Config;
Важно: Подобные действия выполняются на собственный страх и риск. В случае возникновения проблем после такого вмешательства, фирма 1С имеет полное право отказать в технической поддержке.
Разберем правовую сторону вопроса. Существует мнение, что Статья 1280 ГК РФ позволяет пользователю вносить изменения в программу для обеспечения её функционирования. Однако лицензионное соглашение — это договор присоединения. Подписывая его, вы соглашаетесь на условия вендора. Если вы планируете тиражировать (продавать) решение, использующее прямые запросы, это гарантированно приведет к юридическим проблемам с правообладателем.
Вместо нарушения лицензии для ускорения работы, проанализируем штатные механизмы:
Итог: Прямой доступ к SQL для изменения данных — это «крайняя мера». Для задач оптимизации работы с регистрами старайтесь использовать штатные средства платформы. Если же вы решаетесь на прямые запросы, делайте это только для внутренних нужд и помните, что ответственность за целостность базы полностью ложится на вас.