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

26.11.13

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Обработка перевода запросов в T-SQL
.epf 29,11Kb ver:5
213
213 Скачать (1 SM) Купить за 1 850 руб.

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

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

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

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

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

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

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

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

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

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

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

 

P.S.

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

MS SQL Запрос

См. также

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

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

12000 руб.

02.09.2020    172052    964    403    

924

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

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    14534    109    46    

108

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

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

22200 руб.

06.10.2023    17343    43    15    

75

Инструментарий разработчика Программист Платформа 1С v8.3 1C:Бухгалтерия Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    27362    96    48    

138

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

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

15000 руб.

10.11.2023    11954    45    33    

67

SALE! %

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

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

4800 3840 руб.

14.01.2013    191339    1153    0    

920

Инструментарий разработчика Программист 8.3.14 Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

20000 руб.

07.10.2021    18112    7    32    

42

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

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    1152    2    0    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Elisy 951 27.11.13 09:09 Сейчас в теме
Не совсем понятно, для чего вставляется запрос 1С?
Транслирование обеспечит автоматические перевод запроса 1С в T-SQL запрос или 1С-запрос нужен для наглядного выделения строки?
Обрабатываются как-нибудь объекты вида: РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(...) ?
5. ixilimuse 193 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 951 28.11.13 15:27 Сейчас в теме
(5) Навскидку не скажете, как на уровне СУБД переводятся запросы вида:
ВЫБРАТЬ Номенклатура.ГруппаТоваров.Наименование КАК Наименование
(через JOIN?)

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

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