AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.01.2017, 14:32   #1  
UNRW is offline
UNRW
Участник
 
383 / 67 (3) ++++
Регистрация: 16.09.2004
Адрес: Москва
Интеграция MSDAX и ДиаДок
Доброго времени суток всем.
Подскажите может быть кто-то сталкивался с интеграцией MSDAX с ЭДО ДиаДок для отправки СФ.

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

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

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

Если кто сталкивался подскажите какой вы формируете заголовок для POST запроса и в какой структуре передаете XML по СФ.
Старый 19.01.2017, 15:04   #2  
Ruff is offline
Ruff
Дмитрий Ерин
Аватар для Ruff
1C
 
475 / 396 (14) ++++++
Регистрация: 18.09.2003
Адрес: Тула
В исходниках SDK уже смотрели?
Старый 19.01.2017, 15:23   #3  
UNRW is offline
UNRW
Участник
 
383 / 67 (3) ++++
Регистрация: 16.09.2004
Адрес: Москва
исходники не отвечают на вопрос, сожалению.
тут надо чтобы кто-то однозначно сказал что конкретно надо использровать
Старый 19.01.2017, 16:51   #4  
Pustik is offline
Pustik
Участник
 
807 / 372 (14) ++++++
Регистрация: 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 (чтобы не мешать пользователям), а пакетом с определенной периодичностью отсылается и проверяется типа : Отправлено/Не отправлено.
Понимаю, что может быть мало и не достаточно информации, но может быть поможет.
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.

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

Последний раз редактировалось maldini; 02.08.2017 в 16:32.
За это сообщение автора поблагодарили: IvanS (1).
Старый 02.08.2017, 16:41   #12  
IvanS is offline
IvanS
Участник
Аватар для IvanS
 
241 / 44 (2) +++
Регистрация: 30.06.2006
Адрес: Екатеринбург
Цитата:
Сообщение от maldini Посмотреть сообщение
Библиотека на Net написана? Какая версия Net Framwork?
Библиотеку protobuf-net.dll, которая собирается после компиляции проекта, зарегистрировали в GAC?
Спасибо большое. protobuf-net.dl не была зарегистрирована.
А вообще библиотека у написана на .Net3.5
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
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
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 02:18.