Связи Метаданных. Построитель SQL запросов


Для написания SQL запросов часто требуется знать взаимосвязи объектов Метаданных. Данная обработка помогает решить проблему написания SQL запросов с учетом взаимосвязей объектов Метаданных.

Данная обработка строит таблицу взаимосвязей в терминах SQL следующих объектов Метаданных:

- Справочники (Реквизиты, ТабличныеЧасти, Владельцы)

- Документы (Реквизиты, ТабличныеЧасти)

- РегистрыНакопления (Измерения, Реквизиты, Ресурсы)

- РегистрыСведений (Измерения, Реквизиты, Ресурсы)

- РегистрыБухгалтерии (Измерения, Реквизиты, Ресурсы)

- РегистрыРасчета (Измерения, Реквизиты, Ресурсы)

- ЖурналыДокументов (РегистрируемыеДокументы,Графы)

- Задачи (Реквизиты, ТабличныеЧасти)

- БизнесПроцессы (Реквизиты, ТабличныеЧасти, ВедущаяЗадача)

Обработка позволяет:

- визуально строить SQL запросы. Построитель может перетаскиванием вставлять в запрос имена таблиц и входящие в нее столбцы, просто столбцы, взаимосвязи таблиц. По возможности вставляются описания имен таблиц и колонок в терминах 1С.

- выполнять запросы и копировать в Excel результаты. Копируется текстовое представление значения ячеек.

- копировать в Excel таблицу взаимосвязей SQL таблиц

Соединение с БД происходит с использованием OLEDB провайдера. Если у вас есть проблемы с соединением с БД, то используйте собственную строку соединения. При удачном соединении параметры соединения сохраняются в файле ConnectСвязиМетаданныхПостроительЗапросаSQL.xml, который используется при последующем запуске обработки. Строка соединения по умолчанию тестировалась на MS SQL Server 2005.

Для определения формы вывода колонок табличного поля результата служит поле выбора подставлять заголовки. Режим "Определять тип колонок" соотвествует выводу заголовка колонки в виде "ИмяТаблицы_ИмяКолонки", по которому будет определен тип колонки, в режиме "Брать из метаданных" заголовки колонок соответствуют именам реквизитов таблиц, в режиме "Брать из метаданных все " - заголовки колонок соответствуют именам реквизитов таблиц, а синонимы таблиц будут соответстовать именам таблиц 1С, в режиме "Оставлять как есть" в качестве заголовков колонок отображаются имена полей. Построитель позволяет выводить результаты сразу нескольких Select'ов.

Для совместной работы с текстовыми редакторами (например, с EditPlus) добавлено поле "Автообновление текста запроса".

Для серверов MS SQL добавлена возможность просмотра плана запроса - флаг "План".

При наличие справочника "СправочникСвязиМетаданных" со следующей структурой:

ПервичнаяТаблицаПолноеИмя                           СТРОКА(255)
ПервичнаяТаблицаИмяТаблицыХранения         СТРОКА(128)
ПервичнаяТаблица                                             СТРОКА(255)
КолонкаПервичнойТаблицы                               СТРОКА(128)
КолонкаПервичнойТаблицыИмяПоляХранения  СТРОКА(128)
СвязаннаяТаблицаПолноеИмя                            СТРОКА(255)
СвязаннаяТаблицаИмяТаблицыХранения          СТРОКА(128)
СвязаннаяТаблица                                              СТРОКА(255)
КолонкаСвязаннойТаблицы                                СТРОКА(128)
КолонкаСвязаннойТаблицыИмяПоляХранения   СТРОКА(128)
ТипСвязи                                                              СТРОКА(64)

Все поля индексированы и переменной длины. Программа заполняет данный справочник и обращается уже к нему (сокращая тем самым время загрузки - время загрузки ВО для УПП редакции 1.2 составляет 2 мин). Для обновления его - нажмите пункт меню  "Обновить информацию о Метаданных".

Пример строки соединения с БД PostgreSQL:

Provider=PostgreSQL OLE DB Provider;Data Source=HOME;location=DB_1C_82;User ID=postgres;password=*****;

или лучше через ODBC DSN:

DSN=PostgreSQL35W;DRIVER=PostgreSQL;DATABASE=DB_1C_81;Servername=HOME;UID=postgres;PWD=*****;

Для отображения ссылок вы можете использовать следующую функцию преобразования Binary колонок в Hex строки (Transact SQL):

create function dbo.sp_hexadecimal ( @binvalue varbinary(255) )
returns nvarchar(255)
as
begin
  declare
    @charvalue nvarchar(255)
    ,@i int
    ,@length int
    ,@hexstring nchar(16)
    ,@tempint int
    ,@firstint int
    ,@secondint int

  select @charvalue = '0x'
  select @i = 1
  select @length = datalength(@binvalue)
--  select @hexstring = '0123456789abcdef'
  select @hexstring = '0123456789ABCDEF'

  while (@i <= @length) begin
    select @tempint = convert(int, substring(@binvalue,@i,1))
    select @firstint = floor(@tempint/16)
    select @secondint = @tempint - (@firstint*16)
    select @charvalue = @charvalue + substring(@hexstring, @firstint+1, 1) + substring(@hexstring, @secondint+1, 1)
    select @i = @i + 1
  end

  return ( @charvalue )
end
go

grant execute on dbo.sp_hexadecimal to public
go

Для получения ссылки по строковому представлению Ссылки можете использовать функцию

ПолучитьСсылкуПоID(ID)

 

Файлы обработки:

-