Универсальный переводчик запросов 1С в T-SQL (Microsoft)

26.11.13

Разработка - Инструментарий разработчика

Данная обработка облегчает разработчику процесс перевода запросов в формате 1С, в формат T-SQL (Microsoft).

Скачать файлы

Наименование Файл Версия Размер
Обработка перевода запросов в T-SQL
.epf 29,11Kb
211
.epf 5 29,11Kb 211 Скачать

Данную обработку я писал для себя в тот момент когда активно занимался прямыми обращениями к базе данных 1С, в обход сервера приложений. 

Обработка позволяет просматривать структуру хранения данных. А так же позволяет без особых усилий перевести наименования полей и таблиц в те наименования которые хранятся внутри СУБД. 

Алгоритм использования прост. 

1. Необходимо настроить подключение к базе данных.

2. Вставить из буфера обмена запрос в формате 1С, либо воспользоваться конструктором запроса для его построения. 

3. Выделяем в текстовом поле где написан запрос, наименование объекта метаданных (Справочник, Документ, Регистр) из которого происходит выборка. Нажимаем кнопку "Транслировать объект".

4. Теперь можно либо по отдельности выделять каждое из полей объекта, либо можно выделить все поля объекта и нажать кнопку "Транслировать поля объекта". Поля будут переведены на внутренне представление. Если перевод массовый, напротив каждого поля будет добавлен комментарий, обозначающий представление поля в метаданных конфигурации. 

5. После того как все объекты и их поля будут транслированы можно нажать на кнопку "Транслировать в SQL". Данная кнопка заменяет наиболее часто используемые операторы T-SQL из русского представления в английское, используемое в MS SQL.

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

Важно помнить что трансляция полей всегда происходит в пределах последнего переведенного объекта. Так же обработка не умеет переводить в формат SQL такие виртуальные таблицы как "СрезПоследних" или что-то подобное. 

Но тем не менее обработка поможет облегчить процесс написания прямых запросов к СУБД MS SQL.

 

P.S.

Данная обработка писалась для облегчения собственного труда и в план работ включена не была. Поэтому делал на скорую руку. Следовательно есть вещи которые можно было бы сделать лучше. А ещё на момент написания я не знал что в 1С можно использовать регулярные выражения, поэтому сейчас  написал бы её несколько иначе. Но времени на это нет. Но как бы там ни было, даже в таком виде как сейчас, она мне значительно облегчила работу. Буду рад если данная наработка кому-то хоть как-то поможет.

MS SQL Запрос

См. также

SALE! 20%

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 10400 руб.

02.09.2020    122159    670    389    

714

SALE! 25%

Infostart PrintWizard

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

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

18000 15300 руб.

06.10.2023    7293    21    6    

39

SALE! 20%

Infostart УДиФ: Управление данными и формами

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

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

10000 8000 руб.

10.11.2023    3537    11    1    

34

SALE! 30%

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

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

3600 2520 руб.

14.01.2013    177749    1073    0    

849

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99347    239    97    

296

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18113    6    8    

39

1С HTML Шаблоны / HTML Templates

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28110    3    10    

15

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

Инструментарий разработчика Обмен между базами 1C Платформа 1С v8.3 Платные (руб)

В процессе работы в 1С часто возникает потребность получить данные из другой базы.  Обычно это делается через COM-соединение, и время выполнения запроса при этом оставляет желать лучшего. В данной публикации представлено универсальное решение, позволяющее практически моментально выполнить произвольный код или запрос с параметрами в другой информационной базе через Web-сервис.

2400 руб.

24.09.2019    23602    15    15    

32
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Elisy 948 27.11.13 09:09 Сейчас в теме
Не совсем понятно, для чего вставляется запрос 1С?
Транслирование обеспечит автоматические перевод запроса 1С в T-SQL запрос или 1С-запрос нужен для наглядного выделения строки?
Обрабатываются как-нибудь объекты вида: РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(...) ?
5. ixilimuse 191 28.11.13 13:25 Сейчас в теме
(1) Elisy, 1C запрос нужен как раз для интерактивного перевода таблиц и полей в представление физического хранения на уровне СУБД. То есть не нужно ручками искать в структуре таблицу, и каждое поле в отдельности. Обработка позволяет в несколько кликов перевести из одного представления в другое.

ОстаткиИОбороты и другие подобные "Виртуальные таблицы" обработка не переведет. Для перевода таких запросов реально проще воспользоваться SQL Profiler. Чтобы скопировать готовый запрос, либо понять как он строится и написать свой.

(2) graphbuh, Действительно можно воспользоваться стандартными средствами для перехвата того запроса который формируется сервером приложений 1С. Но это лишь в тех случаях когда речь идет о простых выборках.

Мне же приходилось строить не просто выборки. Я в своих запросах очень активно использовал CTE, я своими запросами модифицировал данные с помощью DELETE & UPDATE, использовал циклы и условия на уровне СУБД. Так как приходилось не просто выгружать данные, а необходимо было производить полноценную обработку данных. Поэтому мне было удобно переводить запросы в интерактивном виде, и при этом что бы автоматом генерились комментарии - что это за поле в представлении 1С. Как показано на скрине.

И сразу для сомневающихся:
Циклы, условия и прочее в t-sql - не есть плохо, если использовать по назначению. Они были использованы как раз таки для оптимизации выполнения запроса в целом.

Так же на опережение критикующих напишу что ни одна запись в базе данных - не пострадала. Ни одной битой ссылки - не появилось. Механизм отлаживался и тестировался профессиональной командой. Клиентами были крупные добывающие и перерабатывающие компании с достаточно объемными базами. Ошибаться нам было - нельзя.

Но и необходимость прибегнуть к таким методам была специфична. У нас было не типовое решение, не стандартные задачи. Поэтому я не утверждаю что пользоваться прямыми запросами надо всегда. И более того надо учитывать - стоит ли такое решение, тех трудозатрат которые будут понесены. Как при разработке, так и при сопровождении и переработки.

p.s.
Если кому-то обработка чем-то поможет - буду рад =) Но это не единственный в своем роде способ облегчить работу с уровнем СУБД. А работа с уровнем СУБД вообще весьма специфичная и порой сомнительная фича. Кстати обработке сей примерно год. И примерно год она лежит без дела. Но мало ли, вдруг кому пригодится, решил выложить)

(3) DAnry, Спасибо)))
CratosX; EliasShy; SirYozha; Elisy; +4 Ответить
6. Elisy 948 28.11.13 15:27 Сейчас в теме
(5) Навскидку не скажете, как на уровне СУБД переводятся запросы вида:
ВЫБРАТЬ Номенклатура.ГруппаТоваров.Наименование КАК Наименование
(через JOIN?)

РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(...)
(через хранимые процедуры или через множество связанных SELECT?)
9. ixilimuse 191 28.11.13 16:50 Сейчас в теме
(6) Elisy, первый вопрос не совсем понял что имеется ввиду под:
ВЫБРАТЬ Номенклатура.ГруппаТоваров.Наименование КАК Наименование

Если речь о том что ГруппаТоваров - это ссылка на запись в другой таблице, и нужно из этой записи вытащить поле "Наименование", то можно это сделать через Join.
Так же можно воспользоваться вложенным запросом, что будет работать быстрее - надо замерять. Так как бывает по разному.

Возможно имеет смысл заранее перед основной выборкой сформировать временную таблицу, в которую вы вытащите лишь необходимые поля из таблицы "ГруппаТоваров". И если это возможно вытащите лишь тот набор записей который понадобится в основной выборке. А затем уже эту временную таблицу можно присоединять в основной выборке и из неё вытаскивать "наименование".
Индексировать временную таблицу или нет - надо так же замерить с индексацией и без. Бывает так что время требующиеся на построение индекса не перекрывается приростом скорости выборки.

А вот "ОстаткиИОбороты" наверное можно и так и так сделать. Я не помню как эту В.Т. формирует сервер приложений 1С. Думаю что для упрощения конечного запроса - имеет смысл создать View(представление), внутри которого вы реализуется множество связанных выборок, а в своем конечном запросе будете обращаться к представлению примерно как и в 1С.
Хранимку тоже можно сделать, для того что бы можно было ещё и параметры отбора туда передавать при выборке, будет совсем красота :) Но это навскидку )) Надо смотреть и ковырять)
10. German 413 29.11.13 00:41 Сейчас в теме
(5) ixilimuse,
Мне же приходилось строить не просто выборки.


Увы предложенный вариант cработает только для просто выборок, в 1С запросах множество конструкций которые не так просто транслируются в SQL
В ИЕРРАХИИ
В ГРУППЕ
ТипЗначения
yuraos; Elisy; +2 Ответить
11. Elisy 948 29.11.13 07:24 Сейчас в теме
(10) German,
А как 1С справляется с такими конструкциями? ТипЗначения, скорее всего, транслируется в значение из метаданных до запроса.
12. yuraos 991 02.12.13 12:34 Сейчас в теме
(10) German, ага !!!
и еще есть такая конструкция, как
CAST
не путать с одноименной конструкцией T-SQL!
---
Платформисты имели нагл... самоуверенность назвать
эту функцию по английски также,
хотя она практически ничего не умеет по настоящему преобразовывать.
13. yuraos 991 02.12.13 12:37 Сейчас в теме
(12)
но плюс за старания и идейную непримиримость
с врагами пролетариата!
:)
2. graphbuh 254 27.11.13 11:24 Сейчас в теме
Насколько я понял, самый простой способ генерации теста запроса в sql, написать его на 1С, выполнить и отловить текст запроса в аналайзере. Почему автор не пошел этим путем?
alexbit; Артано; yuraos; Evgen.Ponomarenko; zqzq; German; gubanoff; +7 Ответить
7. Elisy 948 28.11.13 15:29 Сейчас в теме
(2) Самый простой способ в C# - через LINQ-выражения. С профайлером связываться не нужно и работа ведется с человеческими названиями свойств. Поддерживается также изменение данных.
http://www.linq-demo.1csoftware.com/
DrAku1a; ixilimuse; +2 Ответить
14. tormozit 7136 02.12.13 20:23 Сейчас в теме
(2) Да. Это довольно просто сделать с помощью ИР.
15. Артано 760 04.12.13 05:00 Сейчас в теме
(2) Согласен, но в сложном запросе бывает нелегко с налету разобраться что за переменные или подзапросы, сервер 1С и оптимизатор SQL порою выкидывает такие штуки, что без бутылки не разберешься )

В целом автору плюс за идею. Преимущество вижу в комментировании полей SQL таблиц их представлением в 1С
3. DAnry 8 27.11.13 18:53 Сейчас в теме
Полезная обработка для програмистов 1С-ников, которые не профи в SQL. Плюсую.
4. soap 65 28.11.13 09:54 Сейчас в теме
Хорошая идея попробую
8. comol 5051 28.11.13 15:42 Сейчас в теме
по-моему "универсальный переводчик" с запросов 1С в SQL давно уже есть... называют его "Платформа 1С:Предприятие" вроде ну или как то так :)
А для тех кто не любит заглядывать в профайлер и вообще "любителей чистого искусства" есть 1С:ЦУП...
Ну и в конце концов есть обработка получения структуры хранения... поэтому для чего сей продукт не понятно...
Irwin; Groylov; anton.fly7; +3 Ответить
Оставьте свое сообщение