Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Горячая тема (более 10 ответов) Метаданные присоединенной б/д (число прочтений - 8352 )
Delorn
YaBB Newbies
*
Отсутствует


1c user

Сообщений: 9
Зарегистрирован: 07. Августа 2007
Пол: Мужской
Метаданные присоединенной б/д
21. Сентября 2007 :: 11:44
Печать  
Каким образом можно получить дерево метаданных. Присоединенной бд? Подскажите пример?

В текущей я конечно могу все получить с помощи метаданных
Для СчЦ = 1 по Метаданные.Документ() Цикл
   Сообщить(Метаданные.Документ(СчЦ));
...
А в той которую присоединил? Очень не хочется подключаться по ОЛЕ.
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Метаданные присоединенной б/д
Ответ #1 - 21. Сентября 2007 :: 12:40
Печать  
Можно файл 1Cv7.DD (DDS) анализировать.
Там информации даже больше.
  
Наверх
 
IP записан
 
Delorn
YaBB Newbies
*
Отсутствует


1c user

Сообщений: 9
Зарегистрирован: 07. Августа 2007
Пол: Мужской
Re: Метаданные присоединенной б/д
Ответ #2 - 21. Сентября 2007 :: 12:42
Печать  
Цитата:
Можно файл 1Cv7.DD (DDS) анализировать.
Там информации даже больше.

Интересно. А можно хотя бы одну ссылку на то как это делать.
Изменено:
Открыл текстовым блокнотом все понял. Большое спасибо. Это то что нужно Улыбка почти для меня ленивого
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Метаданные присоединенной б/д
Ответ #3 - 21. Сентября 2007 :: 12:47
Печать  
Блокнотом или любым текстовым редактором щелкаешь по файлу  и смотришь.

Программно наверно можно, но ссылок не видел.
В принципе там делов - за день можно сруктуировать.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Метаданные присоединенной б/д
Ответ #4 - 21. Сентября 2007 :: 12:57
Печать  
Объект MetaDataWork
метод
ПрисоединитьМД / AttachMD

Синтаксис: ПрисоединитьМД(ПутьМД)

Параметры:

ПутьМД - тип: Строка. Путь к файлу 1cv7.md
Описание: позволяет загрузить метаданные из указанного файла. В дальнейшем получение всех внутренних идентификаторов объектов метаданных будет выполняться по подключенным метаданным
  
Наверх
 
IP записан
 
Delorn
YaBB Newbies
*
Отсутствует


1c user

Сообщений: 9
Зарегистрирован: 07. Августа 2007
Пол: Мужской
Re: Метаданные присоединенной б/д
Ответ #5 - 21. Сентября 2007 :: 13:06
Печать  
Это обнадеживает, я практически погрузился в создание парсера для DD Улыбка
Как мне получить список видов документов в присоединенной базе?
Вот так в текущей базе.
Для СчЦ = 1 по Метаданные.Документ() Цикл
   Сообщить(Метаданные.Документ(СчЦ));
КонецЦикла;
Не ужели есть подобный аналог в 3-20 строчек на 1с++?
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Метаданные присоединенной б/д
Ответ #6 - 21. Сентября 2007 :: 13:15
Печать  
Мне тоже интересно

А как получить из MetaDataWork
1. Метаданные. Регистр() - количество регистров ?
или количество справочников?
2. Идентификатор
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Метаданные присоединенной б/д
Ответ #7 - 21. Сентября 2007 :: 13:31
Печать  
Количество и идентефикаторы легко, а вот как вытащить реальные названия, синоним и.т.д. ?
         
     meta1 = СоздатьОбъект("MetaDataWork");
     meta1.ПрисоединитьМД("c:work\1cv7.md");
     инд1 = 0;
     Пока ( 1 = 1 ) Цикл
           инд1 = инд1 + 1;
           Попытка
                 Идент  = СокрЛП(meta1.ИмяТаблицыСправочника(инд1));
           Исключение
               Прервать;
           КонецПопытки;
           Назв = meta1.ИДСправочника(инд1);
           Сообщить("Справочник Индекс =" + инд1 + " Идент = " + Идент + " название в базе = " + Назв);
     КонецЦикла;
     инд1 = 0;
     Пока ( 1 = 1 ) Цикл
           инд1 = инд1 + 1;
           Попытка
                 Идент  = СокрЛП(meta1.ИДРегистра(инд1));
           Исключение
               Прервать;
           КонецПопытки;
           Назв = meta1.ИДРегистра(инд1);
           Сообщить("Регистр =" + инд1 + " Идент = " + Идент );
     КонецЦикла;
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Метаданные присоединенной б/д
Ответ #8 - 21. Сентября 2007 :: 13:35
Печать  
Как мне кажется можно MetaDataWork снабдить атрибутом Метаданные (типа Метаданные) который бы предоставлял доступ к метаданным присоединенного md.
И реализация думаю будет не сложная. Может кто то из разработчиков и сделает.
  

1&&2&&3
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Метаданные присоединенной б/д
Ответ #9 - 21. Сентября 2007 :: 13:45
Печать  
trad писал(а) 21. Сентября 2007 :: 13:35:
Как мне кажется можно MetaDataWork снабдить атрибутом Метаданные (типа Метаданные) который бы предоставлял доступ к метаданным присоединенного md.
И реализация думаю будет не сложная. Может кто то из разработчиков и сделает.

Намекнешь, каким образом? Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Метаданные присоединенной б/д
Ответ #10 - 21. Сентября 2007 :: 13:55
Печать  
trad писал(а) 21. Сентября 2007 :: 13:35:
Как мне кажется можно MetaDataWork снабдить атрибутом Метаданные (типа Метаданные) который бы предоставлял доступ к метаданным присоединенного md.
И реализация думаю будет не сложная. Может кто то из разработчиков и сделает.


А почему можно написать
МД.ИмяТаблицыИтогов("ПартииНаличие") и получить RG5213, а обратного метода нет?
Как-то нелогично.

Этого и также получение номера и количества (без попыток) было бы достаточно.

  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Метаданные присоединенной б/д
Ответ #11 - 21. Сентября 2007 :: 15:06
Печать  
artbear писал(а) 21. Сентября 2007 :: 13:45:
trad писал(а) 21. Сентября 2007 :: 13:35:
Как мне кажется можно MetaDataWork снабдить атрибутом Метаданные (типа Метаданные) который бы предоставлял доступ к метаданным присоединенного md.
И реализация думаю будет не сложная. Может кто то из разработчиков и сделает.

Намекнешь, каким образом? Улыбка

посмотрел.
CMetadataContext - не экспортирован.
Тады ой.
  

1&&2&&3
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Метаданные присоединенной б/д
Ответ #12 - 21. Сентября 2007 :: 16:23
Печать  
trad писал(а) 21. Сентября 2007 :: 15:06:
artbear писал(а) 21. Сентября 2007 :: 13:45:
trad писал(а) 21. Сентября 2007 :: 13:35:
Как мне кажется можно MetaDataWork снабдить атрибутом Метаданные (типа Метаданные) который бы предоставлял доступ к метаданным присоединенного md.
И реализация думаю будет не сложная. Может кто то из разработчиков и сделает.

Намекнешь, каким образом? Улыбка

посмотрел.
CMetadataContext - не экспортирован.
Тады ой.


Твой способ конечно самый лучший
Я попробовал добавить метод в MetaDataWork вроде получилось
// Колво справочников
           int countDefSpr =m_pMetaDataCont->GetSTypeDefs()->GetNItems();
           rValue = countDefSpr;

Аналогично можно найти
/ char const* GetCode() - получить строку с идентификатором объекта
// char const* GetDescr() - получить строку с комментарием объекта
// char const* GetPresent() - получить строку с синонимом объекта
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Метаданные присоединенной б/д
Ответ #13 - 21. Сентября 2007 :: 16:42
Печать  
trad писал(а) 21. Сентября 2007 :: 13:35:
Как мне кажется можно MetaDataWork снабдить атрибутом Метаданные (типа Метаданные) который бы предоставлял доступ к метаданным присоединенного md.
И реализация думаю будет не сложная. Может кто то из разработчиков и сделает.


Весьма интересно и нужно!  Подмигивание


  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Метаданные присоединенной б/д
Ответ #14 - 21. Сентября 2007 :: 16:44
Печать  
kiruha писал(а) 21. Сентября 2007 :: 12:47:
Блокнотом или любым текстовым редактором щелкаешь по файлу  и смотришь.

Программно наверно можно, но ссылок не видел.
В принципе там делов - за день можно сруктуировать.


Подскажи каким образом узнать что char(9) означает ссылку на справочник Номенклатура?
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Метаданные присоединенной б/д
Ответ #15 - 21. Сентября 2007 :: 17:02
Печать  
Цитата:
Подскажи каким образом узнать что char(9) означает ссылку на справочник Номенклатура?


Никак.

  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Метаданные присоединенной б/д
Ответ #16 - 21. Сентября 2007 :: 17:45
Печать  
trad
Дима, отличная идея. Улыбка

trad писал(а) 21. Сентября 2007 :: 15:06:
artbear писал(а) 21. Сентября 2007 :: 13:45:
trad писал(а) 21. Сентября 2007 :: 13:35:
Как мне кажется можно MetaDataWork снабдить атрибутом Метаданные (типа Метаданные) который бы предоставлял доступ к метаданным присоединенного md.
И реализация думаю будет не сложная. Может кто то из разработчиков и сделает.

Намекнешь, каким образом? Улыбка

посмотрел.
CMetadataContext - не экспортирован.
Тады ой.

Это не особо страшно.
Определение класса очень простое и позволяет при некотором желании создавать объекты.
Код
Выбрать все
//+ SIZEOF OK R27 0x24
class CMetadataContext : public CBLContext
{
	DECLARE_DYNCREATE(CMetadataContext)
	CTaskDef* pTaskDef;					// 0x20
};
 


  

De quelle planète es-tu?
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Метаданные присоединенной б/д
Ответ #17 - 22. Сентября 2007 :: 06:55
Печать  
kms писал(а) 21. Сентября 2007 :: 17:45:
Это не особо страшно.
Определение класса очень простое и позволяет при некотором желании создавать объекты.
Код
Выбрать все
//+ SIZEOF OK R27 0x24
class CMetadataContext : public CBLContext
{
	DECLARE_DYNCREATE(CMetadataContext)
	CTaskDef* pTaskDef;					// 0x20
};
 



Только макрос DECLARE_DYNCREATE не прокатит ибо CMetadataContext::CreateObject нет в экспорте.
Конечно, некоторая вероятность нахождения решения есть всегда.
Надо будет поискать конструктор, хотя бы с целью установки vftable
  

1&&2&&3
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Метаданные присоединенной б/д
Ответ #18 - 22. Сентября 2007 :: 07:21
Печать  
Ну... DECLARE_DYNCREATE - это просто обозначение, что CreateObject там есть.

Я к чему клоню: можно обойтись и без экспортов, если их нет.
А что остается?

У меня вполне работает такой простой тест:
Код
Выбрать все
  case funcMetadata:
	CMetadataContext* pCont0 = (CMetadataContext*)ppValue[0]->GetContext();
	CMetadataContext* pCont = (CMetadataContext*)(*pCont0->GetRuntimeClass()->m_pfnCreateObject)();

	  pCont->pTaskDef = m_pMetaDataCont->pTaskDef;
	  rValue.AssignContext(pCont);
	  break;
 


Параметром 1 нужно передавать объект "Метаданные", чтобы определить адрес этой самой CreateObject().

Я что-то не знаю, как по-другому получить живой CMetadataContext, но конечно, что-то нужно придумывать, определять адрес 1 раз, а реализацию делать не методом, а свойством.

Ну ладно, пора бросать это дело.
Разработчики 1cpp доведут до ума, а я в этот день пойду выпью за твое здоровье! Улыбка
  

De quelle planète es-tu?
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Метаданные присоединенной б/д
Ответ #19 - 22. Сентября 2007 :: 07:47
Печать  
да, в принципе, я уже определил и адрес конструктора и адрес таблицы ВФ. да и "живой CMetadataContext" получить тоже не проблема, что бы реализация была релизонезависимой
  

1&&2&&3
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Метаданные присоединенной б/д
Ответ #20 - 22. Сентября 2007 :: 08:24
Печать  
trad писал(а) 22. Сентября 2007 :: 07:47:
да, в принципе, я уже определил и адрес конструктора и адрес таблицы ВФ. да и "живой CMetadataContext" получить тоже не проблема, что бы реализация была релизонезависимой

Классно, ну я ни разу в тебе не сомневался.
Просто вчера так понравилась твоя идея, что я никак не мог смириться с выводом "тады ой" Подмигивание

Вообще, Дим, вдогонку, хочется пожелать еще побольше времени и здоровья, на претворение всех твоих замечательных идей в жизнь.
Путь мечты сбываются, рано или поздно. Улыбка
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Метаданные присоединенной б/д
Ответ #21 - 22. Сентября 2007 :: 09:04
Печать  
trad писал(а) 22. Сентября 2007 :: 07:47:
да, в принципе, я уже определил и адрес конструктора и адрес таблицы ВФ. да и "живой CMetadataContext" получить тоже не проблема, что бы реализация была релизонезависимой

Ждем результата - типа подарок всем нам от тебя в твой ДР Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Метаданные присоединенной б/д
Ответ #22 - 26. Сентября 2007 :: 04:28
Печать  
Выполнено.
http://www.1cpp.ru/forum/YaBB.pl?num=1173766505/30#30

Спасибо trad-у Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Метаданные присоединенной б/д
Ответ #23 - 26. Сентября 2007 :: 08:34
Печать  
Да, оперативность потрясает! Улыбка
Спасибо!

Осталось пожелать в спецификации имен добавить символ (например $$) для обращения
к таблицам второй базы. Тем более что и для ДБФ и для SQL
такой функционал достигается преобразованием текста запроса в несколько строчек.
Мне кажется - это было бы удобно.
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Метаданные присоединенной б/д
Ответ #24 - 26. Сентября 2007 :: 18:55
Печать  
Ужас
Респект, проверим!
Эх кабы время найти!
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать