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

11.12.10

Разработка - Математика и алгоритмы

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

Скачать файлы

Наименование Файл Версия Размер
Связи Метаданных. Построитель SQL запросов
.epf 31,04Kb
474
.epf 31,04Kb 474 Скачать
Transact-SQL Reference (MS SQL). CHM формат
.zip 2,07Mb
59
.zip 2,07Mb 59 Скачать
Postgre SQL Reference (Postgre SQL). CHM формат
.chm 2,94Mb
39
.chm 2,94Mb 39 Скачать

Данная обработка строит таблицу взаимосвязей в терминах 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)

 

См. также

Метод Дугласа-Пойкера для эффективного хранения метрик

Математика и алгоритмы Платформа 1C v8.2 Конфигурации 1cv8 Россия Абонемент ($m)

На написание данной работы меня вдохновила работа @glassman «Переход на ClickHouse для анализа метрик». Автор анализирует большой объем данных, много миллионов строк, и убедительно доказывает, что ClickHouse справляется лучше PostgreSQL. Я же покажу как можно сократить объем данных в 49.9 раз при этом: 1. Сохранить значения локальных экстремумов 2. Отклонения от реальных значений имеют наперед заданную допустимую погрешность.

1 стартмани

30.01.2024    1753    stopa85    12    

33

Алгоритм симплекс-метода для решения задачи раскроя

Математика и алгоритмы Бесплатно (free)

Разработка алгоритма, построенного на модели симплекс-метода, для нахождения оптимального раскроя.

19.10.2023    4415    user1959478    50    

34

Регулярные выражения на 1С

Математика и алгоритмы Инструментарий разработчика Платформа 1С v8.3 Мобильная платформа Россия Абонемент ($m)

Что ж... лучше поздно, чем никогда. Подсистема 1С для работы с регулярными выражениями: разбор выражения, проверка на соответствие шаблону, поиск вхождений в тексте.

1 стартмани

09.06.2023    7455    4    SpaceOfMyHead    17    

56

Модель распределения суммы по базе

Математика и алгоритмы Платформа 1С v8.3 Россия Абонемент ($m)

Обычно под распределением понимают определение сумм пропорционально коэффициентам. Предлагаю включить сюда также распределение по порядку (FIFO, LIFO) и повысить уровень размерности до 2-х. 1-ое означает, что распределение может быть не только пропорциональным, но и по порядку, а 2-ое - это вариант реализации матричного распределения: по строкам и столбцам. Возможно вас заинтересует также необычное решение этой задачи через создание DSL на базе реализации текучего интерфейса

1 стартмани

21.03.2022    7854    7    kalyaka    11    

44

Изменения формата файлов конфигурации (CF) в 8.3.16

Математика и алгоритмы Платформа 1С v8.3 Бесплатно (free)

Дополнение по формату файлов конфигурации (*.cf) в версии 8.3.16.

16.12.2021    4444    fishca    13    

36

Интересная задача на Yandex cup 2021

Математика и алгоритмы Бесплатно (free)

Мое решение задачи на Yandex cup 2021 (frontend). Лабиринт. JavaScript.

12.10.2021    8832    John_d    73    

46

Механизм анализа данных. Кластеризация.

Математика и алгоритмы Анализ учета Платформа 1С v8.3 Анализ и прогнозирование Бесплатно (free)

Подробный разбор, с примером использования, встроенного механизма кластеризации 1С.

31.08.2021    7797    dusha0020    8    

70
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. German 413 22.11.10 09:58 Сейчас в теме
2. shishkin1966 99 22.11.10 13:08 Сейчас в теме
(1) а зачем он нужен ? Можно тащить результат из RecordSet во что угодно. Можно тащить в обычное табличное поле (я не стал этого делать, чтобы убрать преобразование типов RecordSet -> 1C). Кому нужны суррогатные ключи 1C ? Важны связи между таблицами, а не представление суррогатных ключей. Цель этой обработки - создание Query Analyzer для 1С. Когда работаешь с БД, важно не наличие каких-то сущностей, а их связи друг с другом.
3. German 413 22.11.10 13:10 Сейчас в теме
а как же параметры запросов :D
4. shishkin1966 99 22.11.10 13:20 Сейчас в теме
(3)
в Query Analyzer все параметры указываются ручками. Даже списки. А писать условие по типу Where ID = 2247623874356 или Where ID in (2463296,2452845) это дурной тон в разработке !!! (потому что прийдя через месяц никак не узнать почему ID = 348539 или 85674976) - таких примеров можно увидеть у Диасофта - там такого добра хватает. У нормальных разработчиков пишется (разве сложно написать ?)
T1 join T2 on t1.id = t2.id where t2.Фамилия in ("Шишкин","Пупкин","Фыфкин") или
T1 where T1.ID = (select max(ID) from T2 where Фамилия = "Шишкин")
5. shishkin1966 99 24.11.10 12:54 Сейчас в теме
доработан вызов ADO, для обработки таких запросов:

sp_executesql
N'with Номенклатура(Level,_Description, _ParentIDRRef) as
(Select
1 as Level
,_Reference4._Description
,_Reference4._IDRRef
From _Reference4
Where 1=1
and convert(int,_Reference4._ParentIDRRef) = 0
union all
Select
Level + 1
,_Reference4._Description
,_Reference4._IDRRef
From _Reference4
join Номенклатура on _Reference4._ParentIDRRef = Номенклатура._ParentIDRRef
)
select Level,_Description as ''Наименование'' from Номенклатура
'
6. Трактор 1246 24.11.10 13:30 Сейчас в теме
7. shishkin1966 99 24.11.10 13:52 Сейчас в теме
я могу еще под Oracle, только не знаю на какую версию он встанет. У меня есть 9.2/10.
Под Linux (PostGreSQL) ничего не писал. Даже Unux не ставил :cry:, а надо бы
8. shishkin1966 99 24.11.10 13:53 Сейчас в теме
9. shishkin1966 99 24.11.10 13:58 Сейчас в теме
а так он писан через вызов ADO, а там какой провайдер укажешь - к тому и зацепишься.
10. shishkin1966 99 24.11.10 17:04 Сейчас в теме
Дополнения:
- Расширил вывод информации о связи в тексте запроса
11. shishkin1966 99 30.11.10 10:48 Сейчас в теме
Дополнения:
- обработка задач
12. shishkin1966 99 30.11.10 17:08 Сейчас в теме
Дополнения:
- для серверов MS SQL добавлена возможность просмотра плана запроса
13. shishkin1966 99 01.12.10 16:00 Сейчас в теме
Дополнения:
- добавлена вставка по возможности синонимов 1С в текст запроса. Режим поля "Подставлять заголовки" = "Брать из Метаданных все"
14. zzz_natali 61 02.12.10 21:38 Сейчас в теме
При запуске обработки заполняется только левая часть формы "Текст запроса и результат". правая часть остается пустая. Где и чем помыть руки? Спасибки...
15. shishkin1966 99 02.12.10 23:37 Сейчас в теме
(14)
Данный построитель аналог программы Query Analyzer фирмы Microsoft для MS SQL 2000. Это главный инструмент разработчика запросов к БД от MS. Ваша задача построить запрос в текстовом виде. Для этого просто перетягиваете таблицы (колонки) из дерева таблиц на основное поле, или это же самое проделываете с деревом связей таблиц 1С. Построив запрос вы затем просто его выполняете - нажимая кнопку "Выполнить запрос" и анализируете полученный результат. Все просто и гениально. Если надо задать параметры - строите условие WHERE. Только среди разработчиков SQL считается дурным тоном строить вот такие условия
Select * from Table1 Where ID = 23424532523, что равносильно запросу 1с: Выбрать * ИЗ Номенклатура ГДЕ Номенклатура = &Номенклатура_Ссылка;

Для рисования запросов можете использовать любимый программерский редактор - у меня это EditPlus. Он удобный, шустрый и подсвечивает красиво.

Или вам нужен визуальный построитель?
16. zzz_natali 61 03.12.10 08:35 Сейчас в теме
(15) Гениально было бы об этом написать в предварительном описании Вашей обработки! :)
Или Вы блондинофоб? ;)
(блондинофоб - здесь: человек, ненавидящий особей женского пола со светлым типом волос)
Спасибо.
17. shishkin1966 99 03.12.10 10:01 Сейчас в теме
А вы в текстовом виде когда - нибудь писали запросы или всегда пользуетесь построителем запроса ?
Просто ни один из разработчиков БД, которых я знаю, не пользуются никакими визуальными построителями запросов. Все набирают текст в обычных текстовых редакторах и посылают их на выполнение. У них никогда не возникали вопросы, а почему правое поле пустое, будь это Oracle Developer или Query Analyzer. Для них только нужен список таблиц,VIEW(и их колонок) и описание связей между таблицами и все.
18. shishkin1966 99 09.12.10 23:33 Сейчас в теме
Добавлено:
- поддержка вывода результатов нескольких Select'ов в одном запросе
19. shishkin1966 99 10.12.10 16:05 Сейчас в теме
Добавлено:
- запуск на выполнение выделенной части текста
Поручик; +1 Ответить
20. pizhenkov 213 02.07.14 13:11 Сейчас в теме
{Форма.Форма.Форма(2242)}: Поле объекта не обнаружено (СвязиМетаданныхПостроительЗапросаSQL)
Форма = Обработки.СвязиМетаданныхПостроительЗапросаSQL.ПолучитьФорму("Connect");

При открытии в УТ 10.3 (1С:Предприятие 8.2 (8.2.18.109))
21. shishkin1966 99 03.07.14 19:43 Сейчас в теме
(20) pizhenkov,
я больше не поддерживаю 1С - раньше все работало - теперь все вопросы к ним. Если они меняют доступ к объектам даже в пределах одной подверсии - слов нет. Все работало вроде до версии 8.2.13 - дальше все было вырезано. Лазил по форумам - ничего не получилось. Спросите у знающих 1с - как открыть модальную форму внешней обработки.
22. realchel 24.12.15 20:21 Сейчас в теме
А что в этом файле?
Transact-SQL Reference (MS SQL).

Postgre SQL Reference (Postgre SQL).
23. shishkin1966 99 25.12.15 10:21 Сейчас в теме
(22) realchel,
Описание языков программирования БД
Оставьте свое сообщение