Как выполнить ответные действия по документам
Большинство ответных действий с документом выполняется с помощью метода PatchTask.AddToPatch()
.
Создайте PatchTask, см.
Box.CreatePatchTask()
.Определите с какими документами и что необходимо сделать.
Заполните коллекцию ответов на отправку. Здесь стоит учитывать, что возможны ситуации, когда в PatchTask передан один набор документов, а ответы нужно сформировать для других. Такое возможно, если работа ведётся с документами закрытых пакетов или черновиками
Отправьте сформированные ответы.
Перем dd_Reflector_;
Процедура ОтветитьНаДокументы(dd_Box, ДокументИлиДокументы)
// https://developer.kontur.ru/Docs/Diadoc/COM/ComObjects/PatchTask.html
dd_PatchTask = dd_Box.CreatePatchTask();
// В один dd_PatchTask можно помещать документы из разных сообщений, пакетов и с разным действием
// Т.е. можно одновременно отказать под одним документам и подписать другие
ОтветноеДействие = ВычислитьОтветноеДействие(ДокументИлиДокументы);
dd_ValueCollection = dd_PatchTask.AddToPatch(ДокументИлиДокументы, ОтветноеДействие);
Для Каждого dd_PatchItem Из dd_ValueCollection Цикл
ЗаполнитьОтвет(dd_PatchItem);
КонецЦикла;
dd_PatchResult = dd_PatchTask.Send();
КонецПроцедуры
Процедура ЗаполнитьОтвет(dd_PatchItem)
dd_Reflector = Reflector();
PatchContent = dd_PatchItem.Content;
dd_TypeDesc = dd_Reflector.Describe(PatchContent);
ИмяИнтерфейса = dd_TypeDesc.GetInterfaceName();
Если "IDraftContentPatchToSend" = ИмяИнтерфейса Тогда
ЗаполнитьПатчКонтентаЧерновика(dd_PatchItem);
ИначеЕсли "IDraftSignatureToSend" = ИмяИнтерфейса Тогда
ЗаполнитьПодписьЧерновика(dd_PatchItem);
ИначеЕсли "IAcceptanceToSend" = ИмяИнтерфейса Тогда
ЗаполнитьПростуюПодпись(dd_PatchItem);
ИначеЕсли "IDelayedDocumentContentPatchToSend" = ИмяИнтерфейса Тогда
ЗаполнитьПатчКонтентаДокументаСОтложеннойОтправкой(dd_PatchItem)
ИначеЕсли "IRecipientTitleToSend" = ИмяИнтерфейса Тогда
ЗаполнитьОтветныйТитул(dd_PatchItem)
ИначеЕсли "IReceiptsToSend" = ИмяИнтерфейса Тогда
ЗаполнитьИоПы(dd_PatchItem);
ИначеЕсли "IRejectionToSend" = ИмяИнтерфейса Тогда
ЗаполнитьОтказ(dd_PatchItem);
ИначеЕсли "ICorrectionRequestToSend" = ИмяИнтерфейса Тогда
ЗаполнитьЗапросКорректировки(dd_PatchItem);
ИначеЕсли "IRevocationRequestToSend" = ИмяИнтерфейса Тогда
ЗаполнитьЗапросАннулирования(dd_PatchItem);
КонецЕсли;
КонецПроцедуры
Процедура ИнициализироватьReflector()
dd_Reflector_ = Новый ComОбъект("AddIn.Diadoc.Reflector");
КонецПроцедуры
Функция Reflector()
Если dd_Reflector_ = Неопределено Тогда
ИнициализироватьReflector();
КонецЕсли;
Возврат dd_Reflector_;
КонецФункции
Функция ПолучитьTFV(dd_DocumentBase)
TFV = Новый Структура;
TFV.Вставить("T", dd_DocumentBase.TypeNamedId);
TFV.Вставить("F", dd_DocumentBase.DocumentFunction);
TFV.Вставить("V", dd_DocumentBase.Version);
Возврат Новый ФиксированнаяСтруктура(TFV);
КонецФункции
Процедура ЗаполнитьМЧД(dd_PowerOfAttorneyToAttach)
// https://developer.kontur.ru/Docs/Diadoc/COM/ComObjects/PowerOfAttorneyToAttach.html
dd_PowerOfAttorneyToAttach.UseDefault = True;
КонецПроцедуры
Процедура ЗаполнитьПростогоПодписанта(dd_Signer)
// https://developer.kontur.ru/Docs/Diadoc/COM/ComObjects/Signer.html
dd_Signer.Surname = "Фамилия";
dd_Signer.FirstName = "Имя";
dd_Signer.Patronymic = "Отчество";
dd_Signer.JobTitle = "Должность";
dd_Signer.Inn = "966785367420";
КонецПроцедуры
Процедура ЗаполнитьРасширенногоПодписанта(dd_ExtendedSigner)
// https://developer.kontur.ru/Docs/Diadoc/COM/ComObjects/ExtendedSigner.html
dd_SignerDetails = dd_ExtendedSigner.SignerDetails;
dd_SignerDetails.Surname = "Петров";
dd_SignerDetails.FirstName = "Пётр";
dd_SignerDetails.Powers = "MadeAndSignOperation";
dd_SignerDetails.PowersBase = "Должностные обязанности";
dd_SignerDetails.Status = "BuyerEmployee";
dd_SignerDetails.SignerType = "LegalEntity";
dd_SignerDetails.Inn = "6699000000";
КонецПроцедуры
Процедура ЗаполнитьУниверсальногоПодписанта_UniversalTransferDocument_ДОП_utd820_05_01_02_hyphen(dd_DynamicContent)
// Получить описание (XSD схему) контента можно методом Box.SaveSignersDynamicContentXSD(...)
// https://developer.kontur.ru/Docs/Diadoc/COM/ComObjects/Box.html#Box.SaveSignersDynamicContentXSD
dd_DynamicSigners = dd_DynamicContent.DynamicSigners.Signers;
dd_DynamicSigner = dd_DynamicSigners.AddSigner();
dd_SignerDetails = dd_DynamicSigner.SignerDetails;
dd_SignerDetails.LastName = "Петров";
dd_SignerDetails.FirstName = "Пётр";
dd_SignerDetails.MiddleName = "Петрович";
dd_SignerDetails.SignerPowers = "1";
dd_SignerDetails.SignerPowersBase = "Должностные обязанности";
dd_SignerDetails.SignerStatus = "1";
dd_SignerDetails.SignerType = "1";
dd_SignerDetails.Inn = "6699000000";
КонецПроцедуры
Процедура ЗаполнитьУниверсальныйКонтентТитула_UniversalTransferDocument_ДОП_utd820_05_01_02_hyphen(dd_DynamicContent)
// Получить описание (XSD схему) контента можно методом Box.SaveTitleDynamicContentXSD(...)
// https://developer.kontur.ru/Docs/Diadoc/COM/ComObjects/Box.html#Box.SaveTitleDynamicContentXSD
UniversalTransferDocumentBuyerTitle = dd_DynamicContent.UniversalTransferDocumentBuyerTitle;
UniversalTransferDocumentBuyerTitle.DocumentCreator = "ООО ""Ромашка""";
UniversalTransferDocumentBuyerTitle.OperationContent = "Принято без претензий";
dd_SignerDetails = UniversalTransferDocumentBuyerTitle.Signers.AddItems().SignerDetails;
dd_SignerDetails.LastName = "Петров";
dd_SignerDetails.FirstName = "Пётр";
dd_SignerDetails.MiddleName = "Петрович";
dd_SignerDetails.SignerPowers = "1";
dd_SignerDetails.SignerPowersBase = "Должностные обязанности";
dd_SignerDetails.SignerStatus = "1";
dd_SignerDetails.SignerType = "1";
dd_SignerDetails.Inn = "6699000000";
КонецПроцедуры
Процедура ЗаполнитьУниверсальногоПодписанта(dd_DynamicContent, TFV)
// https://developer.kontur.ru/Docs/Diadoc/COM/ComObjects/DynamicContent.html
Если "UniversalTransferDocument" = TFV.T Тогда
Если "ДОП" = TFV.F Тогда
Если "utd820_05_01_02_hyphen" = TFV.V Тогда
ЗаполнитьУниверсальногоПодписанта_UniversalTransferDocument_ДОП_utd820_05_01_02_hyphen(dd_DynamicContent);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьУниверсальныйКонтентТитула(dd_DynamicContent, TFV)
// https://developer.kontur.ru/Docs/Diadoc/COM/ComObjects/DynamicContent.html
Если "UniversalTransferDocument" = TFV.T Тогда
Если "ДОП" = TFV.F Тогда
Если "utd820_05_01_02_hyphen" = TFV.V Тогда
ЗаполнитьУниверсальныйКонтентТитула_UniversalTransferDocument_ДОП_utd820_05_01_02_hyphen(dd_DynamicContent);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьПатчКонтентаЧерновика(dd_PatchItem)
// https://developer.kontur.ru/Docs/Diadoc/COM/ComObjects/DraftContentPatchToSend.html
dd_DraftContentPatchToSend = dd_PatchItem.PatchContent;
ЗаполнитьМЧД(dd_DraftContentPatchToSend.PowerOfAttorneyToAttach);
// Допустим, мы понимаем, что у черновика получатель не указан
// или указан неправильно
dd_DraftContentPatchToSend.ToBoxId = "deadbeaf-dead-beaf-dead-beafdeadbeaf";
// Определить какой из типов подписанта поддерживается можно из результата метода Box.GetDocumentTypes()
// https://developer.kontur.ru/Docs/Diadoc/COM/ComObjects/Box.html#Box.GetDocumentTypes
Если Неопределено <> dd_DraftContentPatchToSend.DynamicSigners Тогда
ЗаполнитьУниверсальногоПодписанта(dd_DraftContentPatchToSend.DynamicSigners, ПолучитьTFV(dd_PatchItem.Document));
ИначеЕсли Неопределено <> dd_DraftContentPatchToSend.ExtendedSigners Тогда
// Можно добавить нескольких расширенных подписантов, если это необходимо
ЗаполнитьРасширенногоПодписанта(dd_DraftContentPatchToSend.AddExtendedSigner());
ИначеЕсли Неопределено <> dd_DraftContentPatchToSend.Signer Тогда
ЗаполнитьПростогоПодписанта(dd_DraftContentPatchToSend.Signer)
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьПодписьЧерновика(dd_PatchItem)
// https://developer.kontur.ru/Docs/Diadoc/COM/ComObjects/DraftSignatureToSend.html
dd_DraftSignatureToSend = dd_PatchItem.PatchContent;
ЗаполнитьМЧД(dd_DraftSignatureToSend.PowerOfAttorneyToAttach);
// Допустим, мы понимаем, что у черновика получатель не указан
// или указан неправильно
НужноИзменитьИлиЗаполнитьПолучателяДокумента = Истина;
Если НужноИзменитьИлиЗаполнитьПолучателяДокумента Тогда
dd_DraftSignatureToSend.ToBoxId = "deadbeaf-dead-beaf-dead-beafdeadbeaf";
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьПростуюПодпись(dd_PatchItem)
dd_AcceptanceToSend = dd_PatchItem.PatchContent;
ЗаполнитьМЧД(dd_AcceptanceToSend.PowerOfAttorneyToAttach);
КонецПроцедуры
Процедура ЗаполнитьПатчКонтентаДокументаСОтложеннойОтправкой(dd_PatchItem)
// https://developer.kontur.ru/Docs/Diadoc/COM/ComObjects/DelayedDocumentContentPatchToSend.html
dd_DelayedDocumentContentPatchToSend = dd_PatchItem.PatchContent;
ЗаполнитьМЧД(dd_DelayedDocumentContentPatchToSend.PowerOfAttorneyToAttach);
// Допустим, мы понимаем, что в контенте документа получатель указан неправильно
dd_DelayedDocumentContentPatchToSend.ToBoxId = "deadbeaf-dead-beaf-dead-beafdeadbeaf";
// Определить какой из типов подписанта поддерживается можно из результата метода Box.GetDocumentTypes()
// https://developer.kontur.ru/Docs/Diadoc/COM/ComObjects/Box.html#Box.GetDocumentTypes
Если Неопределено <> dd_DelayedDocumentContentPatchToSend.DynamicSigners Тогда
ЗаполнитьУниверсальногоПодписанта(dd_DelayedDocumentContentPatchToSend.DynamicSigners, ПолучитьTFV(dd_PatchItem.Document));
ИначеЕсли Неопределено <> dd_DelayedDocumentContentPatchToSend.ExtendedSigners Тогда
// Можно добавить нескольких расширенных подписантов, если это необходимо
ЗаполнитьРасширенногоПодписанта(dd_DelayedDocumentContentPatchToSend.AddExtendedSigner());
ИначеЕсли Неопределено <> dd_DelayedDocumentContentPatchToSend.Signer Тогда
ЗаполнитьПростогоПодписанта(dd_DelayedDocumentContentPatchToSend.Signer)
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьОтветныйТитул(dd_PatchItem)
// https://developer.kontur.ru/Docs/Diadoc/COM/ComObjects/RecipientTitleToSend.html
dd_RecipientTitleToSend = dd_PatchItem.PatchContent;
ЗаполнитьМЧД(dd_RecipientTitleToSend.PowerOfAttorneyToAttach);
// Допустим, хотим, чтобы отправитель документа прислал Извещение о Получении (ИоП) второго титула
// Стоит учитывать, что в реальности ИоП будет запрошен, если настройки документооборота (DocumentBase.WorkflowId) это позволяют
// Если для текущего документооборота запрос ИоПа невозможен, то он запрошен не будет
dd_RecipientTitleToSend.NeedReceipt = True;
ЗаполнитьУниверсальныйКонтентТитула(dd_RecipientTitleToSend.DynamicSigners, ПолучитьTFV(dd_PatchItem.Document));
КонецПроцедуры
Процедура ЗаполнитьИоПы(dd_PatchItem)
// https://developer.kontur.ru/Docs/Diadoc/COM/ComObjects/ReceiptsToSend.html
dd_ReceiptsToSend = dd_PatchItem.PatchContent;
ЗаполнитьМЧД(dd_ReceiptsToSend.PowerOfAttorneyToAttach);
КонецПроцедуры
Процедура ЗаполнитьОтказ(dd_PatchItem)
// https://developer.kontur.ru/Docs/Diadoc/COM/ComObjects/RejectionToSend.html
dd_RejectionToSend = dd_PatchItem.PatchContent;
ЗаполнитьМЧД(dd_RejectionToSend.PowerOfAttorneyToAttach);
dd_FormalizedRejectionContent = dd_RejectionToSend.Content;
dd_FormalizedRejectionContent.Comment = "Комментарий отказа в подписи";
КонецПроцедуры
Процедура ЗаполнитьЗапросКорректировки(dd_PatchItem)
// https://developer.kontur.ru/Docs/Diadoc/COM/ComObjects/CorrectionRequestToSend.html
dd_CorrectionRequestToSend = dd_PatchItem.PatchContent;
ЗаполнитьМЧД(dd_CorrectionRequestToSend.PowerOfAttorneyToAttach);
dd_CorrectionRequestContent = dd_CorrectionRequestToSend.Content;
dd_CorrectionRequestContent.Comment = "Комментарий запроса корректировки/исправления";
КонецПроцедуры
Процедура ЗаполнитьЗапросАннулирования(dd_PatchItem)
// https://developer.kontur.ru/Docs/Diadoc/COM/ComObjects/RevocationRequestToSend.html
dd_RevocationRequestToSend = dd_PatchItem.PatchContent;
ЗаполнитьМЧД(dd_RevocationRequestToSend.PowerOfAttorneyToAttach);
dd_RevocationRequestContent = dd_RevocationRequestToSend.Content;
dd_RevocationRequestContent.Comment = "Комментарий запроса аннулирования";
ЗаполнитьПростогоПодписанта(dd_RevocationRequestContent.Signer);
КонецПроцедуры
См.также