Meddelande:
Har nu lyckats klura ut hur jag skapar en faktura med SPCS API och .NET (C#).
Här kommer del av koden:
// Öppna företag räkna ned användarlicenser
[DllImport("adk.dll", EntryPoint = "_AdkOpen@8", CharSet = CharSet.Ansi)]
public static extern ADKERROR AdkOpen(string sysPath, string ftgPath);
// Skapa en struktur
[DllImport("adk.dll", EntryPoint = "_AdkCreateData@4", CharSet = CharSet.Ansi)]
public static extern int AdkCreateData(int IDataBaseId);
// Uppdatera
[DllImport("adk.dll", EntryPoint = "_AdkUpdate@4", CharSet = CharSet.Ansi)]
public static extern ADKERROR AdkUpdate(int pDb);
//Stäng företag räkna upp användarlicenser
[DllImport("adk.dll", EntryPoint = "_AdkClose@0", CharSet = CharSet.Ansi)]
public static extern ADKERROR AdkClose();
// Radera struktur
[DllImport("adk.dll", EntryPoint = "_AdkDeleteStruct@4", CharSet = CharSet.Ansi)]
public static extern ADKERROR AdkDeleteStruct(int pDb);
// Ställ på första post i strukturen
[DllImport("adk.dll", EntryPoint = "_AdkFirst@4", CharSet = CharSet.Ansi)]
public static extern ADKERROR AdkFirst(int pDb);
// Nästa post
[DllImport("adk.dll", EntryPoint = "_AdkNext@4", CharSet = CharSet.Ansi)]
public static extern ADKERROR AdkNext(int pDb);
// Lägg till
[DllImport("adk.dll", EntryPoint = "_AdkAdd@4", CharSet = CharSet.Ansi)]
public static extern ADKERROR AdkAdd(int pDb);
// Hämta sträng
[DllImport("adk.dll", EntryPoint = "_AdkGetStr@16", CharSet = CharSet.Ansi)]
public static extern ADKERROR AdkGetStr(int pDb, int iFieldID, string ppsValue, int iLen);
// Skapa en datarad
[DllImport("adk.dll", EntryPoint = "_AdkCreateDataRow@8", CharSet = CharSet.Ansi)]
public static extern int AdkCreateDataRow(int IDataBaseId, int iNumber);
// Hämta en datarad
[DllImport("adk.dll", EntryPoint = "_AdkGetDataRow@8", CharSet = CharSet.Ansi)]
public static extern int AdkGetDataRow(int pDB, int iIndex);
//Hämta en feltext
[DllImport("adk.dll", EntryPoint = "_AdkGetErrorText@16", CharSet = CharSet.Ansi)]
unsafe public static extern ADKERROR AdkGetErrorText(int err, int nErrorTextType, [MarshalAs(UnmanagedType.LPStr)]ref StringBuilder achBuf, int ILen);
[DllImport("adk.dll", EntryPoint = "_AdkSetDouble@16", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
unsafe public static extern ADKERROR AdkSetDouble(int pDb, int iFieldId, double dValue);
[DllImport("adk.dll", EntryPoint = "_AdkDeleteRow@8", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
unsafe public static extern ADKERROR AdkDeleteRow(int pDb, int iIx);
// AdkSetStr
[System.Runtime.InteropServices.DllImport("adk.dll", EntryPoint = "_AdkSetStr@12", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
public static extern ADKERROR AdkSetStr(int pDb, int iFieldId, string pValue);
[DllImport("adk.dll", EntryPoint = "_AdkSetData@12", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
unsafe public static extern ADKERROR AdkSetData(int pDb, int iIx, int pDataRow);
public struct ADKERROR
{
public int lRc;
public int lDbTable;
public int lField;
public int lFunction;
public int lProgramPart;
}
private void button1_Click(object sender, EventArgs e)
{
string ftgpath = "C:\\Program Files\\SPCS\\SPCS Administration\\Ovnbol";
string syspath = "C:\\Program Files\\SPCS\\SPCS Administration";
ADKERROR err = new ADKERROR();
err = AdkOpen(syspath, ftgpath);
if (err.lRc != 0)
{
textBox1.Text = "Fel vid öppning av SPCS";
}
else
{
textBox1.Text = "Spcs öppnade " + ftgpath;
}
int pData;
pData = AdkCreateData(ADK_DB_INVOICE_HEAD);
textBox1.Text += "\r\n" + pData.ToString();
err = AdkSetStr(pData, ADK_OOI_HEAD_CUSTOMER_NUMBER, "104");
err = AdkSetStr(pData, ADK_OOI_HEAD_TYPE_OF_INVOICE, "F");
int pDataRow;
pDataRow = AdkCreateDataRow(ADK_DB_INVOICE_ROW, 1);
int pDataTemp;
pDataTemp = AdkGetDataRow(pDataRow, 0);
err = AdkSetStr(pDataTemp, ADK_OOI_ROW_ARTICLE_NUMBER, "112");
err = AdkSetDouble(pDataTemp, ADK_OOI_ROW_QUANTITY2, 40);
err = AdkSetDouble(pDataTemp, ADK_OOI_ROW_QUANTITY1, 40);
err = AdkSetData(pData, ADK_OOI_HEAD_ROWS, pDataRow);
err = AdkSetDouble(pData, ADK_OOI_HEAD_NROWS, 1);
err = AdkAdd(pData);
err = AdkDeleteStruct(pData);
}
Skam den som ger sig... Eller Trägen vinner
Ja ja kanske inte den snyggaste lösningen, men det fungerar. Felhantering och sådant ska naturligtvis till. Men så här långt fungerar det iaf.