Как обратиться к http сервису 1с программно
Перейти к содержимому

Как обратиться к http сервису 1с программно

  • автор:

Как обратиться к http сервису 1с программно

Здравствуйте!
Прошу помощи, ни как не получается разобраться самостоятельно.
Суть проблемы:
В конфигурации создал HTTP-сервис, по описано с сайта ИТС. Используя строку браузера получается достучаться до сервиса и получить ответ. Но встал вопрос, как то же самое сделать из другой конфигурации 1С?
Мой код для полного адреса (http://srv-h/rib3/hs/OS)

ИмяВыходногоФайла = ПолучитьИмяВременногоФайла(«html»);
HTTPСоединение = Новый HTTPСоединение(«srv-h»);
АдресРесурса = «rib3/hs/OS»;
HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса);
Результат = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос,ИмяВыходногоФайла);

Не находит он (тут вопрос, кто он?) сервис с именем OS
Имеем в результате ошибку 401. Как же можно обратиться к HTTP-сервису из другой конфигурации 1С?
Помогите пожалуйста.

>Имеем в результате ошибку 401

Но если изменить строку АдресРесурса на «rib3», т.е. без указания конкретного сервиса, получаем 301. Авторизацию значит проходим. Я нигде не нашел примера вызова http-сервиса из кода 1С, подозреваю, что как-то не правильно я указываю путь до сервиса. Ведь собственно если забить строку в браузере все проходит на ура.

HTTP Services URL: обмен между базами 1с с помощью сервиса интерграции — создание и настройка

Бобков Олег

массив клиентов для отправки

На платформе 1C начиная от версии 8.3.5 и выше появилась новая возможность создания сервисов с уникальными HTTP services URL. Подобные системы позволяют не только осуществлять штатные задачи, как отправку, прием и корректировку данных, но и обладают куда более глубокими возможностями. Например, формирование простых, но действенных клиентских приложений. Плюс, что примечательно, общая нагрузка на сам сервер снижается, благодаря уменьшению объема сведений, а также их оптимизации. В результате мы получаем отличный инструмент, позволяющих реализовывать самые непростые задания даже на смартфонах, ведь вычислительная мощность потребуется относительно небольшая.

Шаблон создания HTTP сервиса 1С

В первую очередь нам понадобится сам веб-сервер. Отличным вариантом считается Apache, подходящий версией от 2.2 и выше. Конкретнее про установку мы поговорим дальше в представленным обзоре, пока же по вводным факторам. Для начала создаем сам serves. Вводим произвольное название, фактически роли это не играет. HTTPА вот сам URL – это куда более важная часть. Именно по этому адресу будет доступен корневой каталог, поэтому заранее определите корректное наименование. Шаблоны URL и методыСвойств у только что нами созданного URL немного, а именно одно – шаблон. Это запись, по которой будет доступен путь до serves. Вы можете задавать параметры для сегментирования. То есть, градировать на неопределенное количество внутренних разделов. Выполняется это с помощью следующих настроек. Свойства шаблонаА вот у методов уже есть возможность присвоения множества свойств. Таких, как движение, удаление, блокирование, соединение, получение, путь и так далее. При обращении к системе автоматически будет сопоставлен введенный адрес с имеющимся шаблоном. И если они соответствуют, то в ответ выдается выбранный вами метод. Если же соответствия не произошло, то ответная реакция от HTTP сервиса 1С будет 404, что является кодом ошибки.

Публикация и проверка

публикация на веб-сервере

Завершающим шагом будет отправка нашего созданного шаблона в работу. Но на многих версиях этого не получится сделать, если сама программа не была запущена от имени администратора. Если не получилось опубликовать ваш вариант, просто закройте конфигуратор и откройте снова через щелчок правой кнопки мыши и выбор соответствующей опции. Итак, если мы все сделали верно, то в случае этого примера, он будет доступен по адресу – localhost/HTTPTest/hs/Obmen/test-parametr/Test/GetInfo?param=value. Разберем каждый сегмент этого пути:

  • Localhost – соответственно, сам адрес изначального сервера.
  • HTTPTest – как вы можете наблюдать из скрина, именно такой набор символов мы ввели в названии нашей тестовой публикации.
  • Hs – а вот это важнейшая часть. Это указатель, который дает понятие о том, что происходит именно обращение к 1С HTTP сервису.
  • Obmen – это название корневого каталога, который мы задавали ранее.
  • test-parametr – соответственно, указанный нами изначально метод определения, а точнее, его путь.
  • GetInfo – это уже наименование.
  • param=value – нестрогий вариант параметров.

При выполнении процедуры произойдет следующее.

get параметры

Здесь мы обратились к методу, получили соответствующий ответ. При этом для работы нам в любом случае понадобится авторизация. И решить возникшее затруднение в принципе несложно. Потребуется просто задать новый логин и пароль. А после авторизоваться по введенным опциям. Но есть и другая методика реализации этой функции, если обратиться к 1С HTTP сервис vrd. Мы напрямую можем изменить файл default, добавив в блокнот следующую запись – Usr=Логин; Pwd=Пароль. В результате надобности в авторизации как таковой не будет. И наша публикация будет доступна свободно.

Учимся создавать http-сервисы (часть первая)

  • image-20200913205608-9.png
  • image-20200913205608-1.png
  • image-20200913205608-2.png
  • image-20200913205608-7.png
  • image-20200913205608-10.png
  • image-20200913205608-12.png
  • image-20200913205608-13.png
  • image-20200913205608-14.png
  • image-20200913205608-15.png
  • image-20200913205608-16.png
  • image-20200913205608-3.png
  • image-20200913205608-4.png
  • image-20200913205608-5.png
  • image-20200913205608-17.png
  • image-20200913205608-19.png
  • image-20200913205608-11.png
  • image-20200913205608-18.png
  • image-20200913205608-20.png
  • image-20200913205608-8.png
  • image-20200913205608-6.png
  • image-20200913211132-23.png
  • image-20200913211132-21.png
  • image-20200913211132-22.png
  • 3-1.png
  • image-20200913214340-24.png
  • image-20200913214340-27.png
  • image-20200913214340-25.png
  • image-20200913214340-26.png

Если все нормально, в строке браузера прописываем путь к нашему сервису по определенному правилу и получаем результат работы сервиса.

Выполнение пунктов списка

Подготовка объектов метаданных

Создаем чистую базу данных:

Добавляем в базу данных справочник «Номенклатура»

Добавляем реквизит «Артикул» в справочник «Номенклатура»

Добавим регистр сведений «Штрихкоды»

Добавляем измерение и ресурсы в регистр сведений «Штрихкоды»

Измерение «Штрихкод» тип Строка длина Строки 100, ресурс «Номенклатура» ссылка на справочник «Номенклатура»

Добавляем общий модуль «ОбщегоНазначения»

В общем модуле напишем функцию, которая вернет JSON строку с данными

 Функция ПолучитьНоменклатуру()Экспорт Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Штрихкоды.Штрихкод КАК barcode, | Штрихкоды.Номенклатура.Код КАК cod, | Штрихкоды.Номенклатура.Наименование КАК name, | Штрихкоды.Номенклатура.Артикул КАК articul |ИЗ | РегистрСведений.Штрихкоды КАК Штрихкоды"; Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Массив = Новый Массив; Пока Выборка.Следующий()Цикл Структура = Новый Структура("barcode, cod, name, articul"); ЗаполнитьЗначенияСвойств(Структура, Выборка); Массив.Добавить(Структура); КонецЦикла; ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.УстановитьСтроку(); ЗаписатьJSON(ЗаписьJSON, Массив); СтрокаJSON = ЗаписьJSON.Закрыть(); Возврат СтрокаJSON; КонецФункции 

Обновим конфигурацию базы данных. Запустим программу в режиме «Предприятие». Заполним тестовыми данными справочник «Номенклатура» и регистр сведений «Штрихкоды»

Переходим к следующему пункту

Создание http сервиса

Открываем дерево метаданных ветка «Общие» — «HTTP-сервисы». Позиционируемся на объекте «HTTP-сервисы»

Добавляем новый сервис

Закладка «Основные» поле «Имя». Задаем имя. Имя может быть любым. Желательно чтобы имя сервиса отражало его суть. Закладка «Основные» поле «Корневой URL». Необходимо задать имя корневого url.

Закладка «Шаблоны URL». Добавляем новый шаблон. Задаем ему имя. Имя может быть любым. Желательно, чтобы имя отражало предназначение шаблона.

Закладка «Шаблоны URL». Добавляем новый шаблон. Задаем ему имя. Имя может быть любым. Желательно, чтобы имя отражало предназначение шаблона

В шаблоне добавляем метод. В данном методе будем программный код шаблона.

 Функция ШаблонURL1ПолучитьДанныеПоНоменклатуре(Запрос) Ответ = Новый HTTPСервисОтвет(200); СтрокаJSON = ОбщегоНазначения.ПолучитьНоменклатуру(); Ответ.УстановитьТелоИзСтроки(СтрокаJSON); Возврат Ответ; КонецФункции 

Публикация http сервиса

ВАЖНО, НА ВАШЕМ КОМПЬЮТЕРЕ УЖЕ ДОЛЖЕН БЫТЬ УСТАНОВЛЕН ВЕБ СЕРВЕР (APACHE (2.2 ИЛИ 2.4) ИЛИ ISS)

Запускаем конфигуратор 1С: Предприятия 8 в режиме «Запуск от имени администратора»

Главное меню Администрирование – Публикация на веб-сервере

Закладка «Основные» поле имя. Необходимо задать имя. Имя должно быть сформировано по правилу формирования имен переменных. Имя не должно содержать русских букв.

Закладка «Основные» поле «Каталог». Создаем на жестком диске каталог (например, www) и указываем к нему путь. В данный каталог будет размещена публикация.

Закладка «Основные» — закладка «HTTP сервисы». Устанавливаем флаг около нашего сервиса. Нажимаем кнопку «Опубликовать». Перезапускаем веб сервер.

Проверка работы http сервиса.

Прописываем в строке браузера ip адрес компьютера на котором работает веб сервис (в нашем случае это наша локальная машина)

После этого если веб сервер запущен, мы должны увидеть в браузере соответствующее сообщение.

Если все нормально, в строке браузера прописываем путь к нашему сервису по определенному правилу

Рассмотрим более подробно формирования строки запроса в строке адреса браузера

localhost – ip адрес веб сервера. Если запускаем браузер с той же машины где установлен веб сервер то ip адрес либо localhost либо 127.0.0.1 либо 192.168.XXX.XXX

Таким образом получаем формулу по которой собираем адрес

Ip адрес / имя публикации / hs / корневой каталог / шаблон/

Видео инструкция по созданию http сервиса

См. также

Управление доставками Boxberry, СДЭК, ЭкстраПочта, Почта России, Энергия, DPD, ПЭК, Grastin, Деловые Линии, КСЕ, Dalli

Управление доставками в транспортных компаниях из 1С.

10.03.2016 52470 228 93

54 228 93 52470

Все службы доставки в Вашей 1С! Без изменения конфигурации! УТ, ERP, КА, УНФ

40+ служб доставки для 1С в одном модуле! Внешняя обработка, которая НЕ изменяет Вашу конфигурацию!

22.03.2017 34246 12 46

68 12 46 34246

Интеграция с OpenCart 2.x, 3x

Внешняя обработка, позволяет обмениваться данными между OpenCart (самая популярная бесплатная cms для интернет-магазинов) и 1С:Предприятие 8.

17.11.2015 112750 329 133

206 329 133 112750

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

Обработка является альтернативой механизму, разработанному фирмой 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

28.04.2016 86304 152 211

306 152 211 86304

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

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

02.02.2021 15049 40 45

20 40 45 15049

Sync1C: Синхронизация 1С и OpenCart

Внешняя обработка для обмена данными с интернет-магазином OpenCart. Позволяет быстро наполнить магазин товарами, затем обновлять цены и добавлять новые товары. Далее можно средствами OpenCart настраивать и дополнять карточки товаров как надо для магазина, при этом связь товаров с 1С не теряется.

30.03.2018 42506 80 137

84 80 137 42506

Сервисы 1СПАРК Риски и 1С:Контрагент для «старых» конфигураций

Доступ к сервисам 1СПАРК Риски и 1С:Контрагент в «старых», но широко используемых конфигурациях.

30.01.2019 23600 39 5

28 39 5 23600

Модуль для обмена «1С:Предприятие 8. УАТ. ПРОФ» с FortMonitor

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

25.05.2021 12174 9 4

8 9 4 12174
Посмотреть ещё
Комментарии

  • Дата
  • Дата
  • Рейтинг всех уровней
  • Рейтинг 1-го уровня
  • Древо развёрнутое
  • Древо свернутое

Свернуть все
1. ubnkfl 16.09.20 19:12 Сейчас в теме

У вас на картинке видно, что вместо наименования на русском языке возвращаются крякозябры. Так и должно быть?

2. malikov_pro 1268 16.09.20 20:36 Сейчас в теме
(1) Нет, нужно кодировку уточнить, хотя по умолчанию UTF-8 и тип данных

Ответ.УстановитьТелоИзСтроки(, , ) Ответ.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8")

mikl79; Nikola_N; Lacoste4life; maksa2005; ubnkfl; vitika_m; tony_more; + 7 – Ответить
7. acvatoris 503 16.09.20 23:35 Сейчас в теме
Прикрепленные файлы:
9. acvatoris 503 16.09.20 23:36 Сейчас в теме
Прикрепленные файлы:
3. malikov_pro 1268 16.09.20 20:41 Сейчас в теме

По оформлению скриншоты можно делать clip2net и только нужной части экрана. Код и скриншоты можно под спойлеры убирать, для более удобного чтения.

ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.УстановитьСтроку(); ЗаписатьJSON(ЗаписьJSON, Массив); СтрокаJSON = ЗаписьJSON.Закрыть(); Возврат СтрокаJSON;

обычно в функцию оборачивают

Критика для того чтобы качество статьи было нормально и ссылку на статью можно было клиентам давать.

myoker; tony_more; + 2 – Ответить
5. acvatoris 503 16.09.20 23:02 Сейчас в теме
(3)благодарю за замечания.
4. Steelvan 296 16.09.20 23:01 Сейчас в теме

Без заголовков можно попробовать метатег «charset» в html/head для обозревателя прописать.

html
head
meta charset=»utf-8″

6. Steelvan 296 16.09.20 23:03 Сейчас в теме
Согласен, снимки можно в свертки оборачивать.
8. acvatoris 503 16.09.20 23:35 Сейчас в теме
Нужно было установить кодировку
10. dsdred 2801 17.09.20 09:43 Сейчас в теме

Ожидал чего то другого. Тут про http сервис совсем мало.

А так вот цикл статей HTTP Сервисы: Путь к своему сервису. 1-4 части

MiDoS; Ish_2; eeeio; Drivingblind; ong1990; tony_more; + 6 – Ответить
13. vitika_m 17.09.20 10:27 Сейчас в теме

(10) Интересно, но слишком сложно. Для «чайника» такого как я слишком много информации:)
Но нужно с чего-то начать.

17. dsdred 2801 17.09.20 11:29 Сейчас в теме

(13)Вы конечно извините, но уменя более разжевано для чайников ))

например тут:
Ip адрес / имя публикации / hs / корневой каталог / шаблон/

host – IP адрес или доменное имя веб сервера.

base – Имя базы. Указывается при публикации.

hs — признак того, что выполняется обращение к HTTP-сервису.

корневойURL — имя ресурса, которое определяет группу ресурсов, связанных общим смыслом.

относительныйURL — определяет ресурс, к которому будет выполняться обращение. Относительный URL, указанный в запросе, будет использован для определения конкретного ресурса, к которому выполнялось обращение. Правило сопоставления задается в объекте Шаблон URL.

ПраметрыЗапроса – Не всегда обязательные параметры передаются после знака «?», чаще всего дополнительные параметры или параметры выборки, например формат ответа(format=json или format=atom).

Как Вы можете заметить у меня более разжевано.

Rafaraf; Maden; mihuilka; kondrat230386; vitika_m; Ish_2; Fox-trot; + 7 – Ответить
18. acvatoris 503 17.09.20 11:37 Сейчас в теме
20. Ish_2 1100 18.09.20 21:53 Сейчас в теме
Вы конечно извините, но уменя более разжевано для чайников ))

Нет. Для чайников лучше разжевано у автора.
Текст жестко структурированный , без размышлизмов ,
отличная краткая инструкция , быстро вводящая в тему нулевого пользователя.
У автора опыт преподавания — вне всякого сомнения.

А у Вас жанр другой, с названием » Как я осваивал http-сервисы»,
Другой жанр — другие читатели.
Чайникам я бы такое не рекомендовал.

palalai; kild; rinik88; karomag; user905340; vitika_m; + 6 – Ответить
21. dsdred 2801 19.09.20 06:49 Сейчас в теме

Нет. Для чайников лучше разжевано у автора.
Текст жестко структурированный , без размышлизмов ,
отличная краткая инструкция , быстро вводящая в тему нулевого пользователя.
У автора опыт преподавания — вне всякого сомнения.

Не согласен с Вами.
Лично я не увидел опыта преподавания. Статья в стиле «Изучаю http сервисы [Шпаргалка]» как раз таки жанр (» Как я осваивал http-сервисы»)
Для чайников есть статья https://infostart.ru/1c/articles/516810/

Ценность текущей статья близка к нулю и вот почему:
1 Не показано как работать с параметрами, а http сервисы созданы для того чтобы что-то получать на основании чего-то.
2 Автор сделал ошибку которую я уже встречал в другой статье про http сервисы, ошибка редкая и «Чайник» вскипит при поиске веб сервера с названием «ISS». Возможно автор учится по той статье где я видел такую ошибку. Правильно конечно IIS.
3 Автор не делает отдельный модуль для методов (ОбщийМодуль я так понимаю для всего в подряд), следовательно у него либо не было опыта с граблями при отладке сервисов, либо он делает статью из разряда «хэллоу ворлд».
4 Не предполагается версионирование V1, V2 и т.д.
5 Судя по комментариям, автор узнал про кодировку благодаря читателям.
6 70-80% статьи вообще не про http сервисы.
7 Если в запросе вернется null, который запишется в одно из свойств структуры, то преобразование в JSON потерпит фиаско.
8 формула по которой собираем адрес. Формула?

22. Ish_2 1100 19.09.20 11:03 Сейчас в теме

(21) При изучении наук примеры полезнее правил. (с) Ньютон.
Если я что-то изучаю с нуля мне не правила нужны ( я их потом изучу самостоятельно) , мне нужен сквозной практический пример ( в данном случае создания простейшего http сервиса).
Автор его дает сжато и быстро . На первом этапе другого и не нужно.
Передача параметров, кодировка и проч . неточности обучающийся выяснит после того как поймет , что это за зверь http -сервис.

23. acvatoris 503 19.09.20 14:30 Сейчас в теме

Благодарю Вас за найденную опечатку. Действительно IIS, а не ISS. Опечатка возникла из-за моей не внимательности, так как процесс написания проходил поздно ночью. Благодарю еще раз.

24. Ish_2 1100 20.09.20 10:37 Сейчас в теме
Это на вскидку.

«Вскидка» оказалось очень существенной.
Читать Вашу статью все равно пришлось.
Спасибо.

26. dsdred 2801 21.09.20 08:19 Сейчас в теме
«Вскидка» оказалось очень существенной.
Читать Вашу статью все равно пришлось.

Параметры все таки понадобились?

П.С. Я же не специально придираюсь, просто не люблю примеры из разряда «Пример мир».

29. Ish_2 1100 21.09.20 21:28 Сейчас в теме
просто не люблю примеры из разряда «Пример мир».

А я люблю, если понимать под словами «Пример мир» предоставление некоторого общего концепта , базовой идеи.
Например , концепт «Выполнятор» , суть которого — выполнение произвольного кода на внешнем ресурсе — совсем не нов , но хорош сам по себе. По-моему , красиво. Уверен , что где-то этот концепт или уже развернут или будет развернут в концепцию безопасного применения произвольного кода .
Читая Вашу статью , я задался вопросом а почему сразу «Выполнятор» ? может начать с задачи поскромнее и безопаснее : «Выполнение произвольного запроса на внешнем ресурсе 1с».
В параметрах http-запроса передается параметр «ТекстЗапроса», в обработчике метода пишем
СхемаЗапроса = Новый СхемаЗапроса();
СхемаЗапроса.УстановитьТекстЗапроса(ТекстЗапроса);
И если нет ошибок выполняем запрос и результат его выполнения
запишем в ЗаписьJSON.
В принципиальном плане вроде все просто-понятно .
Скорее всего кто -то уже реализовал эту идею , но на инфостарте я ничего такого не нашел. Не дадите ссылку ?

30. dsdred 2801 21.09.20 21:52 Сейчас в теме

(29)Очень странно, что не нашли. Вот пример запроса и параметры к нему. https://infostart.ru/public/955078/

Но! Это не безопасно.
Во первых рекомендую почитать комментарии.
Во вторых об выполняторах я выступал на митапе по безопасности 11 сентября и рассказывал почему это плохо.

Если кратко
-смотрим статью с ИТС https://its.1c.ru/db/v8std#content:770:hdoc
-Выполнятор может быть использован против вас. Можно запускать кривые запросы и вы даже не поймете почему тормозит.
-Вы постоянно гоняете текст запроса\код целиком это все равно что ходить в библиотеку со своими книгами и просить библиотекаря из них что то прочитать
-в случае изменения\обновления конфигурации источника, ваши поделки могут сломаться и тогда чинить их придётся во всех базах получателях.

31. Ish_2 1100 21.09.20 23:17 Сейчас в теме

(30) В статье https://infostart.ru/public/955078/ позабавило применение «СтрЗаменить(..)» .
Автор и комментаторы явно не в курсе , что все обозначенные вопросы
решает программный объект «СхемаЗапроса», полученный из ТекстЗапроса.
Программным способом без всякого парсинга можно проверить синтаксис ,количество пакетов, ограничить число записей (ПЕРВЫЕ), запретить -удалить вложенные запросы ( к табличным частям объектов)
удалить колонки (поля выборки) запроса, и проч. и проч.

Что касается Odata. Основное его назначение — обмен данными.
Если стоит задача произвольного чтения из базы ( сложные запросы с соединениями ) , то он не применим. Возразите ?.
Во всяком случае в статье https://infostart.ru/1c/articles/885287/
для формирования отчета «ОстаткиИДоступностьТоваров» Odata используется только для получения небольшого списка складов . Почему же протокол Odata не использовался при выводе тела отчета ?
Имея возможность выполнить произвольный запрос ( с понятными ограничениями) , не пришлось бы так выкручиваться , прибегая к созданию макета СКД.
Для меня такой пример как «танцы с бубном».
Впрочем , дело вкуса . Для демонстрации и обучения такой пример вполне подойдет.

-Выполнятор может быть использован против вас. Можно запускать кривые запросы и вы даже не поймете почему тормозит.

Кривые запросы возможны и в Odata. И Вы также «не поймете почему тормозит». Я хочу сказать , что общие соображения беспредметны и могут быть повернуты в любую сторону.

-Вы постоянно гоняете текст запроса\код целиком это все равно что ходить в библиотеку со своими книгами и просить библиотекаря из них что то прочитать

Не понял о чем это ? Мы все чего-то гоняем в разные стороны..

-в случае изменения\обновления конфигурации источника, ваши поделки могут сломаться и тогда чинить их придётся во всех базах получателях.

Предполагается , что обработчик метода http- сервиса , реализованного в расширении , проверяет корректность текста запроса перед запуском на выполнение , выполняет запрос и ничего более . Приведите пример такого изменения конфигурации. Оценим его вероятность и вредоносность для сервиса.

Пример создания HTTP-сервиса в 1С:Предприятие 8.3. Часть 1

Пример создания HTTP-сервиса в 1С:Предприятие 8.3. Часть 1

Компания «» активно развивает платформу «1С:Предприятие» и с каждым релизом добавляет новые возможности. После старта развития ветки 8.3 новинок стало появляться особенно много и из-за постоянной занятости не успеваешь их все опробовать в деле. Не так давно я рассказывал и показывал как разработать полноценное мобильное приложение (да-да, на «1С:Предприятие»), а сегодня мне хотелось бы поговорить о создании HTTP-сервисов средствами платформы.

Возможность разработки HTTP-сервисов в составе конфигурации появилась еще в версии 8.3.5. За это время компонента несколько раз обновлялась, и сегодня ей вполне можно пользоваться, не опасаясь за наличие «детских» ошибок. Мне еще не доводилось применять функционал платформы «1С:Предприятие» для создания http-сервисов в реальных условиях, поэтому пока опыт ограничивается учебными проектами. Однако, я вижу перспективы применения механизма http-сервисов в одном из текущих рабочих проектов. В этом цикле небольших заметок попробую показать типовые примеры использования http-сервисов в конфигурациях для платформы «1С:Предприятие».

Создание простейшего http-сервиса в 1С:Предприятие 8.3

Сегодня мы рассмотрим пример самого простейшего http-сервиса, а затем будем его улучшать и усложнять. Цель урока – понять и прочувствовать простоту создания http-сервисов на базе платформы «1С:Предприятие 8.3».

Начнем, с формулировки задачи. Создаваемый в рамках заметки сервис должен уметь всего лишь две вещи: принимать GET запрос и отдавать ответ в формате JSON. Задача банальная и сделать что-то подобное на PHP/ASP .NET дело нескольких строчек кода. Забегая вперед, скажу, что в «1С:Предприятие» нам потребуется примерно столько же (ладно вам, не надо смеяться над странностями платформы 1С).

HTTP-сервисы в 1С:Предприятие

Про кейсы применения http-сервисов мы поговорим в отдельной заметке, а пока просто создадим новый http-сервис. Для удобства создадим новую информационную базу с пустой конфигурацией. Добавим в нее одну подсистему, которую назовем «ТестированиеHTTPСервисов». Теперь откроем в дереве конфигурации раздел «Общие», найдем в нем группу «HTTP-сервисы» и добавим первый веб сервис. В окне создания нового сервиса заполним поля:

  • Имя — ПервыйВебСервис;
  • Синоним — Первый веб сервис;
  • Корневой URL — our-services;

Добавление в конфигурацию нового сервиса

Обратите внимание на поле «Корневой URL». Указанное здесь наименование будет использоваться при обращении к сервису. Здесь не должно быть пробелов и желательно не использовать кириллицу. С этим разобрались, дальше переходим на закладку «Подсистемы» и добавляем http-сервис в единственную доступную подсистему.

Следующим шагом будет описание шаблона URL. Перейдем на соответствующую закладку и добавим шаблон с именем «ВывестиСписокУслуг». В инспекторе свойств найдем свойство «Шаблон» и напишем в нем «/list». Этим самым мы зададим путь, по которому будет происходить взаимодействие с http-сервисом. Шаблон может содержать специальные символы, позволяющие определить передаваемые параметры (как обязательные, так и нет), но для первого примера мы ограничимся простым «/list». При переходе по этому пути будет срабатывать наш единственный метод, и отдавать клиенту набор данных.

Отлично, шаблон есть, теперь дело за методом. Добавим для нашего шаблона, который назовем getServicesList. В инспекторе свойств нам необходимо указать HTTP-метод. Указанное значение определяет, на какие типы запросов будет реагировать наш метод. Текущая задача вполне позволяет обойтись методом “GET”.

Дерево конфиуграции

Наш сервис почти готов, остается только прописать обработчик события для сконструированного метода getServicesList. Создать обработчик события можно через инспектор свойств. В теле обработчика пишем:

Функция ВывестиИндексgetServicesList(Запрос) МассивУслуг = Новый Массив; МассивУслуг.Добавить(Новый Структура("title, description", "Услуга №1", "Описание услуги №1")); МассивУслуг.Добавить(Новый Структура("title, description", "Услуга №2", "Описание услуги №2")); МассивУслуг.Добавить(Новый Структура("title, description", "Услуга №3", "Описание услуги №3")); МассивУслуг.Добавить(Новый Структура("title, description", "Услуга №4", "Описание услуги №4")); ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.УстановитьСтроку(); ЗаписатьJSON(ЗаписьJSON, МассивУслуг); СтрокаДляОтвета = ЗаписьJSON.Закрыть(); Ответ = Новый HTTPСервисОтвет(200); Ответ.Заголовки.Вставить("Content-type", "application/json; charset=utf-8"); Ответ.УстановитьТелоИзСтроки(СтрокаДляОтвета, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать); Возврат Ответ; КонецФункции

Разберем приведенный код чуть подробней. В самом начале я описываю массив, состоящий из структур. Этот массив нам нужен сугубо для демонстрации. Все его содержимое мы переведем в JSON и отдадим клиенту. Инициализируем объект типа ЗаписьJSON. Обязательно вызываем метод УстановитьСтроку(), т.к. нам необходимо получить текст JSON в строковую переменную. Далее вызываем глобальный метод ЗаписатьJSON(), которому передаем объект типа ЗаписьJSON и массив, который необходимо конвертнуть. Дальше получаем результат в переменную «СтрокаДляОтвета» и готовим HTTP-ответ.

В ответ мы добавляем (см. метод «УстановитьТелоИзСтроки») получившийся JSON. Все, код демонстрационного примера готов и можно переходить к тестам.

Публикация HTTP-сервиса в 1С:Предприятие 8.3

Опубликуем созданный HTTP-сервис для тестирования результатов проделанной работы. Для простейшего теста в вашей систем должен быть установлен веб-сервер. У меня роль веб-сервиса выполняет Apache. Шаги, необходимые для установки/настройки веб-сервера мы пропустим, а перейдем к вопросу публикации HTTP-сервиса.

Для публикации необходимо перейти в меню «Администрирование» и выбрать пункт «Публикация на веб-сервере». В появившемся окне заполняем:

  • Имя – имя нашего решения. Оно будет использоваться в URL при доступе к опубликованной ИБ. Например, если указать здесь test, то ваша ИБ будет доступна по адресу http://localhost/test. Меня устраивает вариант test.
  • Веб-сервер — Заполняется автоматически. У меня в качестве веб-сервера используется Apache 2.2;
  • Каталог – путь к директории, в которую будет помещен конфигурационный файл публикуемой ИБ;
  • Снимаем флажки «Публиковать тонкий клиент и веб-клиент», «Публиковать стандартный интерфейс OData», «Публиковать WEB-сервисы по умолчанию»;
  • На вкладке HTTP-сервисы отмечаем флаг «Публиковать HTTP-сервисы по умолчанию» и в табличной части отмечаем созданный сервис.

Нажимаем кнопку «Опубликовать», платформа предложит перезапустить веб-сервер – соглашаемся.

Тестируем HTTP-сервис

Для тестирования созданного http-сервиса запустим какой-нибудь браузер и попробуем обратиться к нему. Если вы повторяли все мои действия, то путь должен получиться таким:

http://localhost:9090/services/hs/our-services/list

Стоит обратить внимание на порт 9090, который указан через двоеточие после имени хоста. Если вы ставили Apache с настройками по умолчанию, то у вас он будет слушать 80-й порт, следовательно, ничего указывать не нужно. В итоге URL будет таким:

http://localhost/services/hs/our-services/list

Попробуйте перейти по нему, и если все работает корректно, вы получите страницу с данными в JSON формате:

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

Итак, первая часть должна быть понятна – localhost. Это имя хоста, на котором установлен веб-сервер. Дальше указывается ссылка (services) на опубликованную ИБ. Следом идет hs, этот элемент пути указывает, что нас интересует взаимодействие с http-сервисом. Последние два элемента – корневой URL нашего сервиса и шаблон URL.

Результат

Вместо заключения

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

Еще записи по теме

  • Пример FTP-клиента на Delphi
  • Технический долг в разработке ПО
  • HTTP-сервисы в 1С:Предприятие 8.3 (презентация + запись доклада)
  • Изучаем sails.js. Часть 2. Структура проекта
  • Решение проблемы «Microsoft SQL Server Native Client 11.0: Запрос COMMIT TRANSACTION не имеет соответствующей инструкции BEGIN TRANSACTION»
  • Адаптивный web-дизайн
  • Странная политика компании «1С». Как получить обновленный дистрибутив типовой конфигурации?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *