Функция MSSQL для вызова HTTP сервиса 1С

26.12.19

Интеграция - WEB-интеграция

MSSQL вызывает какие-либо действия в 1С или получает оттуда информацию. В сторонних таблицах при вставке/обновлении/удалении строк срабатывает триггер. Процедура триггера дёргает предлагаемую функцию. Вызывается HTTP сервис 1С, который обрабатывает информацию об изменениях сторонних таблиц, либо возвращает информацию для записи.

Скрипт создания функции:

CREATE FUNCTION [dbo].[HTTPRequest] ( @postData nvarchar(max) )
RETURNS nvarchar(500)
AS
BEGIN
 
Declare @Object as Int;
Declare @ResponseText as nvarchar(500);
Declare @ResponseError as int;
DECLARE @source varchar(255), @desc varchar(255) 

Exec @ResponseError = sp_OACreate 'MSXML2.ServerXMLHTTP', @Object OUT ;
IF @ResponseError <> 0 BEGIN
      EXEC sp_OAGetErrorInfo @Object, @source OUT, @desc OUT
      RETURN '1 ' + @desc;
END

Exec @ResponseError = sp_OAMethod @Object, 'open', NULL, 'post',
    'http://localhost/<base>/hs/<rootUrl>/', 'false', '<user>', '<password>';
IF @ResponseError <> 0 BEGIN
      EXEC sp_OAGetErrorInfo @Object, @source OUT, @desc OUT
      RETURN '2 ' + @desc;
END

EXEC @ResponseError = sp_OAMethod @Object, 'setRequestHeader', NULL, 'Content-Type', 'application/x-www-form-urlencoded; charset=utf-8';
IF @ResponseError <> 0 BEGIN
      EXEC sp_OAGetErrorInfo @Object, @source OUT, @desc OUT
      RETURN '3 ' + @desc;
END

Exec @ResponseError = sp_OAMethod @Object, 'send', NULL, @postData;
IF @ResponseError <> 0 BEGIN
      EXEC sp_OAGetErrorInfo @Object, @source OUT, @desc OUT
      RETURN '4 ' + @desc;
END

Exec @ResponseError = sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT;
IF @ResponseError <> 0 BEGIN
      EXEC sp_OAGetErrorInfo @Object, @source OUT, @desc OUT
      RETURN '5 ' + @desc;
END

Exec sp_OADestroy @Object;
 
RETURN @ResponseText
 
END

В скрипте необходимо указать свои данные подключения к HTTP сервису: URL, логин и пароль. Параметр функции - строка которую необходимо передать сервису. Возвращает строку полученную от сервиса либо ошибку.


Для проверки можно выполнить следующие команды со своим параметром:
Declare @ResponseText as nvarchar(max);
SET @ResponseText = dbo.HTTPRequest('zzz=yyy');
PRINT(@ResponseText);
 

Функционал тестировался в следующей конфигурации:

Microsoft Windows 2008 R2

Microsoft SQL Server Standard Edition (64-bit)   10.50.6529.0

1С:Предприятие 8.3 (8.3.9.2309)

Управление небольшой фирмой (1.2.3.71)

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Оптовая торговля Розничная торговля WEB-интеграция 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

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

57600 руб.

26.11.2024    6408    4    3    

7

SALE! 15%

WEB-интеграция Программист Бизнес-аналитик 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Оптовая торговля, дистрибуция, логистика ИТ-компания Платные (руб)

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

17280 14688 руб.

20.12.2024    3725    18    2    

20

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь 1С v8.3 1C:Бухгалтерия 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    21503    29    24    

24

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

В расширении реализован механизм интеграции между системой поставщика и Личным кабинетом СДТ. Реализован обмен заказами и реализациями (накладными), предусмотрено отслеживание статусов документов. Расширение предназначено для 1С:УТ 11.4.

35856 руб.

27.11.2024    2006    1    0    

1

Оптовая торговля WEB-интеграция Бюджетный учет Обмен с ГосИС Бухгалтер Пользователь 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Государственные, бюджетные структуры Россия Бухгалтерский учет Управленческий учет Платные (руб)

Обмен данными с "Порталом поставщиков" zakupki.mos.ru Москвы и Московской области с целью создания оферт для закупок государственными учреждениями. Модуль устраняет рутину, минимизирует ошибки и помогает выигрывать больше закупок. Работает строго по требованиям 44-ФЗ.

14400 руб.

13.12.2016    41124    54    39    

37
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. user-z99999 76 26.12.19 11:45 Сейчас в теме
sp_configure 'show advanced options', 1 
GO 
RECONFIGURE; 
GO 
sp_configure 'Ole Automation Procedures', 1 
GO 
RECONFIGURE; 
GO 
sp_configure 'show advanced options', 1 
GO 
RECONFIGURE;
GO 

Declare @ResponseText as nvarchar(max);
SET @ResponseText = dbo.HTTPRequest('zzz=yyy');
PRINT(@ResponseText);

Declare @ResponseText as nvarchar(max);
SET @ResponseText = dbo.HTTPRequest('СистемнаяИнформация = Новый СистемнаяИнформация; Результат = СистемнаяИнформация.ВерсияПриложения;');
PRINT(@ResponseText);
Показать


Ловлю
<!DO CTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<ht ml><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access this resource.</p>
</body></html>

что нужно сделать?
2. user-z99999 76 26.12.19 11:58 Сейчас в теме
(1)
В методе указать строку подключения, пароль и логин желательно английскими буквами
Exec @ResponseError = sp_OAMethod @Object, 'open', NULL, 'post',
    'http://localhost/<base>/hs/<rootUrl>/', 'false', '<user>', '<password>';
3. script 128 29.12.19 02:40 Сейчас в теме
Здравствуйте. Ну а хотя бы один практический пример из жизни можно?
4. par_62 30.12.19 18:51 Сейчас в теме
Пример из жизни.
Внешнее устройство добавляет записи в таблицу Sql. Необходимо отловить это событие и запросить из 1с данные. Данные легко получаются через ODBC. Постоянно делать запросы в фоновом задании накладно. Интересует только момент изменения.
vvic; acanta; +2 Ответить
5. yermak 51 12.08.24 10:27 Сейчас в теме
Этот подход очень не Ок, особенно если будет много добавлений в таблицу
6. vvic 08.08.25 07:17 Сейчас в теме
(5) Подскажите пожалуйста другой вариант реализации подобной задачи, если необходимо чтобы данные введенные в SQL таблицу legacy приложением необходимо получить в 1С в тот же момент?
Для отправки сообщения требуется регистрация/авторизация