Тренинг Разработка мобильного приложения на 1С с нуля – за 7 вечеров! Модуль 2. Обмен данными с мобильным приложением через веб-сервисы.


Чтобы посмотреть этот PDF файл с форматированием и разметкой, скачайте его и откройте на своем компьютере.
Еу.ыы
-
щВ
-
1М..ю

ДтыьйБКтВББып фу.ыы щВ 1М охя БВлт?фВл т
щ.ВюпыытВБйхВл
.
Бпс
ВртойБту
т сйь.йь
.



Страница
1

из
34

Бесплатные материалы проекта:


Электронная почта:
support
@
Kursy
-
po
-
1
C
.
ru

http
://курсы
-
по
-
1с.рф/
free
/

Телефоны:
8
-
800

1000
-
613
, +7(495) 7777
-
096



Тренинг
Разработка
мобильного
приложения на 1
С

с
нуля


за 7 веБеров
!


Модуль 2
.

Обмен
данными с мобильным
приложением Берез веб
-
сервисы



Еу.ыы
-
щВ
-
1М..ю

ДтыьйБКтВББып фу.ыы щВ 1М охя БВлт?фВл т
щ.ВюпыытВБйхВл
.
Бпс
ВртойБту
т сйь.йь
.



Страница
2

из
34

Бесплатные материалы проекта:


Электронная почта:
support
@
Kursy
-
po
-
1
C
.
ru

http
://курсы
-
по
-
1с.рф/
free
/

Телефоны:
8
-
800

1000
-
613
, +7(495) 7777
-
096


Оглавление

ВтЭрЭй ФХнь (мЭФуль). ВвХФХнЧХ

................................
................................
................................
....

3

ВХб
-
сХрвЧсы

................................
................................
................................
................................
...............

4

ВтЭ тТкЭХ вХб
-
сХрвЧсы?
................................
................................
................................
...................

5

ВХб
-
сХрвЧсы в прТктЧкХ

................................
................................
................................
.................

5

D2I прЭстрТнствЭ ЧмХн

................................
................................
................................
...................

6

XDTO
-
пТкХты

................................
................................
................................
................................
.........

7

WSDL
-
схХмТ

................................
................................
................................
................................
...........

8

WS
-
ссылкТ

................................
................................
................................
................................
..............

9

СЭзФТнЧХ XDT/
-
пТкХтТБ зТпЭлнХнЧХБ чтХнЧХ

................................
................................
............

9

СЭзФТнЧХ XDT/
-
пТкХтТ

................................
................................
................................
.................

10

РТбЭтТ с
ОбъХктXDT/

................................
................................
................................
....................

16

СЭзФТнЧХ вХб
-
сХрвЧсТ

................................
................................
................................
........................

19

ПублЧкТцЧя вХб
-
сХрвЧсТ

................................
................................
................................
.............

21

СЭзФТнЧХ
ws
-
ссылкЧ

................................
................................
................................
...........................

22

ИспЭльзЭвТнЧХ ws
-
ссылкЧ

................................
................................
................................
.........

23

ДЧнТмЧчХскЭХ сЭзФТнЧХ ws
-
ссылкЧ

................................
................................
......................

24

СХрЧТлЧзТцЧя Ч ФХсХрЧ
ТлЧзТцЧя

................................
................................
................................
.

24

КТк сХрЧТлЧзЭвТть Ч ФХсХрЧТлЧзЭвТть ЭбъХкты?

................................
..........................

25

ОтлТФкТ вХб
-
сХрвЧсТ

................................
................................
................................
...........................

28

ИтЭгЧ

................................
................................
................................
................................
..........................

30




Еу.ыы
-
щВ
-
1М..ю

ДтыьйБКтВББып фу.ыы щВ 1М охя БВлт?фВл т
щ.ВюпыытВБйхВл
.
Бпс
ВртойБту
т сйь.йь
.



Страница
3

из
34

Бесплатные материалы проекта:


Электронная почта:
support
@
Kursy
-
po
-
1
C
.
ru

http
://курсы
-
по
-
1с.рф/
free
/

Телефоны:
8
-
800

1000
-
613
, +7(495) 7777
-
096


Второй день

(модуль). В
веде
ние

Основная цель текущего дня тренинга


продемонстрировать передачу

информации
между мобильным устройством и сервером. Многие на интуитивном уровне понимают, что
обмен
возможно

сделать при помощи файлов. Например, отправлять файл по почте, или
размещать на некий
ftp
-
сервер и т.д.

Однако

на практике

для использования обме
на с мобильным устройством
такой

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

только он
.

К примеру,

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


В базе на мобильном устройстве

только пользователь будет знать о
появлении,
например, нового

документ
а

заказа

или нового

контрагент
а
.

После п
ередачи данных
серверу

этот сотрудник не будет иметь возможности проверить успешность загрузки.

П
ри реализации обмена через файлы
возможны
различные
проблемы.
Например,
из
мобильного приложения произошла выгрузка
нов
ого

заказ
а

на
ftp
,
далее нужно будет
ож
идать
, когда центральная база е
го
загрузит

и сформирует ответ.

То есть мобильный
к
лиент вынужден опрашивать
ftp

и проверять наличие файлов.

А

так как

на мобильной
платформе не доступны
регламентные задания
,
придется либо

подключать обработчик
ожидания, ли
бо

периодически нажимать на кнопку проверки. А если сервер отработал с
о
шибкой и, к примеру, из
-
за ошибки удалил файл выгрузки с
ftp
, т
о клиент не дождется
ответа

никогда
.

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

Однако есть и другой вариант

синхронизации данных
. Существует

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

В
озникает еще один воп
рос, который, как и предыдущий,

имеет
несколько вариантов

решения. Это вопрос о том, как переносить да
нные на мобильное устройство. Ве
дь на
мобильном устройстве необходимы
справочники, докумен
ты и прочее.

Но как это сделать?
Какие варианты для ускорения загрузки данных на мобильное устройство у нас есть?

Еу.ыы
-
щВ
-
1М..ю

ДтыьйБКтВББып фу.ыы щВ 1М охя БВлт?фВл т
щ.ВюпыытВБйхВл
.
Бпс
ВртойБту
т сйь.йь
.



Страница
4

из
3
4

Бесплатные материалы проекта:


Электронная почта:
support
@
Kursy
-
po
-
1
C
.
ru

http
://курсы
-
по
-
1с.рф/
free
/

Телефоны:
8
-
800

1000
-
613
, +7(495) 7777
-
096


Согласитесь, что если передавать некий самописный вариант
xml
-
файла, то принимая
его
следует
выполнять ряд операций:



прочитать
xml
;



если это
справочник или документ


найти его по коду͖



найти по коду (или
UID
) все реквизиты ссылочного ти
па
и т.д.

На самом деле ничего этого делать

не нужно
!

То есть

придумывать свой формат
xml
,
писать
код

по его парсингу, искать

объекты ссылочного типа и т.д.

Об этом
мы также
расскажем

в
рамках текущего дня тренинга
.

Специалисты
, которые ранее работали с планам
и
обмена и конвертацией данных

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

Однако

на мобильном устройстве нет запросов и некоторых других объектов, а без
них обработка по конвертации работать не будет.

Теперь посмотрим,

почему
нельзя использовать планы обмена.

Причина в том, что
зачастую в

мобильной базе будет упрощенный

состав метада
нных, например, мобильному
пользователю не нужны
все реквизиты номенклатуры
.

Можно
,

конечно
,

пытаться описать
все объекты из клиентской базы через фабрики
XDTO

и настроить планы обмена, н
о это
достаточно
трудоемко
. В добавок,

при каждом изменении метаданны
х клиента
потребуют
ся

переписывать код на сервере.

Итак, мы узнаем к
аким образом пе
редавать любые данные на сервер и

после этого

получать от него ответ. А также как
переносить

справочники и документы с миним
умо
м
кода и максимальной гибкостью.



Веб
-
сервисы

Для переноса данны
х на сервер и получения ответа
,

мы будем использовать такой
объект


как веб
-
сервисы.

Еу.ыы
-
щВ
-
1М..ю

ДтыьйБКтВББып фу.ыы щВ 1М охя БВлт?фВл т
щ.ВюпыытВБйхВл
.
Бпс
ВртойБту
т сйь.йь
.



Страница
5

из
34

Бесплатные материалы проекта:


Электронная почта:
support
@
Kursy
-
po
-
1
C
.
ru

http
://курсы
-
по
-
1с.рф/
free
/

Телефоны:
8
-
800

1000
-
613
, +7(495) 7777
-
096


Что такое веб
-
сервисы?

Процитируем

справку


:

Web
-
сервисы



это один из механизмов платформы, используемых для
интеграции
с другими информационными
системами
. Он

является средством поддержки
SOA
(Service
-
Oriented Architecture)



сервис
-
ориентированной архитектуры, которая
является современным стандартом интеграции приложений и информационных
систем.

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

позволяет
минимизировать издержки за счет интеграции разнородных и унаследованных систем
в современ
ный ландшафт предприятия. Она позволяет реализовывать слабо связные
программные компоненты с тем, чтобы максимально повысить их повторную
используемость.

Если попытаться объяснить это проще, то веб
-
сервисы


это некая внешняя функция,
которой передаются па
раметры

и п
осле обработки этих параметров получается ответ.

То есть,

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

на клиенте
получить ответ

о долге контрагента
. При этом, на клиенте вообще может не быть этого
регистра.

Хочу обратить
В
аше внимание на то, что веб
-
сервисы


это частная реализация
SOAP
,
эта технология является распространенной
. Например, сндекс
позволяет

получать да
нные
при помощи этого протокола.

Есть и другие сервисы


по погоде, курсам валют и т.д.

Веб
-
сервисы в практике

Рассмотрим пример
.

Допустим
, несколько человек программируют

одну и ту же
конфигурацию.

б одного из них есть некий
закрытый
модуль, в котором описана функция:

ПолучитьСреднее
(
А
,
Б
,
В
=
0
)


Еу.ыы
-
щВ
-
1М..ю

ДтыьйБКтВББып фу.ыы щВ 1М охя БВлт?фВл т
щ.ВюпыытВБйхВл
.
Бпс
ВртойБту
т сйь.йь
.



Страница
6

из
34

Бесплатные материалы проекта:


Электронная почта:
support
@
Kursy
-
po
-
1
C
.
ru

http
://курсы
-
по
-
1с.рф/
free
/

Телефоны:
8
-
800

1000
-
613
, +7(495) 7777
-
096


Второй программист хочет во
спользоваться этой функцией. Но

сразу появится вопрос


какие типы у

параметров

А
,

Б

и
В
, какие
параметры являются обязательными?

На

этот вопрос и отвечают веб
-
сервисы. И в случае, если даже первый программист
добавит новый параметр и ничего не скажет о нем второму


веб
-
с
ервис даст полное
описание того,

что это за тип пар
аметра, может ли он быть пус
тым.

Но типы параметров и ответа могут быть разные, как же одноз
начно определить тип
переменной?


Например, в


можно обмениваться типом
СправочникОбъект.Номенклатура
.
Естественно,

сайт не сможет принять такой тип данных, если он не определен

ранее.
Именно по этой причине

внедрили еще одно
п
онятие


URI

пространство имен
.

URI

пространство имен

Допустим мы
решили подключится к
веб
-
сервису сайта погоды,

он
возвращает
нам

температуру. Вопрос


он вернет температуру как число, или как строку?

И в том и в другом случае он вернет, к примеру


«10».

Как
клиент должен понять, что это такое? В
ажно, есл
и вы пишите синхронизацию
зимой,

и сервер вер
нет «
-
10», то не совсем понятно,

как он вернет температ
уру выше нуля,
т.е. как число «10», или как строку «+10»?

Мы понимаем, что сайт погоды
может и не знать о существовании


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

о
днозначно мож
но

описать простые типы,
такие как число, строка, булево и т.д.

И такой стандарт типов существует


это стандарт
W3
C
.
Его можно использовать для
настройки взаимодействия между абсолютно разными системами.


Все данные этого стандарта находятся в одном пространстве имен


http://www.w3.org/2001/XMLSchema
.
В
се типы, которые

в него входят
описаны

на сайте
этой организации.
Р
ядом с
типом

указывается пространство имен. Например, если мы
определим тип как строку из этого пространства имен, то он будет выглядеть вот так:

string (
http://www.w3.org/2001/XMLSchema
)

Еу.ыы
-
щВ
-
1М..ю

ДтыьйБКтВББып фу.ыы щВ 1М охя БВлт?фВл т
щ.ВюпыытВБйхВл
.
Бпс
ВртойБту
т сйь.йь
.



Страница
7

из
34

Бесплатные материалы проекта:


Электронная почта:
support
@
Kursy
-
po
-
1
C
.
ru

http
://курсы
-
по
-
1с.рф/
free
/

Телефоны:
8
-
800

1000
-
613
, +7(495) 7777
-
096


Это связанно с тем, что имена типов в разных пространствах имен могут совпадать.
Поэтому,
для

однозначно
го

определ
ения

тип
а,

необходимо понимать из какого
пространства имен он взят.


Кроме международных стандартов,

есть и
локальные стандарты, которые описывают
объекты внутри неких систем.


не исключение, у нее есть огромный выбор локальных
пространств имен.

С их помощью можно

обмениваться объектами

, например,

структурой, мас
сивом,
таблицей значений и т.д. С
вои собстве
нные типы
описываются
при помощи
XDTO
-
пакетов.

XDTO
-
пакеты

Процитируем к справку


:

XDTO
-
пакеты



это
общие

объекты конфигурации
. Они являются частью
механизма XDTh
. XDTO
-
пакеты позволяют описать

в конфигурации систему типов и
значений для взаимодействия с различными внешними источниками данных, например,
с

Web
-
сервисами.

Где можно применять
XDTO
-
пакеты?

В
ернемся
к

примеру с закрытым модулем и представим себе, что параметр
А



это
не
число, а нек
ий набор данных.

Для примера


в этом параметре должна быть структура с
такими ключами:



«МассивЧисел»



тип Массив͖



«КоличествоЭлементовВМассиве»



тип число͖



«Комментарий»



тип строка.

Идея заключается в том, что первый программист в своей функции ждет и
менно
такую стр
уктуру входящего параметра. Причем

допустим, есть ограничения на значения
параметров


массив и количество не мо
гут

быть пустым
и
, а
длина
комментари
я не
должна
превышать

100 символов.

Как

объяснить
все
это
второму программисту
, который будет

обращаться к этой
функции
?

Для этого

необходимо написать документацию, а кроме этого и

целый ряд
проверок на ошибки
.


Еу.ыы
-
щВ
-
1М..ю

ДтыьйБКтВББып фу.ыы щВ 1М охя БВлт?фВл т
щ.ВюпыытВБйхВл
.
Бпс
ВртойБту
т сйь.йь
.



Страница
8

из
34

Бесплатные материалы проекта:


Электронная почта:
support
@
Kursy
-
po
-
1
C
.
ru

http
://курсы
-
по
-
1с.рф/
free
/

Телефоны:
8
-
800

1000
-
613
, +7(495) 7777
-
096


Н
апример
,

действительно
ли ключи присутствуют в структуре,

все
ли
необходимые
поля заполнены,
не превышает ли длина комментария 100 симво
лов

(для того чтобы при
записи комментарий не был обрезан)

и т.д.

А теперь представим
, что к этой функции выполняется

100 вызовов в секунду. На
сколько все эти проверки замедлят работу?

Но что, если этого всего можно избежать? Например
,

создать свой тип, который будет
доступен всем
. И

при
его
создании будет выполнятся проверка всего, что необходимо.


Таким образом, не
нужно

писать
проверки на значения параметров
,

объясня
ть
остальным участникам проекта какие

поля обязательны, какого типа
и т.д.

Можно просто создать свой тип, в своем простран
стве имен, сообщить всем
участникам
, что
нужно

передавать
именно этот тип. А

в самой функции сделать только одну
проверку на то, что параметр имеет нужный нам тип.

Именно это и позволяют сделать
XDTO
-
пакеты.

WSDL
-
схема

Если мы работаем в одной базе данных
,

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

На самом деле, э
то не
является
пробле
мо
й
, так как
публикуя веб
-
сервис,

он публикует
WSDL
-
схему в общий доступ, и на
ее
основе можно
создать новый
XDTO
-
пакет или импортировать его в виде
WS
-
ссылки.

WSDL
-
схема


это
xml
-
файл, который построен специальным образом.

Каждый документ
WSDL 1.1

можно разбить на следующие логические части:



определение типов данных (
types
)



определение вида отправляемых и
получаемых сервисом
XML
-
сообщений
;



элементы данных (
message
)


сообщения, используемые
web
-
сервисом
;



абстрактные операции (
portType
)



список о
пераций, которые могут быть
выполнены с сообщениями
;



связывание сервисов

(
binding
)


способ, которым сообщение будет
доставлено
.

Еу.ыы
-
щВ
-
1М..ю

ДтыьйБКтВББып фу.ыы щВ 1М охя БВлт?фВл т
щ.ВюпыытВБйхВл
.
Бпс
ВртойБту
т сйь.йь
.



Страница
9

из
34

Бесплатные материалы проекта:


Электронная почта:
support
@
Kursy
-
po
-
1
C
.
ru

http
://курсы
-
по
-
1с.рф/
free
/

Телефоны:
8
-
800

1000
-
613
, +7(495) 7777
-
096


Таким образом, прежде

чем передать данные на сервер,

программа получает
описание всех типов, функций и т.д., и только после это
го передает параметры на
обработку, после чего получает ответ. Тип ответа так же прописан в
WSDL
-
схеме.

WS
-
ссылка

Цитата и
з справки

:

WS
-
ссылка

-

это
общий объект конфигурации
. Она предназначена для описания в
прикладном решении "статической" ссылки на некоторый внешний
веб
-
сервис

стороннего поставщика.

WS
-
ссылка представляет собой WSDL
-
описание веб
-
сервиса, имп
ортированное из
указанного источника. WS
-
ссылка недоступна для редактирования, однако можно
просмотреть ее структуру и структуру типов данных, которые используются для
описания параметров и возвращаемых значений.

То есть
,

если мы работаем с другой базой,
то мы можем подключить в нашей базе
ws
-
ссылку и работать с ней, как с неким аналогом
XDTO
-
пакета.


Создание
XDTO
-
пакета, заполнение, чтение

Реализуем на практике

описанный выше пример. бсловия таковы:

Есть функция
ПолучитьСреднее(СтруктураДанных)
, которая
должна возвращать
среднее значение элементов массива чисел
. В нее передается
XDTO
-
пакет следующего
содержания:



МассивЧисел



тип
Массив
;



КоличествоЭлементовВМассиве



тип число, должно быть целым (это же
количество элементов), и большим нуля (нам на него д
елить)͖



Комментарий



тип строка, длина строки

менее 100 символов͖

В ответ мы должны получить сумму всех чисел в массиве деленную на
КоличествоЭлементовВМассиве
. Ответ может быть либо пустым


в случае

если
произошла ошибка
, либо число


если

все прошло ус
пешно.


Еу.ыы
-
щВ
-
1М..ю

ДтыьйБКтВББып фу.ыы щВ 1М охя БВлт?фВл т
щ.ВюпыытВБйхВл
.
Бпс
ВртойБту
т сйь.йь
.



Страница
10

из
34

Бесплатные материалы проекта:


Электронная почта:
support
@
Kursy
-
po
-
1
C
.
ru

http
://курсы
-
по
-
1с.рф/
free
/

Телефоны:
8
-
800

1000
-
613
, +7(495) 7777
-
096


Созд
ание
XDTO
-
пакета

Для начала создадим
XDTO
-
пакет:


И сразу поменяем
URI
-
пространство имен. Обычно,

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

Назовем пространство

«СтруктураДляПолученияСреднего»
, для этого поменяем
имя:


При этом программа спросит


хотим ли мы изменить пространство имен у всех
ссылок
, с
оглашаемся.

Еу.ыы
-
щВ
-
1М..ю

ДтыьйБКтВББып фу.ыы щВ 1М охя БВлт?фВл т
щ.ВюпыытВБйхВл
.
Бпс
ВртойБту
т сйь.йь
.



Страница
11

из
34

Бесплатные материалы проекта:


Электронная почта:
support
@
Kursy
-
po
-
1
C
.
ru

http
://курсы
-
по
-
1с.рф/
free
/

Телефоны:
8
-
800

1000
-
613
, +7(495) 7777
-
096



Ставим
флажок

у старого
пространства имен, которое 1С проставило при создании
, и
нажимаем
ОК
.

Тепе
рь поменяем имя самого пакета, сделаем его таким же, как и пространство
имен:


Теперь поэтапно создадим все
,

что
необходимо
. То есть

опишем структуру пакета.
Сначала

необходимо создать

всю структуру в целом.

Так как
XDTO
-
пакет


это описание типов объек
т
ов, то надо создать новый тип:

Еу.ыы
-
щВ
-
1М..ю

ДтыьйБКтВББып фу.ыы щВ 1М охя БВлт?фВл т
щ.ВюпыытВБйхВл
.
Бпс
ВртойБту
т сйь.йь
.



Страница
12

из
34

Бесплатные материалы проекта:


Электронная почта:
support
@
Kursy
-
po
-
1
C
.
ru

http
://курсы
-
по
-
1с.рф/
free
/

Телефоны:
8
-
800

1000
-
613
, +7(495) 7777
-
096



Назовем новый тип


СтруктураДанных
.


Н
ачнем с самого простого


опишем тип
КоличествоЭлементовВМассиве
. Для этого
на

элементе

СтруктураДанных
вызываем контекстное меню
Добавить



Свойство
, и
указываем данные:


Еу.ыы
-
щВ
-
1М..ю

ДтыьйБКтВББып фу.ыы щВ 1М охя БВлт?фВл т
щ.ВюпыытВБйхВл
.
Бпс
ВртойБту
т сйь.йь
.



Страница
13

из
34

Бесплатные материалы проекта:


Электронная почта:
support
@
Kursy
-
po
-
1
C
.
ru

http
://курсы
-
по
-
1с.рф/
free
/

Телефоны:
8
-
800

1000
-
613
, +7(495) 7777
-
096


Рассмотрим

основные

сво
йства
:



Имя



по
нему

будем обращаться к этому типу (грубо говоря


ключ структуры)͖



Тип



тип из выбранного пространства имен, который описывает тип
добавленного свойства. Выбор очень большой, но мы работаем пока только с
типами, которые наход
ятся в пространстве имен
http
://
www
.
w
3.
org
/2001/
XMLSchema
.
Так что найдите в дереве это пространство

и выберите тип.

Почему
выбираем
именно эт
о тип?


Вспомним задачу. Н
ам необходимо, чтобы сюда попадали только целые числа и
больше нуля. Поэтому идем
открываем страницу
http://www.w3schools.com/schema/schema_dtypes_numeric.asp

и смотрим внизу описани
е
типов:

Name

Description

byte

A signed 8
-
bit integer

decimal

A decimal value

int

A signed 32
-
bit integer

integer

An integer value

long

A signed 64
-
bit integer

negativeInteger

An integer containing only negative values (..,
-
2,
-
1)

nonNegativeInteger

An integer containing only non
-
negative values (0,1,2,..)

nonPositiveInteger

An integer containing only non
-
positive values (..,
-
2,
-
1,0)

positiveInteger

An integer containing only positive values (1,2,..)

short

A signed 16
-
bit integer

unsignedLong

An
unsigned 64
-
bit integer

unsignedInt

An unsigned 32
-
bit integer

Еу.ыы
-
щВ
-
1М..ю

ДтыьйБКтВББып фу.ыы щВ 1М охя БВлт?фВл т
щ.ВюпыытВБйхВл
.
Бпс
ВртойБту
т сйь.йь
.



Страница
14

из
34

Бесплатные материалы проекта:


Электронная почта:
support
@
Kursy
-
po
-
1
C
.
ru

http
://курсы
-
по
-
1с.рф/
free
/

Телефоны:
8
-
800

1000
-
613
, +7(495) 7777
-
096


unsignedShort

An unsigned 16
-
bit integer

unsignedByte

An unsigned 8
-
bit integer


Нас интересует целое число
больше нуля,
поэтому берем

positiveInteger
. Если бы
требовалось

целое число больше
либо

равное нулю
, то следовало бы выбрать

nonNegativeInteger
. А если
разницы нет
, то
можно выбрать

decimal



оно может быть
любым, в том числе и дробным.



Минимальное количество и максимальное



задает диапазон допустимых
значений
.



Возможно пустое



не обязательный параметр для заполнения.



По умолчанию



указываем данные, которыми будет заполнен параметр
данного типа в момент создания.



Форма и локальное имя



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

Теперь добавим

свойство

Комментарий

по аналогии:


Только тип выберем другой


string
, из того же пространства имен.
Теперь
необходимо

указать максимальную длину,

но

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

Для этого н
ажимаем правой кнопкой на самом

верхнем уровне

Х
DTO
-
пакета

Добавить



Тип значения
:

Еу.ыы
-
щВ
-
1М..ю

ДтыьйБКтВББып фу.ыы щВ 1М охя БВлт?фВл т
щ.ВюпыытВБйхВл
.
Бпс
ВртойБту
т сйь.йь
.



Страница
15

из
34

Бесплатные материалы проекта:


Электронная почта:
support
@
Kursy
-
po
-
1
C
.
ru

http
://курсы
-
по
-
1с.рф/
free
/

Телефоны:
8
-
800

1000
-
613
, +7(495) 7777
-
096



Назовем

этот тип
ОграниченнаяСтрока
. Выбираем базовый тип, и далее указываем
минимальную и максимальную длину. Теперь выберем новый тип:


И остался последний штрих


добавить массив чисел. Добавляем
новый тип
объектов:

Еу.ыы
-
щВ
-
1М..ю

ДтыьйБКтВББып фу.ыы щВ 1М охя БВлт?фВл т
щ.ВюпыытВБйхВл
.
Бпс
ВртойБту
т сйь.йь
.



Страница
16

из
34

Бесплатные материалы проекта:


Электронная почта:
support
@
Kursy
-
po
-
1
C
.
ru

http
://курсы
-
по
-
1с.рф/
free
/

Телефоны:
8
-
800

1000
-
613
, +7(495) 7777
-
096



О
братите внимание на минимальное и максимальное

количество
.
Можем

ограничить
количество элементов в массиве, а
можем и

не ограничивать (тогда ставим «
-
1»).

Тип
выбираем

decimal
,
таким образом

в массив
можно передать
любое число. В
ма
ссиве должен быть минимум один элемент.

Работа с
ОбъектXDTh

Создадим простую форму с одной кнопкой и ставим вот такой код:

&НаКлиенте

Процедура

СформироватьПакет
(
Команда
)


СформироватьПакетНаСервере
();

КонецПроцедуры


&НаСервереБезКонтекста

Процедура

СформироватьПакетНаСервере
()


ТипПакета

=

ФабрикаXDTO.Тип
(
"СтруктураДляПолученияСреднего"
,

"СтруктураДанных"
);


СтруктураДанных

=

ФабрикаXDTO.Создать
(
ТипПакета
);


КонецПроцедуры


Вначале мы получаем описание типа (первый параметр


URI
-
пространство
имен,
второй


имя типа объе
кта), далее, на основании типа, создаем новый о
бъект

XDTO

СтруктураДанных
.

П
осмотри
м

в отладчике:

Еу.ыы
-
щВ
-
1М..ю

ДтыьйБКтВББып фу.ыы щВ 1М охя БВлт?фВл т
щ.ВюпыытВБйхВл
.
Бпс
ВртойБту
т сйь.йь
.



Страница
17

из
34

Бесплатные материалы проекта:


Электронная почта:
support
@
Kursy
-
po
-
1
C
.
ru

http
://курсы
-
по
-
1с.рф/
free
/

Телефоны:
8
-
800

1000
-
613
, +7(495) 7777
-
096



К сожалению,

в контекстной подсказке не будет помощи в виде доступных
параметров. Заполним все параметры:

&НаСервереБезКонтекста

Процедура

СформироватьПакетНаСервере
()


ТипПакета

=

ФабрикаXDTO.Тип
(
"СтруктураДляПолученияСреднего"
,

"СтруктураДанных"
);


СтруктураДанных

=

ФабрикаXDTO.Создать
(
ТипПакета
);



СтруктураДанных.КоличествоЭлементовВМассиве

=

-
2
;


СтруктураДанных.Комментарий

=

"Тест"
;

КонецПроцедуры


В
ыполним код

и у
видим следующую ошибку
:

{ОбщаяФорма.Форма.Форма(11)}: Ошибка при установке значения атрибута
контекста (КоличествоЭлементовВМассиве)


СтруктураДанных.КоличествоЭлементовВМассиве =
-
2;

по причине:

Ошибка проверки данных XDTh:

