Коллеги, добрый день
ax2009 5.0.1500.6491
Помогите, пожалуйста, c web-сервисами в аксапте знакомлюсь впервые.
Используем коробочный сервис для создания документа в 1С.
При этом строковые поля передаются в документ (на стороне 1С) нормально, но числа и даты - нет.
Т.е. в коде на стороне аксапты я задаю значения через методы set, если тут же смотрю через get, то значения есть и они выводятся.
Если после сборки объекта (документа) формирую из него xml при помощи AifUtil::serializeClrObject() метод взят
здесь на форуме, то теги с проблемными значениями просто не формируются(их_нет\отсутствуют).
На стороне 1С соответствующие переменные видят просто пустыми (незаполненными)
Примеров взаимодействия с данным сервисом в доступных приложениях нет.
Цитаты из xsd:
сумма
<xs:element name="sum" type="xs:decimal" minOccurs="0"/>
дата
<xs:element name="regDate" type="xs:dateTime" minOccurs="0"/>
входные параметры в аксапте соответственно:
сумма
set_sum(Decimal value)
дата
set_regDate(DateTime value)
в декларации
X++:
DocOb2.DMInternalDocument intDoc;
где DocOb2 - узел References в AOT
для задания значений было использовано:
сумма
X++:
intDoc.set_sum(new System.Decimal(99));
дата
1.
X++:
intDoc.set_regDate(systemdateget());
2.
X++:
//через System.
SystemDTime = System.DateTime::SpecifyKind(DatetimeUtil::getSystemDateTime(), System.DateTimeKind::Local);
intDoc.set_regDate(SystemDTime);
info(System.Convert::ToString(SystemDTime));
3.
X++:
//через UTC
utcDateTime myDTime;
System.DateTime myDTime1;
;
myDTime = datetimeutil::getSystemDateTime();
myDTime1 = Global::utcDateTime2SystemDateTime(myDTime);
intDoc.set_regDate(new System.DateTime(myDTime1));
info(System.Convert::ToString(myDTime1));
при этом дата, передаваемая след образом, - передаётся без использования каких либо изысков просто через systemdateget()
<xs:element name="propertySimpleValue" nillable="true" minOccurs="0"/>
входные параметры в аксапте
set_propertySimpleValue(Object value);
задание значения:
X++:
addPropDatePaymentContract.set_propertySimpleValue(systemdateget());
со слов коллег nillable="true" мы не можем использовать т.к. sum и regDate обязательные, а nillable="true" может быть использовано только для необязательных свойств\атрибутов
после отправки собранного документа через DMCreateReques
X++:
DocOb2.DMError error;
;
createRequest = new DocOb2.DMCreateRequest();
createRequest.set_object(intDoc);
//createResponce = servClient.execute(createRequest);
error = servClient.execute(createRequest);
получаем ошибку из error
по причине:
Ошибка при выполнении обработчика - 'ПриЗаписи'
по причине:
Преобразование значения к типу Число не может быть выполнено
подскажите, пожалуйста, как сие преодолеть?
проблема в синтаксисе?
проблема в настройках сервера?
проблема в настройках сервиса?
небольшой доп. вопрос
результат servClient.execute(createRequest); я могу забрать или в error или в createResponce, во время отладки я могу менять объекты, но это не приемлемо для рабочего кода. подскажите как написать код чтобы при успешной обработке запроса выдать соответствующее сообщение об успехе, а при возникновении ошибки получить доступ к get_subject и get_description которые реализованы в error?
X++:
DocOb2.DMError error;
DocOb2.DMCreateResponce createResponce;
;
//createResponce = servClient.execute(createRequest);
error = servClient.execute(createRequest);
if (error)
{
//error = createResponce.get_object();
info (error.get_subject());
info (error.get_description());
}