Ссылки в таблицах SQL 1с 8.1 #506001


#0 by kopilogus
Всем доброго дня, вопрос заключается в следующем. Есть необходимость вытащить из 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 by Defender aka LINN
Найди эту запись в 1С и посмотри. А вообще, это противоречит лицензионному соглашению.
#2 by kopilogus
Знаю, но нужно восстановить некоторые данные из битой базы. Увы, других вариантов нет. :(
#3 by kopilogus
Записей в регистре около 30 000 не вариант каждую запись искать в 1С. Нужно понять принцип ссылок в этом регистре, остально дело за t-sql. Вот только не получается понять. Есть у кого-либо еще идеи??
#4 by Defender aka LINN
Восстановить куда? И как базу убили, если sql жив?
#5 by smitru
вначале разбираешься со структурой БД (какая таблица к каким методанным 1С относится. Тогда поймёшь какой именно тип данных находится в том или ином столбце и соответственно уже поймёшь с какой таблицей сиквела он связан (опять же по структуре хранения БД в сиквеле)
#6 by kopilogus
Во время перепроведения документов был сбой по питанию, в итоге база вывалилась в Suspect, удалось ее поднять, но в результате получили частичную потерю информации. Есть еще одна sql база, в которой вертится мобильная торговля (Оптимум, мож кто слышал). Так вот, связь объектов между этими двумя базами - это мой регистр сведений. После падения базы 1С, выгрузил ее из центральной заново, но пришлось пересоздать базу Оптимум так как регистр сведений неходит в плане обмена и оказался пустым. Вот теперь нужно восстановить потерянные ссылки на объекты из этого регистра.
#7 by kopilogus
Со структурй проблем нет, знаю что где лежит, но не могу сделать так как не знаю что означает 0x000000A3, 0x000000C7 и так далее
#8 by НачинающийВосьмерочн
так есть обработка в инете которая показывает какое поле есть кто
#9 by el-gamberro
это двоичные данные ежли че... в них храняться ид-шники. Сами ид-ники это строка но они преобразованы в бинари. В 8ке для хранения составных типов используется структура хранения данных в 3х полях. Видимо твой случай. Где-то была статья но точно сейчас не скажу где.
#10 by el-gamberro
select top 2 *, CAST(_Fld18127_TYPE as nvarchar(max)) from _inforeg18126 интересно что покажет?
#11 by kopilogus
Если вы имеете ввиду обработку, которая показывает структуру базы данных, то это не то что нужно. Эта обработка может показать только соответствие объектов метаданных 1с таблицам в sql, с указанием полей sql таблиц, но вот описание ссылок элементов на другие элементы таблиц sql я к сожалению не нашел.
#12 by kopilogus
Запрос 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 by el-gamberro
Если упрощенно то схема такая: Тип        Вид          Сссылка Документ   Реализация   0008 Это судя по всему у тебя и защито в твоей таблице.
#14 by el-gamberro
Прям квадратики и выводит?
#15 by kopilogus
Да, прямо квадратики и выводит :)
#16 by kopilogus
Запрос 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 by kopilogus
Собственно, как понять каким таблицам соответствует каждое значение в этом запросе?
#18 by Defender aka LINN
А тупо перегрузить регистр "как есть" в новую базу - пробовал?
#19 by kopilogus
Не пробовал, потому что в новой базе уже есть новые регистры, сформированные при первой синхронизации с базой Оптимум. Поэтому нельзя их тупо загонять. Неужели нет информации о том, как формируются ссылки на объекты данных в sql. Я так понимаю: поскольку есть значение ссылки, значит sql точно знает, что объекту с сылкой 0x000000A3 соответствует, напрмер, таблица _Reference108 и так далее. Такое соответсвие должно быть описано где-то. Вопрос, где найти его??
#20 by pmb
в поле _Fld18127_RTRef  зашита ссылка на таблицу. Попробуй поискать ее по значению этого поля. по идее значению 0x000000A3 должна соответствовать таблица _Reference163. Правда не знаю как определить где справочники а где документы.
#21 by kopilogus
Все равно, что это, главное чтобы по значению поля можно было определить конечную таблицу. pmb, как Вы определили, что это именно _Reference163?
#22 by pmb
шестнадцатеричная система счисления :) АЗ = 16*10 + 3
#23 by sash-ml
если ты знаешь какой это регистр, то можно посмотреть какие у него поля составного типа
#24 by 1C-Nick
а почему не 36-ричная, и тогда будет 363?
#25 by kopilogus
Только заметил, что допустил опечатку ранее 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 by 1C-Nick
хотя судя по записи 0х - действительно 16-ти
#27 by 1C-Nick
а что дает select distinct _Fld18127_TYPE from _InfoReg18126
#28 by kopilogus
Сейчас проверим, что там находится.
#29 by pmb
вот как определить что это будет справочник а документ - х.з. Но по идее номера таблиц не пересекаются, т.е. не должно быть таблицы _Reference163 и _Document163 0x000000A3   - всегда означало 16-ную систему счисления.
#30 by kopilogus
Оказалось _Reference107 (места хранения)
#31 by kopilogus
запрос select distinct _Fld18127_TYPE from _InfoReg18126 Дает _Fld18127_TYPE 0x01 0x08
#32 by kopilogus
0х01 - это пустая ссылка в регистре (единственная запись), остальные все с 0х08
#33 by 1C-Nick
0х08 по идее означает что там только справочники. и все ссылки из это 16-ричные номера таблиц _Reference но странно что 0x000000A3 это _Reference107
#34 by 1C-Nick
можно пойти еще опытным путем залить пустую конфигурацию, и добавить туда записи с разными типами - тогда точно можно определить какой тип какое значение дает. но все должно по идее соответствовать
#35 by kopilogus
Перепроверил еще раз, прошу прощения, действительно таблица _Reference163, это справочник складов.
#36 by kopilogus
Может, во вьюхах что-то полезное будет? Запрос 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 by 1C-Nick
а что в итоге надо сделать из этих данных? дать зпрос, определяющий имена таблиц?
#38 by 1C-Nick
select distinct 'dbo._Reference' + CAST(CAST(_Fld18127_RTRef AS INT) AS VARCHAR) from _InfoReg18126
#39 by 1C-Nick
а дальше если сильно постараться, то можно создать табличку соответствия имен таблиц именам метаданных, заполнить ее из 1С, а потом в соединять в запросе для определения имени метаданных
#40 by sash-ml
да, я когда-то такое делал. Более сложным путем. а тут оказывается можно ПолучитьСтруктуруХраненияБазыДанных взять числовую составляющую, хексануть и будет табличка с описание типов ссылочных объектов :)
#41 by 1C-Nick
ну тогда еще проще ПолучитьСтруктуруХраненияБазыДанных, хексануть  и засунуть имя метаданного, и хекс имя таблицы...
#42 by 1C-Nick
хотя я так и не понял конечную цель - получить конкретные имена таблиц или еще что-либо...
#43 by kopilogus
Конечная цель - выяснить как и где хранится соответствие таблиц их 16-тиричным ссылкам.
#44 by Новенький_2009
закладка
#45 by kopilogus
В итоге вопрос остался открытым
#46 by el-gamberro
ты че прикалываешься? по моему уже все разжевали.
#47 by kopilogus
А по-моему, просто никто не знает где решение. По крайней мере, в этом топике оно не было озвучено.
#48 by sash-ml
храниться эта беда в таблицах Config, и Params, DBSchema, аднако в зашифрованном виде, так что забудь про прямое получение имен средствами SQL
#49 by 1C-Nick
- а чем не устраивает ПолучитьСтруктуруХраненияБазыДанных?
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С