Имя: Пароль:
1C
1С v8
ОЛЕ из 7.7. "Типы не совпадают (0)". Подскажите, пожалуйста, как лечиться.
0 batmansoft
 
17.02.14
12:15
Добрый день. Гружу данные из 7.7 в 8.2 по ОЛЕ.
Делаю так:
        если мСклады.НайтиПоРеквизиту("МОЛ",Запрос.МОЛ,1)=0 тогда
            Предупреждение("Не найден склад для МОЛ ",Запрос.МОЛ.Наименование);
            возврат;
        конецесли;

Выдает:
"{ВнешняяОбработка.ЗагрузкаИЗТИС.МодульОбъекта(243)}: Ошибка при установке значения атрибута контекста (МОЛ)
        если мСклады.НайтиПоРеквизиту("МОЛ",Запрос.МОЛ,1)=0 тогда
по причине:
Типы не совпадают (0)
"
Смотрю в отладчике Запрос.МОЛ.Вид(), говорит "ФизЛица", все верно, это я запросом цепляю из 7.7 остатки по партиям, измерение МОЛ.
Реквизит МОЛ у справочника склад тоже справочник ФизЛица.
Так чего ему не нравится?
1 ДенисЧ
 
17.02.14
12:16
Ему не нравится прокладка между стулом и клавиатурой, которая даже не думает почитать маленько о типах данных в оле-соединении
2 dedmoroz777
 
17.02.14
12:17
Ему не нравится, что тебе лень ткнуть кнопку Я справа, в углу
3 Builder
 
17.02.14
12:24
Вкратце - по OLE можно передавать только простые типы данных - строка, число и дата.
Собственно все поиски делать по кодам/ наименованиям.
4 batmansoft
 
17.02.14
12:40
(3) Спасибо, попробую тогда как нибудь так извратиться, запросом сделать поиск по коду МОЛ-а
5 batmansoft
 
17.02.14
12:57
вот такой код прокатывает:
"        лЗапрос = OLE.CreateObject("Запрос");
        лТекстЗапроса =
        "//{{ЗАПРОС(Сформировать)
        |ТекущийЭлемент = Справочник.Склады.ТекущийЭлемент;
        |Код = Справочник.Склады.МОЛ.Код;
        |Группировка ТекущийЭлемент;
        |Условие(Код="+Запрос.МОЛ.Код+");
        |"//}}ЗАПРОС
        ;
        // Если ошибка в запросе, то выход из процедуры
        Если лЗапрос.Выполнить(лТекстЗапроса) = 0 Тогда
            Предупреждение("В семерке не выполнился запрос к складам");
            Возврат;
        КонецЕсли;

        если лЗапрос.Группировка(1) = 1 тогда
            млСклады=лЗапрос.ТекущийЭлемент;
        иначе
            Предупреждение("Не найден склад для МОЛ "+Запрос.МОЛ.Наименование);
            возврат;
        Конецесли;;
"
6 batmansoft
 
17.02.14
13:21
Только вот что мне тогда непонятно, почему тогда работает код типа:
мБаза.String(КакойТоТамОЛЕОбъектТипаДокументИЛИСправочник)
7 Рэйв
 
17.02.14
13:22
(0)потому что возвращает строку
8 batmansoft
 
17.02.14
13:25
(7) Дык а передается то то не строка.
9 Builder
 
17.02.14
13:45
(8) А преобразовывает то в строку :)
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой