Схема работы
- Внешний сервис передает параметры получения данных в приложение 1С через сервис DataTransfer запросом POST в объектное хранилище асинхронного получения данных - async. В качестве id указывается идентификатор данных.
- Параметры сохраняются в файловом хранилище и id настроек и id данных передаются в задание очереди.
- Создается задание очереди.
- В качестве результата на запрос возвращает идентификатор задания очереди.
- В задании очереди выполняется обработчик формирования данных по переданным параметрам. Результаты помещаются в файловое хранилище.
- Внешний сервис периодически опрашивает приложение 1С по идентификатору задания очереди и получает ответ, что данные еще не сформированы (код 10202), и нужно подождать, или что данные сформированы (код 10200). В результате передается id файла.
- Внешний сервис получает запрошенные данные.
Запросы выполняются парами POST → PUT или GET → GET. Первый запрос открывает сессию передачи/получения данных с авторизацией. Второй запрос выполняет непосредственную передачу/получение данных. Пары запросов должны выполняться в одном соединении.
Описание процесса
Для получения данных отправляется запрос - 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"
Стандартные коды возврата
| № | Код возврата | Это ошибка | Описание |
|---|---|---|---|
| 1 | 10200 | Выполнено | |
| 2 | 10240 | Выполнено с предупреждениями. Предупреждения в сообщении. | |
| 3 | 10400 | Да | Ошибка данных. Описание ошибок в сообщении. |
| 4 | 10404 | Данные не найдены | |
| 5 | 10500 | Да | Внутренняя ошибка. Описание ошибки в сообщении. |
Пример получения данных
Процесс получения данных состоит из нескольких последовательных запросов, адреса которых получаются из ответов предыдущих запросов:
- Отправка параметров для получения данных
- Ожидание результата
- Получение результата (файла)
На каждом этапе отправляются пары запросов:
- Запрос открытия сессии
- Отправка или получение данных по URL открытой сессии с закрытием сессии, если требуется.
Отправка параметров для получения данных
Отправка параметров выполняется двумя запросами. Первый запрос открывает сессию (передается заголовок IBSession: start) и возвращает Location для загрузки данных с сессионными Cookie, которые нужно использовать для второго запроса. Второй запрос на адрес полученного Location передает настройки и закрывает сессию (передается заголовок IBSession: finish).
Открытие сессии отправки настроек получения данных
Запрос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
Отправка настроек получения данных
Запрос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. В рамках одной сессии можно выполнять несколько запросов ожидания результата.
Открытие сессии ожидания результата
Запрос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
Ожидание результата
Запрос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. В рамках одной сессии можно выполнять несколько запросов получения данных с дозагрузкой.
Открытие сессии получения результата (файла)
Запрос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
Получение результата (файла)
Запрос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" }