Подписание документов
Для подписания документов используйте действие Sign в качестве аргумента метода PatchTask.AddToPatch().
В качестве документов в метод можно передать любые документы — входящие, исходящие неподписанные, черновики.
Так как документы могут быть однотитульными и двухтитульными, то при подписании входящих документов может понадобиться заполнить разные типы ответов.
Процедура ЗаполнитьОбычнуюПодпись(dd_DocumentBase, dd_AcceptanceToSend, dd_PowerOfAttorney)
// Здесь может быть какая-то ещё логика по обработке dd_DocumentBase
dd_AcceptanceToSend.PowerOfAttorneyToAttach.PowerOfAttorney = dd_PowerOfAttorney;
КонецПроцедуры
Процедура ЗаполнитьВторойТитул(dd_DocumentBase, dd_RecipientTitleToSend, dd_PowerOfAttorney)
TFV = dd_DocumentBase.TypeInfo.TypeId;
Если "UniversalTransferDocument" = TFV.Type
И "СЧФДОП" = TFV.Function
И "utd970_05_03_01" = TFV.Version Тогда
ЗаполнитьТитулПолучателяУПД970(dd_RecipientTitleToSend.Content,
dd_DocumentBase.Organization.MyEmployee.SessionInfo.Certificate.Thumbprint);
КонецЕсли;
dd_RecipientTitleToSend.PowerOfAttorneyToAttach.PowerOfAttorney = dd_PowerOfAttorney;
КонецПроцедуры
Процедура ЗаполнитьДанныеДляОтправкиДокумента(dd_DocumentBase, dd_DelayedDocumentContentPatchToSend, dd_PowerOfAttorney)
Если Неопределено <> dd_DelayedDocumentContentPatchToSend.DynamicSigners Тогда
TFV = dd_DocumentBase.TypeInfo.TypeId;
Если "UniversalTransferDocument" = TFV.Type
И "СЧФДОП" = TFV.Function
И "utd970_05_03_01" = TFV.Version Тогда
ЗаполнитьУниверсальногоПодписантаУПД970(dd_DelayedDocumentContentPatchToSend.DynamicSigners,
dd_DocumentBase.Organization.MyEmployee.SessionInfo.Certificate.Thumbprint);
КонецЕсли;
ИначеЕсли Неопределено <> dd_DelayedDocumentContentPatchToSend.ExtendedSigners Тогда
dd_ExtendedSigner = dd_DelayedDocumentContentPatchToSend.AddExtendedSigner();
dd_ExtendedSigner.BoxId = dd_DocumentBase.Organization.Guid;
dd_ExtendedSigner.CertificateThumbprint = dd_DocumentBase.Organization.MyEmployee.SessionInfo.Certificate.Thumbprint;
ИначеЕсли Неопределено <> dd_DelayedDocumentContentPatchToSend.Signer Тогда
dd_Signer = dd_DelayedDocumentContentPatchToSend.Signer;
dd_Signer.Surname = "Фамилия";
dd_Signer.FirstName = "Имя";
dd_Signer.Patronymic = "Отчество";
dd_Signer.JobTitle = "Должность";
dd_Signer.Inn = "966785367420";
КонецЕсли;
dd_DelayedDocumentContentPatchToSend.PowerOfAttorneyToAttach.PowerOfAttorney = dd_PowerOfAttorney;
КонецПроцедуры
Процедура ЗаполнитьОбычнуюПодписьДляЧерновика(dd_DocumentBase, dd_DraftSignatureToSend, dd_PowerOfAttorney)
// Здесь может быть какая-то ещё логика по обработке dd_DocumentBase
dd_DraftSignatureToSend.PowerOfAttorneyToAttach.PowerOfAttorney = dd_PowerOfAttorney;
КонецПроцедуры
Процедура ЗаполнитьДанныеДляОтправкиЧерновика(dd_DocumentBase, dd_DraftContentPatchToSend, dd_PowerOfAttorney)
Если Неопределено <> dd_DraftContentPatchToSend.DynamicSigners Тогда
TFV = dd_DocumentBase.TypeInfo.TypeId;
Если "UniversalTransferDocument" = TFV.Type
И "СЧФДОП" = TFV.Function
И "utd970_05_03_01" = TFV.Version Тогда
ЗаполнитьУниверсальногоПодписантаУПД970(dd_DraftContentPatchToSend.DynamicSigners,
dd_DocumentBase.Organization.MyEmployee.SessionInfo.Certificate.Thumbprint);
КонецЕсли;
ИначеЕсли Неопределено <> dd_DraftContentPatchToSend.ExtendedSigners Тогда
dd_ExtendedSigner = dd_DraftContentPatchToSend.AddExtendedSigner();
dd_ExtendedSigner.BoxId = dd_DocumentBase.Organization.Guid;
dd_ExtendedSigner.CertificateThumbprint = dd_DocumentBase.Organization.MyEmployee.SessionInfo.Certificate.Thumbprint;
ИначеЕсли Неопределено <> dd_DraftContentPatchToSend.Signer Тогда
dd_Signer = dd_DraftContentPatchToSend.Signer;
dd_Signer.Surname = "Фамилия";
dd_Signer.FirstName = "Имя";
dd_Signer.Patronymic = "Отчество";
dd_Signer.JobTitle = "Должность";
dd_Signer.Inn = "966785367420";
КонецЕсли;
dd_DraftContentPatchToSend.PowerOfAttorneyToAttach.PowerOfAttorney = dd_PowerOfAttorney;
КонецПроцедуры
Функция ПодписатьДокумент(dd_DocumentBase, dd_PowerOfAttorney)
dd_Box = dd_DocumentBase.Organization;
dd_PatchTask = dd_Box.CreatePatchTask();
dd_PatchItem_ValueCollection = dd_PatchTask.AddToPatch(dd_DocumentBase, "Sign");
Для Каждого dd_PatchItem Из dd_PatchItem_ValueCollection Цикл
// см. https://developer.kontur.ru/Docs/Diadoc/COM/HowTo/start/object_reflection.html
ИмяИнтерфейса = ПолучитьИмяИнтерфейса(dd_PatchItem.PatchContent);
Если "IAcceptanceToSend" = ИмяИнтерфейса Тогда
ЗаполнитьОбычнуюПодпись(dd_PatchItem.Document, dd_PatchItem.PatchContent, dd_PowerOfAttorney);
ИначеЕсли "IRecipientTitleToSend" = ИмяИнтерфейса Тогда
ЗаполнитьВторойТитул(dd_PatchItem.Document, dd_PatchItem.PatchContent, dd_PowerOfAttorney);
ИначеЕсли "IDelayedDocumentContentPatchToSend" = ИмяИнтерфейса Тогда
ЗаполнитьДанныеДляОтправкиДокумента(dd_PatchItem.Document, dd_PatchItem.PatchContent, dd_PowerOfAttorney);
ИначеЕсли "IDraftSignatureToSend" = ИмяИнтерфейса Тогда
ЗаполнитьОбычнуюПодписьДляЧерновика(dd_PatchItem.Document, dd_PatchItem.PatchContent, dd_PowerOfAttorney);
ИначеЕсли "IDraftContentPatchToSend" = ИмяИнтерфейса Тогда
ЗаполнитьДанныеДляОтправкиЧерновика(dd_PatchItem.Document, dd_PatchItem.PatchContent, dd_PowerOfAttorney);
Иначе
ВызватьИсключение("Неизвестный тип патча");
КонецЕсли;
КонецЦикла;
Возврат dd_PatchTask.Send();
КонецФункции