Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Горячая тема (более 10 ответов) 77 MetaDataWork ошибается. Реквизит = Периодический (число прочтений - 4943 )
dsclue
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 49
Местоположение: Санкт-Петербург
Зарегистрирован: 15. Апреля 2015
Пол: Мужской
77 MetaDataWork ошибается. Реквизит = Периодический
15. Июля 2015 :: 10:37
Печать  
по одному из периодических реквизитов у справочника MetaDataWork дает ошибку:
вместо 3649 дает 3647
IDреквизита = );

Что делать подскажите
  
Наверх
 
IP записан
 
dsclue
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 49
Местоположение: Санкт-Петербург
Зарегистрирован: 15. Апреля 2015
Пол: Мужской
Re: 77 MetaDataWork ошибается. Реквизит = Периодический
Ответ #1 - 15. Июля 2015 :: 11:45
Печать  
уточняю: Все реквизиты Число, те что читаются правильно Длина = 1, у неправильного 15.2
Наверно, надо сделать Тестирование и Исправление?
  
Наверх
 
IP записан
 
dsclue
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 49
Местоположение: Санкт-Петербург
Зарегистрирован: 15. Апреля 2015
Пол: Мужской
Re: 77 MetaDataWork ошибается. Реквизит = Периодический
Ответ #2 - 15. Июля 2015 :: 11:49
Печать  
да вот ещё: база сиквельная, 2005, распределенка,
МетаРозн.ИДОбъекта() читаю в центральной мд-хе
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: 77 MetaDataWork ошибается. Реквизит = Периодический
Ответ #3 - 20. Июля 2015 :: 06:06
Печать  
передавать метаданные ТОЙ базы, а не этой вестимо.
  
Наверх
 
IP записан
 
dsclue
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 49
Местоположение: Санкт-Петербург
Зарегистрирован: 15. Апреля 2015
Пол: Мужской
Re: 77 MetaDataWork ошибается. Реквизит = Периодический
Ответ #4 - 20. Июля 2015 :: 07:05
Печать  
Eprst, естественно, я подключаюсь к мд-хе базы, из которой читаю:

База        = СоздатьОбъект("ODBCDataBase");
ЗапросКБазе = СоздатьОбъект("ODBCRecordSet");
МетаРозн    = СоздатьОбъект("MetaDataWork");

База.ПрисоединитьИБ( глПуть,"Контролер","");
База.УстТолькоЧтение(1);
ЗапросКБазе.УстБД(База);

МетаРозн.ПрисоединитьМД( глПуть+"1Cv7.md");

когда читаю ВСЕ периодические реквизиты справочника "значID"
то не вижу нужного ИД, что дает по этому реквизиту MetaDataWork :
3649, а не 3647
     |SELECT
     |   ID,
     |      cast(value as numeric("+_Длина+","+_Точность+")) VALUE,
     |      _1SCONST.DATE
     | FROM  _1SCONST
     |
     | WHERE
     |      (OBJID = :значID)
     |";

     ЗапросКБазе.УстановитьТекстовыйПараметр("значID",      значID);

     ТЗнСтр = ЗапросКБазе.ВыполнитьИнструкцию(ТекстОснЗапроса);

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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: 77 MetaDataWork ошибается. Реквизит = Периодический
Ответ #5 - 20. Июля 2015 :: 08:01
Печать  
Ты передаешь метаданные ЭТОЙ базы. А нужно - той.
Вот и возвращает тебе id ЭТОЙ базы , а не удаленной.
  
Наверх
 
IP записан
 
dsclue
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 49
Местоположение: Санкт-Петербург
Зарегистрирован: 15. Апреля 2015
Пол: Мужской
Re: 77 MetaDataWork ошибается. Реквизит = Периодический
Ответ #6 - 20. Июля 2015 :: 08:14
Печать  
т.е.
МетаРозн.ИДОбъекта(Метаданные.Справочник(мИмяСправочника).Реквизит(нрекв));
дает ид этой базы?
Метаданные.Справочник(мИмяСправочника).Реквизит(нрекв) - это НЕправильно?
конфигурации одинаковые.
Да наверно Ты прав.
Стало быть для "ИДОбъекта" правильный параметр д.б.:
МетаРозн.Справочник(мИмяСправочника).Реквизит(нрекв) ??

попробовал использовать ИДРеквизитаСправочника:
МетаРозн.ИДРеквизитаСправочника( "Номенклатура", Метаданные.Справочник("Номенклатура").Реквизит(нрекв).Идентификатор);

Сработало Правильно!
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: 77 MetaDataWork ошибается. Реквизит = Периодический
Ответ #7 - 20. Июля 2015 :: 08:16
Печать  
>>>Метаданные.Справочник(мИмяСправочника).Реквизит(нрекв)

вот это - метаданные Этой базы.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: 77 MetaDataWork ошибается. Реквизит = Периодический
Ответ #8 - 20. Июля 2015 :: 08:18
Печать  
Ну и..всё это не нужно. Пользуйся метапарсером - он сам умеет подставлять нужные id от нужных баз.

Тем более, что для скуля есть $ПоследнееЗначение, хотя, можно и ручонками к _1sconst

ЗЫ:+ пользуй $ИсторияРеквизита
  
Наверх
 
IP записан
 
dsclue
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 49
Местоположение: Санкт-Петербург
Зарегистрирован: 15. Апреля 2015
Пол: Мужской
Re: 77 MetaDataWork ошибается. Реквизит = Периодический
Ответ #9 - 20. Июля 2015 :: 08:29
Печать  
не понял:

в ИДОбъекта нужно подставить метаданные ТОЙ базы, потому Метаданные.Справочник(мИмяСправочника).Реквизит(нрекв) не пройдет.
как в МетаРозн.ИДОбъекта(...... поставить мета ТОЙ базы НЕ понял.

зато ИДРеквизитаСправочника("строка","строка") работает!
стало быть Синтаксис: ИДОбъекта(ОбъектМетаданных) вообще для другой базы не катит.
подставить нечего?????
  
Наверх
 
IP записан
 
dsclue
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 49
Местоположение: Санкт-Петербург
Зарегистрирован: 15. Апреля 2015
Пол: Мужской
Re: 77 MetaDataWork ошибается. Реквизит = Периодический
Ответ #10 - 20. Июля 2015 :: 08:35
Печать  
а где взять $ИсторияРеквизита ???

$ПоследнееЗначение есть http://www.1cpp.ru/docum/icpp/html/ODBC.html
Синтаксис:
$ПоследнееЗначение.{<ИмяСправочника> | Константа}.{<ИмяРеквизита | ИмяКонстанты>}(
       <ИдОбъекта>, <Дата>[, <Время>[, <ИДДокумента>]]
)
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: 77 MetaDataWork ошибается. Реквизит = Периодический
Ответ #11 - 20. Июля 2015 :: 08:38
Печать  
Код
Выбрать все
Процедура Сформировать()
    
    
    рс=создатьОбъект("ODBCRecordSet");
    
     ТекстЗапроса = "
    |SELECT
    |    СпрНаш.DESCR as КлиентосВЭтойбазе  -- наименование клиентоса в  этой базе
    |    ,Спр.DESCR as КлиентосВУдаленнойБазе --наименование клиентоса в удаленной базе
	|    ,@ПоследнееЗначение.Контрагенты.ИмяРеквизита(СпрНаш.id) as Вася --значение периодики в той базе
    |FROM $Справочник.Контрагенты СпрНаш (nolock)
    |left join dataBase2.dbo.@Справочник.Контрагенты Спр (nolock) on СпрНаш.Code = Спр.Code --синхронизация будет по коду, к примеру
	|
    |";    
    глМД = СоздатьОбъект("MetaDataWork");
    ТекстЗапроса=глМД.ОбрМетаСКЛ(ТекстЗапроса);
    глМД2 = СоздатьОбъект("MetaDataWork");
    ПутьКБазе2 = "D:\полный путьк базе данных\";
    глМД2.ПрисоединитьМД(ПутьКБазе2+"1Cv7.md");
    ТекстЗапроса=СтрЗаменить(ТекстЗапроса,"@","$");
    ТекстЗапроса=глМД2.ОбрМетаСКЛ(ТекстЗапроса);
    
    Т = рс.ВыполнитьИнструкцию(ТекстЗапроса);
    Т.ВыбратьСтроку();

КонецПроцедуры 




+
$ИсторияРеквизита
http://www.1cpp.ru/docum/html/ODBC.html#id32
  
Наверх
 
IP записан
 
dsclue
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 49
Местоположение: Санкт-Петербург
Зарегистрирован: 15. Апреля 2015
Пол: Мужской
Re: 77 MetaDataWork ошибается. Реквизит = Периодический
Ответ #12 - 20. Июля 2015 :: 08:47
Печать  
Историю нашел ,Спасибо. НО
я оставлю без метапарсера
с "ИДРеквизитаСправочника"
IDреквизита = МетаРозн.ИДРеквизитаСправочника( мИмяСправочника, Метаданные.Справочник(мИмяСправочника).Реквизит(нрекв).Идентификатор);
     ТекстОснЗапроса = "
     |SELECT
     |      cast(value as numeric("+_Длина+","+_Точность+")) VALUE,
     |      _1SCONST.DATE
     | FROM  _1SCONST
     |
     | WHERE
     |      (OBJID = :значID) AND (ID = :IDреквизита)
     |";
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: 77 MetaDataWork ошибается. Реквизит = Периодический
Ответ #13 - 20. Июля 2015 :: 08:53
Печать  
Код
Выбрать все
    | WHERE
     |	(OBJID = :значID) AND (ID = $ИсторияРеквизита.Вася.РеквизитВаси) 

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


1C++ rocks!

Сообщений: 49
Местоположение: Санкт-Петербург
Зарегистрирован: 15. Апреля 2015
Пол: Мужской
Re: 77 MetaDataWork ошибается. Реквизит = Периодический
Ответ #14 - 20. Июля 2015 :: 08:58
Печать  
понял, но у меня универсалка - читаю ВСЕ периодические реквизиты, т.е.
прописать в коде напрямую
|      (OBJID = :значID) AND (ID = $ИсторияРеквизита.Вася.РеквизитВаси)
что есть:
|      (OBJID = :значID) AND (ID = $ИсторияРеквизита.Номенклатура.РознЦена)

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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: 77 MetaDataWork ошибается. Реквизит = Периодический
Ответ #15 - 20. Июля 2015 :: 09:07
Печать  
чей то ?
Собирай запрос динамически

Текст ="......ID = $ИсторияРеквизита."+ИмяСправочника+"."+ИмяРеквизита;
  
Наверх
 
IP записан
 
dsclue
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 49
Местоположение: Санкт-Петербург
Зарегистрирован: 15. Апреля 2015
Пол: Мужской
Re: 77 MetaDataWork ошибается. Реквизит = Периодический
Ответ #16 - 20. Июля 2015 :: 09:12
Печать  
всё сдаюсь - сделал как Ты сказал:

| WHERE
|      (OBJID = :значID) AND (ID = $ИсторияРеквизита."+ИмяСпрИреквизита+")

СПАСИБО Большое.
  
Наверх
 
IP записан
 
dsclue
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 49
Местоположение: Санкт-Петербург
Зарегистрирован: 15. Апреля 2015
Пол: Мужской
Re: 77 MetaDataWork ошибается. Реквизит = Периодический
Ответ #17 - 24. Июля 2015 :: 20:48
Печать  
Спасибо, Друзья - написал, работает
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать