Hauptbuchhaltung
Überblick
Die Hauptbuchhaltung ist der zentrale Buchhaltungsbereich für die Nebenbücher für die Lieferanten (Kreditoren), Kunden (Debitoren) und Materialien (Bestände). Alle Buchungen in den Nebenbüchern werden auch im Hauptbuch durch Buchungen abgebildet. Durch die Einstellungen zur Integration wird festgelegt, wie die Buchungen in den Nebenbuchhaltungen im Hauptbuch abgebildet werden. Die meisten Vorgänge im Hauptbuch werden automatich durch die Aktivitäten in den Nebenbüchern der Debitoren, Kreditoren und Bestandsführung angelegt.
Daneben gibt es außerdem die Möglichkeiten:

- Zahlungseingänge gegen vordefinierte Bankkonten zu erfassen.
- Ausgangszahlungen von vordefinierten Bankkonten zu erfassen.
- Hauptbuch-Buchungen zwischen allen möglichen Hauptbuchkonten - außer den Bankkonten - zu erfassen. Diese können auch automatisch in der folgenden Periode wieder storniert werden. Ferner können Hauptbuchbuchungen auch für zurückliegende oder auch zukünftige Perioden erfasst werden. Die Periode wird aus dem eingegebenen Buchungsdatum automatisch abgeleitet.
- Auswertungen zu den Hauptbuchkonten erlauben ausgehend von den Salden den Drill-Down bis zu den einzelnen Buchungen.
- Auswertungen entlang der Bilanz-/GuV-Struktur für jedes Periodenende in der Vergangenheit oder den augenblichlichen Stand.

Kontengruppen
Die Kontengruppe ist die übergeordntete Gruppierung der Hauptbuchkonten (Parentobjekt - für diejenigen, die etwas von objektorientierter Programmierung verstehen). Die angelegten Konten erben die Eigenschaften von der Kontengruppe, d. h. das Konto wird ein Erfolgskonto, wenn die Kontengruppe der Gewinn- und Verlustrechnung zugeordnet ist. Andernfalls, wenn die Kontengruppe der Bilanz zugeordnet ist, werden die Konten in der Bilanzstruktur in der durch die Kontengruppen-Reihenfolge bestimmten Folge als Bestandskonto dargestellt.
Durch ein Nummernsystem wird die Möglichkeit verhindert, das Format der Bilanzstruktur zu manipulieren, d. h. sie können die Kontonummer nicht mehr ändern, z. B.
10100 Motorausgaben Kopenhagen
10110 Motorausgaben Den Haag
10120 Motorausgaben Amsterdam
wäre großartig, aber wenn Sie eine Umstrukturierung darstellen wollten, um Werte zusammen darzustellen, müßten Sie die Nummerierung ändern. In web-erp ist alles, was dazu nötig ist, die Änderung der Kontengruppe. Im ersten Beispiel hätten wir eine Kontengruppe für Motorausgaben und diese Konten würden als der Kontengruppe zugehörig festgelegt werden. Wir können entscheiden, an welcher Stelle die Kontengruppe in der Bilanzstruktur dargestellt wird, indem wir den Eintrag Reihenfolge in der Bilanzstruktur ändern. Alle Konten einer Kontengruppe werden zusammen angezeigt. Wenn wir uns entschließen wollten, die Ausaben von Den Haag als separate Kostenposition darzustellen, könnten wir eine Kontengruppe für die Kosten Den Haag erstellen - oder was immer - und das Konto 10110 als Mitglied dieser Gruppe zuordnen.
Kontengruppen benötigen eine Reihenfolge in der Bilanzstruktur sowie die Angabe, ob es sich um GuV- oder Bilanzkonten handelt.
Ein Bilanzkonto (oder Bestandskonto) ist eines, bei dem nur der Saldo am Ende der Periode von Bedeutung ist. Ein GuV-Konto (oder Erfolgskonto) ist eines, bei dem die Bewegungen im Laufe der Periode von Bedeutung sind, Insofern sind für die Motorausgaben die im Laufe der Periode ausgegeben wurde von Interesse, beim Bankkonto ist es der Kontostand. Wie angegeben vererbt die Kontengruppe ihre Eigenschaften auf die Konten, d. h. Wenn die Kontengruppe zur Bilanz gehört, sind auch alle Konten unter dieser Gruppe Bilanzkonten.
Bankkonten
Bestimmte Hauptbuchkonten können als Bankkonten definiert sein - dabei können Sie so viele Bankkonten wie nötig anlegen. Als Bankkonten eingerichtete Hauptbuchkonten can be reconciled to bank statements using the matching facilities. Buchungen auf Bankkonten können Zahlungseingänge oder Zahlungsausgänge sein, das können auch Sammelbuchungen sein, die aber für die Zwecke der Zuordnung der Kontoauszüge vorbehalten sind. Mit dem Vorgang zur Erfassung von Bankzahlungen können Sie auch eine Vielzahl anderer Hauptbuchkonten ansprechen, aber nur eine Position für das Bankkonto. Dieser Vorgang erlaubt es auch, Ausgangszahlungen an Kreditoren anzulegen. Analog dazu können mit dem Vorgang Zahlungseingang eine Reihe von Eingängen von den Unterschiedlichsten Kunden erfasst werden, die in einem Betrag zusammen dem Bankkonto gutgeschrieben werden. Dabei erscheint nur ein Betrag als Summe dieser Buchungen auf dem Bankkonto. Dieser Bankkontenvorgang ist auf die Zuordnung von Zahlungseingängen ausgehend vom Kontoauszug eingerichtet worden.
Wenn alle Zahlungseingänge und Ausgangszahlungen mit den Kontoauszügen abgeglichen werden, so ist der Ausdruck des Bankauszuges der Nachweis für alle Buchungen auf dem entsprechenden Hauptbuchkonto
Bankkonten können über Hauptmenü → Einstellungen → Allgemeines → Hausbankkonten eingerichtet werden. Es besteht die Möglichkeit, den Namen des Kontos, die Kontonummer und die Anschrift der Bank einzugeben und den Verweis auf das Sachkonto auszuwählen, auf dem die Beträge im Hauptbuch abgebildet werden. Es sind auch Links zum Bearbeiten der vorhandenen Bankkonten und zum Löschen vorhanden. Wenn jedoch bereits Buchungen für das Bankkonto vorhanden sind, haben Sie nicht mehr die Möglichkeit es zu löschen und Sie können auch das zugeordnete Sachkonto nicht mehr ändern. Die Bankbelege müssten zuerst gelöscht werden (abe es gibt momentan kein Werkzeug dazu).
Zahlungsausgänge
Aus dem Hauptmenü → Hauptbuchhaltung → Vorgänge wählen Sie Zahlungsausgänge.
Die folgenden Daten sind erforderlich:

- Die Bankkontonummer, von der die Zahlung erfolgt ist oder erfolgen soll. Ein Auswahlkästchen ermöglicht die Auswahl aus den definierten Bankkonten.
- Das Datum, an welchem die Zahlung erfolgt. Dies ist wichtig, weil die Buchungsperiode aus diesem Datum ermittelt wird. Das System schlägt den heutigen Tag vor. Wenn Sie Bankauszüge erfassen, müssen Sie dieses Datum auf das entsprechende Buchungsdatum ändern.
- Die Währtung in der die Zahlung erfolgt ist. Die Buchungen auf alle Bankkonten werden in der Hauswährung vorgenommen. Alle Bankkonten werden in Hauswährung geführt, es gibt keine Möglichkeiten für Bankkonten in Fremdwährung. Das System schlägt die Hauswährung für diese Buchung vor.
- Den Umrechnungskurs - Wenn die Buchung in der Hauswährung ausgeführt wird, muss der Kurs 1 sein. Wenn in einer anderen Währung gezahlt wird, sollten Sie den Kurs eingeben, zu dem der Einkauf erfolgt ist.
- Den Buchungstext - der auf die gesamte Zahlung zutrifft. Buchungstexte zu den einzelnen Belegpositionen können gesondert erfasst werden.

Zahlungen können auf zweierlei Weise ausgeführt werden, als Zahlungsausgang im Hauptbuch sowie als Zahlungsausgang an einen Lieferanten. Die Zahlungsausgänge im Hauptbuch erfordern die Angabe der Kontierung, wie der Vorgang im Hauptbuch verbucht werden soll, die Kontonummer kann direkt eingegeben werden oder Sie haben die Möglichkeit die Kontonummer aus dem Auswahlkästchen auszuwählen. Ein Buchungstext kann außerdem erfasst werden - und der Zahlbetrag muss eingegeben werden. Der Gesamtzahlbetrag wird aus der Summe der eingegebenen Posten ermittelt. Wenn die Summe der Positionen negativ ist, dann wird dies als negative Zahlung erfasst, diese wird verwendet, um Fehlbuchungen zu stornieren.
Einrichten der Hauptbuchintegration
Jede Buchung wird an zwei Stellen dokumentiert, z. B. auf dem Bankkonto und dem Aufwandskonto, wofür die Zahlung erfolgt ist (Bürobedarf, Benzin, Bewirtung, Werbungskosten oder was immer) (doppelte Buchführung). Eine Position wird links im Soll gebucht, die andere rechts auf der Habenseite, wenn Sie sich die Probebilanz ansehen ist die Summe aller Sollsalden gleich der Summe der Habensalden.
Die Nebenbücher Debitoren, Kreditoren und Materialbestandsführung können mit der Hauptbuchhaltung integriert werden. Sie können diese Integration aber abschalten, wenn Sie alle Schalter in den Unternehmenseinstellungen auf Nein setzen.
Die Integration der Nebenbuchhaltungen bieten eine gute Möglichkeit, die Hauptbuchkonten mit den Buchungen aus den Nebenbüchern auf dem aktuellen Stand zu halten.
Sie können zwischen zwei Ebenen der Integration wählen:
1. Das Hauptbuch nur auf der Ebene Debitoren und Umsatzerlöse integrieren
Damit werden Journalbuchungen für jeden Verkauf wie folgt angelegt:
Im Soll das Sammelkonto für Debitorenforderungen, wie es in den Unternehmenseinstellungen hinterlegt ist.
Im Haben das Erlöskonto, das in Abhängigkeit vom Vertriebsbereich des Kunden, der Warengruppe der verkauften Produkte und der Umsatzart/Preisliste des Kunden ergibt. Das erlaubt eine sehr flexible Zuordnung der Erlöskonten. Es ist auch möglich, nur ein einziges Erlöskonto für den Vertriebsbereich ANY die Warengruppe ANY und die Umsatzart ANY zu verwenden.
Im Haben das Steuerkonto, welches im Steuerschlüssel hinterlegt ist.
Die umgekehrte Kontoseite würde für eine Gutschrift zutreffen.
Wenn Geld eingeht:
Im Haben das Sammelkonto für Forderungen, wie es in den Unternehmenseinstellungen hinterlegt ist. Im Soll das Bankkonto, welche als Bankkonto eingerichtet ist.
Es gibt auch noch Konten für Rabatte und Kursdifferenzen, diese wurden zum Zwecke dieser Einführung erst einmal beiseite gelassen.
Diese Integrationsebene sichert, dass die Summe aller Debitorensalden (in Hauswährung) immer mit dem Saldo des Sammelkontos für Forderungen übereinstimmt.
2. Auch die Integration der Bestandsbuchhaltung wird eingerichtet
Für jeden Verkauf:
Im Haben der Wareneinstandswert der verkauften Materialien, das Bestandskonto ist in der Definition der Warengruppe hinterlegt.
Im Soll die Herstellkosten der verkauften Waren. Diese Konten sind in vergleichbarer Detaillierung in den Einstellungen für die Debitoren/Kreditorenbuchhaltung hinterlegt.
Der umgekehrte Buchungssatz gilt für Gutschriften.
Das erlaubt es dass der Bestand an Umlaufmitteln ständig im Hauptbuch fortgeschrieben wird. Die Bewertung des Bestandes erfolgt dabei zu Standardkosten.
Diese Integrationsebene hat auch Auswirkungen auf Bestandsanpassungen, Lieferungen und Standardpreis-Änderungen.
Für Bestandskorrekturen wird die korrigierte Menge mit den Standardkosten bewertet und im Soll zugeschrieben oder im Haben abgeschrieben.
Für Wareneingänge wird die eingegangene Menge mit den Standardkosten bewertet und die Buchung lautet:
Im Soll: eingegangene Menge x Standardkosten, als Bestandskonto wird das in der Warengruppe des eingegangenen Materials hinterlegte Konto verwendet.
Im Haben: das Verrechnungskonto für Wareneingänge, dieses Konto ist in den Unternehmenseinstellungen hinterlegt.
Die zwei Ebenen der Hauptbuchintegration sind:

- Umsatzbuchungen, die im Haben auf ein Erlöskonto, im Soll auf ein Konto für Rabatt, im Haben auf ein Umsatzsteuerkonto, im Haben auf ein Fracht-Verrechnungskonto und im Soll auf ein Forderungskonto bucht. Für Gutschriften / Stornierungen sind die Kontoseiten umgekehrt. Diese Integrationsebene löst auch Journalbuchungen für Debitorzahlungen aus. Das Bannkonto wird im Soll, das Forderungskonto im Haben bebucht.
- Bestandsbuchungen die im Soll das Konto Herstellkosten des Umsatzes und im Haben ein Materialbestandskonto ansprechen, das Umgekehrte gilt für Gutschriften.

Die Ebene der Hauptbuchintegration wird durch die Schalter in den Unternehmenseinstellungen bestimmt.
Umsatzpositionen
Die bebuchten Sachkonten werden durch eine Reihe von Parametern festgelegt.

- Durch den Vertriebsbereich des Kunden
- die Umsatzart / Preislieste des Kunden
- die Warengruppe des verkauften Materials

Im Kontenplan wird eine Liste von Erlöskonten eingerichtet und diese werden als Kontenfindungen in den Einstellungen der Debitoren/Kreditoren hinterlegt. Wenn eine Lieferung/Rechnung erstellt wird, ruft das Programmskript ConfirmDispatch_Invoce.php eine Funktion in GetSalesTransGLCode.inc auf, die das betreffende Sachkonto ermittelt. Das geschieht normalerweise nach der folgenden Logik:

- Wenn in der Tabelle SalesGLPostings ein Eintrag mit passendem Vertriebsbereich, Umsatzart und Warengruppe gefunden wird, gibt die Funktion das Erlöskonto und das Konto für Rabatte zurück.
- Wenn noch kein Treffer erfolgte, wird geprüft, ob ein Eintrag für den eingegebenen Vertriebsbereich und die eingegebene Umsatzart, aber die Default-Warengruppe ANY vorhanden ist, wenn das zutrifft, werden die dort hinterlegten Konten übernommen.
- Dann wird geprüft, die eingegebene Umsatzart und die eingegebene Warengruppe mit dem Default-Vertriebsbereich (AN) passt und wenn vorhanden, verwendet.
- Als nächstes wird die eingegebene Warengruppe mit dem Default-Vertriebsbereich und der Default-Umsatzart (AN) geprüft und gegebenenfalls verwendet.
- Wenn nach dem Suchen immer noch nichts gefunden wurde, so gilt der Standardeintrag für Vertriebsbereich AN, Umsatzart AN und Warengruppe ANY, das ist das Sachkonto 1. Sollte dieses nicht existieren, legt das System automatisch ein solches Konto 1 an.

Wegen der Logik, nach der das Sachkonto in dieser Funktion bestimmt wird, ist es relativ einfach die Kontenfindung an die für das Unternehmen angemessene Weise anzupassen.
Das Verrechungskonto für die Versandkosten und das Sammelkonto für Debitorenforderungen sind in den Unternehmenseinstellungen festgelegt.
Das Umsatzsteuerkonto ergibt sich aus der Liste der Steuerschlüssel in der Steuergruppe des Kunden
Bestandsbuchungen
Die verwendeten Sachkonten werden auf der Grundlage des Vertriebsbereiches, der Umsatzart/Preisliste und der Warengruppe der verkauften Materialien bestimmt. Ähnlich wie für die Bestimmung der Erlöskonten werden die Konten in einer Kontenfindungstabelle gehalten und können unter Einstellungen Debitoren/Kreditoren gepflegt werden. Es wird die gleiche Logik für die Bestimmung des Konten verwendet wie oben für die Erlöskonten beschrieben, die Funktion GetCOGSGLAccount ist im selben GetSalesTransGLCode.inc enthalten und kann bei Bedarf einfach angepasst werden.
Das im Haben zu bebuchende Bestandskonto wird über die Warengruppe des berechneten Materials bestimmt. Es wird die Warengruppe zur Materialposition gelesen und das dort gefundene Bestandskonto übernommen.
Die Erfolgskonten für Bestandskorrekturen werden ebenso über die Warengruppe ermittelt.
Auch das Erfolgskonto für die Preisabweichungen zwischen den Standardkosten und den Istkosten eines eingekauften Materials wird über die Warengruppe gefunden.
EDI
EDI steht für Electronic Data Interchange - den elektronischen Datenaustausch von Buchungsinformationen zwischen Geschäftspartnern. Es gibt viele Standards für die Verschlüsselung solcher Vorgänge, weit verbreitet ist der EDIFACT-Standard der Vereinten Nationen und davon abgeleitet die EANCOM-Variante. Tatsächlich nutzen viele Brachen die Standformate in leicht abgewandeltet Weise, und einzelne Unternehmen innerhalb ihrer Branche wiederum vom Branchenstandard leicht abgewandelt. So sind letztendlich die Standards tatsächlich nur als Rahmenwerk zu gebrauchen, wie die Nachrichten aussehen sollten. Bei der Umsetzung von EDI in webERP ist einige Flexibilität im Format der zu sendenden und zu empfangenden Nachrichten vorgesehen. EDI-Meldungen werden als Textdatei in dem Verzeichnis angelegt, das in der Konfiguration für ausgehende EDI-Meldungen hinterlegt ist und auch die Protokolle der gesendeten Meldungen aufnimmt. Die Nachrichten können als Email-Anhang versendet werden oder per FTP an eine vom Kunden genannte IP-Adresse hochgeladen werden (ftp-Benutzer und Passwort nennt Ihnen der Kunde).
EDI einrichten
Um EDI-Belege für einen Kunden einzurichten, wählen Sie zuerst den Kunden in der Kundensuche aus und klicken dann auf den Link Kunden-EDI-konfiguration. Diese Seite erlaubt die Auswahl der Vorgänge, die elektronisch übermittelt werden sollen, momentan sind nur die Nachrichtenarten INVOIC für das Versenden von Rechnungen und Gutschriften und ORDER für das Empfangen von Kundenaufträgen unterstützt. Die Nachrichtenarten müssen einzen aktiviert und eingerichtet werden. Jeder Kunde muss folgende Angaben haben:

- Den EDI-Referenz-Code, durch den der Kunde identifiziert wird.
- Die Kommunikationsart und die Adresse, an die Rechnungen und Gutschriften versendet werden, entweder als Email-Dateianhang oder per FTP-Upload.

Wenn die Kommunikationsart auf FTP gesetzt werden soll, muss dies von PHP zur Verfügung gestellt werden (mit dem Flag -enable-ftp kompiliert, die meisten Windows-PHP-Installationen haben das jetzt von Haus aus). Wenn Sie diese Auswahl zwischensichern, erhalten Sie auch die Felder für FTP-Server-Benutzer und -Passwort eingabebereit.
Um das Versenden von EDI-Rechnungen zu aktivieren, muss das Skript EDISendInvoices.php mit cron oder einem anderen Scheduler eingeplant werden. Das Skript kann auch von der Hilfsprogrammseite Z_index.php manuell aufgerufen werden und gibt auch Informationen für die Fehlersuche aus.
Um das Entgegennehmen von EDI-Aufträgen zu aktivieren, muss das Skript EDIProcessOrders.php mit cron oder einem anderen Scheduler eingeplant werden.
Versenden von EDI-Rechnungen
EDI-Nachrichten bestehen aus einzelnen Segmenten, die in einer bestimmten Reihenfolge angeordnet werden. Weil Kunden die EDI-Nachrichten in geringfügig voneinander abweichenden Formaten benötigen, kann das genaue Format in der Tabelle EDIMessageFormat konfiguriert werden. Diese Tabelle hat für jede Rechnungszeile einen Datensatz und die Angabe der Reihenfolge wann diese in der Nachricht erscheint. Das Feld Zeilentext in dieser Tabelle kann alle vordefinierten EDI-Variablen enthalten, sie sind durch [ und ] eingeklammert, um anzugeben, dass es sich um Variablen handelt, die durch den entsprechenden Wert ersetzt werden.

EDI-Format INVOIC, Kopfteil
EDITransNo | die eindeutige EDI-Belegnummer
InvOrCrd | ob es sich bei dem Beleg um eine Rechnung oder eine Gutschrift handelt. Der Wert dieser Variablen ist eine von der EANCOM festgelegte Zahl, 388 steht für eine Rechnung, 381 für eine Gutschrift.
TransNo | die Belegnummer der Rechnung oder Gutschrift
OrigOrDup | ob es sich um ein Original oder eine Kopie handelt. Der Wert dieser Variablen ist eine von der EANCOM festgelegte Zahl, 7 steht für eine Kopie, 9 für ein Original.
TranDate | das Buchungsdatum im Format CCYYMMDD
OrderNo | die Bestellnummer - nur bei Rechnungen
CustBranchCode | der interne Schlüssel für die Niederlassung des Kunden
CompanyEDIReference | die EDI-Nummer des Kunden, das ist seine ELN-Nummer
BranchName | Name der Niederlassung, siehe Debitorenstammdaten
BranchStreet |
BranchCity |
BranchState |
TaxAuthorityRef | die Umsatzsteuer-ID des Unternehmens
DatePaymentDue | das Fälligkeitsdatum für diese Rechnung
TaxTotal | der Steuergesamtbetrag aus dieser Buchung

EDI-Format INVOIC, Positionsteil - für die Belegpositionen
LineNumber |
StockID | die webERP-Materialnummer
CustStockID | die interne Materialnummer des Kunden für dieses Material
ItemDescription |
QtyInvoiced | die berechnete (oder gutgeschriebene) Menge
LineTotalExclTax | der Nettowert der Position
UnitPrice | der Einzelpreis des Materials
LineTaxAmount | der Steuerbetrag aus der Position

EDI-Format INVOIC, Summenteil
NoLines | die Gesamtzahl der Positionen der Rechnung oder Gutschrift
TotalAmountExclTax | der Rechnungsnettobetrag
TotalAmountInclTax | der Rechnungsbruttobetrag
NoSegments | die Gesamtzahl von Segmenten in dieser Nachricht wird zur Kontrolle im Summenteil benötigt

Deswegen gibt es eine große Flexibilität darin wie die Nachrichten definiert werden. Die Variablen für den Kopf- und Summenteil dürfen in allen Bereichen verwendet werden, die Variablen für den Postionsteil stehen nur für die einzelnen Positionen zur Verfügung.
Die meisten Kunden werden verlangen, dass die Niederlassung, an die die Waren geliefert werden, nach einem Schlüsselsystem des Kunden identifiziert werden. Es muss deshalb sichergestellt werden, dass dieser Schlüssel im Stammsatz der Kundenniederlassung richtig eingetragen ist. Die Variable CustBranchCode wird vom Niederlassungsstammsatz gelesen, und wenn die Angabe fehlt, führt der EDI-Beleg zum Fehler.
Einige Kunden könnten auch verlagen, dass die Materialnummer des Kunden angegeben wird und nicht die Materialnummer aus webERP. Die Variable CustStockID wird aus der Tabelle EDIItemMapping ermittelt, in der für jedes Material, das ein solcher Kunde kauft ein entsprechender Eintrag angelegt werden muss.
Das Skript, das die EDI-Rechnungen erstellt (EDISendInvoices.php) sollte automatisch als zeitgesteuerte Aufgabe im Hintergrund laufen. Dieses Skript ermittelt zuerst eine Liste aller Kunden, die EDI-Rechnungen oder -Gutschriften erhalten sollen (aus den Einträgen ihrer EDI-Konfiguration). Dann geht das Skript alle so ermittelten Kunden durch und prüft, ob noch irgendwelche Rechnungen oder Gutschriften nicht gesendet sind. Für jede Rechnung oder Gutschrift wird eine Textdatei erstellt und mit der entsprechenden Kommunikationsart, Adresse und den entsprechenden EDI-Parametern des Kunden versendet. Es gibt einen Link, mit dem dieses Skript manuell ausgefürht werden, kann, dabei werden auch die EDI-Nachrichten angezeigt.