gifts2017

Универсальный обмен данными XML через web-сервисы

Опубликовал Олег Маслов (Mleg) в раздел Обмен - Обмен через XML

Организация онлайн-обмена данными в формате "Конвертации данных" через web-сервисы

Вступление

Целью статьи является рассказать о том, как организовать передачу через web-сервис XML-данных в формате универсального обмена данными в информационную базу на платформе 1С:Предприятие 8.1 и старше. А также как получить из базы xml-данные. Cтатья может быть полезна для знакомства с web-сервисами. Если уже знакомы с ними, то, думаю, можете почерпнуть для себя новые полезные приемы.

Универсальный обмен данными XML, он же "1С:Конвертация данных" – это технология обмена данными между различными конфигурациями на платформе 1С.
С помощью этой технологии организованы все "типовые" обмены (УТ  Бухгалтерия, УТ  Розница, ЗУП  Бухгалтерия и т.д.). А также можно организовать свои собственные сценарии обмена с нуля между любыми конфигурациями на платформах 1С (начиная с 7.7). Обучение технологии «1С:Конвертации данных» не является целью данной статьи. Подразумевается, что вы с ней  знакомы или познакомитесь из других источников, их предостаточно. Могу порекомендовать материалы на диске ИТС. Или, может быть, вам вообще не нужно с ней знакомиться, а просто автоматизировать саму передачу данных.
Попутно попробую рассказать немного теории. Чтобы «подружить» с
web-сервисами тех, кто мало с ними знаком.

Технология «Конвертации данных» предлагает два способа передачи данных: через файлы – в одной базе выгрузили, в другой загрузили, либо через COM-соединение. Оба способа имеют свои недостатки. Для меня, я бы сказал, фатальные. А если серьезно, просто таят в себе существенные неудобства. Расписывать недостатки и убеждать не буду – это отдельная тема. Коротко перечислю достоинства web-сервисов, важные для меня:

  1. Возможность организовать онлайн-обмен;
  2. Возможность организовать удаленный онлайн-обмен, т.е. через Интернет;
  3. База-приемник и база-источник могут работать на разных релизах и даже версиях платформы (COM-соединение в таких ситуациях использовать проблематично, почти невозможно);
  4. Очень быстрая установка соединения и очень быстрая передача данных. Правда, «холодный» запуск по времени сравним с COM-соединением.
  5. Удобно для разработчика, возможность использовать одну и ту же технологию трансфера данных как для обменов 1С  1C, так и для обменов 1С  Другие системы.

Вообще, я «фанат» web-сервисов. Мог бы ещё много рассказать об их отладке, обмене с «чужеродными» средами, в том числе такими проблемными, как PHP (в виду вольного обращения данной платформы со стандартами SOA). Но это темы для отдельных статей. 

Инфраструктура

Вопросы установка и настройка web-сервера, публикации web-сервисов не рассматриваются в данной статье. Подразумевается, что это вы делать умеете или готовы разобраться, или у вас просто есть готовая инфраструктура. Могу порекомендовать документацию к 1С:Предприятию и «погуглить» в Интернете (именно «и», а не «или»).

Реализация. Серверная сторона.

Сервер – это для нас информационная база, которая принимает и отдает данные. Всё делаем на платформе 1С:Предприятие 8.2 (прикладное решение не важно).

Web-сервис

Добавляем web-сервис. Назовем «ОбменДаннымиXML». Свойства следующие:

Ключевым свойством для нас является Пакеты XDTOВыбранный пакет «http://v8.1c.ru/8.1/data/core» представляет встроенные типы 1С:Предприятия, общие для любых конфигураций, такие как ХранилищеЗначения, Структура, Массив и т.п. Пускай вас не смущает число 8.1 в имени пакета. Имеется в виду, что эти типы есть в платформах 8.1 и выше, и их XML-представление не менялось с платформы 8.1.

URI пространства имен в данном случае совершенно не важен, можно указать любую строку. Их принято строить на базе URL, которые использует ваша организация, чтобы гарантировать глобальную уникальность имен типов, описанных в ваших пакетах, на всякий случай. Но мы описывать свои типы (это делается при помощи пакетов XDTOв соответствующей ветке дерева конфигурации) не будем, так как нам достаточно встроенных типов 1C:Предприятия.

Имя файла публикации может быть любым, но с соблюдением требований к URL. Кириллицу лучше не использовать. Расширение «1cws» тоже лучше не менять (не пробовал, если честно).