Значение: '
-
2' не соответствует простому типу:
{http://www.w3.org/2001/XMLSchema}positiveInteger

Несоответствие фасету ainLnclusive = '1'

И
справим
ошибку
и заменим
«
-


на
«10»
. Выполним код. И никаких ошибок не
бу
дет. Но
ранее мы указывали
, что в массиве долж
ен быть хотя бы один

элемент
.
Следовательно,

нужно

выпол
нить проверку объекта

вручную
. Для
э
того

достаточно
дописать еще одну строку кода:


СтруктураДанных.Проверить
();


Еу.ыы
-
щВ
-
1М..ю

ДтыьйБКтВББып фу.ыы щВ 1М охя БВлт?фВл т
щ.ВюпыытВБйхВл
.
Бпс
ВртойБту
т сйь.йь
.



Страница
18

из
34

Бесплатные материалы проекта:


Электронная почта:
support
@
Kursy
-
po
-
1
C
.
ru

http
://курсы
-
по
-
1с.рф/
free
/

Телефоны:
8
-
800

1000
-
613
, +7(495) 7777
-
096


И еще раз выполним код. Нас встретит
вот такая ошибка:

{ОбщаяФорма.Форма.Форма(13)}: Ошибка при вызове метода контекста
(Проверить)


СтруктураДанных.Проверить()͖

по причине:

Ошибка проверки данных XDTh:

Структура объекта не соответствует типу:
{СтруктураДляПолученияСреднего}СтруктураДанных

Пр
оверка свойства 'МассивЧисел':


форма: Элемент


имя: {СтруктураДляПолученияСреднего}МассивЧисел


тип: {http://www.w3.org/2001/XaLSchema}decimal

Отсутствует обязательное свойство


Тогда допишем код:

&НаСервереБезКонтекста

Процедура

СформироватьПакетНаСервере
()


ТипПакета

=

ФабрикаXDTO.Тип
(
"СтруктураДляПолученияСреднего"
,

"СтруктураДанных"
);


СтруктураДанных

=

ФабрикаXDTO.Создать
(
ТипПакета
);



СтруктураДанных.КоличествоЭлементовВМассиве

=

2
;


СтруктураДанных.Комментарий

=

"Тест"
;


СтруктураДанных.МассивЧисел.Добавить
(
0.1
);


СтруктураДанных.МассивЧисел.Добавить
(
4
);



СтруктураДанных.Проверить
();

КонецПроцедуры


Мы создали свой объект, заполнили его данными и теперь готовы передать его в
другую функцию.

Итоговый вид
решения нашей задачи будет выглядеть так:

&НаСервереБезКонтекста

Процедура

СформироватьПакетНаСервере
()


ТипПакета

=

ФабрикаXDTO.Тип
(
"СтруктураДляПолученияСреднего"
,

"СтруктураДанных"
);


СтруктураДанных

=

ФабрикаXDTO.Создать
(
ТипПакета
);



СтруктураДанных.КоличествоЭлементовВМассиве

=

2
;


СтруктураДанных.Комментарий

=

"Тест"
;


СтруктураДанных.МассивЧисел.Добавить
(
0.1
);

Еу.ыы
-
щВ
-
1М..ю

ДтыьйБКтВББып фу.ыы щВ 1М охя БВлт?фВл т
щ.ВюпыытВБйхВл
.
Бпс
ВртойБту
т сйь.йь
.



Страница
19

из
34

Бесплатные материалы проекта:


Электронная почта:
support
@
Kursy
-
po
-
1
C
.
ru

http
://курсы
-
по
-
1с.рф/
free
/

Телефоны:
8
-
800

1000
-
613
, +7(495) 7777
-
096



СтруктураДанных.МассивЧисел.Добавить
(
4
);


СтруктураДанных.Проверить
();


Ответ

=

ПолучитьСреднее
(
СтруктураДанных
);

КонецПроцедуры


&НаСервереБезКонтекста

Функция

ПолучитьСреднее
(
СтруктураДанных
)


СтруктураДанных.Проверить
();


Сумма

=

0
;


Для

каждого

ЭлМассива

Из

СтруктураДанных.МассивЧисел

Цикл


Сумма

=

Сумма

+

ЭлМассива
;



КонецЦикла
;



Возврат

Сумма/СтруктураДанных.КоличествоЭлементовВМассиве
;

КонецФункции


Создание веб
-
сервиса

После того, как мы научились создавать
XDTO
-
пакеты,

можно перейти к созданию
веб
-
сервисов.

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

Начнем с создания веб
-
сервиса.


Назовем его
«ФункцииДляРассчета»
.
Далее

перейдем на вкладку
Прочее

и добавим
наш
XDTO
-
пакет. Н
азначим
URI
-
пространство
веб
-
сервиса и укажем его адрес:



Еу.ыы
-
щВ
-
1М..ю

ДтыьйБКтВББып фу.ыы щВ 1М охя БВлт?фВл т
щ.ВюпыытВБйхВл
.
Бпс
ВртойБту
т сйь.йь
.



Страница
20

из
34

Бесплатные материалы проекта:


Электронная почта:
support
@
Kursy
-
po
-
1
C
.
ru

http
://курсы
-
по
-
1с.рф/
free
/

Телефоны:
8
-
800

1000
-
613
, +7(495) 7777
-
096



Таким образом

мы создали веб
-
сервис в котором мы сможем использовать типы из
указанных нами пакетов (типы
W
3
C

доступны по умолчанию).

Ес
ли вернутся к нашему примеру,

то это не
кий закрытый модуль. Но модуль,

сам по
себе
, не функция. Функции необходимо

создать. Для этого

переключаемся на
за
кладку
О
перации
.
Создаем операцию (функцию) и даем ей имя.


Выбираем
тип возвращаемого значения
. Если тип возвращаемого значения не будет
совпадать с указанным


будет вызвано исключение.

Возможно пустое значение



указывает на то, что функция может вернуть
Неопределенно
.

В транзакции



если в модуле фу
нкции было вызвано исключение, то
произойдет
откат всего, что было сделано. Например, если вы
создавали элементы справочника,

то они
исчезнут.
Это о
чень удобно ис
по
льзовать, так как в случае неконтролируемой ошибки

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

Далее

создадим па
раметр нашей функции.
Нажимаем

на созданн
ую операцию

правой кнопкой


Д
обавить параметр
. Назовем его
СтруктураДанных

и укажем тип
значения из нашего
XDTO
-
пакета:

В академических целях,
все опе
рации, параметры и прочее


будем

писать
кириллицей, но это не совсем верно, все, что так или иначе выходит во внешнюю сеть
должно быть только на латинице.


Еу.ыы
-
щВ
-
1М..ю

ДтыьйБКтВББып фу.ыы щВ 1М охя БВлт?фВл т
щ.ВюпыытВБйхВл
.
Бпс
ВртойБту
т сйь.йь
.



Страница
21

из
34

Бесплатные материалы проекта:


Электронная почта:
support
@
Kursy
-
po
-
1
C
.
ru

http
://курсы
-
по
-
1с.рф/
free
/

Телефоны:
8
-
800

1000
-
613
, +7(495) 7777
-
096



Вернемся в свойство операции и создадим имя метода


нажмем

на лупу. Функция
будет создана а
втоматически и сразу
будет подставлен
параметр.

Скопируем

туда код нашей функции для расчета и
обновим

конфигурацию.
Далее

необходимо

опубликовать его.

Публикация

веб
-
сервиса

Нажимаем в конфигураторе
Администрирование



Публикация на веб
-
сервере
:


Теперь,
при переходе

по ссылке в браузере:

http://127.0.0.1/fmc/ws/ФункцииДляРассчета.1cws?wsdl

Вы должны увидеть
xml
-
схему. Это и есть описание всего нашего веб
-
сервиса.


Chrome

не смо
жет открыть это описание, по причине, описанной выше


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

Firefox

может скрыть часть определений префиксов пространства имен.

Еу.ыы
-
щВ
-
1М..ю

ДтыьйБКтВББып фу.ыы щВ 1М охя БВлт?фВл т
щ.ВюпыытВБйхВл
.
Бпс
ВртойБту
т сйь.йь
.



Страница
22

из
34

Бесплатные материалы проекта:


Электронная почта:
support
@
Kursy
-
po
-
1
C
.
ru

http
://курсы
-
по
-
1с.рф/
free
/

Телефоны:
8
-
800

1000
-
613
, +7(495) 7777
-
096



Создание

ws
-
ссылки

Для удобной
работы с внешними веб
-
сервисами,

есть такой объект как
ws
-
ссылки.
Мы п
ро него ранее говорили. Т
еперь добавим
ws
-
ссылку и укажем путь:

http://127.0.0.1/fmc/ws/ФункцииДляРассчета.1cws?wsdl

После добавления назовем
ws
-
ссылку
ФункцииДляРассчета
:


Видим, что создалась целая структура, в

котор
ой указаны два пакета. О
дин тот,
который мы создавали ранее, второй пакет


это веб сервис. В
ws
-
ссылке ест
ь полное

описание в
сех типов. Так что добавив е
го

мы можем четко понять рамки и возможности
серверной функции.

Еу.ыы
-
щВ
-
1М..ю

ДтыьйБКтВББып фу.ыы щВ 1М охя БВлт?фВл т
щ.ВюпыытВБйхВл
.
Бпс
ВртойБту
т сйь.йь
.



Страница
23

из
34

Бесплатные материалы проекта:


Электронная почта:
support
@
Kursy
-
po
-
1
C
.
ru

http
://курсы
-
по
-
1с.рф/
free
/

Телефоны:
8
-
800

1000
-
613
, +7(495) 7777
-
096


Немного нюансов
. Д
ве функци
и,
указанные

внизу,

на самом деле


одна и та же
функция, просто определена она для разных версий
SOAP
, для версии
1.1

и
1.2
.
Будем

использовать
1.1
, для нас

принципиальной
ра
зницы нет
, так как мы работаем с веб
-
сервисами при помощи механизмов 1С. А

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

Кроме этого,

пакет
XDTO

веб
-
сервиса
содержит два типа. Первый тип описывает
параметр, а второй


отве
т функции. Т
ак что программируя на клиенте,

мы можем ожидать,
что функция однозначно
вернет

требуемый

формат.


Использование ws
-
ссылки

Т
еперь можем отправить данные на обработку, для этого напишем вот такую
функцию:

&НаСервереБезКонтекста

Процедура

ОтправитьНаСерверНаСервере
()


Соединение

=

WSСсылки.ФункцииДляРассчета.СоздатьWSПрокси
(

"ФункцииДляРассчета"
,
"ФункцииДляРассчета"
,
"ФункцииДляРассчетаSoap"
);


Операция

=

Соединение.ТочкаПодключения.Интерфейс.Операции.Получить
(
"ПолучитьСреднее"
);


СтруктураДанных

=

Соединение.ФабрикаXDTO.Создать
(
Операция.Параметры.Получить
(
"СтруктураДанных"
)
.Тип
);



СтруктураДанных.КоличествоЭлементовВМассиве

=

2
;


СтруктураДанных.Комментарий

=

"Тест"
;


СтруктураДанных.МассивЧисел.Добавить
(
0.1
);


СтруктураДанных.МассивЧисел.Добавить
(
4
);


СтруктураДанных.Проверить
();


Ответ

=

Соединение.ПолучитьСреднее
(
СтруктураДанных
);

КонецПроцедуры


Для начала

создаем соединение, в параметрах указываем
URI
, имя веб
-
сервиса и порт
(версия
SOAP
, так как мы
работаем с первой, то просто добавляем к имени сервиса



Soap
”,
регистр букв важен).

После этого

получаем нужную нам операцию и создаем
XDTO
-
пакет. Обратите
в
нимание на то, как он создается:

ф
абрика объектов берется с
ws
-
ссылки, а не
глобальная.

Так как г
лобальная

требует встроенный

в базу пакет
, а
в нашем случае

на клиенте его может

и

не быть.

Еу.ыы
-
щВ
-
1М..ю

ДтыьйБКтВББып фу.ыы щВ 1М охя БВлт?фВл т
щ.ВюпыытВБйхВл
.
Бпс
ВртойБту
т сйь.йь
.



Страница
24

из
34

Бесплатные материалы проекта:


Электронная почта:
support
@
Kursy
-
po
-
1
C
.
ru

http
://курсы
-
по
-
1с.рф/
free
/

Телефоны:
8
-
800

1000
-
613
, +7(495) 7777
-
096


Далее
идет
обычное заполнение параметров, мы уже делали это ранее.

Ну а в самом конце,

мы посылаем данные на обработку на сервер. Подсказки нет,
поэтому пишем после

соединения имя операции и передаем параметры.


Динамическое создание ws
-
ссылки

Что делать в случае
, если
п
равить конфигурацию

не хочется
, или у нас
установлена

базова
я конфигурация? Т.е. мы не можем

добавить новый объект в дере
во конфигураций.
В этом случ
ае

мы можем создать подключение динамически:

&НаСервереБезКонтекста

Процедура

СозданиеДинамическогоСоединенияНаСервере
()


ВСОпределение
=

Новый

WSОпределения
(
"http://127.0.0.1/fmc/ws/ФункцииДляРассчета.1cws?wsdl"
);


ВСервис

=

ВСОпределение.Сервисы.Получить
(
"ФункцииДляРассчета"
,
"ФункцииДляРассчета"
);


ВТочкаВхода

=

ВСервис.ТочкиПодключения.Получить
(
"ФункцииДляРассчетаSoap"
);


ВОперация

=

ВТочкаВхода.Интерфейс.Операции.Получить
(
"ПолучитьСреднее"
);





СтруктураДанных

=

ВСОпределение.ФабрикаXDTO.Создать
(

ВОперация.Параметры.Получить
(
"СтруктураДанных"
)
.Тип
);


СтруктураДанных.КоличествоЭлементовВМассиве

=

2
;


СтруктураДанных.Комментарий

=

"Тест"
;


СтруктураДанных.МассивЧисел.Добавить
(
0.1
);


СтруктураДанных.МассивЧисел.Добавить
(
4
);


СтруктураДанных.Проверить
();




ВСПрокси

=

Новый

WSПрокси
(
ВСОпределение
,


"ФункцииДляРассчета"
,
"ФункцииДляРассчета"
,
"ФункцииДляРассчетаSoap"
);





Ответ

=

ВСПрокси.ПолучитьСреднее
(
СтруктураДанных
);

КонецПроцедуры

Таким образом
,

нам не обязательно редактировать конфигурацию. Этот способ
является более гибким, но
требует
немного больше кода.


Сериализация и десериализация

Е
сли мы только начали писать код, и как должен выглядеть конечный вариант пакета

пока неизвестно
, или над проектом работает только один человек
, то, конечно,

заниматься

Еу.ыы
-
щВ
-
1М..ю

ДтыьйБКтВББып фу.ыы щВ 1М охя БВлт?фВл т
щ.ВюпыытВБйхВл
.
Бпс
ВртойБту
т сйь.йь
.



Страница
25

из
34

Бесплатные материалы проекта:


Электронная почта:
support
@
Kursy
-
po
-
1
C
.
ru

http
://курсы
-
по
-
1с.рф/
free
/

Телефоны:
8
-
800

1000
-
613
, +7(495) 7777
-
096


такими трудоемкими сценариями
как создание
XDTO
-
пакета, заполнение, проверка и т.д.
не

всегда
нужно.


Также для двух конфигураций, между которыми нужно

настроить обмен

одного
справочника,
нет необходимости

создавать
XDTO
-
пакеты для обмена.

Платформа


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


СериализаторXDTh
.

При помощи этого механизма возможно практически любой объект (таблица
значений, структура, ссылка на объект и т.д.) преобразовать в
xml
, и преобразовать из
xml

обратно в объект.

Решим эту же задачу

без использования

XDTO
-
пакет
а
. Так как

Сериализатор
XDTO

вернет нам строку, то добавим еще один параметр входящий у веб
-
сервиса



СериализованнаяСтруктураДанных
. Этот параметр будет строковый, и у первого, и у
второго параметра

поставим

возможность быть пустыми.



Как сериализовать и
десериализовать объекты?

Для этого мы будем использовать две функции:

Функция

Сериализовать
(
ОбъектСериализации
)


ДеревоВОбъектеXDTO

=

СериализаторXDTO.ЗаписатьXDTO
(
ОбъектСериализации
);


МойXML

=

Новый

ЗаписьXML
;


МойXML.УстановитьСтроку
();

Еу.ыы
-
щВ
-
1М..ю

ДтыьйБКтВББып фу.ыы щВ 1М охя БВлт?фВл т
щ.ВюпыытВБйхВл
.
Бпс
ВртойБту
т сйь.йь
.



Страница
26

из
34

Бесплатные материалы проекта:


Электронная почта:
support
@
Kursy
-
po
-
1
C
.
ru

http
://курсы
-
по
-
1с.рф/
free
/

Телефоны:
8
-
800

1000
-
613
, +7(495) 7777
-
096



ФабрикаXDTO.ЗаписатьXML
(
МойXML
,

ДеревоВОбъектеXDTO
);


Возврат

МойXML.Закрыть
();

КонецФункции


Функция

Десериализовать
(
XMLСтруктураСериализованногоОбъекта
)


ЧтениеXMLДанных

=

Новый

ЧтениеXML
;


ЧтениеXMLДанных.УстановитьСтроку
(
XMLСтруктураСериализованногоОбъекта
);


ТЗ

=

СериализаторXDTO.ПрочитатьXML
(
ЧтениеXMLДанных
);


ЧтениеXMLДанных.Закрыть
();



Возврат

ТЗ
;

КонецФункции

В первую

мы передаем объект, и она нам возвращает строку
xml
, а во вторую

мы
передаем строку
xml
, и

она возвращает первоначальный объект.

На стороне сервера

немного измен
им

код функции веб
-
сервиса:

Функция

ПолучитьСреднее
(
СтруктураДанных
,
СериализованнаяСтруктураДанных
)


Если

ЗначениеЗаполнено
(
СтруктураДанных
)

Тогда


Структура

=

СтруктураДанных.Проверить
();



Иначе


Структура

=

Десериализовать
(
СериализованнаяСтруктураДанных
);


КонецЕсли
;





Сумма

=

0
;


Для

каждого

ЭлМассива

Из

Структура.МассивЧисел

Цикл


Сумма

=

Сумма

+

ЭлМассива
;



КонецЦикла
;



Возврат

Сумма/Структура.КоличествоЭлементовВМассиве
;

КонецФункции


Функция

Десериализовать
(
XMLСтруктураСериализованногоОбъекта
)


ЧтениеXMLДанных

=

Новый

ЧтениеXML
;


ЧтениеXMLДанных.УстановитьСтроку
(
XMLСтруктураСериализованногоОбъекта
);


ТЗ

=

СериализаторXDTO.ПрочитатьXML
(
ЧтениеXMLДанных
);


ЧтениеXMLДанных.Закрыть
();



Возврат

ТЗ
;

КонецФункции


В функции
ПолучитьСреднее

с
делана проверка

на заполнение параметра.
Если
заполнен

первый параметр, мы

возьм
ем

структуру из него,
иначе

значение
второго
параметра
будет преобразовано в начальный объект.

Теперь напишем функцию, которая при помощи
ws
-
ссылки будет передавать
п
араметр. Однако

обратите внимание, что сейчас в
ws
-
ссылке нет второго параметра

и
необходимо

перезаполнить

ее
.

Еу.ыы
-
щВ
-
1М..ю

ДтыьйБКтВББып фу.ыы щВ 1М охя БВлт?фВл т
щ.ВюпыытВБйхВл
.
Бпс
ВртойБту
т сйь.йь
.



Страница
27

из
34

Бесплатные материалы проекта:


Электронная почта:
support
@
Kursy
-
po
-
1
C
.
ru

http
://курсы
-
по
-
1с.рф/
free
/

Телефоны:
8
-
800

1000
-
613
, +7(495) 7777
-
096


Для этого
нажмем

на ней правой кнопкой
:

Загрузить
WSDL



ОК
. После этого
появится второй параметр (если вы перед этим не забыли обновить
конфигурацию
«С
ервер
»
).

Код будет следующий:

&НаСервереБезКонтекста

Процедура

ОтправитьСериализированнуюСтруктуруНаСервере
()


СтруктураДанных

=

Новый

Структура
(
"КоличествоЭлементовВМассиве,Комментарий,МассивЧисел"
,
0
,
""
,
Новый

Массив
);


Соединение

=

WSСсылки.ФункцииДляРассчета.СоздатьWSПрокси
(
"ФункцииДляРассчета"
,
"ФункцииДляР
асс
чета"
,
"ФункцииДляРассчетаSoap"
);


Операция

=

Соединение.ТочкаПодключения.Интерфейс.Операции.Получить
(
"ПолучитьСреднее"
);




СтруктураДанных.КоличествоЭлементовВМассиве

=

2
;


СтруктураДанных.Комментарий

=

"Тест"
;


СтруктураДанных.МассивЧисел.Добавить
(
0.1
);


СтруктураДанных.МассивЧисел.Добавить
(
4
);



СериализованнаяСтруктураДанных

=

Сериализовать
(
СтруктураДанных
);


Ответ

=

Соединение.ПолучитьСреднее
(
Неопределено
,

СериализованнаяСтруктураДанных
);


КонецПроцедуры

&НаСервереБезКонтекста

Функция

Сериализовать
(
ОбъектСериализации
)


ДеревоВОбъектеXDTO

=

СериализаторXDTO.ЗаписатьXDTO
(
ОбъектСериализации
);


МойXML

=

Новый

ЗаписьXML
;


МойXML.УстановитьСтроку
();


ФабрикаXDTO.ЗаписатьXML
(
МойXML
,

ДеревоВОбъектеXDTO
);


Возврат

МойXML.Закрыть
();

КонецФункции


Обратите внимание,

мы

просто создал
и

структуру данных, заполнил
и

ее и
сериализовал
и
, потом
,

без созда
ния фабрики и определения типов,

передал
и

на сервер.

Так как это простой тип


нет
необходимости его описывать, программа сама
постарается привести его к типу, который указан на сервере. Если не получится
,
то будет
исключение.

Как выглядит сериализованая нами структура?

Structure

xmlns=
"http://v8.1c.ru/8.1/data/core"

xmlns:xs=
"http://ww
w.w3.org/2001/XMLSchema"

xmlns:xsi=
"http://www.w3.org/2001/XMLSchema
-
instance"



Property

name=
"
КоличествоЭлементовВМассиве
"


Еу.ыы
-
щВ
-
1М..ю

ДтыьйБКтВББып фу.ыы щВ 1М охя БВлт?фВл т
щ.ВюпыытВБйхВл
.
Бпс
ВртойБту
т сйь.йь
.



Страница
28

из
34

Бесплатные материалы проекта:


Электронная почта:
support
@
Kursy
-
po
-
1
C
.
ru

http
://курсы
-
по
-
1с.рф/
free
/

Телефоны:
8
-
800

1000
-
613
, +7(495) 7777
-
096



Value

xsi:type=
"xs:decimal"

2
/Value&#x-3/-;V8a;&#x-3l-;u8e;&#x-300;


/Property&#x-3/-;P-3;&#xr8o-;p-3;-3r;&#x-3t8;&#xy-30;


Property

name=
"
Комментарий
"



Value

xsi:type=
"xs:string"

Тест
/Value/-3;&#xV-3a;l-3;&#xu-3e;&#x-300;


/Property&#x-3/-;P-3;&#xr8o-;p-3;-3r;&#x-3t8;&#xy-30;


Property

name=
"
МассивЧисел
"



Value

xsi:type=
"Array"



Value

xsi:type=
"xs:decimal"

0.1
&#x/Val;&#xue00;/Value


Value

xsi:type=
"xs:decimal"

4
/Value&#x-3/8;&#xV-3a;&#x-3l-;u-3;-30;


/Value&#x-3/-;V-3; -3l;u-3;-30;


/Property&#x-3/-;P-3;&#xr8o-;p-3;-3r;&#x-3t8;&#xy-30;

/Structure



Видим, что это

уже знакомые нам пространства имен и типы из этих пространств.

Точно так же можно сериализовать, например, таблицу значений
Номенклатура,
Характер
истика, Количество, Цена, Сумма

и т.д. Передавать эту таблицу в другую базу и
в другой базе
,

после десериализации,

работать как с первоначальной таблицей.

При этом есть два условия


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

что

мы
словно работаем
в одной базе.


Отладка веб
-
сервиса

Те, кто пытался сделать отладку на веб
-
сервисе могли заметить, что она не работает.
Это действительно так, но ее можно включить.

Для этого
нужно

перейти в

меню

Администрирование



Публикация на веб
-
сервере



переключится

на

вторую за
кладу,

заполнить поле

и поставить
флаг «Разрешить отладку»
:

Еу.ыы
-
щВ
-
1М..ю

ДтыьйБКтВББып фу.ыы щВ 1М охя БВлт?фВл т
щ.ВюпыытВБйхВл
.
Бпс
ВртойБту
т сйь.йь
.



Страница
29

из
34

Бесплатные материалы проекта:


Электронная почта:
support
@
Kursy
-
po
-
1
C
.
ru

http
://курсы
-
по
-
1с.рф/
free
/

Телефоны:
8
-
800

1000
-
613
, +7(495) 7777
-
096



Не забудьте после этого перезагрузить
Apache
. Если база не файловая, то надо ее
перевести в режим отладки:

1.

Остановить

службу

1C:Enterprise 8.2 Server Agent

2.

Изменить

ветку

в

реестре
:
[
HKEY_LOCAL_MACHINE
\
SYSTEM
\
\
services
\
1C:Enterprise 8.2 Server
Agent
\
]

для

параметра

ImagePath

добавляем

-
debug

и

сохраняем
.

Получается

что
-
то

вроде

такого
:
«/:
\
Program
Files
\
1cv82
\
8.2.19.72
\
bin
\
ragent.exe»
-
srvc
-
agent
-
regport 1541
-
port 1
540
-
range 1560:1591
-
d «/:
\
Program Files
\
1cv82
\
srvinfo»
-
debug

3.

Запустить службу


4.

В конфигураторе зайти в

меню

Отладка



Подключение



Автоматическое

подключение



поставить галочку
«
WEB

сервисы на сервере»:


Еу.ыы
-
щВ
-
1М..ю

ДтыьйБКтВББып фу.ыы щВ 1М охя БВлт?фВл т
щ.ВюпыытВБйхВл
.
Бпс
ВртойБту
т сйь.йь
.



Страница
30

из
34

Бесплатные материалы проекта:


Электронная почта:
support
@
Kursy
-
po
-
1
C
.
ru

http
://курсы
-
по
-
1с.рф/
free
/

Телефоны:
8
-
800

1000
-
613
, +7(495) 7777
-
096




Итоги

Структурируем весь модуль. Теперь мы

знаем, что есть возможность обмениваться
информацией с сервером без файлов, почты и проче
го. После вызова сервера,

мы сразу
будем знать о том, успешно ли принял сервер данные или была некая ошибка.

Данные на сервер можно передавать сериализуя их. Однако в

этом случае
обязательно надо проверять их правильность на сервере. Этот подход удобен
,

если
программист работает один над всем проектом.

С другой стороны, если работа идет в команде, то тут конечно, необходимо
нормировать все данные. Для этого можно использовать
XDTO
-
пакет. Этот пакет
необходимо создать на сервере. На клиенте вся структура пакета будет получена из
wsdl
-
описания, причем не в
ажно

используется статическая
ws
-
ссылка или динамическая.
Стоит
заметить
, что статическая работает быстрее, но в случае изменения веб
-
сервиса
,

требуется
обновление ссылки.

Перед Вами может

стоять
задача
по

синхронизации с
внешними

системами.
Например, с ве
б
-
сайта в


должны выгружаться заказы. То
гда

сайт может использовать
для идентификации
UID

документа
, в
ручную описать
xml
-
структуру документа, и тогда в


можно десериализовать э
т
у структуру в готовый документ.

И

точно так же, выгружая документ на сайт
,

можно его просто сериализовать в
xml

и
сайт, п
р
о
ся этот файл
,

будет его загружать. Это очень важно. Так как в этой структуре
Еу.ыы
-
щВ
-
1М..ю

ДтыьйБКтВББып фу.ыы щВ 1М охя БВлт?фВл т
щ.ВюпыытВБйхВл
.
Бпс
ВртойБту
т сйь.йь
.



Страница
31

из
34

Бесплатные материалы проекта:


Электронная почта:
support
@
Kursy
-
po
-
1
C
.
ru

http
://курсы
-
по
-
1с.рф/
free
/

Телефоны:
8
-
800

1000
-
613
, +7(495) 7777
-
096


описываются все свойства данных и программисту


не потребуется
объяснять веб
-
разработчику, что за колонки есть, какие у них типы,

максимальная длина и т.д.

В случае применения мобильной

платформы в качестве клиента
используется
следующая схема:


Эта схема должна напоминать, что только центральный сервер может выступать в
роли поставщика веб
-
сервиса, а мобильные


только в роли потр
ебителей.

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


невозможна
.

То есть

мобильны
е
устройства
, в том числе, не могут обмениваться данными друг с
другом

напрямую


Это касается только веб
-
сервисов. Е
сли настроить обмен через почту,
ftp

и т.д., то
,

конечно
,

мобильные клиенты могут обмениваться информацией

между собой
.



Еу.ыы
-
щВ
-
1М..ю

ДтыьйБКтВББып фу.ыы щВ 1М охя БВлт?фВл т
щ.ВюпыытВБйхВл
.
Бпс
ВртойБту
т сйь.йь
.



Страница
32

из
34

Бесплатные материалы проекта:


Электронная почта:
support
@
Kursy
-
po
-
1
C
.
ru

http
://курсы
-
по
-
1с.рф/
free
/

Телефоны:
8
-
800

1000
-
613
, +7(495) 7777
-
096




Если Вам интересны аналогиБные
материалы


Рекомендуем пройти регистрацию на материалы по
мобильной платформе:

kursy
-
po
-
1c.ru/mobile
-
apps


Регистрация для полуБения текущих и будущих
бесплатных материалов

проекта
:

kursy
-
po
-
1c.ru/free









Еу.ыы
-
щВ
-
1М..ю

ДтыьйБКтВББып фу.ыы щВ 1М охя БВлт?фВл т
щ.ВюпыытВБйхВл
.
Бпс
ВртойБту
т сйь.йь
.



Страница
33

из
34

Бесплатные материалы проекта:


Электронная почта:
support
@
Kursy
-
po
-
1
C
.
ru

http
://курсы
-
по
-
1с.рф/
free
/

Телефоны:
8
-
800

1000
-
613
, +7(495) 7777
-
096


Дополнительные материалы

Все статьи
проекта
Курсы
-
по
-
1С.рф
:
http://курсы
-
по
-
1с.рф/blog/articles/

Бесплатные материалы проекта
Курсы
-
по
-
1С.рф
:
http://курсы
-
по
-
1с.рф/
free
/

Бесплатный курс

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

в



за 21 день»:

http://курсы
-
по
-
1с.рф/prog1/
-
21days/lp1/


Курсы

по
программированию в 1С
v
.8

Базовый и Продвинутый курсы
по
Программированию на
Платформе 1С 8

http://
www.Spec8.ru
/



Еу.ыы
-
щВ
-
1М..ю

ДтыьйБКтВББып фу.ыы щВ 1М охя БВлт?фВл т
щ.ВюпыытВБйхВл
.
Бпс
ВртойБту
т сйь.йь
.



Страница
34

из
34

Бесплатные материалы проекта:


Электронная почта:
support
@
Kursy
-
po
-
1
C
.
ru

http
://курсы
-
по
-
1с.рф/
free
/

Телефоны:
8
-
800

1000
-
613
, +7(495) 7777
-
096




Приложенные файлы

  • pdf 3284412
    Размер файла: 1 MB Загрузок: 0

Добавить комментарий