8.х ОБМЕН Подключение ИБ через COM-Объект и получение данных

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

  1. TopicStarter Overlay
    Pol
    Offline

    Pol Опытный в 1С

    Регистрация:
    23 июн 2011
    Сообщения:
    84
    Симпатии:
    0
    Баллы:
    26
    Доброго времени суток. Прошу вашего мудрого совета. Задача следующая. Нужно подключится программно к другой базе 1с и вытащит данные по себестоимости товара.

    Решил данную задачу лишь на половину. Подключился к базе но вот вытащить данные не удалось а точнее удалось вытащить только примитивные типы данных (число, строка, булево) но этого явно не достаточно. Ниже опишу код который использовал.

    Код:
    //Подключение к другой базе 1с /////////////////////////////////////////////////////////////////////
    
    V8 = Новый COMОбъект("V82.COMConnector");
    Попытка
    Base_COM = V8.Connect("Usr="""+ИмяПользователя+""";Pwd="""+Пароль+""";File="""+ ПутьКБазе +"""");
    Исключение
    Предупреждение ("Ошибка открытия информационной базы");
    КонецПопытки;
    /////////////////////////////////////////////////////////////////////////////////////////////////////
    
    Подключается к базе без проблем. Вот дальше нужно запросом вытащить данные из регистра бухгалтерии.
    Для этого пишу следующий код.

    Код:
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    | Base_COM.ТиповойОстатки.Счет,
    | Base_COM.ТиповойОстатки.Субконто1,
    | Base_COM.ТиповойОстатки.СуммаОстаток
    |ИЗ
    | Base_COM.РегистрБухгалтерии.Типовой.Остатки(&Дата, , , ) КАК ТиповойОстатки
    |ГДЕ
    | Base_COM.ТиповойОстатки.Счет = &Счет";
    Запрос.УстановитьПараметр("Дата",Дата);
    Запрос.УстановитьПараметр("Счет",Счет);
    Результат = Запрос.Выполнить().Выгрузить();
    
    Этот код не работает выдает ошибку. Ок пишу другой код.

    Код:
    Регистр = Base_COM.РегистрыБухгалтерии.Типовой;
    Отбор = Новый Структура("Субконто1,Организация,Счет",Номенклатура,Организация,Счет);
    ВыборкаЗаписей = Регистр.Остатки(Дата,ВидСубконто,Отбор);
    ..
    Аналогично код не работает.

    Проблема состоит в том как я понял что Com-Объект как бы не понимает ссылочный тип данных которой я от него хочу получить. И скорее всего я неправильно хочу получить эти данные.
    Вообщем уважаемые форумчане если кто знает как через COM-Объект из регистра бухгалтерии вытащить себестоимость товара то будте так добры отписаться заранее спасибо.
  2. n.s.gnedash
    Offline

    n.s.gnedash Опытный в 1С Команда форума

    Регистрация:
    15 авг 2010
    Сообщения:
    1.358
    Симпатии:
    5
    Баллы:
    29
    Преобразуй все в строку, ком только строку понимает, или же подключайся из ИСТОЧНИКА в ПРИЕМНИК тогда все типы будут как типы, при записи в приемник будешь преобразовывать их
  3. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    можно так
    Код:
    Запрос = Base_COM.NewObject("Запрос");
    Запрос.Текст = "ВЫБРАТЬ
    | ТиповойОстатки.Счет,
    | ТиповойОстатки.Субконто1,
    | ТиповойОстатки.СуммаОстаток
    |ИЗ
    | РегистрБухгалтерии.Типовой.Остатки(&Дата, , , ) КАК ТиповойОстатки
    |ГДЕ
    | ТиповойОстатки.Счет.Код = &Счет";
    Запрос.УстановитьПараметр("Дата",Дата);
    Запрос.УстановитьПараметр("Счет",Счет.Код);
    Результат = Запрос.Выполнить().Выгрузить();
    
    объекты, передаваемые в базу через коннектор должны быть созданы в той базе, структуры и запросы через коннектор не передаются, так же как не передаются и ссылочные типы из текущей базы. если вы получили ссылочный тип из коннектора, его можно передавать в качестве параметров
  4. web.num
    Offline

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

    Регистрация:
    6 окт 2011
    Сообщения:
    905
    Симпатии:
    4
    Баллы:
    29
    Вот тебе пример. Выше было сказано верно ИСТОЧНИК и ПРИЕМНИК. Этот код в приемнике:
    Код:
     COMConnector = Новый COMObject("V82.COMConnector");
    Попытка
    
    V8 = COMConnector.Connect( "Srvr="+"СЕРВЕР ИСТОЧНИКА"+
    ";Ref="+"TEMP_BASE_ANY"+
    ";Usr="+"""ВАСЯ ИВАНОВ"""+";Pwd="+"pfobnf;");
    
    Запрос = V8.NewObject("Запрос");
    
    Запрос.Текст = "ВЫБРАТЬ
    | ПоступлениеТоваровУслуг.Ссылка,
    | ПоступлениеТоваровУслуг.ЭтоВозврат,
    | ПоступлениеТоваровУслуг.НеИспользоватьПартию
    |ИЗ
    | Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
    |ГДЕ
    | (ПоступлениеТоваровУслуг.НеИспользоватьПартию = ИСТИНА
    |   ИЛИ ПоступлениеТоваровУслуг.ЭтоВозврат = ИСТИНА)";
    
    РезультатV8 = Запрос.Выполнить();
    
    Если НЕ РезультатV8.Пустой() Тогда
    
    ВыборкаV8 = РезультатV8.Выбрать();
    
    ЭлементыФормы.ИндикаторПрогресса.МаксимальноеЗначение = ВыборкаV8.Count();
    ЭлементыФормы.ИндикаторПрогресса.МинимальноеЗначение  = 0;
    
    ИндикаторПрогресса = 0;
    
    Пока ВыборкаV8.Следующий() Цикл
    
    ТекущийДокумент   = ВыборкаV8.Ref;
    Партия	  = ВыборкаV8.НеИспользоватьПартию;
    фВозврат	 = ВыборкаV8.ЭтоВозврат;
    ИДТекущийДокумент = Новый УникальныйИдентификатор(V8.String(ВыборкаV8.Ссылка.Ref.УникальныйИдентификатор()));
    
    ДокументДляИсправления   = Документы.ПоступлениеТоваровУслуг.ПолучитьСсылку(ИДТекущийДокумент);
    
    Если НЕ ДокументДляИсправления = Документы.ПоступлениеТоваровУслуг.ПустаяСсылка() Тогда
    
    ОбъектДокумент = ДокументДляИсправления.ПолучитьОбъект();
    
    Если НЕ ОбъектДокумент = Неопределено Тогда
    
    ОбъектДокумент.ОбменДанными.Загрузка= Истина;
    
    ОбъектДокумент.НеИспользоватьПартию = Партия;
    ОбъектДокумент.ЭтоВозврат   = фВозврат;
    
    ОбработкаПрерыванияПользователя();
    ОбъектДокумент.Записать();
    КонецЕсли;
    
    КонецЕсли;
    
    ИндикаторПрогресса = ИндикаторПрогресса + 1;
    
    КонецЦикла;
    
    КонецЕсли;
    
    Исключение
    Сообщить(""+ ОписаниеОшибки());
    КонецПопытки;
    
    А это что бы отключиться:
    Код:
     V8		   = Неопределено;
    COMConnector = Неопределено;
    
  5. TopicStarter Overlay
    Pol
    Offline

    Pol Опытный в 1С

    Регистрация:
    23 июн 2011
    Сообщения:
    84
    Симпатии:
    0
    Баллы:
    26
    Спасибо за ответ я вам очень благодарен. Вы мне очень помогли. Так же хочу поблагодарить Web.num и n.s. gnedash
  6. n.s.gnedash
    Offline

    n.s.gnedash Опытный в 1С Команда форума

    Регистрация:
    15 авг 2010
    Сообщения:
    1.358
    Симпатии:
    5
    Баллы:
    29
    параметр счета лучше задавай в ВТ ( в скобочках где и дата)

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