Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Обращение к метаданным через MetaDataWork (число прочтений - 6506 )
Antes
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 57
Зарегистрирован: 17. Октября 2008
Обращение к метаданным через MetaDataWork
16. Июля 2010 :: 14:34
Печать  
Есть такой код для обращения к метаданным внешней базы:

_ИБ = СоздатьОбъект("ODBCDataBase");
_РС = СоздатьОбъект("ODBCRecordset");  
                 
_ИБ.ПрисоединитьИБ(ПутьКИБ, Пользователь, Пароль);  
_РС.УстБД(_ИБ);
_МД = СоздатьОбъект("MetaDataWork");
_МД.ПрисоединитьМД(ПутьКИБ+"1cv7.md");

При попытке получить Владельца справочника из метаданных:

_МД.Метаданные.Справочник(ВидСправочника).Владелец

возвращается значение "Метаданные", т.е. нет владельца у справочника, тогда как он в конфигураторе задан.

Что неверно приведенном примере?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Обращение к метаданным через MetaDataWork
Ответ #1 - 17. Июля 2010 :: 17:21
Печать  
Вообще-то всё правильно и должен сообщить идентификатор справочника -владельца, если он есть.
Версия 1cpp какая ?
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Обращение к метаданным через MetaDataWork
Ответ #2 - 17. Июля 2010 :: 18:52
Печать  
Eprst писал(а) 17. Июля 2010 :: 17:21:
Вообще-то всё правильно и должен сообщить идентификатор справочника -владельца, если он есть.

эээ
идентификатор владельца получается так
_МД.Метаданные.Справочник(ВидСправочника).Владелец.Идентификатор
а так как в #0 - именно объект Метаданные
  

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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Обращение к метаданным через MetaDataWork
Ответ #3 - 19. Июля 2010 :: 05:09
Печать  
Ну не совсем...
.Владелец возвращает полный идентификатор справочника владельца для справочника, или пустую строку, при его отсутствии..
Тип значения действительно будет метаданные.
ЗЫ: я проверил, на досуге с внешней базой и кодом, как у автора - всё работает.
И специально брать еще Идентификатор не обязательно.
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Обращение к метаданным через MetaDataWork
Ответ #4 - 19. Июля 2010 :: 05:56
Печать  
Улыбка
и все же
.Владелец возвращает объект типа метаданные, а не идентификатор
  

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


I Love YaBB 2!

Сообщений: 57
Зарегистрирован: 17. Октября 2008
Re: Обращение к метаданным через MetaDataWork
Ответ #5 - 19. Июля 2010 :: 06:18
Печать  
Eprst писал(а) 19. Июля 2010 :: 05:09:
Ну не совсем...
.Владелец возвращает полный идентификатор справочника владельца для справочника, или пустую строку, при его отсутствии..
Тип значения действительно будет метаданные.
ЗЫ: я проверил, на досуге с внешней базой и кодом, как у автора - всё работает.
И специально брать еще Идентификатор не обязательно.


Версия библиотеки 2.5.0.7, когда писал эту обратотку с год назад, вроде как, все работало. Сейчас к ней вернулся по причине того, что перестал определяться владелец справочника внешней базы и элементы справочника переносятся из базы в базу (из текущей во внешнюю) с пустым владельцем, нарушая структуру базы. А в чем тогда проблема может быть?
  
Наверх
 
IP записан
 
Antes
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 57
Зарегистрирован: 17. Октября 2008
Re: Обращение к метаданным через MetaDataWork
Ответ #6 - 19. Июля 2010 :: 06:26
Печать  
Объект типа MetaDataWork, свойство Метаданные.

Описание: свойство содержит ссылку на объект Метаданные. Для присоединенного md-файла будет выдаваться ссылка на объект Метаданные для этого файла/конфигурации.

Насколько я понимаю, свойство позволяет получать доступ ко всем методам и свойствам объекта Метаданные. Т.е. Метаданные.Справочник(Вид).Владелец должен возвращать именно справочник-владелец, а не "Метаданные", что ничто иное, как пустое значение.


  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Обращение к метаданным через MetaDataWork
Ответ #7 - 19. Июля 2010 :: 06:48
Печать  
Antes писал(а) 19. Июля 2010 :: 06:26:
Насколько я понимаю, свойство позволяет получать доступ ко всем методам и свойствам объекта Метаданные. Т.е. Метаданные.Справочник(Вид).Владелец должен возвращать именно справочник-владелец, а не "Метаданные", что ничто иное, как пустое значение.


Возвращает как раз объект типа метаданные.

Это аналогично,как  Спр.ТекущийЭлемент() -  тип значения "Справочник", а видишь ты основное представление этого справочника (через Сообщить(Спр.ТекущийЭлемент(), например)
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Обращение к метаданным через MetaDataWork
Ответ #8 - 19. Июля 2010 :: 06:50
Печать  
Antes писал(а) 19. Июля 2010 :: 06:26:
... а не "Метаданные", что ничто иное, как пустое значение.

Объект метаданных проверяется на пустоту так:

А = Метаданные.Справочник("АдресаКонтрагентов").Владелец;
Если А.Выбран()=1 Тогда
     Сообщить(А.Идентификатор);
Иначе
     Сообщить("Владельца нет");
КонецЕсли;

, а не косвенно через представление объекта
  

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



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Обращение к метаданным через MetaDataWork
Ответ #9 - 19. Июля 2010 :: 06:57
Печать  
а вот получение Владельца для присоединенного md видимо не работает. Баг.
  

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


I Love YaBB 2!

Сообщений: 57
Зарегистрирован: 17. Октября 2008
Re: Обращение к метаданным через MetaDataWork
Ответ #10 - 19. Июля 2010 :: 07:01
Печать  
trad писал(а) 19. Июля 2010 :: 06:57:
а вот получение Владельца для присоединенного md видимо не работает. Баг.


Как раз об этом я и речь веду.  Народ пытается меня уличить в незнании понятий и синтаксиса. Улыбка
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Обращение к метаданным через MetaDataWork
Ответ #11 - 19. Июля 2010 :: 07:05
Печать  
Antes писал(а) 19. Июля 2010 :: 07:01:
Народ пытается меня уличить в незнании понятий и синтаксиса. Улыбка

ну а как же без этого Улыбка
тем более что справедливо
  

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


I Love YaBB 2!

Сообщений: 57
Зарегистрирован: 17. Октября 2008
Re: Обращение к метаданным через MetaDataWork
Ответ #12 - 19. Июля 2010 :: 07:07
Печать  
Иными словами:
Метаданные.Справочник("Договоры").Владелец
мне возвращается идентификатор справочника владельца текущей базы. Это работает нормально! Улыбка
_МД.Метаданные.Справочник("Договоры").Владелец
должен вернуться идентификатор владельца справочника во внешней базе, а возвращается  "Метаданные". Соответственно, в первом случае методы Выбран() возвращает 1, а во втором - 0. Хотя, результат, насколько я понимаю, должен быть одинаков при одинаковой конфигурации баз.
  
Наверх
 
IP записан
 
Antes
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 57
Зарегистрирован: 17. Октября 2008
Re: Обращение к метаданным через MetaDataWork
Ответ #13 - 19. Июля 2010 :: 07:08
Печать  
trad писал(а) 19. Июля 2010 :: 07:05:
Antes писал(а) 19. Июля 2010 :: 07:01:
Народ пытается меня уличить в незнании понятий и синтаксиса. Улыбка

ну а как же без этого Улыбка
тем более что справедливо


Справедливо что?!
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Обращение к метаданным через MetaDataWork
Ответ #14 - 19. Июля 2010 :: 07:10
Печать  
trad писал(а) 19. Июля 2010 :: 06:57:
а вот получение Владельца для присоединенного md видимо не работает. Баг.


Работает!
На 3-ей версии 1cpp всё работает, на младших не проверял..
  
Наверх
 
IP записан
 
Antes
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 57
Зарегистрирован: 17. Октября 2008
Re: Обращение к метаданным через MetaDataWork
Ответ #15 - 19. Июля 2010 :: 07:12
Печать  
Eprst писал(а) 19. Июля 2010 :: 06:48:
Antes писал(а) 19. Июля 2010 :: 06:26:
Насколько я понимаю, свойство позволяет получать доступ ко всем методам и свойствам объекта Метаданные. Т.е. Метаданные.Справочник(Вид).Владелец должен возвращать именно справочник-владелец, а не "Метаданные", что ничто иное, как пустое значение.



Возвращает как раз объект типа метаданные.

Это аналогично,как  Спр.ТекущийЭлемент() -  тип значения "Справочник", а видишь ты основное представление этого справочника (через Сообщить(Спр.ТекущийЭлемент(), например)


Возвращается как раз ссылка на объект, а не сам объект. Неважно, это уже отход в сторону от обсуждаемого вопроса.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Обращение к метаданным через MetaDataWork
Ответ #16 - 19. Июля 2010 :: 07:14
Печать  
Antes писал(а) 19. Июля 2010 :: 07:07:
Иными словами:
Метаданные.Справочник("Договоры").Владелец
мне возвращается идентификатор справочника владельца текущей базы. Это работает нормально! Улыбка
_МД.Метаданные.Справочник("Договоры").Владелец
должен вернуться идентификатор владельца справочника во внешней базе, а возвращается  "Метаданные". Соответственно, в первом случае методы Выбран() возвращает 1, а во втором - 0. Хотя, результат, насколько я понимаю, должен быть одинаков при одинаковой конфигурации баз.


Вот так, что пишет ?
Код
Выбрать все
Сообщить(_МД.Метаданные.Справочник("Договоры").Выбран());
Сообщить(_МД.Метаданные.Справочник("Договоры").Владелец); 



Сдается мне, что 100% справочника Договоры в присоединенном мд нет вообще, вот и возвращает "метаданные"






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



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Обращение к метаданным через MetaDataWork
Ответ #17 - 19. Июля 2010 :: 07:43
Печать  
Eprst писал(а) 19. Июля 2010 :: 07:10:
trad писал(а) 19. Июля 2010 :: 06:57:
а вот получение Владельца для присоединенного md видимо не работает. Баг.


Работает!
На 3-ей версии 1cpp всё работает, на младших не проверял..

проверь на двух разнородных конфах
  

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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Обращение к метаданным через MetaDataWork
Ответ #18 - 19. Июля 2010 :: 07:45
Печать  
trad писал(а) 19. Июля 2010 :: 07:43:
Eprst писал(а) 19. Июля 2010 :: 07:10:
trad писал(а) 19. Июля 2010 :: 06:57:
а вот получение Владельца для присоединенного md видимо не работает. Баг.


Работает!
На 3-ей версии 1cpp всё работает, на младших не проверял..

проверь на двух разнородных конфах


Так и делал - подключался к зику с торговли.
Всё работает.

У автора поди так:
Смотрит владельца у НЕ подчиненного справочника, вот и возвращает ему "метаданные", заместо пустой строки, а вот метод Выбран() правильно возвращает - 0 , что Владельца нет, т.е так%:

Код
Выбрать все
_МД.Метаданные.Справочник("Договоры").Владелец = Метаданные
_МД.Метаданные.Справочник("Договоры").Владелец.Выбран() = 0 



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






  
Наверх
 
IP записан
 
Antes
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 57
Зарегистрирован: 17. Октября 2008
Re: Обращение к метаданным через MetaDataWork
Ответ #19 - 19. Июля 2010 :: 07:53
Печать  
Eprst писал(а) 19. Июля 2010 :: 07:45:
trad писал(а) 19. Июля 2010 :: 07:43:
Eprst писал(а) 19. Июля 2010 :: 07:10:
trad писал(а) 19. Июля 2010 :: 06:57:
а вот получение Владельца для присоединенного md видимо не работает. Баг.


Работает!
На 3-ей версии 1cpp всё работает, на младших не проверял..

проверь на двух разнородных конфах


Так и делал - подключался к зику с торговли.
Всё работает.

У автора поди так:
Смотрит владельца у НЕ подчиненного справочника, вот и возвращает ему "метаданные", заместо пустой строки, а вот метод Выбран() правильно возвращает - 0 , что Владельца нет, т.е так%:

Код
Выбрать все
_МД.Метаданные.Справочник("Договоры").Владелец = Метаданные
_МД.Метаданные.Справочник("Договоры").Владелец.Выбран() = 0 



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







Видимо, не все читается или не все понимается, как написано. Не в обиду будет сказано!
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Обращение к метаданным через MetaDataWork
Ответ #20 - 19. Июля 2010 :: 07:56
Печать  
Eprst писал(а) 19. Июля 2010 :: 07:45:
Так и делал - подключался к зику с торговли.

а владельца у какого справочника проверял?
  

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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Обращение к метаданным через MetaDataWork
Ответ #21 - 19. Июля 2010 :: 08:00
Печать  
trad писал(а) 19. Июля 2010 :: 07:56:
Eprst писал(а) 19. Июля 2010 :: 07:45:
Так и делал - подключался к зику с торговли.

а владельца у какого справочника проверял?


ВычетыСотрудниковПоНДФЛ

вернул Сотрудники..
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Обращение к метаданным через MetaDataWork
Ответ #22 - 19. Июля 2010 :: 08:06
Печать  
Eprst писал(а) 19. Июля 2010 :: 08:00:
ВычетыСотрудниковПоНДФЛ

вернул Сотрудники..

дай списать (код покажи)
  

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


I Love YaBB 2!

Сообщений: 57
Зарегистрирован: 17. Октября 2008
Re: Обращение к метаданным через MetaDataWork
Ответ #23 - 19. Июля 2010 :: 08:07
Печать  
Ситуация следующая.
Есть три базы: 2 бухучета и 1 усн. В них всех есть справочник "ЗаймыКонтрагентов". Абсолютно одинаков во всех трех конфах, подчинен справочнику "Контрагенты". Из "бухучета" в "бухучет" все работает верно! Из "усн" в "бухучет" и наоборот получается описанный мной результат., т.е. Владелец = "Метаданные".
Со справочником "Договоры" (из стандартных конф бухучета и усн ) та же история. Пробовал на 2.5.0.5, 2.5.0.7, 3.2.1.0.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Обращение к метаданным через MetaDataWork
Ответ #24 - 19. Июля 2010 :: 08:19
Печать  
trad писал(а) 19. Июля 2010 :: 08:06:
Eprst писал(а) 19. Июля 2010 :: 08:00:
ВычетыСотрудниковПоНДФЛ

вернул Сотрудники..

дай списать (код покажи)


чорт, действительно смотрел не стой конфы.. т.е смотрел с другово зика в зик..
С торговли не прокатило.
Звиняюсь.
  
Наверх
 
IP записан
 
Antes
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 57
Зарегистрирован: 17. Октября 2008
Re: Обращение к метаданным через MetaDataWork
Ответ #25 - 19. Июля 2010 :: 08:26
Печать  
О том и речь!!! Какие есть варианты?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Обращение к метаданным через MetaDataWork
Ответ #26 - 19. Июля 2010 :: 08:34
Печать  
Antes писал(а) 19. Июля 2010 :: 08:26:
О том и речь!!! Какие есть варианты?

Или подождать, пока исправят баг, или взять activemd.dll, к примеру.
  
Наверх
 
IP записан
 
Antes
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 57
Зарегистрирован: 17. Октября 2008
Re: Обращение к метаданным через MetaDataWork
Ответ #27 - 19. Июля 2010 :: 08:45
Печать  
Продолжая тему, предлагаю попробовать еще один пример:
у справочника есть реквизит типа "Справочник.ВидыДоговоров". Вот что видим в отладчике:
_МД.Метаданные.Справочник("Договоры").Реквизит("ВидДоговора").Тип = "Справочник"
_МД.Метаданные.Справочник("Договоры").Реквизит("ВидДоговора").Вид = ""
  
Наверх
 
IP записан
 
Antes
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 57
Зарегистрирован: 17. Октября 2008
Re: Обращение к метаданным через MetaDataWork
Ответ #28 - 20. Июля 2010 :: 13:08
Печать  
Так можно надеяться на исправление данных багов? Не хотелось бы использовать другие библиотеки.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Обращение к метаданным через MetaDataWork
Ответ #29 - 20. Июля 2010 :: 13:40
Печать  
Обращайся к trad-у.. Поправит
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать