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

Материал из razgovorov.ru
Перейти к: навигация, поиск

Описание

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

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

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

  1. Принимаем на вход объект Документ с массивом вложений вида объект Файл со свойствами: Путь к файлу, Строка, Двоичные данные, Ссылка, Обработчики. Дополнительные данные по текущим свойствам см.метод WriteDocument.
  2. Проверяем вложения на наличие Ссылок
    1. Если во всех вложениях ссылки проставлены, то:
      1. Выполняем СБИС.ЗаписатьДокумент.
      2. Если необходимо действие для документа, то выполняем: СБИС.ПодготовитьДействие и СБИС.ВыполнитьДействие.
    2. Если во вложениях проставлены не все ссылки, то возвращаем ошибку с текстом "#ASYNC" и кодом 308. Она обозначает, что плагин сам проставит недостающие ссылки. Необходимо подождать.
      1. Во время данного этапа возможны сообщения от плагина о проценте обработки вложений.
      2. В случае ошибки плагин выдает соответствующее сообщение. Обработка документа плагином немедленно завершается.
  3. Данный шаг выполняем при условии, что все ссылки во вложениях проставлены. Документ готов к обработке плагином.
    1. Выполняем запись документа через СБИС.ЗаписатьДокумент.
    2. Если необходимо действие для документа, то выполняем: СБИС.ПодготовитьДействие и СБИС.ВыполнитьДействие.
    3. При успешном выполнении данных операций плагин выдает сообщение с итоговым объектом документ. См. "Результат"
    4. В случае ошибки плагин выдает соответствующее сообщение.


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

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

Параметры

Результат

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

Исключения

  1. Сообщение об ошибке с текстом "#ASYNC" и кодом 308
    {
      "code": 308,
      "detail": "#ASYNC",
      "dump": {},
      "message": "Ожидайте загрузки документа",
      "method_name": "ExtSdk2.AsyncWriteDocumentEx",
      "stack": [
        {
          "method_name": "AsyncWriteDocument 49a7caad-5eea-4d7d-8e91-d4a4f7ff6c47"
        }
      ]
    }
  2. Сообщение об ошибке с 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&params=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&params=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
      }
    }
  }
}