Перевод текста запроса SQL в запрос 1С

16.10.23

База данных - Инструменты администратора БД

Обработка предназначена для перевода запросов извлечённых из SQL в язык запросов 1С. Работает как в управляемых, так и в обычных формах.

Скачать файл

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

Наименование По подписке [?] Купить один файл
Перевод текста запроса SQL в запрос 1С:
.epf 10,64Kb
41
41 Скачать (1 SM) Купить за 1 850 руб.

 

Функциональность минимальная, не умеет работать с временными таблицами и вложенными запросами, но даже в таком виде может оказать существенную пользу.

Протестировано на платформе 8.3.18.1289.

Ниже основной текст программы:

Функция ПереведённыйЗапрос() Экспорт
	
	Если ЗначениеЗаполнено(ЗапросSQL) Тогда
		SQL = СокрЛП(ЗапросSQL);
		SQL = СтрЗаменить(SQL, "[", "");
		SQL = СтрЗаменить(SQL, "]", "");
	Иначе
		Возврат "";
	КонецЕсли;
	
	СтруктурБД = ПолучитьСтруктуруХраненияБазыДанных(,Истина);
	
	СоответствиеИмёнТаблиц = Новый ТаблицаЗначений;
	СоответствиеИмёнТаблиц.Колонки.Добавить("ИмяSQL", Новый ОписаниеТипов("Строка"));
	СоответствиеИмёнТаблиц.Колонки.Добавить("Имя1С", Новый ОписаниеТипов("Строка"));
	СоответствиеИмёнТаблиц.Колонки.Добавить("Алиас", Новый ОписаниеТипов("Строка"));
	СоответствиеИмёнТаблиц.Колонки.Добавить("Поля");
	
	Рез = SQL;
	Сч = Найти(Рез, "dbo.");
	
	Пока Сч > 0 Цикл
		
		Остаток = Сред(Рез, Сч+4);
		Алиас = "";
		
		Сч = Найти(Остаток, " ");
		
		Если Сч > 0 Тогда
			ИмяТаблицыSQL = СокрЛП(Лев(Остаток, Сч));
			Алиас = АлиасТаблицыSQL(ИмяТаблицыSQL, Остаток, Сч);
		Иначе
			ИмяТаблицыSQL = СокрЛП(Остаток);
		КонецЕсли;
		
		НовСтр = СоответствиеИмёнТаблиц.Добавить();
		НовСтр.ИмяSQL = "dbo." + ИмяТаблицыSQL;
		
		СтрокаСтруктурыБД = СтруктурБД.НайтиСтроки(Новый Структура("ИмяТаблицыХранения", ИмяТаблицыSQL));
		Если СтрокаСтруктурыБД.Количество() = 1 Тогда
			НовСтр.Имя1С = СтрокаСтруктурыБД[0].ИмяТаблицы;
			НовСтр.Поля = СтрокаСтруктурыБД[0].Поля;
		Иначе
			НовСтр.Имя1С = ИмяТаблицыSQL;
		КонецЕсли;
		
		НовСтр.Алиас = Алиас;
		
		Если ЗначениеЗаполнено(Алиас) Тогда
			Рез = СтрЗаменить(Рез, НовСтр.ИмяSQL + " " + Алиас, НовСтр.Имя1С + " как " + Алиас);
		Иначе
			Рез = СтрЗаменить(Рез, НовСтр.ИмяSQL, НовСтр.Имя1С);
		КонецЕсли;
		
		Сч = Найти(Рез, "dbo.");
		
	КонецЦикла;
	
	Для Каждого Строка Из СоответствиеИмёнТаблиц Цикл
		
		Если ТипЗнч(Строка.Поля) = Тип("ТаблицаЗначений") Тогда
			
			Для Каждого СтрПоле Из Строка.Поля Цикл
				
				Если ЗначениеЗаполнено(Строка.Алиас) Тогда
					ИмяПоляХранения = Строка.Алиас + "." + СтрПоле.ИмяПоляХранения;
					ИмяПоля1С = Строка.Алиас + "." + СтрПоле.ИмяПоля;
				Иначе
					ИмяПоляХранения = СтрПоле.ИмяПоляХранения;
					ИмяПоля1С = СтрПоле.ИмяПоля;
				КонецЕсли;
				
				Рез = СтрЗаменить(Рез, ИмяПоляХранения, ИмяПоля1С);
				
			КонецЦикла;
			
		КонецЕсли;
		
	КонецЦикла;
	
	Рез = СтрЗаменить(Рез, "LEFT OUTER JOIN", "LEFT JOIN");
	Рез = СтрЗаменить(Рез, "OPTION (FAST 1)", "");
	Рез = СтрЗаменить(Рез, "@", "&");
	
	Возврат Рез;

КонецФункции

Функция АлиасТаблицыSQL(ИмяТаблицыSQL, ОстатокЗапроса, Сч)
	
	Кон = СтрДлина(ОстатокЗапроса);
	Нач = Сч+1;
	Алиас = "";
	
	Для Инд = Нач По Кон Цикл
		
		Врм = Сред(ОстатокЗапроса, Инд, 1);
		
		Если Инд = Нач Тогда
			
			Если Врм = "T" Тогда
				Алиас = "T";
			Иначе
				Прервать;
			КонецЕсли;
			
		Иначе
			
			Если Найти("0123456789", Врм) > 0 Тогда
				Алиас = Алиас + Врм;
			Иначе
				Прервать;
			КонецЕсли;
			
		КонецЕсли;
		
	КонецЦикла;
	
	Возврат Алиас;
	
КонецФункции

 

SQL

См. также

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

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

8400 руб.

20.08.2024    14305    109    46    

108

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

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

15000 руб.

10.11.2023    11898    45    27    

67

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

Роли… Вы тратите много времени и сил на подбор ролей среди около 2400 в ERP или 1500 в Рознице 2, пытаясь понять какими правами они обладают? Вы все время смотрите права в конфигураторе или отчетах чтоб создать нормальные профили доступа? Вы хотите наглядно видеть какие права дает профиль и редактировать все в простом виде? А может хотите просто указать подсистему и дать права на просмотр и добавление на объекты и не лезть в дебри прав и чтоб обработка сама подобрала нужные роли? Все это теперь стало возможно! Обновление от 18.09.2024, версия 1.2

18000 руб.

06.12.2023    10662    47    8    

78

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

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

4800 руб.

14.01.2013    191180    1152    0    

920

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

Расширение «Оперативное проведение» в 4 раза уменьшает время проведения документов и закрытия месяца. Является комплексным решением проблем 62 и 60 счетов. Оптимизирует проведение при включенной функциональной опции «Раздельный учет НДС». Используется в более 10 организациях уже 2 года. Совместимо с конфигурацией Бухгалтерия 3.0 (+КОРП).

14400 руб.

29.04.2020    33826    108    152    

75

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

Брандмауэр для сервера 1С включает в себя управление возможностью начала и возобновления сеансов пользователей по различным условиям, ограничение общего числа возможных сеансов для работы с информационной базой, резервирование возможности работы с информационной базой определенных польззователей, запрет запуска нескольких сеансов для пользователя, журнализация событий начала (возобновления) и завершения (гибернации) сеансов, ведение списка активных сеансов для информационных баз кластера серверов

3600 руб.

06.02.2017    32617    145    18    

51

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

Данная разработка позволит решить вопрос с резервным копированием Ваших баз в автоматическом режиме, расположенных на сервере 1С. Система умеет ставить блокировки на вход, блокировать фоновые задания, принудительно отключать сеансы пользователей. И все это система делает в автоматически при создании бэкапа (или через команду). Выгрузка происходит в родной формат 1С - .dt. Так же система умеет архивировать данные выгрузки с установкой пароля. Умеет менять расширение файла zip или dt на любое указанное вами, что позволит сохранить выгрузки от шифровальщика. Может удалять старые копии выгрузок, оставляя указанное количество резервных копий, начиная с самой поздней. Только для WINDOWS!

6000 руб.

06.11.2012    73737    629    45    

88

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

Многие сталкиваются с проблемой когда изображения, находящиеся в базе разные по объему и размерам. Менеджеры могут добавить файлы в очень высоком разрешении, объемом свыше 20 Мегабайт. База данных становится слишком большой, выгрузка на сайт идёт медленно и требуется много место на хостинге. Как сжать картинки и уменьшить размер базы 1С? Это можно сделать с помощью данной обработки. Существует возможность выбрать различные варианты для того чтобы уменьшить картинки: в разы, в процентах от первоначального объема, а также сделать картинки одинаковой ширины. В результате размер базы 1С значительно сократится (в зависимости от количества и размера картинок), а изображения станут небольшого объема, равными по ширине, почти без потери качества. Работает на управляемых формах для УТ 11, КА, ERP.

3000 руб.

21.07.2022    10163    10    4    

18
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. гаврюша 3 16.10.23 18:56 Сейчас в теме
А обратного перевода нет (1С в SQL)?
svbel85; seperblunt2; +2 Ответить
3. sapervodichka 6937 17.10.23 11:02 Сейчас в теме
(1) вот держи
Прикрепленные файлы:
ТрансляторЗапросовИз1СвSQL.epf
crazycat; DrAku1a; cleaner_it; webester; maksa2005; гаврюша; acces969; Andreyyy; svbel85; +9 Ответить
5. acces969 366 18.10.23 12:06 Сейчас в теме
(3) Отлично, спасибо. Нужные и удобные инструменты для работы.
2. SerVer1C 863 17.10.23 09:22 Сейчас в теме
Такие конвертеры надо делать с построением абстрактного синтаксического дерева. Чтобы можно было переводить любые запросы.
4. maksa2005 554 18.10.23 06:59 Сейчас в теме
Автор молодец. Спасибо. посмотрел.
Есть конечно особенности из SQL как:
0xAF591CC1DEE6F33211EB8648D9B1DF84

Это реквизит
Прикрепленные файлы:
6. user1647484 9 18.10.23 16:07 Сейчас в теме
сопоставление лучше делать в макете таблицей. очень удобно.
7. kembrik 10 19.10.23 10:35 Сейчас в теме
За стартмани так же обработка, я так понимаю что в тексте статьи? Получается MS SQL only, на PostgreSQL не взлетит судя по dbo? Укажите пожалуйста в требованиях
9. Дмитрий74Чел 239 23.10.23 12:35 Сейчас в теме
8. alex_sayan 54 19.10.23 18:23 Сейчас в теме
Для понятности псевдонимы таблиц тоже стоит преобразовать. Все эти Т1, Т2... превращаются в неразборчивое месиво. К т-шкам прилепить имя обьекта, и уже станет гораздо нагляднее

Т7 -> ПользователиТ7
Т8 -> ФизическиеЛицаТ8
AlexSTAL; ong1990; altu71; cleaner_it; +4 Ответить
10. onesec 13.06.24 07:25 Сейчас в теме
Для PostgreSQL бесполезная!
Оставьте свое сообщение