Универсальный обмен данными 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 не будет опубликован. Обязательные поля помечены *