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

См. также

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

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

12000 руб.

02.09.2020    171623    960    403    

924

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

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

8400 руб.

20.08.2024    14217    108    46    

107

Инструментарий разработчика Программист Платформа 1С v8.3 1C:Бухгалтерия Платные (руб)

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

9360 руб.

17.05.2024    27222    96    48    

137

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

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

22200 руб.

06.10.2023    17239    43    15    

75

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

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

15000 руб.

10.11.2023    11881    45    27    

67

SALE! %

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

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

4800 3840 руб.

14.01.2013    191140    1152    0    

920

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

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    1108    2    0    

5

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

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

5000 руб.

07.02.2018    104108    244    100    

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

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

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