Универсальный HTTP-сервис в стиле удаленного вызова процедур (RPC)

19.02.24

Разработка - Инструментарий разработчика

Представленная конфигурация 1С имеет в своем составе две подсистемы: "HTTP-Сервер", "HTTP-Клиент" . Подсистема "HTTP-Сервер" предназначена для реализации функционала HTTP-сервиса в стиле удаленного вызова процедур (RPC). Подсистема "HTTP-Клиент" предназначена для работы с этим HTTP-сервисом. Указанные две подсистемы позволяют упростить реализацию методов (функций) публикуемых на HTTP-сервисе и их вызов на клиенте. Программист освобождается от необходимости преобразовывать данные в/из JSON/XML – программист работает с методами HTTP-сервиса на клиенте почти как с обычными функциями. Главной особенностью механизма является возможность передавать между HTTP-сервисом и HTTP-клиентом объекты информационной базы в качестве параметров и результата при выполнении методов, в том числе с отличиями в реквизитах как по типу так и составу.

Скачать исходный код

Наименование Файл Версия Размер
Универсальный HTTP-сервис в стиле удаленного вызова процедур (RPC):
.rar 11,36Mb
4
.rar 11,36Mb 4 Скачать

Универсальный HTTP-сервис в стиле удаленного вызова процедур (RPC)

Представленная конфигурация 1С имеет в своем составе две подсистемы: <HTTP-сервер>, <HTTP-клиент>. Каждая из подсистем предназначена для внедрения в целевые конфигурации. Подсистема <HTTP-сервер> предназначена для реализации функционала HTTP-сервиса в стиле удаленного вызова процедур (RPC). Соответственно, подсистема <HTTP-клиент> предназначена для работы с этим HTTP-сервисом. Указанные две подсистемы позволяют упростить реализацию методов (функций) публикуемых на HTTP-сервисе и их вызов на клиенте. Подсистема <HTTP-сервер> упрощает создание непосредственно самого HTTP-сервиса и его методов (функций общих модулей, которые публикуются на HTTP-сервисе). Подсистема <HTTP-клиент> упрощает вызов на клиенте методов опубликованных на HTTP-сервисе. Т.е. программист освобождается от необходимости преобразовывать данные в/из JSON/XML – программист работает с методами HTTP-сервиса на клиенте почти как с обычными функциями. Главной особенностью механизма является возможность передавать между HTTP-сервисом и HTTP-клиентом объекты информационной базы (например: «СправочникОбъект.Сотр….», «ДокументОбъект.ПриемНаРа…», «Массив» и т.п., т.е. любой сериализуемый объект информационной базы) в качестве параметров и результата при выполнении методов, в том числе с отличиями в реквизитах как по типу так и составу (//infostart.ru/1c/articles/1899801/).

Разработка и отладка производились на технологической платформе «1С Предприятие» 8.3.10.2699.

Пример публикации метода (функции общего модуля) на HTTP-сервисе.

 

 

Пример вызова метода HTTP-сервиса на HTTP-клиенте.

 

 

Пример внедрения в целевые конфигурации подсистем и их использование на сквозном примере.

В файле «1Cv8_ExampleAccountSystem_(Исходный)_20240209_1414.dt» находится небольшая демонстрационная информационная база учета персонала.

Создадим на основании вышеуказанной информационной базы две информационные базы:

«ExampleAccountSystem_S» - информационная база, которая будут содержать в себе HTTP-сервис.

«ExampleAccountSystem_C» - информационная база, которая будет клиентом HTTP-сервиса.

Изменим имена конфигураций.

 

 

 

Добавим в информационную базу «ExampleAccountSystem_S» подсистему «HTTPСервер».

 

 

 

 

 

 

Установим права на элементы конфигурации вновь добавленной подсистемы.

Для этого установим фильтр по подсистеме <HTTPСервер>.

 

 

Установим на все элементы подсистемы <HTTPСервер> полные права. Не забудьте установить права, в том числе, на саму подсистему <HTTPСервер>.

 

 

Установим для подсистемы <HTTPСервер> признак включения в командный интерфейс.

 

 

Изменим HTTP-сервис. Зададим новое имя, синоним и корневой URL.

 

 

Заведем пользователя для доступа к HTTP-сервису.

 

 

 

Опубликуем HTTP-сервис на сервере.

Для этого заходим на сервер, где установлен IIS. Запускаем 1С от имени администратора.

 

 

 

 

 

 

 

 

Запустим IIS менеджер для настройки SSL.

 

 

 

HTTP-сервис опубликован!

Добавим в информационную базу «ExampleAccountSystem_C» подсистему «HTTPКлиент».

 

 

 

 

 

 

Установим права на элементы конфигурации вновь добавленной подсистемы.

Для этого установим фильтр по подсистеме <HTTPКлиент>.

 

 

Установим на все элементы подсистемы <HTTPКлиент> полные права. Не забудьте установить права, в том числе, на саму подсистему <HTTPКлиент>.

 

 

Установим для подсистемы <HTTPСервер> признак включения в командный интерфейс.

 

 

Запустим информационную базу <ExampleAccountSystem_C> в пользовательском режиме.

Выполним настройки для доступа к созданному нами HTTP-сервису (информационная база <ExampleAccountSystem_S>).

Создадим в справочнике <Системы> новый элемент справочника, который будет содержать информацию о текущей информационной системе. Вся необходимая информация заполняется по кнопке <Заполнить> командной панели формы элемента.

 

 

Лист <Модель данных> заполняется данными модели (конфигурации) текущей информационной системы в формате Xml.

 

 

Результат записи элемента справочника <Системы>.

 

 

Необходимо заполнить также константу <Эта система> значением только что созданного элемента справочника <Системы>.

 

 

 

После сохранения значения константы откроем справочник <Системы>. Теперь элемент справочника который мы определили как <Эта система> отмечен «галочкой».

 

 

Далее создаем в справочнике <Внешние HTTP-сервисы> запись с информацией необходимой для установки соединения с HTTP-сервисом.

 

 

Результат записи элемента справочника <Внешние HTTP-сервисы>.

 

 

Далее необходимо создать настройку для внешнего HTTP-сервиса. Настройка связывает внешний HTTP-сервис (элемент справочника <Внешние HTTP-сервисы>) с информацией о текущей системе (элемент справочника <Системы>), информацией о системе HTTP-сервиса (элемент справочника <Системы>), и профилем (элемент справочника <Профили>).

 

 

Далее необходимо зарегистрировать систему-клиент (см. реквизит <Внешняя система>) на HTTP-сервисе. Для этого выбираем в реквизит <Эта система> только что созданный элемент справочника <Example account system client> и нажимаем кнопку <Зарегистрировать>.

 

 

Если регистрация прошла успешно, то будет выдано сообщение.

 

 

Откроем и посмотрим информацию о системе после регистрации. Обратите внимание на реквизит <Регистрация (сервер)>. Значение этого реквизита показывает, когда была проведена регистрация текущей системы на HTTP-сервисе. Теперь HTTP-сервис знает о клиенте, в том числе о модели данных клиента. Это необходимо HTTP-сервису для сериализации/десериализации объектных значений между HTTP-клиентом и HTTP-сервером.

 

 

Перейдем в информационную базу HTTP-сервера. Откроем справочник <Системы>. В этом справочнике мы увидим такой же элемент, как и в информационной базе HTTP-клиента. Элемент справочника был записан в информационную базу HTTP-сервера при регистрации (кнопка <Зарегистрировать> в базе HTTP-клиента).

 

 

Создадим в справочнике <Системы> еще один элемент, который будет описывать учетную систему HTTP-сервера.

 

 

Установим этот элемент как значение константы <ЭтаСистема>.

 

 

 

Далее в информационной базе HTTP-сервера необходимо в справочнике <Профили> создать профиль для HTTP-клиента. Открываем справочник <Профили> и создаем новый элемент. На листе <Основная> задаем имя профиля и пароль.

 

 

На листе <Создан, изменен, восстановлен> необходимо ОБЯЗАТЕЛЬНО занести дату окончания регистрации. Если не указать эту дату, то профиль будет считаться не активным.

 

 

Записываем созданный профиль. При записи профиля необходимо будет подтвердить заданный пароль еще раз.

 

 

 

Переходим в информационную базу HTTP-клиента.

Получим на клиенте описание системы HTTP-сервиса. Для этого нажимаем кнопку <Получить> расположенную рядом с реквизитом <Внешняя система>.

 

 

Если процесс получения информации от внешней системы прошел успешно, то будет выдано сообщение и реквизит <Внешняя система> будет заполнен.

 

 

Теперь нужно получить только что созданный профиль с HTTP-сервера.

Нажимаем кнопку <Получить>, расположенную рядом с реквизитом <Профиль>.

 

 

Если все успешно, то будет выдано сообщение и в справочнике <Профили> будет создан/изменен элемент справочника полученный с HTTP-сервера. При этом реквизит <Профиль> в настройке внешнего HTTP-сервиса будет заполнен этим элементом.

 

 

Сохраним настройку. Подготовительные действия все выполнены.

Не забываем включить настройку и указать ее по умолчанию !!!

 

 

Переходим в информационную базу HTTP-сервера. Создадим в этой базе общий модуль, в который будем добавлять функции доступные для выполнения HTTP-клиенту.

Добавим в общий модуль самую простую функцию, которая будем возвращать нам количество сотрудников справочника <Сотрудники> информационной базы HTTP-сервера.

 

 

Общий модуль серверный. Добавим в него функцию <ПолучитьКоличество>. Функция будет нам возвращать количество элементов справочника <Сотрудники>. Функция должна быть экспортной. Для публикации функции <ПолучитьКоличество> в наш HTTP-сервис (<Personnel>) добавим функцию <РазрешенВызовИзHTTPСервиса>. Функцию с именем <РазрешенВызовИзHTTPСервиса> нужно добавлять в каждый общий модуль если планируется функции этого общего модуля публиковать на HTTP-сервисе. Основное назначение этой функции – проверить наличие токена, имени HTTP-сервиса и имени метода (имени функции). И на основании этих параметров сделать вывод возможен вызов функции общего модуля или нет. Функция должна вернуть <Истина> или <Ложь>. Соответственно <Истина> - вызов функции общего модуля разрешен, <Ложь> - запрещен.

Переходим в информационную базу HTTP-клиента. Проверим вызов метода HTTP-сервиса с клиента.

Запускаем на HTTP-клиенте обработку <Выполнить метод HTTP-сервиса>.

 

 

В обработке выбираем настройку внешнего HTTP-сервиса. Заносим версию, имя общего модуля и имя метода, который мы будем выполнять на HTTP-сервисе.

 

 

Нажимаем кнопку <Выполнить> и получаем результат выполнения метода на HTTP-сервисе.

 

 

На HTTP-клиенте на языке 1С вызов метода HTTP-сервиса выглядит вот так:

 

 

Добавим еще одну функцию на стороне HTTP-сервера. Функция <ПолучитьФИОПоТабельному> будет нам возвращать ФИО сотрудника по табельному номеру. Не забываем сделать эту функцию экспортной. Добавим публикацию этой функции в функцию <РазрешенВызовИзHTTPСервиса>.

 

 

Переходим в информационную базу HTTP-клиента. Проверим вызов метода HTTP-сервиса с клиента.

Запускаем на HTTP-клиенте обработку <Выполнить метод HTTP-сервиса>. В обработке выбираем настройку внешнего HTTP-сервиса. Заносим версию, имя общего модуля и имя метода, который мы будем выполнять на HTTP-сервисе. Добавляем строковый параметр, в который мы будем задавать табельный номер.

 

 

Нажимаем кнопку <Выполнить> и получаем результат выполнения метода на HTTP-сервисе.

 

 

На HTTP-клиенте на языке 1С вызов метода HTTP-сервиса выглядит вот так:

 

 

Усложним задачу. До текущего момента мы передавали на HTTP-сервис в виде параметров и получали как результат выполнения только значения простых типов. Но основное назначение, ради чего создавался данный механизм, это возможность передавать в качестве параметров и получать в качестве результата объектные данные.

В механизме используется моя разработка:

//infostart.ru/1c/articles/1899801/

Добавим в HTTP-сервис функцию которая будет возвращать <СправочникОбъект.Сотрудники> по заданному табельному номеру. Добавим публикацию этой функции в функцию <РазрешенВызовИзHTTPСервиса>.

 

 

Переходим в информационную базу HTTP-клиента. Проверим вызов метода HTTP-сервиса с клиента.

Запускаем на HTTP-клиенте обработку <Выполнить метод HTTP-сервиса>. В обработке выбираем настройку внешнего HTTP-сервиса. Заносим версию, имя общего модуля и имя метода, который мы будем выполнять на HTTP-сервисе. Добавляем строковый параметр, в который мы будем задавать табельный номер.

 

 

Нажимаем кнопку <Выполнить> и получаем результат выполнения метода на HTTP-сервисе.

 

 

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

 

 

Усложним задачу. Реализуем в информационной базе HTTP-клиент обновление списка сотрудников данными из информационной базы HTTP-сервер. Для этого в информационной базе HTTP-сервера реализуем в общем модуле функцию <ПолучитьВсехСотрудников>.

 

 

Проверим ее работу на HTTP-клиенте.

 

 

Нажимаем кнопку <Выполнить> и получаем результат выполнения метода на HTTP-сервисе.

 

 

Посмотрим на значение результата выполнения метода в отладчике. В отладчике видим, что мы получили на клиенте HTTP-сервиса массив объектов <СправочникОбъект.Сотрудники>.

 

 

Реализуем в информационной базе HTTP-клиент обновление списка сотрудников данными из информационной базы HTTP-сервер по кнопке <Обновить с сервера>.

 

 

 

Запускаем HTTP-клиента и открываем справочник <Сотрудники>.

 

 

Для проверки получения данных с HTTP-сервера удалим один элемент в справочнике <Сотрудники> и в одном из элементов удалим место рождения. Удаляем элемент - <Трудный Владимир Сергеевич>. В элементе <Непомнящий Олег Владимирович> удаляем место рождения.

 

 

Нажимаем кнопку <Обновить с HTTP-сервера>. Видим, что появился сотрудник <Трудный Владимир Сергеевич>, и в элементе <Непомнящий Олег Владимирович> появилась информация о месте рождения.

 

 

Еще усложним задачу. Сделаем справочник <Сотрудники> различным по структуре на сервере и клиенте. Для этого на сервере в справочник добавим реквизит <АдресМестаЖительства>.

 

 

Выведем реквизит на форму

 

 

 

Перейдем на HTTP-клиент.

Для проверки получения данных с HTTP-сервера удалим один элемент в справочнике <Сотрудники> и в одном из элементов удалим место рождения. Удаляем элемент - <Трудный Владимир Сергеевич>. В элементе <Непомнящий Олег Владимирович> удаляем место рождения.

 

 

Нажимаем кнопку <Обновить с HTTP-сервера>. Видим, что появился сотрудник <Трудный Владимир Сергеевич>, и в элемент <Непомнящий Олег Владимирович> появилась информация о месте рождения.

 

 

Т.е. объекты с отличиями в сервере и клиенте также можно успешно использовать при обмене.

The End.

HTTP-сервис HTTP-клиент Сериализация Десериализация Интеграция мобильное приложение

См. также

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    127288    688    389    

740

Infostart PrintWizard - создание и редактирование печатных форм в 1С 8.3

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

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

18000 руб.

06.10.2023    8440    25    6    

46

Infostart УДиФ: Управление данными и формами 1С

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

10000 руб.

10.11.2023    4765    12    2    

38

SALE! %

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

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

3600 2280 руб.

14.01.2013    178972    1086    0    

863

Бустер Конвертации данных 3 (Infostart Toolkit)

Инструментарий разработчика 8.3.14 1С:Конвертация данных Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

15000 руб.

07.10.2021    15130    3    12    

38

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99947    239    97    

298

1С HTML Шаблоны / HTML Templates

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28438    4    10    

16

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18536    6    8    

40
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Константин С. 668 19.02.24 17:33 Сейчас в теме
Поставлю "+", кто дочитал до конца :)
TerveRus; magv; aleksey2; +3 Ответить
2. UPKA 20.02.24 08:11 Сейчас в теме
(1) Пролистал до конца))
TerveRus; JetBrain; so-quest; dsdred; webester; kupala; dnikolaev; SxF; sergpogo; Serega-artem; Константин С.; +11 Ответить
4. aleksey2 86 20.02.24 10:10 Сейчас в теме
(1) а что там в конце свадьба?
TerveRus; +1 Ответить
6. Nikola23 698 20.02.24 12:38 Сейчас в теме
(1) я не дочитал, но докрутил.
Я тоже молодец и мне нужен плюс!)
dsdred; dnikolaev; SxF; Константин С.; +4 Ответить
3. user706545_kseg1971 131 20.02.24 08:21 Сейчас в теме
Все что описано в сквозном примере, есть в архиве для скачивания. Пример приводится для того чтобы тот кто захочет скачать разработку смог максимально оценить насколько ему это нужно.
7. Константин С. 668 20.02.24 12:45 Сейчас в теме
(3) просто данную информации можно было сжать без потери качества, тут крайне избыточная детализация. Т.ч. картинки очень "большие", из-за этого мелко и много "пустого места". Пример "обрезанной" картинки приложил.

А по разработке:
а) 8.3.10.2699 - уже можно сказать устаревшая
б) в таких разработках очень классно применяются расширения, что позволяет "безболезнно" использовать на типовых конфах.
в) процедуры по обработке событий можно вынести в справочник
г) а если потерялась связь типа данные отправились но не принялись... как это отследить?
Прикрепленные файлы:
5. Nikola23 698 20.02.24 12:37 Сейчас в теме
Автор, оформите свертываемые группы для инструкций. Многие знают как устанавливать расширения и публиковать базы.

Текст большой - разбейте на части, добавьте оглавление.
Пишу только за себя - прочитал первые абзацы, а после инструкций - увидел размер статьи и не стал погружаться дальше... крутит этот листинг в поиске нужного для себя без оглавления - достаточно долго же.
kalyaka; magv; webester; Serega-artem; +4 Ответить
8. webester 26 26.02.24 10:43 Сейчас в теме
(5)Тоже устал пытаться вытащить суть, тоже не понял, зачем в статье про формализацию данных инструкция про публикацию. Не до конца понял, что происходит, но кажется автор придумал soap.
9. JetBrain 78 06.03.24 08:32 Сейчас в теме
есть wsdl, а какую проблему решает данная статья?
Оставьте свое сообщение