|
04.06.2023, 18:45 | #1 |
:o)
|
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; для задания значений было использовано: сумма X++: intDoc.set_sum(new System.Decimal(99)); 1. X++: intDoc.set_regDate(systemdateget()); X++: //через System.
SystemDTime = System.DateTime::SpecifyKind(DatetimeUtil::getSystemDateTime(), System.DateTimeKind::Local);
intDoc.set_regDate(SystemDTime);
info(System.Convert::ToString(SystemDTime)); 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()); после отправки собранного документа через DMCreateReques X++: DocOb2.DMError error; ; createRequest = new DocOb2.DMCreateRequest(); createRequest.set_object(intDoc); //createResponce = servClient.execute(createRequest); error = servClient.execute(createRequest); по причине: Ошибка при выполнении обработчика - 'ПриЗаписи' по причине: Преобразование значения к типу Число не может быть выполнено подскажите, пожалуйста, как сие преодолеть? проблема в синтаксисе? проблема в настройках сервера? проблема в настройках сервиса? небольшой доп. вопрос результат 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. Причина: редактирование текста |
|
05.06.2023, 16:51 | #2 |
Участник
|
Цитата:
Сообщение от jeky
Если после сборки объекта (документа) формирую из него xml при помощи AifUtil::serializeClrObject() метод взят здесь на форуме, то теги с проблемными значениями просто не формируются(их_нет\отсутствуют).
в декларации X++: DocOb2.DMInternalDocument intDoc; |
|
05.06.2023, 17:20 | #3 |
:o)
|
Есть DLL от платформы 1с для Iis, Вы про это?
__________________
"Только на Бога не может быть обиды - если смерть пошлет, значит, жизни пришел предел, на то рождался,- а за все остальное на Земле есть и должен быть спрос!." Чингиз Торекулович Айтматов. |
|
05.06.2023, 20:08 | #4 |
:o)
|
DLL DocOb2.dll не цепляется, окно форума ругается, что некорректный файл
__________________
"Только на Бога не может быть обиды - если смерть пошлет, значит, жизни пришел предел, на то рождался,- а за все остальное на Земле есть и должен быть спрос!." Чингиз Торекулович Айтматов. |
|
06.06.2023, 13:40 | #5 |
:o)
|
Итог:
Создали свой простой сервис, все значения передались. Сделали упрощённый сервис на базе схемы 1С, значения не передались ни через аксапту, ни через Visual Studio, так что всё же где-то проблема "на стороне сервиса". Разбираемся. Если кто-то боролся с подобной проблемой: значения в объект задаются, но не приходят в 1С, - напишите, пожалуйста.
__________________
"Только на Бога не может быть обиды - если смерть пошлет, значит, жизни пришел предел, на то рождался,- а за все остальное на Земле есть и должен быть спрос!." Чингиз Торекулович Айтматов. |
|
06.06.2023, 15:14 | #6 |
Участник
|
Цитата:
Сообщение от jeky
Итог:
Создали свой простой сервис, все значения передались. Сделали упрощённый сервис на базе схемы 1С, значения не передались ни через аксапту, ни через Visual Studio, так что всё же где-то проблема "на стороне сервиса". Разбираемся. Если кто-то боролся с подобной проблемой: значения в объект задаются, но не приходят в 1С, - напишите, пожалуйста. |
|
06.06.2023, 15:43 | #7 |
:o)
|
Цитата:
Сообщение от Lucky13
Как я понимаю, на стороне 1С у вас Web-сервис. А какой тип значения параметра у вызываемого метода указан? Там может быть простой тип, например, string (http://www.w3.org/2001/XMLSchema), тогда, скорее всего, все работает, а может быть сложный, со ссылкой на какую-то свою схему, тогда видимо и возникает ошибка
Не передаются простые типы DateTime и Decimal, сегодня пробовали также integer (тоже не передался) Типы, которые не передаются, описаны вот так в схеме Цитата:
Сообщение от jeky
Цитаты из 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) ... при этом дата, передаваемая в составе сложного типа - передаётся <xs:element name="propertySimpleValue" nillable="true" minOccurs="0"/> входные параметры в аксапте set_propertySimpleValue(Object value); задание значения: X++: addPropDatePaymentContract.set_propertySimpleValue(systemdateget());
__________________
"Только на Бога не может быть обиды - если смерть пошлет, значит, жизни пришел предел, на то рождался,- а за все остальное на Земле есть и должен быть спрос!." Чингиз Торекулович Айтматов. |
|
09.08.2023, 09:55 | #8 |
Участник
|
Работал с коробочным веб сервисом DMService от 1С.
Но схема у нас была построена, что аксапта формировала запрос в формате json, отправляли на интеграционную шину. Шина конвертировала запрос в xml и собирала SOAP и отправляет на веб сервис. Полученный ответ, конвертируется в json и возвращала аксапте. В основном создавали внутренние документы, отправляли и получали файлы. Заметил при работе одну из особенностей, что нужно правильно передавать порядок полей. Если одно поле окажется выше чем нужно, то будет ошибка на стороне веб сервиса. По этому в Visual Studio в проекте конектился к веб сервису путем добавлений ссылки на его. Затем формировал объект DMInternalDocument который автоматически сгенерировался при добавление ссылки, и отправлял запрос. И смотрел какой soap запрос отправился. И в такой же последовательности собирал запрос у себя. |
|
Теги |
1c, web, web service, web сервис, документооборот 2.0, интеграция с 1с |
|
|