Обязательное возвращаемое значение не задано 1с веб сервис

Обновлено: 07.07.2024

небость ПолучитьОстатки возвращает ТексотвыйДокумент? или XML файл! да? А как он должен сериализоваться не думали!? И к чему такие извраты с веб-сервисами? может их проще на самой эске написать!? а не так извращаться?

попробуй из 1С к саповскому серверу из самой эсины цепануться. узнаешь к чему такие извраты

Так и есть, возвращает файлы. Вопрос как раз в том как возвращать не файлы, либо их на стороне веба преобразовывать в текст -) Да, сейчас смотрю в сторону встроенных веб-сервисов, но все таки решение должно быть.

а причем тут "из 1с к сапу". по-моему тут речь из откуда-то к 1с?

Конечно должно быть. Когда метод Вот это вернет бред вашего вида. А Возможно вернет уже что-то более вразумительное

речи нету откуда и куда. речь идет о веб-сервисе . так вот поробуй из эсинского веб-сервиса пообщаться с сапосвким веб-сервисом. чисто данными пообмениваться по соапу через аштипи

Да, речь о коннекте на 1с с веб-сервера и сливании остатков в веб-магазин.

нет. специалсита по 1С . который знает, что возвращает ConvertValueV8ToNet

хоть это и оффтоп, но все ;t поведайте нам, в чем там могут быть проблемы? Писал и до сих пор пишу интеграции на базе веб-сервисов, есть геморрои, но лучше решения чем веб-сервисы пока не видел.

в том, что эсина не понимает wsdl получаемый от сап иксай

Спасибо! Чего-то переморочился я с ЗаписьТекста вместо ТекстовыйДокумент. Так возвращает текст. Единственный вопрос как это будет работать при больших текстах.

это будет притормаживать на больших текстах, но вполне возможно. Прокачивал через соап 100 метровые файлы, все ок. а вы типы соап пробовали сравнивать!? Или просто решили вопрос "1с - авно, ибо не понимает" ? А вы пробовали сохранять описания в xml и подгружать руками?

Это дефолтный ответ который помогает вам ответить на любой вопрос? Очко переходит в зрительный зал.

пробовали . даже через соап толкит пробовали цепляться. едиственное, что сраслось. преобразования всдл в классу. и включение его в проект

чего. какой проект? я говорю про то, что руками вызывать этот веб-сервис из эсины пробовали? или только пытались добавить через конфигуратор ws-ссылку?

Какой стандарт соапа возвращает сап?? Просто эсина не все поддерживает и это достаточно хорошо описано в документации! Посмотрите на все объекты начинающиеся на WS.

еще раз пробовали. проект . ну как бы это сказать. в визуал студио. проекты есть . слыхал?

слышал, не переживайте ) то есть вы из сапа публикуете веб-сервисы, создаете проект на студии и еще раз публикуете те же методы? и потом только из эсины к ним подключаетесь?

И я еще не понял, соап тулкит не может к сапу подключиться?

Ну )) к пуговицам претензии есть!? :) 1с цепляется хорошо к сервисам (не сталкивался с проблемой, что эсина не может к чему-то подключиться, но сталкивался, что сервисы эсины не все могут подцепить, кстати, в частности тулкит, при попытки подключиться из 7ки через тулкит к 8шному сервису). //// В вашем случае согласен, что это может быть единственное решение. Просто человек пишет веб-сервис через некоторую ж*пу (без обид), а я говорю, что такой изврат скорее всего не нужен, ибо можно тот же сервис с гораздо меньшими проблемами и большей производительностью написать на самой 1с.

Цель блога описать интересные и полезные примеры программирования в системе 1С:Предприятие 8.

воскресенье, 14 октября 2012 г.

1С:Предприятие 8. Веб-сервисы. Реализация веб-сервиса

После этих действий веб-сервисом можно будет пользоваться. Таким образом будет создан веб-сервис, который сможет оперировать только простыми типами данных.

Откройте конфигурацию и в дереве метаданных найдите ветку "Общие - Web-сервисы". Нажмите правой кнопкой и добавьте новый элемент.

Реализация веб-сервиса в 1с

Имя веб-сервиса можно задать русское. И платформа его сохранит и опубликует, но рекомендую использовать латиницу в названиях веб-сервисов, ws-операций, параметров ws-операций. Например, chrome не смог отобразить wsdl файл веб-сервиса с русским именем.
Перейдите на вкладку "Прочее" и укажите параметр "URI пространство имен".

Реализация веб-сервиса в 1с


В документации об этом параметре написано чуть больше чем ничего, примерно то, что это поле служит для идентификации вашего веб-сервиса. Когда я делал свой первый веб-сервис, мне казалось что это ссылка на сайт, на котором я публикую свой веб-сервис и все наименования буду получаться через запрос к этому сайту. На самом деле "URI пространство имен" не что иное как строка определяющая название набора ваших имен (названий веб-сервиса, операций, параметров, типов данных и т.д.). То есть если вы объявите свой тип "integer" то xml-парсер не будет ругаться, так как этот тип принадлежит вашему пространству имен. Мало того если "URI пространство имен" будет содержать русские символы и не будет соответствовать стандарту как формат URI, платформа все равно опубликует такой веб-сервис, и он будет работать. Но по стандартам рекомендуется использовать URI ссылку. Я советую того же самого.
Простое и понятное объяснение пространства имен можно прочитать тут.

Поле "Пакеты XDTO" не обязательное. Оно определяет набор пакетов XDTO в которых вы можете оказать свои типы значений. Это не обязательное поле, по умолчанию вам всегда доступны типы пространства имен "http://www.w3.org/2001/XMLSchema". О пакетах XDTO я расскажу чуть позже.

"Имя файла публикации", это имя файла, в котором хранятся настройки веб-сервиса для Apache(путь к базе и другие) после публикации. Папка, в которой находится этот файл, определяется при публикации. О публикации на веб-сервере будет рассказано позже.

Веб-сервис создан, но еще нет ни одной функции которую он мог бы исполнить. Надо добавить операцию. Для этого добавьте в созданный веб-сервис операцию. Нажмите не веб-веб-сервис правой кнопкой и выберите "Добавить-Операция". Она будет к вашему операнду прибавлять 2 и возвращать значение. Давайте назовем ее "Plus2". Можно указать и русское название, многие клиенты его обработают, но все же могут возникнуть проблемы.

Реализация веб-сервиса в 1с

"Тип возвращаемого значения" это тип описанный в указанном вами пакете XDTO или же тип из пространства имен "http://www.w3.org/2001/XMLSchema". Именно в этом типе веб сервис будет возвращать значение.
"Возможно пустое значение" признак что ws-операция может не вернуть значение( nillable webkit-html-attribute-value" style="font-family: monospace; font-size: 13px;">true " ).
"В транзакции" указывает что код веб-сервиса будет выполняться в транзакции. А "Режим управления блокировкой данных" определяет тип блокировки данных при транзакции по умолчанию.

Установим тип возвращаемого значения в int. В поле "Имя метода" укажем имя "Plus2" для нового метода, который будет выполнять обработку. При нажатии на лупу метод будет автоматом создан в модуле веб-сервиса.
Напишем простой код.

Функция Plus2(Параметр)
Возврат Параметр+2;
КонецФункции

Вы заметили что на входе функции у нас есть параметр "Параметр". Для того что бы в метод этот параметр был передан надо добавить его в дереве метаданных. Для этого щелкните правой кнопкой по веб-операции Plus2 и выберите "Добавить-Параметр".

Реализация веб-сервиса в 1с

Давайте назовем его "Param". Названия параметров тоже можно указывать русскими, мало того класс SoapClient языка PHP работает с ними корректно, ведь параметры передаются через массив. Желательно использовать кодировку UTF-8.

Укажем "Тип значения" int из пространства имен "http://www.w3.org/2001/XMLSchema".

доброго времени суток всем! у меня возникла следующая проблема при создании WS-ссылки: в конфигураторе создается, но при проверке в режиме исполнения выдает ошибку: <Обработка.пример.Форма.Форма.Форма>: Ошибка при вызове метода контекста (СоздатьWSПрокси) ПроксиСервер = WSСсылки.WSСсылка2.СоздатьWSПрокси( ";, "WebService", " WebServiceSoap" ); по причине: Порт не найден.

";, там нет точки с запятой ни в конфигураторе,ни в ошибке

в версии 8.3 синтаксис: СоздатьWSПрокси(<URIПространстваИменСервиса>, <ИмяСервиса>, <ИмяПорта>, <ИнтернетПрокси>, <Таймаут>, <ЗащищенноеСоединение>)

здравствуйте еще раз. в процессе создания WSпрокси возник следующий вопрос: <Обработка.пример.Форма.Форма.Форма>: Ошибка при вызове конструктора (WSОпределения) Определения = Новый WSОпределения(";, "Системный администратор", ""); по причине: При создании описания сервиса произошла ошибка.

"WebServiceSoap", там пробел был лишний. извиняюсь за свой чудовищный затуп(( кстати,кавычки добавляются сами при копировании сюда кода

теперь сообщает,что <Обработка.пример.Форма.Форма.Форма>: Ошибка при вызове метода контекста (Обмен) РезультатыИмпорта = Прокси.Обмен; по причине: Ошибка вызова операции сервиса:

Н так воспользовался бы ссылкой из 4. Так дай описании : :Обмен Проверь что возвращает функция например в SoapUI

в соапе при вводе ссылки просит атентификацию, при вводе данных выдает ошибку и не создает проект, пишет Error loading []: org.apache.xmlbeans.XmlException: org.apache.xmlbeans.XmlException: error: Unexpected element: CDAT

- проверяю эту вс-ссылку в соапе, выдает приведенную выше ошибку. в браузере сообщает: This XML file does not appear to have any style information associated with it. The document tree is shown below. <faultstring> Операция не найдена: <:Обмен </faultstring> по-видимому,косяк в функции Обмен , только непонятно,какой, код я сверяла со статьей,по которой делала

Ну так посмотри, что у тебя в отладчике. Проще вынести код в общий модуль, а из модуля вэб сервиса дергать эти методы А при отладке можно дернуть метод из толстого клиента

Знаю, что на хабре не очень-то жалуют многострадальную 1С. Хотя, с выходом платформы 8.3 (с клиентами под Linux), ее стали любить несколько больше. Кстати, так же, совсем недавно интерфейс одной из основных разработок 1С – конфигурация Управление производственным предприятием – был полностью переведен на английский язык. Много раз я встречал вопросы о том, почему здесь не пишут об 1С. Ответ на них довольно очевиден – существует множество специализированных ресурсов, где можно оперативно обсудить все вопросы и что-то почитать.

Есть все основания полагать, что эта статья здесь не выживет, но я все же рискну, потому что в 1С есть некоторые интересные вещи, о которых стоит рассказать.

С некоторых пор в 1С 8.х появилась возможность использования веб-сервисов: 1С может выступать как поставщиком, так и потребителем. В этой статье я покажу, как использовать 1С в качестве потребителя на примере получения курсов валют с сервера ЦБР.

Веб-сервис

Конфигурирование

Для разработки я взял 1С 8.2 (8.2.15.317 в моем случае) и создал пустую конфигурацию. Для использования внешних веб-сервисов предусмотрен объект WS-ссылки, но использовать его не обязательно, к сервису можно обращаться динамически из кода. Я буду использовать первый вариант, а затем покажу, как можно использовать второй. В конфигурации создал обработку и назвал ее «ЗагрузкаКурсовВалютЦБР». Добавил форму (управляемую) и сделал ее основной. На форме я создал реквизиты и разместил элементы управления так, как показано на рисунке.



1С на основании полученного описания автоматически создаст визуальную карту веб-сервиса. Можно увидеть название веб-сервиса, посмотреть какие у него доступны операции а так же используемые типы данных.


Конфигурирование на этом почти закончено, осталось сделать пару штрихов для того, чтобы наше приложение выглядело более эстетично. Кликнем правой кнопкой мыши по корню конфигурации и вызовем меню «Открыть командный интерфейс рабочего стола». В появившемся окне необходимо снять флаг «Видимость» напротив обработки «Загрузка курсов валют ЦБР». Нажмем кнопку Ок. Далее еще правый клик по корню конфигурации и вызовем меню «Открыть рабочую область рабочего стола», там сделаем настройку как на рисунке:


Эти настройки позволят нам отобразить форму обработки прямо на рабочем столе (имеется ввиду рабочий стол программы 1С) в режиме 1С Предприятие.

Программирование

Теперь осталось наполнить смыслом нашу обработку: заставить ее получать курсы валют и отображать в таблице на форме. В режиме редактирования формы необходимо добавить новую команду формы, назовем ее ЗагрузитьВалюты. Эту команду необходимо связать с кнопкой, расположенной на форме. Действие для команды заполним следующим кодом (прим. автора: ничего себе, на хабре есть подсветка кода 1С, правда она работает не корректно):


Здесь сначала проверяется, заполнена ли дата (если не заполнена, то сообщаем об этом пользователю и больше ничего не делаем). Затем очищается таблица, расположенная на форме и вызывается процедура ЗагрузитьКурсыВалют(), в которую передается дата.

Код процедуры ЗагрузитьКурсыВалют(), пояснения данны в комментариях к коду:


Теперь можно обновлять конфигурацию БД (F7) и запускать 1С Предприятие (F5). Если все сделали верно, то должны увидеть окно как на рисунке ниже:


Чтобы проверить результат, нам нужно ввести дату, на которую хотим получить курсы валют и нажать на кнопку «Загрузить валюты». В случае успешного запроса, таблица на форме заполнится значениями курсов:


Напоследок хочу показать, как можно обратиться динамически к внешнему веб-сервису, то есть без добавления объекта WS-ссылка. Таким образом, мы можем использовать такие веб-сервисы из внешних обработок без привязки к конфигурации.

В процедуре ЗагрузитьКурсыВалют() строку


необходимо заменить двумя следующими строками


Сначала мы создаем так называемые определения для веб-сервиса из его WSDL. Затем так же создаем прокси для обращения к нему.

Как видно, использовать внешние веб-сервисы из 1С в целом довольно просто (хотя и есть некоторая сложность в понимании определения типов, у меня в том числе).

Если данная публикация найдет здесь отклик, то есть еще несколько тем, о которых можно рассказать.

Читайте также: