Показать сообщение отдельно
Старый 04.06.2023, 18:45   #1  
jeky is offline
jeky
:o)
Аватар для jeky
 
130 / 64 (3) ++++
Регистрация: 22.05.2008
? web-сервис Документооборот 2.0
Коллеги, добрый день
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());
        }
__________________
"Только на Бога не может быть обиды - если смерть пошлет, значит, жизни пришел предел, на то рождался,- а за все остальное на Земле есть и должен быть спрос!." Чингиз Торекулович Айтматов.

Последний раз редактировалось jeky; 04.06.2023 в 19:46. Причина: редактирование текста