Схема работы

  1. Внешний сервис передает параметры получения данных в приложение 1С через сервис DataTransfer запросом POST в объектное хранилище асинхронного получения данных - async. В качестве id указывается идентификатор данных.
    • Параметры сохраняются в файловом хранилище и id настроек и id данных передаются в задание очереди. 
    • Создается задание очереди.
    • В качестве результата на запрос возвращает идентификатор задания очереди.
    • В задании очереди выполняется обработчик формирования данных по переданным параметрам. Результаты помещаются в файловое хранилище.
  2. Внешний сервис периодически опрашивает приложение 1С по идентификатору задания очереди и получает ответ, что данные еще не сформированы (код 10202), и нужно подождать, или что данные сформированы (код 10200). В результате передается id файла.
  3. Внешний сервис получает запрошенные данные.

Запросы выполняются парами POST → PUT или GET → GET. Первый запрос открывает сессию передачи/получения данных с авторизацией. Второй запрос выполняет непосредственную передачу/получение данных. Пары запросов должны выполняться в одном соединении.

Внешнее приложение
Внешнее приложение
Приложение
в облаке 1С:Фреш
Приложение...
POST→PUT
+ параметры
POST...
Транспорт
/hs/dt/storage/
Транспорт /hs/dt/storage/
async/{name}
async/{name}
jobs/{id}
jobs/{id}
files/{id}
files/{id}
Очередь
заданий
Очередь заданий
Подготовленные
данные
Подготовленные данные
Обработчик
подготовки
данных
Обработчикподготовкиданных...
Даные
пользователя
Даные пользователя
1 Запрос
1 Запрос
2 Ожидание
2 Ожидание
3 Получение
3 Получение
GET → GET
GET → GET
GET → GET
GET → GET
Облачная подсистема
Облачная подсистема
Прикладное решение
Прикладное решение
Обработчик
внешнего
приложения
Обработчиквнешнегоприложения...
Асинхронное
получение данных
Асинхронное получение данных
Запрос
данных
Запрос данных
Транспорт
/hs/dt/storage/
Транспорт /hs/dt/storage/
async/list
async/list
GET → GET
GET → GET
Запрос имен
данных
Запрос имен...
Имена данных
Имена данных
Text is not SVG - cannot display

Описание процесса

Для получения данных отправляется запрос - POST {{baseURL}}/async/{{id}},

где id - идентификатор получаемых данных.

В ответ возвращается Location для передачи настроек. Далее нужно выполнить PUT запрос на полученный Location. В ответ возвращается информация о созданном задании на формирование данных.

Запросы POST и PUT должны выполняться в одном соединении.

Ответ возвращается в формате JSON со следующими полями:

  • general - Структура - основной раздел
    • response - Число - код возврата
    • error - Булево - признак ошибки
    • message - Строка - подробности ошибки (заполняется, если возникла ошибка)
  • result - Структура - результат, в данном случае:
    • storage - Строка - идентификатор объектного хранилища (в данном случае - jobs)
    • id - Строка - идентификатор объекта хранилища (в данном случае - идентификатор задания)
Пример ответа на запрос формирования данных
{
  "general": {
    "response": 10200,
    "error": false,
    "message": ""
  },
  "result": {
    "storage": "jobs",
    "id": "47e7efd6-ddb6-11e7-819b-0050568925e0"
  }
}

Если идентификатор данных передан не корректно, или получение таких данных не поддерживается, будет возвращен ответ с кодом 10404.

{
  "general": {
    "response": 10404,
    "error": false,
    "message": ""
  }
}

По идентификатору задания выполняется дальнейшее отслеживание подготовки данных с помощью запроса GET {{baseURL}}/jobs/{id}

На запрос открытия сессии ожидания возвращается Location, по которому можно получать состояние подготовки данных GET запросом. Запросы открытия сессии и получения состояния должны выполняться в одном соединении.

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

Пример ответа, если данные еще не сформированы
{
  "general": {
    "response": 10202,
    "error": false,
    "message": ""
  }
}

После того как данные подготовлены, будет получен ответ с идентификатором файла сформированных данных.

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

  • result - Структура - результат
    • storage - Строка - идентификатор объектного хранилища (в данном случае - files)
    • id - Строка - идентификатор объекта хранилища (в данном случае - идентификатор файла)
Пример ответа с адресом сформированных данных
{
  "general": {
    "response": 10200,
    "error": false,
    "message": ""
  },
  "result": {
    "storage": "files",
    "id": "0cdf3084-90e4-49aa-8a57-735514cf5670"
  }
}

Получение файла данных с помощью запроса GET {{baseURL}}/files/{id}

В ответ возвращается Location, по которому можно получить сформированный файл GET-запросом. Запросы открытия сессии и получения данных должны выполняться в одном соединении.

Результат возвращаются в виде двоичных данных. В заголовке указывается имя: Content-Disposition: attachment; filename="fname.ext"

Стандартные коды возврата

Код возвратаЭто ошибкаОписание
110200
Выполнено
210240
Выполнено с предупреждениями. Предупреждения в сообщении.
310400ДаОшибка данных. Описание ошибок в сообщении.
410404
Данные не найдены
510500ДаВнутренняя ошибка. Описание ошибки в сообщении.

Пример получения данных

Процесс получения данных состоит из нескольких последовательных запросов, адреса которых получаются из ответов предыдущих запросов:

  1. Отправка параметров для получения данных
  2. Ожидание результата
  3. Получение результата (файла)

На каждом этапе отправляются пары запросов:

  1. Запрос открытия сессии
  2. Отправка или получение данных по URL открытой сессии с закрытием сессии, если требуется.

Отправка параметров для получения данных

Отправка параметров выполняется двумя запросами. Первый запрос открывает сессию (передается заголовок IBSession: start) и возвращает Location для загрузки данных с сессионными Cookie, которые нужно использовать для второго запроса. Второй запрос на адрес полученного Location передает настройки и закрывает сессию (передается заголовок IBSession: finish).

  1. Открытие сессии отправки настроек получения данных

    Запрос
    POST https://example.com/a/smtl/1/hs/dt/storage/async/pause
    Authorization: Basic base64_encode(user:password) или Bearer access_token
    IBSession: start
    Ответ
    200 OK
    Content-Length: 0
    Accept-Ranges: bytes
    Location: https://example.com:443/a/smtl/1/hs/dt/upload/01d3e02905030cf04c81fb7ef6b249cf8cee890c5bebc39d66fecc937af06cc9
    Set-Cookie: ibsession=b94d4f36-606e-4543-bc38-bade7918926a;Path=/a/smtl/1/;Version=1
  2. Отправка настроек получения данных

    Запрос
    PUT <заголовок Location предыдущего ответа>
    Cookie: <заголовок Set-Cookie предыдущего ответа>
    IBSession: finish
    
    {"organization":{"inn":"783900281039","kpp":""},"date":"2018-09-30T23:59:59"}
    Ответ
    201 Created
    Content-Type: application/json; charset=UTF-8
    Content-Length: 156
    
    {
    "general": {
    "response": 10200,
    "error": false,
    "message": ""
    },
    "result": {
    "storage": "jobs",
    "id": "e0b50f84-0443-11e9-a246-0050568908e4"
    }
    }

Ожидание результата

Ожидание результата выполняется аналогично двумя запросами. Первый открывает сессию и возвращает Location. Второй ожидает результат, выполняя запросы по адресу Location. В рамках одной сессии можно выполнять несколько запросов ожидания результата.

  1. Открытие сессии ожидания результата

    Запрос
    GET https://example.com/a/smtl/1/hs/dt/storage/jobs/e0b50f84-0443-11e9-a246-0050568908e4
    Authorization: Basic base64_encode(user:password) или Bearer access_token
    IBSession: start
    Ответ
    302 Redirect
    Content-Length: 0
    Accept-Ranges: bytes
    Location: https://example.com:443/a/smtl/1/hs/dt/download/e0d97125ea768aa38265182452aea457d5dd2934e827aa5ec4bd4b408a7f7734
    Set-Cookie: ibsession=fd97f287-cba9-4196-b0b5-02ac28a03d85;Path=/a/smtl/1/;Version=1
  2. Ожидание результата

    Запрос
    GET <заголовок Location предыдущего ответа>
    Cookie: <заголовок Set-Cookie предыдущего ответа>
    IBSession: finish
    Ответ
    200 OK
    Content-Type: application/octet-stream
    Content-Length: 157
    Content-Disposition: attachment; filename="e0b50f84-0443-11e9-a246-0050568908e4.json"
    
    {
    "general": {
    "response": 10200,
    "error": false,
    "message": ""
    },
    "result": {
    "storage": "files",
    "id": "2790bdee-15aa-4ebe-9263-3df9e791ced1"
    }
    }

Получение результата (файла)

Получение файла выполняется аналогично двумя запросами. Первый открывает сессию и возвращает Location. Второй возвращает данные, выполняя запросы по адресу Location. В рамках одной сессии можно выполнять несколько запросов получения данных с дозагрузкой.

  1. Открытие сессии получения результата (файла)

    Запрос
    GET https://example.com/a/smtl/1/hs/dt/storage/files/2790bdee-15aa-4ebe-9263-3df9e791ced1
    Authorization: Basic base64_encode(user:password) или Bearer access_token
    IBSession: start
    Ответ
    302
    Content-Length: 0
    Accept-Ranges: bytes
    Location: https://example.com:443/a/smtl/1/hs/dt/download/b063be9bb70cdd23291d521aa1627d29c12a83e93c71c4b12813c0ce994777f4
    Set-Cookie: ibsession=ff6d0d71-80e9-4137-8481-4deb55b9c1f2;Path=/a/smtl/1/;Version=1
  2. Получение результата (файла)

    Запрос
    GET <заголовок Location предыдущего ответа>
    Cookie: <заголовок Set-Cookie предыдущего ответа>
    IBSession: finish
    Ответ
    200
    Content-Length: 87
    Content-Disposition: attachment; filename="pause.json"
    Content-Type: application/octet-stream
    
    {
    "begin_date": "2025-09-24T17:33:39",
    "pause": 10,
    "end_date": "2025-09-24T17:33:49"
    }