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

См. также

Интеграция Альфа Авто 5 / Альфа Авто 6 и AUTOCRM / Инфотек

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

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

36000 руб.

03.08.2020    15963    13    18    

13

SALE! 10%

Автоматическая загрузка файлов (например, прайс-листов) из электронной почты, FTP, HTTP, их обработка и выгрузка на FTP (на сайт) и для других целей

Прайсы WEB-интеграция Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Автомобили, автосервисы Оптовая торговля, дистрибуция, логистика Управленческий учет Платные (руб)

Программа с заданным интервалом времени (или по ручной команде) скачивает файлы (например, прайс-листы поставщиков) из различных источников: письма электронной почты, FTP или HTTP-адреса, и сохраняет их в каталог упорядоченной структуры. При этом извлекает файлы из архивов, может переименовывать файлы и менять их формат (csv, xls, txt). Можно настроить выгрузку обработанных файлов на сайт (через FTP-подключение). Программа будет полезна компаниям, у которых есть большое количество поставщиков и/или прайс-листы поставщиков обновляются часто (необязательно прайс-листы, файлы могут быть любого назначения). Собранные таким образом актуальные версии прайс-листов можно выгрузить с помощью программы себе на сайт (или на любой FTP-сервер) или выполнить другие необходимые задачи.

28000 25200 руб.

28.05.2015    84921    28    51    

50

Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС

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

Обработка является альтернативой механизму, разработанному фирмой 1С и заполняющему реквизиты контрагента по ИНН или наименованию. Не требуется действующей подписки ИТС. Вызывается как внешняя дополнительная обработка, т.е. используется, непосредственно, из карточки контрагента. Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС (egrul.nalog.ru) для БП 2.0, БП 3.0, БГУ 1.0, БГУ 2.0, УТ 10.3, УТ 11.x, КА 1.1, КА 2.x, УПП 1.x, ERP 2.x, УНФ 1.5, УНФ 1.6, УНФ 3.0, ДО 2.1

2400 руб.

28.04.2016    89050    163    216    

319

[Расширение] БОР-Навигатор.Культура

Зарплата Бюджетный учет WEB-интеграция Обмен с ГосИС Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бюджетный учет Платные (руб)

Расширение конфигурации, включающее в себя объекты, необходимые для подготовки и сдачи отчета "Штатная численность" системы "БОР-Навигатор.Культура" в программе "1С:Зарплата и кадры государственного учреждения", редакция 3.1.

8400 руб.

01.02.2019    25897    9    0    

7

Интеграция с сервисом vetmanager

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

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

12000 руб.

02.02.2021    16501    42    49    

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

Вариант btoa(escape... сделает негодную строку для символов с кодами > 127
tanegorova; zarucheisky; serg_infostart; +3 Ответить
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ZOMI 446 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 741 26.07.16 10:23 Сейчас в теме
(1) ZOMI, Прочитал - статьи разные. Список источников конечно указывать хорошо, но это на усмотрении модераторов - плюсанул...
Darkoder; _OLEG; Gendelf; +3 Ответить
5. ZOMI 446 26.07.16 10:32 Сейчас в теме
(4) awk, конечно, разные. Но речь о том что большая часть из другой статьи. И видимо чужой. Так что плюсанули вы плагиатору.
6. starik-2005 3038 26.07.16 11:57 Сейчас в теме
(5) ZOMI, с учетом того, что скопипастена только часть "Заключение", а сама статья весьма уникальна, Ваше мнение несколько странно смотрится.
7. ZOMI 446 26.07.16 12:30 Сейчас в теме
(6) starik-2005,

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

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

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

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


да, ну?

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

А с другой стороны, чем больше о веб-сервисах напишут, тем лучше жить, а то меня убивают люди, которые увидев код создания объявления и прокси, начинают грызть ногти и выдавать реплики о том, что первый раз такое видят.
_OLEG; chemezov; Irwin; Gendelf; TreeDogNight; h00k; serg_infostart; awk; +8 Ответить
13. tormozit 7143 28.07.16 09:33 Сейчас в теме
(9) На кодерлайне 3 статьи, которые склеены здесь в одну. В сумме скопировано на вскидку около 80%.
14. serg_infostart 387 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 387 26.07.16 17:05 Сейчас в теме
(1) ZOMI,
это оригинал... можете не сомневаться. Надеюсь, что автор статьи по ссылке это подтвердит. Так что плюсуйте, не стесняйтесь.
Так получилось, что он разместил ее там, слегка разбив на разделы. А я разместил ее здесь (как есть).
_OLEG; Gendelf; JohnyDeath; ZOMI; +4 Ответить
10. ZOMI 446 26.07.16 22:50 Сейчас в теме
(8)
Надеюсь, что автор статьи по ссылке это подтвердит.


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

(9) starik-2005,

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

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

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