Имя: Пароль:
1C
1C 7.7
v7: Подключение по оле к 8.3
0 LisaAlisa
 
02.02.16
17:08
Добрый день!
Подключение проходит успешно, но почему-то запрос пустой, ТЗ не заполняется

        ИБ_V8= СоздатьОбъект("V83.Application");          
        Попытка
            Открыта=ИБ_V8.Connect("Srvr="""+СокрЛП(ИмяСервера)+""";Ref="""+СокрЛП(ИмяБазы)+""";Usr="""+СокрЛП(Логин)+""";Pwd = """ + СокрЛП(Пасворд) + """;");
            ИБ_V8.Visible = 0;
            Сообщить("База 1с8 открыта!");                                  
            
        Исключение
            Предупреждение("Ошибка открытия базы V8 - "+ОписаниеОшибки());
            
        КонецПопытки;      
        
        Запрос=ИБ_V8.NewOBJECT("Запрос");
        
        Запрос.Текст = "ВЫБРАТЬ
        |    СтраныМира.Код,
        |    СтраныМира.Наименование,
        |    СтраныМира.КодАльфа2,
        |    СтраныМира.КодАльфа3
        |ИЗ
        |    Справочник.СтраныМира КАК СтраныМира";
        
        РезультатЗапроса = Запрос.Выполнить();
        Выборка = РезультатЗапроса.Выбрать();
        Пока Выборка.Следующий() = 1 Цикл
            ТаблицаСтран.НоваяСтрока();
            ТаблицаСтран.Код_1с8 = СокрЛП(Выборка.Код);
            ТаблицаСтран.КодАльфа2_1с8 = СокрЛП(Выборка.КодАльфа2);
            ТаблицаСтран.КодАльфа3_1с8 = СокрЛП(Выборка.КодАльфа3);
            ТаблицаСтран.Наименование_1с8 = СокрЛП(Выборка.Наименование);
        КонецЦикла;
1 DmitrO
 
02.02.16
17:14
ставлю на
Выборка.Следующий() = -1
2 LisaAlisa
 
02.02.16
17:15
(1) почему?
3 DmitrO
 
02.02.16
17:18
потому что значение типа VT_BOOL платформа 1С7 конвертирует в число:
VARIANT_TRUE = -1
VARIANT_FALSE = 0
4 LisaAlisa
 
02.02.16
17:21
(3) большое спасибо!!!
особенно за то, что не поленились объяснить
5 DmitrO
 
02.02.16
17:26
исходный код:

/* 0 == FALSE, -1 == TRUE */
typedef short VARIANT_BOOL;

#define VARIANT_TRUE ((VARIANT_BOOL)-1)
#define VARIANT_FALSE ((VARIANT_BOOL)0)

булевый тип в COM, это 16 разрядное знаковое число, для Истина все биты заполнены, для Ложь все биты сняты.

А 7.7, по простоте душевной числом его и передает, и по скольку число вроде как знаковое, то -1 в дополнительном двоичном коде и есть все биты установлены (0xFFFF).
6 DmitrO
 
02.02.16
17:27
чета я сегодня разболтался..
7 Serginio1
 
02.02.16
17:37
(6) Или что бы мозги не пудрить
Выборка.Следующий() <> 0