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

09.10.13

Интеграция - Файловый обмен (TXT, XML, DBF), FTP

Организация онлайн-обмена данными в формате "Конвертации данных" через 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
	Возврат Данные.Получить();
	
КонецФункции // ПолучитьДанныеОтВебСервиса()
 

Конец

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

web-сервисы Универсальный обмен данными в формате XML Конвертация данных

См. также

SALE! 20%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен и синхронизацию в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

26280 22338 руб.

12.06.2017    141653    799    297    

419

SALE! 10%

Перенос данных 1C Программист Платформа 1С v8.3 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос документов, начальных остатков и справочной информации из УПП 1.3 в ERP 2 | из УПП 1.3 в УТ 11 | из УПП в КА 2 | Правила конвертации (КД 2) | Более 360 предприятий выполнили переход с использованием этого продукта! | Сэкономьте время - используйте готовое решение для перехода! | Позволяет перенести из УПП 1.3 в ERP / УТ 11 / КА 2 всю возможную информацию | В переносе есть фильтр по организации и множество других опциональных параметров выгрузки | Есть несколько алгоритмов выгрузки остатков на выбор

55778 50200 руб.

04.08.2015    166587    333    278    

374

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.236.x) и БП 3.0 (3.0.164.x). Правила подходят для версии ПРОФ и КОРП.

35000 31500 руб.

15.12.2021    24100    169    51    

128

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.88.x) и УТ 11.5 (11.5.19.x).

35000 31500 руб.

23.07.2020    51373    228    70    

186

SALE! 15%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 Платформа 1C v8.2 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Управление производственным предприятием Россия Платные (руб)

Регулярный обмен, выгрузка, перенос из КА 1.1, УПП 1.3, УТ 10.3 для обмена с любыми конфигурациями, поддерживающими обмен в формате EnterpriseData (КД3) - БП 3.0, ERP, КА 2, УТ 11, Розница 2, УНФ 1.6 и другими. Правила для старых и доработанных конфигураций не требуют синхронного обновления и совместимы с новыми и будущими конфигурациями. Обмен по расписанию, через папку, FTP, почту.

15300 13005 руб.

18.02.2016    186940    590    509    

527

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой

55778 50200 руб.

15.04.2019    72134    181    150    

123

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист Платформа 1С v8.3 Сложные периодические расчеты 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Платные (руб)

Правила переноса кадровых и расчетных данных и справочной информации из "1С:УПП1.3" или "1С:КА 1.1" в "1С:ЗУП 3.1 | Разработан в формате КД 2 (правила конвертации данных) | При выгрузке есть фильтр по организациям | Обновляется при выходе новых релизов 1С | Развитие алгоритмов | Расчетные документы переносятся в документ "Перенос данных" | Создаются документы "Начальная штатная расстановка" и "Начальная задолженность по зарплате", переносятся кадровые документы

55778 50200 руб.

29.10.2018    56245    59    105    

61
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. GoodZone 13 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 91 09.10.13 10:46 Сейчас в теме
элегантно! ценю такой подход, когда по максимуму используется типовой функционал. автор молодец!
6. Yashazz 4793 09.10.13 10:56 Сейчас в теме
Достаточно подробно, грамотно расписано. Наконец кто-то озаботился, спасибо.
Жаль, самые скользкие и интересные грабли (как публикация веб-сервисов) оставлены за кадром. Ибо, на самом деле, документации на эту тему крайне мало, а труднообъяснимых граблей и багов платформы там много.

И да, веб-сервисы 1С это страшенная дыра в безопасности, конечно. Поэтому, увы, в серьёзных проектах либо не используются, либо требуют дополнительных мер защиты сторонними средствами.
VyacheslavShilov; +1 Ответить
18. bonv 1563 10.10.13 13:37 Сейчас в теме
(6)Yashazz,
А можно примеры
страшенная дыра в безопасности
?
7. ZLENKO 398 09.10.13 11:38 Сейчас в теме
8. peterxx 23 09.10.13 12:24 Сейчас в теме
Прекрасно, интересная, добротная, актуальная статья. Думаю будет очень полезно.
9. Yashazz 4793 09.10.13 12:33 Сейчас в теме
Такие статьи, конечно, были и раньше, например, http://infostart.ru/public/159824/
Но здесь достаточно толково расписано то, что ранее было изложено более скомканно.

А вот то, что действительно сложно в веб-сервисах (публикация), здесь не освещено и считается само собой разумеющимся. Поэтому плюсить не буду.
10. Mleg 345 09.10.13 13:30 Сейчас в теме
(9) Да, я смотрел эту статью, перед тем как писать свою. Она немножко на другую тему, там не про передачу данных в формате Универсального обмена.
Да, публикация веб-сервисов – это не всегда просто. Я не считаю это само собой разумеющимся. Но это за рамками статьи, совсем другой вопрос, моей целью не было покрыть и эту тему. С таким же успехом можно было бы упрекнуть в том, что я не рассмотрел вопросы установки платформы.
Однако, "Пожелание зарегистрировано" ©
Atrocity; Dmitrii D; Unk92; AganinEvgeniy; w-divin; SirYozha; +6 Ответить
11. Yashazz 4793 09.10.13 13:46 Сейчас в теме
(10) Не согласен. Милейшая строка "http://server1c8/db_buh/ws/xml-exchange.1cws?wsdl" вызовет вопросы у ваших читателей. Откуда она взялась? По каким принципам сформирована? Что в ней есть что?
Вы никак специально не заостряете на ней внимание, в результате произойдёт копипаст, а потом ваша процедура не заработает, и вам же предъявят, что публикуете фигню на ИС. Оно надо?
Strange Device; Redokov; +2 Ответить
16. WKBAPKA 215 10.10.13 11:07 Сейчас в теме
(9) Yashazz,
в публикации веб-сервисом сложного ничего нет если веб сервис и 1С установлены на одном сервере. Если же на разных серверах, то:
1. Если сервера крутяться под виндой, установить клиента 1С на сервер с веб сервисом (это самый простой вариант), или публиковать с помощью утилиты.
2. Если сервера крутяться под другой операционкой, пробывать публиковать с помощью утилиты входящей в платформу, но прийдется повозиться.
Но всеже проще иметь отдельный тазик с виндой для оного дела, который будет светиться в интернете.
19. Yashazz 4793 10.10.13 14:57 Сейчас в теме
(16) Берёте 1 локальный комп (сам себе сервер), винду7 и iis7.5, простейшую файловую базу, и я посмотрю, как для вас "в публикации ничего сложного нет". При наличии всех нужных прав и прочая, разумеется.
(17) Вот так писать не надо. Первый параметр - это, цитирую, "МестоположениеWSDL" (Местоположение WSDL файла, откуда будет получено определение веб-сервисов), а отнюдь не URI. И формируется не как левая пятка хочет, а по чётким принципам, внимание на которых заостряют редко.

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

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

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

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

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

AganinEvgeniy; l_men; +2 Ответить
26. Yashazz 4793 10.10.13 17:31 Сейчас в теме
(24) Оффтопить не буду, но, по-твоему, пользователи файловых БД почти как "недочеловеки", с чем не согласен.

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

Ну и странновато для знакомых с веб-сервисами выглядят фразы вроде "Расширение «1cws» тоже лучше не менять (не пробовал, если честно)." - RTFM руководство админа, господа; расширение это идёт в алиасе, а дёргать можно как по name (имени, как в конфе), так и по alias (предложенному имени файла).
В общем, нелогично - что-то разжёвано, что-то упущено.
Ладно, видимо, это я один такой не такой )))
awk; vano-ekt; holostyak; +3 Ответить
22. WKBAPKA 215 10.10.13 16:30 Сейчас в теме
(19) Yashazz,
Что касается дыр в безопасности, я читал статью на которую вы ссылаетесь... Но! в ней речь шла о публикации базы и опасность заключалась в том, что можно получить данные о пользователях и их паролях, что равносильно получить доступ к самой базе. Веб сервисы же напротив, предоставляют ограниченную информацию. При всех тех же параметрах, злоумышленник не получит больше, чем ему может дать сервис + можно еще организовать дополнительную аутентификацию, на уровне базы на случай, если кто то перехватит логин и пароль для авторизации!
12. Yashazz 4793 09.10.13 14:15 Сейчас в теме
Я уж не говорю про управление доступом. Вот возьмёт прокси и не создатся, ваши дальнейшие действия? Отсылать к "Руководству администратора"? А там это изложено, во-первых, для "одминов", а во-вторых, очень скудно и неполно. У 1С есть несколько багов, выдаваемых за фичи, в вопросе авторизации (что динамического подключения, что статического).

Без описания этого ценность вашей публикации снижается.
mr.Samuelson; +1 Ответить
13. Yashazz 4793 09.10.13 18:57 Сейчас в теме
Ну так что, автор, я минусую, т.к. нифига не работает?
14. Yashazz 4793 10.10.13 10:35 Сейчас в теме
Понятно. У всех, вишь ты, всё работает, и лишь у одного меня хардкодинг типа
Определения = Новый WSОпределения("http://server1c8/db_buh/ws/xml-exchange.1cws?wsdl", "WebServices", "12345");
вызывает дурацкие вопросы.
alexeyplotnikov; kirinalex; +2 1 Ответить
17. WKBAPKA 215 10.10.13 11:12 Сейчас в теме
(14) Yashazz,
вот так писать не надо. Первый параметр, это пространство имен. Должен быть уникальным и может быть представлен любым уникальным адресом. Формируется произвольно, как вашей душе угодно.
Мне кажется, зря Вы на автора наезжаете. Он изложил хорошую идею для обмена данными между веб сервисами!
15. WKBAPKA 215 10.10.13 11:02 Сейчас в теме
бегло пробежался... статья хорошо написана... вот бы она была написана когда я искал пути передачи данных через WEB...
единственное, что хотелось бы посоветовать - методы веб-сервиса определять на английском языке, что бы при настройке веб-сервера не было проблем с кодировками. По крайней мере, я с этим столкнулся и потратил время на то, что бы разобраться в причине ошибки "Ошибка разбора SOAP сообщения: неверная версия сообщения" веб-сервиса.
21. WKBAPKA 215 10.10.13 16:26 Сейчас в теме
Автор предложил очень хорошую идею до которой еще нужно додуматься... а это уже дорогого стоит. Плюс, автор еще и реализацию описал. А то что напильником немного возможно прийдется поработать, так уж увольте. Отправте автору пару сот вечно зеленых президентов и он лично для вас напишет статью со всеми подробностями.
VVi3ard; vkm1980; pm74; troubleshooter; Redokov; +5 Ответить
33. zarucheisky 30.10.13 15:49 Сейчас в теме
(21) Не, не совсем так, самой идее ровно столько лет, сколько платформе 8.1...
Все, кто сталкивался, знали, он, молодец, озвучил :)
25. WKBAPKA 215 10.10.13 17:11 Сейчас в теме
что касается IIS, документаций на эту тему полно... лично я рекомендую апач, т.к. проще...
27. awk 744 15.10.13 14:33 Сейчас в теме
(0) Круто. Вот только забыли недостатки SOAP:

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

35. Трактор 1254 30.10.13 20:40 Сейчас в теме
(27) awk,
1. Передача больших объемов двоичных данных требует наличия большого объема оперативной памяти. Получение ошибок: Out of memory.

Я как-то гигабайтный файл передавал через веб сервис. Долго, но передался. Если обмен делать небольшими порциями и клиентов не очень много, то может прокатить.
VyacheslavShilov; +1 Ответить
38. awk 744 31.10.13 01:22 Сейчас в теме
(35) Трактор, Да. Может прокатить, а может и не прокатить. Если на промежуточных узлах нет ограничений - прокатит. А если есть ограничения, то порежут сообщение и кирдык.
VyacheslavShilov; +1 Ответить
39. awk 744 31.10.13 01:25 Сейчас в теме
(35) Трактор, Ночь. Читаю плохо. И не на то отвечаю.
По объему оперативки:

Один гиг - не показатель. Редко встретишь сейчас объем ОЗУ меньше гига. Плюс свап. Прокатит. Но не быстро. Проще кинутся ссылкой на ресурс.
VyacheslavShilov; +1 Ответить
29. psamt1k 28.10.13 21:55 Сейчас в теме
эх! Где же ты был полгода-год назад!!! Я себе весь мозг вскрыл, пока разобрался как тут все работает и смог добавить свои плюшки.
Но тем не менее плюсую!
30. Kamikadze 46 29.10.13 20:03 Сейчас в теме
У себя сделал немного проще - только выгрузку из системы НСИ. Идея хороша.
31. Kamikadze 46 29.10.13 20:07 Сейчас в теме
У меня, для примера, обмены через СОМ работали с каждой базой по 2 минуты, сильно нагружая сервер. Теперь - 20 сек. За 3 месяца потерь данных не было. так что идея перевода обменов на веб - сервисы очень даже актуальная. По - моему в последней СБП есть такие механизмы.
VyacheslavShilov; +1 Ответить
32. zarucheisky 30.10.13 15:15 Сейчас в теме
(31) обмены через СОМ работали с каждой базой по 2 минуты, сильно нагружая сервер. Теперь - 20 сек.
Скорее всего львиная доля времени уходила на инициализацию COM-объекта+авторизацию.
Грубо говоря, при одном и том же объеме передаваемых данных вызов тех же методов через COM/ws будет одинаков по быстродействию.
VyacheslavShilov; +1 Ответить
44. ZLENKO 398 11.07.14 12:22 Сейчас в теме
(32) zarucheisky, "обмены через СОМ работали с каждой базой по 2 минуты"

COM соединение можно сохранять между сеансами обмена и не инициализировать каждый раз заново.
48. ZLENKO 398 01.09.16 15:31 Сейчас в теме
(44) ZLENKO.PRO, "COM соединение можно сохранять между сеансами обмена и не инициализировать каждый раз заново."

Кстати в 8.3.8 уже нельзя :-)
34. kostik_love 317 30.10.13 18:31 Сейчас в теме
Ребята, может вопрос не в тему- но как выполнять отладку web-сервисов?
может автор напишет такую же полезную и подробную статью)))
36. Трактор 1254 30.10.13 20:42 Сейчас в теме
(34) kostik_love,
как выполнять отладку web-сервисов?

Как обычно. Включаешь отладку на сервере, в отладчике, там где предметы отладки, ставишь галку "отладка веб сервисов" и отлаживаешь. Отлаживать возможно только если ты сам делаешь запросы. Рабочую базу не отладишь - слишком много запросов.
VyacheslavShilov; +1 Ответить
37. Трактор 1254 31.10.13 00:48 Сейчас в теме
36+
(34) kostik_love, запросы к 1С можно посылать специализированной приблудой soapui http://sourceforge.net/projects/soapui/files/soapui/3.6.1/
VyacheslavShilov; life-wayfarer; +2 Ответить
40. kostik_love 317 31.10.13 10:01 Сейчас в теме
(37) Трактор, Спасибо за ответ- буду пробовать- очень своевременно
41. sarun 33 06.05.14 08:50 Сейчас в теме
Спасибо за хорошую обзорную статью. Только начинаю изучение вэбсервисов,поэтому статья очень помогла.
Вот только непонятным остался вопрос как передавать правила обмена в вэб сервисы, автор это намеренно опустил:

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

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

Подскажите, пожалуйста, кто сталкивался.
42. inesik 10.07.14 10:09 Сейчас в теме
(41) sarun, я тоже думала, куда их добавить, решила добавить в реквизит узла обмена, как хранилище значения.
43. Kamikadze 46 10.07.14 11:14 Сейчас в теме
так в БСП это уже работает
45. sarun 33 25.08.14 13:34 Сейчас в теме
46. БизнесРешение 23.09.14 09:57 Сейчас в теме
Отличная идея и описание процесса её реализации - доступно и всерьёз! :))
47. user_2010 954 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С? Как изменить синтаксис опубликованного веб-сервиса?
51. user_2010 954 18.02.19 17:33 Сейчас в теме
(47) напишу, хоть и времени с тех пор прошло много. Проблема была не в 1С, 1С все правильно делала!
49. strafer 28.07.17 10:15 Сейчас в теме
Попробовал сделать описанное выше, но получил ошибку
Процедура или функция с указанным именем не определена (ПолучитьПравилаОбмена)
	ПравилаОбмена = <<?>>ПолучитьПравилаОбмена(); (Проверка: Сервер)

Конфигурация УТП.
53. maksa2005 551 25.07.19 14:07 Сейчас в теме
(49)Это говорит о том, что откуда брать обмен. Создайте макет и добавить туда правила и все)
(50)это опечатка автора. у меня все получилось
50. Smal 18.02.19 16:43 Сейчас в теме
Возникла задача скрестить ужа с ежом через вэб обмен по правилам обмена из конвертации. Прочитал статью ..
сделал у себя на тестовой вэбсервис. при проверке начала выдавать ошибку (... переменная не найдена). увидел что автор в статье (на скрин)
в вэбсервисе переменная называется по одному(ПравилаОбмена, ПравилаВыгрузки, ЗначенияПараметров) , а в коде по другому (ПравилаОбмена, ПравилаВыгрузкиXDTO, ЗначенияПараметровXDTO) - я так понимаю, что это просто опечатка автора ? Если не так поправьте плиз.
52. maksa2005 551 25.07.19 14:06 Сейчас в теме
54. alexeypenzin 2 09.10.19 10:05 Сейчас в теме
Статья отличная, но хочется продолжения.
На практике, в основном, нужно выгружать в базу приемник только измененные объекты. Не совсем понятно как это реализовать с помощью веб-сервисов. Как в данном обмене применить планы обмена? Когда и где очищать таблицу измененных объектов?

Коротко вопрос: На клиенте получили данные, как на сервере узнать что клиент принял данные и на сервере удалить данный объект из таблицы измененных объектов?
xavi; Krotov_Valery; acanta; +3 Ответить
55. GERDUSKA 14.02.20 15:12 Сейчас в теме
Спасибо! Очень пригодилось!
56. igor-pn 73 21.02.22 02:26 Сейчас в теме
Спасибо!!! Очень помогло, то что нужно!!!
57. ER34 28 30.10.23 01:55 Сейчас в теме
Module initialization error: Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта
reason:
{Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(14283)}: Error calling context method (УдалитьФайлы)
reason:
The operation is not allowed because the application is running in safe mode.
Код ошибки: Client
Техническая информация:
<detail xmlns:soap="http://schemas.xmlsoap.org/soap/envelope">

Вот этим достаёт. Как запустить обработку через веб сервис в небезопасном режиме?


Не понял как удалить сообщение - можно только изменить. Разобрался - дело было в расширении и похоже это не личится. Переместил сервис из расширения в основную конфу и отлегло
VyacheslavShilov; +1 Ответить
Оставьте свое сообщение