Операции

Добавляем операции web-сервиса. Наш web-сервис должен уметь как принимать данные, записывая в свою ИБ, так и отдавать их (выгружать в XML). Поэтому добавляем две операции, "ПринятьДанные" и "ОтдатьДанные".

 

Операция ПринятьДанные

"ПринятьДанные" записывает в ИБ xml-данные, переданные в первом параметре "Данные". Тип параметра - Хранилище значения. ХранилищеЗначения выбираем, чтобы сжимать данные при передаче, т.к. файлы XML могут быть очень увесистыми и при этом хорошо "жмутся". Но можно было бы использовать и просто Строку, string(http://www.w3.org/2001/XMLSchema). 
Операция возвращает целое число – количество успешно записанных объектов.
Второй параметр - ТекстОшибки, строка, входной-выходной, для возврата текста ошибки.


Понятно, что ValueStorage– это ХранилищеЗначения

Код метода:

Функция ПринятьДанные(Данные, ТекстОшибки)

	
	УстановитьПривилегированныйРежим(Истина);
	
	ОбработкаОбмена = Обработки.УниверсальныйОбменДаннымиXML.Создать();
	ОбработкаОбмена.РежимОбмена = "Загрузка";
	
	РаботаВозможна = ОбработкаОбмена.ВыполнитьДействияПередЧтениемДанных(Данные.Получить());
	
	Если НЕ РаботаВозможна Тогда
		Возврат 0;
	КонецЕсли;	

	ОбработкаОбмена.ПроизвестиЧтениеДанных(ТекстОшибки);
	
	ОбработкаОбмена.ВыполнитьДействияПослеЗавершенияЧтенияДанных(); 
	
	Возврат ОбработкаОбмена.мСчетчикЗагруженныхОбъектов;	
	
КонецФункции

Операция ОтдатьДанные

"ОтдатьДанные" возвращает xml-данные, выгруженные по переданным правилам обмена. Также в виде ХранилищаЗначения.
Это тоже обертка над Универсальным обменом, только уже более функциональная. Обратите внимание , что Массив и Структура – это уже не простые типы, они попадают в метод в виде XDTO-объектов, и их нужно явно преобразовывать в/из типы 1С:Предприятия. Преобразовывать в/из XDTO нужно и на клиентской стороне.

 


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


ЗначенияПараметров – это структура со значениями параметров конвертации.

Код:

Функция ОтдатьДанные(ПравилаОбмена, ПравилаВыгрузкиXDTO, ЗначенияПараметровXDTO)
	
	УстановитьПривилегированныйРежим(Истина);
	
	// Иницализация
	Обмен = Обработки.УниверсальныйОбменДаннымиXML.Создать();
	Обмен.РежимОбмена = "Выгрузка";
	ИмяВремФайла = ПолучитьИмяВременногоФайла("xml");
	Обмен.ИмяФайлаОбмена = ИмяВремФайла;
	
	// Загрузка правил
	ИмяФайлаПравилОбмена = ПолучитьИмяВременногоФайла("xml");
	ЗаписьТекста = Новый ЗаписьТекста(ИмяФайлаПравилОбмена);
	ЗаписьТекста.Записать(ПравилаОбмена.Получить());
	ЗаписьТекста.Закрыть();
	Обмен.ИмяФайлаПравилОбмена = ИмяФайлаПравилОбмена;
	Обмен.ЗагрузитьПравилаОбмена();
	
	// Параметры
	ЗначенияПараметров = СериализаторXDTO.ПрочитатьXDTO(ЗначенияПараметровXDTO);
	Если ЗначениеЗаполнено(ЗначенияПараметров) Тогда
		Для каждого КлючИЗнач Из ЗначенияПараметров Цикл
			Обмен.УстановитьЗначениеПараметраВТаблице(КлючИЗнач.Ключ, КлючИЗнач.Значение);
		КонецЦикла; 
	КонецЕсли; 
	
	// Правила выгрузки данных
	ПравилаВыгрузки = СериализаторXDTO.ПрочитатьXDTO(ПравилаВыгрузкиXDTO);
	Если ЗначениеЗаполнено(ПравилаВыгрузки) Тогда
		
		// Сначала снимаем все отметки
		Для Каждого Строка из Обмен.ТаблицаПравилВыгрузки.Строки Цикл
			Строка.Включить = 0;
			Обмен.УстановитьПометкиПодчиненных(Строка, "Включить");
		КонецЦикла;
		
		// Теперь устанавливаем по переданным ПВД
		Для каждого ИмяПравилаВыгрузки Из ПравилаВыгрузки Цикл
			СтрДерева = Обмен.ТаблицаПравилВыгрузки.Строки.Найти(ИмяПравилаВыгрузки, "Имя", Истина);
			Если СтрДерева = Неопределено Тогда
				ВызватьИсключение "ОбменДаннымиXML.ОтдатьДанныеXML(): не удалось найти ПВД """ + ИмяПравилаВыгрузки + """!";
			Иначе
				СтрДерева.Включить = 1;
				Обмен.УстановитьПометкиРодителей(СтрДерева, "Включить");
			КонецЕсли; 
		КонецЦикла; 
		
	КонецЕсли; 
	
	// Выгрузка
	Обмен.ВыполнитьВыгрузку();	
	
	// Конец
	ЧтениеТекста = Новый ЧтениеТекста;
	ЧтениеТекста.Открыть(ИмяВремФайла, КодировкаТекста.UTF8);
	
	Результат = ЧтениеТекста.Прочитать();
	
	ЧтениеТекста.Закрыть();
	
	УдалитьФайлы(ИмяВремФайла);
	УдалитьФайлы(ИмяФайлаПравилОбмена);
	
	ХранилищеДанных = Новый ХранилищеЗначения(Результат, Новый СжатиеДанных(9));
	
	Возврат ХранилищеДанных;
	
КонецФункции 

Обработка УниверсальныйОбменДаннымиXML

Если в вашем прикладном решении такая обработка отсутствует, то её нужно добавить из комплекта поставки конфигурации «Конвертация данных» (файл V8Exchan82.epf).

 

Доступ к web-сервису. Роли и пользователи.

Для обращения к веб-сервисам необходимо подготовить роль и пользователя. Самый простой путь – это добавить отдельную роль, назовем ВебСервисы, этой роли не даем никаких прав, кроме прав на операции веб-сервиса, а сами методы выполняем в привилегированном режиме.
 

Добавляем пользователя

Назначаем ему только нашу роль ВебСервисы и больше никаких других. Этого достаточно.

На серверной стороне настройка закончена.

Клиент (обращение к web-сервису)

Тут просто приведу примеры обращения к веб-сервисам. Откуда берутся правила обмена , правила выгрузки, значения параметров и т.п. – это уже вопрос вашей прикладной задачи и её реализации.

Передача данных в базу-приемник

Пример передачи xml-данных в базу-приемник, на стороне которой работает вышеописанный web-сервис:

Функция ПередатьНаСервере(СтрокаXML)
	
	Данные = Новый ХранилищеЗначения(СтрокаXML, Новый СжатиеДанных(9));
	
	// Подкдючение
	Определения = Новый WSОпределения("http://server1c8/db_buh/ws/xml-exchange.1cws?wsdl", "WebServices", "12345");
	Прокси = Новый WSПрокси(Определения, "http://your-domain.ru/", "ОбменДаннымиXML", "ОбменДаннымиXMLSoap");
	Прокси.Пользователь = "WebServices";
	Прокси.Пароль = "12345";
	
	// Передача
	ТекстОшибки = "";
	ЗагруженоОбъектов = Прокси.ПринятьДанные(Данные, ТекстОшибки);
	
	Если НЕ ПустаяСтрока(ТекстОшибки) Тогда
		Сообщить(ТекстОшибки);
	КонецЕсли; 
	
	Возврат ЗагруженоОбъектов;
	
КонецФункции // ПередатьНСервере()

Данные перед этим получены из этой базы-источника функцией:

Функция ВыгрузитьКонтрагента(Организация, Контрагент)
	
	ПравилаОбмена = ПолучитьПравилаОбмена();
	
	// Инициализация
	Обмен = Обработки.УниверсальныйОбменДаннымиXML.Создать();
	Обмен.РежимОбмена = "Выгрузка";
	ИмяФайлаДанных = ПолучитьИмяВременногоФайла("xml");
	Обмен.ИмяФайлаОбмена = ИмяФайлаДанных;
	
	// Загрузка правил
	ИмяФайлаПравилОбмена = ПолучитьИмяВременногоФайла("xml");
	ЗаписьТекста = Новый ЗаписьТекста(ИмяФайлаПравилОбмена);
	ЗаписьТекста.Записать(ПравилаОбмена);
	ЗаписьТекста.Закрыть();
	Обмен.ИмяФайлаПравилОбмена = ИмяФайлаПравилОбмена;
	Обмен.ЗагрузитьПравилаОбмена();
	
	// Параметры
	Обмен.УстановитьЗначениеПараметраВТаблице("Организация", Организация);
	
	// Правила выгрузки данных
	
	// Сначала все отключаем
	Для Каждого Строка из Обмен.ТаблицаПравилВыгрузки.Строки Цикл
		Строка.Включить = 0;
		Обмен.УстановитьПометкиПодчиненных(Строка, "Включить");
	КонецЦикла;
	// Включаем нужное правило
	СтрПравил = Обмен.ТаблицаПравилВыгрузки.Строки.Найти("Контрагенты", "Имя", Истина);
	Если СтрПравил = Неопределено Тогда
		ВызватьИсключение "ПередатьНСервере(): не удалось найти правило выгрузки ""Контрагенты"" в правилах обмена.";
	КонецЕсли; 
	СтрПравил.Включить = 1;
	Обмен.УстановитьПометкиРодителей(СтрПравил, "Включить");
	
	// Отбор
	Постр = Новый ПостроительОтчета("ВЫБРАТЬ ПЕРВЫЕ 1 _.* ИЗ Справочник.Контрагенты КАК _
 |{ГДЕ _.Ссылка.* КАК Справочник_Контрагенты}");
	Постр.Отбор.Добавить("Справочник_Контрагенты").Установить(Контрагент);
	СтрПравил.ИспользоватьОтбор = Истина;
	СтрПравил.НастройкиПостроителя = Постр.ПолучитьНастройки();
	
	// Выгрузка
	Обмен.ВыполнитьВыгрузку();	
	ЧтениеТекста = Новый ЧтениеТекста;
	ЧтениеТекста.Открыть(ИмяФайлаДанных, КодировкаТекста.UTF8);
	СтрокаXML = ЧтениеТекста.Прочитать();
	ЧтениеТекста.Закрыть();
	УдалитьФайлы(ИмяФайлаДанных);
	УдалитьФайлы(ИмяФайлаПравилОбмена);
	
	Возврат СтрокаXML;
	
КонецФункции // ВыгрузитьКонтрагента()

Получение данных от web-сервиса

Пример получения данных от web-сервиса:

Функция ПолучитьДанныеОтВебСервиса(ПравилаСтрокой)
	
	// Подкдючение
	Определения = Новый WSОпределения("http://server1c8/db_buh/ws/xml-exchange.1cws?wsdl", "WebServices", "12345");
	Прокси = Новый WSПрокси(Определения, "http://your-domain.ru/", "ОбменДаннымиXML", "ОбменДаннымиXMLSoap");
	Прокси.Пользователь = "WebServices";
	Прокси.Пароль = "12345";
	
	// Параметры
	ПравилаВыгрузки = Новый Массив;
	ПравилаВыгрузки.Добавить("ИерархияКонтрагентов");
	ПравилаВыгрузкиXDTO = СериализаторXDTO.ЗаписатьXDTO(ПравилаВыгрузки);
	
	ЗначенияПараметров = Новый Структура("КодБазыИсточника", "00001");
	ЗначенияПараметровXDTO = СериализаторXDTO.ЗаписатьXDTO(ЗначенияПараметров);
	
	// Получение данных
	Правила = Новый ХранилищеЗначения(ПравилаСтрокой, Новый СжатиеДанных(9));
	Данные = Прокси.ОтдатьДанные(Правила, ПравилаВыгрузкиXDTO, ЗначенияПараметровXDTO);
	
	// Возвращаем строку XML
	Возврат Данные.Получить();
	
КонецФункции // ПолучитьДанныеОтВебСервиса()
 

Конец

Спасибо за внимание

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Андрей Чибряков (GoodZone) 09.10.13 06:35
тестовую бы конфу, чтоб не с нуля пробовать.
2. Адамчук Татьяна (т1951) 09.10.13 09:22
очень интересно. Спасибо
3. Владимир Клименко (KliMich) 09.10.13 09:26
Идея довольно интересная. Спавибо!
Буду пробовать
4. Фёдор (Tedman) 09.10.13 10:04
Mleg, ну что тут скажешь?!
Красавец! Сам частенько занимаюсь процессом обмена данными, и думал разобраться с тем, можно ли его проводить через web-сервисы, а тут статья такая отличная.
Во всём этом есть только один (как мне кажется) очень неприятный момент. Если (теоретически) некий злоумышленник перехватит пакет (если используется незащищенное http-соединение), то с помощью обработки обмена с привилегированным режимом сделать он сможешь что угодно. Вероятность, конечно, не велика, но, тем не менее, сделать это не сложно.
5. Станислав Раташнюк (stanru1) 09.10.13 10:46
элегантно! ценю такой подход, когда по максимуму используется типовой функционал. автор молодец!
6. Яков Коган (Yashazz) 09.10.13 10:56
Достаточно подробно, грамотно расписано. Наконец кто-то озаботился, спасибо.
Жаль, самые скользкие и интересные грабли (как публикация веб-сервисов) оставлены за кадром. Ибо, на самом деле, документации на эту тему крайне мало, а труднообъяснимых граблей и багов платформы там много.

И да, веб-сервисы 1С это страшенная дыра в безопасности, конечно. Поэтому, увы, в серьёзных проектах либо не используются, либо требуют дополнительных мер защиты сторонними средствами.
7. ZLENKO.PRO (ZLENKO) 09.10.13 11:38
8. Петр (peterxx) 09.10.13 12:24
Прекрасно, интересная, добротная, актуальная статья. Думаю будет очень полезно.
9. Яков Коган (Yashazz) 09.10.13 12:33
Такие статьи, конечно, были и раньше, например, http://infostart.ru/public/159824/
Но здесь достаточно толково расписано то, что ранее было изложено более скомканно.

А вот то, что действительно сложно в веб-сервисах (публикация), здесь не освещено и считается само собой разумеющимся. Поэтому плюсить не буду.
10. Олег Маслов (Mleg) 09.10.13 13:30
(9) Да, я смотрел эту статью, перед тем как писать свою. Она немножко на другую тему, там не про передачу данных в формате Универсального обмена.
Да, публикация веб-сервисов – это не всегда просто. Я не считаю это само собой разумеющимся. Но это за рамками статьи, совсем другой вопрос, моей целью не было покрыть и эту тему. С таким же успехом можно было бы упрекнуть в том, что я не рассмотрел вопросы установки платформы.
Однако, "Пожелание зарегистрировано" ©
w-divin; SirYozha; +2 Ответить 1
11. Яков Коган (Yashazz) 09.10.13 13:46
(10) Не согласен. Милейшая строка "http://server1c8/db_buh/ws/xml-exchange.1cws?wsdl" вызовет вопросы у ваших читателей. Откуда она взялась? По каким принципам сформирована? Что в ней есть что?
Вы никак специально не заостряете на ней внимание, в результате произойдёт копипаст, а потом ваша процедура не заработает, и вам же предъявят, что публикуете фигню на ИС. Оно надо?
12. Яков Коган (Yashazz) 09.10.13 14:15
Я уж не говорю про управление доступом. Вот возьмёт прокси и не создатся, ваши дальнейшие действия? Отсылать к "Руководству администратора"? А там это изложено, во-первых, для "одминов", а во-вторых, очень скудно и неполно. У 1С есть несколько багов, выдаваемых за фичи, в вопросе авторизации (что динамического подключения, что статического).

Без описания этого ценность вашей публикации снижается.
mr.Samuelson; +1 Ответить
13. Яков Коган (Yashazz) 09.10.13 18:57
Ну так что, автор, я минусую, т.к. нифига не работает?
14. Яков Коган (Yashazz) 10.10.13 10:35
Понятно. У всех, вишь ты, всё работает, и лишь у одного меня хардкодинг типа
Определения = Новый WSОпределения("http://server1c8/db_buh/ws/xml-exchange.1cws?wsdl", "WebServices", "12345");
вызывает дурацкие вопросы.
15. Ярослав Радкевич (WKBAPKA) 10.10.13 11:02
бегло пробежался... статья хорошо написана... вот бы она была написана когда я искал пути передачи данных через WEB...
единственное, что хотелось бы посоветовать - методы веб-сервиса определять на английском языке, что бы при настройке веб-сервера не было проблем с кодировками. По крайней мере, я с этим столкнулся и потратил время на то, что бы разобраться в причине ошибки "Ошибка разбора SOAP сообщения: неверная версия сообщения" веб-сервиса.
16. Ярослав Радкевич (WKBAPKA) 10.10.13 11:07
(9) Yashazz,
в публикации веб-сервисом сложного ничего нет если веб сервис и 1С установлены на одном сервере. Если же на разных серверах, то:
1. Если сервера крутяться под виндой, установить клиента 1С на сервер с веб сервисом (это самый простой вариант), или публиковать с помощью утилиты.
2. Если сервера крутяться под другой операционкой, пробывать публиковать с помощью утилиты входящей в платформу, но прийдется повозиться.
Но всеже проще иметь отдельный тазик с виндой для оного дела, который будет светиться в интернете.
17. Ярослав Радкевич (WKBAPKA) 10.10.13 11:12
(14) Yashazz,
вот так писать не надо. Первый параметр, это пространство имен. Должен быть уникальным и может быть представлен любым уникальным адресом. Формируется произвольно, как вашей душе угодно.
Мне кажется, зря Вы на автора наезжаете. Он изложил хорошую идею для обмена данными между веб сервисами!
18. doxflow (bonv) 10.10.13 13:37
(6)Yashazz,
А можно примеры
страшенная дыра в безопасности
?
19. Яков Коган (Yashazz) 10.10.13 14:57
(16) Берёте 1 локальный комп (сам себе сервер), винду7 и iis7.5, простейшую файловую базу, и я посмотрю, как для вас "в публикации ничего сложного нет". При наличии всех нужных прав и прочая, разумеется.
(17) Вот так писать не надо. Первый параметр - это, цитирую, "МестоположениеWSDL" (Местоположение WSDL файла, откуда будет получено определение веб-сервисов), а отнюдь не URI. И формируется не как левая пятка хочет, а по чётким принципам, внимание на которых заостряют редко.

Идею изложил хоть и давнюю, но хорошую. Изложил чётко, внятно, доступно. НО: допустил недосмотр, который не позволяет воспользоваться статьёй без доработки кода напильником. Фактически, "скачал - не работает". Согласны?

(18) Покурите старые дискуссии насчёт веб-сервисов с участием Трактора. Я щас навскидку не найду.
20. Ярослав Радкевич (WKBAPKA) 10.10.13 16:22
(19) Yashazz,
1. А чего пробывать? У меня дома развернутый сервер установлен под Апач, я на нем гонял свои веб сервисы. И у клиента установили без проблем. Была только проблема с настройками кодировки самого веб-сервера, а опубликовать вообще не проблема. Кстати, на эту тему, тему публикации, как раз много информации в интернете, даже есть видео на ютубе.
2. сорри, спутал с WSПрокси... но как бы там не было, можно WSПрокси использовать без создания определения. Ну уж если Вам так надо, почитайте про веб сервисы в интернете, ведь эта технология не разработка 1С. Там же найдете и правила формирования строки.
21. Ярослав Радкевич (WKBAPKA) 10.10.13 16:26
Автор предложил очень хорошую идею до которой еще нужно додуматься... а это уже дорогого стоит. Плюс, автор еще и реализацию описал. А то что напильником немного возможно прийдется поработать, так уж увольте. Отправте автору пару сот вечно зеленых президентов и он лично для вас напишет статью со всеми подробностями.
vkm1980; pm74; SerebanSK; Redokov; +4 Ответить 2
22. Ярослав Радкевич (WKBAPKA) 10.10.13 16:30
(19) Yashazz,
Что касается дыр в безопасности, я читал статью на которую вы ссылаетесь... Но! в ней речь шла о публикации базы и опасность заключалась в том, что можно получить данные о пользователях и их паролях, что равносильно получить доступ к самой базе. Веб сервисы же напротив, предоставляют ограниченную информацию. При всех тех же параметрах, злоумышленник не получит больше, чем ему может дать сервис + можно еще организовать дополнительную аутентификацию, на уровне базы на случай, если кто то перехватит логин и пароль для авторизации!
23. Яков Коган (Yashazz) 10.10.13 16:44
(20) Ключевое слово - "под Апач". Под IIS всё не так просто. И нигде, ни на каком ютюбе, нет подробностей и тонкостей авторизации, к примеру.
(20)(21) Мне - в общем, ничего не надо, кроме предупреждения автора крупными буквами, что без доработки это вообще ни у кого не взлетит. Или правки строки, о которой я говорю, в сторону шаблонизации.
Я-то и правила шаблона знаю, и другие моменты (которые, к слову, и на http://its.1c.ru есть), но автор об этом ни слова.

Повторяю, напильником придётся поработать не "возможно", а наверняка. Или я чего-то упустил, и "httр://server1c8/db_buh/ws/xml-exchange.1cws?wsdl" это уже стандартизованный дефолтный путь подключения?

(22) Ага, а полные права отдельным товарищам/группам на bin и папку базы, если она файловая? )) Золотую середину, при которой и веб-сервисы работают, и по доступу не "проходной двор", найти бывает трудно.
24. Ярослав Радкевич (WKBAPKA) 10.10.13 17:10
(23) Yashazz,
я такие варианты про файловые базы даже не рассматриваю... зачем кому то что то публиковать, если база файловая??? Если у людей нет денег на приобретения сервера 1С, то значит у них нет денег и на организацию безопасности...

ПЫ СЫ: название данной публикации "Организация онлайн-обмена данными в формате "Конвертации данных" через web-сервисы". Т.е. предполагается что читатель знаком с понятием веб-сервис и умеет с ним работать. Вы еще предъявите претензии автору, почему он не расшифровал, что такое конвертация и не привел примеры и описания, как работать с этой конфигурацией.

25. Ярослав Радкевич (WKBAPKA) 10.10.13 17:11
что касается IIS, документаций на эту тему полно... лично я рекомендую апач, т.к. проще...
26. Яков Коган (Yashazz) 10.10.13 17:31
(24) Оффтопить не буду, но, по-твоему, пользователи файловых БД почти как "недочеловеки", с чем не согласен.

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

Ну и странновато для знакомых с веб-сервисами выглядят фразы вроде "Расширение «1cws» тоже лучше не менять (не пробовал, если честно)." - RTFM руководство админа, господа; расширение это идёт в алиасе, а дёргать можно как по name (имени, как в конфе), так и по alias (предложенному имени файла).
В общем, нелогично - что-то разжёвано, что-то упущено.
Ладно, видимо, это я один такой не такой )))
awk; vano-ekt; holostyak; +3 Ответить
27. Василий Казьмин (awk) 15.10.13 14:33
(0) Круто. Вот только забыли недостатки SOAP:

1. Передача больших объемов двоичных данных требует наличия большого объема оперативной памяти. Получение ошибок: Out of memory.
2. Медленный ответ от 1С приведет к зависанию сессии веб сервера, что может отрицательно сказаться на его работе и работе ОС в целом.
3. На промежуточных узлах могут быть ограничения на размер POST запроса, что приведет к неожиданным вылетам обмена, и долгом курении травы поиске в интернете и документации.
4. Для отладки(при возникновении проблем) на клиент-серверных базах придется ставить отладку сервера, что не способствует производительности.
mr.Samuelson; ZLENKO; CeHbKA; Totoro; kostas; +5 Ответить 2
28. Kostas (kostas) 28.10.13 18:17
(27) awk,
За п.3 плюсанул Вам! Важная информация.

29. Vlad Matveev (psamt1k) 28.10.13 21:55
эх! Где же ты был полгода-год назад!!! Я себе весь мозг вскрыл, пока разобрался как тут все работает и смог добавить свои плюшки.
Но тем не менее плюсую!
30. Игорь Дзеса (Kamikadze) 29.10.13 20:03
У себя сделал немного проще - только выгрузку из системы НСИ. Идея хороша.
31. Игорь Дзеса (Kamikadze) 29.10.13 20:07
У меня, для примера, обмены через СОМ работали с каждой базой по 2 минуты, сильно нагружая сервер. Теперь - 20 сек. За 3 месяца потерь данных не было. так что идея перевода обменов на веб - сервисы очень даже актуальная. По - моему в последней СБП есть такие механизмы.
32. Евгений Заручейский (zarucheisky) 30.10.13 15:15
(31) обмены через СОМ работали с каждой базой по 2 минуты, сильно нагружая сервер. Теперь - 20 сек.
Скорее всего львиная доля времени уходила на инициализацию COM-объекта+авторизацию.
Грубо говоря, при одном и том же объеме передаваемых данных вызов тех же методов через COM/ws будет одинаков по быстродействию.
33. Евгений Заручейский (zarucheisky) 30.10.13 15:49
(21) Не, не совсем так, самой идее ровно столько лет, сколько платформе 8.1...
Все, кто сталкивался, знали, он, молодец, озвучил :)
34. Константин Воробьёв (kostik_love) 30.10.13 18:31
Ребята, может вопрос не в тему- но как выполнять отладку web-сервисов?
может автор напишет такую же полезную и подробную статью)))
35. Трактор Трактор (Трактор) 30.10.13 20:40
(27) awk,
1. Передача больших объемов двоичных данных требует наличия большого объема оперативной памяти. Получение ошибок: Out of memory.

Я как-то гигабайтный файл передавал через веб сервис. Долго, но передался. Если обмен делать небольшими порциями и клиентов не очень много, то может прокатить.
36. Трактор Трактор (Трактор) 30.10.13 20:42
(34) kostik_love,
как выполнять отладку web-сервисов?

Как обычно. Включаешь отладку на сервере, в отладчике, там где предметы отладки, ставишь галку "отладка веб сервисов" и отлаживаешь. Отлаживать возможно только если ты сам делаешь запросы. Рабочую базу не отладишь - слишком много запросов.
37. Трактор Трактор (Трактор) 31.10.13 00:48
36+
(34) kostik_love, запросы к 1С можно посылать специализированной приблудой soapui http://sourceforge.net/projects/soapui/files/soapui/3.6.1/
38. Василий Казьмин (awk) 31.10.13 01:22
(35) Трактор, Да. Может прокатить, а может и не прокатить. Если на промежуточных узлах нет ограничений - прокатит. А если есть ограничения, то порежут сообщение и кирдык.
39. Василий Казьмин (awk) 31.10.13 01:25
(35) Трактор, Ночь. Читаю плохо. И не на то отвечаю.
По объему оперативки:

Один гиг - не показатель. Редко встретишь сейчас объем ОЗУ меньше гига. Плюс свап. Прокатит. Но не быстро. Проще кинутся ссылкой на ресурс.
40. Константин Воробьёв (kostik_love) 31.10.13 10:01
(37) Трактор, Спасибо за ответ- буду пробовать- очень своевременно
41. Евгений Багаев (sarun) 06.05.14 08:50
Спасибо за хорошую обзорную статью. Только начинаю изучение вэбсервисов,поэтому статья очень помогла.
Вот только непонятным остался вопрос как передавать правила обмена в вэб сервисы, автор это намеренно опустил:

"Клиент (обращение к web-сервису)

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

Подскажите, пожалуйста, кто сталкивался.
42. Инесса Минних (inesik) 10.07.14 10:09
(41) sarun, я тоже думала, куда их добавить, решила добавить в реквизит узла обмена, как хранилище значения.
43. Игорь Дзеса (Kamikadze) 10.07.14 11:14
так в БСП это уже работает
44. ZLENKO.PRO (ZLENKO) 11.07.14 12:22
(32) zarucheisky, "обмены через СОМ работали с каждой базой по 2 минуты"

COM соединение можно сохранять между сеансами обмена и не инициализировать каждый раз заново.
45. Евгений Багаев (sarun) 25.08.14 13:34
46. Ерашов Дмитрий (БизнесРешение) 23.09.14 09:57
Отличная идея и описание процесса её реализации - доступно и всерьёз! :))
47. Надежда (user_2010) 11.11.14 15:10
Есть такой вопрос: сделала веб-сервис в 1С, опубликовала, он работает в SoapUI, еще проверяли из других программ - работает... Но нужно его использовать в программе, которая работает на платформе SharePoint. Так вот у них мой веб-сервис не работает. Как они объясняют: не тот синтаксис веб-сервиса.

Вот такой синтаксис делает 1С:
xs:schema targetNamespace=
xs:element name=

А вот так надо SharePoint:
s:schema elementFormDefault=
s:element name=

Почему 1С делает "xs", а не "s"?

Т.е. вместо "<xs:..." должно быть "<s:...".

Как это сделать в 1С? Как изменить синтаксис опубликованного веб-сервиса?
48. Владимир Зленко (ZLENKO) 01.09.16 15:31
(44) ZLENKO.PRO, "COM соединение можно сохранять между сеансами обмена и не инициализировать каждый раз заново."

Кстати в 8.3.8 уже нельзя :-)
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа