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

19.02.24

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Универсальный HTTP-сервис в стиле удаленного вызова процедур (RPC):
.rar 11,36Mb
6
6 Скачать (10 SM) Купить за 4 550 руб.

Универсальный 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-клиент Сериализация Десериализация Интеграция мобильное приложение

См. также

SALE! 15%

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

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

10000 руб.

02.09.2020    159666    875    399    

862

SALE! 15%

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

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя.

8400 7140 руб.

20.08.2024    7869    58    23    

69

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

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

9360 руб.

17.05.2024    23495    68    45    

117

SALE! 15%

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

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

10000 8500 руб.

10.11.2023    10462    36    25    

61

SALE! 15%

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

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

22200 19980 руб.

06.10.2023    15431    35    7    

70

SALE! 35%

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

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

4800 3120 руб.

14.01.2013    188048    1140    0    

912

SALE! 15%

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

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

15000 12750 руб.

07.10.2021    17318    6    32    

42

Инструментарий разработчика Программист Платные (руб)

Менеджер конфигураций 1С — альтернативный стартер информационных баз 1С:Предприятие.

1800 руб.

21.02.2023    7717    8    35    

23
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Константин С. 672 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 88 20.02.24 10:10 Сейчас в теме
(1) а что там в конце свадьба?
TerveRus; +1 Ответить
6. Nikola23 705 20.02.24 12:38 Сейчас в теме
(1) я не дочитал, но докрутил.
Я тоже молодец и мне нужен плюс!)
адуырщдв; dsdred; dnikolaev; SxF; Константин С.; +5 Ответить
3. user706545_kseg1971 135 20.02.24 08:21 Сейчас в теме
Все что описано в сквозном примере, есть в архиве для скачивания. Пример приводится для того чтобы тот кто захочет скачать разработку смог максимально оценить насколько ему это нужно.
7. Константин С. 672 20.02.24 12:45 Сейчас в теме
(3) просто данную информации можно было сжать без потери качества, тут крайне избыточная детализация. Т.ч. картинки очень "большие", из-за этого мелко и много "пустого места". Пример "обрезанной" картинки приложил.

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

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