AXForum  
Zurück   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Kennwort vergessen?
Registrieren Forum Rules Hilfe Benutzerliste Heutige Beiträge Suchen

 
 
Themen-Optionen Thema durchsuchen Ansicht
Alt 19.01.2017, 14:32   #1  
UNRW ist offline
UNRW
Участник
 
383 / 67 (3) ++++
Registriert seit: 16.09.2004
Ort: Москва
Интеграция MSDAX и ДиаДок
Доброго времени суток всем.
Подскажите может быть кто-то сталкивался с интеграцией MSDAX с ЭДО ДиаДок для отправки СФ.

http://api-docs.diadoc.ru/ru/latest/...d_invoice.html

Документация написана неоднозначно, а разработка на стороне провайдера ДиаДок не может толком разъяснить ни "точку входа" ни точно с какими параметрами вызывать функцию API передачи СФ.

Авторизацию и получение списка ящиков мы реализовали, отправка СФ не работает...

Если кто сталкивался подскажите какой вы формируете заголовок для POST запроса и в какой структуре передаете XML по СФ.
Alt 19.01.2017, 15:04   #2  
Ruff ist offline
Ruff
Дмитрий Ерин
Benutzerbild von Ruff
1C
 
475 / 396 (14) ++++++
Registriert seit: 18.09.2003
Ort: Тула
В исходниках SDK уже смотрели?
Alt 19.01.2017, 15:23   #3  
UNRW ist offline
UNRW
Участник
 
383 / 67 (3) ++++
Registriert seit: 16.09.2004
Ort: Москва
исходники не отвечают на вопрос, сожалению.
тут надо чтобы кто-то однозначно сказал что конкретно надо использровать
Alt 19.01.2017, 16:51   #4  
Pustik ist offline
Pustik
Участник
 
807 / 372 (14) ++++++
Registriert seit: 04.06.2004
сам лично не писал, но вот куски кода примерно такие :
X++:
class DiadocNet
{
    Shipdocuments                         ShipDocuments;
    DataArray_X                                 data;
    Dataarray_X                                 orgdata;
    Diadoc.Api.DiadocApi                          api;
    Diadoc.Api.Cryptography.WinApiCrypt           winApiCrypt;
    Diadoc.Api.Proto.Invoicing.InvoiceInfo        InvoIceinfo;
    Diadoc.Api.Proto.Invoicing.InvoiceCorrectionInfo    InvoiceCorrectionInfo;
    Diadoc.Api.Proto.Invoicing.Torg12SellerTitleInfo Torg12SellerTitleInfo;
    Diadoc.Api.Proto.Invoicing.TaxRate            TaxRate;

    Diadoc.Api.Proto.Invoicing.DiadocOrganizationInfo  Buyer;
    Diadoc.Api.Proto.Invoicing.DiadocOrganizationInfo  seller;
    Diadoc.Api.Proto.Invoicing.PaymentDocumentInfo PaymentDocumentInfo;

    Diadoc.Api.Proto.Invoicing.ShipperOrConsignee Shipper;
    Diadoc.Api.Proto.Invoicing.ShipperOrConsignee Consignee;
    Diadoc.Api.Proto.Invoicing.Signer             Signer;
    Diadoc.Api.Proto.Invoicing.SignerDetails      SignerDetails;
    Diadoc.Api.Proto.Events.MessageToPost         MessageToPost;
    str                                           token;
    System.Exception                              netExcepn;
    Diadoc.Api.Proto.Events.GeneratedFile GeneratedFile;
    str                                           filedirectory;
}
X++:
void invoicecreate(boolean ICF = false)
{
        real TotalWithVatExcLude;
        real Vat;
        real Total;
        Diadoc.Api.Proto.Invoicing.InvoiceItem        InvoiceItem;
        System.Byte[] sign;

        ;

        data.reset();
    
        while (data.next())
        {
            InvoiceItem = new Diadoc.Api.Proto.Invoicing.InvoiceItem();
            this.initTaxRate(data.valueStr('TaxRate'));
            InvoiceItem.set_Product(data.valueStr('Product'));
            InvoiceItem.set_Unit(data.valueStr('Unit'));
            InvoiceItem.set_Quantity(data.valueStr('Quantity'));
            InvoiceItem.set_Price(data.valueStr('Price'));
            InvoiceItem.set_TaxRate(TaxRate);
            InvoiceItem.set_SubtotalWithVatExcluded(data.valueStr('SubtotalWithVatExcluded'));
            InvoiceItem.set_Vat(data.valueStr('Vat'));
            InvoiceItem.set_Subtotal(data.valueStr('Subtotal'));
            TotalWithVatExcLude += data.value('SubtotalWithVatExcluded');
            Vat                 += data.value('Vat');
            Total               += data.value('Subtotal');
            InvoiceInfo.AddItem(InvoiceItem);
          
        }

        InvoiceInfo.set_InvoiceNumber(orgdata.valueStr('InvoiceNumber'));
        InvoiceInfo.set_InvoiceDate(orgdata.valueStr('InvoiceDate'));
        if(orgdata.valueStr('DocumentDate'))
        {
            PaymentDocumentinfo.set_DocumentDate(orgdata.valueStr('DocumentDate'));
            PaymentDocumentinfo.set_DocumentNumber(orgdata.valueStr('DocumentNumber'));
            InvoiceInfo.AddPaymentDocument(PaymentDocumentinfo);
        }
        InvoiceInfo.set_Currency(orgdata.valueStr('Currency'));
        InvoiceInfo.set_TotalWithVatExcluded(real2str(TotalWithVatExcLude,1,2,1,0));
        InvoiceInfo.set_Total(real2str(Total,1,2,1,0));
        InvoiceInfo.set_Vat(real2str(Vat,1,2,1,0));
        InvoiceInfo.set_AdditionalInfo(orgdata.valueStr('AdditionalInfo'));

        if(ICF)
        {
            InvoiceInfo.set_InvoiceRevisionDate(orgdata.valueStr('InvoiceRevisionDate'));
            InvoiceInfo.set_InvoiceRevisionNumber(orgdata.valueStr('InvoiceRevisionNumber'));
        }

        Shipper.set_SameAsSellerOrBuyer(true);
        Consignee.set_SameAsSellerOrBuyer(true);    
        this.set_Signer();
        seller = this.set_seller();
        Buyer  = this.set_Buyer();
        InvoiceInfo.set_Seller(seller);
        InvoiceInfo.set_Buyer(Buyer);
        InvoiceInfo.set_Shipper(Shipper);
        InvoiceInfo.set_Consignee(Consignee);
        InvoiceInfo.set_Signer(Signer);

}
X++:
void GenerateInvoiceXml()
{
    Diadoc.Api.Proto.Content   Content;
    //Diadoc.Api.Proto.Events.GeneratedFile GeneratedFile;
    Diadoc.Api.Proto.Events.XmlDocumentAttachment XmlDocumentAttachment = new  Diadoc.Api.Proto.Events.XmlDocumentAttachment();
    Diadoc.Api.Proto.Events.SignedContent   SignedContent = new Diadoc.Api.Proto.Events.SignedContent();
    DiadocTable     DiadocTable;
    Diadoc.Api.Cryptography.WinApiCrypt _WinApiCrypt;
    System.Byte[] sign;
    System.Byte[] certData;
    str filename;
    str filesign;

    try
    {

        GeneratedFile = api.GenerateInvoiceXml(token,InvoIceinfo,false);
        filename+= filedirectory;
        filename+= GeneratedFile.get_FileName();
        GeneratedFile.SaveContentToFile(filename);

        filesign = filedirectory + this.set_FilenameSign();
        certData = this.Signaturecreate();
        sign = WinApiCrypt.Sign(GeneratedFile.get_Content(), certData);
        SignedContent.set_Signature(sign);
        SignedContent.SaveSignatureToFile(filesign);
        ttsbegin;
        select firstfast forupdate * from DiadocTable where DiadocTable.DocumentNum == orgdata.value('InvoiceNumber')
            && DiadocTable.DocumentDate == orgdata.value('InvoiceDate')
            && DiadocTable.Shipdocuments == Shipdocuments
            && DiadocTable.Status == DiadocStatus::Created;
        if(DiadocTable)
            DiadocTable.delete();

        DiadocTable.Shipdocuments = Shipdocuments;
        DiadocTable.Voucher   = orgdata.value('Voucher');
        DiadocTable.Salesid   = orgdata.value('Salesid');
        DiadocTable.DocumentNum   = orgdata.value('InvoiceId');
        DiadocTable.DocumentDate  = orgdata.value('InvoiceDate');
        DiadocTable.FileName      = GeneratedFile.get_FileName();
        DiadocTable.SignFileName  = filesign;
        DiadocTable.Seller        = orgdata.value('SellerAccount');
        DiadocTable.Buyer         = orgdata.value('BuyerAccount');
        DiadocTable.Status        = DiadocStatus::Created;
        DiadocTable.ToBoxid       = Buyer.get_BoxId();
        DiadocTable.FromBoxid     = seller.get_BoxId();
        DiadocTable.insert();
        ttscommit;


        /*sign = this.Signaturecreate();
        SignedContent.set_Content(GeneratedFile.get_Content());
        //SignedContent.set_SignByAttorney(true);

        //SignedContent.set_Signature(sign);
        XmlDocumentAttachment.set_SignedContent(SignedContent);

        MessageToPost.set_ToBoxId(Buyer.get_BoxId());
        MessageToPost.set_FromBoxId(seller.get_BoxId());
        MessageToPost.AddInvoice(XmlDocumentAttachment);*/
    }
    catch
    {
        netExcepn = CLRInterop::getLastException();
        box::info(netExcepn.ToString());
        throw error('Ошибка!');
    }
}
идея такая, что при формировании СФ вся информация ложится в табличку DiadocTable (чтобы не мешать пользователям), а пакетом с определенной периодичностью отсылается и проверяется типа : Отправлено/Не отправлено.
Понимаю, что может быть мало и не достаточно информации, но может быть поможет.
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.

Geändert von Pustik (19.01.2017 um 16:54 Uhr)
This post has been rated by: UNRW (2).
Alt 20.01.2017, 08:46   #5  
UNRW ist offline
UNRW
Участник
 
383 / 67 (3) ++++
Registriert seit: 16.09.2004
Ort: Москва
Просто мы выбрали путь "прямых" HTTP запросов и сами генерим через классы .NET POST запрос
Alt 20.01.2017, 11:03   #6  
AXcons ist offline
AXcons
Участник
 
442 / 112 (4) +++++
Registriert seit: 21.05.2015
Ort: Москва
Мы сами писали интеграцию с Диадоком, не стали покупать.
Alt 24.01.2017, 11:31   #7  
UNRW ist offline
UNRW
Участник
 
383 / 67 (3) ++++
Registriert seit: 16.09.2004
Ort: Москва
Всем спасибо. Сделали как в примерах SDK. Оказалось все просто, долго "копались" в сертификатах.
Alt 10.04.2017, 10:25   #8  
lamesnake ist offline
lamesnake
Участник
 
1 / 10 (1) +
Registriert seit: 10.04.2017
Zitat:
Zitat von Pustik Beitrag anzeigen
DataArray_X data;
Dataarray_X orgdata;
А что за тип Dataarray_X?
Alt 10.04.2017, 12:05   #9  
Pustik ist offline
Pustik
Участник
 
807 / 372 (14) ++++++
Registriert seit: 04.06.2004
Zitat:
Zitat von lamesnake Beitrag anzeigen
А что за тип Dataarray_X?
свой класс, написанный на базе стандартного Array, имеющий больше возможностей, удобств и т.д. относительно последнего
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.
Alt 02.08.2017, 12:19   #10  
IvanS ist offline
IvanS
Участник
Benutzerbild von IvanS
 
241 / 44 (2) +++
Registriert seit: 30.06.2006
Ort: Екатеринбург
Кто подскажет, что делаю не так?
АХ2009.
Скачал SDK, получил DiadocApi.dll, зарегистрировал в GAC.
Добавляю в АХ References, а в коде система не понимает, что есть такие элементы, то есть не показывается внутренности при нажатии на точку.
При чем в Visual Studio все нормально отображается.
Перезагрузка АОСа и сервера, на котором АОС крутится не помогает.
В какую сторону копать? Или может АХ2009 не совместима с данной библиотекой?
Alt 02.08.2017, 15:57   #11  
maldini ist offline
maldini
Участник
 
103 / 30 (2) +++
Registriert seit: 06.03.2007
Ort: москва
Zitat:
Zitat von IvanS Beitrag anzeigen
Кто подскажет, что делаю не так?
АХ2009.
Скачал SDK, получил DiadocApi.dll, зарегистрировал в GAC.
Добавляю в АХ References, а в коде система не понимает, что есть такие элементы, то есть не показывается внутренности при нажатии на точку.
При чем в Visual Studio все нормально отображается.
Перезагрузка АОСа и сервера, на котором АОС крутится не помогает.
В какую сторону копать? Или может АХ2009 не совместима с данной библиотекой?
Библиотеку protobuf-net.dll, которая собирается после компиляции проекта, зарегистрировали в GAC?

Geändert von maldini (02.08.2017 um 16:32 Uhr)
This post has been rated by: IvanS (1).
Alt 02.08.2017, 16:41   #12  
IvanS ist offline
IvanS
Участник
Benutzerbild von IvanS
 
241 / 44 (2) +++
Registriert seit: 30.06.2006
Ort: Екатеринбург
Zitat:
Zitat von maldini Beitrag anzeigen
Библиотека на Net написана? Какая версия Net Framwork?
Библиотеку protobuf-net.dll, которая собирается после компиляции проекта, зарегистрировали в GAC?
Спасибо большое. protobuf-net.dl не была зарегистрирована.
А вообще библиотека у написана на .Net3.5
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
msdax: Installing IIS 7 on Windows Server 2008 or Windows Server 2008 R2 : Installing IIS 7 : Installing and Configuring IIS 7 : The Official Microsoft IIS Site Blog bot DAX Blogs 0 04.04.2011 12:11
msdax: Support - PDFsharp & MigraDoc Blog bot DAX Blogs 0 03.04.2011 14:11
msdax: List of “Whats New in Dynamics AX 2012″ Documents is Now on PartnerSource! - Microsoft Dynamics AX Thoughts - AX Technical Blogs - Microsoft Dynamics Community Blog bot DAX Blogs 0 01.04.2011 13:11
msdax: Date Range in AOT Query from SSRS Blog bot DAX Blogs 0 01.04.2011 13:11
msdax: AX Support - Site Home - MSDN Blogs Blog bot DAX Blogs 0 31.03.2011 11:11

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu

Рейтинг@Mail.ru
Alle Zeitangaben in WEZ +3. Es ist jetzt 21:57 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.