﻿# Пользовательский модуль для выбора МЧД при подписании

> [HTML Version](m4d-for-signing.html)

В ELMA365 начиная с версии 2025.11 можно использовать машиночитаемые доверенности, созданные с помощью решения [Управление МЧД](m4d-management.md), в качестве гарантии права пользователя подписывать документы. 

Например, сотрудник в компании заменяет руководителя. При рассмотрении договора в окне подписания он отмечает опцию **Использовать МЧД**. В появившемся поле **МЧД** он выбирает выданную на его имя доверенность из раздела **Управление МЧД > Доверенности**. После подписания сведения о доверенности можно просмотреть на боковой панели элемента в [архиве подписей](digital_signtature_in_apps.md#signed-card). 

(m4d_for_signing-1.png)

## Порядок настройки подписания с доверенностью

1. Убедитесь, что в компании:

- установлено и настроено решение [Управление МЧД](m4d-management.md), а в разделе **МЧД > Доверенности** есть действующие доверенности, которые сотрудники будут использовать при подписании;

- включён [модуль провайдера электронной подписи](set-up-digital-signature.md). 

2. Создайте пользовательский модуль с виджетами:

- [выбор МЧД в окне подписания](#create-m4d-select);

- [просмотр доверенности в архиве подписей](#create-m4d-in-archive).   
  
В виджетах с помощью скриптов настройте отображение доверенностей из раздела **Управление МЧД > Доверенности**.   

3. [Активируйте применение доверенности при подписании](#activate-m4d-for-signing) в виджете **Подпись приложения** и графическом элементе **Подписать**. 

````
Начало внимание

````
Создавать и настраивать модули могут только пользователи, включённые в группу [Администраторы](360006871932.md).

````
Конец внимание

## ````
Шаг 1. Создать модуль и виджет для выбора МЧД при подписании

1. Перейдите в раздел **Администрирование > Модули** и в правом верхнем углу нажмите кнопку **+ Модуль**. Выберите **Создать**. 

2. В открывшемся окне введите название модуля, например **МЧД при подписании**, и краткое описание его работы, добавьте иконку. Нажмите кнопку **Создать**. 

3. На странице управления модулем перейдите на вкладку **Виджеты** и нажмите кнопку **+ Виджет**. 

4. В открывшемся окне задайте следующие параметры:  
(m4d_for_signing-2.png)

- **Название**\* — укажите название виджета, например **Выбор МЧД**;

- **Код виджета**\* — задайте код виджета, использующийся при работе с Web API;  

- **Расширение** — выберите **Подпись приложения > Выбор МЧД при подписании**. 

5. Нажмите кнопку **Сохранить**. 

6. В открывшемся [дизайнере интерфейсов](interface_designer.md) перейдите на вкладку **Контекст**. Чтобы во время подписания пользователь мог выбрать определённую доверенность из раздела **Управление МЧД > Доверенности**, добавьте переменную типа [Категория (один)](360009707032.md#category), например **МЧД**. 

7. Затем перейдите на вкладку **Настройки > Доступные элементы** и включите опцию **Разрешить использование всех элементов**. Тогда при настройке скрипта будут доступны переменные приложения **Доверенности**. 

8. Перейдите на вкладку **Скрипты** и настройте скрипт для обмена данными между виджетом и приложением **Доверенности**. Таким образом записи из приложения будут доступны в созданной переменной **МЧД** во время подписания документа.   
Скрипт может выглядеть следующим образом:

````
async function onInit() \{  
    // Задаём варианты МЧД (добавляем варианты выбора в категорию из контекста)  
    const items = await Global.ns.mchd\_new.app.doverennost.search().all();  
    const m4dField = Context.fields.m4d as any;  
  
    m4dField.data.variants = (items ?? \[\]).map(item => (\{  
            name: item.data.\_\_name,  
            code: item.data.\_\_id  
        \}));  
\}  
  
// Присваиваем МЧД из контекста виджета ID выбранной пользователем МЧД для отображения  
доверенности в архиве  
async function onSelect(): Promise<void> \{  
    Context.data.poaID = Context.data.m4d?.code ?? '';  
\}

````
В скрипте заданы функции:

- `onInit()` — загрузка элементов приложения **Доверенности** в поле **МЧД** во время инициализации виджета **Выбор МЧД** в окне подписания документа;

- `onSelect()` — сохранение идентификатора выбранной доверенности в контексте виджета, чтобы в дальнейшем корректно показывать её данные в архиве подписей. 

9. Для отображения в окне подписания переменной **МЧД** перейдите на вкладку **Шаблон** и разместите переменную на поле для моделирования виджета. 

10. В открывшемся окне настройки свойства перейдите на вкладку **События**. В поле **Событие при окончании изменения значения** выберите функцию `onSelect()`, прописанную в скрипте. Она позволяет сохранить данные о доверенности для их последующего отображения в архиве подписей.

11. Сохраните изменения.

12. Сохраните и опубликуйте виджет. 

## Шаг 2. Создать виджет для отображения МЧД в архиве подписей

Информация о подписи с применением МЧД сохраняется на боковой панели элемента приложения в архиве подписей. 

(m4d_for_signing-3.png)

Чтобы просматривать сведения о доверенности, например дату выдачи, полномочия подписанта, в пользовательском модуле создайте отдельный виджет. Для отображения в нём данных об используемой МЧД в контекст виджета добавьте переменные, соответствующие свойствам приложения **Доверенности**.

Выполните следующие действия:

1. На странице управления созданного модуля **МЧД при подписании** добавьте ещё один виджет и назовите его, например, **МЧД в архиве подписей**. Для него выберите расширение **Подпись приложения > Информация о МЧД в архиве подписей**.

2. В открывшемся дизайнере интерфейсов перейдите на вкладку **Контекст**. Добавьте переменные, соответствующие полям приложения **Доверенности** с данными о МЧД, например **Доверитель**, **Полномочия**, **Дата выдачи доверенности** и т. д.  
  
Для корректной работы виджета коды и типы переменных должны совпадать с кодами и типами свойств приложения **Доверенности**. Вы можете ознакомиться с ними в разделе [Настройка МЧД > Перечень переменных](m4d-adaptation.md). 

3. Чтобы свойства отображались в виджете, перейдите на вкладку **Шаблон** и разместите их на поле для моделирования. В качестве заголовка для списка свойств добавьте виджет [Надпись](title_widget.md) и назовите его, например **Параметры используемой МЧД**.  

4. Перейдите на вкладку **Настройки > Доступные элементы** и включите опцию **Разрешить использование всех элементов**, чтобы при настройке скрипта стали доступны переменные приложения **Доверенности**.  

5. На вкладке **Скрипты** настройте скрипт для отображения данных о доверенности в архиве подписей. Он может выглядеть следующим образом:

````
async function onInit(): Promise<void> \{  
    const poaID = Context.data.poaID\!;  
    // Ищем доверенность по совпадению её ID c ID МЧД из контекста виджета  
    const item = await Global.ns.mchd\_new.app.doverennost  
        .search()  
        .where(f => f.\_\_id.eq(poaID))  
        .first();  
  
    if (\!item) \{  
        // Если доверенность не найдена, прекращаем выполнение  
        return;  
    \}  
  
    // Формируем контекст с данными об используемой доверенности  
    Context.data.individual\_entrepreneur = item.data.individual\_entrepreneur ?? undefined;  
    Context.data.data\_vid\_dover = item.data.data\_vid\_dover ?? undefined;  
    Context.data.poln\_name = item.data.poln\_name ?? undefined  
\}

6. ````
Сохраните и опубликуйте виджет. 

## Шаг 3. Активировать подписание с доверенностью 

Сотрудник может выбирать доверенность во время подписания документа:

- на форме элемента приложения в виджете [Подпись приложения](app-signature.md);

- в задаче подписания, поставленной в ходе бизнес-процесса с помощью графического элемента [Подписать](sign.md).

Когда вы настроите пользовательский модуль и создадите виджеты для применения МЧД, включите обязательность использования доверенности при подписании. Для этого в настройках виджета или графического элемента в поле **МЧД** выберите один из вариантов:

(m4d_for_signing-4.png)

- **Не использовать** — опция **Использовать МЧД** не отобразится. Пользователь не сможет выбрать доверенность;

- **Опционально** — опция **Использовать МЧД** по умолчанию не активирована, пользователь сможет её включить;

- **Предпочтительно** — опция **Использовать МЧД** активирована по умолчанию, пользователь сможет её выключить;

- **Обязательно** — опция **Использовать МЧД** активирована по умолчанию, её нельзя выключить. Пользователь не сможет подписать документ без указания доверенности.

Теперь сотрудник сможет выбирать определённую доверенность для обозначения права подписывать документ. 