В компаниях, которые разворачивают у себя системный комплекс 1С: Предприятие, используя платформу ОС Windows, для веб-публикации информационных баз пользуются WS (Web-Servis). Решение оправдано тем, что оно позволяет обходиться только штатными средствами платформы Windows, не «заморачиваясь» на приобретение дополнительного софта.
В нашей статье найдутся ответы на вопросы, как загружать\выгружать данные из одной базы в другую с помощью такого полезного инструмента, как Web Сервис. Разберем прикладные задачи на примере выгрузки таблицы остатков.
Сразу предупредим, что обмен через веб-сервисы осуществляется только в том случае, если опубликован веб-сервис (Apache либо IIS) на компьютере.
Обмен через веб-сервисы с помощью МС: Автообмен без программирования
В работе любого предприятия, использующего механизмы обмена данными, может возникнуть потребность автоматического режима обмена в определенные часы, дни.
Существует готовая программа МС: Автообмен. С ее помощью обмен между двумя базами 1С настраивается в удобном для пользователя пошаговом мастере. Для автоматического запуска автообмена выбирается расписание. Например: Выполнять: каждый день; с 8:00 один раз в день.
Благодаря программе обмены ускоряются через веб-сервисы. Вместе со скоростью приходит стабильность, независимость от релиза платформы 1С: Предприятие.
На странице программы МС: Автообмен посмотрите видео демонстрации с подробным описанием возможностей программы.
Начальные шаги на пути обмена данными через Web Сервисы
Как уже было сказано вначале, процедуру обмена рассмотрим на примере выгрузки таблицы остатков.
Первый шаг — создание Web-Service в удаленной базе. На картинке 1 показано открытое окно Конфигурация. В разделе Web-сервисы создан веб-сервис под названием ObmenWS.
Заполнение свойств Web -Сервиса
После создания Web-Service в удаленной базе под названием ObmenWS понадобится заполнить его свойства. Для этого надо открыть вкладку «Прочее», как на картинке 2. Здесь последовательно заполним свойства.
В первой строке «URL Пространства имен» укажем, к примеру, «1.1.1.1» . Это необходимо, чтобы можно было идентифицировать Web-Service по сочетанию его имени и пространству имен.
Вторая строка «Пакеты XDTO» требует некоторых пояснений. Фирма 1С создала универсальный способ представления данных для интеграции с другими системами. А также обмена данными между конфигурациями «1С: Предприятие» с разными структурами данных. В данном случае речь идет о пакетах XDTO. Аббревиатура расшифровывается как XML Data Transfer Objects. То есть, как видно из названия, с помощью механизма XDTO объектное моделирование данных описывается с использованием схемы XML. Благодаря такому решению стало возможным оперирование не узлами XML, а использование в рамках языка 1С прикладных понятий:
- Сотрудник;
- Счет;
- встроенные типы «ТаблицаЗначений», «СправочникСсылка» и прочие.
Для нашего примера не понадобится создание собственных пакетов XDTO. Достаточно воспользоваться встроенными пакетами 1С. В системе «1С: Предприятие» реализована сериализация данных на основе механизма XDTO, которая позволяет сериализовать в/из XML все типы данных, хранящиеся в базе данных. Для нашего примера возьмем пакет «http://v8.1c.ru/8.1/data/core». В нем содержится формат «Двоичные данные». Он помогает передаче любых типов через хранилище данных.
В третьей строке «Имя файла публикации» прописываем название «ObmenWS1.1cws». На самом деле, сюда вписывается любое название файла, которое пользователь придумал самостоятельно. Требования обычные:
- латинский шрифт (желателен);
- расширение 1cws (обязательно);
- совпадение с данным вами именем каталога на web-сервере (желательно).
Опираясь на этих «трех слонов», дадим наше название «ObmenWS1».
С правой стороны открыта вкладка «Выбор пакетов XDTO». Не оставляем ее без внимания и проставляем галочку возле строки http://v8.1c.ru/8.1/data/core. Как уже говорилось выше, это встроенный готовый пакет.
Добавление операций в WS для загрузки и выгрузки данных
Теперь мы имеем рабочий Web Сервис. В него необходимо внести операции для загрузки и выгрузки данных.
Процесс создания операции
Мы хотим создать операцию. Весь процесс создания показан на картинке 3.
Для этого в списке поля «Конфигурация» опускаемся в раздел ObmenWS. В нем выбираем операцию с названием «ОстаткиТоваровНаСкладах». Справа в окне «Свойства: «ОстаткиТоваровНаСкладах» отмечаем «Имя: ОстаткиТоваровНаСкладах» и «Синоним: Остатки товаров на складах». Указываем Тип возвращаемого значения: ValueStorage (Хранилище данных) и http://v8.1c.ru/8.1/data/core.
Создание параметров для операции
На картинке 4 отражена последовательность создания параметров для проведения операции. В окне Конфигурация в разделе Действия находим подраздел Web – сервисы. Под ним открываем созданный нами ObmenWS. Дальше ОстаткиТоваровНаСкладах. Под этой операцией формируем перечень с произвольным количеством параметров:
- НачалоПериода;
- Организации;
- Контрагенты;
- КонецПериода;
- Склад и т. д.
В нашем учебном примере разбираемся с тремя параметрами. Для каждого из них задаем Свойства. Они прописаны с правой стороны напротив каждого параметра, открытого в окне Конфигурация.
У параметра НачалоПериода задаем Свойства: НачалоПериода. Основные — это Имя и Синоним. А также, Тип значения: date (http://www.w3.org/2001/XMLSchema). Определим направление передачи данных с помощью параметра: входной параметр используется для передачи данных Web-сервису. Строка Возможно пустое значение показывает, может ли параметр операции принимать неопределенное значение. Не ставим здесь флажок.
Аналогично заполняем Свойства для параметра КонецПериода и Склад. Для параметра Склад вместо типа значения Дата ставим String (Строка). А именно, это выглядит так: string(http://www.w3.org/2001/XMLSchema).
Остается добавить программный код к операции «ОстаткиТоваровНаСкладах». В верхней панели задач окна Конфигурация кликаем на кнопку открытия со значком лупы у свойства «ИмяПроцедуры». В результате в модуле Web-сервиса будет создан шаблон функции-обработчика. Этот этап отражен на картинке 5. Мы должны вставить содержимое обработчика. Создать код функции ОстаткиТоваровНаСкладах (НачалоПериода, КонецПериода, Склад).
Листинг. Функция ОстаткиТоваровНаСкладах (НачалоПериода, КонецПериода, Склад) выглядит следующим образом:
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Наименование КАК НоменклатураНаименование, | ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток, | ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток, | ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход КАК КоличествоПриход, | ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход КАК КоличествоРасход |ИЗ | РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Запись, , Склад = &Склад) КАК ТоварыНаСкладахОстаткиИОбороты"; Запрос.УстановитьПараметр("КонецПериода", КонецПериода); Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода); Запрос.УстановитьПараметр("Склад", Справочники.Склады.НайтиПоНаименованию(Склад,истина)); ТаблицаРезультата = Запрос.Выполнить().Выгрузить(); Хранилище = новый ХранилищеЗначения(ТаблицаРезультата); Возврат Хранилище;
Теперь осталось только опубликовать созданный Web-сервис на веб-сервере — например, в каталоге C:\ inetpub\wwwroot\ObmenCU. Расставляем галочки для всех необходимых задач:
- Публиковать тонкий клиент и веб-клиент.
- Публиковать стандартный интерфейс OData.
В подразделе Web-сервисы отмечаем галочками задачи:
- Публиковать Web-сервисы по умолчанию.
- Имя и адрес публикуемого сервиса (ObmenCU.1cws).
Весь процесс показан на картинке 6. Здесь же мы видим предупреждение, что каталог базы должен иметь полные права.
Публикация веб-сервера IIS для 1С
После того, как мы создали веб-сервис, нам предстоит его опубликовать, чтобы иметь возможность подключаться к нему из другой базы. Существует специальная инструкция, как правильно это сделать. Более подробно можно ознакомиться по ссылке: Публикация веб-сервера IIS для 1С. Сегодня Internet Information Services (IIS) зачастую используется на платформе Windows, чтобы публиковать информационные базы системы «1С: Предприятие». Такое решение позволяет обходиться без приобретения дополнительного софта.
Воспользоваться инструкцией по установке веб-сервера IIS могут обладатели Windows Server 2012 R2, 2016, 2019, 2022. Это необходимо, так как по умолчанию в операционной среде Windows компоненты веб-сервера не устанавливаются. А обмен через веб-сервисы работает только в том случае, когда опубликован веб-сервер на компьютере.
Рассмотрим также способ, как подключиться из другой базы, если понадобилось получить остатки за период по конкретному складу.
Создаем внешнюю обработку, в модуле обработки прописываем следующий код:
Процедура ПолучитьТаблицуСДругойБазы() НачалоПериода = ТекущаяДата(); КонецПериода = ДобавитьМесяц(ТекущаяДата(),-3); //3 месяца назад Склад = "Основной склад"; Таблица = ПолучениеДанных(НачПериод,КонПериод,Склад); //Первый вариант, //Если операций станет много, чтобы не писать для каждой операции свою функцию, можно создать одну универсальную Таблица = ПолучениеДанныхОптимизированно("ОстаткиТоваровНаСкладах",НачПериод,КонПериод,Склад); //Второй вариант - оптимизированно!) КонецПроцедуры Функция ПодключениеКWS() МестоположениеWSDL = "http://localhost/ObmenWS/ws/ObmenWS.1cws?wsdl" ; //localhost - указываем ваш ip-адрес, где опубликован ws ИмяПользователя = "Администратор"; Пароль= "Пароль"; URIПространстваИменСервиса = "1.1.1.1 "; ИмяСервиса= "ObmenWS"; ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL; ВСОпределение = Новый WSОпределения(МестоположениеWSDL, ИмяПользователя, Пароль,,,ЗащищенноеСоединение); ВСПрокси = Новый WSПрокси(ВСОпределение,URIПространстваИменСервиса , ИмяСервиса,ИмяСервиса+"Soap" ); ВСПрокси.Пользователь = ИмяПользователя; ВСПрокси.Пароль = Пароль; Возврат ВСПрокси; КонецФункции Функция ПолучениеДанныхОптимизированно(ИмяФункцииWS, П1 = Неопределено, П2 = Неопределено, П3 = Неопределено, П4 = Неопределено, П5 = Неопределено, П6 = Неопределено, П7 = Неопределено, П8 = Неопределено) Подключение = ПодключениеКWS(); Данные = Вычислить("Подключение."+ИмяФункцииWS+"("+?(П1=Неопределено,"","П1") +?(П2=Неопределено,"",",П2") +?(П3=Неопределено,"",",П3") +?(П4=Неопределено,"",",П4") +?(П5=Неопределено,"",",П5") +?(П6=Неопределено,"",",П6") +?(П7=Неопределено,"",",П7") +?(П8=Неопределено,"",",П8") + ")"); Ответ = Данные; Возврат Ответ; КонецФункции Функция ПолучениеДанных(НачПериод,КонПериод,Склад) Подключение = ПодключениеКWS(); Хранилище = Подключение.ОстаткиТоваровНаСкладах(НачПериод,КонПериод,Склад); Таблица = Хранилище.Получить(); Возврат Таблица; КонецФункции
Обмен в формате EnterpriseData через веб-сервисы
Компания 1С и многие разработчики считают, что универсальный формат EnterpriseData (ED) является наиболее перспективной технологией для обмена данными. Хотя этому механизму немного лет, но на нем уже базируются почти все обмены между типовыми конфигурациями платформы 1С.
Функционал формата ED можно найти в Библиотеке стандартных подсистем (БСП). Пользователям надо учесть, что версия должна быть не старше 2.3.1.62.
Компания 1С предоставляет два способа использования функционала EnterpriseData:
- По упрощённой односторонней схеме миграции данных в информационную базу из внешних приложений работает EnterpriseDataUpload. Для импорта данных в ИБ понадобится только развернуть веб-сервис на стороне конфигурации, без дополнительных настроек.
- Когда нужен двусторонний обмен между конфигурацией и сторонним приложением, обращаются к EnterpriseDataExchange. Предварительно потребуется настроить обмен на стороне конфигурации.
Основные отличия новой технологии обмена ED от хорошо зарекомендовавшей себя по правилам КД 2.0 можно свести к двум главным фактам:
- Обмениваются данными между собой не две конфигурации, а конфигурация и универсальный формат. Последний участник цепочки, по сути своей, является четко заданной структурой данных, выгружаемых в файл обмена. Для обмена надо решить задачу по составлению корректного XML-файла в формате EnterpriseData.
- Описание универсального формата есть в ветке дерева конфигурации XDTO – пакеты (преобразованные схемы XML). Технология XDTO применяется для реализации обмена данными между базой данных конфигурации и ED.
Для запуска обмена данными необходимо вызвать веб-методы в определенной последовательности.
Кроме того, надо учитывать ограниченность объема передаваемых через веб-сервисы данных. Их необходимо архивировать в формате ZIP, а при необходимости разбивать и отправлять частями. На размер сообщения влияют:
- пропускная способность сети;
- настройки веб-сервера;
- объем свободной памяти на передающей и приемной стороне;
- другие факторы.
Оптимальным размером данных для передачи через веб-сервис считается несколько мегабайт, желательно не более двух.
Особенности работы методов веб-сервисов
Инструменты для обмена данными через формат EnterpriseData в конфигурациях «1С: Предприятие» имеют сходные методы. Взять, к примеру, выходной параметр — строку ErrorMessage. В нее записывается информация об ошибке, возникшей внутри конфигурации. А если процесс работы метода прошел без «сучка и задоринки», то есть, без ошибок, сюда помещается пустая строка.
При возникновении системной ошибки (неудачная разархивация пришедшего архива) веб-методом генерируется исключение (exception).
Далее в публикации рассмотрим на примерах использование веб-сервисов для обмена данными с конфигурациями из языков C# и Java.
Что нужно для работы на стороне конфигурации
На первом скриншоте мы видим список веб-сервисов конфигурации с версиями. Надо выбрать и развернуть на стороне конфигурации EnterpriseDataUpload, версия 1.0.1.1 и EnterpriseDataExchange, версия 1.0.1.1.
В приведенном примере подставьте свое имя веб-сервера и публикации:
- http://<веб-сервер>/<веб-приложение>/ws/EnterpriseDataExchange_1_0_1_1?wsdl
- http://<веб-сервер>/<веб-приложение>/ws/EnterpriseDataUpload_1_0_1_1?wsdl
На картинке 2 открыты списки методов данных двух веб-сервисов. Как мы видим, у разных способов ED есть свой перечень методов с конкретным назначением. EnterpriseDataExchange владеет девятью методами. Упрощенному варианту EnterpriseDataUpload доступны только пять.
Когда данные адреса откроются в браузере, выводятся WSDL-описания сервисов.
C#
Для примера создали консольное приложение на C# в Visual Studio 2012. В приложение импортированы веб-сервисы:
- Зашли в контекстное меню узла References в Solution Explorer. Здесь выбрали команду Add Service Reference.
- Открывшееся диалоговое окно в нижнем левом углу имеет кнопку Advanced. По ней надо кликнуть.
- Затем также в нижнем левом углу открытого диалога щёлкнуть по команде Add Web Reference.
Java
Использовалась среда разработки Eclipse 4.4.2. Для генерации кода по WSDL файлов веб-сервисов применялась утилита wsdl2java из фреймворка Apache CXF 2.7.16.
Как осуществить простой обмен данными с конфигурациями с помощью формата EnterpriseData
Простой обмен данными проходит через синхронизацию, которая настраивается конфигурацией 1С. Система выдает уникальный код приложения, с которым налаживает обмен. Также указывает канал обмена, периодичность сеансов синхронизации. Инициатором сеанса при обмене через веб-сервис выступает стороннее приложение. Оно вызывает необходимые для синхронизации веб-методы.
В универсальном формате ED описываются объекты, их структура в XML-файлах. Из них формируется сообщение, в котором корневым элементом считается Message. В свою очередь, у Message есть, так называемые, дочерние элементы:
- Во-первых, это Header, который описывает заголовок сообщения.
- Во-вторых, Body – sequence (коллекция) элементов, или всех объектов, подлежащих синхронизации.
В свою очередь, надо отметить, что объект может включать ссылки на другие объекты. Взять, к примеру, документ «Акт выполненных работ». В нем могут быть включены ссылки на номенклатуру. Для осуществления импорта ссылочных объектов в ИБ они или сами должны быть в системе, или их описание должно присутствовать в том же XML - файле.
Допустим, нам понадобилось удаление какого-либо объекта. Мы должны в Body добавить элемент типа «УдалениеОбъекта». В него включить ссылку на удаляемый объект.
Формат EnterpriseData дает возможность создавать, обновлять и удалять объекты.
Касательно ED-формата мы оперируем понятием «первичный ключ объекта». Под ним подразумевается поле (либо набор полей), которое служит для идентификации записей. Благодаря этому каждая из них обретает свою уникальность.
В контексте EnterpriseData первичным ключом объекта является заполненный элемент «Ссылка» из элемента «Ключевые свойства». Нам нужна корректная загрузка всех данных в типовые решения. Чтобы так и произошло, все объекты должны содержать заполненный элемент «Ссылка» из элемента «Ключевые свойства» (GUID в форме строки).
Что происходит с конфигурациями:
- Они создают новый объект, когда отсутствует объект с ключом из поля «Ссылка».
- В случае, когда в системе имеется первичный ключ, в него надо добавить новые данные из поступивших файлов XML.
- Когда в систему поступил элемент типа «УдалениеОбъекта», надо объект с соответствующим ключом попросту удалить оттуда.
Как отправить объект через WebService с помощью EnterpriseDataUpload
Представим ситуацию, когда требуется отправить документ или справочник из стороннего приложения в программу на платформе 1С. Для решения данной задачи используем механизм EnterpriseDataUpload. Делается это по ниже описанному алгоритму.
Имеющийся в распоряжении пользователя XML файл с данными в формате EnterpriseData отправим в программный продукт «1С». Не забываем, что в конце миграции надо удостовериться в получении данных на стороне конфигурации. Для этого проделаем ряд манипуляций:
- Во-первых, заархивируем XML- файл с данными. Слишком большой файл не удастся отправить за раз, поэтому поделим его на несколько. Размер каждого куска не превышает 2Мб.
- Далее потребуется проверка соединения с помощью метода TestConnection.
- Отправку каждой части архива осуществляем, помещая часть файла с данными во временное хранилище с помощью метода PutFilePart. Если мы передаем архив одним файлом – второй параметр метода PutFilePart,PartNumber, должен быть равен нулю. Если архив из нескольких частей – параметр PartNumber должен соответствовать номеру части, начиная с единицы.
- Помещаем данные в информационную базу без использования узла плана обмена методом PutData.
Убедиться в успешном результате выполнения операции по помещению данных в ИБ помогает метод PutDataActionResult. На обработку полученных данных в программе 1С требуется время. Поэтому рекомендуется установить параметр для вызова метода PutDataActionResult в цикле. Это может быть, к примеру, интервал через 5 секунд. Завершение — возврат строки «Completed». Возможно, появятся надписи:
- «Failed» — данные по какой-либо причине обработать не удалось;
- «Canceled» — при отмене операции.
Теперь, собственно говоря, приступаем к реализации задуманного плана. Имея архив в формате EnterpriseData, мы публикуем на Веб сервере Веб-сервис EnterpriseDataUpload. Далее запускаем обработку.
Какие включаются параметры:
- Прежде всего, надо указать адрес WS Сервера/имя базы.
- Во-вторых, для соединения с Web-сервисом требуется пользователь с полными правами. При не указании пользователя последует авторизация под пользователем на сервере запустившей агента.
- В-третьих, нужен пароль.
Каталог файла с данными — полный путь, включая расширение.
После отправки всех частей архива вызывается метод PutData для проверки результата.













































