19.01.2017, 14:32 | #1 |
Участник
|
Интеграция MSDAX и ДиаДок
Доброго времени суток всем.
Подскажите может быть кто-то сталкивался с интеграцией MSDAX с ЭДО ДиаДок для отправки СФ. http://api-docs.diadoc.ru/ru/latest/...d_invoice.html Документация написана неоднозначно, а разработка на стороне провайдера ДиаДок не может толком разъяснить ни "точку входа" ни точно с какими параметрами вызывать функцию API передачи СФ. Авторизацию и получение списка ящиков мы реализовали, отправка СФ не работает... Если кто сталкивался подскажите какой вы формируете заголовок для POST запроса и в какой структуре передаете XML по СФ. |
|
19.01.2017, 15:04 | #2 |
Дмитрий Ерин
|
В исходниках SDK уже смотрели?
|
|
19.01.2017, 15:23 | #3 |
Участник
|
исходники не отвечают на вопрос, сожалению.
тут надо чтобы кто-то однозначно сказал что конкретно надо использровать |
|
19.01.2017, 16:51 | #4 |
Участник
|
сам лично не писал, но вот куски кода примерно такие :
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('Ошибка!'); } } Понимаю, что может быть мало и не достаточно информации, но может быть поможет.
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. Последний раз редактировалось Pustik; 19.01.2017 в 16:54. |
|
|
За это сообщение автора поблагодарили: UNRW (2). |
20.01.2017, 08:46 | #5 |
Участник
|
Просто мы выбрали путь "прямых" HTTP запросов и сами генерим через классы .NET POST запрос
|
|
20.01.2017, 11:03 | #6 |
Участник
|
Мы сами писали интеграцию с Диадоком, не стали покупать.
|
|
24.01.2017, 11:31 | #7 |
Участник
|
Всем спасибо. Сделали как в примерах SDK. Оказалось все просто, долго "копались" в сертификатах.
|
|
10.04.2017, 10:25 | #8 |
Участник
|
|
|
10.04.2017, 12:05 | #9 |
Участник
|
свой класс, написанный на базе стандартного Array, имеющий больше возможностей, удобств и т.д. относительно последнего
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
02.08.2017, 12:19 | #10 |
Участник
|
Кто подскажет, что делаю не так?
АХ2009. Скачал SDK, получил DiadocApi.dll, зарегистрировал в GAC. Добавляю в АХ References, а в коде система не понимает, что есть такие элементы, то есть не показывается внутренности при нажатии на точку. При чем в Visual Studio все нормально отображается. Перезагрузка АОСа и сервера, на котором АОС крутится не помогает. В какую сторону копать? Или может АХ2009 не совместима с данной библиотекой? |
|
02.08.2017, 15:57 | #11 |
Участник
|
Цитата:
Сообщение от IvanS
Кто подскажет, что делаю не так?
АХ2009. Скачал SDK, получил DiadocApi.dll, зарегистрировал в GAC. Добавляю в АХ References, а в коде система не понимает, что есть такие элементы, то есть не показывается внутренности при нажатии на точку. При чем в Visual Studio все нормально отображается. Перезагрузка АОСа и сервера, на котором АОС крутится не помогает. В какую сторону копать? Или может АХ2009 не совместима с данной библиотекой? Последний раз редактировалось maldini; 02.08.2017 в 16:32. |
|
|
За это сообщение автора поблагодарили: IvanS (1). |
02.08.2017, 16:41 | #12 |
Участник
|
|
|
|
|