WriteDocumentEx - Расширенный метод создания и отправки документа (ExtSdk2)

Материал из razgovorov.ru
Версия от 13:08, 1 июня 2021; Долбицын Артём (обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Описание

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

Алгоритм работы

Асинхронная загрузка файлов в WriteDocumentEx.

  1. Принимаем на вход объект Документ с массивом вложений вида объект Файл со свойствами: ПутьКФайлу, Строка, ДвоичныеДанные, Ссылка, Обработчики. Дополнительные данные по текущим свойствам см.метод WriteDocument.
  2. Проверяем вложения на наличие Ссылок
    1. Если во всех вложениях ссылки проставлены, то записываем документ, запускаем его в документооборот и возвращаем #Результат №1.
    2. Если во вложениях проставлены не все ссылки, то возвращаем ошибку вида ExtException с кодом 308 сериализованную в строку, где в detail лежит текст "#ASYNC"( См. #Исключения №1 ). Она обозначает, что плагин загрузит файлы из вложений на СБИС.Диск и проставит недостающие ссылки в соответствующий объект Файл. Во время проставления ссылок возможны следующие события от плагина:
      1. Событе с именем "extsdk2.async.progress" о прогрессе загрузки вложений в виде объекта json сериализованного в строку.
        {
          "QueryId": "49a7caad-5eea-4d7d-8e91-d4a4f7ff6c47",
          "Progress": "50"
        }
      2. В случае ошибки плагин пробрасывает событие с именем "extsdk2.async.error". Оно содержит QueryID вызываемого метода и ExtException, сериализованные в строку( См. #Исключения №2 ). Обработка документа плагином немедленно завершается.
  3. Как только все ссылки во вложениях успешно расставлены, плагин автоматически создает редакцию документа и производит этап документооборота, указанный в документе.
    1. В случае успеха плагин пробрасывает событие с именем "extsdk2.async.complete" возвращает #Результат №2, сериализованный в строку.
    2. В случае ошибки плагин пробрасывает событие с именем "extsdk2.async.error"( См. #Исключения №2 ).

Параметры

Результат

  1. Если во вложениях указаны все ссылки и дополнительная загрузка вложений не требуется:
  2. Если требуется дополнительная загрузка вложений:

Исключения

  1. Сообщение об ошибке с текстом "#ASYNC" и кодом 308
    {
      'type': 'Error',
      'queryID': 'b3e310ec-7d85-4026-bfad-228690f38d55',
      'data': {
        'code': 308,
        'detail': '#ASYNC',
        'dump': {},
        'message': 'Ожидайте загрузки документа',
        'method_name': 'ExtSdk2.WriteDocumentEx',
        'stack': [
          {
            'method_name': 'AsyncUploadAttachments b3e310ec-7d85-4026-bfad-228690f38d55'
          }
        ]
      }
    }
  2. Сообщение extsdk2.async.error об ошибке с QueryId вызываемого метода
    {
      'type': 'Event',
      'data': {
        'channelName': 'SbisPluginEvent',
        'eventName': 'extsdk2.async.error',
        'type': 'object',
        'data': {
          'Error': {
            'code': 721,
            'detail': "Ошибка в реквизитах: Неверно указан ИНН '761010101'. Должен состоять из 10 или 12 цифр.",
            'dump': {},
            'message': 'Неверно указан ИНН',
            'method_name': 'ExtSdk2.WriteDocumentEx',
            'stack': [
              {
                'error': " : error -1 Ошибка в реквизитах: Неверно указан ИНН '761010101'. Должен состоять из 10 или 12 цифр.",
                'method_name': 'SbisWriteDocument'
              }
            ]
          },
          'QueryId': 'a0471201-ce2d-4922-831e-f80a8a781170'
        }
      }
    }

Пример успешного вызова

Запрос

{
  "Идентификатор": "a2d76238-6ea2-4b6a-ab08-1d55da03f62c",
  "Дата": "18.02.2021",
  "Номер": "210218152847",
  "Контрагент": {
    "СвЮЛ": {
      "ИНН": "1111681325",
      "КПП": "111101001",
      "Название": "Тестовый Получатель"
    }
  },
  "НашаОрганизация": {
    "СвЮЛ": {
      "ИНН": "7610101010",
      "КПП": "541100000"
    }
  },
  "Примечание": "Отправка юниттестом ExtSdk2",
  "Тип": "ДокОтгрИсх",
  "Вложение": [
    {
      "Файл": {
        "Имя": "Счет",
        "ДвоичныеДанные": "PNCk0LDQudC7INCk0L7RgNC80LDRgj0i0K3QlNCe0KHRhyIg0JLQtdGA0YHQuNGP0KTQvtGA0LzQsNGC0LA9IjMuMDEiINCY0LzRjz0iT05fU0NIRVRfX18yMDIwMTIyNV83MWM1YjBiOC1lOGJkLTRhMTEtYmYxYS1jMDhmOGZmM2I2YzciPgrCoCDCoCA80JTQvtC60YPQvNC10L3RgiDQndCw0LfQstCw0L
3QuNC1PSLQodGH0LXRgiDQvdCwINC+0L/Qu9Cw0YLRgyIg0JTQsNGC0LA9IjA4LjEyLjIwMjAiINCS0YDQtdC80Y89IjE2LjAwLjE1IiDQndC+0LzQtdGAPSIxIj4KwqAgwqAgwqAgwqAgPNCf0L7RgdGC0LDQstGJ0LjQuiDQndCw0LfQstCw0L3QuNC1PSLQntCi0JrQoNCr0KLQntCVINCQ0JrQptCY0J7Qn
dCV0KDQndCe0JUg0J7QkdCp0JXQodCi0JLQniDQpdCQ0JrQkNCh0K3QndCV0KDQk9Ce0KHQkdCr0KIiPgrCoCDCoCDCoCDCoCDCoCDCoCA80JDQtNGA0LXRgSDQotC40L89ItCu0YDQuNC00LjRh9C10YHQutC40LkiINCQ0LTRgNCi0LXQutGB0YI9IjY1NTAxNywg0KXQsNC60LDRgdC40Y8g0YDQtdGB0L8s
INCQ0LHQsNC60LDQvSDQsywg0JrRgNGL0LvQvtCy0LAg0YPQuywg0LTQvtC8IDQx0LAiPgrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCA80JDQtNGA0KDQpCDQmNC90LTQtdC60YE9IjY1NTAxNyIg0JrQvtC00KDQtdCz0LjQvtC9PSIxOSIg0JPQvtGA0L7QtD0i0JDQsdCw0LrQsNC9INCzIiDQo9C70LjRhtC
wPSLQmtGA0YvQu9C+0LLQsCDRg9C7IiDQlNC+0Lw9IjQx0LAiLz4KwqAgwqAgwqAgwqAgwqAgwqAgPC/QkNC00YDQtdGBPgrCoCDCoCDCoCDCoCDCoCDCoCA80JHQsNC90LrQoNC10LrQsiDQndCw0LjQvNCR0LDQvdC6PSLQpNCY0JvQmNCQ0Jsg0KbQldCd0KLQoNCQ0JvQrNCd0KvQmSDQkdCQ0J3QmtCQIN
CS0KLQkSAo0J/QkNCeKSIg0JHQmNCaPSIwNDQ1MjU0MTEiINCa0KHRh9C10YI9IjMwMTAxODEwMTQ1MjUwMDAwNDExIiDQoNCh0YfQtdGCPSI0MDgwMjgxMDMxMDY4MDAwMDAzMiIvPgrCoCDCoCDCoCDCoCDCoCDCoCA80JrQvtC90YLQsNC60YIvPgrCoCDCoCDCoCDCoCDCoCDCoCA80KHQstCu0Jsg0J3Qs
NC30LLQsNC90LjQtT0i0J7QotCa0KDQq9Ci0J7QlSDQkNCa0KbQmNCe0J3QldCg0J3QntCVINCe0JHQqdCV0KHQotCS0J4g0KXQkNCa0JDQodCt0J3QldCg0JPQntCh0JHQq9CiIiDQmNCd0J09IjE5MDEwNjc2OTAiINCa0J/Qnz0iMTkwMTAxMDAxIiDQntCa0J7Qn9CkPSIxMjI2NyIg0J7QmtCk0KE9IjE2
IiDQntCa0JLQrdCUPSIzNS4xNCIvPgrCoCDCoCDCoCDCoCA8L9Cf0L7RgdGC0LDQstGJ0LjQuj4KwqAgwqAgwqAgwqAgPNCf0L7QutGD0L/QsNGC0LXQu9GMINCd0LDQt9Cy0LDQvdC40LU9ItCQ0Y3RgNC+0YTQu9C+0YIsINCf0JDQniI+CsKgIMKgIMKgIMKgIMKgIMKgIDzQkNC00YDQtdGBINCi0LjQvz0
i0K7RgNC40LTQuNGH0LXRgdC60LjQuSIg0JDQtNGA0KLQtdC60YHRgj0iMTE5MDAyLCDQnNC+0YHQutCy0LAg0LMsINGD0Lsu0JDRgNCx0LDRgiwg0LQuMTAiPgrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCA80JDQtNGA0KDQpCDQmNC90LTQtdC60YE9IjExOTAxOSIg0JrQvtC00KDQtdCz0LjQvtC9PSI3Ny
Ig0KPQu9C40YbQsD0i0JDQoNCR0JDQoiDRg9C7IiDQlNC+0Lw9IjEiLz4KwqAgwqAgwqAgwqAgwqAgwqAgPC/QkNC00YDQtdGBPgrCoCDCoCDCoCDCoCDCoCDCoCA80JHQsNC90LrQoNC10LrQsi8+CsKgIMKgIMKgIMKgIMKgIMKgIDzQmtC+0L3RgtCw0LrRgi8+CsKgIMKgIMKgIMKgIMKgIMKgIDzQodCy0
K7QmyDQndCw0LfQstCw0L3QuNC1PSLQkNGN0YDQvtGE0LvQvtGCLCDQn9CQ0J4iINCY0J3QnT0iNzcxMjA0MDEyNiIg0JrQn9CfPSI3NzA0MDEwMDEiLz4KwqAgwqAgwqAgwqAgPC/Qn9C+0LrRg9C/0LDRgtC10LvRjD4KwqAgwqAgwqAgwqAgPNCf0LDRgNCw0LzQtdGC0YAg0JjQvNGPPSLQlNC+0LPQvtCy
0L7RgNCU0LDRgtCwIi8+CsKgIMKgIMKgIMKgIDzQn9Cw0YDQsNC80LXRgtGAINCY0LzRjz0i0JTQvtCz0L7QstC+0YDQndC+0LzQtdGAIi8+CsKgIMKgIMKgIMKgIDzQotCw0LHQu9CU0L7Quj4KwqAgwqAgwqAgwqAgwqAgwqAgPNCY0YLQvtCz0KLQsNCx0Lsg0JrQvtC7X9Cy0L49IjEuMDAwIiDQodGD0Lz
QvNCwPSIxNTAuMDAiINCh0YPQvNC80LDQkdC10LfQndCw0Ls9IjE1MC4wMCI+CsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIDzQndCU0KEg0KHRg9C80LzQsD0iMC4wMCIvPgrCoCDCoCDCoCDCoCDCoCDCoCA8L9CY0YLQvtCz0KLQsNCx0Ls+CsKgIMKgIMKgIMKgIMKgIMKgIDzQodGC0YDQotCw0LHQuyDQmt
C+0LQ9IjAwLTAwMDAwMTgyIiDQndCw0LfQstCw0L3QuNC1PSLQotC10LvQtdGE0L7QvSBNZWl6dSBNWCIg0JrQvtC7X9Cy0L49IjEuMDAwIiDQldC00JjQt9C8PSLRiNGCIiDQntCa0JXQmD0iNzk2IiDQodGD0LzQvNCwPSIxNTAuMDAiINCm0LXQvdCwPSIxNTAuMDAiINCY0LTQtdC90YLQuNGE0LjQutCw0
YLQvtGAPSIwMC0wMDAwMDE4MiIg0J/QvtGA0J3QvtC80LXRgD0iMSIg0KHRg9C80LzQsNCR0LXQt9Cd0LDQuz0iMTUwLjAwIj4KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgPNCQ0LrRhtC40Lcg0KHRg9C80LzQsD0i0LHQtdC3INCw0LrRhtC40LfQsCIvPgrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCA80J3Q
lNChINCh0YPQvNC80LA9IjAuMDAiINCh0YLQsNCy0LrQsD0i0LHQtdC3INCd0JTQoSIg0KLQuNC/0KHRgtCw0LLQutC4PSLRgtC10LrRgdGCIi8+CsKgIMKgIMKgIMKgIMKgIMKgIDwv0KHRgtGA0KLQsNCx0Ls+CsKgIMKgIMKgIMKgIDwv0KLQsNCx0LvQlNC+0Lo+CsKgIMKgIDwv0JTQvtC60YPQvNC10L3
Rgj4KPC/QpNCw0LnQuz4="
      }
    }
  ]
}

Ответ

{
  'type': 'Event',
  'data': {
    'channelName': 'SbisPluginEvent',
    'eventName': 'extsdk2.async.complete',
    'type': 'object',
    'data': {
      'QueryId': '4fb98709-0264-4e01-a0aa-e4d30b4b65a7',
      'Result': {
        'Идентификатор': 'a6f9d1dd-f670-4a26-a4df-2bc4162186f4',
        'ИдентификаторСеанса': '01130ddd6916401c82aafb79f2228116',
        'Контрагент': {
          'Email': '',
          'ИдентификаторИС': '628040744',
          'ИдентификаторСПП': '67879103',
          'Описание': '',
          'СвЮЛ': {
            'АдресЮридический': 'Ярославская обл., г. Рыбинск, тер. ГМ 3 по улице Толбухина, ул. Толбухина, 152914',
            'ИНН': '5534011287',
            'КПП': '324245371',
            'КодСтраны': '643',
            'Название': 'Булочка с корицей, ООО'
          },
          'Телефон': ''
        },
        'Направление': 'Исходящий',
        'НашаОрганизация': {
          'ИдентификаторИС': '',
          'ИдентификаторСПП': '67504126',
          'СвЮЛ': {
            'АдресЮридический': 'г. Ярославль',
            'ИНН': '7610101010',
            'КПП': '541100000',
            'КодСтраны': '643',
            'Название': 'Ромашенька, ООО'
          }
        },
        'Ответственный': {
          'Идентификатор': '',
          'Имя': 'Иван',
          'Отчество': 'Иванович',
          'Фамилия': 'Иванов'
        },
        'Подтип': '',
        'Примечание': '',
        'Редакция': [
          {
            'Актуален': 'Нет',
            'ДатаВремя': '01.06.2021 12.19.00',
            'Идентификатор': 'a74bb7a0-f2e9-4ace-b4fe-9ae34ed3f602',
            'ПримечаниеИС': ''
          }
        ],
        'Событие': [
          {
            'Вложение': [
              {
                'ВерсияФормата': '',
                'Дата': '',
                'Зашифрован': 'Нет',
                'Идентификатор': '41fe6106-6c87-4a21-9971-37ad02a54cde',
                'КоличествоОшибок': '',
                'КомплекснаяСвязь': 'Нет',
                'Модифицирован': 'Нет',
                'Название': 'ДвоичныеДанные',
                'Направление': 'Исходящий',
                'Номер': '',
                'ПодверсияФормата': '',
                'Подпись': [
                  {
                    'Направление': 'Исходящая',
                    'Сертификат': {
                      'Алгоритм': 'ГОСТ Р 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/58a99d90-d9e2-4e28-862f-3a09fe59e16a?is_sign=true&object=simple_file_sd&diskhmac=8Fpc7icUexC7P51oLeJPjVuLcMU%3D',
                      'Хеш': ''
                    }
                  }
                ],
                'Подтип': '',
                'Редакция': {
                  'ДатаВремя': '01.06.2021 12.19.00',
                  'Номер': '1'
                },
                'Служебный': 'Нет',
                'СсылкаВКабинет': '',
                'СсылкаНаHTML': '',
                'СсылкаНаPDF': '',
                'Сумма': '',
                'СуммаБезНДС': '',
                'Тип': '',
                'ТипШифрования': 'Отсутствует',
                'Удален': 'Нет',
                'УдаленКонтрагентом': 'Нет',
                'Упакован': 'Нет',
                'Файл': {
                  'Имя': 'ДвоичныеДанные',
                  'Ссылка': 'https://fix-disk.sbis.ru/disk/api/v1/1398284d-eae8-4f47-ad8d-f848f8c0d722_b0fc1471-18b8-4577-83b7-0ee56f0033a4?object=simple_file_sd&uuid=b50a6b41-6d82-417c-98b4-b0264d452443&diskhmac=lPgrh2negdAFEUyT0zyDq0npeCQ%3D',
                  'Хеш': ''
                }
              },
            ],
            'Группа': {
              'ДатаВремя': '',
              'Код': '3',
              'Название': 'Служебные',
              'Описание': '',
              'Приоритет': '0'
            },
            'ДатаВремя': '01.06.2021 12.19.04',
            'ДатаВремяДокумента': '',
            'Идентификатор': '01130ddd-6916-401c-82aa-fb79f2228116',
            'Комментарий': '',
            'Название': 'Загрузка'
          },
          {
            'Вложение': [
              {
                'ВерсияФормата': '',
                'Дата': '',
                'Зашифрован': 'Нет',
                'Идентификатор': '41fe6106-6c87-4a21-9971-37ad02a54cde',
                'КоличествоОшибок': '',
                'КомплекснаяСвязь': 'Нет',
                'Модифицирован': 'Нет',
                'Название': 'ДвоичныеДанные',
                'Направление': 'Исходящий',
                'Номер': '',
                'ПодверсияФормата': '',
                'Подпись': [
                  {
                    'Направление': 'Исходящая',
                    'Сертификат': {
                      'Алгоритм': 'ГОСТ Р 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/58a99d90-d9e2-4e28-862f-3a09fe59e16a?is_sign=true&object=simple_file_sd&diskhmac=8Fpc7icUexC7P51oLeJPjVuLcMU%3D',
                      'Хеш': ''
                    }
                  }
                ],
                'Подтип': '',
                'Редакция': {
                  'ДатаВремя': '01.06.2021 12.19.00',
                  'Номер': '1'
                },
                'Служебный': 'Нет',
                'СсылкаВКабинет': '',
                'СсылкаНаHTML': '',
                'СсылкаНаPDF': '',
                'Сумма': '',
                'СуммаБезНДС': '',
                'Тип': '',
                'ТипШифрования': 'Отсутствует',
                'Удален': 'Нет',
                'УдаленКонтрагентом': 'Нет',
                'Упакован': 'Нет',
                'Файл': {
                  'Имя': 'ДвоичныеДанные',
                  'Ссылка': 'https://fix-disk.sbis.ru/disk/api/v1/1398284d-eae8-4f47-ad8d-f848f8c0d722_b0fc1471-18b8-4577-83b7-0ee56f0033a4?object=simple_file_sd&uuid=b50a6b41-6d82-417c-98b4-b0264d452443&diskhmac=lPgrh2negdAFEUyT0zyDq0npeCQ%3D',
                  'Хеш': ''
                }
              },
            ],
            'Группа': {
              'ДатаВремя': '',
              'Код': '0',
              'Название': 'Отправка',
              'Описание': 'Отправлено',
              'Приоритет': '0'
            },
            'ДатаВремя': '01.06.2021 12.19.05',
            'ДатаВремяДокумента': '',
            'Идентификатор': '280a00d2-6be5-4968-8735-4c7a37fbad0e',
            'Исполнитель': {
              'Идентификатор': '',
              'Имя': 'Иван',
              'Отчество': 'Иванович',
              'Фамилия': 'Иванов'
            },
            'Комментарий': '',
            'Название': 'Отправка'
          }
        ],
        'Состояние': {
          'Код': '3',
          'Название': 'Отправлен',
          'НеполнаяОбработка': 'Нет',
          'Описание': 'Ожидается доставка',
          'Примечание': '',
          'Сложное': 'Нет'
        },
        'СсылкаДляКонтрагент': 'https://fix-plugin.sbis.ru/svrd/v2/inc_pack/01130ddd-6916-401c-82aa-fb79f2228116',
        'СсылкаДляНашаОрганизация': 'https://fix-plugin.sbis.ru/opendoc.html?guid=159e7afd-b1db-48a1-9c65-8fc2bb8f3511',
        'Тип': 'ДокОтгрИсх'
      },
      'Stat': {...}
    }
  }
}