# Примеры # Обработка входящего Договора В веб дизайнере ELMA4 (в ELMA3 обычном дизайнере) реализуем Глобальный модуль, где определяем нужную точку расширения, например, **ReceivableContract**. [![image-1630992751383.png](https://kb.randmgroup.ru/uploads/images/gallery/2021-09/scaled-1680-/XU9FrodakTXWfQsP-image-1630992751383.png)](https://kb.randmgroup.ru/uploads/images/gallery/2021-09/XU9FrodakTXWfQsP-image-1630992751383.png) Реализация: ```C# using System; using EleWise.ELMA.ComponentModel; using EleWise.ELMA.Documents.Contracts.Models; using EleWise.ELMA.Model.Services; using ITino.ELMA.Documents.Diadoc.Components; using ITino.ELMA.Documents.Diadoc.Models; namespace HMS.Configuration.Diadoc { /// [Component] public class ReceivableContract : ReceivableDiadocDocument { /// public override bool Enabled { // Точка расширения включена и обрабатывается get { return true; } } /// public override DiadocDocumentType DocumentType { // Какой тип документа Диадока обрабатываем get { return DiadocDocumentType.Contract; } } /// public override Guid TypeUid { // К какому типу документа в ELMA привязываем get { return InterfaceActivator.UID(); } } } } ```

Атрибут \[Component\] обязателен.

# Обработка исходящего Договора с физ. лицом В веб дизайнере ELMA4 (в ELMA3 обычном дизайнере) реализуем Глобальный модуль, где определяем нужную точку расширения, например, **SendableRNMOutContractInd**. [![image-1630994410780.png](https://kb.randmgroup.ru/uploads/images/gallery/2021-09/scaled-1680-/KLNmjzSgKCUtc9SL-image-1630994410780.png)](https://kb.randmgroup.ru/uploads/images/gallery/2021-09/KLNmjzSgKCUtc9SL-image-1630994410780.png) Реализация: ```C# using System; using EleWise.ELMA.ComponentModel; using EleWise.ELMA.ConfigurationModel; using EleWise.ELMA.Documents.Models; using EleWise.ELMA.CRM.Models; using EleWise.ELMA.Model.Services; using EleWise.ELMA.Services; using ITino.ELMA.Documents.Diadoc.Components; using ITino.ELMA.Documents.Diadoc.Exceptions; using ITino.ELMA.Documents.Diadoc.Managers; using ITino.ELMA.Documents.Diadoc.Models; using ITino.ELMA.Documents.Diadoc.Services; namespace HMS.Configuration { /// [Component] public class SendableRNMOutContractInd : SendableDiadocDocument { /// public override bool Enabled { // Точка расширения включена и обрабатывается get { return true; } } /// public override DiadocDocumentType DocumentType { // Какой тип документа Диадока обрабатываем get { return DiadocDocumentType.Contract; } } /// public override Guid TypeUid { // К какому типу документа в ELMA привязываем get { return InterfaceActivator.UID(); } } public override IContractor GetSender(IDocument doc) { // Получить отправителя документа var contract = doc as RNMOutContractInd; return contract != null ? contract.Contractor : null; } /// public override EODiadocCanSendStatus CanSendDocument(IDocument doc) { // Проверить, можно ли отправить документ в Диадок if (doc == null) return EODiadocCanSendStatus.DocIsNull; var service = Locator.GetServiceNotNull(); var contract = doc as RNMOutContractInd; if (contract != null) return service.CanSendDocument(contract.Contractor, contract.Executor); return base.CanSendDocument(doc); } /// public override ICODiadocDocument Send(IDocument doc, Guid? departmentId, Guid? userId, string comment = null) { // Отправить документв Диадок на подписание нами var contract = doc as RNMOutContractInd; if (contract == null) throw new DiadocException("Договор не может быть null"); var edata = DiadocDocumentManager.Instance.CheckContractors(contract.Contractor, contract.Executor, null, null); var result = edata.Service.SendContract(edata.FormBoxId, edata.ToBoxId, doc, contract.Number, contract.ContractDate.Value, "ГПХ/Физ.лицо/Самозанятый", null, departmentId, userId, comment); return DiadocDocumentManager.Instance.SendDocHistory(result, doc, contract.Contractor, contract.Executor, contract.Number, contract.ContractDate); } } } ```

Атрибут \[Component\] обязателен.

# Отправка документа сценарием на подписание в Диадок TODO # Добавление скан-копии В веб дизайнере ELMA4 (в ELMA3 обычном дизайнере) реализуем Глобальный модуль, где определяем нужную точку расширения, например, **DiadocIntegration**. [![image-1634021415131.png](https://kb.randmgroup.ru/uploads/images/gallery/2021-10/scaled-1680-/Db2hvaSR7ehLxNgN-image-1634021415131.png)](https://kb.randmgroup.ru/uploads/images/gallery/2021-10/Db2hvaSR7ehLxNgN-image-1634021415131.png) Реализация: ```C# using EleWise.ELMA.ComponentModel; using EleWise.ELMA.Documents.Models; using EleWise.ELMA.Files; using ITino.ELMA.Documents.Diadoc.Extensions; using ITino.ELMA.Documents.Models; using ITino.ELMA.Documents.Managers; namespace HMS.Configuration.Diadoc { [Component] public class DiadocIntegration : BaseDiadocIntegration { public override void AddScanCopy(IDocument document, BinaryFile file, string comment = null) { // Реализация собственной логики добавления скан-копии к кокументу, например: DocumentExtManager.Instance.AddScanCopy(document as IDODocument, file, checkUseScanCopy: false); } } } ```

Атрибут \[Component\] обязателен.

# Автоматический переход в процессной задаче

Начиная с 4.0.28 и 3.15.48

При обработке документов Диадока в процессе может потребоваться отслеживать состояние подписания (как для входящих, так и исходящих). Чтобы задача автоматически выполнилась по нужному переходу при наступлении события по документу в Диадоке, необходимо реализовать в сценарии процесса следующий код: ```C# using ITino.ELMA.Diadoc.Helpers; public override void OnTaskCreate(ITaskBase task, Context context) { // Где, // 13b27a4a-b94f-4bc9-9390-d7ff4fcb58bd - идентификатор задачи на диаграмме процесса // 309f52b9-087d-4971-9fc0-9cbffc61c737 - идентификатор перехода в случае, если документ Подписан task.LinkDiadocEvents(new Guid("13b27a4a-b94f-4bc9-9390-d7ff4fcb58bd"), context.DiadocDocument, new Guid("309f52b9-087d-4971-9fc0-9cbffc61c737")); } ``` Указанный пример обрабатывает событие **Подписан**. При необходимости можно указать переходы для событий **Отклонен** и **Удален**.