Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема ADO + 1C Help please !!! (число прочтений - 3745 )
AVenger
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 40
Зарегистрирован: 08. Января 2009
ADO + 1C Help please !!!
08. Января 2009 :: 08:10
Печать  
Доброго времени суток. Объясните пожалуйста как преобразовать ID значения из DBF базы в 1С значение при помощи ADO как это делает ВК 1С++ в нижеприведенном примере:
ТекстКоманды = "
|SELECT  
|   Спр.Descr as Наименование,
|      $Спр.БазоваяЕдиница as [Ед $Справочник.Единицы]
|FROM
|      $Справочник.Номенклатура as Спр
|";
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


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

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: ADO + 1C Help please !!!
Ответ #1 - 08. Января 2009 :: 09:31
Печать  
А отчего не 1С++?
Ну можно ЗначениеИзСтрокиВнутр()
  

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


1C++ rocks!

Сообщений: 40
Зарегистрирован: 08. Января 2009
Re: ADO + 1C Help please !!!
Ответ #2 - 08. Января 2009 :: 09:42
Печать  
Хотелось бы посмотреть как через ADO делается. Делал с помощью этой функции ничего не выходит и _IdToStr() b _StrToID().
Если есть пример покажите :
Пока RS.EOF=0 цикл
СТ = RS.Fields("SP86").Value;
CT1 = ЗначениеИзСтрокиВнутр(СТ);
КонецЦикла;
  
Наверх
 
IP записан
 
Burlak
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 65
Зарегистрирован: 28. Апреля 2008
Re: ADO + 1C Help please !!!
Ответ #3 - 08. Января 2009 :: 21:54
Печать  
А так не пытались:

//-- Вычислим индекс вида Справочник.Номенклатура
  id_ВидНоменклатура=Сред(fun_МетаПарсер("$ВидСправочника36.Номенклатура"),2,4);

где:
//-- Преобразуем текст sql запроса из 1С-версии в OLEDB-версию
//-------------------------------------------------------------
Функция fun_МетаПарсер(sql_МетаТекст) Экспорт
  Попытка
     Возврат mdw.ОбрМетаСКЛ(sql_МетаТекст);
    Исключение
     Возврат "";
  КонецПопытки;
КонецФункции

и

mdw=CreateObject("MetaDataWork");

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


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

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: ADO + 1C Help please !!!
Ответ #4 - 08. Января 2009 :: 23:23
Печать  
Если уж совсем без ВК:

Стр = "{" +"""B"""+","+"""0"""+","+"""0"""+","+"""15"""+","+"""0"""+","+"""0"""+","+"""         2   """+"}";
     Сообщить(ЗначениеИзСтрокиВнутр(Стр));

Подставить нужно свое
B - это тип (спр-к в данном случае)
15 - его вид
2 - ИД

Расшифровку можно раскопать поиском
  

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


1C++ rocks!

Сообщений: 40
Зарегистрирован: 08. Января 2009
Re: ADO + 1C Help please !!!
Ответ #5 - 09. Января 2009 :: 07:40
Печать  
Делаю так :
Код
Выбрать все
Conn = CreateObject("ADODB.Connection")
Conn.ConnectionString = СтрокаПодключения;
Command = CreateObject("ADODB.Command");
Command.ActiveConnection = СтрокаПодключения;
ТК = "
|SELECT
| Спр.Descr AS Наименование,
| Спр.SP
|from
| SC84 AS Спр"; // Это у меня Справочник.Номенклатура
Command.CommandText = ТК;
RS = Command.Execute;
Пока RS.EOF()=0 цикл
  Наименование = RS.Fields("Descr").Value;
  БазоваяЕдиница = RS.Fields("SP86").Value; // А это в Справочнике.Номенклатура реквизит Справочник.Единицы
  Сообщить("Наименование - "+Наименование+" , ед. изм. - "+БазоваяЕдиница);
  RS.MoveNext();
КонецЦикла;
 


При выполнении этого кода выводит следующие данные : "Наименование - МояНоменклатура, ед. изм. - 1F".
Как получить объект "Единица" если в DBF он в строковом выражении и функции "ЗначениеВСтрокуВнутр()",  "ЗначениеИзСтрокиВнутр()",_IdToStr(), _StrToId() не помогают. При использовании функции ТипЗначенияСтр(БазоваяЕдиница) показывает что это строка. При использовании ЗначениеВСтрокуВнутр(БазоваяЕдиница) показывает следующее : {"S","0","0","0","0","0","    1F   "}. При использовании _IDToStr(БазоваяЕдиница) показывает : 1F. При использовании _StrToID(БазоваяЕдиница) показывает : 0.
А хотелось бы увидеть как при использовании ВК 1С++ при следующем коде:
Код
Выбрать все
DataBase = CreateObject("ODBCDataBase");
DataBase.Attach1C();
RS = CreateObject("ODBCRecordSet");
RS.SetDataBase(DataBase);
TK = "
|SELECT
|Спр.Descr AS Наименование,
|$Спр.БазоваяЕдиница AS [ед. изм. $Справочник.Единицы] // Здесь происходит типизация колонок
|FROM
|SC84 AS Спр";
ТЗ = СоздатьОбъект("ТаблицаЗначений");
RS.ВыполнитьИнструкцию(TK, ТЗ) 


При переборе ТЗ получаем следующие данные : "Номенклатура - МояНоменклатура, ед. изм. - шт". Как добится такого результата без использования 1С++ ???. Буду благодарен всем высказавшим свое мнение даже если сделать этого не получится.
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


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

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: ADO + 1C Help please !!!
Ответ #6 - 09. Января 2009 :: 09:22
Печать  
Чукча не читатель?
{"S","0","0","0","0","0","    1F   "} - подставляй сюда свое 1F и ЗначениеИзСтрокиВнутр(ТвояСтрока)
  

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


1C++ rocks!

Сообщений: 40
Зарегистрирован: 08. Января 2009
Re: ADO + 1C Help please !!!
Ответ #7 - 09. Января 2009 :: 10:12
Печать  
Как перевести из 1F в тот ИД который нужен, и если можно пример написать как подставлять значения. Я тока 2-ой день этим занимаюсь.
Сделал вот так :
Код
Выбрать все
Стр = "{" азоваяЕдиница+""""+"}"; 

С помощью функции отделил ИД, получается не на всех. При выполнении следующего кода пишет :
"Номенклатура - МояНоменклатура, ед. изм - "
"Номенклатура - МояНоменклатура2, ед. изм - шт."
"Номенклатура - МояНоменклатура3, ед. изм - <Объект не найден> (108/)"
"Номенклатура - МояНоменклатура3, ед. изм - <Объект не найден> (109/)"

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


1C++ rocks!

Сообщений: 40
Зарегистрирован: 08. Января 2009
Re: ADO + 1C Help please !!!
Ответ #8 - 09. Января 2009 :: 10:40
Печать  
СПАСИБО ВСЕМ ОБРАТИВШИМ НА ЭТОТ ВОПРОС  СВОЕ ВНИМАНИЕ И ЗА ПОМОЩЬ ОКАЗАННУЮ ПРИ РЕШЕНИИ ЭТОГО ВОПРОСА !!!
Сделал вот так :
Код
Выбрать все
Стр = "{" StrToID(СокрЛП(БазоваяЕдиница))+""""+"}";
 


И все заработало !!!
З.Ы. Через тернии к звездам !!!
  
Наверх
 
IP записан
 
Burlak
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 65
Зарегистрирован: 28. Апреля 2008
Re: ADO + 1C Help please !!!
Ответ #9 - 10. Января 2009 :: 18:47
Печать  
>AVenger
>Сделал вот так :

А так не проходит?
id_ВидЕдиницы=Сред(fun_МетаПарсер("$ВидСправочника36.Единицы"),2,4);
Пока RS.EOF=0 цикл
СТ1 = id_ВидЕдиницы+RS.Fields("SP86").Value;
КонецЦикла;
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать