Referensmanual. XOR Compact AB 1997-



Relevanta dokument
Snabbguide Visma Compact API Version 5.1 Copyright Visma Spcs AB Visma Compact API

Snabbguide Visma Compact API Copyright Visma Spcs AB

XOR Compact Konverteringsverktyg

Kundreskontra Hybron MPS version 7.7.0

Bokföring Nytt konto Ctrl-N Ta bort konto Ctrl-R Obs!

Leverantörsreskontra. Generellt 2 Registrera leverantörsfaktura 3 Betalning leverantörsfaktura 6 Utbetalning via LB-rutin 10.

Börja med Smart Registrera din kund Registrera din artikel Göra en faktura... 16

Nyheter Hybron MPS version 6.6.0

Handledning. Att skicka elektronisk fristående Svefaktura 1.0 till Landstinget i Östergötland

Offerter, order och kundfakturor

BgMax Bankgiro Inbetalningar

Att tänka på vid upplägg av företag

Skattegränsrapportering - Åland

Fakturering & Kundreskontra

Momshantering i Pyramid

Ankomstregistrera leverantörsfaktura

VISMA EGET AKTIEBOLAG --- version för inkomståret 2011

ÅRSSKIFTE Pyramid Business Studio

Kundreskontra. Kapitel 9 Kundreskontra Innehåll

Total IN Inläsningsfil

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Mamut Kunskapsserie, nr Mamut Business Software VERIFIKATSREGISTRERING EFFEKTIV VERIFIKATSREGISTRERING MED MAMUT BUSINESS SOFTWARE

Senast uppdaterat: Exder EDI direktorder sida 1 av 18

Klicka på Skrivare. När utskriften är klar och du kontrollerat att allt är rätt godkänner du Utbetalningsjournalen och verifikationen skapas.

Kundfakturor. Raindance - Kundreskontra. Kommando KFM

Kom igång med Fakturaportalen!

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic

Kom igång med Fakturaportalen!

Innehållsförteckning FAKTURERA ENKELT 2

Handledning för Örebro Kommun

SIE4-läsaren En applikation utvecklad i Excel som läser SIE4 filer

Steg 12 Affärssystem Visma/SPCS Adm 1000 Windows 7/8

Handledning för Fristående Svefaktura

Det är fullt tillåtet att göra laborationen innan laborationstillfället.

Kundkategorier Klicka på Kundkategorier.

Nyheter i Norstedts Tidbok Mattias Claesson Produktchef

Versionsnyheter. Visma Administration Visma Fakturering Visma Förening. Visma Mobil Scanner. Visma Administration Webbfakturering

Räntefakturering. Systeminställningar

Snabbguide Bokföring i Mamut. Kompletta ekonomi-, CRMoch e-handelslösningar för verksamheter med 1-50 anställda

Handledning. Att skicka elektronisk fristående Svefaktura 1.0 till Säljdag Intention AB

Visual Basic, en snabbgenomgång

Kundreskontra. Företagsunderhåll/Kundreskontra

Internfakturaportalen

Versionsdokumentation juni 2011

Nyhetsdokument Vitec Ekonomi

Snabbguide för. Visma Integration för Visma Administration 500/1000/2000 Visma Integration för Visma Förening. Utvecklarpaket

Nedan ser du vilka huvudfunktioner som finns i de olika varianterna av Visma Compact. Visma Compact 750. Visma Compact x x x.

För att kunna använda räntor och påminnelser skall följande punkter upprättas i systemet:

INNEHÅLL. INSTALLATION Maskinkrav 2 Installation 2 Säkerhet 2 MENYERNA Huvudmeny 3 Register 3 Fakturering 4 Rapporter 4

Utskrifter. Stäng fönstret Inventering.

Nyheter i version och

Momshantering i Pyramid

Bokföring. Företagsunderhåll. Inställningar Först ska vi titta på de inställningar i företagsunderhållet som påverkar arbetet med bokföringen.

Nyheter i version , och

TDIU01 - Programmering i C++, grundkurs

Leverantörsreskontra. Företagsunderhåll/Leverantörsreskontra Gå till Arkiv Företagsunderhåll Leverantörsreskontra.

Husavdrag. Copyright FDT AB Köpmangatan LULEÅ. Försäljning Support Fax Hemsida

Handledning. Att skicka elektronisk fristående Svefaktura 1.0 till Region Skåne landsting

Finans Scala Bruk Maria Åhrberg

Lathund Registrering av försäljningsorder AGRESSO Logistik

24SevenOffice Systemdokumentation. Uppdaterad

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Laboration 1 Introduktion till Visual Basic 6.0

Årsskiftesrutiner. Innehåll. Avsluta sista månaden på räkenskapsåret

Rebus är uppbyggt av olika moduler och grundpaketet i Rebus Bussbokning innehåller flera av dessa. En funktion för avståndsberäkning.

Visma Compact 750 ett användarvänligt och flexibelt ekonomiprogram

Visma Förening. Ekonomiprogram för ideella föreningar. Medlemsregister. Fakturering. Avtalsfakturering

Valutahanteringen i REBUS

Handledning för Västra Götalandsregionen (VGR)

Användarhandledning Version 1.2

Arbetsgång vid reskontraavstämning

Husarbete (beskrivning för dig som har tilläggsmodulen Husarbete och som arbetar i det nya grundboksutseendet)

Lathund - Registrering av försäljningsorder AGRESSO Logistik

Memo vid årsskifte. Gäller Pyramid Business Studio från version 3.39A (25 november 2014)

Lathund - Årshantering i Entré Windows

Inbetalade kundfakturor

KARLSTADS UNIVERSITET 12/8/09 informatik & datavetenskap Johan Öfverberg, Kerstin Andersson Laboration 4, ISG A04 och DVG A08 HT-09

Hantering av kostnadsbokföring t.o.m version 3.40A 2 Prioriteringsordning i 3.40A för hämtning av konto 2

Användarmanual. UPS Billing Center

Arbetsgång för Husarbete

Palette. Matchning fakturor mot order - Manual. Version 1.0 /

Handledning. Att skicka elektronisk fristående Svefaktura 1.0 via eprinter till Landstinget i Östergötland

Visma Administation 200

Vad gör programmet Datafångst från Plusgirot och Visa?

Adra Match Accounts Användarmanual Förenklad

EXFLOW DYNAMICS NAV ELEKTRONISK FAKTURAHANTERING

Minimanual för Baltzaranvändare, ABF

Fortnox. För att aktivera bokföring genom Fortnox för er förening finns dessa krav:

Omföra moms i PromikBook

729G04 Programmering och diskret matematik. Föreläsning 7

Må nådsskifte. Innehåll SEPTEMBER 2014

Tentamen i Introduktion till programmering

Studenten möter sex affärshändelser och uppgiften är att bokföra händelserna eller att visa hur händelsen påverkar resultaträkning och balansräkning.

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Räntor och påminnelser kunder Räntor och påminnelser kunder Bokföringskonto till ränteintäkter från kunder

Manual för INFOFLEX Kassaregister IVK 1.0

Tentamen, EDAA20/EDA501 Programmering

Industriell ekonomi. Erik Nilsson Doktorand

ANVÄNDARMANUAL FAKTURERA

Lathund Elektronisk fakturahantering

Transkript:

Referensmanual XOR Compact AB 1997-

OpenClient... 24 SetBalanceGroups... 25 SetResultGroups... 26 GetNextVoucherNo... 27 GetReservedAccount... 28 GetStandardText... 29 VoucherRowAdd... 30 AccountAdd... 31 ObjectAdd... 32 PersonAdd... 33 ArticleAdd... 34 GetNextNumber... 35 DueDateCalc... 36 InvoiceHeaderAdd... 37 InvoiceRowAdd... 38 InvoiceFooterAdd... 39 LedgerAdd... 40 GetRemainder... 41 DeleteInvoice... 42 XGetAccount... 43 XGetObject... 44 XGetPerson... 45 XGetArticle... 46 CloseClient... 47

DbOpen... 64 DbClose... 65 DbLock, DbUnlock... 66 RecAdd - XBAdd... 67 RecReturn - XBReturn... 68 RecFind - XBFind... 70 RecBest - XBBest... 72 RecExist - XBExist... 74 RecFirst - XBFirst... 76 RecLast - XBLast... 78 RecNext - XBNext... 79 RecPrev - XBPrev... 81 RecWrite - XBWrite... 83 RecDel... 84 TrBegin, TrEnd... 85 DateSystem... 87 YMDToDate... 89 DayOfWeek... 90 BeginWeek... 92 EndWeek... 93 EndWorkWeek... 94 DayOfYear... 95 BeginYear... 96 EndYear... 98 BeginMon... 100 EndMon... 102 Year(X)... 104 Mon... 105 Day(X)... 106 Week... 107 CLIENT - Företagsregister... 110 ACCOUNT - Kontoregister... 113 OBJECT - Objektregister... 114 BALANCE Saldoregister... 115 VOUCHER - Verifikatradsregister... 117 AUTO - Automatfördelningsregister... 118 DEFAULT Reserverade konton... 119 TEXT - Textregister... 120 HISTORY - Anteckningsregister... 121 PERSON - Personregister... 122 PERSSALES - Personstatistikregister... 123 LEDGER - Reskontraregister... 125 INVOICE Fakturaregister m.m.... 126 INVOICEROW Fakturaradsregister m.m.... 127 ARTICLE - Artikelregister... 128 ARTSALES - Artikelstatistikregister... 129

Denna skrift är en referensmanual till API:t för XORBASE 4.0, den databasmotor vilken XOR Compact 4.0 begagnar sig av. Manualen riktar sig till de som avser att skriva försystem eller tilläggsprogram till XOR Compact 4.0, och förutsätter att läsaren är någorlunda insatt i grundläggande programmeringsmetodik något av programspråken BASIC, Visual Basic, C eller C++ databasbegrepp såsom register, poster, nycklar o.dyl. ekonomiska begrepp såsom konto, verifikationer, objekt, reskontra o.dyl Inledningsvis ges exempel på vad man kan åstadkomma med API:t samt vad man bör tänka på innan man börjar implementera en applikation. Därefter beskrivs i tur och ordning API:ts s.k. högnivå-, lågnivå- och juliandatumrutiner med deklarationer för varje enskild rutin samt en del programexempel. Sist finns en beskrivning av databasens uppbyggnad med alla registerstrukturer, nycklar och returkoder.

XORBASE 4.0 är namnet på den databasmotor som XOR Compact 4.0 använder sig av. Du kan som programutvecklare av kringsystem (t.ex. löne-, skatte- eller analysprogram) använda denna motor för att läsa och skriva information i XORBASE-databaser. Gränsnittet, eller API:t, mellan ditt kringsystem och databasen utgörs av det dynamiska länkbiblioteket XORBASE4.DLL, vilket består av ett antal högnivå-, lågnivå- och datumrutiner som ditt kringsystem kan använda sig av (filen XORBASE4.DLL placeras vid installation av XOR Compact 4.0 i samma katalog som COMPACT4.EXE). Både XORBASE4.DLL och XFILES4.DLL måste finnas antingen i samma katalog som din applikation eller i Windowskatalogen. Om du väljer att öppna DLL-filerna explicit via LoadLibrary så kan du använda de filer som ligger i XOR Compact katalogen. Då behöver de inte finnas någon annanstans på hårddisken. Med kan din applikation ställa om och läsa av redovisnings- och faktureringsspecifik information i databasen, samt skapa nya poster på ett enkelt sätt. Dessa är särskilt lämpliga att använda sig av om du utvecklar ett försystem som skall till XOR Compact 4.0. Med får din applikation ett mer direkt kommando över databasen och kan skapa, radera, söka och ändra poster i alla register efter behov. Med kan ditt program behandla den datumtyp, s.k., som XORBASE använder. Juliandatum definieras som ett löpande heltal motsvarande antalet dagar som passerat sedan 1980-01-01. Det finns en signifikant skillnad mellan hög- och lågnivårutinerna: Högnivårutinerna kan endast hantera, medan lågnivårutinerna kan hantera. Följande bild illustrerar hur din applikation kommunicerar med API:t: Här ser man att: högnivårutinerna egentligen består av färdigskrivna sekvenser av lågnivårutiner man med lågnivårutinerna kan operera på flera databaser samtidigt man med lågnivårutinerna kan utföra mer fundamentala operationer på databasen datumrutinerna inte opererar på databasen

Principen för många standardoperationer på databasen, t.ex. läsning av poster, är följande (skrivet i pseudokod): Deklarera nödvändiga variabler (post, nyckel, hjälpvariabler m.m.) Tilldela variablerna startvärden Öppna databasen Sök upp första posten i urvalet med avseende på angiven nyckel Så länge (det finns fler poster), utför [ Om aktuell post tillhör ditt urval, så Behandla aktuell post (t.ex. uppdatera, ta bort, skriv ut m.m) Hämta nästa post ] Stäng databasen En standardoperation kan vara att t.ex. fylla en kontolista med kontonummer och kontonamn. Nedanstående exempel (i BASIC) gör just detta och följer ovanstående princip: Dim dbase As String Dim directory As String Dim DB As Long Dim acc As AccountType Dim accno As String * 7 Dim ok As Integer dbase = "compact" + Chr$(0) directory = "c:\compact4\0001" + Chr$(0) DB = DbOpen(dbase, directory, 0&, 0) If DB = 0& Then Print "Misslyckades med att öppna databasen" End End If ok = RecFind(DB, ACCOUNT, 1, ByVal accno, acc) Do While ok = DbOk If (Left$(acc.accNo) = "1") acc.accno = Left$(acc.accNo, Instr(acc.accNo, Chr$(0)) - 1) acc.accname = Left$(acc.accName, Instr(acc.accName, Chr$(0)) - 1) list1.additem acc.accno & " " & acc.accname End If ok = RecNext(DB, ACCOUNT, 1, acc) Loop DbClose(DB)

Din applikation kan med XORBASE 4.0 API bilda en länk mellan XOR Compact 4.0 och andra databaser/administrativa program. Nedanstående bild illustrerar hur är kopplad till en som används av ett. Din Applikation kan t.ex. skapa poster i XOR Compact 4.0 som grundar sig på information som ett Annat Administrativt Program lagrat i en ACCESSdatabas. Denna information kan vara timkostnad och tidsåtgång för utförda arbeten av olika personer i ett tjänsteproducerande företag; Din Applikation kan utifrån denna information via XORBASE 4.0 API skapa fakturor för dessa arbeten, som sedan kan skrivas ut och bevakas i XOR Compact 4.0.

Om du designar ett s.k. försystem som skall överföra verifikatrader till en XORBASE-databas måste du Bestämma dig för en specifik verifikatnummerserie i XOR Compact. Kontrollera nästa lediga nummer i verifikatnummerserien (med rutinen GetNextVoucherNo). Uppdatera konto- och företagssaldon. När du förbereder en överföring av verifikatrader är det nödvändigt att veta vilket verkligt kontonummer ett visst konto har för att du överhuvudtaget skall kunna skapa verifikatrader i XORBASE. Eftersom databasen stöder olika kontoplaner, kan samma konto (t.ex. ) ha olika kontonummer i olika databaser (t.ex. i en databas som använder BAS95 och i en databas som använder EUBAS97). För att en enkel databasoperation skall bli oberoende av kontoplan, finns det ett register i databasen som innehåller de reserverade kontona. Detta register heter DEFAULT och posterna består av två fält: DefNo= AccNo= reserverat konstant nummer för det reserverade kontot det verkliga kontonumret som används bl.a. i databasens verifikat- och kontoregister För att ta reda på vilket kontonummer i databasen ett visst konto har, används lämpligen högnivårutinen. Följande reserverade konton finns definierade i databasen: 1 Utgående moms 1 2 Utgående moms 2 10 Ingående moms 1 11 Ingående moms 2 17 Ingående moms 4 18 Lagerkonto 19 Årets resultat 20 Kundfordringar 21 Debiterade frakter 22 Avgift 23 Öresutjämning 24 Ränteintäkter 25 Finansiella poster 26 Försäljning 27 Varuköp 28 Leverantörsskulder 29 Inbetalningskonto 30 Kontantfakturering 31 Räntekostnader 32 Justeringskonto 33 Utgående kassarabatt 34 Ingående kassarabatt 35 Kursvinst 36 Kursförlust 37 Export EU försäljning 38 Övrig exportförsäljning 39 Utbetalningskonto 40 Momsavräkning 41 Deb. Frakter export 42 Avgift Export

För att du enkelt skall kunna överföra data till XOR Compact 4.0 i ditt försystem finns det ett antal högnivårutiner för detta ändamål (att operera på databasen med lågnivårutinerna kräver en viss programmeringsvana). Med högnivårutinerna kan du på ett enkelt sätt göra korta programsekvenser som t.ex. överför transaktionsrader, konton, objekt, personer, artiklar, fakturor, reskontraposter med eller utan transaktioner till redovisningen. För att i fleranvändarmiljöer eliminera risken att två parallellt exekverande program uppdaterar samma post i samma databas samtidigt (vilket innebär en fatal inkonsekvens i databasen), används i alla databassammanhang någon form av låsning. Låsning innebär att endast ett program tillåts operera åt gången. XORBASE4 kan användas i fleranvändarmiljö, vilket ställer ett antal krav på dig som utvecklare av försystem: I XORBASE4 används fillåsning, och högnivårutinerna som du kan använda för att hantera detta heter och ; utför en fillåsning i fleranvändarsystem och denna fillåsning släpps först när anropas. Alla anrop till databasen förutsätter att du först öppnar databasen med funktionen. Efter utförda operationer måste du stänga databasen med. låser. Därför bör du INTE anropa en gång i början av ditt program och en gång i slutet av ditt program, eftersom detta låser databasen för andra användare så länge ditt program exekverar. Anropa istället och före och efter varje deloperation i ditt program. Då låser ditt program databasen under kortast möjliga tid, och tillåter att andra program får tillgång till databasen när ditt program inte behöver den. XOR Compact öppnas automatiskt i rätt läge av högnivårutinerna, d.v.s. du behöver inte bry dig om att själv öppna databasen rätt. Dock måste du kontrollera om databasen är öppen och hur den då blivit öppnad. Därför är det viktigt att du testar returvärdet från. Om XOR Compact redan är öppen 'exklusivt' (d.v.s. när en användare är inne och endast en användare får vara inne i databasen åt gången), tillåts inte att operationen genomförs. XOR Compact måste då stängas först. Om XOR Compact däremot är öppen i 'Fleranvändarmiljö' går det alldeles utmärkt att överföra data.

Vissa av lågnivårutinerna är specialskrivna för de nyare varianterna av Visual Basic; Visual Basic 4.0, 5.0 och VBA Visual Basic for Applications). De lågnivårutiner som är listade i vänster kolumn nedan bör begagnas om du använder VB. Använd i dessa fall mostsvarande rutiner med prefix i den högra kolumnen. Dessa rutiner motsvarar i funktion rutinerna till vänster. Dessa båda typer av rutiner ( och ) är, d.v.s. om du använda en -rutin i din utvecklingsmiljö, så riskerar du felkörningar om du använder motsvarande -rutin. Du kan alltså inte helgardera dig med att alltid använda -rutinerna. RecAdd RecReturn RecFind RecBest RecExist RecFirst RecLast RecNext RecPrev RecWrite XBAdd XBReturn XBFind XBBest XBExist XBFirst XBLast XBNext XBPrev XBWrite XOR Compact 4.0 packar internt sina strukturer (poster) med 1-byte-boundary. Detta innebär att program som kommunicerar via XORBASE4.DLL måste ha använda samma packning för sina strukturer som Compact 4.0 (d.v.s. 1-byte-boundary). De flesta vanliga programmeringsspråk och kompilatorer stöder detta, med undantag för, och, samt vissa 4GL-verktyg som inte hanterar begreppen Aligned structures, Packed records eller User defined types. Användare av bör arbeta med rutinerna. För nyare varianter av, ex., och, används 4 bytes alignment av user defined types. De flesta av rutinerna som använder user defined types har därför utökats med en uppsättning rutiner för att avhjälpa problemen med. Använd -rutinerna istället för -rutinerna i fall du har 4 bytes alignment. Dessa rutiner är utkommenterade med efter -rutinerna i exemplen.

Om du delar in det arbete ditt program skall göra i väl avgränsade logiska arbetsmoment (och dokumenterar dessa för sig), blir programmet lättare att förstå och felsöka under utvecklingen. Dessutom förenklas underhållet betydligt då ny funktionalitet skall läggas till eller om de grundläggande förutsättningarna för programmet förändras (t.ex. om standarden för ett visst filformat förändras). Detta ger en bra översikt över de variabler du har tillgängliga, vilket minskar risken för dubbel deklaration och eventuella tvetydigheter. När du under ditt programmeringsarbete dessutom finner att du behöver fler variabler, så behöver du inte vara oklar över var någonstans du skall deklarera dem. Vidare blir de naturligtvis enklare att hitta och att omdeklarera om de behöver ändras, byggas ut, bortkommenteras eller tas bort. En variabel som används utan att du har tilldelat den ett värde, kan i många fall ge upphov till svårhittade programkörningsfel. Returvärdet från en för programflödet kritisk funktion (t.ex. och i XORBASE 4.0 API) bör testas för att undvika att gränsfall och specialfall inte får oväntade konsekvenser. Detta är viktigt för att du inte ska orsaka korruptioner i filen eller databasen. En hängande handle kan dessutom ge upphov till kraftiga prestandaproblem vid efterföljande fil- och/eller databasoperationer. Undvik brutala hoppsatser (såsom t.ex. ) de är nästan aldrig användbara, utan tjänar endast till att försvåra läsbarheten och därmed också försvåra framtida underhåll. Vad du än programmerar (skapar/ändrar/lägger till); en liten programsnutt, funktion, procedur, rutin eller skript, bör testas under samma förutsättningar som när programkoden kommer att användas. Din interna representation av årtal måste kunna hantera 4-positioners årtal (1-9-9-7) för att klara av det nära stundande tusenårsskiftet. Detta gäller naturligtvis också år 2000. Detta underlättar avsevärt framtida underhåll av programkoden. Varje program och varje i programmet ingående funktion/procedur/rutin/skript bör inledas med ett stycke kommentarer som beskriver i klartext vad programkoden utför, samt vilket datum och av vem programkoden skrevs. Ett komplicerat avsnitt inuti en funktion/procedur/rutin/skript som utför en avgränsad del av arbetet, bör även det inledas med någon/några kommentarer till vad just det avsnittet utför.

XOR Compact 4.0 och XORBASE4 är internt skrivet och dokumenterat på engelska bl.a. för att förenkla samarbete med andra länder. Därför är också alla funktions- och databasdeklarationer i denna manual på engelska. Här följer en liten engelsk-svensk ordlista med några vanliga begrepp inom ekonomi och handel: account amount article client currency discount freight interest invoice ledger object price residual stock tax T.O.D. T.O.P. unit V.A.T. voucher weight W.O.D. konto belopp artikel klient (företag) valuta rabatt frakt ränta faktura reskontra objekt (projekt/kostnadsställe) pris rest lager skatt leveransvillkor betalningssätt enhet moms verifikat vikt leveranssätt

Följande tre listor är översikter över de högnivå- lågnivå- och juliandatumrutiner som ingår i XORBASE 4.0 API: Skapar ett konto i databasen Skapar en artikel i databasen Stänger en företagsdatabas Tar bort en hel faktura ur fakturaregistret Räknar ut förfallodag Hämtar nästa löpnummer för olika posttyper Hämtar nästa verifikatnummer i serien Hämtar restbeloppet på kund- el. leverantörsfaktura Hämtar ett specifikt reserverat konto Hämtar en text ur textregistret Avslutar en faktura (skapar en fakturafot) Skapar ett fakturahuvud till en faktura Skapar en rad till en faktura Skapar en kund- el. leverantörsreskontrapost Skapar ett objekt i databasen Öppnar en företagsdatabas Skapar en person (kund, leverantör el. egendefinierad typ) Ställer in första och sista balansgrupp Ställer in första och sista resultatgrupp Lägger till en verifikatsrad Hämtar ett specifikt konto i databasen Hämtar en specifik artikel i databasen Hämtar ett specifikt objekt i databasen Hämtar en specifik kund el. leverantör i databasen Stänger en företagsdatabas Låser en företagsdatabas för andra program/användare Öppnar en företagsdatabas Låser upp en företagsdatabas för andra program/användare Lägger till nuvarande post i angivet register Letar upp en post i angivet register enligt best fit Tar bort en post ur angivet register Kontrollerar om en specifik post finns i angivet register Letar upp en post i angivet register Letar upp första posten i angivet register Letar upp sista posten i angivet register Går till (laddar in) nästa post i angivet register Går till (laddar in) föregående post i angivet register Returnerar en ev. uppdaterad post till angivet register Skriver in en post i angivet register Flaggar för början av en kritisk databasoperation Flaggar för slutet av en kritisk databasoperation

Returnerar datumet för första dagen i månaden Returnerar datumet för första dagen i veckan Returnerar datumet för första dagen på året Returnerar dagens nummer (1-31) för angivet juliandatum Returnerar datumet från datorns systemklocka Returnerar veckodagen som ett nummer (1-7) Returnerar dagen på året som ett nummer (1-365) Returnerar datumet för sista dagen i månaden Returnerar datumet för sista dagen i veckan Returnerar datumet för sista arbetsdagen i veckan Returnerar datumet för sista dagen på året Returnerar månadens nummer(1-12) för angivet juliandatum Returnerar veckonumret (1-52/53) för angivet juliandatum Returnerar året som ett heltal för angivet juliandatum Konverterar tre heltal (år, månad, dag) till ett juliandatum

Följande programsekvens överför två transaktionsrader till ett verifikat. Du kan naturligtvis också överföra transaktionsrader inuti slingor (t.ex. for -, while -, eller repeat m.m.). long db; if ((db = ("0001", "C:\\COMPACT4")) > 5L) { (db, 0, 0L, 1, 1995, 4, 24, "Faktura 1", "3011", "", -500.00); (db, 0, 0L, 2, 1995, 4, 24, "Faktura 1", "1010", "", 500.00); (db); } else ErrorBox("Felkod %ld", db); Dim DB As Long Dim client As String Dim path As String Dim text As String Dim accno As String client = "0001" + Chr$(0) path = "C:\COMPACT4" + Chr$(0) DB = (client, path) if DB > 5& Then text = "Faktura 1" + Chr$(0) accno = "3011" + Chr$(0) (DB, 0, 0&, 1, 1995, 4, 24, text, accno, "", -500.00#) accno = "1010" + Chr$(0) (DB, 0, 0&, 2, 1995, 4, 24, text, accno, "", 500.00#) (DB) Else Print "Felkod + Str(DB)" Endif Dessa operationer sker med mer automatik och därmed med högre säkerhet än om motsvarande operationer hade utförts med lågnivårutinerna. I fallet ovan sker med automatik en uppräkning av verifikatnumret och en uppdatering av saldoregistret och övrig statistik.

Med kan du även testa om kontot existerar. Om kontot inte existerar kan du hämta korrekt konto för t.ex. försäljning och kassa med högnivårutinen. Du kan även börja med att anropa som i nästa exempel. Använd alltid reserverade konton om sådana finns. if ((db = OpenClient("0001", "C:\\COMPACT4")) > 5L) { char accno[8]; } (db, DEFSALES, accno); (db, 0, 0L, 1, 1995, 4, 24, "Faktura 1", accno, "", -500.00); (db, DEFCASH, accno); (db, 0, 0L, 2, 1995, 4, 24, "Faktura 1", accno, "", 500.00); CloseClient(db); Dim DB As Long Dim client As String Dim path As String Dim text As String Dim accno As String client = "0001" + Chr$(0) path = "C:\COMPACT4" + Chr$(0) DB = OpenClient(client, path) if DB > 5& Then text = "Faktura 1" + Chr$(0) (DB, DEFSALES, accno) (DB, 0, 0&, 1, 1995, 4, 24, text, accno, "", -500.00#) (DB, DEFCASH, accno) (DB, 0, 0&, 2, 1995, 4, 24, text, accno, "", 500.00#) CloseClient(DB) Else Print "Felkod + Str(DB)" Endif

Du kan också upprätta nya konton i XOR Compact på ett enkelt sätt med rutinen.dennaskapar ett nytt konto om kontot inte redan finns. Om parametern Force sätts till True kommer ett redan existerande kontos namn att ändras till det namn du anger i accname. if ((db = OpenClient("0001", "C:\\COMPACT4")) > 5L) { (db, "3011", "Försäljning", 0, False); VoucherRowAdd(db, 0, 0L, 1, 1995, 4, 24, "Faktura 1", "3011", "", -500.00); (db, "1010", "Kassa", 0, False); VoucherRowAdd(db, 0, 0L, 2, 1995, 4, 24, "Faktura 1", "1010", "", 500.00); CloseClient(db); } Dim DB As Long Dim client As String Dim path As String Dim text As String Dim accno As String Dim accname As String client = "0001" + Chr$(0) path = "C:\COMPACT4" + Chr$(0) DB = OpenClient(client, path) if DB > 5& Then text = "Faktura 1" + Chr$(0) accno = "3011" + Chr$(0) accname = "Försäljning" + Chr$(0) (DB, accno, accname, 0, False) VoucherRowAdd(DB, 0, 0&, 1, 1995, 4, 24, text, accno, "", -500.00#) accno = "1010" + Chr$(0) accname = "Kassa" + Chr$(0) (DB, accno, accname, 0, False) VoucherRowAdd(DB, 0, 0&, 2, 1995, 4, 24, text, accno, "", 500.00#) CloseClient(DB) Else Print "Felkod + Str(DB)" Endif

På samma sätt som i föregående exempel upprättar du ett nytt objekt med funktionen : if ((db = OpenClient("0001", "C:\\COMPACT4")) > 5L) { (db, "A1", "Alpha 1", False, False); VoucherRowAdd(db, 0, 0L, 1, 1995, 4, 24, "Faktura 1", "3011", "A1", -500.00); (db, "A2", "Alpha 2", False, False); VoucherRowAdd(db, 0, 0L, 2, 1995, 4, 24, "Faktura 1", "1010", "A2", 500.00); CloseClient(db); } Dim DB As Long Dim client As String Dim path As String Dim text As String Dim accno As String Dim objno As String Dim objname As String client = "0001" + Chr$(0) path = "C:\COMPACT4" + Chr$(0) DB = OpenClient(client, path) if DB > 5& Then text = "Faktura 1" + Chr$(0) accno = "3011" + Chr$(0) objno = "A1" + Chr$(0) objname = "Alpha 1" + Chr$(0) (DB, objno, objname, False, False) VoucherRowAdd(DB, 0, 0&, 1, 1995, 4, 24, text, accno, objno, -500.00#) accno = "1010" + Chr$(0) objno = "A2" + Chr$(0) objname = "Alpha 2" + Chr$(0) (DB, objno, objname, False, False) VoucherRowAdd(DB, 0, 0&, 2, 1995, 4, 24, text, accno, objno, 500.00#) CloseClient(DB) Else Print "Felkod + Str(DB)" Endif

Rutinerna, och gör det enkelt att överföra dina fakturor till XOR Compact för att kunna skriva ut dem och sedan använda XOR Compact:s förnämliga reskontra. Principen är att man först eventuellt skapar kunden och/eller artikeln om dessa inte finns. Kundnumret bestämmer olika standardvärden för fakturan och artikelregistret kommer att uppdateras automatiskt. Därefter skapar du fakturahuvudet och de på fakturan ingående fakturaraderna. Om rutinerna anropas och kunden eller artikeln inte finns i databasen, så får du ett felmeddelande. Följande exempel skapar fakturahuvud och fakturarader under förutsättning att kund och artikel finns i databasen: if ((db = OpenClient("0001", "C:\\COMPACT4")) > 5L) { (db, "1001", XCUSTINVOICE, 0L, 1995, 4, 22, RELEASED); (db, XCUSTINVOICE, 0L, 1, "001", "Kristallvas", "st", "", "", 1, 250.00, 0.0, 250.00, 0.0, 0.0); (db, XCUSTINVOICE, 0L, 2, "002", "Kristallskål", "st", "", "", 2, 350.00, 0.0, 700.00, 0.0, 0.0); (db, XCUSTINVOICE, 0L, 950.00, 50.00, 0.0, 0,0, 1000.00); CloseClient(db); } Dim DB As Long Dim client As String Dim path As String Dim persno As String Dim artno As String Dim artname As String Dim unit As String client = "0001" + Chr$(0) path = "C:\COMPACT4" + Chr$(0) DB = OpenClient(client, path) if DB > 5& Then persno = "1001" + Chr$(0) (DB, persno, XCUSTINVOICE, 0&, 1995, 4, 22, RELEASED) unit = "st" + Chr$(0) artno = "001" + Chr$(0) artname = "Kristallvas" + Chr$(0) (DB, XCUSTINVOICE, 0&, 1, artno, artname, unit, "", "", 1, 250.00#, 0.0#, 250.00#, 0.0#, 0.0#) artno = "002" + Chr$(0) artname = "Kristallskål" + Chr$(0) (DB, XCUSTINVOICE, 0&, 1, artno, artname, unit, "", "", 2, 350.00#, 0.0#, 700.00#, 0.0#, 0.0#) (DB, XCUSTINVOICE, 0&, 950.00#, 50.00#, 0.0#, 0,0#, 1000.00#) CloseClient(DB) Else Print "Felkod + Str(DB)" Endif

Följande exempel skapar först en kund och två artiklar med hjälp av rutinerna och och sedan en faktura (huvud och rader) baserad på dessa poster: if ((db = OpenClient("0001", "C:\\COMPACT4")) > 5L) { (db, CUSTOM, "", "1001", "XOR AB", "", "Anckargripsg. 3", "211 19 MALMÖ", "", "040-664 22 00", "040-664 22 29", "Magnus", -1, -1, -1, False); InvoiceHeaderAdd(db, "1001", XCUSTINVOICE, 0L, 1995, 4, 22, RELEASED); (db,"","001","kristallvas", 25.0, 5.0, 250.00, 150.00, False); InvoiceRowAdd(db, XCUSTINVOICE, 0L, 1, "001", "Kristallvas", "st", "", "", 1, 250.00, 0.0, 250.00, 0.0, 0.0); (db,"","002","kristallskål",30.0,5.0,350.00,200.00,false); InvoiceRowAdd(db, XCUSTINVOICE, 0L, 2, "002", "Kristallskål", "st", "", "", 2, 350.00, 0.0, 700.00, 0.0, 0.0); InvoiceFooterAdd(db, XCUSTINVOICE,0L,950.00,50.00,0.0,0,0,1000.00); CloseClient(db); } Dim DB As Long Dim client As String Dim path As String Dim persno As String Dim persname As String Dim persadr2 As String Dim persadr3 As String Dim persphone As String Dim persfax As String Dim persref As String Dim artno As String Dim artname As String Dim unit As String client = "0001" + Chr$(0) path = "C:\COMPACT4" + Chr$(0) DB = OpenClient(client, path) if DB > 5& Then persno = "1001" + Chr$(0) persname = "XOR AB" + Chr$(0) persadr2 = "Anckargripsg. 3" + Chr$(0) persadr3 = "211 19 MALMÖ" + Chr$(0) persphone = "040-664 22 00" + Chr$(0) persfax = "040-664 22 29" + Chr$(0) persref = "Magnus" + Chr$(0) (DB, CUSTOM, "", persno, persname, "", persadr2, persadr3, "", persphone, persfax, persref, -1, -1, -1, False); InvoiceHeaderAdd(DB, persno, XCUSTINVOICE, 0&, 1995, 4, 22, RELEASED) unit = "st" + Chr$(0) artno = "001" + Chr$(0) artname = "Kristallvas" + Chr$(0) (DB, "", artno, artname, 25.0#, 5.0#, 250.00#, 150.00#, False) InvoiceRowAdd(DB, XCUSTINVOICE, 0&, 1, artno, artname, unit, "", "", 1, 250.00#, 0.0#, 250.00#, 0.0#, 0.0#) artno = "002" + Chr$(0) artname = "Kristallskål" + Chr$(0) (DB, "", artno, artname, 25.0#, 5.0#, 250.00#, 150.00#, False) InvoiceRowAdd(DB, XCUSTINVOICE, 0&, 1, artno, artname, unit, "", "", 2, 350.00#, 0.0#, 700.00#, 0.0#, 0.0#) InvoiceFooterAdd(DB, XCUSTINVOICE, 0&, 950.00#, 50.00#, 0.0#, 0,0#, 1000.00#) CloseClient(DB) Else Print "Felkod + Str(DB)" Endif

Med funktionen kan du överföra utskrivna fakturor från ett annat försystem och uppdatera endast reskontran och bokföringen i XOR Compact. Därefter kan du låta XOR Compact sköta påminnelser, krav och räntefakturering. När du använder sker följande: Reskontran uppdateras automatiskt. Bokföringen uppdateras automatiskt. Kundstatistik uppdateras automatiskt. Som du ser i exemplet nedan är det mycket enkelt att överföra data på detta sätt. utför en fillåsning i fleranvändarmiljö innan operationen utförs och denna fillåsning släpps först när anropas. if ((db = OpenClient("0001", "C:\\COMPACT4")) > 5L) { (db, CUSTOM, "1001", FA, 0L, "", 1995, 4, 22, 2000.00, 500.00, True); (db, CUSTOM, "1002", KN, 0L, "", 1995, 4, 22, -1000.00, -250.00, True); CloseClient(db); } Dim DB As Long Dim client As String Dim path As String Dim persno As String client = "0001" + Chr$(0) path = "C:\COMPACT4" + Chr$(0) DB = OpenClient(client, path) if DB > 5& Then persno = "1001" + Chr$(0) (DB, CUSTOM, persno, FA, 0&, "", 1995, 4, 22, 2000.00#, 500.00#, True) persno = "1002" + Chr$(0) (DB, CUSTOM, persno, KN, 0&, "", 1995, 4, 22, -1000.00#, -250.00#, True) CloseClient(DB) Else Print "Felkod + Str(DB)" Endif

Du kan enkelt hämta huvudposter ur olika grundregister för att t.ex. fylla en lista eller testa om en specifik huvudpost finns. Exemplet nedan använder rutinen för att hantera databasens kontoregister. Med rutinen hämtas först konton ur databasen och sedan testas (med samma rutin) om kontot finns. På samma sätt kan man hantera objekt, personer och artiklar. Högnivårutinerna för detta heter, respektive. long db; if ((db = OpenClient("0001", "C:\\COMPACT4")) > 5L) { char accno[7], accname[31]; int ok; *accno = \0 ; for (ok = (db, accno, accname, TRUE, FALSE ); ok == TRUE; ok = (db, accno, accname, FALSE, FALSE)) { // Fyll lista med konton (accno och accname) } strcpy(accno, 3011 ); // test if accno exists if ((db, accno, accname, TRUE, TRUE)) VoucherRowAdd(db, 0, 0L, 1, 1995, 4, 24, "Faktura 1", accno, "", -500.00); CloseClient(db); } else ErrorBox("Felkod %ld", db); Dim DB As Long Dim client As String Dim path As String Dim text As String Dim accno As String * 7 Dim accname As String * 31 client = "0001" + Chr$(0) path = "C:\COMPACT4" + Chr$(0) DB = OpenClient(client, path) if DB > 5& Then accno = "3011" + Chr$(0) Test if accno exists if (DB, accno, accname, 1, 1) text = "Faktura 1" + Chr$(0) VoucherRowAdd(DB, 0, 0&, 1, 1995, 4, 24, text, accno, "", -500.00#) accno = "1010" + Chr$(0) VoucherRowAdd(DB, 0, 0&, 2, 1995, 4, 24, text, accno, "", 500.00#) Endif CloseClient(DB) Else Print "Felkod + Str(DB)" Endif

Skapar ett konto i databasen Skapar en artikel i databasen Stänger en företagsdatabas Tar bort en hel faktura ur fakturaregistret Räknar ut förfallodag Hämtar senaste löpnummer för olika posttyper Hämtar nästa verifikatnummer i serien Hämtar restbeloppet på faktura Hämtar ett specifikt reserverat konto Hämtar en text ur textregistret Avslutar en faktura (skapar en fakturafot) Skapar ett fakturahuvud till en faktura Skapar en rad till en faktura Skapar en kund- el. leverantörsreskontrapost Skapar ett objekt i databasen Öppnar en företagsdatabas Skapar en person(kund,leverantör el. egendefin.typ) Ställer in första och sista balansgrupp Ställer in första och sista resultatgrupp Lägger till en verifikatsrad Hämtar ett specifikt konto i databasen Hämtar en specifik artikel i databasen Hämtar ett specifikt objekt i databasen Hämtar en specifik kund el. lev. i databasen

Funktionen öppnar företagets databas, vilken identifieras av. Funktionen testar om det är ok att börja utföra operationer i databasen och returvärdet utgörs av en handle av typen (se nedan). Om denna är giltig (>5), så kan operationer på databasen utföras. Denna handle används sedan för att identifiera databasen, och anges som första parameter vid användandet av övriga rutiner. clientno dbpath Företagets nummer t.ex. "0001" (Övningsbolaget). Sökvägen till XORBASE4.DLL. > 5L En giltig handle till databasen. 0L Databasen kan inte öppnas. 1L Minnesallokeringsproblem. 2L Företagsnumret finns inte i listan i XCLIENT.DBI. 3L Företaget är redan öppet i. 4L Operationen har avbrutits i. 5L Företagsnumret finns inte i databasen.

Funktionen sätter första och sista balansgrupp. Funktionen behöver inte anropas för Sveriges vidkommande, då svenska värden användes som standard ( = 10 och = 29). first last Första gruppen i balansgrupperna. Sista gruppen i balansgrupperna.

Funktionen sätter första och sista resultatgrupp samt sista försäljningsgrupp. Funktionen behöver inte anropas för Sveriges vidkommande, då svenska värden används som standard (first = 30, last = 99 och lastsales = 39). first last lastsales Första gruppen i resultatgrupperna. Sista gruppen i resultatgrupperna. Sista gruppen i försäljningsgrupperna.

Funktionen hämtar nästa verifikatnummer i verifikatserien. serie Verifikatserien i XOR Compact. Serierna ligger mellan 0 och 9 där främst serierna 5 till 7 skall användas. Nästa verifikatnummer i serien. 0 används för bokföring 1 används för kundbokning (fakturering) 2 används för inbetalningar 3 används för leverantörsbokning (fakturering) 4 används för utbetalningar 5-7 är fria serier 8 används för bokslutsprogram 9 används för revisoröverföring

Funktionen används för att hämta ett reserverat konto. db no Handle till databasen (från ). Något av följande värden: DEFVATOUT DEFVATIN DEFSTOCK DEFYEARRESULT DEFCUSTOMER DEFFREIGHT DEFFEE DEFADJUSTMENT DEFINTERIN DEFFINANCE DEFSALES DEFPURCHASE DEFSUPPLIER DEFPAYIN DEFCASH DEFINTEROUT DEFCHANGE DEFDISCOUNTOUT DEFDISCOUNTIN DEFXPROFIT DEFXLOSS DEFEXPSALES DEFEXPSALES2 DEFPAYOUT DEFVAT DEFFREIGHTEXP DEFFEEEXP Utgående moms Ingående moms Lagerkonto Årets resultat Kundfordringar Frakt Expeditionsavgift Öresavrundning Ränteintäkter Finansiella poster Försäljning Inköp Leverantörskuld Inbetalningskonto (bank) Kassakonto Ränteutgifter Justeringskonto (lager) Utgående kassarabatt Ingående kassarabatt Kursvinst Kursförlust Exportförsäljning EU Exportförsäljning Utbetalningskonto (bank) Momsavräkning Frakt Export Expeditionsavgift Export accno 1L 0L Buffert i vilken kontonumret returneras av funktionen. Bör kunna ta emot 6 siffror. Kontot fanns. Kontot hittades inte.

Funktionen används för att utifrån ett reserverat nummer ta fram en text ur textregistret, vilket används i många olika sammanhang i XOR Compact (se nedan). För Sveriges vidkommande kan dessa nummer hittas i filen TEXT2.SCR. db no text 1L 0L Handle till databasen från. Textnummer (se i TEXT2.SCR under @TEXT). Buffert i vilken texten returneras. Denna måste kunna ta emot 127 tecken. Texten fanns. Texten hittades inte. Kontoklass- och kontogrupptexter Loggkategoritexter Säljare Objekttexter Företagstexter Verifikattexter Reserverade texter Leveransvillkor Leveranssätt Avgiftstexter Faktura- och fakturaradstexter Kravtexter Enheter Titeltexter för dokument Betalningsvillkor Seriekoder Persontyper Persongrupper Persontexter Artikelgrupper Kontofunktioner

Funktionen används för överföring av verifikatrader från ett försystem. Den uppdaterar saldoregistret och relevant statistik automatiskt. db Handle till databasen från. serie Verifikatserienummer i XOR Compact. Serierna ligger mellan 0 och 9. 0 används för bokföring 1 används för kundbokning (fakturering) 2 används för inbetalningar 3 används för leverantörsbokning (fakturering) 4 används för utbetalningar 5-7 är fria serier 8 används för bokslutsprogram 9 används för revisoröverföring no Verifikatnummer. För att få nästa lediga verifikatnummer kan du använda rutinen eller sätta till 0. Då hämtas automatiskt nästa nummer. transno transaktionsnummer (radnummer) inom verifikatet (börjar på 1). year Året uttryckt med siffror, t.ex.: 1995. month Månaden uttryckt som siffra : 1-12. day Dagen uttryckt som siffra : 1-31 (30, 28/29). text Transaktionstext till varje enskild verifikatrad (försök ange så relevant accno information som möjligt). Kontonummer som skall användas. Om du är osäker på vilket kontonummer du skall använda, kan du använda funktionen för att hitta kontot. Du kan även upprätta nya konton i XOR Compact med rutinen. objno objektnummer som skall användas. Kan vara en tom sträng (""). Om du är osäker på om objektet finns kan du använda för att lägga upp nya objekt. amount Transaktionsbeloppet. -1L Felaktigt datum. Kontrollera att året är angivet som 1995 och inte 95. -2L Datum ligger utanför räkenskapsåren i XOR Compact. -3L Objektet finns inte. -4L Verifikatnumret finns redan. (Du har angivet ett felaktigt nummer). >0L Verifikatnumret (operationen lyckades).

Funktionen upprättar ett konto i XOR Compact om det inte redan finns. db accno name group force Handle till databasen från. Kontonummer (max 6 tecken). Kontonamn (max 30 tecken). Kontogrupp. Om gruppen sätts till 0 så beräknas den. Om värdet sätts till 1 uppdateras namnet på kontot om det finns. Om värdet sätts till 0 ändras inget. -1 Om force är 0 och kontot redan finns. 0 Operationen lyckades. >0 Databasfelkod.

Funktionen upprättar ett objekt i XOR Compact om det inte redan finns. db Handle till databasen från. objno Objekt ID (max 10 tecken). name Objektnamn (max 30 tecken). multi 1 om objektet skall vara av projekttyp (flerårigt), annars 0. force Om värdet sätts till 1 uppdateras namnet på objektet om det finns. Om värdet sätts till 0 ändras inget. -1 Om force är 0 och objektet redan finns. 0 Operationen lyckades. >0 Databasfelkod.

Funktionen upprättar en person i XOR Compact om den inte redan finns. db perstype group persno name adr1 adr2 adr3 adr4 phone fax ref top tod wod force Handle till databasen från. Persontyp (, kund eller, leverantör). Även andra värden är möjliga (3 = leveransadress, 4 = prospekt, 5 = privat). Persongrupp (max. 10 tecken). Person ID (max. 10 tecken). Personnamn (max. 30 tecken). Personadress 1 - Besöksadress (max. 30 tecken). Personadress 2 - Boxadress. (max. 30 tecken). Personadress 3 - Postnummer och ort. (max. 30 tecken). Personadress 4 - Land. (max. 30 tecken). Telefonnummer (max. 20 tecken). Telefaxnummer (max. 20 tecken). Referens. (max. 20 tecken). Betalningsvillkor (ett heltal större än 0, se XOR Compact). Ange -1 för standardvärde. Leveranssvillkor (ett heltal större än 0, se XOR Compact). Ange -1 för standardvärde. Leveranssätt. (ett heltal större än 0, se XOR Compact). Ange -1 för standardvärde. Om värdet sätts till 1 uppdateras fälten om posten finns. Om värdet sätts till 0 uppdateras inget. -1 Om force är 0 och personen redan finns. 0 Operationen lyckades. >0 Databasfelkod.

Funktionen upprättar en artikel i XOR Compact om den inte finns. db group artno name items min price purch force Handle till databasen från. Artikel grupp (max. 10 tecken). Artikel ID (max. 15 tecken). Artikelnamn (max. 50 tecken). Antal i lager. Beställningspunkt. Artikelpris. Inköpspris. Om värdet sätts till 1 uppdateras fälten om artikeln finns. Om värdet sätts till 0 justeras inget. -1 Om force är 0 och artikeln redan finns. 0 Operationen lyckades. >0 Databas felkod.

Funktionen returnerar löpnummer för poster av typen. Nästa lediga löpnummer kan alltså fås genom att addera 1 till detta. type en av följande typer: XORDER order XCUSTINVOICE kundfakturor/kreditnotor XPURCHASE inköp XSUPPINVOICE leverantörsfaktura/kreditnotor XPAY betalningsnummer Nästa löpnummer för typen.

Funktionen beräknar förfallodagen utifrån en sträng i XOR Compact. buf Sträng innehållande betalningsvillkoret, t.ex. : 10 dagar netto Fri månad + 15 dagar Fri månad - 2 dagar Netto kontant. begin Juliandatum från vilken förfallodagen skall beräknas Ett juliandatum beräknat från begin. Datumet beräknas på följande sätt: Om inga siffror finns i strängen = 0 dagar. Om siffror finns i början av strängen = NN dagar Om siffror finns inuti strängen = fri månad +/- NN dagar

Funktionen skapar ett fakturahuvud. db persno type invno Handle till databasen från. Kund ID (max. 10 tecken). Fakturatyp. Kan vara: XORDER Order XCUSTINVOICE Faktura/kreditnota XPURCHASE Inköp Fakturanummer. Om du inte vet numret kan du hämta det med rutinen. Du kan också ange 0L för att få nästa nummer automatiskt. year Fakturadatum (år). Året uttryckt med siffror (t.ex. 1995). month Fakturadatum (månad). Månaden uttryckt som siffra (1-12). day Fakturadatum (dag). Dagen uttryckt som siffra : (1 31). status Fakturastatus. Kan vara: NOTPRINTED Ej utskriven PRINTED Utskriven TRANSFERED Överförd PERMANENT Permanent NOTREADY Ej färdig -1 Felaktig fakturatyp. -2 Personen finns inte. -3 Felaktigt datum. -4 Datumet ligger utanför räkenskapsåret. 0 Operationen lyckades. >0 Databasfelkod.

Funktionen skapar en fakturarad i XOR Compact. Artikelstatistik uppdateras om artikelid (ARTNO) är giltigt (artikeln finns). db Handle till databasen från. type Fakturatyp (samma som i ). Kan vara: XORDER Order XCUSTINVOICE Faktura/kreditnota XPURCHASE Inköp invno Fakturanummer (samma som i ). rowno Fakturaradnummer (börjar på 1). artno ArtikelID (max. 15 tecken). Om en tom sträng ("") anges, används inte artikelregistret, annars måste ett befintligt artikelid anges. Finns inte artikeln, kan du skapa den med rutinen. name Artikelnamn. Om inget artikelid angivits kan namnet vara upp till 80 tecken långt. unit Enhet (max. 10 tecken). accno Kontonummer (max. 6 tecken). Om en tom sträng ( ) anges, används det reserverade kontot om artikeln inte finns. objno ObjektID (max. 10 tecken). items Mängd. price Pris exklusive moms. reduct Rabatt %. amount Radbelopp exklusive moms. vat Momsbelopp för raden. tb Täckningsbidrag för raden (kan vara 0.00). -1 Felaktig typ. -2 Artikeln finns inte. -3 Angivet konto finns inte. 0 Operationen lyckades. >0 Databasfelkod.

Funktionen avslutar fakturan med totaler. db type invno sum freight fee vat amount Handle till databasen från. Fakturatyp. Samma som i. Kan vara: XORDER Order XCUSTINVOICE Faktura/kreditnota XPURCHASE Inköp Fakturanummer (samma som i ). Summan av fakturaraderna exklusive moms. Frakt. Expeditionsavgift. Momsbelopp Totalt fakturabelopp. -1 Felaktig typ. -2 Fakturan finns inte. 0 Operationen lyckades. >0 Databasfelkod.

Funktionen skapar reskontraposter i XOR Compact med automatisk uppdatering av personstatistik. db perstype persno type invno Handle till databasen från. Persontyp (kan vara CUSTOM (kund) eller SUPPLY (leverantör)). PersonID (max. 10 tecken). Reskontratyp. Kan vara något av följande: FA Faktura KN Kreditnota RF Räntefaktura AC A contopost BE Betalning Faktura/löpnummer (även vid Betalning). Anger du 0L får du automatiskt nästa lediga löpnummer (annars kan rutinen användas för att få nästa löpnummer. Vid Betalning måste anges exakt, eftersom nästa lediga nummer då inte kan användas suppinv Leverantörens fakturanummer om det är känt. Ange annars en tom sträng "". year Bokföringsdatum, år, uttryckt med siffror (t.ex. 1995). month Bokföringsdatum, månad, uttryckt som siffra (1-12). day Bokföringsdatum, dag, uttryckt som siffra: (1 31). amount vat update Reskontrabelopp inklusive moms. Momsbelopp. Anges som 1 om bokföringen skall uppdateras (detta är vanligast, men bokningarna kan ju utföras på andra sätt). Saldoregistret uppdateras automatiskt. -1 Felaktig typ. -2 Personen finns inte. -3 Felaktigt datum. -4 Datumet ligger utanför räkenskapsåret. -5 Huvudposten finns inte för betalningsposten. -6 Posten finns redan. 0 Operationen lyckades. >0 Databasfelkod.

Funktionen hämtar restbeloppet på en huvudpost (faktura e.d.) i XOR Compact. db perstype no amount 1L 0L Handle till databasen från. Persontyp (kan vara CUSTOM (kund) eller SUPPLY (leverantör)). Huvudpostens nummer. Buffert i vilken rutinen returnerar restbeloppet. Huvudposten finns. Huvudposten finns inte.

Funktionen raderar en faktura i fakturaregistret (om fakturan inte har överförts till reskontran). Om det finns artikelstatistik på fakturaraderna justeras denna samtidigt. Funktionen kan radera poster som redan är överförda till reskontran. Dessa poster måste motkonteras med en kreditnota och båda posterna måste sedan betalas. Rutinen kan användas för detta ändamål. db no 1L 0L Handle till databasen från. Huvudpostens nummer. Huvudposten finns. Huvudposten finns inte.

Funktionen hämtar en kontopost från XOR Compact. Kan även användas för kontrollera om ett konto finns. db accno accname first exact 1L 0L Handle till databasen från. Kontonummer (max. 6 tecken). Kontonamn (max. 30 tecken). Ange 1 vid första anropet i operationen och 0 vid efterföljande anrop (se exempel för sid. 22). Ange 1 om du vill utföra en exakt sökning, annars 0 (best fit). En post hittades. Ingen post hittades.

Funktionen hämtar en objektpost från XOR Compact. Kan även användas för kontrollera om ett objekt finns. db objno objname first exact 1L 0L Handle till databasen från. ObjektID (max. 10 tecken). Objektnamn (max. 30 tecken). Ange 1 vid första anropet i operationen och 0 vid efterföljande anrop (se exempel för sid. 22). Ange 1 om du vill utföra en exakt sökning, annars 0 (best fit). En post hittades. Ingen post hittades.

Funktionen hämtar en personpost från XOR Compact. Kan även användas för kontrollera om en person finns. db persno persname perstype first exact 1L 0L Handle till databasen från. PersonID (max. 10 tecken). Personnamn (max. 30 tecken). Ange CUSTOM om det kunder som söks, SUPPLY om det är leverantörer. Ange 1 vid första anropet i operationen och 0 vid efterföljande anrop (se exempel för sid. 22). Ange 1 om du vill utföra en exakt sökning, annars 0 (best fit). En post hittades. Ingen post hittades.

Funktionen hämtar en artikelpost från XOR Compact. Kan även användas för att kontrollera om en artikel finns. db objno objname first exact 1L 0L Handle till databasen från. ArtikelID (max. 15 tecken). Artikelnamn (max. 50 tecken). Ange 1 vid första anropet i operationen och 0 vid efterföljande anrop (se exempel för sid. 22). Ange 1 om du vill utföra en exakt sökning, annars 0 (best fit). En post hittades. Ingen post hittades.

Stänger företagsdatabasen. db Handle till databasen från.

XOR Compact 4.0 packar internt sina strukturer (poster) med 1-byte-boundary. Detta innebär att program som kommunicerar via XORBASE4.DLL måste ha använda samma packning för sina strukturer som Compact 4.0 (d.v.s. 1-byte-boundary). De flesta vanliga programmeringsspråk och kompilatorer stöder detta, med undantag för, och, samt vissa 4GL-verktyg som inte hanterar begreppen Aligned structures, Packed records eller User defined types. Användare av bör arbeta med rutinerna. För nyare varianter av, ex., och, används 4 bytes alignment av user defined types. De flesta av rutinerna som använder user defined types har därför utökats med en uppsättning rutiner med prefix för att avhjälpa problemen med (se nedanstående lista). Använd dessa -rutiner istället för -rutinerna i fall du har 4 bytes alignment (dessa rutiner är utkommenterade efter rutinerna i exemplen). Tänk på att och -rutinerna är ömsesidigt uteslutande! Om du kan använda en -rutin i din utvecklingsmiljö, så riskerar du felkörningar om du använder motsvarande -rutin. RecAdd RecReturn RecFind RecBest RecExist RecFirst RecLast RecNext RecPrev RecWrite XBAdd XBReturn XBFind XBBest XBExist XBFirst XBLast XBNext XBPrev XBWrite

De nycklar som används i databasen för att identifiera olika poster i de 16 registerna finns beskrivna längst bak i denna manual. Första nyckeln för varje register är alltid den, d.v.s. den nyckel som. Övriga nycklar är sorteringsnycklar och kallas. En nyckel som består av fält kan i din programkod utgöras av en pekare till ett eller en. En nyckel som består av fält utgörs av en pekare till en strukturvariabel.

Följande programexempel (i och ) går igenom alla poster i kontoregistret och skriver ut kontonummer och kontonamn för varje post. De lågnivårutiner som behövs för detta ändamål är (öppnar databasen) (hämtar första posten) (hämtar nästa post) (stänger databasen) char dbase[] = "compact"; char dir[] = "c:\\compact4\\0001"; char linebuf[126]; long DB; Account acc; int ok;... if (( DB = (dbase, dir, 0L)) == 0L) return False; for (ok = (DB, ACCOUNT, 2, &acc); ok == DbOk; ok = { wsprintf(linebuf, "%s %s", (char *)acc.accno, (char *)acc.accname); TextOut(thisDC, 0, 0, linebuf, lstrlen(linebuf)); }... (DB); return True; Dim dbase As String Dim directory As String Dim DB As Long Dim acc As AccountType Dim ok As Integer dbase = "compact" + Chr$(0) directory = "c:\compact4\0001" + Chr$(0) DB = (dbase, directory, 0&) If DB = 0& Then Print "Misslyckades med att öppna databasen" End End If... ok = (DB, ACCOUNT, 1, acc) ok = (DB, ACCOUNT, 1, acc) Do While ok = DbOk acc.accno = Left$(acc.accNo, Instr(acc.accNo, Chr$(0)) - 1) acc.accname = Left$(acc.accName, Instr(acc.accName, Chr$(0)) - 1) list1.additem acc.accno & " " & acc.accname ok = ok = Loop... (DB)

Låt oss anta att du vill överföra 3 verifikatrader som anger en försäljning på 4000.00 kr, moms på 1000.00 kr och en motkontering på 5000.00 kr till kassan där försäljningen har gått in. Du använder serie F (internt nr 5) för ändamålet. En överföring kan då implementeras då implementeras enligt följande: #include "xorbase.h" void Transfer(void) { Client cl; Account acc; Default def; Voucher vou; Balance bal = { 0 }; BalanceKey1 bk1; long DB; char name[] = "compact"; char dir[] = "c:\\compact4\\0001"; int period; // struktur för företagsinfo // struktur för konto // struktur för standardkonto // struktur för transaktioner // databas handle // databas namn // företagskatalog if ((DB = (name, dir, 0L, 0)) == 0L) // öppna databasen return; (DB, CLIENT, 1, "0001", &cl); // företagsinformation för 0001 vou.vrno = ++cl.clientver[5]; // nästa lediga nummer i serie F vou.vrtransno = 1; // transaktionsrad 1 vou.vrdate = (); // datum är dags datum i julian // date vou.vrserie = 5; // serie F (internt 5) vou.vrchange = 0; // ingen ändring StrCpy(vou.vrText, "Från försystem"); // fri text vou.vramount = -4000.00; // försäljningsbelopp def.defno = 26; // standardkonto för försäljning (DB, DEFAULT, 1, &def.defno, &def); StrCpy(vou.accNo, def.accno); // sätta dit försäljningskontot *vou.objno = '\0'; // inget objekt (DB, ACCOUNT, 1, def.accno, &acc); // Hämta konto. StrCpy(bk1.accNo, vou.accno); *bk1.objno = \0 ; // inget objekt (DB, BALANCE, 1, &bk1, &bal); // uppdatera saldo och hitta // grupp. period = Mon(vou.vrDate); // beräkna period bal.accsaldo[period] += vou.vramount; // uppdatera saldo cl.clientsales += vou.vramount; // uppdatera Client klass 3 cl.clientprofit += vou.vramount; // uppdatera Client klass 3-8 vou.vrcode = acc.accvat; // sätt momskod (DB, BALANCE, &bal); // skriv tillbaka Account posten (DB, VOUCHER, &vou); // upprätta transaktionsrad 1 ++vou.vrtransno; // transaktionsrad 2 vou.vramount = -1000.00; // momsbelopp def.defno = 1; // standardkonto utgående moms 1 (DB, DEFAULT, 1, &def.defno, &def); StrCpy(vou.accNo, def.accno); // sätt dit momskonto (DB, ACCOUNT, 1, def.accno, &acc); // Hämta konto. StrCpy(bk1.accNo, vou.accno); *bk1.objno = \0 ; // inget objekt (DB, BALANCE, 1, &bk1, &bal); // uppdatera saldo och hitta // grupp. bal.accsaldo[period] += vou.vramount; // uppdatera saldo cl.clientbalance += vou.vramount; // uppdatera Client klass 1 2 vou.vrcode = acc.accvat; // sätt momskod (DB, BALANCE, &bal); // skriv tillbaka Account posten

(DB, VOUCHER, &vou); // upprätta transaktionsrad 2 } ++vou.vrtransno; // transaktionsrad 3 vou.vramount = 5000.00; // kassabelopp def.defno = 30; // standard kassakonto // kontantförsäljning (DB, DEFAULT, 1, &def.defno, &def); StrCpy(vou.accNo, def.accno); // sätta dit kassakontot (DB, ACCOUNT, 1, def.accno, &acc); // uppdatera saldo och hitta // grupp StrCpy(bk1.accNo, vou.accno); *bk1.objno = \0 ; // inget objekt (DB, BALANCE, 1, &bk1, &bal); // uppdatera saldo och hitta // grupp. bal.accsaldo[period] += vou.vramount; // uppdatera saldo cl.clientbalance += vou.vramount; // uppdatera Client klass 1-2 vou.vrcode = acc.accvat; // sätt momskod (DB, BALANCE, &bal); // skriv tillbaka Account posten (DB, VOUCHER, &vou); // upprätta transaktionsrad 3 (DB, CLIENT, &cl); // skriv tillbaka Client posten (DB); // stäng databasen

Sub Transfer () Dim cl As ClientType företagsstruktur Dim acc As AccountType kontostruktur Dim bal As BalanceType balansstruktur Dim bk1 As BalanceKey1Type nyckelstruktur Dim def As DefaultType struktur för reserverade konton Dim vou As VoucherType struktur för transaktioner Dim DB As Long databas handle Dim period As Integer dbase = "compact" + Chr$(0) directory = "c:\compact4\0001" + Chr$(0) DB = (dbase, directory, 0&, 0) If DB = 0& Then Exit Sub End If databasens namn företagsnummer 0001 katalog öppna databasen cl.clientno = "0001" + Chr$(0) ok = (DB, CLIENT, 1, ByVal cl.clientno, cl) företagsinformation ok = (DB, CLIENT, 1, ByVal cl.clientno, cl) företagsinformation cl.clientver(5) = cl.clientver(5) + 1 nästa lediga nummer i serie F vou.vrno = cl.clientver(5) vou.vrtransno = 1 transaktionsrad 1 vou.vrdate = () datum är dags datum vou.vrserie = Chr$(5) serie F (internt 5) vou.vrchange = Chr$(0) ingen ändring vou.vrtext = "Från försystem" fri text vou.vramount = -4000# försäljningsbelopp def.defno = 26 standard konto för försäljning ok = (DB, DEFAULT, 1, def.defno, def) ok = (DB, DEFAULT, 1, def.defno, def) vou.accno = Rtrim$(def.accNo) + Chr$(0) sätt dit försäljningskontot vou.objno = Chr$(0) inget objekt ok = (DB, ACCOUNT, 1, ByVal Rtrim$(def.accNo), acc) uppdatera saldo och hitta grupp ok = (DB, ACCOUNT, 1, ByVal Rtrim$(def.accNo), acc) uppdatera saldo och hitta grupp bk1.accno = Rtrim$(def.accNo) + Chr$(0) bk1.objno = Chr$(0) ok = (DB, BALANCE, 1, bk1, bal) ok = (DB, BALANCE, 1, bk1, bal) period = Mon(vou.vrDate) sätt dit försäljningskontot beräkna period bal.accsaldo(period) = bal.accsaldo(period) + vou.vramount uppdatera saldo cl.clientsales = cl.clientsales + vou.vramount uppdatera Client kl.3 cl.clientprofit = cl.clientprofit + vou.vramount ' uppdatera Client klass 3-8 vou.vrcode = acc.accvat sätt momskod ok = (DB, BALANCE, bal) skriv tillbaka Account posten ok = (DB, BALANCE, bal) skriv tillbaka Account ok = (DB, VOUCHER, vou) upprätta transaktionsrad 1 ok = (DB, VOUCHER, vou) upprätta transaktionsrad 1 vou.vrtransno = vou.vrtransno + 1 transaktionsrad 2 vou.vramount = -1000# momsbelopp def.defno = 1 standard konto utgående moms 1 ok = (DB, DEFAULT, 1, def.defno, def) ok = (DB, DEFAULT, 1, def.defno, def) vou.accno = Rtrim$(def.accNo) + Chr$(0) sätta dit momskontot