Доступ к api что это в 1с

Обновлено: 05.07.2024

REST API работает только если при работе с ТСД используется сервер Mobile SMARTS. При прямом подключении ТСД к компьютеру через кабель/крэдл или при обмене с учетной системой через папку использовать REST API не получится.

Функционал REST API в локальном и глобальном ядре полностью идентичен, т.е. код процедур и функций практически полностью совпадает. Поэтому, если требуются доработки, их нужно делать синхронно в 3 местах - глобальное ядро, локальное ядро УФ, локальное ядро ОФ.

Коды состояния бывают в диапазоне от 100 до 500 и выше, их можно разделить на следующие группы:

  • 200+: запрос успешен, в обработке используются:
    • 200 — запрос успешно выполнен;
    • 204 — запрос успешно выполнен, но ответ не содержит тела. Используется при выгрузке/очистке справочников Mobile SMARTS, удалении документа Mobile SMARTS, изменении статуса документа Mobile SMARTS.
    • 401 — не удалось авторизоваться на сервере Mobile SMARTS для выполнения запроса, например, из-за неверного логина/пароля или по причине того что истек срок действия токена, поэтому потребуется переавторизация.

    В обработке для реализации REST API используются прикладные объекты 1С такие как:

    • GET – используется для получения со стороны севера определенного ресурса (настройку Mobile SMARTS, документ, список документов Mobile SMARTS, метаданные базы Mobile SMARTS). Если вы производите этот запрос, сервер ищет информацию и отправляет ее вам назад. По сути, он производит операцию чтения на сервере. Дефолтный тип запросов.
    • POST – нужен для создания определенного ресурса на сервере. Сервер создает в базе данных новую сущность и оповещает вас, был ли процесс создания успешным. По сути, это операции создания настройки Mobile SMARTS, документа Mobile SMARTS, выгрузки справочников Mobile SMARTS.
    • PUT и PATCH – используются для обновления определенной информации на сервере, например, статуса документа Mobile SMARTS. В таком случае сервер просто изменяет информацию существующих сущностей в базе данных и оповещает об успехе выполнения операции.
    • DELETE – как и следует из названия, удаляет указанную сущность из базы (удаление настройки Mobile SMARTS, документа Mobile SMARTS, очистка справочника Mobile SMARTS) или сигнализирует об ошибке, если такой сущности в базе не было.
    1. для номенклатуры - "Products/BeginUploadProducts"
    2. для ячеек - "Cells/BeginUpdate"
    3. для прочих сравочников - "Tables/"+ИмяТаблицыENG+
    4. "/BeginOverwrite"
    1. для номенклатуры - "Products/AddProductsToUpload"
    2. для ячеек - "Cells"
    3. для прочих справочников - "Tables/"+ИмяТаблицыENG
    1. для номенклатуры - "Products/ResetUploadProducts"
    2. для ячеек - "Cells/ResetUpdate"
    3. для прочих справочников - "Tables/"+ИмяТаблицыENG+
    4. "/ResetOverwrite"
    1. для номенклатуры - "Products/EndUploadProducts"
    2. для ячеек - "Cells/EndUpdate"
    3. для прочих справочников - "Tables/"+ИмяТаблицыENG+"/EndOverwrite"
    1. для номенклатуры - "Products/BeginUploadProducts"
    2. для ячеек - "Cells/BeginUpdate"
    3. для прочих сравочников - "Tables/"+ИмяТаблицыENG+
    4. "/BeginOverwrite"
    1. для номенклатуры - "Products/EndUploadProducts"
    2. для ячеек - "Cells/EndUpdate"
    3. для прочих справочников - "Tables/"+ИмяТаблицыENG+
    4. "/EndOverwrite"
    1. Получение реквизитов шапки документа - "DocTypes('" +
    2. СтруктураДокумента.uni + "')?$expand=fields"
    3. Получение реквизитов табличной части документа - "DocTypes('" +
    4. СтруктураДокумента.uni + "')?$expand=columns"
    5. Получение списка доп.таблиц, которые не определены в метаданных
    6. документа, но существуют у самого экземпляра документа - "DocTypes('" + СтруктураДокумента.uni + "')?$expand=tables($expand=fields)"
    1. Редактировать/добавить документ - "Docs" + данные документа
    2. Выгрузить табличную часть, например, declaredItems - "Docs('"+idДокумента+"')/declaredItems"
    3. Принудительное сохранение документа, когда
      все строки уже загружены - "Docs('"+idДокумента+"')/EndUpdate"

    10.0.0.29
    — пример IP-адреса сервера Mobile SMARTS
    e1fc20aa-ff42-47df-9e5b-a94ba38b8935
    — пример ID базы Mobile SMARTS

    REST_API_ПодключитьсяКБазеSMARTS


    Ключ Значение Комментарий
    "@odata.context" "http://localhost:18686/MobileSMARTS/api/v1/$metadata"
    "value" Массив Метаданные базы Mobile SMARTS

    REST_API_ПолучитьТокенSMARTS


    Ключ Значение Комментарий
    "Expires_in" 86 400 Срок действия токена в секундах
    "Access_token" "8ee184cb1eb7b4b945a69bbc5bd198a5" Токен доступа
    "Token_type" "bearer" Тип токена
    "Refresh_token" "b8140b77fa61fa5399735ab60f7a9f16" Токен обновления

    REST_API_ПолучитьОписаниеБазы

    REST_API_ПолучитьЗначениеНастройкиБазыSMARTS

    REST_API_ЗаполнитьНастройкиSMARTS

    REST_API_ЗаписатьНастройкиSMARTS

    REST_API_УдалитьНастройкиSMARTS

    REST_API_ВыгрузитьТаблицуНаСерверSMARTS

    Будут выполнены 3 запроса: начать выгрузку, выгрузка, завершить выгрузку (или прервать выгрузку, в случае ошибки), пример дан для выгрузки номенклатуры. В случае выгрузки ячеек или дополнительных таблиц будут изменяться только наименования методов (см. таблицу выше), все остальное выполняется по тому же алгоритму

    Запрос 1 — Начать выгрузку

    Запрос 2 — Начать выгрузку

    Запрос 3 — Завершить выгрузку / прервать выгрузку

    REST_API_ОчиститьТаблицуНаСервереSMARTS

    Аналогично процессу выгрузки, только без запроса 2, т.е., фактически, не выгружаем в таблицу никаких данных:

    REST_API_ПолучитьМетаданныеДокументовMS - состоит из 7 запросов

    Запрос1 — Получение списка типов документов

    Запрос 2 — Получение метаданных и реквизитов шапки документа на примере документа «Агрегация»

    Запрос 3 — Получение метаданных и реквизитов табличной части документа на примере документа «Агрегация»

    Запрос 4 — Получение списка доп.таблиц, которые не определены в метаданных документа, но существуют у самого экземпляра документа на примере документа «Агрегация»

    Запрос 5 — Получение списка дополнительных таблиц

    Запрос 6 -— Получение списка пользователей — «Users»

    Запрос 7 — Получение списка устройств — «Devices»

    REST_API_ПолучитьСписокДокументовНаСервереSMARTS

    REST_API_ПолучитьДанныеДокументаНаСервереSMARTS

    REST_API_ЗаписатьДокументВБазуSMARTS

    Запрос 1 — Выгрузка шапки документа

    Запрос 2 — Выгрузка табличных частей документа, например, declaredItems

    Запрос 3 — Принудительное сохранение документа, когда все строки уже загружены

    Задача: подключение к REST API по протоколу Oauth 2.0 и получение данных от API для дальнейшего парсинга и загрузки в БД.

    Решение состоит из:
    * Получение токена авторизации;
    * Получение данных с использованием токена авторизации.

    Получение токена авторизации

    Получение токена авторизации выполняется при помощи POST запроса XTTP, при этом есть нюансы реализации этого запроса для x32 и x64 разрядных версий сервера 1С, а также особенности при работе этого запроса в веб клиенте.

    XTTP запрос для получения токена OAuth выглядит следующим образом:

    Проблемы при работе с POST XTTP подключением авторизации

    1. Ошибка при получении токена на x64 разрядном сервере 1С.

    Можно столкнуться с проблемой, когда у клиента 1С в развернута в платном облачном сервисе, где возможности изменить параметры сервера или зарегистрировать дополнительные dll нет возможности, либо запрещено выполнять JavaScript, который в нашем коде создается в строке COMОбъект("MSScriptControl.ScriptControl").

    То есть, если подключение XTTP описано на сервере, например в модуле объекта обработки и при этом сервер 1С x64 разрядный, то можно получить следующую ошибку:

    : Ошибка при вызове конструктора (COMОбъект): -2147221164(0x80040154): Class not registered.

    Если XTTP подключение описано на клиенте в форме обработки, то при выполнении этого кода в браузере Chrome, можно получить следующую ошибку:

    Ошибка связана с особенностями запуска ActiveX объектов в браузерах. В Internet explorer текст ошибки может отличаться.

    Решение ошибок

    Для решения проблемы с исполнением кода на x64 разрядном сервере нужно перенести код подключения на клиент в форму обработки, так как это представлено в примере кода выше. Но при этом получается что в браузере это решение всё ещё работать не будет. Потому что браузер с нужным нам COM объектом работать не может и углубляться в причины этой проблемы будет просто потерей времени. Гораздо более быстрым решением станет реализация этого запроса при помощи JavaScript помещенного в элемент формы с видом ПолеHTMLдокумента.

    Решение получения токена в веб клиенте

    Есть различные варианты реализации подхода через ПолеHTMLДокумента. Например можно сделать кнопку "Войти" на форме и по этой кнопке вызывать скрипт описанный в HTML документе, а можно сверстать HTML, поместить его в ПолеHTMLДокумента, то есть кнопка "Войти" будет элементом HTML страницы. Я реализовывал второй вариант.

    Токен получен. Соответственно токен нужно положить в какой-нибудь реквизит, либо передать токен в основную форму обработки, если форму авторизации вы сделали как отдельную форму настройки.

    Получение данных из API с использованием токена авторизации

    Есть некоторые общие функции для формирования параметров, которые подставляются в запрос.

    Реализация получения данных для тонкого клиента

    Есть нюанс в заголовке XTTPЗапрос.setRequestHeader("Origin", "*"), чтобы запрос к API работал с этим заголовком, нужно обсуждать параметры API с теми кто им заведует. Насколько я знаю, в настройку Origin на сервере API нужно устанавливать значение адреса домена с которого осуществляется подключение. Без настройки этого заголовка на сервере и установки этого заголовка в коде 1С может возникать ошибка авторизации 403.

    Реализация получения данных для веб клиента

    Аналогично авторизации, необходимо при создании формы заполнить содержание HTML документа на форме. При этом не получиться сделать поле HTML на форме 1С невидимым, иначе оно не инициализируется. Поэтому просто делаем все элементы HTML разметки невидимыми при помощи display:none.

    Т.к. время запроса к серверу может в зависимости от нагрузки на сервер быть разным, то нужно предусмотреть ожидание получения результата. Поэтому получения данных из HTML+JS у меня реалезовано не через функцию, а процедуру, в которой после выполнения скрипта подключается обработчик ожидания с вызовом функции, и в этой функции после того как мы увидели, что результат запроса был помещен в div "result" JavaScript'ом, мы получаем из этого div'а текст JSON и отправляем его на обработку в другие процедуры и функции.

    Проблемы при работе с GET XTTP подключением получения данных

    Чуть выше я уже кратко упомянул проблему, которая возникает при попытке получения данных, когда уже вроде бы должно всё работать. У нас есть токен авторизации, но когда мы пытаемся подключиться для получения данных, мы получаем ошибку авторизации 403. Она так же может отображаться в 1С следующим образом:

    : Ошибка при вызове метода контекста (Получить): Ошибка работы с Интернет: Couldn't resolve host name.

    Чтобы понять, что надо использовать заголовок Origin и настраивать его на сервере API, а не искать причину в чем то другом, нужно сделать следующее:

    1. Создать и сохранить у себя на ПК новый HTML документ следующего вида

    Заполняем собственные логин, пароль, и другие параметры в скрипте, и сначала нажимаем "Войти", чтобы получить токен в <div а затем нажимаем "Получить данные по токену", чтобы получить данные JSON в <div >

    2. Открываем этот HTML в специальном режиме браузера Chrome:

    Открыв браузер таким образом, будет отключена защита браузера CORS, и можно проверить, наш запрос в 1С не работает потому что срабатывает эта защита, или по какой-то другой причине. То есть, если возникнет ошибка в этом режиме браузера и данные мы не получили, то дело НЕ в CORS, а если в этом режиме браузера загружается, а в 1С не грузится с ошибкой "Couldn't resolve host name", то это проблема связана с CORS.

    Также можно использовать программу Postman и попробовать выполнить запрос в этой программе.

    Дополнительные настройки

    Помимо этой проблемы стоит так же предусмотреть возможные проблемы при работе в IE. Рекомендую выполнить следующие настройки в своей системе:
    1. IE свойства браузера - зайти в вкладку "Дополнительно" и у становить флаг «Разрешать запуск активного содержимого файлов на моем компьютере»;

    2. Если установлен Касперский - нужно снять флаг с настройки «Внедрять в трафик скрипт взаимодействия с веб-страницами», который находится в "Настройки"(шестеренка) -> "Сеть".

    API серверов обеспечивает передачу внешней системе списка измененных объектов данных с указанного момента времени, а не полного списка объектов. Это позволяет существенно экономить вычислительные ресурсы и сетевой трафик, но требует от внешней стороны вести учет меток актуальности данных 1С-Коннект.

    API серверов поддерживает следующие действия с объектами системы 1С-Коннект:

    • Создание, изменение, удаление и выгрузку списков следующих видов объектов:
      • сотрудник своей организации;
      • клиент (юр.лицо);
      • сотрудник клиента;
      • линия поддержки;
      • компетенция сотрудника по линии;
      • подключение линии поддержки потребителю (сотруднику своей организации/ сотруднику клиента);
      • обращение по линии поддержки;
      • заявка на обслуживание.

      Доступ к API серверов , а также настройка часового пояса, в соответствии с которым будет показана ин формация, получ енная с помощью web - сервисов, настраиваются в Личном кабинете в разделе " Администрирование" подраздел "Настройки API" . Также в этом подразделе вы можете посмотреть статистику по использованию web - сервисов.

      • API серверов основан на механизмах Web-сервисов в реализации "1С: Предприятие 8.3".
      • Все операции манипулирования данными сгруппированы по-объектно.
      • Добавление, изменение и удаление объектов определенного вида можно делать пакетно, т.е. "пачкой за 1 раз".
      • Все входные параметры вызова ws-операции передаются одной переменной-массивом ( XDTO - совместимой с типом «Структура» прикладного яз ыка "1С: Предприятие 8") - это позволяет впоследствии расширять перечень передаваемых параметров, сохраняя совместимость с ранее написанными клиентами внешними алгоритмами.
      • У всех ws-операций единая структура ответа, она позволяет при успехе выполнения передать результат, а при ошибке выполнения - сведения об ошибке и месте её возникновения.
      • Во избежание непреднамеренной DDoS-атаки путём беспрерывной бесконечной цепочки запросов к API, на каждый вид ws-операции наложено ограничение по максимальному количеству вызовов операции в час. Параметры ограничений указаны в таблице.

      Пример реализации на платформе 1С

      Обработка-пример вызова операции GetHistoryOfServiceCalls: ВызовОперацийPartnerAPI2.epf

      Структура результата ws-операции

      Каждая операция на выходе выдает структуру из двух полей: ResultCode, ResultData. ResulеCode содержит код выполнения, если код = SUCCESS, то в поле ResultData результат операции, иначе текстовое описание ошибки. Н еобработанная ошибка вызовет исключение, и операция вернет исключение с текстом ошибки.

      При пакетной передаче данных поле ResultData будет содержать таблицу значений. Объекты в пакете обрабатываются построчно. При этом н омер строки входного параметра будет соответствовать номеру строки , соответствующей этому запросу на выходе. При возникновении ошибки выполнение операции не прекратится, пока не обработаются все содержимое пакета, либо не будет достигнут лимит.

      Ссылка для подключение к web-сервису

      Алгоритм выполнения ws-операции

      Проверка превышения лимита по количеству вызовов этого вида операции в текущее время суток.

      personal photo

      Взаимодействие с базой данных 1С возможно следующими методами:

      Подготовка базы для взаимодействия по API.

      Публикация на web-сервере.



      Настройка сквозной авторизации.

      При обращении к базе данных по API потребуется сквозная авторизация. Для ее обеспечения следует создать в базе пользователя с логином и паролем аналогичными учетным данным для основного или дополнительного пользователей. Также следует дать данному пользователю полные, либо необходимые для взаимодействия права.


      Проверка наличия сервиса в конфигурации.

      По умолчанию будут опубликованы все стандартные web-сервисы конфигурации. В таком режиме публикации к web-сервисам следует обращаться по ALIAS.

      Узнать наименования сервисов, доступных для взаимодействия с данной конфигурацией, можно следующим образом:


      Проверить правильность выполняемых действий можно следующим образом.

      В любой конфигурации есть стандартный WS «EnterpriseDataExchange», к нему можно обратиться следующим образом.

      Открыть подраздел Web-сервисы выбрать «EnterpriseDataExchange», в примере это «EnterpriseDataExchange_1_0_1_1» проверяем во вкладке «Прочее» его ALIAS – «EnterpriseDataExchange_1_0_1_1.1cws».


      Теперь обращаемся к сервису через браузер добавив к ссылке на базу /ws/EnterpriseDataExchange_1_0_1_1.1.1cws?wsdl

      При запросе логина и пароля следует ввести учетные данные пользователя, которые использовались для настройки сквозной авторизации.


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


      Взаимодействие посредствам web-сервисов.

      Перед началом обращения к web-сервисам баз данных по API следует предварительно выполнить условия, указанные в предыдущем пункте данной статьи, это публикация информационной базы и настройка сквозной авторизации.

      Для взаимодействия с базой данных через web-сервисы (WS). Просмотреть доступные для работы сервисы можно открыв базу в режиме конфигуратора, раскрыть раздел «Общие», раскрыть подраздел «Web-сервисы».

      Как говорилось ранее, все WS по умолчанию уже опубликованы, к ним следует обращаться по alias, синтаксис можно посмотреть в конфигураторе через свойства конкретного сервиса, раздел «Прочее».


      Как говорилось ранее, все WS по умолчанию уже опубликованы, к ним следует обращаться по alias, синтаксис можно посмотреть в конфигураторе через свойства конкретного сервиса, раздел «Прочее».


      В запросе расширение «.1cws» меняем на «?wsdl»

      При запросе логина и пароля следует ввести учетные данные пользователя, которые использовались для настройки сквозной авторизации.

      Для публикации нестандартных сервисов, следует создать обращение в техническую поддержку, указать базу и сервис, который следует опубликовать.


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

      Также необходимо учитывать тот факт, что для работы некоторых сервисов (например, для телефонии) необходима анонимная аутентификация, в рамках сервиса её допускается включать только для баз, работающих на SQL.

      Взаимодействие по средствам стандартного интерфейса ODATA

      Перед началом обращения к интерфейсу ODATA следует предварительно выполнить условия публикации информационной базы и настройку сквозной авторизации (описаны выше). Далее следует составить обращение в техническую поддержку, указать базу в которой следует опубликовать интерфейс ODATA.

      После внесения правок в публикацию можно будет проверять обращение к базе через стандартный интерфейс, в формате json, пример:


      Odata работает.
      Теперь нужно обратиться к объекту к базе, сделаем на примере справочника Контрагенты:


      Следует войти в режим «Предприятие», открыть «Все функции» - «Обработки» и найти «Настройка автоматического REST-сервиса».



      Во вкладке «Состав» следует выбрать нужные для отображения данные и сохранить изменения.


      Теперь при выполнении запроса

      Мы получаем ответ:


      Запрос отработан корректно.

      Взаимодействие с базами через FTP

      Помимо вышеперечисленных вариантов с файлами и папками на облачном диске w можно взаимодействовать напрямую через ftp.

      Читайте также: