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

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

КонецФункции // ПолучитьДанныеОтВебСервиса()
 

Конец

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

53 Comments

  1. GoodZone

    тестовую бы конфу, чтоб не с нуля пробовать.

    Reply
  2. т1951

    очень интересно. Спасибо

    Reply
  3. KliMich

    Идея довольно интересная. Спавибо!

    Буду пробовать

    Reply
  4. Tedman

    Mleg, ну что тут скажешь?!

    Красавец! Сам частенько занимаюсь процессом обмена данными, и думал разобраться с тем, можно ли его проводить через web-сервисы, а тут статья такая отличная.

    Во всём этом есть только один (как мне кажется) очень неприятный момент. Если (теоретически) некий злоумышленник перехватит пакет (если используется незащищенное http-соединение), то с помощью обработки обмена с привилегированным режимом сделать он сможешь что угодно. Вероятность, конечно, не велика, но, тем не менее, сделать это не сложно.

    Reply
  5. stanru1

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

    Reply
  6. Yashazz

    Достаточно подробно, грамотно расписано. Наконец кто-то озаботился, спасибо.

    Жаль, самые скользкие и интересные грабли (как публикация веб-сервисов) оставлены за кадром. Ибо, на самом деле, документации на эту тему крайне мало, а труднообъяснимых граблей и багов платформы там много.

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

    Reply
  7. ZLENKO

    Интересно. Спасибо.

    Reply
  8. peterxx

    Прекрасно, интересная, добротная, актуальная статья. Думаю будет очень полезно.

    Reply
  9. Yashazz

    Такие статьи, конечно, были и раньше, например, http://infostart.ru/public/159824/

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

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

    Reply
  10. Mleg

    (9) Да, я смотрел эту статью, перед тем как писать свою. Она немножко на другую тему, там не про передачу данных в формате Универсального обмена.

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

    Однако, «Пожелание зарегистрировано» ©

    Reply
  11. Yashazz

    (10) Не согласен. Милейшая строка «http://server1c8/db_buh/ws/xml-exchange.1cws?wsdl» вызовет вопросы у ваших читателей. Откуда она взялась? По каким принципам сформирована? Что в ней есть что?

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

    Reply
  12. Yashazz

    Я уж не говорю про управление доступом. Вот возьмёт прокси и не создатся, ваши дальнейшие действия? Отсылать к «Руководству администратора»? А там это изложено, во-первых, для «одминов», а во-вторых, очень скудно и неполно. У 1С есть несколько багов, выдаваемых за фичи, в вопросе авторизации (что динамического подключения, что статического).

    Без описания этого ценность вашей публикации снижается.

    Reply
  13. Yashazz

    Понятно. У всех, вишь ты, всё работает, и лишь у одного меня хардкодинг типа

    Определения = Новый WSОпределения(«http://server1c8/db_buh/ws/xml-exchange.1cws?wsdl», «WebServices», «12345»);

    вызывает дурацкие вопросы.

    Reply
  14. WKBAPKA

    бегло пробежался… статья хорошо написана… вот бы она была написана когда я искал пути передачи данных через WEB…

    единственное, что хотелось бы посоветовать — методы веб-сервиса определять на английском языке, что бы при настройке веб-сервера не было проблем с кодировками. По крайней мере, я с этим столкнулся и потратил время на то, что бы разобраться в причине ошибки «Ошибка разбора SOAP сообщения: неверная версия сообщения» веб-сервиса.

    Reply
  15. WKBAPKA

    (9) Yashazz,

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

    1. Если сервера крутяться под виндой, установить клиента 1С на сервер с веб сервисом (это самый простой вариант), или публиковать с помощью утилиты.

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

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

    Reply
  16. WKBAPKA

    (14) Yashazz,

    вот так писать не надо. Первый параметр, это пространство имен. Должен быть уникальным и может быть представлен любым уникальным адресом. Формируется произвольно, как вашей душе угодно.

    Мне кажется, зря Вы на автора наезжаете. Он изложил хорошую идею для обмена данными между веб сервисами!

    Reply
  17. bonv

    (6)Yashazz,

    А можно примеры

    страшенная дыра в безопасности

    ?

    Reply
  18. Yashazz

    (16) Берёте 1 локальный комп (сам себе сервер), винду7 и iis7.5, простейшую файловую базу, и я посмотрю, как для вас «в публикации ничего сложного нет». При наличии всех нужных прав и прочая, разумеется.

    (17) Вот так писать не надо. Первый параметр — это, цитирую, «МестоположениеWSDL» (Местоположение WSDL файла, откуда будет получено определение веб-сервисов), а отнюдь не URI. И формируется не как левая пятка хочет, а по чётким принципам, внимание на которых заостряют редко.

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

    (18) Покурите старые дискуссии насчёт веб-сервисов с участием Трактора. Я щас навскидку не найду.

    Reply
  19. WKBAPKA

    (19) Yashazz,

    1. А чего пробывать? У меня дома развернутый сервер установлен под Апач, я на нем гонял свои веб сервисы. И у клиента установили без проблем. Была только проблема с настройками кодировки самого веб-сервера, а опубликовать вообще не проблема. Кстати, на эту тему, тему публикации, как раз много информации в интернете, даже есть видео на ютубе.

    2. сорри, спутал с WSПрокси… но как бы там не было, можно WSПрокси использовать без создания определения. Ну уж если Вам так надо, почитайте про веб сервисы в интернете, ведь эта технология не разработка 1С. Там же найдете и правила формирования строки.

    Reply
  20. WKBAPKA

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

    Reply
  21. WKBAPKA

    (19) Yashazz,

    Что касается дыр в безопасности, я читал статью на которую вы ссылаетесь… Но! в ней речь шла о публикации базы и опасность заключалась в том, что можно получить данные о пользователях и их паролях, что равносильно получить доступ к самой базе. Веб сервисы же напротив, предоставляют ограниченную информацию. При всех тех же параметрах, злоумышленник не получит больше, чем ему может дать сервис + можно еще организовать дополнительную аутентификацию, на уровне базы на случай, если кто то перехватит логин и пароль для авторизации!

    Reply
  22. Yashazz

    (20) Ключевое слово — «под Апач». Под IIS всё не так просто. И нигде, ни на каком ютюбе, нет подробностей и тонкостей авторизации, к примеру.

    (20)(21) Мне — в общем, ничего не надо, кроме предупреждения автора крупными буквами, что без доработки это вообще ни у кого не взлетит. Или правки строки, о которой я говорю, в сторону шаблонизации.

    Я-то и правила шаблона знаю, и другие моменты (которые, к слову, и на http://its.1c.ru есть), но автор об этом ни слова.

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

    (22) Ага, а полные права отдельным товарищам/группам на bin и папку базы, если она файловая? )) Золотую середину, при которой и веб-сервисы работают, и по доступу не «проходной двор», найти бывает трудно.

    Reply
  23. WKBAPKA

    (23) Yashazz,

    я такие варианты про файловые базы даже не рассматриваю… зачем кому то что то публиковать, если база файловая??? Если у людей нет денег на приобретения сервера 1С, то значит у них нет денег и на организацию безопасности…

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

    Reply
  24. WKBAPKA

    что касается IIS, документаций на эту тему полно… лично я рекомендую апач, т.к. проще…

    Reply
  25. Yashazz

    (24) Оффтопить не буду, но, по-твоему, пользователи файловых БД почти как «недочеловеки», с чем не согласен.

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

    Ну и странновато для знакомых с веб-сервисами выглядят фразы вроде «Расширение «1cws» тоже лучше не менять (не пробовал, если честно).» — RTFM руководство админа, господа; расширение это идёт в алиасе, а дёргать можно как по name (имени, как в конфе), так и по alias (предложенному имени файла).

    В общем, нелогично — что-то разжёвано, что-то упущено.

    Ладно, видимо, это я один такой не такой )))

    Reply
  26. awk

    (0) Круто. Вот только забыли недостатки SOAP:

    1. Передача больших объемов двоичных данных требует наличия большого объема оперативной памяти. Получение ошибок: Out of memory.

    2. Медленный ответ от 1С приведет к зависанию сессии веб сервера, что может отрицательно сказаться на его работе и работе ОС в целом.

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

    4. Для отладки(при возникновении проблем) на клиент-серверных базах придется ставить отладку сервера, что не способствует производительности.

    Reply
  27. kostas

    (27) awk,

    За п.3 плюсанул Вам! Важная информация.

    Reply
  28. psamt1k

    эх! Где же ты был полгода-год назад!!! Я себе весь мозг вскрыл, пока разобрался как тут все работает и смог добавить свои плюшки.

    Но тем не менее плюсую!

    Reply
  29. Kamikadze

    У себя сделал немного проще — только выгрузку из системы НСИ. Идея хороша.

    Reply
  30. Kamikadze

    У меня, для примера, обмены через СОМ работали с каждой базой по 2 минуты, сильно нагружая сервер. Теперь — 20 сек. За 3 месяца потерь данных не было. так что идея перевода обменов на веб — сервисы очень даже актуальная. По — моему в последней СБП есть такие механизмы.

    Reply
  31. zarucheisky

    (31) обмены через СОМ работали с каждой базой по 2 минуты, сильно нагружая сервер. Теперь — 20 сек.

    Скорее всего львиная доля времени уходила на инициализацию COM-объекта+авторизацию.

    Грубо говоря, при одном и том же объеме передаваемых данных вызов тех же методов через COM/ws будет одинаков по быстродействию.

    Reply
  32. zarucheisky

    (21) Не, не совсем так, самой идее ровно столько лет, сколько платформе 8.1…

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

    Reply
  33. kostik_love

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

    может автор напишет такую же полезную и подробную статью)))

    Reply
  34. Трактор

    (27) awk,

    1. Передача больших объемов двоичных данных требует наличия большого объема оперативной памяти. Получение ошибок: Out of memory.

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

    Reply
  35. Трактор

    (34) kostik_love,

    как выполнять отладку web-сервисов?

    Как обычно. Включаешь отладку на сервере, в отладчике, там где предметы отладки, ставишь галку «отладка веб сервисов» и отлаживаешь. Отлаживать возможно только если ты сам делаешь запросы. Рабочую базу не отладишь — слишком много запросов.

    Reply
  36. Трактор

    36+

    (34) kostik_love, запросы к 1С можно посылать специализированной приблудой soapui http://sourceforge.net/projects/soapui/files/soapui/3.6.1/

    Reply
  37. awk

    (35) Трактор, Да. Может прокатить, а может и не прокатить. Если на промежуточных узлах нет ограничений — прокатит. А если есть ограничения, то порежут сообщение и кирдык.

    Reply
  38. awk

    (35) Трактор, Ночь. Читаю плохо. И не на то отвечаю.

    По объему оперативки:

    Один гиг — не показатель. Редко встретишь сейчас объем ОЗУ меньше гига. Плюс свап. Прокатит. Но не быстро. Проще кинутся ссылкой на ресурс.

    Reply
  39. kostik_love

    (37) Трактор, Спасибо за ответ- буду пробовать- очень своевременно

    Reply
  40. sarun

    Спасибо за хорошую обзорную статью. Только начинаю изучение вэбсервисов,поэтому статья очень помогла.

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

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

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

    Подскажите, пожалуйста, кто сталкивался.

    Reply
  41. inesik

    (41) sarun, я тоже думала, куда их добавить, решила добавить в реквизит узла обмена, как хранилище значения.

    Reply
  42. Kamikadze

    так в БСП это уже работает

    Reply
  43. ZLENKO

    (32) zarucheisky, «обмены через СОМ работали с каждой базой по 2 минуты»

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

    Reply
  44. sarun

    42 Я добавил в макет

    Reply
  45. БизнесРешение

    Отличная идея и описание процесса её реализации — доступно и всерьёз! :))

    Reply
  46. user_2010

    Есть такой вопрос: сделала веб-сервис в 1С, опубликовала, он работает в SoapUI, еще проверяли из других программ — работает… Но нужно его использовать в программе, которая работает на платформе SharePoint. Так вот у них мой веб-сервис не работает. Как они объясняют: не тот синтаксис веб-сервиса.

    Вот такой синтаксис делает 1С:

    xs:schema targetNamespace=

    xs:element name=

    А вот так надо SharePoint:

    s:schema elementFormDefault=

    s:element name=

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

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

    Как это сделать в 1С? Как изменить синтаксис опубликованного веб-сервиса?

    Reply
  47. ZLENKO

    (44) ZLENKO.PRO, «COM соединение можно сохранять между сеансами обмена и не инициализировать каждый раз заново.»

    Кстати в 8.3.8 уже нельзя 🙂

    Reply
  48. strafer

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

    Процедура или функция с указанным именем не определена (ПолучитьПравилаОбмена)
    ПравилаОбмена = <<?>>ПолучитьПравилаОбмена(); (Проверка: Сервер)

    Конфигурация УТП.

    Reply
  49. Smal

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

    сделал у себя на тестовой вэбсервис. при проверке начала выдавать ошибку (… переменная не найдена). увидел что автор в статье (на скрин)

    в вэбсервисе переменная называется по одному(ПравилаОбмена, ПравилаВыгрузки, ЗначенияПараметров) , а в коде по другому (ПравилаОбмена, ПравилаВыгрузкиXDTO, ЗначенияПараметровXDTO) — я так понимаю, что это просто опечатка автора ? Если не так поправьте плиз.

    Reply
  50. user_2010

    (47) напишу, хоть и времени с тех пор прошло много. Проблема была не в 1С, 1С все правильно делала!

    Reply
  51. maksa2005

    Спасибо за статью

    Reply
  52. maksa2005

    (49)Это говорит о том, что откуда брать обмен. Создайте макет и добавить туда правила и все)

    (50)это опечатка автора. у меня все получилось

    Reply
  53. alexeypenzin

    Статья отличная, но хочется продолжения.

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

    Коротко вопрос: На клиенте получили данные, как на сервере узнать что клиент принял данные и на сервере удалить данный объект из таблицы измененных объектов?

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *