diadoc / diadocsdk-csharp

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

Заполнение атрибута 5A счет-фактуры #1073

Open JoeChu53 opened 1 year ago

JoeChu53 commented 1 year ago

Как в API Диадока для C# заполнить атрибут под номером 5a - Документ об отгрузке? Для передачи документа в Диадок используется класс UniversalTransferDocumentWithHyphens.

alexxxwam commented 1 year ago

Добрый день, используйте свойство указанного вами класса DocumentShipments - массив классов UniversalTransferDocumentWithHyphensDocumentShipment , в этом же пространстве имен.

/// <remarks/> [System.Xml.Serialization.XmlArrayAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] [System.Xml.Serialization.XmlArrayItemAttribute("DocumentShipment", Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=false)] public UniversalTransferDocumentWithHyphensDocumentShipment[] DocumentShipments { get { return this.documentShipmentsField; } set { this.documentShipmentsField = value; } }

JoeChu53 commented 1 year ago

Добрый день! Спасибо большое за информацию! Уже нашел в интернете подсказку. Получился вот такой текст заполнения атрибута:

        // заполняем пункт 5a
        Diadoc.Api.DataXml.Utd820.Hyphens.UniversalTransferDocumentWithHyphensDocumentShipment doc_ship =
                                          new Diadoc.Api.DataXml.Utd820.Hyphens.UniversalTransferDocumentWithHyphensDocumentShipment();
        doc_ship.Name = "shipment doc"; // здесь - любой текст!!!
        doc_ship.Number = " п/п 1 № " + userContract.DocumentNumber;
        if ( items_count > 1 )
            doc_ship.Number = " п/п 1-" + items_count + " № " + userContract.DocumentNumber;
        doc_ship.Date = userContract.DocumentDate;
        userContract.DocumentShipments = new[ ] { doc_ship };

В структуре только два реквизита - Number и Date! Поэтому приходится искусственно формировать текст “ п/п …” Хорошо бы иметь еще два атрибута - типа ItemNumberFirst, ItemNumberLast - первый порядковый номер, последний порядковый номер.

С Уважением, Чувилин Георгий В. @.***

On 1 Sep 2023, at 19:17, alexxxwam @.***> wrote:

Добрый день, используйте свойство указанного вами класса DocumentShipments - массив классов UniversalTransferDocumentWithHyphensDocumentShipment , в этом же пространстве имен.

/// [System.Xml.Serialization.XmlArrayAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] [System.Xml.Serialization.XmlArrayItemAttribute("DocumentShipment", Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=false)] public UniversalTransferDocumentWithHyphensDocumentShipment[] DocumentShipments { get { return this.documentShipmentsField; } set { this.documentShipmentsField = value; } }

— Reply to this email directly, view it on GitHub https://github.com/diadoc/diadocsdk-csharp/issues/1073#issuecomment-1703001090, or unsubscribe https://github.com/notifications/unsubscribe-auth/BAATMTF5U2CU2UDE47ZMHELXYIDDPANCNFSM6AAAAAA34BMENY. You are receiving this because you authored the thread.

alexxxwam commented 1 year ago

ну чтобы добавить новые свойства - это уже к разрабам))) мы тоже считаем первый и последний номер в строке и передаем через дефис

JoeChu53 commented 1 year ago

День добрый! Очень большая просьба помочь!!! Я находжусь в тупике - не могу даже пока придумать, как разрешить ситуацию:

Вот такой текст по отсылке:

    /// <summary>
    /// Post message to Diadoc
    /// </summary>
    public void Post() {
        // Отсылка
        int error_code = 0;
        try {
            response = DiadocApi.PostMessage( CurrentToken, messageToPost );
            SetDiaStatuses( Wares.WrhDiadocStatus.PostedToDiadok );
        } catch ( Exception ex ) {
            Console.WriteLine( ex.Message );
            error_code = -1;
            SetDiaErrors( Wares.WrhDiadocStatus.ErrorPostToDiadok, error_code, ex.Message.Substring( 0, Math.Min( ExceptionMessageLength, ex.Message.Length ) ) );
            uow.CommitChanges();
        }
        if ( response == null ) {
            error_code = -2;
            SetDiaErrors( Wares.WrhDiadocStatus.ErrorPostToDiadok, error_code, "Response = null!" );
            uow.CommitChanges();
        }

        if ( error_code != 0 ) {
            TraceMessage.UserMessage = string.Format( "Документ {0} не  загружен в ДИАДОК", docId );
            TraceMessage.SystemMessage = null;
            TraceMessage.Out( TraceMessage.CallPoint(), TraceMessage.TraceCategory.Info );
            return;
        }

И получаю response == null !!!

Причем xml при этом формируется нормально!, и одинаково в обоих случаях! Я сравнивал xml от тестового пользователя, и от реального - они совпадают!!!

Можете, хотя бы, подсказать, в каком направлении искать, в чем тут дело!!?? Могу прислать и xml, который пытается отослаться!

Спасибо за поддержку!

С Уважением, Чувилин Георгий В. @.***

energy75 commented 1 year ago

Георгий, добрый день. Не претендую на правильность ответа, могу лишь предположить. В ходе тестов выяснил, что отправить документ через АПИ можно использовав ЛЮБОЙ сертификат. И сообщение у Вас в исходящих появиться. Но адресату не дойдет, потому, как Диадок не верифицирует данное сообщение. У Вас не в этом дело?

JoeChu53 commented 1 year ago

День добрый! Спасибо за поддержку!!! У меня была немного некорректная обработка ошибок:

Сейчас исправил - и сразу получил сообщение об ошибке (через Exception) - Принимающий контрагент заблокировал прием от нашего контрагента!

Так что ситуация разрешилась!

Но у меня важный вопрос: Кроме отработки Exception в C# - есть ли в API место (как, например, в Oracle - sqlcode, sqlerrm), где находится результат выполнения процедуры/функции!!??

С Уважением, Чувилин Георгий В. @.***

On 14 Sep 2023, at 10:28, energy75 @.***> wrote:

Георгий, добрый день. Не претендую на правильность ответа, могу лишь предположить. В ходе тестов выяснил, что отправить документ через АПИ можно использовав ЛЮБОЙ сертификат. И сообщение у Вас в исходящих появиться. Но адресату не дойдет, потому, как Диадок не верифицирует данное сообщение. У Вас не в этом дело?

— Reply to this email directly, view it on GitHub https://github.com/diadoc/diadocsdk-csharp/issues/1073#issuecomment-1718910335, or unsubscribe https://github.com/notifications/unsubscribe-auth/BAATMTFQER2HFMWEZJUE37DX2KWZLANCNFSM6AAAAAA34BMENY. You are receiving this because you authored the thread.

alexxxwam commented 1 year ago

а какой в этом смысл? если все можно обернуть в try - сюда сделать и post и чтение парсинг самого respone, и catch покажет ошибку либо у вас в синтаксисе или при тех же методах диадока.