Обращение к web сервису 1с. Web-сервисы. Правила построения сервисов по продаже
Знаю, что на хабре не очень-то жалуют многострадальную 1С. Хотя, с выходом платформы 8.3 (с клиентами под Linux), ее стали любить несколько больше. Кстати, так же, совсем недавно интерфейс одной из основных разработок 1С – конфигурация Управление производственным предприятием – был полностью переведен на английский язык. Много раз я встречал вопросы о том, почему здесь не пишут об 1С. Ответ на них довольно очевиден – существует множество специализированных ресурсов, где можно оперативно обсудить все вопросы и что-то почитать.
Есть все основания полагать, что эта статья здесь не выживет, но я все же рискну, потому что в 1С есть некоторые интересные вещи, о которых стоит рассказать.
С некоторых пор в 1С 8.х появилась возможность использования веб-сервисов: 1С может выступать как поставщиком, так и потребителем. В этой статье я покажу, как использовать 1С в качестве потребителя на примере получения курсов валют с сервера ЦБР.
Веб-сервис
У Центробанка существует веб-сервис для получения ежедневных данных: курсы валют, новости, динамика курсов и т.д. Описание сервиса можно найти здесь http://www.cbr.ru/scripts/Root.asp?Prtid=DWS . Нас интересует один из методов этого сервиса: GetCursOnDate(On_date) – получение курсов валют на заданную дату. В метод передается один аргумент On_date – это дата, на которую требуется получить курсы. В результате возвращается XML, содержащий таблицу ValuteCursOnDate (сами курсы и сопутствующая информация).Конфигурирование
Для разработки я взял 1С 8.2 (8.2.15.317 в моем случае) и создал пустую конфигурацию. Для использования внешних веб-сервисов предусмотрен объект WS-ссылки, но использовать его не обязательно, к сервису можно обращаться динамически из кода. Я буду использовать первый вариант, а затем покажу, как можно использовать второй. В конфигурации создал обработку и назвал ее «ЗагрузкаКурсовВалютЦБР». Добавил форму (управляемую) и сделал ее основной. На форме я создал реквизиты и разместил элементы управления так, как показано на рисунке.Сейчас самое главное – создаем ссылку на описание веб-сервиса. В конфигурации добавляем новый объект типа WS-ссылка. В появившемся окне указываем ссылку на WSDL (описание данного формата выходит за рамки статьи, вы можете почитать о нем на Википедии): http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL .
1С на основании полученного описания автоматически создаст визуальную карту веб-сервиса. Можно увидеть название веб-сервиса, посмотреть какие у него доступны операции а так же используемые типы данных.
Конфигурирование на этом почти закончено, осталось сделать пару штрихов для того, чтобы наше приложение выглядело более эстетично. Кликнем правой кнопкой мыши по корню конфигурации и вызовем меню «Открыть командный интерфейс рабочего стола». В появившемся окне необходимо снять флаг «Видимость» напротив обработки «Загрузка курсов валют ЦБР». Нажмем кнопку Ок. Далее еще правый клик по корню конфигурации и вызовем меню «Открыть рабочую область рабочего стола», там сделаем настройку как на рисунке:
Эти настройки позволят нам отобразить форму обработки прямо на рабочем столе (имеется ввиду рабочий стол программы 1С) в режиме 1С Предприятие.
Программирование
Теперь осталось наполнить смыслом нашу обработку: заставить ее получать курсы валют и отображать в таблице на форме. В режиме редактирования формы необходимо добавить новую команду формы, назовем ее ЗагрузитьВалюты. Эту команду необходимо связать с кнопкой, расположенной на форме. Действие для команды заполним следующим кодом (прим. автора: ничего себе, на хабре есть подсветка кода 1С, правда она работает не корректно): &НаКлиенте
Процедура ЗагрузитьВалюты(Команда)
Если НЕ ЗначениеЗаполнено(ДатаЗагрузки) Тогда
Сообщить("Не выбрана дата загрузки!", СтатусСообщения.Важное);
Возврат;
КонецЕсли;
ТаблицаКурсовВалют.Очистить();
ЗагрузитьКурсыВалют(ДатаЗагрузки);
КонецПроцедуры
Здесь сначала проверяется, заполнена ли дата (если не заполнена, то сообщаем об этом пользователю и больше ничего не делаем). Затем очищается таблица, расположенная на форме и вызывается процедура ЗагрузитьКурсыВалют(), в которую передается дата.
Код процедуры ЗагрузитьКурсыВалют(), пояснения данны в комментариях к коду:
Процедура ЗагрузитьКурсыВалют(фДатаЗагрузки)
//Создаем прокси для обращения к внешнему веб-сервису,
// передаем в функцию URI пространства имен, имя сервиса, имя порта.
Прокси = WSСсылки.CBR_DailyInfoWebServ.СоздатьWSПрокси("http://web.cbr.ru/", "DailyInfo", "DailyInfoSoap");
//Получаем тип параметра, который передается в метод GetCursOnDate.
ТипWSПараметра = Прокси.ФабрикаXDTO.Пакеты.Получить("http://web.cbr.ru/").Получить("GetCursOnDate");
//Создаем параметр на основе типа и заполняем значение параметра On_Date.
WSПараметр = Прокси.ФабрикаXDTO.Создать(ТипWSПараметра);
WSПараметр.On_Date = фДатаЗагрузки;
//Вызываем метод веб-сервиса, записываем результат в переменную КурсыВалют.
КурсыВалют = Прокси.GetCursOnDate(WSПараметр);
//Перебираем таблицу ValuteCursOnDate, каждое значение таблицы
// добавляем в таблицу на форме (колонки заполняем соответствующими значениями).
Для Каждого Элемент Из КурсыВалют.GetCursOnDateResult.diffgram.ValuteData.ValuteCursOnDate Цикл
НоваяСтрокаТЗ = ТаблицаКурсовВалют.Добавить();
НоваяСтрокаТЗ.НазваниеВалюты = Элемент.Vname;
НоваяСтрокаТЗ.Номинал = Элемент.Vnom;
НоваяСтрокаТЗ.ЦифровойКодВалюты = Элемент.Vcode;
НоваяСтрокаТЗ.СимвольныйКодВалюты = Элемент.VChCode;
НоваяСтрокаТЗ.КурсВалюты = Элемент.Vcurs;
КонецЦикла;
КонецПроцедуры
Теперь можно обновлять конфигурацию БД (F7) и запускать 1С Предприятие (F5). Если все сделали верно, то должны увидеть окно как на рисунке ниже:
Чтобы проверить результат, нам нужно ввести дату, на которую хотим получить курсы валют и нажать на кнопку «Загрузить валюты». В случае успешного запроса, таблица на форме заполнится значениями курсов:
Напоследок хочу показать, как можно обратиться динамически к внешнему веб-сервису, то есть без добавления объекта WS-ссылка. Таким образом, мы можем использовать такие веб-сервисы из внешних обработок без привязки к конфигурации.
В процедуре ЗагрузитьКурсыВалют() строку
Определения = Новый WSОпределения("http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL");
Прокси = Новый WSПрокси(Определения, "http://web.cbr.ru/", "DailyInfo", "DailyInfoSoap");
Сначала мы создаем так называемые определения для веб-сервиса из его WSDL. Затем так же создаем прокси для обращения к нему.
Как видно, использовать внешние веб-сервисы из 1С в целом довольно просто (хотя и есть некоторая сложность в понимании определения типов, у меня в том числе).
Если данная публикация найдет здесь отклик, то есть еще несколько тем, о которых можно рассказать.
Мы рассмотрели общие понятия использования механизма « Web -сервисов». Освежим некоторые знания.
Web-сервисы применяются для обмена данными между сервером и клиентом; формат XML используется для «упаковывания» данных в целях взаимопонимания между обоими участниками общения.
РАЗДЕЛ I
ПРИМЕР РЕАЛИЗАЦИИ WEB -СЕРВИСА В СИСТЕМЕ «1С:ПРЕДПРИЯТИЕ»
ЗАДАЧА: Необходимо создать web-сервис, обращаясь к которому клиенты могут определить всю необходимую информацию по своим заявкам.
Задача является демонстрационной и служит только примером для понимания и обучения механизму web -сервисов.
РЕШЕНИЕ:
Шаг 1. Создадим новую информационную базу без конфигурации для разработки новой конфигурации.
Шаг 2. Добавим в конфигурацию несколько новых объектов
Справочник «Клиенты»;
Документ «Заявка»;
Перечисление «СтатусыЗаявок».
Шаг 3. Создадим новый XDTO-пакет.
Почему и для чего мы создаем XDTO-пакет? Подробнее об использовании механизма XDTO можно прочитать в «Глава 16. Руководство разработчика» и .
Коротко отметим лишь только то, что механизм XDTO является универсальным способом представления данных для взаимодействия с различными внешними источниками данных и программными системами.
В нашем случае пакет XDTO создается для описания возвращаемого значения web-сервиса.
Раскроем ветку «Общие» → «XDTO-пакеты» → Добавить…
Укажем имя XDTO-пакета «DocumentsData » и его пространство имен http://localhost/request или http://192.168.1.76/request (для облегчения понимания и процесса обучения, мы указываем локальный IP-адрес компьютера, где установлен web-сервер (поддерживаемые web-сервера: IIS или Apache)). Каждый Web-сервис может быть однозначно идентифицирован по своему имени и URI пространству имен, которому он принадлежит.
Наш пакет содержит два типа объектов XDTO:
1) Сustomer - для передачи данных элемента справочника «Клиенты».
- Name ;
2) Document - для передачи данных документа «Заявки»
Этот тип объекта XDTO будет содержать следующие свойства:
- Сustomer - тип Сustomer из пространства имен http://192.168.1.76/request ; представляет собой ссылку на объект XDTO, который мы определили выше;
- Status - тип string из пространства имен http://www.w3.org/2001/XMLSchema ;
- Numder - тип string из пространства имен http://www.w3.org/2001/XMLSchema .
Шаг 4. Добавим в конфигурацию новый Web-сервис
Раскроем ветку «Общие» → «Web-сервисы» → Добавить…
Для Web-сервиса укажем следующими значения свойств:
Имя - DocumentsData
URI Пространства имен - http://192.168.1.76/request
Пакеты XDTO - DocumentsData или http://192.168.1.76/request
Имя файла публикации - request.1cws
Шаг 5. У созданного Web-сервиса определим операцию «GetData »
Значения свойств операции:
Тип возвращаемого значения - Document (http://192.168.1.76/request)
Возможно пустое значение - Истина
Имя процедуры - GetData .
Шаг 6. У операции GetData определим параметр Сustomer со следующими значениями свойств:
Тип значения - тип string из пространства имен http://www.w3.org/2001/XMLSchema;
Направление передачи - входной .
Шаг 7. Откроем модуль созданного Web-сервиса и поместить в него функцию Получить(), которая будет выполняться при вызове данного Web-сервиса.
Функция GetData(Сustomer) // Получить типы объектов XDTO КлиентТип = ФабрикаXDTO.Тип("http://192.168.1.76/request", "Сustomer"); ЗаявкаТип = ФабрикаXDTO.Тип("http://192.168.1.76/request", "Document"); // Получаем клиента КлиентСсылка = Справочники.Клиенты.НайтиПоНаименованию(Сustomer); Если Не ЗначениеЗаполнено(КлиентСсылка) Тогда Возврат Неопределено; КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | Заявка.Ссылка, | ПРЕДСТАВЛЕНИЕ(Заявка.Статус) КАК Статус, | Заявка.Номер |ИЗ | Документ.Заявка КАК Заявка |ГДЕ | Заявка.Клиент = &Клиент"; Запрос.УстановитьПараметр("Клиент", КлиентСсылка); РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.Пустой() Тогда Возврат Неопределено; КонецЕсли; Выборка = РезультатЗапроса.Выбрать(); Выборка.Следующий(); Документ = Выборка.Ссылка.ПолучитьОбъект(); // Создать объект XDTO заявки Заявка = ФабрикаXDTO.Создать(ЗаявкаТип); Заявка.Numder = Выборка.Номер; Клиент = ФабрикаXDTO.Создать(КлиентТип); Клиент.Name = КлиентСсылка.Наименование; Заявка.Сustomer = Клиент; Заявка.Status = Выборка.Статус; // Вернуть заявку Возврат Заявка; КонецФункции
Шаг 8. Опубликуем созданный Web-сервис на веб-сервере.
Пункт меню Конфигуратор: «Администрирование» → «Публикация на Web-сервере».
На вкладке «Web-сервисы» устанавливаем признак «Публиковать Web-сервисы» и напротив нашего нового Web-сервиса также ставим «галочку».
РАЗДЕЛ II
ПРИМЕР ОБРАЩЕНИЯ К WEB -СЕРВИСУ СИСТЕМЫ «1С:ПРЕДПРИЯТИЕ» ИЗ СТОРОННЕГО ПРИЛОЖЕНИЯ
Основное назначение механизма Web-сервисов в системе «1С:Предприятие» - это передача необходимых данных сторонним приложениям.
Рассмотрим пример разработки приложения на Delphi обращения к нашему web-сервису из первого раздела данной статьи.
Шаг 1. Создадим новый проект и на форме разместим несколько элементов управления
Текстовое поле - используется для вывода полученной от web-сервиса информации;
Две кнопки - очистка текстового поля и обращение к web-сервису;
Поле ввода - передаваемый в web-сервис параметр.
Шаг 2. Выполняем импорт WSDL-файла
В результате мы получаем новый модуль request (такое наименование мы определили непосредственно в 1С). В данном модуле имеется все необходимая информация по web-сервису.
Шаг 3. Напишем обработчик вызова web-сервиса
Переменная DocumentDataPortType уже определена в модуле request
Шаг 4. Запустить приложение и выполнить проверку.
РАЗДЕЛ III
ПРИМЕР ОБРАЩЕНИЯ К WEB -СЕРВИСУ В СИСТЕМЕ «1С:ПРЕДПРИЯТИЕ»
Шаг 1. Создадим новую внешнюю обработку с именем «WEB_Service»
Шаг 2. Для обработки определим новую форму
Шаг 3. У формы укажем несколько реквизитов
Клиент - тип «Строка»
КлиентВозврат - тип «Строка»
НомерВозврат - тип «Строка»
СтатусВозврат - тип «Строка».
Выведем реквизиты на форму.
Шаг 4. Добавим команду формы «ПолучитьДанные »
Укажем обработчик команды
&НаКлиенте Процедура ПолучитьДанные(Команда) ПолучитьДанныеНаСервере(Клиент); КонецПроцедуры Процедура ПолучитьДанныеНаСервере(Клиент) // Создать WS-прокси на основании ссылки и выполнить операцию Получить() Определение = Новый WSОпределения("http://192.168.1.76/WEB_Service/ws/request.1cws?wsdl"); Прокси = Новый WSПрокси(Определение, "http://192.168.1.76/request", "DocumentsData", "DocumentsDataSoap"); ДанныеЗаявки = Прокси.GetData(Клиент); Если ДанныеЗаявки = Неопределено Тогда КлиентВозврат = "Неопределено"; СтатусВозврат = "Неопределено"; НомерВозврат = "Неопределено"; Возврат; КонецЕсли; КлиентВозврат = ДанныеЗаявки.Сustomer.Name; СтатусВозврат = ДанныеЗаявки.Status; НомерВозврат = ДанныеЗаявки.Numder; КонецПроцедуры
Система «1С:Предприятие» может использовать веб-сервисы, предоставляемые другими поставщиками, двумя способами:
С помощью статических ссылок, создаваемых в дереве конфигурации;
«плюс»: большая скорость работы;
«минус»: повторный импорт WSDL-описания средствами конфигуратора и сохранение измененной конфигурации.
С помощью динамических ссылок, создаваемых средствами встроенного языка
(соответственно «минусы» статических для динамических - «плюсы»)
РАЗДЕЛ IV
ОТЛАДКА WEB-СЕРВИСОВ В СИСТЕМЕ «1С:ПРЕДПРИЯТИЕ»
Для локального web-сервиса необходимо:
Шаг 1. Положить на клиент, где запускается система 1С файлик webservicecfg.xml со следующим содержимом
Шаг 2. В файл default . vrd публикации конфигурации добавить строку
Шаг 3. В конфигураторе выбрать пункт меню
«Отладка» → «Подключение» → «Автоматическое подключение» → «Web-сервисы на сервере»
Шаг 4. Нажать на кнопку «OK»
Для серверного варианта надо еще сервер 1с запускать в режим отладки с ключом /debug
Веб-сервисы в 1С
В данной статье будет рассмотрены вопросы интеграции 1С с уже существующими веб-сервисами и использование самой 1С как веб-сервиса.
При этом под веб-сервисами будет пониматься системы, работающие в интернете и обеспечивающие взаимодействие с ними не только по SOAP (что является именно веб-сервисом), но и другими способами, включая обычные HTTP(S)-запросы.
Риски использования веб-сервисов 1С
В платформе 1С81 появилась реализация веб-сервисов.
Но их использование чревато рисками:
- 1С8 плохо работает через HTTPS, средства диагностики отсутствуют, поэтому понять, почему при наличии сертификата сервис не хочет работать через HTTPS порой невозможно. Выход - реализация веб-сервисов через CURL или поднятие HTTPS-туннеля.
- 1С8 придерживается своих правил валидации WSDL-схем. Порой по необъяснимым причинам WSDL-схема не хочет загружаться в WS-ссылку. Узнать причину можно только на партнерском форуме у одного специалиста. Средства диагностики WSDL-схемы отсутствуют, не указывается даже причина или строка, на которой прерывается загрузка схемы.
Правила построения сервисов по продаже
Клиенту выдается документ о продаже (чек) только в том случае, если транзакция по сервису прошла успешно. Иначе возможна ситуация, когда клиент получит чек и будет пребывать в уверенности, что получил услугу, а на самом деле это не так.
Использование внешних SOAP-сервисов
Веб-сервисы SOAP используют WSDL схемы и объекты XDTO для представления данных.
Загрузка WSDL
Для того, чтобы использовать внешний сервис, нужно загрузить его WSDL-схему.
Проверка валидности WSDL-схемы
Иногда WSDL-схема не загружается в 1С. Проверить валидность (правильность) схемы можно любым валидатором WSDL-схем, например http://www.validwsdl.com/ .
Нужно загрузить схему на какой-нибудь http-сайт (можно по ftp) и указать адрес файла, в который загружена схема:
Особенности загрузки WSDL в 1С
Особенность загрузки WSDL в 1С в том, что валидные схемы могут не загружаться. Никакого встроенного валидатора нет, поэтому приходится искать ошибку методом деструктивного анализа, последовательно уменьшая количество элементов в схеме. Можно, например, удалить описание веб-сервиса.
Обработка для тестирования работающего внешнего веб-сервиса
Для тестирования работающего внешнего веб-сервиса используйте обработку «ТестПроизвольногоВебСервиса.epf» из пакета к этой статье.
Тестирование можно использовать на примере сервиса Morpher , склоняющего имена (адрес сервиса http://www.morpher.ru/WebServices/Morpher.asmx?WSDL):
Таким способом можно протестировать любой сервис, который имеет простые точки входа, содержащие параметры простых типов: число, дата, строка.
В обработке можно указать также логин и пароль, которые требуются для авторизации доступа к веб-сервису.
Стандартные средства отладки сервисов
Для отладки можно использовать программу SoapUI, который может передать произвольный запрос веб-сервису и получить от него ответ.
SOAP и HTTPS
К сожалению, SOAP в 1С достаточно капризно ведет себя при работе через протокол HTTPS, практика показывает, что добиться HTTPS соединения невозможно, хотя возможность и продекларирована в платформе. Сказывается отсутствие средств диагностики и отладки для выяснения причин, из-за которых не устанавливается соединение. Поэтому удобно использовать SOAP через CURL.
Встроенный механизм использования HTTPS подразумевает, что все сертификаты должны быть опубликованы в общем файле pem в каталоге программы 1С.
Использование 1С как сервиса
Правила разработки сервиса на базе 1С
Операция «Hello»
Правилом хорошего тона является создание в сервисе операцию, которая информирует о том, что сервис доступен. Это облегчает жизнь интеграторов, им будет проще проверять, налажена ли связь с сервисом.
Например, можно использовать операцию Hello без параметров, которая просто возвращает булево значение Истина.
Публикация веб-сервиса
Процедура хорошо описана в документации: file:///C:/Program%20Files/1cv81/AddDoc/RU/V8AddDoc81.htm#_Toc176167634 :
Задача публикации Web-сервисов сводится к размещению конфигурационных файлов *.1cws Web-сервисов в соответствующем каталоге веб-сервера с соответствующими настройками для веб сервера. Для того, чтобы выполнить публикацию Web-сервисов, следует выполнить команду меню «Администрирование | Публикация Web-сервисов».
В результате выполнения этой команды будет открыто окно публикации Web-сервисов.
Окно публикации Web-сервисов содержит путь к веб-серверу и два списка:
- «Web-сервисы» - список Web-сервисов конфигурации;
- «Публикация» - список Web-сервисов, опубликованных на указанном веб-сервере.
С помощью кнопки «Соединение…» следует указать веб-сервер, на котором требуется опубликовать Web-сервисы.
Окно выбора пути к веб-серверу позволяет указать путь двумя способами:
- на закладке «Файлы» - этот способ используется в том случае, когда публикация выполняется на том же компьютере, на котором установлен веб-сервер. В качестве пути указывается локальный каталог, соответствующий интернет-странице, с которой будет выполняться вызов публикуемого Web-сервера;
- на закладке «FTP сайт» - этот способ используется в том случае, когда требуется опубликовать Web-сервис на удаленном компьютере. Для выполнения публикации необходимо указать параметры FTP-соединения с удаленным компьютером и каталог, в котором будет опубликован Web-сервис.
Публикация выбранного Web-сервиса осуществляется с помощью кнопки «Опубликовать»
Для отмены публикации Web-сервиса используется кнопка «Удалить».
Публиковать можно в локальном каталоге или по FTP. Можно публиковать и на удаленный сервер по UNC-пути, если удаленный сервер входит в локальную сеть.
После публикации веб-сервис доступен по адресу «http://localhost/test.1cws» или «http://xxx.ru/test.1cws», где xxx.ru - адрес удаленного сервера а localhost - типовой адрес локального сервера.
Авторизация к веб-сервису 1С
Для доступа к сервису нужно пройти аутентификацию.
Вопросы авторизации хорошо рассмотрены тут: http://www.forum.mista.ru/topic.php?id=341168 и в документации file:///c:/Program%20Files/1cv81/AddDoc/RU/V8AddDoc81.htm
Обычно веб-сервис работает под одним конкретным пользователем (чаще - специально созданным). Можно пользователя 1С "прикрепить" средствами Windows-аутентификации к пользователю Windows IUSR_ (для пользователя отключить авторизацию 1С). Как вариант, можно очистить список пользователей 1С, тогда авторизация не требуется.
Если требуется несколько пользователей, то можно создать несколько логинов для веб-сервера, к каждому из них привязать пользователя Windows и соответственно, прописать в 1С доступ к пользователям Windows.
В свойствах Пользователь и Пароль объекта WSПрокси используется не логин 1С, а логин пользователя веб-сервера.
Тестирование веб-сервиса 1С
Для тестирования 1С как веб-сервиса используйте обработку «ТестПроизвольногоВебСервиса.epf», как описано в разделе «Тестирование работающего внешнего веб-сервиса».
Файл 1cws и является WSDL-описанием веб-сервиса 1С.
Использование сервисов в Рознице
Обычно в рознице сервисы используются для оказания различных услуг населению - прием платежей, погашение кредитов, денежные переводы, покупка программного обеспечения и т.п.
При этом по оказанной услуге в 1С формируется чек, в котором сохраняются параметры транзакции. После чего этот чек распечатывается клиенту с подробной информацией об оказанной услуге. Возможна печать предварительного чека, для того, чтобы клиент подтвердил введенные с его слов данные своей подписью.
Сервис может быть по-разному интегрирован в розничную программу, написанную на языке 1С (УТ, Розница и другие):
- Может быть написана обработка или код на языке 1С, который выполняет всю работу с сервисом.
- Может использоваться программа, которая работает с сервисом, а в 1С передает только информацию для пробития чеков.
Организация служебных данных в 1С
Для хранения информации о транзакции в чеке необходимо создать дополнительную табличную часть «Сложные продажи» с реквизитами:
- Номенклатура - привязка к номенклатуре чека.
- Параметр - ссылка на справочник «Сложные продажи: Параметры».
- Значение - значение параметра, составного типа. Строковое представление должно быть довольно длинным (1024 символа), чтобы помещался текст чека.
Справочник «Сложные продажи: Параметры» содержит перечень параметров транзакции.
Табличную часть выгоднее использовать, чем набор реквизитов, т.к. у транзакции их может быть очень много, а в других чеках, не связанных с сервисом, эти реквизиты не будут использоваться, и будут занимать лишнее место. Кроме того, такое решение универсально для любого сервиса и не требует реструктуризации данных после внедрения нового сервиса.
Продавцу делается отдельная закладка (или печатная форма, чтобы не менять конфигурацию), в которой он может посмотреть табличку реквизитов транзакции для чека.
Использование обработок на языке 1С
Рассмотрим на примере условной услуги Paym для конфигурации «Розница».
- Заведем в 1С предопределенный элемент справочника номенклатуры «Paym». В режиме 1С:Предприятия после обновления конфигурации ему нужно назначить вид товара «Услуга».
- В процедуре «Добавить номенклатуру в таб. часть» модуля формы «Регистрация продаж» вызываем обработку работы с сервисом, написанную на языке 1С. В случае успешного осуществления платежа записываем и проводим чек:
- Обработка должна напечатать предчек (если требуется), заполнить табличную часть сложных продаж и подготовить текст печати чека в предопределенном реквизите «PaymТекстЧека».
- В процедуре «Провести и распечатать чек» модуля чека подменяем наименование товара на сохраненное в реквизите для чека. Текст подменяется только для продажи, для возврата печатается просто название услуги, как обычно.
Отдельный вопрос - как обеспечить завершенность транзакции. Т.е. если транзакция прошла в сервисе, как сделать, чтобы она не потерялась в 1С. Наиболее оптимальный путь - сверка реестров. Но это предмет отдельного рассмотрения.
Использование программ, интегрируемых с 1С
XDTO
Часто в веб-сервисах используется XDTO. Приведем наиболее важные советы и рецепты по использованию XDTO в 1С.
XDTO в платформе 1С
XDTO-пакеты, описанные в ветке «XDTO-объекты» конфигурации, доступны для создания типов и объектов в глобальной фабрике Фабрика XDTO. Это не сразу становится очевидным.
Некоторые типы в схеме не имеют имени, чтобы их получить, надо пройтись по иерархии типов.
В примере был описан список System, содержавший структуры XDTO. Чтобы создать саму структуру, нужно было получить ее тип таки вот образом:
Тип = Фабрика.Тип("urn:my.ru:MasterData:Business", "Business").Свойства.Получить("System").Тип;
Частые проблемы с XDTO
Разные форматы XSD-схем
В некоторых форматах теги называются xs:, в некоторых xsd:, но 1С благополучно понимает оба формата. Однажды была ситуация, что XSD нормально без ошибок импортировалась в 1С, но не создавала ни одного пакета. Причина была в отсутствии атрибута targetNamespace у тега, соответственно 1С не знала, в какой пакет помещать схему, но ошибок не выдавала.
Сопровождение сервисов
Учитывая, что сервис - это совокупность двух систем - 1С и внешней, ошибки могут быть в обоих системах, что снижает общую надежность работы.
Для того, чтобы проще было разбираться в причинах отказов в работе сервисов, рекомендуется использовать комплекс мер.
Протоколирование запросов
Ссылки
- XDTO
- Хорошее описание XDTO http://pro1c.org.ua/index.php?showtopic=214
- Бесплатные интересные веб-сервисы:
- Аэрофлот - информация о расписании самолетов
- Морфер - склонение имен http://www.morpher.ru/WebServices/Morpher.aspx
- Неразобранные:
- Установка и использование Веб-сервисов
- v8: как изменить конфигурационный файл апача?
- v8: продолжение темы с web-сервисами - не могу подключить web-сервис
- v8: дальше ползу по веб-сервисам - не могу создать прокси...
- Книга знаний: v8: Использование внешних web-сервисов в 1С:Предприятие 8 ;
- Установка и использование Веб-сервисов
Механизм Web-сервисов позволяет использовать систему, написанную на платформе 1С, как набор сервисов в сложных распределенных и гетерогенных системах, а также позволяет интегрировать ее с другими информационными системами с использованием сервис-ориентированной архитектуры (SOA).
Платформа 1С позволяет разработчику вызывать Web-сервисы, предоставляемые другими поставщиками, двумя способами:
- с помощью статических ссылок, создаваемых в дереве объектов конфигурации;
- с помощью динамических ссылок, создаваемых средствами встроенного языка.
При использовании динамической ссылки, описание Web-сервиса получается каждый раз при вызове Web-сервиса. Скорость работы при этом уменьшается, но зато такой подход обеспечивает актуальность описания Web-сервиса поставщика, то есть используется последняя версия WSDL-документа. В случае же использования статических ссылок для получения актуального описания Web-сервиса требуется выполнить повторный импорт WSDL-документа средствами конфигуратора и затем сохранить измененную конфигурацию.
*WSDL-документ - язык описания веб-сервисов и доступа к ним, основанный на языке XML.
Рассмотрим пример вызова Web-сервиса с помощью динамической ссылки на примере сервиса проверки правописания Яндекс.Спеллер. Для доступа к Яндекс.Спеллеру по HTTP предлагаются XML-, SOAP-, JSON- и JSONP-интерфейсы. Все интерфейсы обеспечивают одинаковую функциональность и используют одни и те же входные параметры. WSDL-документ для SOAP доступен по адресу: http://speller.yandex.net/services/spellservice?WSDL .
Функция вызова Web-сервиса:
// Функция осуществляет проверку правописания текста.
// Параметры
// ПроверяемыйТекст - Строка - текст для проверки правописания.
// Возвращаемое значение:
// Строка - слова, в которых допущены ошибки.
&НаСервере
Функция ПроверитьОрфографию(ПроверяемыйТекст)
МестоположениеWSDL = "http://speller.yandex.net/services/spellservice?WSDL";
WSОпределение = Новый WSОпределения(МестоположениеWSDL);
ПространствоИмен = "http://speller.yandex.net/services/spellservice";
SpellService = Новый WSПрокси(WSОпределение, ПространствоИмен, "SpellService", "SpellServiceSoap");
Ответ = SpellService.checkText(ПроверяемыйТекст);
Ошибки = "";
Для Каждого Ошибка Из Ответ.error Цикл
Ошибки = Ошибки + "Ошибка в слове: " + Ошибка.word + Символы.ПС;
КонецЦикла;
Возврат Ошибки;
КонецФункции // ПроверитьОрфографию()
В данной функции создается объект WSОпределения , который получает определение Web-сервиса из WSDL-документа, адрес документа приведен выше.
На основе определения Web-сервиса создается объект WSПрокси и связывается с точкой подключения Web-сервиса SpellServiceSoap .
Для инициализации объекта WSПрокси
вся необходимая информация содержится в элементе
Адрес пространства имени содержится в теге targetNamespace
корневого элемента WSDL-документа
3. Адрес пространства имени Web-сервиса |
4. Операции Web-сервиса и их типы входящих и исходящих сообщений |
К сожалению, платформа 1С во всем объеме не поддерживает работу с Web-сервисами средствами встроенного языка, например, задать значения атрибутов lang, options, format
для входящего сообщения операции checkText()
становится невозможным, так как нам дозволено только передавать параметры операции:
5. Описание входящего сообщения операции checkText() |
А так, работать можно! :)
Обработку вызова веб-сервиса Яндекс.Спеллер можно скачать по этой
Web-сервис в 1С 8.3 и 8.2 — объект метаданных, позволяющий интегрировать платформу 1С с другими информационными системами при помощи сервис-ориентированной архитектуры (SOA).
Рассмотрим создание и настройку на примере веб-сервиса, позволяющего производить двухсторонний обмен между базами 1С 8 по средству SOAP.
Для начала обратим внимание на вкладку Прочее:
Получите 267 видеоуроков по 1С бесплатно:
- В поле URI пространства имен описывается расположение идентификатора ресурса.
- — описание типов, с которыми сможет работать будущий веб-сервис.
- Имя файла публикации — название файла *.1CWS, который будет размещен на веб-сервере
Структура веб-сервиса 1С
Рассмотрим структуру веб-сервиса:
DataExchange — сам web-сервис. UnloadData, LoadData — операции, по сути, описание функций, которые можно вызывать по протоколу SOAP. ExchangePlanName, NodeCode и т.д. — передаваемые веб-сервису значения.
Модуль веб-сервиса
В модуле закладывается самое интересное — описание функций будущего веб-сервиса. В нашем случае мы описываем функционал, позволяющий получать и отправлять данные, используя стандартные механизмы обмена 1С. Т.к. обмен идёт между одной платформой — 1С, то они не требуют сериализации данных.