Имя: Пароль:
1C
 
Структура SQL таблиц
0 Vbif
 
06.07.06
11:12
Сегодня покопал немного базу однаружил следующее
В таблице Config в поле binarydata записи где filename = 'metadata' находится упакованное описание конфигурации.
Сохраненная в файл с помощью консольной команды SQL
"textcopy /S имяСервера /D ИмяБазы /U Пользователь /P Пароль /T Config /C BinaryData /W "where FileName = 'metadata'" /F c:\1CV8Config.bin /O /Z"
и распакованной утилитой Игоря Павлова undeflat.exe дает нам описание структуры базы.
Пример:
"....
»¿{1,
{13,aa911a53-444b-449a-a3be-4f48047e6017,715a2627-85c0-4bd5-80f5-195c1f0c21a5,10412847-662d-413d-bc32-8d8ed22553e7,abb57a60-4183-4789-92b5-cf74967d7875,45ab55a5-e710-4de9-a895-ef462250bd42,872083c4-9fb6-4c33-8d6f-6d4f4be84b5d,f786131d-ba16-44d2-a39b-0feddd1957b4,95dc43a7-ecbb-4dff-9167-cfc300024cbb,
{0,
{0,
{0,0,29f4356c-7cb5-4bc8-8ee6-c870dab3a9ce},"ДвижениеПоКассе",
{1,"ru","Движение по кассе"},""}
},00000000-0000-0000-0000-000000000000,1,10,1,1,1,491248b3-ec6e-44ae-b3b9-8a4347806c35,627628b9-b9ae-44e7-aa18-cf6cb5b02515,627628b9-b9ae-44e7-aa18-cf6cb5b02515,0
...."
отсюда можно получить ИД объекта
"29f4356c-7cb5-4bc8-8ee6-c870dab3a9ce" !!!
из таблицы Params из записи где FileName = 'DBNames' получаем структуру соответсвия вида
"{4537,
{2571,
{00000000-0000-0000-0000-000000000000,"AccntRegOptions",3193},
...
{29f4356c-7cb5-4bc8-8ee6-c870dab3a9ce,"Document",3299},
..."
где по полученному ИДу объекта находим ИМЯ ТАБЛИЦЫ SQL !!!!!!!!!!

хотелось бы узнать еще и алгоритм работы undeflat-а и можно написать Компоненту которая по имени объекта вернет имя таблицы
может кто знает?
1 Дяпти
 
06.07.06
11:18
Фантазер мля...
Имя таблицы штатно определяется легко.
2 Vbif
 
06.07.06
11:29
Да и как? Подскажите фантазеру!!!
3 Херрес
 
06.07.06
11:30
А зачем оно нужно, имя таблицы ?
4 Vbif
 
06.07.06
11:32
Добраться до данных из другой программы, не из 1С. Через АЛЕ/СОМ - не очень шустро.
5 avmlvm
 
06.07.06
11:42
(0) На ИТС есть структура хранения данных в 8-ки на мелкомягком сиквеле...
6 Vbif
 
06.07.06
11:45
На каком ИТС? Я что-то не нашел.
А то что есть, получает имена через перехват запросов.
Но есть одна особенность - имя может измениться :(
7 avmlvm
 
06.07.06
11:50
(6) Раздел "Администрирование"

Размещение данных 1С:Предприятия 8.0

Данный документ дает представление о файлах и таблицах баз данных, с которыми работает 1С:Предприятие 8.0, и о распределении между ними информации, используемой 1С:Предприятием 8.0. Рассматриваются как файловый, так и клиент-серверный варианты информационных баз.
8 MMF
 
06.07.06
11:58
(7) нет там ответа на сабж.
(0) zlib без заголовков. Ты немного рано радуешься :-) тебя ждут неприятные открытия
9 Vbif
 
06.07.06
12:02
(8) согласен про (7) - все и так ясно было
А что за открытия чудные?
10 Дяпти
 
06.07.06
12:06
(2) ИмяТаблицыСправочника = "_Reference" + ВыдратьИзСтрокиТоЧтоМеждуВторойЗапятойИДвоеточием(ЗначениеВСтрокуВнутр(Справочники.ИмяСправочникаПустаяСсылка()));
11 MMF
 
06.07.06
12:07
(10) из СТОРОННЕГО приложения?
12 Дяпти
 
06.07.06
12:08
(11) ему компоненту для 1С хоцца написать.
13 Vbif
 
06.07.06
12:10
Где было сказано про 1С? Компоненты есть не только у 1С. Мне, например, надо в Лотус пропихать
14 Vbif
 
06.07.06
12:11
Хотя, (10) и вариант. Через ОЛЕ 1С и получение имени таблицы, а потом напрямую к Скулю :)
15 Дяпти
 
06.07.06
12:12
(13) Ну давай еще о терминах поспорим. Ты на 1С-ком форуме и "компонентами" тут зовутся внешние компоненты для 1С. А если ты с самого начала имел ввиду что то другое, почему тогда задал вопрос (2)? Что есть для тебя "штатно" без применения к 1С?
16 MMF
 
06.07.06
12:19
(14) есть еще вариант: скачать тулзу, которая извлекает метаданные и DBnames, с сайта softpoint-а и они тебе по ним создадут скрипты по созданию вьюшек по всем объектам базы. примерно так:
IF EXISTS (SELECT 1 FROM sysobjects WHERE id = object_id(N'DBO.Справочник_Банки') and OBJECTPROPERTY(id, N'IsView') = 1) DROP VIEW DBO.Справочник_Банки
GO
CREATE VIEW DBO.Справочник_Банки
AS
SELECT
_IDRRef, _Version, _Marked, _IsMetaData,
_Description,
_Code,
_ParentIDRRef,
_Folder,
_Fld627 as [КоррСчет],
_Fld628 as [Город],
_Fld629 as [Адрес],
_Fld630 as [Телефоны]
FROM _Reference6
GO
IF EXISTS (SELECT 1 FROM sysobjects WHERE id = object_id(N'DBO.Справочник_БанковскиеСчета') and OBJECTPROPERTY(id, N'IsView') = 1) DROP VIEW DBO.Справочник_БанковскиеСчета
GO
CREATE VIEW DBO.Справочник_БанковскиеСчета
AS
SELECT
_IDRRef, _Version, _Marked, _IsMetaData,
_Description,
_Code,
_Fld631 as [НомерСчета],
_Fld632RRef as [Банк],
_Fld633RRef as [БанкДляРасчетов],
_Fld634 as [ТекстКорреспондента],
_Fld635 as [ТекстНазначения],
_Fld636 as [ВидСчета],
_Fld637RRef as [ВалютаДенежныхСредств],
_Fld638 as [НомерИДатаРазрешения],
_Fld639 as [ДатаОткрытия],
_Fld640 as [ДатаЗакрытия],
_Fld641 as [МесяцПрописью],
_Fld642 as [СуммаБезКопеек],
_Fld12345RRef as [КонтрагентДляОграниченияПравДоступа],
_Fld12346RRef as [ОрганизацияДляОграниченияПравДоступа]
FROM _Reference7
...
Или за готовый парсер договорисся.
17 Vbif
 
06.07.06
12:39
(15) Не буду спорить. Из всех недопониманий - это самое слабое и им можно пренебречь. За совет (10) скажу просто - спасибо :) ;)

(16) Вот как раз и проблема, что конфа своя, самописанная. И номер таблицы справочника может измениться (из-за этого и весь сыр бор).

Да и такой инфы (по строению) не встречал - мож кому пригодиться.

Так что всем спасибо за обсуждение. Думаю можно заканчивать.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан