Обработка SQLPlus предназначена для выполнения прямых запросов и команд к внешней базе данных.
Характеристики:
— Автоматическое преобразование имен прикладных объектов конфигурации в соответствующие имена структуры серверной базы данных.
— Возможность написания скрипта на русском языке с последующей транслитерацией к формату синтаксиса T-SQL.
— Вывод данных в таблицу значений с подстановкой русских наименований полей.
— Возможность вывода данных в объект типа Recordset.
— Использование параметров в SQL скрипте .
— Встроенная консоль запросов с возможностью замера времени исполнения скриптов.
— Поддержка серверных транзакций.
— Возможность подключения и работы с несколькими источниками данных.
— Выбор варианта вывода ссылок в таблице значений (ссылка, guid, массив).
— Просмотр структуры хранения данных.
Требования:
1С:Предприятие 8.1
MS SQL Server
Последняя версия 1.6
Новая версия смотри: //infostart.ru/public/167865/
Обновил версию до 1.1
Добавил просмотр объектов конфигурации.
Исправил найденные ошибки и сделал др. доработки.
Обновил версию до 1.2
Добавил:
1.IntelleSense.
2.Шаблоны.
3.Исправил найденные ошибки.
а как добыть незакрытый паролем модуль ?
Пока программа находится в активной стадии разработки,
считаю преждевременным открывать исходный код.
Обновил версию до 1.3
+Оптимизировал парсинг скрипта
+Оптимизировал загрузку в таб.значений
+Замер скорости до сотых секунд
+ за обновление
спасибо за модуль всё-таки очень охота взглянуть на исходный код , я бы думаю помог дополнить по строителем SQL — скрипта для PostgreSQL если интересно напишите (вышлите ) dzadzen@gmail.com
При попытке запуска выдала такие вот ошибки:
{Обработка.SQLPlus}: Слишком много фактических параметров (ПолучитьСтруктуруХраненияБазыДанных)
{Обработка.SQLPlus}: Процедура или функция с указанным именем не определена (ПолучитьСтруктуруХраненияБазыДанных)
1С:Предприятие 8.1 (8.1.7.37) + MSSQL 2005
(8)Не может быть.Функция «ПолучитьСтруктуруХраненияБазыДанных» это системная функция платформы.У меня работает версия 1С 8.1.8.76
Обновил версию до 1.4
+Добавил просмотр имен объектов конфигурации в терминах СУБД.
При переходе на закладку Конфигурация выдается сообщение «Конфигурация не найдена».
Сможете помочь?
(11) Это сообщение выдается если не было подключения к базе данных.
(11) Обновил версию до 1.5.
Исправил найденные ошибки.
При преобразовании запроса 1С в T-SQL пишет {ВнешняяОбработка.SQLPlus(1465)}: Метод объекта не обнаружен (УникальныйИдентификатор)
(14) Ошибка на тип параметра, а какого он у вас типа? И как выглядит весь запрос?
Вот весь запрос:
ВЫБРАТЬ
Задача.БизнесПроцесс.Номер КАК Номер,
Задача.БизнесПроцесс.Дата КАК Дата,
Задача.БизнесПроцесс.Инициатор.Наименование КАК Инициатор,
Задача.БизнесПроцесс.Исполнитель.Наименование КАК Исполнитель,
Задача.БизнесПроцесс.Исполнитель.КодTFlex КАК ИсполнительКодTFlex,
Задача.БизнесПроцесс.КлассификаторОшибки.Родитель.Код КАК ОбъектОшибкиКод,
Задача.БизнесПроцесс.КлассификаторОшибки.Родитель.Наименование КАК ОбъектОшибкиНаименование,
Задача.БизнесПроцесс.КлассификаторОшибки.Код КАК КлассификаторОшибкиКод,
Задача.БизнесПроцесс.КлассификаторОшибки.Наименование КАК КлассификаторОшибкиНаименование,
Задача.БизнесПроцесс.КомментарииИнициатора КАК КомментарииИнициатора,
Задача.БизнесПроцесс.Примечание КАК Примечание,
Задача.БизнесПроцесс.Изделие.НомерЧертежа КАК ИзделиеНомерЧертежа,
Задача.БизнесПроцесс.Изделие.Наименование КАК ИзделиеНаименование,
Задача.БизнесПроцесс.Номенклатура.НомерЧертежа КАК НоменклатураНомерЧертежа,
Задача.БизнесПроцесс.Номенклатура.Наименование КАК НоменклатураНаименование,
Задача.БизнесПроцесс.Материал.Наименование КАК МатериалНаименование,
Задача.БизнесПроцесс.Материал.КодTFlex_ОМ КАК МатериалКодTFlex_ОМ,
Задача.БизнесПроцесс.Материал.КодTFlex_ВМ КАК МатериалКодTFlex_ВМ,
Задача.БизнесПроцесс.Тех_операция КАК Тех_операция,
Задача.БизнесПроцесс.Оборудование.Код КАК ОборудованиеКод,
Задача.БизнесПроцесс.Оборудование.Наименование КАК ОборудованиеНаименование,
Задача.БизнесПроцесс.Подразделение.Код КАК ПодразделениеКод,
Задача.БизнесПроцесс.Подразделение.Наименование КАК ПодразделениеНаименование,
Задача.БизнесПроцесс.Идентификатор КАК ИдентификаторТехпроцесса,
Задача.БизнесПроцесс.Идентификатор.KodTFlex_DocId КАК KodTFlex_DocIdТехпроцесса
ИЗ
Задача.Задача КАК Задача
ГДЕ
Задача.Выполнена = ЛОЖЬ
И Задача.ТочкаМаршрута.Ссылка = &ТочкаМаршрута
УПОРЯДОЧИТЬ ПО
Номер
При преобразование в T-SQL вылетает системное сообщение:
Объект конфигурации не найден:<БизнесПроцесс.Номер>
Потом вылетает модальное окно с сообщением: {ВнешняяОбработка.SQLPlus(1465)}: Метод объекта не обнаружен (УникальныйИдентификатор)
С системным сообщением разобрался Объект конфигурации не найден:<БизнесПроцесс.Номер> — перезаписал запрос и исправил параметры запроса.
Но ошибка с Уникальным идентификатором осталась.
(17) Текущая версия не поддерживает тип параметра «ТочкаМаршрута».
В дальнейшем предвидится поддержка этого типа?
(19) В ближайшее время не обещаю, не сталкивался пока с бизнес-процессами.
Убрал пароль с модуля.
Уточнить: «В ИЕРАРХИИ» также не поддерживается преобразование в T-SQL ?
Я прав?
(22) Да.
Обновил до версии 1.6
Исправил найденные ошибки.
хотел раскраской кода воспользоваться…
Если Поле.ИмяПоляХранения = «ID» ИЛИ Поле.ИмяПоляХранения = «ParentID» ИЛИ Поле.ИмяПоляХранения = «OwnerID» ИЛИ Поле.ИмяПоляХранения = «Recorder» ИЛИ Поле.ИмяПоляХранения = «AccountDt» ИЛИ Поле.ИмяПоляХранения = «AccountCt» ИЛИ Поле.ИмяПоляХранения = «Document» ИЛИ Поле.ИмяПоляХранения = «DimKind» ИЛИ ПолучитьСсылочныйРеквизит(Поле.Метаданные,Ложь).Количество() > 0 Тогда
НовСтрПоля.ИмяПоляХранения = Поле.ИмяПоляХранения+»RRef»;
Иначе
НовСтрПоля.ИмяПоляХранения = Поле.ИмяПоляХранения;
КонецЕсли;
Можно при помощи этого средства выполнить TRUNCATE TABLE?
(27) да
(28) Ок. Скачал.
Пошагово делаю так:
1. Запускаю как внешнюю обработку.
2. Проверяю строку соедининения (на вкладке настройка). Соединение с источником данных установлено
3. На вкладке Конфигурация вижу объекты метаданных
4. На вкладке SQL+ пишу запрос
TRUNCATE TABLE [dbo].[_Reference24931_VT24940]
TRUNCATE TABLE [dbo].[_Reference24931]
5. Жму кнопку F5.
6. Проверяю справочник — пустой. Сработало!!!
СПАСИБО!!!
❓ Объект конфигурации не найден:<РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто>
(30) Виртуальные таблицы не поддерживаются.
А жаль, в профайлере они выглядят как #tt1 #tt2 b т.д. почему бы не перенять их создание из консоли запросов?
Пишу запрос:
«UPDATE РегистрСведений.ДоступКСправочникам
SET РегистрСведений.ДоступКСправочникам.Объект=&НовоеЗначение
WHERE РегистрСведений.ДоступКСправочникам.Объект=&СтароеЗначение ;»
Обработка переводит:
» UPDATE _InfoReg5578
SET _InfoReg5578 = &NovoeZnachjenie
WHERE _InfoReg5578 = &StaroeZnachjenie ;»
Видимо, не смогла отработать третью часть имени поля «РегистрСведений.ДоступКСправочникам.Объект»
Пишу запрос:
»
UPDATE РегистрСведений.ДоступКСправочникам AS _Table1
SET _Table1.Объект=&НовоеЗначение
WHERE _Table1.Объект=&СтароеЗначение ;
»
Переводит на T-SQL:
»
UPDATE _InfoReg5578 AS _Table1
SET _Table1.Objjekt = &NovoeZnachjenie
WHERE _Table1.Objjekt = &StaroeZnachjenie ;
»
По тексту запроса видно, что поле «Объект» таблицы «РегистрСведений.ДоступКСправочникам» обработка не смогла найти.
Понятно, что что-то путаю с орфографией. А что конкретно путаю- непонятно.
(33) Объект там м.б. разных типов
(34) И? Мне нужно выбрать записи содержащие в колонке конкретное значение и заменить другим, тоже конкретным, значением. И как это сделать? 🙁
Работоспособный запрос на T-SQL выглядит так:
» Update _InfoReg5578
Set _Fld5581_RRRef = 0x00000000000000000000000000000000
Where _Fld5581_RRRef = 0x9e3b00151774a22d11dfb4c28ee2dd95″
Никак не могу вкурить, какой текст надо написать на SQLPlus, чтобы он транслировался в тот, что написан выше на T-SQL. 🙁
Подключение к удаленной базе произошло успешно. Пробую «Select * From Sysobjects» — в результате ругается «Индекс находится за границами массива (1111)». Что ж делаю не так то?
(31) Честно говоря, не понимаю тогда, зачем может пригодиться обработка кроме как в качестве примера получения имен таблиц и полей.
Первое, что потребовалось получить извне — это остатки. А для этого требуется обращение к ВТ.
Также пришлось дорабатывать обработку для поддержки PostgreSQL … и пока не нашел способа получить имя БД — пока руками вписываю.
(36) 😀 Ответ никак…Узнавайте ID сессии(где-то на мисте проскакивала тема), и через DBCC узнавайте последний исполненный запрос. Полного же конвертирования запросов 1С в T-SQL, без исполнения 1С запросов, я не знаю.
ЗЫ В данной обработке, я так полагаю, идет простая замена подобных выражений «ВЫБРАТЬ»=»SELECT».
ЗЫ 1С является прослойкой над БД, т.е. у них своя логика запросов, честно говоря не понимаю, как можно честно сконвертировать 1С запрос в sql не зная эту логику, не имея исходников. Можно правда предполагать как работает 1С.
Уникальность 1С в действии, ура
Использовал обработку для получения имен таблиц и полей — очень удобно. Спасибо
Интересная обработка. Недавно прочитал в Вопросах по лицензированию на сайте 1С:
Лицензионное соглашение не позволяет использовать недокументированные фирмой «1С» средства для построения решений на платформе 1С:Предприятие. Это означает, что средства СУБД (или любые другие внесистемные средства) можно использовать только в том случае, если документация по продуктам линейки «1С:Предприятие» (включая ИТС) содержит явную рекомендацию использовать данное средство для решения данной задачи.
Во всех остальных случаях лицензионное соглашение позволяет использовать для построения решений только штатные средства платформы. В частности, можно обращаться к данным информационной базы только при помощи объектов «1С:Предприятия», специально предназначенных для работы с данными (запросы, справочники, документы и т.д.). Нельзя обращаться к данным информационной базы напрямую, минуя уровень объектов работы с данными «1С:Предприятия» — например при помощи средств СУБД или при помощи внешних компонент, которые реализуют прямой доступ к СУБД. Это ограничение распространяется на любые действия с данными, в том числе на изменение их структуры, а так же на чтение или изменение самих данных информационной базы или служебных данных «1С:Предприятия».
Поучается нельзя напрямую обращаться к SQL.
Пишу запрос:
«UPDATE РегистрСведений.ДоступКСправочникам
SET РегистрСведений.ДоступКСправочникам.Объект=&НовоеЗначение
WHERE РегистрСведений.ДоступКСправочникам.Объект=&СтароеЗначение ;»
Обработка переводит:
» UPDATE _InfoReg5578
SET _InfoReg5578 = &NovoeZnachjenie
WHERE _InfoReg5578 = &StaroeZnachjenie ;»
Видимо, не смогла отработать третью часть имени поля «РегистрСведений.ДоступКСправочникам.Объект»
Пишу запрос:
»
UPDATE РегистрСведений.ДоступКСправочникам AS _Table1
SET _Table1.Объект=&НовоеЗначение
WHERE _Table1.Объект=&СтароеЗначение ;
»
Переводит на T-SQL:
»
UPDATE _InfoReg5578 AS _Table1
SET _Table1.Objjekt = &NovoeZnachjenie
WHERE _Table1.Objjekt = &StaroeZnachjenie ;
»
По тексту запроса видно, что поле «Объект» таблицы «РегистрСведений.ДоступКСправочникам» обработка не смогла найти.
Понятно, что что-то путаю с орфографией. А что конкретно путаю- непонятно.
(42) al2ko, С точки зрения 1с конечно нельзя, а с точки зрения нас «несчастных пользователей» просто надо.
Очень качественный модуль, облегчающий написание прямых sql запросов. после долгих поисков наткнулся на данную обработку — очень доволен. Огромное спасибо авторам за проделанную работу.
интересненько.. будем пробовать, при конвертации на 8.2 проблем же не возникнет?
автору благодарности x]
Запрос с точками обрабатывается «как-то не так»
Например,
ВЫБРАТЬ
Банки.Ссылка,
Банки.Родитель.Город
ИЗ
Справочник.Банки КАК Банки
превращается
Select
Banki._IDRRef ,
Banki.Roditelyy.Gorod
From
_Reference20 As Banki
Ожидалось увидеть левые соединения )))
(47) Все дополнительные навороты 1С над SQL не обрабатываются, т.е. разименование составных имен, виртуальные таблицы, иерархия, итоги, поля составных типов.
(48) Эх.. жаль )
Сейчас все просто отлично
А были бы разыменования составных имен — было бы просто волшебно )))
Спасибо, работа отличная