![]() |
![]() |
![]() |
|
Ссылки в таблицах SQL 1с 8.1 | ☑ | ||
---|---|---|---|---|
0
kopilogus
21.09.10
✎
09:20
|
Всем доброго дня, вопрос заключается в следующем.
Есть необходимость вытащить из sql таблиц 1С8.1 информацию по одному регистру сведений. select top 2 * from _inforeg18126 дает следующее: _Fld18127_TYPE _Fld18127_RTRef _Fld18127_RRRef _Fld18128 0x08 0x000000A3 0xA50200142A9F9EC911DCCD55B9A168D1 c14f48d5-fa7d-4f5b-9c0c-77dae6ba5bc4 0x08 0x000000C7 0x8098001E0BBF911E11DDF1DEB181F8DE cd82b3e5-49a8-446a-b373-d7c0bce24366 Знаю что данный регистр сведений содержит в себе ссылки на различные элементы справочников, докумнто и прочее. Как понять на какой тип объекта метаданных ссылаются элементы? Например, в приведенном выше запросе что означает ссылка 0x000000A3? Есть ли таблица в которой хранится соответсвие шестнадцатиричного значения и наименования таблицы? |
|||
1
Defender aka LINN
21.09.10
✎
09:24
|
(0) Найди эту запись в 1С и посмотри.
А вообще, это противоречит лицензионному соглашению. |
|||
2
kopilogus
21.09.10
✎
09:27
|
Знаю, но нужно восстановить некоторые данные из битой базы.
Увы, других вариантов нет. :( |
|||
3
kopilogus
21.09.10
✎
09:32
|
Записей в регистре около 30 000 не вариант каждую запись искать в 1С.
Нужно понять принцип ссылок в этом регистре, остально дело за t-sql. Вот только не получается понять. Есть у кого-либо еще идеи?? |
|||
4
Defender aka LINN
21.09.10
✎
09:32
|
(2) Восстановить куда? И как базу убили, если sql жив?
|
|||
5
smitru
21.09.10
✎
09:34
|
(0) вначале разбираешься со структурой БД (какая таблица к каким методанным 1С относится. Тогда поймёшь какой именно тип данных находится в том или ином столбце и соответственно уже поймёшь с какой таблицей сиквела он связан (опять же по структуре хранения БД в сиквеле)
|
|||
6
kopilogus
21.09.10
✎
09:38
|
Во время перепроведения документов был сбой по питанию, в итоге база вывалилась в Suspect, удалось ее поднять, но в результате получили частичную потерю информации.
Есть еще одна sql база, в которой вертится мобильная торговля (Оптимум, мож кто слышал). Так вот, связь объектов между этими двумя базами - это мой регистр сведений. После падения базы 1С, выгрузил ее из центральной заново, но пришлось пересоздать базу Оптимум так как регистр сведений неходит в плане обмена и оказался пустым. Вот теперь нужно восстановить потерянные ссылки на объекты из этого регистра. |
|||
7
kopilogus
21.09.10
✎
09:42
|
Со структурй проблем нет, знаю что где лежит, но не могу сделать
select * from _inforeg18126 JOIN [другие таблицы] так как не знаю что означает 0x000000A3, 0x000000C7 и так далее |
|||
8
Начинающий Восьмерочн
21.09.10
✎
09:43
|
так есть обработка в инете которая показывает какое поле есть кто
|
|||
9
el-gamberro
21.09.10
✎
09:45
|
(7) это двоичные данные ежли че... в них храняться ид-шники. Сами ид-ники это строка но они преобразованы в бинари.
В 8ке для хранения составных типов используется структура хранения данных в 3х полях. Видимо твой случай. Где-то была статья но точно сейчас не скажу где. |
|||
10
el-gamberro
21.09.10
✎
09:47
|
select top 2 *, CAST(_Fld18127_TYPE as nvarchar(max)) from _inforeg18126
интересно что покажет? |
|||
11
kopilogus
21.09.10
✎
09:48
|
Если вы имеете ввиду обработку, которая показывает структуру базы данных, то это не то что нужно.
Эта обработка может показать только соответствие объектов метаданных 1с таблицам в sql, с указанием полей sql таблиц, но вот описание ссылок элементов на другие элементы таблиц sql я к сожалению не нашел. |
|||
12
kopilogus
21.09.10
✎
09:49
|
Запрос
select top 2 *, CAST(_Fld18127_TYPE as nvarchar(max)) from _inforeg18126 Дал следующее: _Fld18127_TYPE _Fld18127_RTRef _Fld18127_RRRef _Fld18128 (No column name) 0x08 0x000000A3 0xA50200142A9F9EC911DCCD55B9A168D1 c14f48d5-fa7d-4f5b-9c0c-77dae6ba5bc4 0x08 0x000000C7 0x8098001E0BBF911E11DDF1DEB181F8DE cd82b3e5-49a8-446a-b373-d7c0bce24366 |
|||
13
el-gamberro
21.09.10
✎
09:50
|
(11) Если упрощенно то схема такая:
Тип Вид Сссылка Документ Реализация 0008 Это судя по всему у тебя и защито в твоей таблице. |
|||
14
el-gamberro
21.09.10
✎
09:51
|
(12) Прям квадратики и выводит?
|
|||
15
kopilogus
21.09.10
✎
09:53
|
Да, прямо квадратики и выводит :)
|
|||
16
kopilogus
21.09.10
✎
09:55
|
Запрос
select top 2 * from _InfoReg18126 Дает _Fld18127_RTRef 0x000000A3 0x000044D1 0x000044DD 0x00004530 0x00000195 0x000000F1 0x000044C2 0x000001AF 0x000000C7 0x00000000 0x00000075 0x00000076 0x000048D8 0x0000007D 0x000000F7 0x00000162 0x00000066 Откуда делаю вывод, что у меня 17 различных типов объектов метаданных в таблице находятся |
|||
17
kopilogus
21.09.10
✎
09:57
|
Собственно, как понять каким таблицам соответствует каждое значение в этом запросе?
|
|||
18
Defender aka LINN
21.09.10
✎
10:02
|
А тупо перегрузить регистр "как есть" в новую базу - пробовал?
|
|||
19
kopilogus
21.09.10
✎
10:07
|
Не пробовал, потому что в новой базе уже есть новые регистры, сформированные при первой синхронизации с базой Оптимум.
Поэтому нельзя их тупо загонять. Неужели нет информации о том, как формируются ссылки на объекты данных в sql. Я так понимаю: поскольку есть значение ссылки, значит sql точно знает, что объекту с сылкой 0x000000A3 соответствует, напрмер, таблица _Reference108 и так далее. Такое соответсвие должно быть описано где-то. Вопрос, где найти его?? |
|||
20
pmb
21.09.10
✎
10:13
|
(19) в поле _Fld18127_RTRef зашита ссылка на таблицу. Попробуй поискать ее по значению этого поля. по идее значению 0x000000A3 должна соответствовать таблица
_Reference163. Правда не знаю как определить где справочники а где документы. |
|||
21
kopilogus
21.09.10
✎
10:15
|
Все равно, что это, главное чтобы по значению поля можно было определить конечную таблицу.
pmb, как Вы определили, что это именно _Reference163? |
|||
22
pmb
21.09.10
✎
10:17
|
(21) шестнадцатеричная система счисления :)
АЗ = 16*10 + 3 |
|||
23
sash-ml
21.09.10
✎
10:17
|
(0) если ты знаешь какой это регистр, то можно посмотреть какие у него поля составного типа
|
|||
24
1C-Nick
21.09.10
✎
10:18
|
(22) а почему не 36-ричная, и тогда будет 363?
|
|||
25
kopilogus
21.09.10
✎
10:18
|
Только заметил, что допустил опечатку ранее 6-ю постами. Прошу прощения.
Запрос select distinct _Fld18127_RTRef from _InfoReg18126 Дает _Fld18127_RTRef 0x000000A3 0x000044D1 0x000044DD 0x00004530 0x00000195 0x000000F1 0x000044C2 0x000001AF 0x000000C7 0x00000000 0x00000075 0x00000076 0x000048D8 0x0000007D 0x000000F7 0x00000162 0x00000066 |
|||
26
1C-Nick
21.09.10
✎
10:19
|
(24) хотя судя по записи 0х - действительно 16-ти
|
|||
27
1C-Nick
21.09.10
✎
10:20
|
(25) а что дает
select distinct _Fld18127_TYPE from _InfoReg18126 |
|||
28
kopilogus
21.09.10
✎
10:20
|
Сейчас проверим, что там находится.
|
|||
29
pmb
21.09.10
✎
10:20
|
вот как определить что это будет справочник а документ - х.з. Но по идее номера таблиц не пересекаются, т.е. не должно быть таблицы _Reference163 и _Document163
(24) 0x000000A3 - всегда означало 16-ную систему счисления. |
|||
30
kopilogus
21.09.10
✎
10:21
|
Оказалось _Reference107 (места хранения)
|
|||
31
kopilogus
21.09.10
✎
10:25
|
запрос
select distinct _Fld18127_TYPE from _InfoReg18126 Дает _Fld18127_TYPE 0x01 0x08 |
|||
32
kopilogus
21.09.10
✎
10:26
|
0х01 - это пустая ссылка в регистре (единственная запись), остальные все с 0х08
|
|||
33
1C-Nick
21.09.10
✎
10:28
|
0х08 по идее означает что там только справочники.
и все ссылки из (25) это 16-ричные номера таблиц _Reference но странно что 0x000000A3 это _Reference107 |
|||
34
1C-Nick
21.09.10
✎
10:32
|
можно пойти еще опытным путем
залить пустую конфигурацию, и добавить туда записи с разными типами - тогда точно можно определить какой тип какое значение дает. но все должно по идее соответствовать (33) |
|||
35
kopilogus
21.09.10
✎
10:35
|
Перепроверил еще раз, прошу прощения, действительно таблица _Reference163, это справочник складов.
|
|||
36
kopilogus
21.09.10
✎
10:41
|
Может, во вьюхах что-то полезное будет?
Запрос select top 5 * from INFORMATION_SCHEMA.TABLES Дает TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE UPP_Almaty dbo _InfoRegChangeRec14546 BASE TABLE UPP_Almaty dbo _ReferenceChangeRec18621 BASE TABLE UPP_Almaty dbo _ReferenceChangeRec1818 BASE TABLE UPP_Almaty dbo _AccumReg17234 BASE TABLE UPP_Almaty dbo _Document398 BASE TABLE Вот только 16ти ричных описаний не хватает :( |
|||
37
1C-Nick
21.09.10
✎
10:43
|
а что в итоге надо сделать из этих данных?
дать зпрос, определяющий имена таблиц? |
|||
38
1C-Nick
21.09.10
✎
10:47
|
select distinct 'dbo._Reference' + CAST(CAST(_Fld18127_RTRef AS INT) AS VARCHAR) from _InfoReg18126
|
|||
39
1C-Nick
21.09.10
✎
10:49
|
а дальше если сильно постараться, то можно создать табличку соответствия имен таблиц именам метаданных, заполнить ее из 1С, а потом в соединять в запросе для определения имени метаданных
|
|||
40
sash-ml
21.09.10
✎
10:59
|
(39) да, я когда-то такое делал. Более сложным путем. а тут оказывается можно ПолучитьСтруктуруХраненияБазыДанных взять числовую составляющую, хексануть и будет табличка с описание типов ссылочных объектов :)
|
|||
41
1C-Nick
21.09.10
✎
11:02
|
(40) ну тогда еще проще
ПолучитьСтруктуруХраненияБазыДанных, хексануть и засунуть имя метаданного, и хекс имя таблицы... |
|||
42
1C-Nick
21.09.10
✎
11:03
|
хотя я так и не понял конечную цель - получить конкретные имена таблиц или еще что-либо...
|
|||
43
kopilogus
21.09.10
✎
11:57
|
Конечная цель - выяснить как и где хранится соответствие таблиц их 16-тиричным ссылкам.
|
|||
44
Новенький_2009
21.09.10
✎
12:01
|
закладка
|
|||
45
kopilogus
21.09.10
✎
12:42
|
В итоге вопрос остался открытым
|
|||
46
el-gamberro
21.09.10
✎
12:46
|
(43) ты че прикалываешься? по моему уже все разжевали.
|
|||
47
kopilogus
21.09.10
✎
12:57
|
А по-моему, просто никто не знает где решение.
По крайней мере, в этом топике оно не было озвучено. |
|||
48
sash-ml
21.09.10
✎
13:00
|
(45) храниться эта беда в таблицах Config, и Params, DBSchema, аднако в зашифрованном виде, так что забудь про прямое получение имен средствами SQL
|
|||
49
1C-Nick
21.09.10
✎
13:19
|
(43) - а чем не устраивает ПолучитьСтруктуруХраненияБазыДанных?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |