Функциональность минимальная, не умеет работать с временными таблицами и вложенными запросами, но даже в таком виде может оказать существенную пользу.
Протестировано на платформе 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 Тогда
Алиас = Алиас + Врм;
Иначе
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат Алиас;
КонецФункции