Имя: Пароль:
1C
1С v8
подключение к 1с7,прямые запросы, MetaDataWork
0 zladenuw
 
26.09.12
14:36
Делаю вот так

Попытка
       МетаИнфоОЛЕ=Соединение.CreateObject("MetaDataWork");
       МетаИнфоОЛЕ.ПрисоединитьМД(ПутьКБазе+"1cv7.md");
   Исключение
       Сообщить(ОписаниеОшибки());
   КонецПопытки;
   
   
   Попытка
       OLEDBData = Соединение.CreateObject("OLEDBData");
       СтрокаСоединения = "Provider=VFPOLEDB.1;Data Source=" + ПутьКБазе + ";Mode=ReadWrite;Collating Sequence=MACHINE;OLE DB Services=0";
       Подключение = OLEDBData.Соединение(СтрокаСоединения);
       Если Подключение Тогда
           Запрос = OLEDBData.СоздатьКоманду();            
       КонецЕсли;
   Исключение
       Сообщить(ОписаниеОшибки());
   КонецПопытки;
   
   ТекстЗапроса = "SELECT
   |Спр.Code as Код,
   |Спр.Descr as Наименование
   |FROM
   |$Справочник.ТМЦ as Спр";
   ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);

Пишет.  Ошибка при вызове метода контекста (ПрисоединитьМД): Типы не совпадают (1)

Или так нельзя ?

И еще. как перебрать ТЗ если у нее тип СОМОбъект.
1 Ёпрст
 
гуру
26.09.12
14:39
а при чем тут снеговик ?
2 zladenuw
 
26.09.12
14:41
с него иду в 7
3 zladenuw
 
26.09.12
14:42
с ТЗ разобрался. а вот можно ли использовать MetaDataWork
4 viktor_vv
 
26.09.12
14:42
А со слэшами в пути к МД все нормально ?
5 zladenuw
 
26.09.12
14:44
(4) да
6 Ёпрст
 
гуру
26.09.12
14:47
ты по оле пытаешься прямой запрос выполнить в базе 1с-ной ?
7 Ёпрст
 
гуру
26.09.12
14:47
ну и изврат..
8 Jaap Vduul
 
26.09.12
14:48
Видимо проблема в этом (в 8.x - юникод):
case procAttachMD:
           {
               if (ppValue[0]->GetTypeCode() != STRING_TYPE_1C)
                                       RuntimeErrorRes(4712); //Неверный тип параметра

               if (ppValue[0]->GetString().IsEmpty())
                   UnloadMD(m_pMetaDataCont);
               else if (!LoadMD(ppValue[0]->GetString(), m_pMetaDataCont))
                                       RuntimeErrorRes(28771); //Ошибка загрузки метаданных.

               m_MetaNameParser.SetIBProp(m_pMetaDataCont, &NativeIBSet);
           }
9 zladenuw
 
26.09.12
14:50
ну нравится мне оле. просто чтение в разы быстрее прямым запросом.
10 zladenuw
 
26.09.12
14:50
(8) жаль.
11 orefkov
 
26.09.12
14:55
(0)
А зачем ПрисоединятьМД то?
Ты что-ли по оле коннектишся к одной базе, а из нее запрос делаешь в другую?
12 zladenuw
 
26.09.12
14:57
(11) я вообще хотел попробовать.
13 zladenuw
 
26.09.12
15:04
а если у меня есть внутр представление объекта. как с помощью прямого запроса получить его или только в оле Соединение.ЗначениеИзСтрокиВнутр(СтрПредОбъекта) ?
14 zladenuw
 
26.09.12
15:05
и где вообще можно найти англ сп для 1с7. :(
15 Ёпрст
 
гуру
26.09.12
15:09
(13)
1.запросом , например
2.сервис-параметры - использовать оба языка (галка)
16 zladenuw
 
26.09.12
15:14
(15) уже нашел. но видел что есть недокументированные фичи для 27. где шаблончик найти можно ? :)
а как ?  хотя если написать хранимку. то этот вопрос отпадает, только теперь другой вопрос что писать в хранимке :)
17 zladenuw
 
26.09.12
15:15
function _GetObj(id) export
   return ValueFromStringInternal(id);
endfunction  

Так ?
18 zladenuw
 
26.09.12
15:17
(17) че гадать. буду смотреть.  
Да и не удалось пока победить реквизиты строковые в прямом запросе :(
19 Ёпрст
 
гуру
26.09.12
15:41
(16) http://www.mista.ru/download1c/metadata_als.zip
(17) це же не запрос :)
(18) какие имено реквизиты ?
20 zladenuw
 
26.09.12
15:43
создал хранимку. но как указать что нужно использовать метод ValueFromStringInternal. а то пишет . что нету такой prg
21 zladenuw
 
26.09.12
15:44
(19) где тип строка. в той злой таблице все строковые хранятся ? без разницы какой длины ?
22 zladenuw
 
26.09.12
15:45
(19) спасибо за файлик :)
23 zladenuw
 
26.09.12
15:46
пытаюсь сделать так.
       ТекстЗапроса = "
           |SELECT
           |      Спр.*
           |FROM $Справочник.ТМЦ as Спр
           |where Спр.ID as [Элемент $Справочник.ТМЦ] =:Ссылка ";
   Запрос.УстановитьТекстовыйПараметр("Ссылка", Объект);        
   ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);

Посылает в далекое :)
24 zladenuw
 
26.09.12
16:04
(23) и все таки. почему не хочет работать
Если так
       ТекстЗапроса = "
           |SELECT
           |      Спр.ID as [Элемент $Справочник.ТМЦ]
           |FROM $Справочник.ТМЦ as Спр ";
           //|where Спр.ID as [Элемент $Справочник.ТМЦ] =:Ссылка ";
   //Запрос.УстановитьТекстовыйПараметр("Ссылка", Объект);        
   ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);

Смотрю в отладчике Элемент  это и есть ссылка. что делаю не так