Обмен между базами 1с через http сервис

Обновлено: 05.07.2024

Обмен данными с конфигурацией через веб-сервисы

Внимание! Данный функционал доступен в "Библиотеке стандартных подсистем", начиная с версии 2.3.1.62.

Для обмена данными через формат EnterpriseData у конфигураций, использующих "Библиотеку стандартных подсистем", есть два веб-сервиса:

  • EnterpriseDataUpload – упрощенный вариант для загрузки данных в информационную базу из сторонних приложений. Не требует специальных настроек на стороне конфигурации (кроме развертывания собственно веб-сервиса); однонаправленный обмен данными – ТОЛЬКО импорт данных в информационную базу.
  • EnterpriseDataExchange – для двустороннего обмена данными между конфигурацией и сторонним приложением. Для работы с ним необходима настройка обмена данными на стороне конфигурации.

Собственно задача обмена данными включает в себя две подзадачи:

  • Составление корректного XML-файла в формате EnterpriseData,
  • Вызов веб-методов в правильной последовательности.

Особенности работы методов веб-сервисов

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

Большинство методов обоих веб-сервисов возвращают строки, но в текущей версии возвращаемые строки всегда пустые (кроме EnterpriseDataUpload.PutDataActionResult – он возвращает статус обработки данных на стороне конфигурации – “Active”, “Completed” либо “Failed”).

Что нужно для работы

На стороне конфигурации

На стороне конфигурации должны быть развернуты веб-сервисы EnterpriseDataUpload и EnterpriseDataExchange соответствующих версий (в данном случае была использована версия 1.0.1.1). При открытии этих двух URL-адресов в браузере (нужно подставить правильное для вашей инсталляции «1С:Предприятия» имя веб-сервера и публикации):

должны выводиться WSDL-описания сервисов:


  • В Solution Explorer в контекстном меню узла References выбрать команду Add Service Reference.
  • В нижнем левом углу появившегося диалога нажать кнопку Advanced.
  • В нижнем левом углу появившегося диалога нажать кнопку Add Web Reference.

Использовалась среда разработки Eclipse 4.4.2. Для генерации кода по WSDL файлов веб-сервисов применялась утилита wsdl2java из фреймворка Apache CXF 2.7.16.

Простой обмен данными с конфигурациями с помощью формата EnterpriseData

Объект может содержать в себе ссылки на другие объекты (например, документ «Акт выполненных работ» может содержать в себе одну или несколько ссылок на номенклатуру). В этом случае, если мы импортируем данные в информационную базу, все объекты, на которые мы ссылаемся из «родительского» объекта, должны либо уже существовать в системе, либо их описание должно содержаться в том же XML файле.

Если нам необходимо удалить какой-то объект, в коллекцию Body надо добавить элемент типа «УдалениеОбъекта», и в этом элементе сослаться на удаляемый объект (см. описание типа «УдалениеОбъекта» в схеме EnterpriseData_X_Y_Z.xsd).

С помощью формата EnterpriseData нам доступны операции создания, обновления и удаления объектов. На данный момент для корректной загрузки данных в типовые решения все объекты должны содержать заполненный элемент «Ссылка» из элемента «Ключевые свойства» (GUID в форме строки). Это первичный ключ объекта. Конфигурации ведут себя следующим образом:

  • Если в системе нет объекта с ключом из поля «Ссылка» - создается новый объект.
  • Если в системе уже есть объект с ключом из поля «Ссылка» - существующий объект обновляется новыми данными, пришедшими в XML.
  • Если пришел элемент типа «УдалениеОбъекта» - объект с соответствующим ключом удаляется из системы.

Веб-сервис EnterpriseDataUpload

EnterpriseDataUpload – интерфейс исключительно для импорта данных в формате EnterpriseData в конфигурацию из сторонних приложений. Условия задачи: у нас есть XML файл с данными в формате EnterpriseData, надо передать его в конфигурацию и убедиться в том, что на стороне конфигурации данные успешно получены.

Алгоритм работы следующий:

Итак, у нас есть архив с данными в формате EnterpriseData (один или несколько файлов). Не будем описывать, как в программе создать архив и разбить его на несколько файлов, чтобы сэкономить время – желающие смогут легко найти примеры подобного кода, используя поисковые сервера и соответствующие запросы.

Реализуем функцию, которая принимает такие входные параметры:

  • URL Веб-сервиса,
  • Имя пользователя для соединения с Веб-сервисом,
  • Пароль.

Путь до архивированного файла с данными. Если архив умещается в одном файле – это имя файла с полным путем, включая расширение (например, “C:\Exchange\data.zip”). Если же архив разбит на несколько частей, то это будет имя любого из файлов без расширения и точки (например, “C:\Exchange\data”). Предполагается, что это последовательность файлов с расширениями “.001”, “.002” и т.д.

Реализация функции (в виде статического метода) в листинге ниже. Диагностическая информация выводится в консоль.

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

Определение WEB-сервиса — реализация абсолютно четких интерфейсов обмена данными между различными приложениями, которые написаны не только на разных языках, но и распределены на разных узлах сети. Но в нашем примере мы разберем обмен между двумя базами 1С.

В базе-источнике требуется создать объект конфигурации: WEB-сервисы

В базе приемнике создаем объект конфигурации: WS-ссылки

WS-ссылка содержит описание WEB-сервиса из базы-источника. Этот объект конфигурации не имеет программного кода и представляет собой только модель данных и описание операций созданного в базе-источнике WEB-сервиса.

Пример описания WS-ссылки (рис.1)


Рис. 1 – описание WS-ссылки

Важным параметром является то, что данную ссылку мы можем открыть в браузере и посмотреть текстовое описание WEB-сервиса (рис.2). Если в браузере WEB-сервис не открывается, то и созданная WS-ссылка работать не будет


Рис. 2 – описание WEB-сервиса

Если мы откроем WS-ссылку, которая корректно загружена, то увидим вот такую картину (рис.3)


Пакеты, которые автоматически подключаются (ветка пакеты)

Сам WEB-сервис, к которому идет обращение и его операции, которые описаны в базе-источнике.

Операции WEB-сервиса описываются функциями встроенного языка. То есть – любая операция веб-сервиса должна возвратить какое-либо значение. Тип возвращаемого значения можно указать в описании операции WEB_сервиса (рис 4.2).

Типы возвращаемых значений мы указываем в свойстве непосредственно WEB-сервиса «Пакеты XDTO». Механизм XDTO позволяет определять объекты переноса данных, которые могут образовывать строгую иерархию и могут сериализоваться в XML. Эти свойства позволили использовать объекты XDTO в качестве параметров и возвращаемых значений операций web-сервисов.


Рис. 4.1 – описание WEB-сервиса


Рис. 4.2 – описание операции WEB-сервиса

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

Описание вызова WEB-сервиса (Листинг 1)

Указать сертификат ssl

Организовать обращение к WS-ссылке с использованием метода: СоздатьWSПрокси – в методе прописывается

URL-пространство имен, (*) – описывается в Web-сервисе (см. рис 4.1),

имя сервиса (*)– описывается в Web-сервисе (см. рис 4.1),

имя порта (*) – описывается в WS-ссылке, см

использование аутентификации WINDOWS

Описание создания защищенного ssl-соединения (синтаксис-помощник 1С; листинг 2)

Листинг 2 - Возможные описания объекта защищенного соединения OpenSSL (1С помощник)

Объект защищенного соединения OpenSSL.
Используемый клиентский сертификат должен быть самоподписанным или проходить валидацию через сертификаты удостоверяющих центров, заданные в свойстве "СертификатыУдостоверяющихЦентров"

Тонкий клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.

Листинг 2 – описание возможных описаний объекта защищенного соединения OpenSSL

Выбор корректного описания зависит напрямую от того, с каким сертификатом работает организация.

Если все корректно, то в переменную «ответ» (листинг 3) вернется значение из базы-источника. Так же тут указываем сразу параметры, которые требуются для передачи в операцию WEB-сервиса

Листинг 3 – Строка обращения к операции WEB-сервиса

Обрабатываем полученные результаты. И тут может быть два варианта.

Мы получили сразу объект того типа, который указывали в выходных параметрах. Нам его нужно просто обработать средствами встроенного языка – извлечь из него требуемые данные (если это таблица значений, структура или хранилище значений, как в нашем случае).

WEB-сервер нам возвращает закодированный ответ в виде строки BASE64. Этот случай опишем подробнее.

Если WEB-сервер нам возвратил закодированную строчку, то требуется выполнить преобразование ее в объекты 1С. Для этого нам следует сделать несколько преобразований:

BASE64 в двоичные данные (используем функцию встроенного языка 1С:
ДвоичныеДанные = Base64Значение(Ответ); (где ответ – это значение, которое возвращено WEB-сервером)

Используем фабрику XDTO для представления двоичных данных в объекте 1С (листинг 4)

Фабрика типов XDTO: Содержит определения всех типов, позволяет осуществлять чтения/запись данных XDTO в XML и JSON (материал Синтаксис-помощника).

Листинг 4 – использование фабрики XDTO для преобразования двоичных данных в объект 1С -

Создаем значение XDTO по лексическому представлению значения. Лексическое представление значения должно удовлетворять ограничениям, определяемым данным типом значения XDTO. Тип нашего XDTO (параметр 1 – является обязательным) должен совпадать с типом выходного параметра функции WEB-сервиса (см. Рис 4.2). Описываем пространство имен (URIПространстваИмен (NamespaceURI)) и БазовыйТип (BaseType). Вторым параметром в функцию подставляем наши двоичные данные (без преобразования их в объекты). Если все выполнено корректно, то наше выходное значение из WEB-сервиса будет содержаться в реквизите: телоXDTO.Значение, того типа, который мы указали в выходном параметре ("ValueStorage" – хранилище значения).

Работа непосредственно с получением данных через WEB-сервис на этом заканчивается.

Использование веб-сервисов 1С при обмене 1С – 1С позволяет быстро передавать достаточно большие объемы данных из базы-источника в базу-приемник в объектах языка 1С.

Данный метод обмена может применяться при бесшовной интеграции между двумя базами 1С, но требует определенной серверной инфраструктуры (установленного и настроенного WEB-сервера).

Так же этот вариант применим при необходимости получать данные из одной базы в другую (пример – получение остатка бюджета из одной базы (источник) при заведении нового счета на оплату (в сторонней базе)).

Собственные наработки и набитые шишки в моей практике по программированию в 1С.

пятница, 8 сентября 2017 г.

Как настроить обмен 1С с интернет-сервисами

Что мы разберем в статье

  • Отправку данных
  • Получение данных
  • Ответы на запросы от внешних сервисов.

Требования к рабочему окружению

  • Веб-сервер (Apache или IIS)
  • Платформа 1С (8.3.8 или старше) с установленным расширением веб-сервера.

Установка веб-сервера Apache


После завершения установки запустится приложение XAMPP-Control:



После этого запустите Apache. Ошибка должна уйти, а веб-сервер запуститься.

Обратите внимание:
Чтобы иметь возможность публиковать конфигурацию на веб-сервере прямо из 1С, необходимо установить Apache как службу Windows. Без этого Apache будет недоступен для выбора в окне Публикация на веб-сервере.

  • Остановить Apache кнопкой Stop в форме приложения XAMPP-Control.
  • Запустить на выполнение командный файл C:\xampp\apache\apache_installservice.bat от имени администратора.


Установка Платформы

На момент написания статьи последняя версия платформы 8.3.9.2170. Ее и будем устанавливать. При установке платформы нужно обязательно указать компоненту Модули расширения Веб-сервера. Больше никаких особенностей нет.


Теперь создадим новую пустую базу (файловый вариант). В свойствах конфигурации укажем Режим использования модальности = Использовать, чтобы излишне не усложнять примеры асинхронными вызовами. Обновим конфигурацию базы данных (F7).



Тело ответа
В теле ответа содержатся данные в формате JSON.

НTTPСоединение

Пример 1: загрузка картинки с сайта (GET запрос)

Рассмотрим, как средствами 1С скачать картинку с сайта и записать ее на диск. Для этого создадим в базе обработку, добавим форму обработки. Добавим команду формы Загрузить и добавим ее в форму.
Итоговая форма имеет вид:


5. Обрабатываем ответ на запрос

После отправки запроса и получения ответа мы проверяем КодСостояния (Статус-код).
Если КодСостояния = 200 (класс Успех), то сохраняем картинку в указанный файл и сообщаем пользователю, что картинка получена. В противном случае сообщаем, что картинка не получена, и выводим на экран КодСостояния.

  • Простота разработки клиентов таких сервисов
  • Меньший объем передаваемых данных
  • Меньшая вычислительная нагрузка.


Здесь особо следует обратить внимание на значение свойства Корневой URL, так как это свойство отвечает за формирование URL-адреса, по которому мы будем обращаться ко всем методам этого сервиса.
Далее переходим на закладку Шаблоны URL и добавляем шаблон GetCustomersList.


Здесь обращаем внимание на шаблон /List. Шаблоны тоже отвечают за формирование URL, по которому мы будем обращаться к конкретному методу сервиса. Это очень простой шаблон, который не содержит никаких параметров.
И наконец создаем метод обработчика GetCustomersList, который будет обрабатывать GET-запросы.


1. Формируем массив клиентов для отправки

Получаем выборку по всем клиентам и заполняем массив данными по клиентам. Ничего необычного.

2. Сериализуем массив клиентов в JSON

Сериализуем массив клиентов в формат JSON стандартным механизмом платформы.
Под сериализацией в программировании понимается перевод структуры данных в последовательность битов, пригодных для сохранения на диске или передачи по сети. В нашем случае результатом сериализации является строка в формате JSON.

3. Формируем ответ



Запускаем браузер и вводим в адресную строку полученный URL:


В результате видим данные в формате JSON, чего и добивались.


Добавим метод обработчика GetCustomerInfo:


1. Получим из запроса параметр CustomerCode и найдем по коду контрагента

Фрагменты кода под комментариями 2, 3 и 4 в особых пояснениях не нуждаются.

5. Сформируем ответ

Этот сервис будет получать данные по контрагенту из POST-запроса. Если клиент с таким кодом уже есть в базе, то обновим по нему данные, иначе добавим нового и заполним полученными данными.
Создадим новый шаблон URL для сервиса Customers. Назовем его PostCustomerInfo. Шаблон /PostCustomerInfo:


Обновим конфигурацию базы данных, опубликуем базу, перезапустим Apache. Теперь зайдем в пользовательском режиме и запустим обработку.



Заключение



Создаем php файл с текстом:

<?php

// Проверка наличия ошибок
if ($output === FALSE)

echo "cURL Error: " . curl_error($ch);

>

//Выводим сервисную информацию по выполнению запроса
$info = curl_getinfo($ch);

echo 'Took ' . $info['total_time'] . ' seconds for url ' . $info['url'];

// Очистка ресурсов
curl_close($ch);
*/

echo "<br>";
echo "<br>";

$obj = json_decode ( $output , true );

echo "Выводит все содержимое JSON";
echo "<br>";
var_dump ( $obj ); // Выводит все содержимое JSON в браузер

echo "<br>";
echo "<br>";
echo "Выводит одну запись из массива JSON";
echo "<br>";
$Code = $obj [1]['Code'];
echo $Code ;
echo "<br>";
$Naim = $obj [1]['Naim'];
echo $Naim ;

echo "<br>";
echo "<br>";
echo "Выводит циклически из массива JSON все записи";
echo "<br>";
foreach ( $obj as $key => $value)
<
foreach ( $obj [ $key ] as $key => $value )
<
echo $key .':'. $value . PHP_EOL ;
echo "<br>";
>
>
?>

Результат выполнения


/*
//Первый способ
// Получение файла JSON используя file_get_contents($url)

//отправляем запрос с параметрами
$username = "Администратор";
$password = "1";
$auth = base64_encode("$username:$password"); //Создаем строку авторизации
//по типу Basic auth, для авторизации в веб-сервисе
$context = stream_context_create([
'http' => [
'method' => "GET",
'header' => "Authorization: Basic $auth"
]
]);

$url ='http://localhost/test/hs/ob/OblistAll';

$output = file_get_contents($url, false, $context);
*/


//Второй способ
//Получение файла JSON используя curl

//Авторизация
$username = "Администратор";
$password = "1";
$host_api font-size: medium;">localhost /test";
$ch = curl_init ( $host_api );

// Проверка наличия ошибок
if ( $output === FALSE )
<
echo "cURL Error: " . curl_error ( $ch );
>

//Выводим сервисную информацию по выполнению запроса
$info = curl_getinfo ( $ch );

echo 'Took ' . $info ['total_time'] . ' seconds for url ' . $info ['url'];

// Очистка ресурсов
curl_close ( $ch );


echo "<br>";
echo "<br>";

$obj = json_decode ( $output , true );

echo "Выводит все содержимое JSON";
echo "<br>";
var_dump ( $obj ); // Выводит все содержимое JSON в браузер

echo "<br>";
echo "<br>";
echo "Выводит одну запись из массива JSON";
echo "<br>";
$Code = $obj [1]['Code'];
echo $Code ;
echo "<br>";
$Naim = $obj [1]['Naim'];
echo $Naim ;

echo "<br>";
echo "<br>";
echo "Выводит циклически из массива JSON все записи";
echo "<br>";
foreach ( $obj as $key => $value)
<
foreach ( $obj [ $key ] as $key => $value )
<
echo $key .':'. $value . PHP_EOL ;
echo "<br>";
>
>
?>


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

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


Очень приятно, что статья помогла вам найти решение поставленных задач!

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

Энергия ветра будет стоить дешевле, чем принятое ископаемое топливо, которое станет ценным для всего необходимого, и будет радовать только для топлива, если это абсолютно необходимо. Фотовольтаика (солнечная электроэнергия) станет стандартной частью строительных материалов, генерируя энергию с эффективностью 25-30% и обеспечивая значительную часть непромышленного спроса. Даже некоторый промышленный спрос будет обеспечиваться за счет фотоэлектрических систем, встроенных в здания, эффективно обращая вспять традиционно принятые солнечные потоки. В относительно отдаленном будущем (

Возникает проблема, что правильнее, гознак или "специальная форма", киржач или ооо "знак". В общем, этот список не полный, есть перечень коммерческих производств, получивших государственный сертификат на производство. Нужно ли нам принимать во внимание эту реальность? Какой сертификат я должен заказать о во в нашем городе? Снимает этот вопрос просто, лучше иметь человека на государственной бумаге, который предлагает дипломы в университете. Суть в том, что руководство способно определять поставщиков бланков без контроля, а гознак, в дополнение ко всему, не такой уж дешевый партнер". Легитимность идентична, поэтому крупные компании предпочитают другие типографии. В случае, если вам понравилась эта короткая статья, и вы собираетесь получить подробную информацию о купить диплом псков I, я прошу всех пользователей посетить этот сайт.

Читайте также: