8.х ОБМЕН Правильная работа с типом "COM объект"

Тема в разделе "Обмен данными в "1С:Предприятие 8"", создана пользователем Bastrykin_Oleg, 22 авг 2011.

  1. TopicStarter Overlay
    Bastrykin_Oleg
    Offline

    Bastrykin_Oleg

    Регистрация:
    10 ноя 2008
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    1
    Всем доброго времени суток... Пишу впервые, поэтому прошу не судить строго за возможный флуд и некомпетентность с моей стороны. При работе с внешним соединением возникла следующая проблема:

    Запрос = COMсоединение.NewObject("Запрос");
    Запрос.Text = ..............;
    Результат = Запрос.Выполнить().Выгрузить();

    Необходимо выбрать из переменной "Результат" строки по определенному отбору, аналогично методу НайтиСтроки(ПараметрОтбора). Как это реализовать ???

    P.S. Сам метод НайтиСтроки() не работает, я так думаю потому, что "Результат" имеет тип "СОМ объект".
  2. vartanet
    Offline

    vartanet Опытный в 1С Команда форума

    Регистрация:
    16 ноя 2010
    Сообщения:
    2.698
    Симпатии:
    15
    Баллы:
    29
    вроде должен метод отработать.. покажите код полностью.
  3. TopicStarter Overlay
    Bastrykin_Oleg
    Offline

    Bastrykin_Oleg

    Регистрация:
    10 ноя 2008
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    1
    Текст Запроса довольно большой, поэтому приведу только основные выбираемые данные:

    Код:
    
    Функция СформироватьЗапрос(Источник,Параметры)
    Запрос = Источник.Соединение.NewObject("Запрос");
    Запрос.УстановитьПараметр("ДатаНачало",ДатаНачало);
    Запрос.УстановитьПараметр("ДатаКонец" ,КонецДня(ДатаКонец));
    Запрос.УстановитьПараметр("Организация",Источник.Организация);
    
    Запрос.Текст = ПолучитьТекстЗапроса(Источник,Параметры);
    
    Возврат Запрос.Выполнить().Выгрузить();
    
    КонецФункции
    
    Функция ПолучитьТекстЗапроса(Источник,Параметры)
    ТекстЗапроса = "ВЫБРАТЬ
    |	ВложенныйЗапрос.РегистраторСсылка,
    |	ВложенныйЗапрос.ДокументНомер,
    |	ВложенныйЗапрос.ДокументДата КАК ДокументДата,
    |	ВложенныйЗапрос.Контрагент,
    |	ВложенныйЗапрос.Организация,
    |	ВложенныйЗапрос.Номенклатура,
    |	ВложенныйЗапрос.СтавкаНДС,
    |	ВложенныйЗапрос.МетаданныеИсточник,
    |	ВложенныйЗапрос.МетаданныеПриемник               
    Возврат ТекстЗапроса;
    КонецФункции
    </span>
    Функция ОбработатьРезультат(Источник,Параметры)
    ВремТаблица = СформироватьЗапрос(Источник,Параметры);
    Отбор = Новый Структура;
    Отбор.Вставить("МетаданныеПриемник","РеализацияТоваровУслуг");
    
    Возврат ВремТаблица.НайтиСтроки(Отбор); 
    КонецФункции;
    
    
    </FONT></FONT></pre>
    Ошибка при вызове метода контекста (НайтиСтроки)
    Произошла исключительная ситуация: Несоответствие типов (параметр номер '1')
  4. vartanet
    Offline

    vartanet Опытный в 1С Команда форума

    Регистрация:
    16 ноя 2010
    Сообщения:
    2.698
    Симпатии:
    15
    Баллы:
    29
    ВремТаблица - ТаблицаЗначений? если посмотреть в отладчике - там есть строки?
    МетаданныеПриемник - строка?

    PS. когда мне нужно было работать с данными из разных баз, я сначала выдирал все нужные данные из COM-соединения, преобразовывал их в объекты текущей базы (например в ТаблицуЗначений с простыми типами в колонках). а дальше работал как обычно, без заморочек с COM. в вашем случае можно так сделать?
  5. Наташа
    Offline

    Наташа Опытный в 1С

    Регистрация:
    14 авг 2010
    Сообщения:
    1.442
    Симпатии:
    2
    Баллы:
    29
    Попробуйте структуру создавать "на той стороне"
    Код:
    Отбор = Источник.Соединение.NewObject("Структура");
    
  6. TheSerg
    Offline

    TheSerg

    Регистрация:
    17 авг 2011
    Сообщения:
    21
    Симпатии:
    0
    Баллы:
    1
    Код:
    ТекстЗапроса = "ВЫБРАТЬ
    |    ВложенныйЗапрос.РегистраторСсылка,
    |    ВложенныйЗапрос.ДокументНомер,
    |    ВложенныйЗапрос.ДокументДата КАК ДокументДата,
    |    ВложенныйЗапрос.Контрагент,
    |    ВложенныйЗапрос.Организация,
    |    ВложенныйЗапрос.Номенклатура,
    |    ВложенныйЗапрос.СтавкаНДС,
    |    ВложенныйЗапрос.МетаданныеИсточник,
    |    ВложенныйЗапрос.МетаданныеПриемник  
    </span>
    </FONT></FONT></pre>
    По моему тут надо указать источник выборки данных.
    "|ИЗ
    | ДокументОбъект КАК ВложенныйЗапрос"

    Код:
    Отбор.Вставить("МетаданныеПриемник","РеализацияТоваровУслуг");
    
    И тут ты передаешь строковый тип, а может надо типа:
    Код:
    Отбор.Вставить("МетаданныеПриемник",Тип("ДокументСсылка.РеализацияТоваровУслуг"));
    

Поделиться этой страницей