Я использую следующий код sage50 uk sdk (v26.2.136.0) для создания счета.
//Declare Variables
SageDataObject250.SDOEngine oSDO = new SageDataObject250.SDOEngine();
SageDataObject250.WorkSpace oWS;
SageDataObject250.InvoicePost oInvoicePost;
SageDataObject250.InvoiceItem oInvoiceItem;
SageDataObject250.SalesRecord oSalesRecord;
SageDataObject250.StockRecord oStockRecord;
String szDataPath;
//Instantiate WorkSpace
oWS = (SageDataObject250.WorkSpace)oSDO.Workspaces.Add("Example");
//Show select company dialog
szDataPath = oSDO.SelectCompany("C:\\ProgramData\\Sage\\Accounts\\2020");
//Try a connection, will throw an exception if it fails
try
{
//Leaving the username and password blank generates a login dialog
oWS.Connect(szDataPath, "", "", "Example");
//Instantiate objects
oSalesRecord = (SageDataObject250.SalesRecord)oWS.CreateObject("SalesRecord");
oInvoicePost = (SageDataObject250.InvoicePost)oWS.CreateObject("InvoicePost");
oStockRecord = (SageDataObject250.StockRecord)oWS.CreateObject("StockRecord");
//Set the invoice type
oInvoicePost.Type = (SageDataObject250.InvoiceType)SageDataObject250.LedgerType.sdoLedgerInvoice;
//Read the first customer record and use to populate the invoice fields
oSalesRecord.MoveFirst();
SDOHelper.Write(oInvoicePost.Header, "ACCOUNT_REF", (String)SDOHelper.Read(oSalesRecord, "ACCOUNT_REF"));
SDOHelper.Write(oInvoicePost.Header, "NAME", (String)SDOHelper.Read(oSalesRecord, "NAME"));
SDOHelper.Write(oInvoicePost.Header, "ADDRESS_1", (String)SDOHelper.Read(oSalesRecord, "ADDRESS_1"));
SDOHelper.Write(oInvoicePost.Header, "ADDRESS_2", (String)SDOHelper.Read(oSalesRecord, "ADDRESS_2"));
SDOHelper.Write(oInvoicePost.Header, "ADDRESS_3", (String)SDOHelper.Read(oSalesRecord, "ADDRESS_3"));
SDOHelper.Write(oInvoicePost.Header, "ADDRESS_4", (String)SDOHelper.Read(oSalesRecord, "ADDRESS_4"));
SDOHelper.Write(oInvoicePost.Header, "ADDRESS_5", (String)SDOHelper.Read(oSalesRecord, "ADDRESS_5"));
SDOHelper.Write(oInvoicePost.Header, "DEL_ADDRESS_1", (String)SDOHelper.Read(oSalesRecord, "DEL_ADDRESS_1"));
SDOHelper.Write(oInvoicePost.Header, "DEL_ADDRESS_2", (String)SDOHelper.Read(oSalesRecord, "DEL_ADDRESS_2"));
SDOHelper.Write(oInvoicePost.Header, "DEL_ADDRESS_3", (String)SDOHelper.Read(oSalesRecord, "DEL_ADDRESS_3"));
SDOHelper.Write(oInvoicePost.Header, "DEL_ADDRESS_4", (String)SDOHelper.Read(oSalesRecord, "DEL_ADDRESS_4"));
SDOHelper.Write(oInvoicePost.Header, "DEL_ADDRESS_5", (String)SDOHelper.Read(oSalesRecord, "DEL_ADDRESS_5"));
SDOHelper.Write(oInvoicePost.Header, "CUST_TEL_NUMBER", (String)SDOHelper.Read(oSalesRecord, "TELEPHONE"));
SDOHelper.Write(oInvoicePost.Header, "CONTACT_NAME", (String)SDOHelper.Read(oSalesRecord, "CONTACT_NAME"));
SDOHelper.Write(oInvoicePost.Header, "GLOBAL_TAX_CODE", (Int16)SDOHelper.Read(oSalesRecord, "DEF_TAX_CODE"));
//Populate other invoice header information
SDOHelper.Write(oInvoicePost.Header, "INVOICE_DATE", (DateTime)DateTime.Today);
SDOHelper.Write(oInvoicePost.Header, "NOTES_1", (String)"Notes 1");
SDOHelper.Write(oInvoicePost.Header, "NOTES_2", (String)"Notes 2");
SDOHelper.Write(oInvoicePost.Header, "NOTES_3", (String)"Notes 3");
SDOHelper.Write(oInvoicePost.Header, "TAKEN_BY", (String)"Chris Reed");
SDOHelper.Write(oInvoicePost.Header, "ORDER_NUMBER", (String)"");
SDOHelper.Write(oInvoicePost.Header, "CUST_ORDER_NUMBER", (String)"");
SDOHelper.Write(oInvoicePost.Header, "PAYMENT_REF", (String)"");
// If anything is entered in the GLOBAL_NOM_CODE, all of the updated invoice’s splits will have this nominal code and
// also this willforce anything entered in the GLOBAL_DETAILS field into the all the splits details field.
SDOHelper.Write(oInvoicePost.Header, "GLOBAL_NOM_CODE", (String)"");
SDOHelper.Write(oInvoicePost.Header, "GLOBAL_DETAILS", (String)"");
SDOHelper.Write(oInvoicePost.Header, "INVOICE_TYPE_CODE",
(Byte)SageDataObject250.InvoiceType.sdoProductInvoice);
// Set the Net Value Discount values. If setting NVD the program logic will now recalculate
// the invoice Item values regardless of whether the TAX_FLAG is set on the item.
SDOHelper.Write(oInvoicePost.Header,"NETVALUE_DISCOUNT", (Double)10);
SDOHelper.Write(oInvoicePost.Header,"NETVALUE_DESCRIPTION", (String)"Discount offered");
//Create and invoice item
//Need to invoke the Add method
oInvoiceItem = (SageDataObject250.InvoiceItem)SDOHelper.Add(oInvoicePost.Items);
//Read the First Stock Code & populate fields from Stock Code
oStockRecord.MoveFirst();
SDOHelper.Write(oInvoiceItem, "STOCK_CODE", (String)SDOHelper.Read(oStockRecord, "STOCK_CODE"));
SDOHelper.Write(oInvoiceItem, "DESCRIPTION", (String)SDOHelper.Read(oStockRecord, "DESCRIPTION"));
SDOHelper.Write(oInvoiceItem, "NOMINAL_CODE", (String)SDOHelper.Read(oStockRecord, "NOMINAL_CODE"));
SDOHelper.Write(oInvoiceItem, "TAX_CODE", (Int16)SDOHelper.Read(oStockRecord, "TAX_CODE"));
//Populate other fields required for Invoice Item
//From 2015 the update method now wraps internal business logic
//that calculates the vat amount if a net amount is given.
//If you wish to calculate your own Tax values you will need
//to ensure that you set the TAX_FLAG to 1 and set the TAX_AMOUNT value on the item line
//***Note if a NVD is set the item line values will be recalculated
//regardless of the Tax_Flag being set to 1***
SDOHelper.Write(oInvoiceItem, "QTY_ORDER", (Int32)1);
SDOHelper.Write(oInvoiceItem, "UNIT_PRICE", (Int32)200);
SDOHelper.Write(oInvoiceItem, "NET_AMOUNT", (Int32)200);
SDOHelper.Write(oInvoiceItem, "FULL_NET_AMOUNT", (Int32)200);
SDOHelper.Write(oInvoiceItem, "COMMENT_1", (String)"Comment 1");
SDOHelper.Write(oInvoiceItem, "COMMENT_2", (String)"Comment 2");
SDOHelper.Write(oInvoiceItem, "UNIT_OF_SALE", (String)"");
SDOHelper.Write(oInvoiceItem, "FULL_NET_AMOUNT", (Int32)200);
SDOHelper.Write(oInvoiceItem, "TAX_RATE", (Int32)20);
//Update the invoice
if (oInvoicePost.Update())
{
MessageBox.Show("Invoice Posted Successfully", "C# SDO Examples");
}
else
{
MessageBox.Show("Failed to create Invoice", "C# SDO Examples");
}
//Disconnect
oWS.Disconnect();
}
catch (Exception ex)
{
MessageBox.Show("SDO Generated the Following Error: \n\n" + ex.Message, "Error!");
}
Это идеально создает счет, но я не знаю, как сделать так, чтобы обновление бухгалтерской книги счета что он может появиться в списке клиентов в sage 50. ![enter image description here](https://i.stack.imgur.com/gFf6p.png)
Счет-фактура может появиться в списке действий клиента, когда мы обновим бухгалтерскую книгу в списке счетов-фактур, как показано на следующем экране. выстрел. ![enter image description here](https://i.stack.imgur.com/mxB4q.png)
Вот почему мне нужен код SDK, который будет делать это.