HOWTO: создание и отладка HTTP-сервиса в 1С:Предприятие

25.07.16

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

Статья о том, как можно быстро создать HTTP-сервис в 1С:Предприятие и как выполнять его отладку.

Начнем с конца: что в итоге должно получиться...

Создание HTTP-сервиса.

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

Выглядеть он должен следующим образом: http://localhost/base/hs/info?action=getusers

Возвращать должен строку JSON (массив объектов JSON со свойствами: имя пользователя, id пользователя):

[
 { "name": "Администратор", "id": "563e7509-83bb-11e5-80c3-00505601174a" },
 { "name": "Гость", "id": "423a9d3d-88fc-11e5-80c3-00505601174a" } 
]

Чтобы это реализовать, создадим в конфигурации (или в расширении) объект HTTP-сервис. Как он будет называться – неважно, для простоты назовем его «Инфо». Корневой URL должен быть равен «info».

HTTP-service creation

Далее добавим к нему шаблон URL, для простоты назовем его «Основной». Значение шаблона должно быть равно «/*».

Шаблоны URL

К шаблону мы добавим метод GET: имя = «GET», HTTP-метод = «GET».

Method adding

Примечание. Имя метода рекомендуется назначать по имени HTTP-метода.

Создадим обработчик HTTP-метода GET.

Handle setting

По умолчанию процедура обработчика метода заполнена кодом, возвращающим стандартный успешный HTTP ответ (код 200).

Функция ОсновнойGET(Запрос)
	Ответ = Новый HTTPСервисОтвет(200);
	Возврат Ответ;
КонецФункции

Скорректируем его так, чтобы он возвращал нам список пользователей.

Функция ОсновнойGET(Запрос)
	Ответ = Новый HTTPСервисОтвет(200);
	Если НРЕГ(Запрос.ПараметрыЗапроса.Получить("action")) = "getusers" Тогда
		Ответ.УстановитьТелоИзСтроки(ВернутьСписокПользователей());
	КонецЕсли;
	Возврат Ответ;
КонецФункции 

Функция ВернутьСписокПользователей()
	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	Пользователи.Ссылка
	|ИЗ
	|	Справочник.Пользователи КАК Пользователи
	|ГДЕ
	|	Пользователи.Недействителен = ЛОЖЬ";
	Выборка = Запрос.Выполнить().Выбрать();
	ОтветМассив = Новый Массив;
	Пока Выборка.Следующий() Цикл
		ОтветМассив.Добавить(Новый Структура("name,id",Выборка.Ссылка.Наименование,""+Выборка.Ссылка.УникальныйИдентификатор()));
	КонецЦикла;
	
	Ответ = Новый ЗаписьJSON;
	Ответ.УстановитьСтроку();
	ЗаписатьJSON(Ответ,ОтветМассив); // сериализует ОтветМассив в формат JSON
	Возврат Ответ.Закрыть();
КонецФункции

Проверяем результат:

Result

Отладка HTTP-сервиса.

Настройка подключения отладчика.

Для отладки HTTP-сервиса нужно включить (или убедиться в том, что включено) следующие флажки.

  1. Разрешить отладку HTTP-сервисов в меню публикации 1С:Предприятие (Конфигуратор / Администрирование / Публикация на веб сервере…).
    Включение отладки
    Адрес отладчика – адрес компьютера, где мы будем запускать конфигуратор (обратите внимание на синтаксис: «tcp://<адрес отладчика>»).
  2. Включить автоматическое подключение к HTTP-сервисам на сервере (Конфигуратор / Отладка / Подключение…).
    Set up autoconnection
    Set up autoconnection 2

Проверим, как это все работает.

Поставим точку останова в начале функции метода GET:

Breakpoint

Обновляем страничку с вызовом нашего сервиса.

Site open

Убеждаемся, что наш отладчик успешно подключился к сеансу HTTP-сервиса:

Check breakpoint catch

Check value of variables

Заключение.

В этой статье рассмотрен простейший пример для быстрого создания HTTP-сервиса с целью освоения механизмов работы с ним.

В заключении хотелось бы упомянуть про возможность создания HTTP-сервисов с параметрами URL, например:

Parts of link description 

Эта возможность настраивается в ШаблонеURL HTTP-сервиса.

Для вышеуказанного примера шаблон мог бы выглядеть так: «/users/{idПользователя}/*» или так «/{Раздел}/{id}/*».

Another template example

В функции обработчика метода этого шаблона параметры URL можно получить через свойство Запрос.ПараметрыURL, например так:

Запрос.ПараметрыURL[«idПользователя»]

Example for template params

Обратите внимание на последовательность обработки шаблонов HTTP­-сервиса.

В нашем примере использованы 2 шаблона:

  1. /*
  2. /users/{idПользователя}/*

При вызове метода http://10.211.55.3/base/hs/info/users/0b3dcecf-104e-11e6-9bdd-001c42ecfab6?action=disable сработает шаблон 1, т.к. параметры URL ему также соответствуют, а обрабатывается он первым. Чтобы этого не происходило, первый шаблон рекомендуется изменить на «/i/*» для однозначного соответствия URL шаблону.

Вызывать первый метод соответственно также придется с новым URL:

Check new template 

HTTP-сервис RESTful

См. также

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

Интеграция 1С и Битрикс 24. Разработка имеет двухстороннюю синхронизацию 1С и Bitrix24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    18977    10    16    

17

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

Подсистема интеграции Amo CRM с 1С: технические требования, порядок работы, возможности, доработки и обновления. Бесплатный период техподдержки - 1 месяц.

60000 руб.

07.05.2019    31839    62    40    

23

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

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

36000 руб.

03.08.2020    16714    15    19    

15

WEB-интеграция Программист Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Внешняя обработка разрабатывалась для загрузки документов из Ветменеджер в 1С: Бухгалтерия 3.0

12000 руб.

02.02.2021    16987    45    49    

26

WEB-интеграция 8.3.8 Конфигурации 1cv8 Автомобили, автосервисы Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Расширение предназначено для конфигурации "1С:Предприятие 8. Управление Автотранспортом. ПРОФ". Функционал модуля: 1. Заполнение регистров сведений по подсистеме "Мониторинг", а именно: события по мониторингу, координаты по мониторингу, пробег и расход по мониторингу, текущее местоположение ТС по мониторингу 2. Заполнение путевого листа: пробег по мониторингу, время выезда/заезда, табличная часть ГСМ, места стоянок по геозонам. 3. Отчеты по данным загруженным в регистры сведений. 4. Предусмотрена автоматическая загрузка данных в фоновом режиме (условия работы данной загрузке читайте в описании товара) Модуль работает без включенной константы по настройкам мониторинга. Модуль формы предоставляется с открытым кодом, общий модуль защищен. Любой заинтересованный пользователь, имеет возможность скачать демо-версию расширения.

22656 руб.

25.05.2021    13354    36    8    

15
Отзывы
17. unpete 576 07.09.16 19:45 Сейчас в теме
(16)
btoa(escape('Администратор') + ":" + 'password')
Наверное, имелось в виду btoa(unescape(encodeURIComponent(('Администратор') + ":" + 'password')))

Вариант btoa(escape... сделает негодную строку для символов с кодами > 127
tanegorova; zarucheisky; serg_infostart; +3 Ответить
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ZOMI 455 26.07.16 00:11 Сейчас в теме
Значительная часть статьи украдена отсюда

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


JohnyDeath; RustIG; +2 Ответить
2. Makushimo 160 26.07.16 05:41 Сейчас в теме
(1) ZOMI,
чуть было не плюсанул ))
3. baracuda 2 26.07.16 08:48 Сейчас в теме
4. awk 743 26.07.16 10:23 Сейчас в теме
(1) ZOMI, Прочитал - статьи разные. Список источников конечно указывать хорошо, но это на усмотрении модераторов - плюсанул...
Darkoder; _OLEG; Gendelf; +3 Ответить
5. ZOMI 455 26.07.16 10:32 Сейчас в теме
(4) awk, конечно, разные. Но речь о том что большая часть из другой статьи. И видимо чужой. Так что плюсанули вы плагиатору.
6. starik-2005 3060 26.07.16 11:57 Сейчас в теме
(5) ZOMI, с учетом того, что скопипастена только часть "Заключение", а сама статья весьма уникальна, Ваше мнение несколько странно смотрится.
7. ZOMI 455 26.07.16 12:30 Сейчас в теме
(6) starik-2005,

скопипастена только часть

нет, смотрите внимательнее.

Обычный плагиат.

а сама статья весьма уникальна


да, ну?

http://its.1c.ru/db/metod8dev/content/5756/hdoc
9. starik-2005 3060 26.07.16 20:11 Сейчас в теме
(7) ZOMI, здесь Вы противоречите своему первому посту, где сказали, что значительная часть статьи на кодерлайне, и якобы автор ее скопипастил оттуда, а на то, что с кодерлайна только заключение, Вы сцылку на 1С-ный сайт даете...

А с другой стороны, чем больше о веб-сервисах напишут, тем лучше жить, а то меня убивают люди, которые увидев код создания объявления и прокси, начинают грызть ногти и выдавать реплики о том, что первый раз такое видят.
_OLEG; chemezov; Irwin; Gendelf; TreeDogNight; h00k; serg_infostart; awk; +8 Ответить
13. tormozit 7191 28.07.16 09:33 Сейчас в теме
(9) На кодерлайне 3 статьи, которые склеены здесь в одну. В сумме скопировано на вскидку около 80%.
14. serg_infostart 388 28.07.16 14:06 Сейчас в теме
(13) если б она была первоисточником, то указал бы... А поскольку первоисточником является именно эта статья, правда опубликованная несколько позже той, то указывать не буду. Да по факту, это одна и та же статья, только в разных форматах - там она разбита на несколько частей, может чуть порезана. Мне кажется, что там она не удобна для чтения и переваривания. Тут лучше. Имхо.

(all) а по существу нет никаких замечаний, пожеланий, дополнений?
11. Zhilyakovdr 142 27.07.16 09:14 Сейчас в теме
(7) ZOMI, Не у всех и не везде есть доступ к ИТС, поэтому даже тупой копипаст бывает полезен.
_OLEG; user717534; CratosX; Videon5; +4 Ответить
8. serg_infostart 388 26.07.16 17:05 Сейчас в теме
(1) ZOMI,
это оригинал... можете не сомневаться. Надеюсь, что автор статьи по ссылке это подтвердит. Так что плюсуйте, не стесняйтесь.
Так получилось, что он разместил ее там, слегка разбив на разделы. А я разместил ее здесь (как есть).
_OLEG; Gendelf; JohnyDeath; ZOMI; +4 Ответить
10. ZOMI 455 26.07.16 22:50 Сейчас в теме
(8)
Надеюсь, что автор статьи по ссылке это подтвердит.


Да, это необходимо для таких скептиков как я.

(9) starik-2005,

ссылку на статью с ИТС я даю к замечанию об "уникальности" статьи. По мне так итс-ная статья более годная.
12. tormozit 7191 27.07.16 22:23 Сейчас в теме
Согласен с мнением, что высок уровень копирования другой статьи. Поэтому тоже считаю, что стоит указать на нее ссылку.
15. serko8547 111 26.08.16 17:17 Сейчас в теме
Ув. Автор, прошу Вас поделиться опытом:
Я начал использовать http-сервисами недавно, и напоролся на такую проблему: Если в 1с завести пользователя - то мне ответ на любой Get или post запрос приходит Ошибка 401 (не авторизован). Как быть?
Был бы Вам очень благодарен, если Вы подскажете, как решить сию проблему )

авторизация в смысле запросом логина-пароли - программно, т.е. я не ручками ввожу логин-пароль, а как мне авторизоваться программно.
16. serg_infostart 388 28.08.16 23:06 Сейчас в теме
(15) serko8547, нужно передать авторизацию.
xhr.setRequestHeader('Authorization',"Basic " + btoa(escape('Администратор') + ":" + 'password'));
17. unpete 576 07.09.16 19:45 Сейчас в теме
(16)
btoa(escape('Администратор') + ":" + 'password')
Наверное, имелось в виду btoa(unescape(encodeURIComponent(('Администратор') + ":" + 'password')))

Вариант btoa(escape... сделает негодную строку для символов с кодами > 127
tanegorova; zarucheisky; serg_infostart; +3 Ответить
18. serg_infostart 388 08.09.16 11:33 Сейчас в теме
Оставьте свое сообщение