|
типы в com соединении |
☑ |
0
semiluki
09.10.21
✎
18:20
|
Коллеги подскажите пожалуйста как через com соединение передать в запрос на стороне приемника типы документов. Делаю так
Для Каждого ЭлементМассива Из ТипыДокументов Цикл
Если ЭлементМассива = Тип("ДокументСсылка.ВозвратТоваровОтКлиента") Тогда
Тип = ОбъектИБ.NewObject("ОписаниеТипов","ДокументСсылка.ВозвратТоваровОтПокупателя").Типы().Получить(0);
ИначеЕсли ЭлементМассива = Тип("ДокументСсылка.ВозвратТоваровПоставщику") Тогда
Тип = ОбъектИБ.NewObject("ОписаниеТипов","ДокументСсылка.ВозвратТоваровПоставщику").Типы().Получить(0);
КонецЕсли;
ТипыДокументовПриемник.Добавить(Тип);
КонецЦикла;
Запрос = ОбъектИБ.NewObject("Запрос");
Запрос.УстановитьПараметр("ТипыДокументов",ТипыДокументовПриемник);
Запрос.Текст = " Выбрать * из МойРегистр
|ГДЕ
|
| ТИПЗНАЧЕНИЯ(МойРегистр.Регистратор) В (&ТипыДокументов)
Вываливается с ошибкой нельзя сравнивать поля неограниченной длины и не совместимых типов. Что я делю не так?
|
|
1
TormozIT
гуру
09.10.21
✎
18:48
|
Все не примитивные типы в 1С за COM прослойкой всегда видны как COMОбъект, т.е. являются чужими и непонятными другой стороне от COM прослойки. Чтобы на другой стороне построить значения таких типов из своих, нужно разобрать их до примитивных (сериализовать) и на другой стороне собрать из заново (десериализовать). Во многих случаях хватит штатных методов сериализации.
|
|
2
ДенисЧ
09.10.21
✎
18:48
|
Проще собрать в динамике запрос с ГДЕ Регистратор Ссылка %Тип1%" ИЛИ...
|
|
3
Chai Nic
09.10.21
✎
19:00
|
(1) Даже с примитивными типами бывает засада. Например, в случае нецелых чисел они в COM преобразуются в плавающую точку, что может привести (и приводит) к потерям точности. Так что сериализация - лучший костыль для этой кривой технологии.
|
|
4
RomanYS
09.10.21
✎
19:01
|
(0) ТипыДокументовПриемник где инициализировано? Скорее всего ошибка там
|
|
5
RomanYS
09.10.21
✎
19:03
|
а так проще
ГДЕ ТИПЗНАЧЕНИЯ(МойРегистр.Регистратор) В (ТИП(Документ.ВозвратТоваровОтПокупателя), ТИП(Документ.ВозвратТоваровПоставщику))
|
|