diadocsdk-csharp
diadocsdk-csharp copied to clipboard
Ошибка 409 при вызове GenerateAcceptanceCertificateXmlForBuyer
Пытаюсь сформировать титул заказчика для документа XmlAcceptanceCertificate
Вначале получаю данные по организации и текущего пользователя:
Organization myOrganization = Api.GetMyOrganizations(authToken).Organizations[0];
User currentUser = Api.GetMyUser(authToken);
string boxGuid = myOrganization.Boxes[0].BoxIdGuid;
Затем список документов:
DocumentList documents = Api.GetDocuments(authToken, new DocumentsFilter()
{
BoxId = boxGuid,
FilterCategory = "Any.InboundNotFinished",
// FilterCategory = "XmlAcceptanceCertificate.InboundNotFinished",
Count = 100
});
Далее смотрим документы с типом DocumentType.XmlAcceptanceCertificate
foreach (Document document in documents.Documents)
if (document.DocumentType == DocumentType.XmlAcceptanceCertificate)
{
Diadoc.Api.Proto.Events.Message message = Api.GetMessage(authToken, boxGuid, document.MessageId);
Organization contragentBoxInfo = Api.GetOrganizationByBoxId(message.FromBoxId);
Signer signer = new Signer
{
SignerCertificate = ReadCertContent(),
SignerDetails = new SignerDetails
{
Surname = currentUser.LastName,
FirstName = currentUser.FirstName,
Patronymic = currentUser.MiddleName,
Inn = myOrganization.Inn
}
};
AcceptanceCertificateBuyerTitleInfo content = new AcceptanceCertificateBuyerTitleInfo
{
Signature = new AcceptanceCertificateSignatureInfo
{
SignatureDate = DateTime.Now.ToShortDateString(),
Official = new Official
{
Surname = currentUser.LastName,
FirstName = currentUser.FirstName,
}
},
AdditionalInfo = "подписан из системы",
Signer = signer
};
var buyerTitle = Api.GenerateAcceptanceCertificateXmlForBuyer(authToken, content, boxGuid, document.MessageId, document.EntityId);
При вызове метода GenerateAcceptanceCertificateXmlForBuyer, вываливается ошибка сервера 409:
BaseUrl=https://diadoc-api.kontur.ru, PathAndQuery=/GenerateAcceptanceCertificateXmlForBuyer?boxId=05e7c27b-522c-4de2-8788-e1c844a3f12c&sellerTitleMessageId=643ab00e-f00f-43d8-bc8e-f8229a41e5bd&sellerTitleAttachmentId=ada730a2-fced-4fd9-bc8c-f56b5f596299, AdditionalMessage=Генерация титула покупателя возможна только в формате, соответствующем титулу продавца, StatusCode=Conflict, DiadocErrorCode: DocumentService.NotCorrespondingTitleFormat
Помогите разобраться, в чем причина ошибки?
Добрый день! Вы пытаетесь сформировать ответный титул для акта в 155 формате. В этом случае нужно использовать метод GenerateUniversalTransferDocumentXmlForBuyer. Подробнее о соответствии формата и метода можно посмотреть на странице https://api-docs.diadoc.ru/ru/latest/docflows/AktDocflow.html
При работе с GenerateUniversalTransferDocumentXmlForBuyer функция возвращает другую ошибку:
{"Удаленный сервер возвратил ошибку: (400) Недопустимый запрос."}
Поля структуры UniversalTransferDocumentBuyerTitleInfo помеченные как required были заполнены.
Пример кода:
ExtendedSigner extSigner = new ExtendedSigner
{
BoxId = boxGuid,
SignerCertificate = ReadCertContent(),
SignerDetails = new ExtendedSignerDetails
{
Surname = currentUser.LastName,
FirstName = currentUser.FirstName,
SignerType = Diadoc.Api.Proto.Invoicing.Signers.SignerType.LegalEntity,
SignerPowers = Diadoc.Api.Proto.Invoicing.Signers.SignerPowers.PersonApprovedDocument,
SignerStatus = Diadoc.Api.Proto.Invoicing.Signers.SignerStatus.BuyerEmployee
}
};
UniversalTransferDocumentBuyerTitleInfo content = new UniversalTransferDocumentBuyerTitleInfo
{
DocumentCreator = myOrganization.FullName,
OperationContent = "подписан из системы",
};
content.Signers.Add(extSigner);
var buyerTitle = Api.GenerateUniversalTransferDocumentXmlForBuyer(authToken, content, boxGuid, document.MessageId, document.EntityId);
К сожалению, не нашел логов от этих запросов. Вы к тому же документу пробуете сгенерировать ответный титул?
К сожалению, не нашел логов от этих запросов. Вы к тому же документу пробуете сгенерировать ответный титул?
Сегодня пробовали проделать работу с действующей ЭП. Метод GenerateUniversalTransferDocumentXmlForBuyer снова выдает ошибку:
BaseUrl=https://diadoc-api.kontur.ru, PathAndQuery=/GenerateUniversalTransferDocumentXmlForBuyer?boxId=3e47b175-553c-4d8b-8f78-677e4ee2c6ce&sellerTitleMessageId=27b7dcee-064e-492f-bbde-b2c61419f314&sellerTitleAttachmentId=f4972904-8cf9-4678-9b34-a905891232ba, AdditionalMessage=Invalid data UserContractData: Line: 4, Position: 163, /UniversalTransferDocumentBuyerTitle[1]/Signers[1]/SignerDetails[1]/@SignerStatus: The 'SignerStatus' attribute is invalid - The value 'BuyerEmployee' is invalid according to its datatype 'Integer' - The string 'BuyerEmployee' is not a valid Integer value., StatusCode=BadRequest, DiadocErrorCode: Http.BadRequest
ругается на SignerStatus - что он должен быть Integer, а не string. Сам же статус в коде присваивается как значение: SignerStatus = Diadoc.Api.Proto.Invoicing.Signers.SignerStatus.BuyerEmployee;
Полный код вызова такой:
ExtendedSigner extSigner = new ExtendedSigner
{
BoxId = boxGuid,
SignerCertificate = ReadCertContent(),
SignerDetails = new ExtendedSignerDetails
{
Surname = currentUser.LastName,
FirstName = currentUser.FirstName,
JobTitle = "Финансовый директор",
SignerType = Diadoc.Api.Proto.Invoicing.Signers.SignerType.LegalEntity,
SignerPowers = Diadoc.Api.Proto.Invoicing.Signers.SignerPowers.PersonMadeOperation,
SignerStatus = Diadoc.Api.Proto.Invoicing.Signers.SignerStatus.BuyerEmployee,
SignerPowersBase = "Должностные обязанности",
Inn = myOrganization.Inn
}
};
UniversalTransferDocumentBuyerTitleInfo content = new UniversalTransferDocumentBuyerTitleInfo
{
DocumentCreator = myOrganization.FullName,
OperationContent = "подписан из системы",
};
content.Signers.Add(extSigner);
var buyerTitle = Api.GenerateUniversalTransferDocumentXmlForBuyer(authToken, content, boxGuid, messageID[1], messageID[0]);`
Попробуйте указать SignerStatus Integer
enum SignerStatus {
SellerEmployee = 1; // Работник организации продавца товаров (работ, услуг, имущественных прав);
InformationCreatorEmployee = 2; // Работник организации - составителя информации продавца;
OtherOrganizationEmployee = 3; // Работник иной уполномоченной организации;
AuthorizedPerson= 4; // Уполномоченное физическое лицо (в том числе индивидуальный предприниматель)
BuyerEmployee = 5; // Работник организации - покупателя (для документов в формате приказа №820);
InformationCreatorBuyerEmployee = 6; // Работник организации - составителя файла обмена информации покупателя, если составитель файла обмена информации покупателя не является покупателем (для документов в формате приказа №820 и №423)
Каким образом, если SignerStatus это enum? Прямое присвоение не сработает, а если делать делать преобразование типов, то также присвоится как enum.
Может ли быть ошибка внутри Api.GenerateUniversalTransferDocumentXmlForBuyer? Характер сообщения об ошибке похож на то, что при разборе структуры ExtendedSignerDetails внутри GenerateUniversalTransferDocumentXmlForBuyer, значение SignerStatus преобразуется к строке, а не к int.
У вас было два примера документов:
- boxId=3e47b175-553c-4d8b-8f78-677e4ee2c6ce&sellerTitleMessageId=27b7dcee-064e-492f-bbde-b2c61419f314&sellerTitleAttachmentId=f4972904-8cf9-4678-9b34-a905891232ba - это XmlAcceptanceCertificate версии utd820_05_01_01, т.е. акт в формате 820 приказа, согласно таблице для него нужно использовать метод GenerateRecipientTitleXml либо универсальный метод GenerateTitleXml.
- boxId=05e7c27b-522c-4de2-8788-e1c844a3f12c&sellerTitleMessageId=643ab00e-f00f-43d8-bc8e-f8229a41e5bd&sellerTitleAttachmentId=ada730a2-fced-4fd9-bc8c-f56b5f596299 - это XmlAcceptanceCertificate версии utd_05_01_05, т.е. акт в формате 155 приказа, согласно таблице для него нужно использовать метод GenerateUniversalTransferDocumentXmlForBuyer либо универсальный метод GenerateTitleXml
Кроме того, в 155 и 820 формате отличается набор допустимых SignerStatus : для 155:
SellerEmployee = 1; // Работник организации продавца товаров (работ, услуг, имущественных прав);
InformationCreatorEmployee = 2; // Работник организации - составителя информации продавца;
OtherOrganizationEmployee = 3; // Работник иной уполномоченной организации;
AuthorizedPerson= 4; // Уполномоченное физическое лицо (в том числе индивидуальный предприниматель)
для 820:
OtherOrganizationEmployee = 3; // Работник иной уполномоченной организации;
AuthorizedPerson= 4; // Уполномоченное физическое лицо (в том числе индивидуальный предприниматель)
BuyerEmployee = 5; // Работник организации - покупателя (для документов в формате приказа №820);
InformationCreatorBuyerEmployee = 6; // Работник организации - составителя файла обмена информации покупателя, если составитель файла обмена информации покупателя не является покупателем (для документов в формате приказа №820 и №423)
Проверьте, пожалуйста, что используется подходящий метод для формата документа и указан подходящий SignerStatus.