1c http сервисы

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

Исходные данные: В базе управленческого учета (далее “fin“) пользователи заводят банковские счета (далее БС). Необходимо при записи их передавать в бухгалтерскую базу (далее “upp“) и создавать его там при отсутствии.

Решение: Нижеописанный метод реализован на http-сервисе под управлением “IIS”. Так же его можно и реализовать на веб-сервере “Apache”.

Внимание! Подразумевается что ISS (или Apache) уже настроен на сервере и функционирует. При отсутствии настроенного ISS, крайне рекомендую установить веб-сервер Apache, так как он намного проще и понятнее.

Приступаем! В базе приемники “upp” создаем http-сервис “exchange_buh”:

http-сервис
http-сервис

Особое внимание стоит обратить на свойство “Корневой URL” – это по сути идентификатор http-сервиса (ссылка на веб-сервис).

Далее добавляем шаблон URL:

Шаблон URL
Добавление Шаблона URL
Шаблона URL.

Здесь внимание уделяем свойству “Шаблон” – в нашем случае укажем идентификатор “data_fin” (произвольное), через который будет происходить обращение к нашему сервису, и переменную “{InfoType}”, значение который мы будем передавать и обрабатывать в базе “upp“. Внимание: “{InfoType}” – это не основные наши передаваемые данные. Это просто вспомогательные данные для обработки.

И осталось добавить только основной метод нашего сервиса:

Добавляем основной метод сервиса типа “POST”.
Метод “POST_data_fin”.

Здесь указываем в свойстве “HTTP-метод” значение “POST”. Метод запроса POST – это метод, при котором веб-сервер принимает данные, заключенные в тело сообщения.

Теперь наступает самый ответственный момент – публикация веб-сервиса. Для этой операции запускаем “конфигуратор” под администратором системы (зажимаем клавишу “SHIFT” и в контекстном меню выбираем пункт “Запуск от имени администратора”):

Запуск конфигуратора 1с под администратором системы.
Запуск конфигуратора 1с под администратором системы.

В “конфигураторе” через меню “Администрирование/Публикация на веб-сервере…” открываем настройки публикации и публикуем:

Настройки публикации на веб-сервере ISS.

В результате такой публикации через “ISS” сервер у нас образуется каталог с файлами:

Каталог веб-сервиса.

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

Теперь приступаем к самому интересному – программированию.

В конфигурации “fin”, откуда мы передаем данные, каждый раз, при записи БС, вызываем нашу процедуру передачи данных “барк_httpСервисы.ОтправитьБанковскийСчетВБухглатерию

Ну и соответственно наша главная процедура обмена:

Все просто – основные комментарии указаны в вышеприведенном коде. Вниманием уделяем строке подключения к сервису:

Адрес ресурса.
Адрес ресурса.

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

Внимание! Хранение логинов и паролей в коде не приемлемо! Используйте Безопасное хранилище данных 1с.

И наконец-то код на стороне приема данных “upp”:

Обработчик веб-сервиса.
Обработчик веб-сервиса.

В результате вызова метода сервиса мы получим наши параметры: “ДополнительныйПараметр” и “ОсновныеДанные”:

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

И сама процедура создания БС по переданным параметрам:

В этом примере в качестве основного параметра передаем ‘Структуру‘, но можем отправлять и другие значения: к примеру ‘Массив Структур‘, так же преобразованную в формат JSON.

С помощью метода “HTTPОтвет = Новый HTTPСервисОтвет()” формируем возвращаемое значение:

HTTPОтвет = Новый HTTPСервисОтвет().
HTTPОтвет = Новый HTTPСервисОтвет().

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

Ссылка на конфигурацию с “htpp-сервисом” и программными модулями.

P.S. Практический материал (алгоритмы, htpp-сервис) предоставлен пользователем FANTASISTO.

5+

8 комментария

  1. Игорь

    Огромное СПАСИБО автору.

    3+
  2. Admin (Автор записи)

    Да не за что, пользуйся!

    3+
    1. Игорь

      Все сделал как у Вас написано.. Но почему то мне все время возвращается 404 ошибка.. ( Соединение c HTTP-сервисом происходит – есть соответствующие записи в журнале регистрации. Но дальше дело не идет, адрес ресурса видимо не распознается и возвращает 404. Чего только не перепробовал, и публикацию делал не через конфигуратор на локальный сервер, а через утилиту webinst на тот сервер, на котором серверная часть базы.. Ничего не помогает.. Не подскажите – что можно еще попробовать?

      1+
      1. Admin (Автор записи)

        Привет. Сервис публиковал из конфигуратора запущенным под админом? С доступом к папке сервиса все в порядке? Проверь еще раз “запросPOST.АдресРесурса” адрес ресурса, я помню когда писал в первый раз, не верно его формировал под структуру сервиса. Долго с этим промучился. Получается он даже не заходит в процедуру сервиса? На данный момент есть настроенные и рабочие веб/htpp сервисы у этой базы или этой первые сервисы для неё?

        0
  3. Игорь

    Добрый день. Да, сервис публиковался под админскими правами, доступ к папке есть. Согласен, что видимо дело в “запросPOST.АдресРесурса”, но что в нём может быть неправильного не пойму.. Формирую его под структуру сервиса в полном соответствии с правилами://hs////. Код операции – произвольная строка, которая задается в клиентской программе и сравнивается в серверной. Но собственно до сравнения дело не доходит.. Чем то ей это адрес ресурса не нравится, не находит она его.. Написал для примера GET-запрос и проходит и из браузера и из 1с. Например localhost/up_develop_2/hs/Users?action=getusers или из 1с: HTTP.Получить(“/up_develop_2/hs/Users?action=getusers”, имяВыходногоФайла); А вот POST запрос не проходит, хоть ты тресни.. Измучился уже с ним..

    0
    1. Admin (Автор записи)

      В понедельник на работе гляну свой http сервис, может чего дельного подскажу. Уверен проблема скорее всего у тебя ерундовая, но докопаться бы до неё…

      1+
  4. Игорь

    Интересно, почему то удалились из сообщения все строки в угловых скобках. Должно быть вот так (без угловых скобок): Имя публикации/hs/корневой URL/шаблон/Код операции

    0
    1. Admin (Автор записи)

      Посмотрел у себя. Вроде все как и должно быть. Вот есть какая мысль – может быть у тебя в модуле сервиса ошибка (там программа на синтаксис не проверяет): попробуй в модуле сервиса оставить к примеру только “Сообщить(“Тест”)” или вообще просто в методе код весь закоментить. И проверь будет ли соединяться в этом случае.

      0

Оставить комментарий

Ваш адрес email не будет опубликован.