Настройка функций обмена формализованными документами

Для работы с формализованными документами предназначены карточки подвидов Документ/УПД:

  1. Исходящий УПД.

    1. Исходящий УКД.

      1. Исходящий УКД (736) в формате приказа ФНС 189.

      2. Исходящий УКД (736) в формате приказа ФНС 736.

    2. Исходящее исправление УПД.

      1. Исходящее исправление УПД (820).

    3. Исходящий УПД (820).

  2. Входящий УПД.

    1. Входящий УПД (820).

    2. Входящий УПД (970)[1].

    3. Формализованный акт.

      1. Формализованный акт (820).

    4. Входящий УКД.

      1. Входящий УКД (736) в формате приказа ФНС 189.

      2. Входящий УКД (736) в формате приказа ФНС 736.

Указанные виды карточек предоставляются с настроенными разметками, автоматом состояний и ролевой моделью.

Администратору необходимо:
  1. Добавить печатные формы для печати УПД.

  2. Добавить виртуальные папки для работы с УПД.

  1. Откройте Рабочее место администратора.

  2. Вызовите команду Свойства из контекстного меню элемента Карточки  Базовые объекты  Документ.

    Будет открыто окно со свойствами типа карточки Документ.

  3. Перейдите на страницу Преобразования и создайте преобразования:

    1. UniInvoiceRu c параметрами:

      • Название: UniInvoiceRu.

      • Псевдоним: UniInvoiceRu.

      • Тип преобразование: Пользовательское.

      • Тип содержимого: XML.

      • Данные преобразования (выберите файл): C:\Program Files (x86)\Docsvision\Edi\5.5\Xslt\UniInvoice.ru.xslt.

    2. Выполните аналогичные настройки со следующими преобразованиями:

      • UniInvoiceActRu

      • UniInvoiceCorrectionRu

      • UniInvoiceCorrFields

      • UniInvoiceFields

      • UniInvoiceSF

      • UniInvoiceTorgRu

      • UniInvoice970Ru[2]

Настройка папок для формализованных документов

Для удобства работы с исходящими формализованными документами можно добавить пользователям модуля виртуальные папки со следующими поисковыми запросами:

  • Журнал Все УПД — возвращает все виды УПД во всех статусах.

  • Журнал Исправление УПД — возвращает только исправления УПД во всех статусах.

  • Журнал Исходящий УПД — возвращает только исходящие УПД во всех статусах.

  • Журнал Корректировочный УПД — только корректировочные УПД во всех статусах.

  • Поиск УПД — выполняет поиск УПД по различным полям.

В настройках данных папок рекомендуется установить представление по умолчанию — УПД (Все).

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

Настройка ленты карточек для нового вида формализованных документов

Администратор может настроить собственные виды карточек для работы с формализованными документами. При этом добавляемые виды должны быть дочерними видами видов Входящий УПД или Исходящий УПД.

Ленты карточек видов Входящий УПД и Исходящий УПД содержат команды для вызова стандартных функций обработки формализованных документов. В собственных видах могут использоваться функции, унаследованные от родительских видов, или разработаны собственные, например, дополнительная функция проверки данных.

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

    1. Подписать документ:

      private void SignDocument_ItemClick(System.Object sender, DevExpress.XtraBars.ItemClickEventArgs e)
      {
          EdiScriptHelper.SendInvoiceReplySignature();
      }
    2. Отказать в подписании:

      private void RejectSingning_ItemClick(System.Object sender, DevExpress.XtraBars.ItemClickEventArgs e)
      {
        EdiScriptHelper.SendInvoiceReplyRejection(); (1)
      }
      1 ediScriptHelper.SendReplySignatureRejection(); следует использовать только, если точно известно, что ответ делается внутри Диадок. Для надежности проще всегда использовать EdiScriptHelper.SendInvoiceReplyRejection(); для неформализованных документов по аналогии с формализованными. Web-клиент работает похожим образом: SendInvoiceReplyRejection через boxesService.GenerateSignatureRejection.
    3. Запросить аннулирование

      private void RequestRevocation_ItemClick(System.Object sender, DevExpress.XtraBars.ItemClickEventArgs e)
      {
          EdiScriptHelper.SendRevocation();
      }
    4. Подтвердить аннулирование

      private void ApproveRevocation_ItemClick(System.Object sender, DevExpress.XtraBars.ItemClickEventArgs e)
      {
          EdiScriptHelper.SendReplyRevocationSignature();
      }
    5. Отказать в аннулировании

      private void RejectRevocation_ItemClick(System.Object sender, DevExpress.XtraBars.ItemClickEventArgs e)
      {
          EdiScriptHelper.SendReplyRevocationRejection();
      }
    6. Запросить уточнение:

      private void RequestForCorrection_ItemClick(System.Object sender, DevExpress.XtraBars.ItemClickEventArgs e)
      {
          EdiScriptHelper.SendCorrection()
      }
    7. Печать — выводить на печать печатную форму формализованного документа:

      private void Print_ItemClick(System.Object sender, DevExpress.XtraBars.ItemClickEventArgs e)
      {
          EdiScriptHelper.PrintInvoice("UniInvoiceRU"); (1)
      }
      1 В параметре метода указывается название шаблона печати:
      • UniInvoiceRU — стандартный шаблон для видов Входящий УПД и Формализованный акт.

      • UniInvoice970Ru — стандартный шаблон для вида Входящий УПД (970)[3].

      • UniInvoiceCorrectionRU — стандартный шаблон для вида Входящий УКД.

    8. Обновление печатной формы (вкладка Печатная форма). Данная функция должна вызываться при активации карточки (CardActivated).

      public virtual void FillInvoiceControl()
      {
          EdiScriptHelper.FillInvoiceHtmlControl("HTMLBrowser", "UniInvoiceRU"); (1)
      }
      1 В первом параметре (HTMLBrowser) должно быть указано название обновляемого элемента управления с типом HTML браузер.

      Во втором параметре (UniInvoiceRU) должно быть указано название шаблона печати для обновления.

      Названия стандартных шаблонов аналогичны приведенным для Печати.

  2. Исходящий УПД и подвиды.

    1. Подписать и отправить — выдаёт запрос на подписание документа квалифицированной ЭП (электронной подписью) и формирует электронное сообщение с документом для отправки оператору ЭДО.

      private void SignedAndSent_ItemClick(System.Object sender, DevExpress.XtraBars.ItemClickEventArgs e)
      {
          CardControl.Save();
          if (EdiScriptHelper.SignAndSendInvoice())
          {
              ChangeCardState("SignedAndSent");
          }
      }
    2. Заполнить данные из файла — загружает в карточку данные из приложенного основного файла — XML-файл формализованного документа, сформированный у оператора ЭДО.

      private void FillingOutData_ItemClick(System.Object sender, DevExpress.XtraBars.ItemClickEventArgs e)
      {
          CardControl.Save();
          EdiScriptHelper.UpdateDocumentDataFromInvoice();
          RefreshControls();
      }

      В Web-клиенте за заполнение данных карточки отвечает обработчик edi_updateDocumentFormInvoice. Обработчик может быть привязан к кнопке по аналогии с Windows-клиентом или быть назначен на события добавления главного файла и добавления версии файла.

      Обработчик проверяет расширение файла. Если формат файла не соответствует ожидаемому (.xml) или в файле содержатся ошибки, будет сообщение об ошибке. Проверка содержимого выполняется по аналогии с Windows-клиентом.

      Через клиентский API обработчик можно вызвать обращением к сервису $EdiFileSync с помощью метода:

      updateDocumentDataFromInvoice(documentId: string, fileId?: string)

      На сервере можно обратится к следующему сервису:

      IEdiFileSyncService.UpdateDocumentDataFromInvoice
    3. Запросить аннулирование:

      private void RequestRevocation_ItemClick(System.Object sender, DevExpress.XtraBars.ItemClickEventArgs e)
      {
          EdiScriptHelper.SendRevocation();
      }
    4. Подтвердить аннулирование:

      private void ApproveRevocation_ItemClick(System.Object sender, DevExpress.XtraBars.ItemClickEventArgs e)
      {
          EdiScriptHelper.SendReplyRevocationSignature();
      }
    5. Отказать в аннулировании:

      private void RejectRevocation_ItemClick(System.Object sender, DevExpress.XtraBars.ItemClickEventArgs e)
      {
          EdiScriptHelper.SendReplyRevocationRejection();
      }
    6. Печать:

      private void PrintUPD_ItemClick(System.Object sender, DevExpress.XtraBars.ItemClickEventArgs e)
      {
          EdiScriptHelper.PrintInvoice("UniInvoiceRU"); (1)
      }
      1 В параметре метода указывается название шаблона печати:
      • UniInvoiceRU — стандартный шаблон для видов Исходящий УПД и Исправление УПД.

      • UniInvoiceCorrectionRu — стандартный шаблон для вида Исходящий УКД.

    7. Обновление печатной формы (вкладка Печатная форма). Данная функция должна вызываться при активации карточки (CardActivated).

      public virtual void FillInvoiceControl()
      {
          EdiScriptHelper.FillInvoiceHtmlControl("HTMLBrowser", "UniInvoiceRU"); (1)
      }
      1 В первом параметре ("HTMLBrowser") должно быть указано название обновляемого элемента управления с типом HTML браузер.

      Во втором параметре (UniInvoiceRU) должно быть указано название шаблона печати для обновления.

      Названия стандартных шаблонов аналогичны приведенным для Печати.

В приведенном коде EdiScriptHelper объявлен в корневом виде УПД:

public EdiScriptHelper EdiScriptHelper
{
    get
    {
        if (ediScriptHelper == null)
            ediScriptHelper = new EdiScriptHelper(CardControl);

        return ediScriptHelper;
    }
}

Для работы указанных методов к скрипту карточки должны подключены сборки DocsVision.Edi.DocumentScript.dll и Docsvision.DocumentsManagement.dll. Сборки располагаются в каталоге клиента Docsvision.

В объявление пространств имен нужно добавить строки:
using DocsVision.Edi.DocumentScript;
using Docsvision.DocumentsManagement;

Для добавленных на ленту кнопок можно добавить методы их скрытия/отображения в зависимости от статуса обмена — проверяется с помощью методов:

  • IsSignatureReplyAvailable — проверяет возможность подписания документа или отказа в подписании, принимает значение TRUE, если документ в статусе Получен на подпись от контрагента.

  • IsRevocationReplyAvailable — проверяет возможность аннулирования документа или отказа в аннулировании; принимает значение TRUE, если документ в статусе Получен запрос на аннулирование.

  • IsRevocationRequestAvailable — проверяет возможность создания запроса на аннулирование документа, принимает значение TRUE, если документ в статусе Получен от контрагента, Отправлена ответная подпись контрагенту или Отправлен контрагенту.

  • IsReceiptReplyAvailable — проверяет возможность создания ответной квитанции.

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

Собственный вид, не унаследованный от Входящий УПД или Исходящий УПД

Если требуется создать вид, не наследующий состояния от Входящий УПД или Исходящий УПД, необходимо самостоятельно добавить в его автомат состояний следующие состояния:

  • Получена подпись от контрагента c идентификатором встроенного состояния (поле BuildInState) FF1346D7-93F0-4CA3-93F8-5AE47BCD41DD.

  • Получен отказ от контрагента c идентификатором встроенного состояния D136A114-7C59-4C6E-AB12-5348B4883AB9.

  • Требуется уточнение c идентификатором встроенного состояния 9F8A156B-68EE-4543-9527-BF47B613330E.

  • Запрошено аннулирование c идентификатором встроенного состояния E3ED8CD1-8D9E-4332-B2D3-0EE5B9FE5A10.

  • Аннулирование подтверждено c идентификатором встроенного состояния D5CC4959-5E45-4F31-B630-F2C3613EDCB7.

  • В аннулировании отказано c идентификатором встроенного состояния ED9B6929-BD9C-496B-B8A7-D9597B1BA5CA.

Также потребуется добавить в разметку элементы управления с типами и названиями, которые используются в видах Входящий УПД или Исходящий УПД.

Данная логика справедлива и для неформализованных документов.

1. В данный момент формат поддерживается только для коннектора к Диадок.
2. В данный момент формат поддерживается только для коннектора к Диадок.
3. В данный момент формат поддерживается только для коннектора к Диадок.