Делаю так :
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С++ ???. Буду благодарен всем высказавшим свое мнение даже если сделать этого не получится.