diadocsdk-csharp icon indicating copy to clipboard operation
diadocsdk-csharp copied to clipboard

Отправка Корр СФ

Open MichaelEvl opened this issue 4 years ago • 11 comments

Здравствуйте. Прошу пояснить, как через api (c# sdk) надо отправлять корр.сф в актуальном формате, потому что по предоставленной документации разобраться не удалось.

  1. Надо ли использовать метод GenerateSenderTitleXml в этом случае? Если да, прошу пояснить какие должны быть в этом случае параметры documentTypeNameId, documentFunction (тут подозреваю что "КСЧФ"), documentVersion. А также непонятно, в какой структуре должны быть переданы данные в userContractData. Пробовал разные варианты, всегда получал что-то типа : "UniversalTransferDocument-КСЧФ-invoicecor_05_02_01 is not allowed to send"

  2. Какой объект использовать для передачи сгенерированного XmlDocumentAttachment в MessageToPost? Это будет UniversalTransferDocumentSellerTitles или какой то иной?

  3. Пробовал отправлять без использования GenerateSenderTitleXml , через InvoiceCorrectionInfo и GenerateInvoiceCorrectionXml, но в этом случае документ получается с пометкой о старом формате.

MichaelEvl avatar Oct 29 '20 09:10 MichaelEvl

Корректировка счета-фактуры - это отдельный тип: InvoiceCorrection. Соответственно, название этого типа надо передавать на вход всем описанным методам.

Для генерации документа в актуальном формате следует использовать GenerateSenderTitleXml

i82 avatar Oct 31 '20 12:10 i82

Можете пояснить что означает ошибка типа: "Document type InvoiceCorrection-КСЧФ-ucd_05_02_01 is not allowed to send"? Это где то в настройках Диадока необходимо включить возможность отправки таких документов?

MichaelEvl avatar Nov 02 '20 09:11 MichaelEvl

В данном случае ошибка связана с тем, что указана неверная функция. Для InvoiceCorrection функция должна быть не КСЧФ, а default

NataliaShumikhina avatar Nov 02 '20 13:11 NataliaShumikhina

Еще вопрос - какую структуру надо передавать в параметре UserContractData в метод GenerateSenderTitleXml? Пробовал UniversalCorrectionDocumentSellerTitleInfo, получаю ошибку "The 'UniversalCorrectionDocumentSellerTitleInfo' element is not declared.".

MichaelEvl avatar Nov 02 '20 13:11 MichaelEvl

Добрый день! В теле запроса должен содержаться заполненный XML-файл, соответствующий XSD-схеме контракта для генерации титула отправителя данного типа документа. XSD-схема контракта, необходимого для генерации титула, может быть получена с помощью ссылки, доступной в поле UserDataXsdUrl контракта DocumentTitle, который можно получить с помощью метода GetDocumentTypes. Пример можете посмотреть в документации.

aeremina88 avatar Nov 03 '20 08:11 aeremina88

Делаю например такой запрос для получения схемы:

User-Agent: Fiddler Host: diadoc-api.kontur.ru Content-Length: 0 Authorization: DiadocAuth ddauth_api_client_id=myClientId, ddauth_token=myToken Content-Type: application/xml; charset=utf-8

В ответе схема приходит, но некоторые символы, видимо все русские - нечитаемые:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="UniversalCorrectionDocument"> xs:complexType xs:all <xs:element name="Invoices"> xs:complexType xs:sequence <xs:element maxOccurs="unbounded" name="Invoice" type="InvoiceForCorrectionInfo"> xs:annotation xs:documentation��� - ����-������� (��������� ��������), � �������� ��������� ���������������� ����-�������</xs:documentation> </xs:annotation> ...

Можете подсказать, как сделать так, чтобы можно было прочитать? Потому что из-за этого некоторые enum-перечисления неверно формируются.

MichaelEvl avatar Nov 03 '20 11:11 MichaelEvl

Используйте кодировку windows-1251.

aeremina88 avatar Nov 03 '20 16:11 aeremina88

По предоставленной по запросу схеме сгенерировал класс UniversalCorrectionDocument. При отправке документа получаю ошибку "Возникла ошибка при отражении типа UniversalCorrectionDocument". Подскажите, в чем может быть проблема?

MichaelEvl avatar Nov 05 '20 09:11 MichaelEvl

Добрый день, расскажите подробнее: Какой метод используйте, с какими параметрами и что передаете в теле запроса?

ichechulina avatar Nov 05 '20 14:11 ichechulina

Сам сгенерированный (генерировал через xsd) по схеме класс UniversalCorrectionDocument выглядит так:

public partial class UniversalCorrectionDocument { [XmlElement(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] [XmlArrayItem("Invoice", Form = System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable = false)] public InvoiceForCorrectionInfo[] Invoices { get; set; }

[XmlElement(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] public ExtendedOrganizationInfo Seller { get; set; }

[XmlElement(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] public ExtendedOrganizationInfo Buyer { get; set; }

[XmlArray(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] [XmlArrayItem("SignerDetails", typeof(Diadoc.Api.DataXml.ExtendedSignerDetails_CorrectionSellerTitle), Form = System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable = false)] [XmlArrayItem(typeof(Diadoc.Api.DataXml.SignerReference), Form = System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable = false)] public object[] Signers { get; set; }

[XmlElement(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] public EventContent EventContent { get; set; }

[XmlElement(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] public InvoiceCorrectionTable Table { get; set; }

[XmlElement(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] public AdditionalInfoId AdditionalInfoId { get; set; }

[XmlAttribute()] public UniversalCorrectionDocumentFunction Function { get; set; }

[XmlAttribute()] public string DocumentName { get; set; }

[XmlAttribute()] public string DocumentDate { get; set; }

[XmlAttribute()] public string DocumentNumber { get; set; }

[XmlAttribute()] public string Currency { get; set; }

[XmlAttribute()] public decimal CurrencyRate { get; set; }

[XmlIgnore()] public bool CurrencyRateSpecified { get; set; }

[XmlAttribute()] public string CorrectionRevisionDate { get; set; } [XmlAttribute(DataType = "integer")] public string CorrectionRevisionNumber { get; set; } [XmlAttribute()] public string DocumentCreator { get; set; } [XmlAttribute()] public string DocumentCreatorBase { get; set; } [XmlAttribute()] public string GovernmentContractInfo { get; set; } }

Создаю этот класс, заполняю данными, добавляю подписанта, затем сериализую и генерирую вложение таким образом:

UniversalCorrectionDocument doc = new UniversalCorrectionDocument() +далее заполняю его данными...

doc.Signers = new object[1]; doc.Signers[0] = new Diadoc.Api.DataXml.SignerReference { BoxId = FromBoxId, CertificateBytes = x.Export(X509ContentType.Cert), };

byte[] array = Diadoc.Api.XmlSerializerExtensions.SerializeToXml(doc); var file = diadoc.GenerateSenderTitleXml(token, FromBoxId, "InvoiceCorrection", "default", "ucd_05_02_01", array);

MichaelEvl avatar Nov 05 '20 14:11 MichaelEvl

По приложенному коду в рамках этого обращения я не могу помочь вам ответить на вопрос. Для того, чтобы получить персональную исчерпывающую консультацию по интеграции обратитесь к вашему менеджеру.

i82 avatar Nov 08 '20 05:11 i82