diadocsdk-csharp
diadocsdk-csharp copied to clipboard
Отправка Корр СФ
Здравствуйте. Прошу пояснить, как через api (c# sdk) надо отправлять корр.сф в актуальном формате, потому что по предоставленной документации разобраться не удалось.
-
Надо ли использовать метод GenerateSenderTitleXml в этом случае? Если да, прошу пояснить какие должны быть в этом случае параметры documentTypeNameId, documentFunction (тут подозреваю что "КСЧФ"), documentVersion. А также непонятно, в какой структуре должны быть переданы данные в userContractData. Пробовал разные варианты, всегда получал что-то типа : "UniversalTransferDocument-КСЧФ-invoicecor_05_02_01 is not allowed to send"
-
Какой объект использовать для передачи сгенерированного XmlDocumentAttachment в MessageToPost? Это будет UniversalTransferDocumentSellerTitles или какой то иной?
-
Пробовал отправлять без использования GenerateSenderTitleXml , через InvoiceCorrectionInfo и GenerateInvoiceCorrectionXml, но в этом случае документ получается с пометкой о старом формате.
Корректировка счета-фактуры - это отдельный тип: InvoiceCorrection. Соответственно, название этого типа надо передавать на вход всем описанным методам.
Для генерации документа в актуальном формате следует использовать GenerateSenderTitleXml
Можете пояснить что означает ошибка типа: "Document type InvoiceCorrection-КСЧФ-ucd_05_02_01 is not allowed to send"? Это где то в настройках Диадока необходимо включить возможность отправки таких документов?
В данном случае ошибка связана с тем, что указана неверная функция. Для InvoiceCorrection функция должна быть не КСЧФ, а default
Еще вопрос - какую структуру надо передавать в параметре UserContractData в метод GenerateSenderTitleXml? Пробовал UniversalCorrectionDocumentSellerTitleInfo, получаю ошибку "The 'UniversalCorrectionDocumentSellerTitleInfo' element is not declared.".
Добрый день! В теле запроса должен содержаться заполненный XML-файл, соответствующий XSD-схеме контракта для генерации титула отправителя данного типа документа. XSD-схема контракта, необходимого для генерации титула, может быть получена с помощью ссылки, доступной в поле UserDataXsdUrl контракта DocumentTitle, который можно получить с помощью метода GetDocumentTypes. Пример можете посмотреть в документации.
Делаю например такой запрос для получения схемы:
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-перечисления неверно формируются.
Используйте кодировку windows-1251.
По предоставленной по запросу схеме сгенерировал класс UniversalCorrectionDocument. При отправке документа получаю ошибку "Возникла ошибка при отражении типа UniversalCorrectionDocument". Подскажите, в чем может быть проблема?
Добрый день, расскажите подробнее: Какой метод используйте, с какими параметрами и что передаете в теле запроса?
Сам сгенерированный (генерировал через 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);
По приложенному коду в рамках этого обращения я не могу помочь вам ответить на вопрос. Для того, чтобы получить персональную исчерпывающую консультацию по интеграции обратитесь к вашему менеджеру.