Каталог решений - Обмен данными через Web Сервисы

Обмен данными через Web Сервисы

Обмен данными через Web Сервисы

В наличии

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

Категория:

Описание

Приветствую вас, друзья! Сегодня я хочу поделиться с вами опытом работы с WS (Web-Servis). 
Для работы веб-сервиса должен быть установлен Apache, либо iis.

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

1. Создаем Web -Service в удаленной базе , и назовем его "ObmenWS".

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2. После этого необходимо заполнить свойства Web -Сервиса, (Вкладка "Прочее"):

     1) URL Пространства имен — Требуется для идентификации веб-сервиса, по сочетанию его имени и пространству имен, укажем для примера "1.1.1.1";

     2) Пакеты XDTO — это механизм, разработанный фирмой “1С” для обмена данными с другими программными системами посредством XML, позволяющий на уровне языка 1С оперировать не узлами XML, а прикладными понятиями “Сотрудник”, “Счет” и привычными встроенными типами (“ТаблицаЗначений”, “СправочникСсылка” и т.п.). В данном примере не будем создавать собственные пакеты, а будем использовать встроенные пакеты 1С (а именно  — "http://v8.1c.ru/8.1/data/core"). Данный пакет содержит формат "Двоичные данные" — что поможет нам передавать любые типы через хранилище данных.
     3) Имя файла публикации — название файла *.1CWS, имя файла публикации может быть любым, но желательно латинским шрифтом и обязательно с расширением 1cws и желательно должно совпадать с именем каталога на web-сервере. Назовем его как и наш WS — "ObmenWS".

 

 

 

 

 

 

 

 

 

 

 

 

 

Наш Web Сервис готов к работе! Осталось добавить операции в WS для загрузки и выгрузки данных.

2. Создаем операцию с названием "ОстаткиТоваровНаСкладах", и с типом значение -ХранилищеДанных (ValueStorage):

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Создаем параметры для нашей операции. Для примера я создам 3 параметра :

     1) НачалоПериода — с типом Дата (Date);

     2) КонецПериода  —  с типом Дата (Date);

     3) Склад  — С типом Строка (String);

Количество параметров не ограничено, можно создавать сколько необходимо для конкретной задачи (Добавить Организацию например или контрагента и тд.) 

 После добавления параметров, приступаем к добавлению программного кода к нашей операции "ОстаткиТоваровНаСкладах". Нажимаем в свойствах операции на "ИмяПроцедуры" и открываем модуль WS. 

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

	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Наименование КАК НоменклатураНаименование,
		|	ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток,
		|	ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток,
		|	ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход КАК КоличествоПриход,
		|	ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход КАК КоличествоРасход
		|ИЗ
		|	РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Запись, , Склад = &Склад) КАК ТоварыНаСкладахОстаткиИОбороты";
	
	Запрос.УстановитьПараметр("КонецПериода", КонецПериода);
	Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
	Запрос.УстановитьПараметр("Склад", Справочники.Склады.НайтиПоНаименованию(Склад,истина));
	
	ТаблицаРезультата = Запрос.Выполнить().Выгрузить();
	Хранилище = новый ХранилищеЗначения(ТаблицаРезультата);
	Возврат Хранилище;

На этом наш Web Сервис готов! Публикуем наш web сервис и можно подключаться к нему из другой базы.

 

 3. Пример подключения из другой базы  для получения остатков за период по определенному складу:

       1) Создаем внешнюю обработку, в модуле обработки прописываем следующий код:

Процедура ПолучитьТаблицуСДругойБазы()
	НачалоПериода = ТекущаяДата();
	КонецПериода  =  ДобавитьМесяц(ТекущаяДата(),-3);   //3 месяца назад
	Склад = "Основной склад";
	
	Таблица =  ПолучениеДанных(НачПериод,КонПериод,Склад);   //Первый вариант, 
	//Если операций станет много, что бы не писать для каждую операцию свою функцию можно создать одну универсальную
	Таблица =  ПолучениеДанныхОптимизированно("ОстаткиТоваровНаСкладах",НачПериод,КонПериод,Склад); //Второй вариант - оптимизированно!)
	
КонецПроцедуры

Функция ПодключениеКWS()
	МестоположениеWSDL =  			"http://localhost/ObmenWS/ws/ObmenWS.1cws?wsdl" ; //localhost - указываем ваш ip-адрес, где опубликован ws
	ИмяПользователя =   			"Администратор";
	Пароль=             			"Пароль";
	URIПространстваИменСервиса =  	"1.1.1.1 ";
	ИмяСервиса= 					"ObmenWS";
		
	ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL;            
	
	ВСОпределение = Новый WSОпределения(МестоположениеWSDL, ИмяПользователя, Пароль,,,ЗащищенноеСоединение);        	
	ВСПрокси = Новый WSПрокси(ВСОпределение,URIПространстваИменСервиса , ИмяСервиса,ИмяСервиса+"Soap" );     
	
	ВСПрокси.Пользователь = ИмяПользователя;
	ВСПрокси.Пароль = Пароль;
		
	Возврат ВСПрокси;

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

Функция ПолучениеДанныхОптимизированно(ИмяФункцииWS, П1 = Неопределено,
						П2 = Неопределено,
						П3 = Неопределено,
						П4 = Неопределено,
						П5 = Неопределено,
						П6 = Неопределено,
						П7 = Неопределено,
						П8 = Неопределено)
						
	Подключение = ПодключениеКWS();
	Данные = Вычислить("Подключение."+ИмяФункцииWS+"("+?(П1=Неопределено,"","П1")
													 +?(П2=Неопределено,"",",П2")
													 +?(П3=Неопределено,"",",П3")
													 +?(П4=Неопределено,"",",П4")
													 +?(П5=Неопределено,"",",П5")
													 +?(П6=Неопределено,"",",П6")
													 +?(П7=Неопределено,"",",П7")
													 +?(П8=Неопределено,"",",П8") + ")");
	Ответ = Данные;
	Возврат Ответ;
КонецФункции

Функция ПолучениеДанных(НачПериод,КонПериод,Склад)
						
	Подключение = ПодключениеКWS();
	Хранилище = Подключение.ОстаткиТоваровНаСкладах(НачПериод,КонПериод,Склад);
	Таблица = Хранилище.Получить();
	Возврат Таблица;
КонецФункции

На этом всё, Спасибо за внимание! 
Открыт для критики и наиболее изящных методов ! (=

has been added to your cart:
Оформление заказа