diadoc / diadocsdk-csharp

Official Diadoc SDK for C#
MIT License
35 stars 64 forks source link

Ошибка при выгрузке данных УКД #1039

Closed YstasDarso closed 1 year ago

YstasDarso commented 1 year ago

Добрый день!

Формирую УКД через 1C Addin SDK 5.40 метод PackageSendTask2.

При отправке документа (PackageSendTask2.Send()) выдает ошибку:

Произошла исключительная ситуация (PackageSendTask2.Send): ##100[Ошибка сервера Диадок]code:400, HTTP error: MessageToPost.DocumentAttachments[0]: Документ не может быть отправлен в указанном формате

АПИ = Новый COMОбъект ("Diadoc.DiadocClient");
Рефлектор = Новый ComОбъект("Diadoc.Reflector");
Апи.ApiClientId = "Мой-ключ";
Апи.ServerUrl   = "https://diadoc-api.kontur.ru:443";
Certificates = АПИ.GetPersonalCertificates();
Отпечаток = Certificates.GetItem(0).Thumbprint;
ДиадокСоединение = АПИ.CreateConnectionByCertificate(Отпечаток);

Box_ValueCollection = ДиадокСоединение.GetOrganizationList();
БоксИД = Box_ValueCollection.GetItem(0).id;
ФНС = Box_ValueCollection.GetItem(0).FnsParticipantId;
Бокс = Box_ValueCollection.GetItem(0);
SendTask = Бокс.CreatePackageSendTask2();
SendTask.CounterAgentId = Бокс.GetCounteragentListByInnKpp(УКД.Контрагент.ИНН, УКД.Контрагент.КПП).GetItem(0).Id;

DocumentToSend = SendTask.AddDocument("UniversalCorrectionDocument", "КСЧФДИС", "ucd736_05_01_01");

DocumentToSend.comment = "ТЕСТ отправки";
DynamicContent = DocumentToSend.Content;
Utd820_SellerContent = DynamicContent.UniversalCorrectionDocument;

ДопСведения = Utd820_SellerContent.AdditionalInfoId.AddAdditionalInfo();
ДопСведения.Id = "номер_заказа";
ДопСведения.Value = Строка(УКД.ИсправляемыйДокументРеализации.Номер);

ДопСведения = Utd820_SellerContent.AdditionalInfoId.AddAdditionalInfo();
ДопСведения.Id = "дата_заказа";
ДопСведения.Value = Формат(УКД.ИсправляемыйДокументРеализации.Дата, "ДФ=dd.MM.yyyy");

Utd820_SellerContent.CorrectionRevisionDate = Формат(УКД.ИсправляемыйДокументРеализации.Дата, "ДФ=dd.MM.yyyy");
Utd820_SellerContent.CorrectionRevisionNumber = Строка(1);

Utd820_SellerContent.EventContent.OperationContent = "Уведомляю об изменении стоимости";

АктРасх = УКД.ИсправляемыйДокументРеализации;
ПолучитьАктРасхождения(АктРасх);

СтрДокОсн = Utd820_SellerContent.EventContent.AddCorrectionBase();
СтрДокОсн.BaseDocumentName = "ТОРГ-2";
СтрДокОсн.BaseDocumentNumber = АктРасх.Номер;
СтрДокОсн.BaseDocumentDate = Формат(АктРасх.Дата, "ДФ=dd.MM.yyyy");

СтрДокОсн = Utd820_SellerContent.EventContent.AddTransferDocDetails();
СтрДокОсн.BaseDocumentName = "TORG2";
СтрДокОсн.BaseDocumentNumber = АктРасх.Номер;
СтрДокОсн.BaseDocumentDate = Формат(АктРасх.Дата, "ДФ=dd.MM.yyyy");

Utd820_SellerContent.DocumentCreator = "Общество с ограниченной ответственностью «Клас-трейдинг», ИНН/КПП 7709290976/772501001";
Utd820_SellerContent.DocumentDate = Формат(УКД.Дата, "ДФ=dd.MM.yyyy");
Utd820_SellerContent.Currency = "643";
Utd820_SellerContent.CurrencyName = "1";
Utd820_SellerContent.DocumentName = "Документ, подтверждающий согласие (факт уведомления) покупателя на изменение стоимости отгруженных товаров (выполненных работ, оказанных услуг), переданных имущественных прав";
Utd820_SellerContent.Function = "КСЧФДИС";
Utd820_SellerContent.DocumentNumber = Строка(УКД.Номер);

БоксКнтр = Бокс.GetCounteragentListByInnKpp(УКД.Контрагент.ИНН, УКД.Контрагент.КПП).GetItem(0);
    СтрПродавец = Utd820_SellerContent.Buyer;

Продавец = СтрПродавец.OrganizationReference;
Продавец.BoxId = Бокс.Guid;
Продавец.OrgType = "3";

СтрПокупатель = Utd820_SellerContent.Seller;
Если УКД.Контрагент.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицо тогда
    СтрПокупатель.OrganizationReference.OrgType = "3";
Иначе 
    СтрПокупатель.OrganizationReference.OrgType = "2";
КонецЕсли;
СтрПокупатель.OrganizationReference.BoxId = БоксКнтр.Guid;

СтрПодписант = Utd820_SellerContent.Signers.AddItems();
Подписант = СтрПодписант.SignerDetails;

Подписант.LastName = Бокс.MyEmployee.EmployeeInfo.User.LastName;
Подписант.FirstName = Бокс.MyEmployee.EmployeeInfo.User.FirstName;
Подписант.MiddleName= Бокс.MyEmployee.EmployeeInfo.User.MiddleName;
Подписант.RegistrationCertificate="1";
Подписант.SignerPowers="0";
Подписант.SignerType="3";
Подписант.SignerStatus="1";
Подписант.SignerPowersBase="Должностные обязанности";

СЧФ = НайтиПодчиненныйСчетФактуру(УКД);
ИсправСЧФ = Utd820_SellerContent.Invoices.AddInvoice();

ИсправСЧФ.Date = Формат(СЧФ.Дата, "ДФ=dd.MM.yyyy");
ИсправСЧФ.Number = Формат(СЧФ.Номер);

инк_НДС = 0;
инк_НДСДо = 0;
инк_Сумма = 0;
инк_СуммаДо = 0;
инк_СуммаСНДС = 0;
инк_СуммаСНДСДо = 0;

Для каждого Эл из Укд.Товары цикл

    Если Эл.Количество = 0 тогда
        Продолжить;
    КонецЕсли;

    Если Эл.Количество = Эл.КоличествоДоИзменения и Эл.Сумма = Эл.СуммаДоИзменения тогда
        Продолжить;
    КонецЕсли;

    СтрТаб = Utd820_SellerContent.Table.Items.AddItem();
    //СтрТаб = Utd820_SellerContent.Table.AddItem();
    СтрТаб.Product = Строка(Эл.Номенклатура);
    СтрТаб.Quantity.CorrectedValue = Формат(Эл.Количество, "ЧРД=.; ЧГ=0");
    СтрТаб.Quantity.OriginalValue = Формат(Эл.КоличествоДоИзменения, "ЧРД=.; ЧГ=0");

    СтрТаб.ItemArticle = Эл.Номенклатура.Артикул;

    СтрТаб.Price.CorrectedValue = Формат(Эл.Цена, "ЧРД=.; ЧГ=0");
    СтрТаб.Price.OriginalValue = Формат(Эл.ЦенаДоИзменения, "ЧРД=.; ЧГ=0");

    СтрТаб.Subtotal.CorrectedValue = Формат(Эл.СуммаНДС, "ЧРД=.; ЧГ=0");
    СтрТаб.Subtotal.OriginalValue = Формат(Эл.СуммаНДСДоИзменения, "ЧРД=.; ЧГ=0");

    СтрТаб.TaxRate.CorrectedValue = СтавкиНДСДиадок(Эл.СтавкаНДС);
    СтрТаб.TaxRate.OriginalValue = СтавкиНДСДиадок(Эл.СтавкаНДСДоИзменения);

    СтрТаб.UnitName.CorrectedValue = "шт";
    СтрТаб.UnitName.OriginalValue = "шт";

    СтрТаб.Unit.CorrectedValue = "шт";//Формат(Эл.ЕдиницаИзмерения.Код, "ЧГ=0");
    СтрТаб.Unit.OriginalValue = "шт";//Формат(Эл.ЕдиницаИзмерения.Код, "ЧГ=0");

    СтрТаб.Subtotal.CorrectedValue = Формат(Эл.Сумма,"ЧРД=.; ЧГ=0");
    СтрТаб.Subtotal.OriginalValue = Формат(Эл.СуммаДоИзменения,"ЧРД=.; ЧГ=0");
    Если Эл.СуммаДоИзменения > Эл.Сумма тогда
        СтрТаб.Subtotal.AmountsDec = Формат(Эл.СуммаДоИзменения - Эл.Сумма, "ЧРД=.; ЧГ=0");
    иначе
        СтрТаб.Subtotal.AmountsInc = Формат(-(Эл.СуммаДоИзменения - Эл.Сумма), "ЧРД=.; ЧГ=0");
    КонецЕсли;
    инк_СуммаДо = инк_СуммаДо + Эл.СуммаДоИзменения;
    инк_Сумма = инк_Сумма + Эл.Сумма;

    СтрТаб.Vat.CorrectedValue = Формат(Эл.СуммаНДС,"ЧДЦ=2;ЧРД=.; ЧГ=0");
    СтрТаб.Vat.OriginalValue = Формат(Эл.СуммаНДСДоИзменения,"ЧДЦ=2;ЧРД=.; ЧГ=0");
    Если Эл.СуммаНДСДоИзменения > Эл.СуммаНДС тогда
        СтрТаб.Vat.AmountsDec = Формат(Эл.СуммаНДСДоИзменения - Эл.СуммаНДС, "ЧДЦ=2;ЧРД=.; ЧГ=0");
    иначе
        СтрТаб.Vat.AmountsInc = Формат(-(Эл.СуммаНДСДоИзменения - Эл.СуммаНДС), "ЧДЦ=2;ЧРД=.; ЧГ=0");
    КонецЕсли;
    инк_НДСДо = инк_НДСДо + Эл.СуммаНДСДоИзменения;
    инк_НДС = инк_НДС + Эл.СуммаНДС;

КонецЦикла;

Если инк_СуммаДо > инк_Сумма тогда
    Utd820_SellerContent.Table.TotalsDec.Total = Формат(инк_СуммаДо - инк_Сумма, "ЧДЦ=2;ЧРД=.; ЧГ=0");
    Если УКД.СуммаВключаетНДС тогда
        Utd820_SellerContent.Table.TotalsDec.TotalWithVatExcluded = Формат(инк_СуммаДо - инк_Сумма, "ЧДЦ=2;ЧРД=.; ЧГ=0");
    иначе
        Utd820_SellerContent.Table.TotalsDec.TotalWithVatExcluded = Формат(инк_СуммаДо + инк_НДСДо - инк_Сумма -инк_НДС, "ЧДЦ=2;ЧРД=.; ЧГ=0");
    КонецЕсли;
    Utd820_SellerContent.Table.TotalsDec.Vat = Формат(инк_НДСДо - инк_НДС, "ЧДЦ=2;ЧРД=.; ЧГ=0");
иначе
    Utd820_SellerContent.Table.TotalsInc.Total = Формат(-(инк_СуммаДо - инк_Сумма), "ЧДЦ=2;ЧРД=.; ЧГ=0");
    Если УКД.СуммаВключаетНДС тогда
        Utd820_SellerContent.Table.TotalsDec.TotalWithVatExcluded = Формат(-(инк_СуммаДо - инк_Сумма), "ЧДЦ=2;ЧРД=.; ЧГ=0");
    иначе
        Utd820_SellerContent.Table.TotalsDec.TotalWithVatExcluded = Формат(-(инк_СуммаДо + инк_НДСДо - инк_Сумма -инк_НДС),"ЧДЦ=2;ЧРД=.; ЧГ=0");
    КонецЕсли;
    Utd820_SellerContent.Table.TotalsDec.Vat = Формат(-(инк_НДСДо - инк_НДС), "ЧДЦ=2;ЧРД=.; ЧГ=0");
КонецЕсли;

DocumentToSend.Comment = "Это УКД с заполнением контента средствами компоненты ТЕСТ";

ОтправленныеДокументы = SendTask.Send();
ilzag commented 1 year ago
Добрый день! Ошибка вида "Документ не может быть отправлен в указанном формате" говорит о том, что проблема связана с типом документа, его функцией или версией. Проверьте, к какому документу выставляете УКД с функцией "КСЧФ ДИС". Чаще всего ошибки совершаются на этом этапе. Тип корректировки должен соответствовать типу документа основания: УПД УКД
СЧФ КСЧФ
ДОП ДИС
СЧФ ДОП КСЧФ ДИС