![]() |
#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). |
|
|