WriteDocumentEx - Расширенный метод создания и отправки документа (ExtSdk2)
Версия от 15:45, 18 февраля 2021; Долбицын Артём (обсуждение | вклад)
Содержание
Описание
Метод позволяет за один вызов записать и запустить документооборот по документу.
Алгоритм работы
Асинхронная загрузка файлов в WriteDocumentEx.
- Принимаем на вход объект Документ с массивом вложений вида объект Файл со свойствами: Путь к файлу, Строка, Двоичные данные, Ссылка, Обработчики. Дополнительные данные по текущим свойствам см.метод WriteDocument.
- Проверяем вложения на наличие Ссылок
- Если во всех вложениях ссылки проставлены, то:
- Выполняем СБИС.ЗаписатьДокумент.
- Если необходимо действие для документа, то выполняем: СБИС.ПодготовитьДействие и СБИС.ВыполнитьДействие.
- Если во вложениях проставлены не все ссылки, то возвращаем ошибку с текстом "#ASYNC" и кодом 308. Она обозначает, что плагин сам проставит недостающие ссылки. Необходимо подождать.
- Во время данного этапа возможны сообщения от плагина о проценте обработки вложений.
- В случае ошибки плагин выдает соответствующее сообщение. Обработка документа плагином немедленно завершается.
- Если во всех вложениях ссылки проставлены, то:
- Данный шаг выполняем при условии, что все ссылки во вложениях проставлены. Документ готов к обработке плагином.
- Выполняем запись документа через СБИС.ЗаписатьДокумент.
- Если необходимо действие для документа, то выполняем: СБИС.ПодготовитьДействие и СБИС.ВыполнитьДействие.
- При успешном выполнении данных операций плагин выдает сообщение с итоговым объектом документ. См. "Результат"
- В случае ошибки плагин выдает соответствующее сообщение.
Асинхронная загрузка файлов в WriteDocumentEx.
- Принимаем на вход объект Документ с массивом вложений вида объект Файл со свойствами: Путь к файлу, Строка, Двоичные данные, Ссылка, Обработчики. Дополнительные данные по текущим свойствам см.метод WriteDocument.
- Проверяем вложения на наличие Ссылок
- Если во всех вложениях ссылки проставлены, то записываем документ, запускаем его в документооборот и возвращаем #Результат №1.
- Если во вложениях проставлены не все ссылки, то возвращаем ошибку вида ExtException с кодом 308 сериализованную в строку, где в detail лежит текст "#ASYNC"( См. #Исключения №1 ). Она обозначает, что плагин загрузит файлы из вложений на СБИС.Диск и проставит недостающие ссылки в соответствующий объект Файл. Во время проставления ссылок возможны следующие события от плагина:
- Событе с именем "extsdk2.writedocumentex.progress" о прогрессе загрузки вложений в виде объекта json сериализованного в строку.
{ "QueryId": "49a7caad-5eea-4d7d-8e91-d4a4f7ff6c47", "Progress": "50" }
- В случае ошибки плагин пробрасывает событие с именем "extsdk2.writedocumentex.error". Оно содержит QueryID вызываемого метода и ExtException, сериализованные в строку( См. #Исключения №2 ). Обработка документа плагином немедленно завершается.
- Событе с именем "extsdk2.writedocumentex.progress" о прогрессе загрузки вложений в виде объекта json сериализованного в строку.
- Как только все ссылки во вложениях успешно расставлены, плагин автоматически создает редакцию документа и производит этап документооборота, указанный в документе.
- В случае успеха плагин пробрасывает событие с именем "extsdk2.writedocumentex.complete" возвращает #Результат №2, сериализованный в строку.
- В случае ошибки плагин пробрасывает событие с именем "extsdk2.writedocumentex.error"( См. #Исключения №2 ).
Параметры
- Document ! (объект) - объект Документ
Результат
- Если во вложениях указаны все ссылки и дополнительная загрузка вложений не требуется:
- Result (объект) - объект Документ
- Stat (объект) - статистика времени выполнения операции
- Если требуется дополнительная загрузка вложений:
- QueryId (строка) - Идентификатор запроса в плагин
- Result (объект) - объект Документ
- Stat (объект) - статистика времени выполнения операции
Исключения
- Сообщение об ошибке с текстом "#ASYNC" и кодом 308
{ "code": 308, "detail": "#ASYNC", "dump": {}, "message": "Ожидайте загрузки документа", "method_name": "ExtSdk2.AsyncWriteDocumentEx", "stack": [ { "method_name": "AsyncWriteDocument 49a7caad-5eea-4d7d-8e91-d4a4f7ff6c47" } ] }
- Сообщение об ошибке с QueryId вызываемого метода
{ "QueryId": "49a7caad-5eea-4d7d-8e91-d4a4f7ff6c47", "Error": "Ошибка ExtException сериализованная в строку" }
Пример успешного вызова
Запрос
Ответ
{
'QueryId': '0dd275fe-d05c-461c-8b06-a7298d5c22ed',
'Result': {
'Идентификатор': 'a2d76238-6ea2-4b6a-ab08-1d55da03f62c',
'ИдентификаторСеанса': 'dae41901729d4b7f9acdb760a6549a62',
'Контрагент': {
'Email': '',
'ИдентификаторИС': '',
'ИдентификаторСПП': '',
'Описание': '',
'СвЮЛ': {
'ИНН': '1111681325',
'КПП': '111101001',
'КодСтраны': '643',
'Название': 'Тестовый Получатель'
},
'Телефон': ''
},
'Направление': 'Исходящий',
'НашаОрганизация': {
'ИдентификаторИС': '',
'ИдентификаторСПП': '67504126',
'СвЮЛ': {
'ИНН': '7610101010',
'КПП': '541100000',
'КодСтраны': '643',
'Название': 'Ромашенька, ООО'
}
},
'Ответственный': {
'Идентификатор': '',
'Имя': 'Артём',
'Отчество': 'Викторович',
'Фамилия': 'Долбицын'
},
'Подтип': '',
'Примечание': '',
'Редакция': [
{
'Актуален': 'Нет',
'ДатаВремя': '18.02.2021 15.28.54',
'Идентификатор': '9bc33b03-396a-4bf0-bac1-255eed836012',
'ПримечаниеИС': ''
}
],
'Событие': [
{
'Вложение': [
{
'ВерсияФормата': '3.01',
'Дата': '08.12.2020',
'Зашифрован': 'Нет',
'Идентификатор': 'd32559d0-9e4d-4e5a-be3c-71163b34d4d9',
'КоличествоОшибок': '',
'Модифицирован': 'Нет',
'Название': 'Счет на оплату 08.12.2020 № 1 на сумму 150 р. без НДС',
'Направление': 'Исходящий',
'Номер': '1',
'ПодверсияФормата': '',
'Подпись': [
{
'Направление': 'Исходящая',
'Сертификат': {
'Алгоритм': 'ГОСТ Р 34.10-2012 256',
'ДвоичныеДанные': '',
'ДействителенПо': '15.03.2022 10.46.29',
'ДействителенС': '15.12.2020 10.36.29',
'Должность': 'Директор',
'ИНН': '7610101010',
'Издатель': '"ООО Тестовая ""КОМПАНИЯ ""ТЕНЗОР""", "ООО Тестовая ""КОМПАНИЯ ""ТЕНЗОР""", Московский проспект д.12, г. Ярославль, Ярославская обл., RU, 007605016030, 1027600787994, test-ca_tensor@tensor.ru',
'Квалифицированный': 'Да',
'Ключ': {
'Активирован': 'Нет',
'СпособАктивации': '',
'Тип': 'Клиентский'
},
'КодСтраны': 'RU',
'Название': 'ООО "РЫБМОРЕ"',
'ОГРНИП': '',
'Отпечаток': '24568C4DB9778C3B145393302C17DE219B27DE93',
'СерийныйНомер': '01581F800092AC87AC41D45D9F2D1F2ED5',
'ФИО': 'Долбицын Артём Викторович'
},
'Тип': 'Отсоединенная',
'Файл': {
'Имя': 'Счет.sgn',
'Ссылка': 'https://fix-disk.sbis.ru/disk/api/v1/c40b3180-c00e-44e7-ac8b-ae72d3fc87b7?is_sign=true&object=simple_file_sd&diskhmac=peNKrB0EGhMTEL13r6Uza6wcvAk%3D',
'Хеш': ''
}
}
],
'Подтип': 'TENSOR_1',
'Редакция': {
'ДатаВремя': '18.02.2021 15.28.54',
'Номер': '1'
},
'Служебный': 'Нет',
'СсылкаВКабинет': '',
'СсылкаНаHTML': 'https://fix-online.sbis.ru/service/?method=%D0%A4%D0%AD%D0%94.DisplayInHTML¶ms=eyLQmNC00J4iOiI0NzIzNjkwNCIsItCY0LzRj9Ce0LHRitC10LrRgtCwIjoi0JTQvtC60YPQ%0AvNC10L3RgiIsItCf0YDQtdC00YHRgtCw0LLQu9C10L3QuNC1Ijoi0J%2FRgNC%2B0YHQvNC%2B0YLR%0AgCzQn9C10YfQsNGC0YwiLCLQmNC80Y%2FQnNC10YLQvtC00LAiOiLQktC90LXRiNC90LjQudCU%0A0L7QutGD0LzQtdC90YIuUmVhZFN0YW1wSW5mbyIsItCf0LDRgNCw0LzQtdGC0YDRi9Cc0LXR%0AgtC%2B0LTQsCI6eyJkIjpbIjQ3MjM2OTA0Il0sInMiOlt7Im4iOiLQmNC00J4iLCJ0Ijoi0KHR%0AgtGA0L7QutCwIn1dLCJfdHlwZSI6InJlY29yZCJ9LCLQn9Cw0YDQsNC80LXRgtGA0YsiOnsi%0AZCI6W3RydWUsItCS0L3QtdGI0L3QuNC50JTQvtC60YPQvNC10L3Rgi5SZWFkU3RhbXBJbmZv%0AIix7ImQiOlsiNDcyMzY5MDQiXSwicyI6W3sibiI6ItCY0LTQniIsInQiOiLQodGC0YDQvtC6%0A0LAifV0sIl90eXBlIjoicmVjb3JkIn1dLCJzIjpbeyJuIjoi0J3QvtGA0LzQsNC70LjQt9C%2B%0A0LLQsNGC0YwiLCJ0Ijoi0JvQvtCz0LjRh9C10YHQutC%2B0LUifSx7Im4iOiLQmNC80Y%2FQnNC1%0A0YLQvtC00LAiLCJ0Ijoi0KHRgtGA0L7QutCwIn0seyJuIjoi0J%2FQsNGA0LDQvNC10YLRgNGL%0A0JzQtdGC0L7QtNCwIiwidCI6ItCX0LDQv9C40YHRjCJ9XSwiX3R5cGUiOiJyZWNvcmQifX0%3D&protocol=3&id=0&srv=1',
'СсылкаНаPDF': '',
'Сумма': '150.00',
'СуммаБезНДС': '',
'Тип': 'ЭДОСч',
'ТипШифрования': 'Отсутствует',
'Удален': 'Нет',
'УдаленКонтрагентом': 'Нет',
'Упакован': 'Нет',
'Файл': {
'Имя': 'Счет',
'Ссылка': 'https://fix-disk.sbis.ru/disk/api/v1/c8b10c16-542f-4ff0-a442-ecd86635ba1d_2fa157c4-49cf-4971-b33b-5731a6bc95c6?object=simple_file_sd&uuid=c06223fa-d35b-47a9-b1b5-1c373d2d4099&diskhmac=7sm5S%2Bp1tfxyu%2BZX9N4qwUf7yrI%3D',
'Хеш': ''
}
}
],
'Группа': {
'ДатаВремя': '',
'Код': '3',
'Название': 'Служебные',
'Описание': '',
'Приоритет': '0'
},
'ДатаВремя': '18.02.2021 15.28.55',
'ДатаВремяДокумента': '',
'Идентификатор': 'dae41901-729d-4b7f-9acd-b760a6549a62',
'Комментарий': '',
'Название': 'Загрузка'
},
{
'Вложение': [
{
'ВерсияФормата': '3.01',
'Дата': '08.12.2020',
'Зашифрован': 'Нет',
'Идентификатор': 'd32559d0-9e4d-4e5a-be3c-71163b34d4d9',
'КоличествоОшибок': '',
'Модифицирован': 'Нет',
'Название': 'Счет на оплату 08.12.2020 № 1 на сумму 150 р. без НДС',
'Направление': 'Исходящий',
'Номер': '1',
'ПодверсияФормата': '',
'Подпись': [
{
'Направление': 'Исходящая',
'Сертификат': {
'Алгоритм': 'ГОСТ Р 34.10-2012 256',
'ДвоичныеДанные': '',
'ДействителенПо': '15.03.2022 10.46.29',
'ДействителенС': '15.12.2020 10.36.29',
'Должность': 'Директор',
'ИНН': '7610101010',
'Издатель': '"ООО Тестовая ""КОМПАНИЯ ""ТЕНЗОР""", "ООО Тестовая ""КОМПАНИЯ ""ТЕНЗОР""", Московский проспект д.12, г. Ярославль, Ярославская обл., RU, 007605016030, 1027600787994, test-ca_tensor@tensor.ru',
'Квалифицированный': 'Да',
'Ключ': {
'Активирован': 'Нет',
'СпособАктивации': '',
'Тип': 'Клиентский'
},
'КодСтраны': 'RU',
'Название': 'ООО "РЫБМОРЕ"',
'ОГРНИП': '',
'Отпечаток': '24568C4DB9778C3B145393302C17DE219B27DE93',
'СерийныйНомер': '01581F800092AC87AC41D45D9F2D1F2ED5',
'ФИО': 'Долбицын Артём Викторович'
},
'Тип': 'Отсоединенная',
'Файл': {
'Имя': 'Счет.sgn',
'Ссылка': 'https://fix-disk.sbis.ru/disk/api/v1/c40b3180-c00e-44e7-ac8b-ae72d3fc87b7?is_sign=true&object=simple_file_sd&diskhmac=peNKrB0EGhMTEL13r6Uza6wcvAk%3D',
'Хеш': ''
}
}
],
'Подтип': 'TENSOR_1',
'Редакция': {
'ДатаВремя': '18.02.2021 15.28.54',
'Номер': '1'
},
'Служебный': 'Нет',
'СсылкаВКабинет': '',
'СсылкаНаHTML': 'https://fix-online.sbis.ru/service/?method=%D0%A4%D0%AD%D0%94.DisplayInHTML¶ms=eyLQmNC00J4iOiI0NzIzNjkwNCIsItCY0LzRj9Ce0LHRitC10LrRgtCwIjoi0JTQvtC60YPQ%0AvNC10L3RgiIsItCf0YDQtdC00YHRgtCw0LLQu9C10L3QuNC1Ijoi0J%2FRgNC%2B0YHQvNC%2B0YLR%0AgCzQn9C10YfQsNGC0YwiLCLQmNC80Y%2FQnNC10YLQvtC00LAiOiLQktC90LXRiNC90LjQudCU%0A0L7QutGD0LzQtdC90YIuUmVhZFN0YW1wSW5mbyIsItCf0LDRgNCw0LzQtdGC0YDRi9Cc0LXR%0AgtC%2B0LTQsCI6eyJkIjpbIjQ3MjM2OTA0Il0sInMiOlt7Im4iOiLQmNC00J4iLCJ0Ijoi0KHR%0AgtGA0L7QutCwIn1dLCJfdHlwZSI6InJlY29yZCJ9LCLQn9Cw0YDQsNC80LXRgtGA0YsiOnsi%0AZCI6W3RydWUsItCS0L3QtdGI0L3QuNC50JTQvtC60YPQvNC10L3Rgi5SZWFkU3RhbXBJbmZv%0AIix7ImQiOlsiNDcyMzY5MDQiXSwicyI6W3sibiI6ItCY0LTQniIsInQiOiLQodGC0YDQvtC6%0A0LAifV0sIl90eXBlIjoicmVjb3JkIn1dLCJzIjpbeyJuIjoi0J3QvtGA0LzQsNC70LjQt9C%2B%0A0LLQsNGC0YwiLCJ0Ijoi0JvQvtCz0LjRh9C10YHQutC%2B0LUifSx7Im4iOiLQmNC80Y%2FQnNC1%0A0YLQvtC00LAiLCJ0Ijoi0KHRgtGA0L7QutCwIn0seyJuIjoi0J%2FQsNGA0LDQvNC10YLRgNGL%0A0JzQtdGC0L7QtNCwIiwidCI6ItCX0LDQv9C40YHRjCJ9XSwiX3R5cGUiOiJyZWNvcmQifX0%3D&protocol=3&id=0&srv=1',
'СсылкаНаPDF': '',
'Сумма': '150.00',
'СуммаБезНДС': '',
'Тип': 'ЭДОСч',
'ТипШифрования': 'Отсутствует',
'Удален': 'Нет',
'УдаленКонтрагентом': 'Нет',
'Упакован': 'Нет',
'Файл': {
'Имя': 'Счет',
'Ссылка': 'https://fix-disk.sbis.ru/disk/api/v1/c8b10c16-542f-4ff0-a442-ecd86635ba1d_2fa157c4-49cf-4971-b33b-5731a6bc95c6?object=simple_file_sd&uuid=c06223fa-d35b-47a9-b1b5-1c373d2d4099&diskhmac=7sm5S%2Bp1tfxyu%2BZX9N4qwUf7yrI%3D',
'Хеш': ''
}
}
],
'Группа': {
'ДатаВремя': '',
'Код': '0',
'Название': 'Отправка',
'Описание': 'Отправлено',
'Приоритет': '0'
},
'ДатаВремя': '18.02.2021 15.28.57',
'ДатаВремяДокумента': '',
'Идентификатор': 'd4a30bb1-e250-42fb-8466-e0c1105eeb5b',
'Исполнитель': {
'Идентификатор': '',
'Имя': 'Артём',
'Отчество': 'Викторович',
'Фамилия': 'Долбицын'
},
'Комментарий': '',
'Название': 'Отправка'
}
],
'Состояние': {
'Код': '2',
'Название': 'Отослано приглашение',
'НеполнаяОбработка': 'Нет',
'Описание': 'Ожидается доставка',
'Примечание': '',
'Сложное': 'Нет'
},
'СсылкаДляКонтрагент': 'https://fix-online.sbis.ru/svrd/v2/inc_pack/dae41901-729d-4b7f-9acd-b760a6549a62',
'СсылкаДляНашаОрганизация': 'https://fix-online.sbis.ru/opendoc.html?guid=66fb1da1-e402-4b74-bcaa-17a9f86be198',
'Тип': 'ДокОтгрИсх'
},
'Stat': {
'CryptoPlugin': {
'CryptoPlugin.CreateSignOnHash': {
'count': 1,
'time': 41
}
},
'ExtSdk2': {
'ExtSdk2.AsyncWriteDocument': {
'count': 1,
'time': 0
},
'ExtSdk2.AsyncWriteDocumentEx': {
'count': 1,
'time': 0
},
'ExtSdk2.ExecuteAction': {
'count': 1,
'time': 31
},
'ExtSdk2.ExecuteActionEx': {
'count': 1,
'time': 302
},
'ExtSdk2.PrepareAction': {
'count': 1,
'time': 0
},
'ExtSdk2.PrepareDocument': {
'count': 1,
'time': 0
}
},
'FileLoader': {
'ExtSdk2.FileLoaderAttachment_0': {
'count': 1,
'time': 255
},
'ExtSdk2.FileLoaderDocument': {
'count': 1,
'time': 1
},
'ExtSdk2.OnFileLoadComplete': {
'count': 1,
'time': -256
}
},
'СБИС': {
'SbisExecuteAction': {
'count': 1,
'time': 1619
},
'SbisPrepareAction': {
'count': 1,
'time': 381
},
'SbisWriteDocument': {
'count': 1,
'time': 1036
}
}
}
}