Если это запрос через COM-объекты, то попробуй принимать значения как тип ComVariant
X++:
ComVariant retVal;
;
retVal = Choose.();
// Если ожидается значение типа int
print retVal.int();
pause;
// Если ожидается значение типа str
print retVal.bStr ();
pause;
Можно сделать анализ типа возвращенного значения через свойство comVariant.variantType() для написания универсальной обработки
Вот выдрал метод по преобразованию типов ComVariant из своего класса на Ax2.5
X++:
// Преобразование полученного значения
anyType getValue(ComVariant _comVariant)
{
// Com comValue;
;
switch (_comVariant.variantType())
{
case COMVariantType::VT_BOOL :
return _comVariant.boolean(); // boolean
case COMVariantType::VT_BSTR :
return _comVariant.bStr(); // str
case COMVariantType::VT_UI1 :
return _comVariant.byte(); // int
case COMVariantType::VT_I1 :
return _comVariant.char(); // int
case COMVariantType::VT_CY :
return _comVariant.currency(); // real
case COMVariantType::VT_DATE :
return _comVariant.date(); // date
case COMVariantType::VT_DECIMAL :
return _comVariant.decimal(); // real
case COMVariantType::VT_R8 :
return _comVariant.double(); // real
case COMVariantType::VT_R4 :
return _comVariant.float(); // real
case COMVariantType::VT_DISPATCH :
// return _comVariant.iDispatch(); // дескриптор COM-интерфейса. Число.
return COM::createFromVariant(_comVariant); // Преобразую в ссылку на объект
case COMVariantType::VT_I4 : // int
return _comVariant.int();
// return _comVariant.long(); // теоретически, это должно быть VT_I8, но такого значения нет, поэтому VT_I4 читается как int()
case COMVariantType::VT_UNKNOWN :
//return _comVariant.iUnknown(); // дескриптор COM-интерфейса. Число.
return COM::createFromVariant(_comVariant); // Преобразую в ссылку на объект
case COMVariantType::VT_ERROR :
return _comVariant.sCode(); // int
case COMVariantType::VT_I2 :
return _comVariant.short(); // int
case COMVariantType::VT_UI4 :
return _comVariant.uInt(); // int
//return _comVariant.uLong(); // теоретически, это должно быть VT_UI8, но такого значения нет, поэтому VT_I4 читается как int()
case COMVariantType::VT_UI2 :
return _comVariant.uShort(); // int
case COMVariantType::VT_VARIANT :
return _comVariant.variant(); // COMVariant
case COMVariantType::VT_SAFEARRAY :
return _comVariant.safeArray(); // array
default :
throw error(strFmt("Неизвестны правила обработки типа %1", _comVariant.variantType()));
}
}