Часто перед разработчиком 1С встает задача написания прямого SQL-запроса к базе данных. Это может быть продиктовано необходимостью создания View (представления) на уровне СУБД, интеграцией с внешними системами или оптимизацией тяжелых аналитических выборок. Однако стандартный конструктор запросов 1С генерирует специфичный код, который трудно читать и практически невозможно использовать "как есть" во внешних инструментах из-за обилия служебных конструкций и специфических имен таблиц. Рассмотрим, какие существуют инструменты и методики, позволяющие строить SQL-запросы в визуальном режиме, максимально приближенном к удобству 1С.
Разберем ситуацию, когда запрос уже написан на языке 1С, и нам нужно получить его "чистый" SQL-эквивалент. Вместо того чтобы пытаться вручную транслировать имена таблиц вроде Справочник.Номенклатура в _Reference25, мы можем перехватить запрос на стороне сервера СУБД.
Проанализируем основные методы перехвата:
SQL:BatchCompleted или RPC:Completed. Чтобы облегчить поиск в огромном логе, рекомендуется добавить в запрос 1С уникальный комментарий, например: // МОЙ_ЗАПРОС_1.ГДЕ ЛОЖЬ. Платформа все равно сгенерирует SQL-текст, но выполнится он мгновенно, и его будет проще найти в логах СУБД.Если задача стоит именно в построении нового запроса с нуля без использования платформы 1С, стоит обратить внимание на специализированное ПО. Рассмотрим dbForge Studio for SQL Server. Этот инструмент содержит визуальный редактор, который во многом превосходит конструктор 1С.
В чем сходство и преимущества:
WHERE, GROUP BY и HAVING, что исключает ошибки в синтаксисе.Также выделим FlySpeed SQL Query. Эта программа ориентирована именно на тех, кто хочет получить на выходе читаемый код. В отличие от 1С, которая часто использует псевдонимы типа T1, T2, FlySpeed старается сохранять осмысленные алиасы, что критически важно для создания поддерживаемых вьюх.
Выясним, существуют ли решения, созданные специально для нашего сообщества. Одним из самых мощных инструментов является пакет "Инструменты разработчика" (ИР). В его составе есть "Консоль запросов", которая обладает уникальными функциями:
Проанализируем возможности конструктора в составе ИР:
Для использования этого метода нам понадобится установленный пакет ИР. Рассмотрим пример того, как программно можно получить структуру хранения таблиц, чтобы понимать, какие имена использовать во внешних конструкторах:
СтруктураХранения = ПолучитьСтруктуруХраненияБазыДанных();
Для Каждого Таблица Из СтруктураХранения Цикл
Если Таблица.ИмяМетаданных = "Справочник.Номенклатура" Тогда
Сообщить("Имя таблицы в SQL: " + Таблица.ИмяТаблицыХранения);
КонецЕсли;
КонецЦикла;
Рассмотрим классический, но незаслуженно забытый способ. Если вам нужен интерфейс построения запроса, максимально похожий на тот, с которого "списывали" конструктор 1С, можно воспользоваться Microsoft Access. Подключившись к SQL-серверу через ODBC, вы получаете доступ к таблицам базы 1С. Визуальный редактор связей в Access работает по тем же принципам, а переключение в режим "SQL" позволяет скопировать готовый текст запроса.
Важный нюанс: Access может добавлять лишние скобки в выражениях JOIN, которые придется немного почистить перед вставкой в View.
При работе с внешними конструкторами важно помнить о специфике данных 1С. Чтобы ваша вьюха была полезной, придерживайтесь следующих правил:
_IDRRef (ссылки) в SQL представлены в виде binary(16). Для удобного отображения их часто нужно конвертировать в строку._Marked, если вам нужны только "живые" данные.Подводя итог, можно сказать: если вам нужен инструмент, максимально похожий на 1С, начните с dbForge Studio или Инструментов разработчика (ИР). Они обеспечивают плавный переход от визуального проектирования к получению чистого SQL-кода, готового для создания представлений непосредственно в базе данных.