Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Zeiterfassung + Rechnungserstellung (netzwerkfähig) (https://www.delphipraxis.net/89550-zeiterfassung-rechnungserstellung-netzwerkfaehig.html)

DelphiManiac 2. Apr 2007 09:26


Zeiterfassung + Rechnungserstellung (netzwerkfähig)
 
Hallo,

ich soll für einen Kunden eine Zeiterfassung:
-> Welcher Mitarbeiter hat wie lange an etwas gearbeitet
erstellen, diese erfassten Zeiten sollen dann in einer Rechnungserstellung münden.

Meine Frage an euch:
Das ganze sollte netzwerkfähig sein, dass heißt es gibt eine Datenbank, die die Datensätze abspeichert.
Diese liegt dann auf dem Server, bis hier hin alles klar, nun sollen die Mitarbeiter ihre Daten erfassen können, diese
Datensätze müssten dann in der DB gespeichert werden. Aus diesen Datensätzen sollte das Controlling dann die Möglichkeit
haben die Rechnung als Word-Dokument zu generieren.

Ist dort Delphi + DB die beste Wahl, wenn ja welche Datenbank würde hier gut passen? MySQL / Access / Paradox??
Und falls nein, welche Technologie ist die bessere Wahl? Access (als DB + Frontend)

Danke schonmal für eure (hoffentlich reichliche) Kommentare und Hilfestellungen...

Gruß DelphiManiac

mkinzler 2. Apr 2007 09:42

Re: Zeiterfassung + Rechnungserstellung (netzwerkfähig)
 
Zitat:

ist dort Delphi + DB die beste Wahl,
Ja.
Zitat:

wenn ja welche Datenbank würde hier gut passen? MySQL / Access / Paradox??
Keines der 3. Ich würde FireBird, MSSql 2005 express, Oracle Express, DB2 express.

Der_Unwissende 2. Apr 2007 09:55

Re: Zeiterfassung + Rechnungserstellung (netzwerkfähig)
 
Zitat:

Zitat von DelphiManiac
Ist dort Delphi + DB die beste Wahl, wenn ja welche Datenbank würde hier gut passen? MySQL / Access / Paradox??
Und falls nein, welche Technologie ist die bessere Wahl? Access (als DB + Frontend)

Hi, was die Datenbanken angeht, so gebe ich mkinzler völlig recht, die von Dir vorgeschlagenen DBMS haben ein paar Nachteile. Access ist einfach mal gaaanz schlecht (kannst die Gründe nachlesen, wenn Du einfach mal nach Access suchst, würde mich wundern wenn man die nicht schnell findet). MySQL hat (afaik) ein merkwürdiges Lizenzmodell und es gibt einfach gute Alternativen.
Die "großen" wie Oracle und IBM stellen ihre Datenbanken in freien Versionen zur Verfügung, die recht geringen Beschränkungen (so in der Richtung <= 4 GByte RAM und nur 1 CPU) zur Verfügung. Hier hast Du den Vorteil, dass Du sehr einfach skalieren kannst (kaufst einfach das vollwertige System) und wirklich ein Produkt bekommst, dass den aktuellem Standard entspricht (gilt nicht nur für die!).
Firebird oder PostgreSQL sind gleich ganz frei und bieten auch einiges (Firebird dabei ein wenig mehr).

Was Delphi+DB und vielleicht auch ganz generell die Wahl der DB betrifft, so gibt es einen ganz wichtigen Punkt, den Du berücksichtigen solltest, um die Frage der "besten Wahl" zu beantworten. An sich lautet die klare Antwort, dass es keine objektiv beste Wahl gibt. Der Punkt den Du berücksichtigen musst ist, was für Wissen steht Dir überhaupt zur Verfügung. Wenn ich jetzt sage Java + DB ist die allerbeste Wahl ever!!!! Dann würdest Dein Produkt dass nicht bestätigen, wenn Du gar kein Java beherrscht. Selbst wenn Du Dich einarbeitest dürfte das Produkt (wenn es das erste in Java ist) dann eher hinter den Möglichkeiten der Sprache bleiben. Das gleiche gilt für die DB. Wichtig ist die Frage, was es für Anforderungen gibt.
Verwendet die Firma schon ein DBMS? Dann haben die sicher auch Leute die sich mit dem auskennen und das hat dann Vorteile (dann sollte ganz klar dieses DBMS bevorzugt werden). Ist dies nicht der Fall, solltest Du das DBMS nehmen, mit dem Du erwartest am Besten klar zu kommen. Wenn ein DBMS Dir immens viele tolle Feature bietet, die Du alle nicht nutzen kannst und Du wegen der Komplexität ein sehr schlechtes System erstellst, hängt das jeder (theoretisch) schlechteren DB auf einem anderen System, das Du optimieren kannst hinterher.
Das gleiche gilt halt auch für die verwendete Programmierung. Bist Du ein Crack in VBA, muss das nicht schlechter sein als Delphi (ok, schlechtes Beispiel was?! :mrgreen:).

Jedenfalls reicht es hier aus, dass Du eine Sprache und die richtigen Konzepte beherrscht um eine gute Lösung zu erstellen. Dabei muss es nicht die Beste sein (wäre schwer möglich das dann auch zu zeigen) und selbst dann gäbe es andere die genauso gut sind. Deshalb einfach auf eine machbare Lösung konzentrieren, mit der der Kunde zufrieden ist, das reicht doch für's Erste.

Gruß Der Unwissende

SirTwist 2. Apr 2007 10:02

Re: Zeiterfassung + Rechnungserstellung (netzwerkfähig)
 
Die Wahl der SQL-Datenbank ist hier wohl eher nebensächlich, da es sich wirklich nur um recht einfach gestrickte Daten handelt.

Wichtiger ist eigentlich da die Wahl der Zugriffsrechte, denn ein Mitarbeiter sollte doch wohl nur seine eigenen Daten sehen und ändern können und nicht die der anderen. Natürlich könntest Du das über die Programmlogik abfangen, aber dann nimmt man einfach einen SQL-Browser und verbindet sich direkt auf die DB.

Als sauberste Lösung bleibt hier eigentlich nur eine echte Server/Client-Anwendung und nur die Serversoftware hat Zugriff auf die DB.

Etwas aufwändiger, aber ohne Serversoftware: Du legst pro Mitarbeiter eine Tabelle "Entries_<userid>" an und gibst jedem Mitarbeiter nur auf diese Tabelle Schreibrechte, und auf alle anderen "Entries_*"-Tabellen gar keine Rechte. Erst der Controller darf auf alle Tabellen zugreifen und übernimmt dann am Ende des Monats die Werte in eine zentrale Tabelle "Entries".

Noch weniger aufwändig, aber gefuscht ;-): Wenn Du im Client-Programm Username und Kennwort abfragst, vermurkst Du das Kennwort noch mit irgendeiner festen, zufälligen Kennung, bevor Du Dich an der DB anmeldest, also sowas wie
Delphi-Quellcode:
DB.Connect(user, 'DHz!64&'+pass+'vzFg');
Als Tabellen würd ich Dir vorschlagen:
  • Mitarbeiter - Eine Liste aller Mitarbeiter
  • Kunden - Eine Liste der Kunden
  • Projekte - Die Liste der Projekte, die abgerechnet werden sollen. Kurzname, Beschreibung, Kunde, Letzte Abrechnung erfolgt am, Genehmigte Stunden, Bereits verrechnete Stunden, (StartZeitpunkt des Projekts, EndZeitpunkt, ...)
  • Entries - MitarbeiterID, Datum, Startzeit, Endzeit, (Anzahl Minuten), Zuordnung zu Projekt, Abgerechnet Ja/Nein
  • Rechnungen - Kunde, Projekt, ZeitraumStart, ZeitraumEnde, versandt Ja/Nein, Leistungsnachweis akzeptiert ja/nein, bezahlt ja/nein

Dann machst Du zwei Programme: ein etwas kleineres für die Mitarbeiter, die brauchen dann nur ReadOnly-Zugriff auf Kunden, Projekte und vollen Zugriff auf Entries_<userid>. Und dann ein programm für die Controller, die vollen Zugriff auf alles haben, und insbesondere die Tabellen "Entries_<userid>" anlegen und löschen können und mit den passenden Zugriffsrechten versehen können.

DelphiManiac 2. Apr 2007 10:19

Re: Zeiterfassung + Rechnungserstellung (netzwerkfähig)
 
Danke mkinzler, Der_Unwissende:


Dass heißt,
ich erstelle eine Clientsoftware und eine Mastersoftware, die jeweils auf die Datenbank zugreifen.
Gut, also fange ich mal vorne an.

1x Firebird DB
1x Clientsoftware (für Zeiterfassungseingaben)
1x Mastersoftware für die Rechnungserstellung


Gibt es speziell für den Fall Delphi + Firebird entsprechende Tutorials?

Mit Delphi bin ich jetzt sol langsam warm geworden, deswegen wollte ich es auch gerne in Delphi realisieren.
Gut mit Datenbanken habe ich zurzeit nur mit Access (grässlich) und MySql im Zusammhang mit PHP gearbeitet.

Ist denn der Ansatz mit Client und Mastersoftware sinnvoll?

Gruß
DelphiManiac

Der_Unwissende 2. Apr 2007 10:38

Re: Zeiterfassung + Rechnungserstellung (netzwerkfähig)
 
Zitat:

Zitat von DelphiManiac
Gibt es speziell für den Fall Delphi + Firebird entsprechende Tutorials?

Ja, ja oder auch Hier im Forum suchenFirebird, also nochmal ja :wink:

Zitat:

Zitat von DelphiManiac
Ist denn der Ansatz mit Client und Mastersoftware sinnvoll?

Auch hier gilt soweit erstmal ein klares ja. Die benötigen ja sicherlich eine ganz andere Sicht auf das Problem. Vorallem sollte man wohl aus der Mastersoftware heraus einen breiteren Zugriff haben. In dem Zusammenhang solltest Du Dich vielleicht ein wenig mit Views in Datenbanken auseinandersetzen.
Jedenfalls solltest Du trotzdem die beiden Programme nicht ganz isoliert betrachten. So sind bestimmte Klassen/Strukturen/Problemlösungen sicherlich für beide gleich wichtig. Hier wäre zum Beispiel die Anbindung an das DBMS zu nennen. Zwar greifen sie unterschiedlich darauf zu, trotzdem gibt es auch viele Gemeinsamkeiten. Mit einer eigenen Schicht zwischen den Programmen und dem DBMS kannst Du auch gleich dein Programm von einem speziellen DBMS entkoppeln (die Programme verwenden deine Abstraktionsschicht, zwischen welchem DBMS und der Anwendung die vermittelt bleibt transparent).

mkinzler 2. Apr 2007 10:56

Re: Zeiterfassung + Rechnungserstellung (netzwerkfähig)
 
Man könnte aber durchaus alles in einem Programm machen, welches dann benutzerbezogen Funktionen freischaltet.

DelphiManiac 2. Apr 2007 11:11

Re: Zeiterfassung + Rechnungserstellung (netzwerkfähig)
 
@mkinzler:

Ja das hast du Recht, werde es wohl auch in einem Programm abbilden.
Mit Zugriffsrechten/beschränkungen.

Ist eine Firebird Datenbank eine einzelne Datei, oder ist es wie bei MySQL aufgesplittet?

mkinzler 2. Apr 2007 11:14

Re: Zeiterfassung + Rechnungserstellung (netzwerkfähig)
 
Zitat:

Ist eine Firebird Datenbank eine einzelne Datei, oder ist es wie bei MySQL aufgesplittet?
Ist eine Datei. (fdb)

DelphiManiac 2. Apr 2007 11:22

Re: Zeiterfassung + Rechnungserstellung (netzwerkfähig)
 
@alle:

Nutzt jemand von euch das Admin Tool 'Marathon'?

Falls ja vielleicht könnt ihr mir ja erklären warum ich keine DB anlegen kann.
Ich gehe auf -->Create Database gebe alle wichtigen Informationen an. Und sage -->Create

Dann kommt folgender Fehler (Screenshot im Anhang),
dass Passwort und Benutzername fehlen, dies habe ich aber angegeben, trotzdem kann ich keine DB anlegen :-(

Danke euch

mkinzler 2. Apr 2007 11:24

Re: Zeiterfassung + Rechnungserstellung (netzwerkfähig)
 
Ich würde dir IB Expert empfehlen (gibts ne freie Version)

DelphiManiac 2. Apr 2007 11:25

Re: Zeiterfassung + Rechnungserstellung (netzwerkfähig)
 
Hab den Fehler gefunden:

Ich musste meiner DBMS ja vorher ein Passwort vergeben (bzw. den Standard-Login nutzen):=>
USER:=> SYSDBA
PASS:=> masterkey

dann geht es...

Hansa 2. Apr 2007 11:35

Re: Zeiterfassung + Rechnungserstellung (netzwerkfähig)
 
Marathon ? Mir unbekannt. Datenbanken anzulegen und zwar einfach und sicher geht IMHO immer noch am besten mit IBExpert.

P.S.: siehe auch mkinzler. :mrgreen:

P.S.2: egal ob Fehler schnell weg. Guck dir mal trotzdem noch IBExpert an. Immerhin auch aus Deutschland. Das hat gewisse Vorteile. Z.B. kann in 4 Wochen mit dem Hersteller selbst gesprochen werden. In Paderborn.

TBx 2. Apr 2007 11:40

Re: Zeiterfassung + Rechnungserstellung (netzwerkfähig)
 
Ich muss da auch mal ne Lanze für Holger und sein IBExpert brechen.
Ist das beste Tool für die Arbeit mit Firebird/Interbase, das ich kenne.

Du findest ihn hier im Forum übrigens auch als IBExpert.

Holger steht einem auch immer mit Rat und Tat bei Seite. Neben der von Hansa erwähnten Möglichkeit, Holger auf den Delphitagen zu treffen, bietet er auch in unregelmäßigen Abständen kostenlose Roadshows an. Auf diesen Roadshows vermittelt er Basiswissen zu Firebird/Interbase. Auch spezielleren Fragen gegenüber war er bisher immer aufgeschlossen.

Gruß

Thomas

mkinzler 2. Apr 2007 11:41

Re: Zeiterfassung + Rechnungserstellung (netzwerkfähig)
 
Zudem ist er auch hier im Forum (ibexpert) und beantwortet direkt hier.

DelphiManiac 2. Apr 2007 11:43

Re: Zeiterfassung + Rechnungserstellung (netzwerkfähig)
 
OK :-)

Das erleichert meine Entscheidung.

Nehme das IBExpert Tool, habe mir gerade ein Passwort zuschicken lassen...

MrSpock 2. Apr 2007 11:56

Re: Zeiterfassung + Rechnungserstellung (netzwerkfähig)
 
Hallo DelphiManiac,

ich habe für meine Rechnungsstellung auch ein solches Tool geschrieben. Es gibt dabei nur einen MA :stupid:. Das Tool basiert auf FB und die Rechnung erstelle ich mit Rave (stelle aber gerade auf FastReport um). Über Rave speichere ich dann die Rechnung direkt im PDF Format ab, in dem ich die Rechnung dann an den Kunden schicke.

Wenn du also Hilfe brauchst, helfe ich gerne auch bei der Beantwortung von Fragen mit.

DelphiManiac 2. Apr 2007 12:05

Re: Zeiterfassung + Rechnungserstellung (netzwerkfähig)
 
@MrSpock

Hi Danke für dein Angebot, werde sehr wahrscheinlich darauf zurückgreifen, dich mit Fragen zu löchern.
Ich wollte meine Software auch die Rechnungen mit Fastreport erstellen lassen. Müsste aber eventuell statt
direkt auf den Drucker oder (PDF-Export) den Zwischenschritt über MS-Word gehen, da eventuell noch ein paar
Sachen direkt im Dokument geändert werden müssten (vor dem Ausdrucken).
Also wie gesagt, ich habe mit Fastreport schon ein wenig (in 2 Projekten kam es zum Einsatz) herum gespielt,
evtl. könnte ich dir da auch ein bisschen helfen.

Also Danke schonmal

mkinzler 2. Apr 2007 12:07

Re: Zeiterfassung + Rechnungserstellung (netzwerkfähig)
 
Die Übergabe in Word sollte auch kein Problem darstellen (COM-Automation)

DelphiManiac 2. Apr 2007 12:40

Re: Zeiterfassung + Rechnungserstellung (netzwerkfähig)
 
Ja mittels COM könnte ich dann die Daten nach Word bekommen,
aber soweit bin ich ja noch nicht :lol: :lol:
Wenn ich soweit bin, werde ich das hier (falls es Probleme gibt nochmal aufgreifen)

Aber nunja bin jetzt dabei mal die ersten Schritte mit Firebird zu wagen..

Jelly 2. Apr 2007 15:20

Re: Zeiterfassung + Rechnungserstellung (netzwerkfähig)
 
Wenn ein Report in Word erstellt werden soll, kann ich immer wieder nur die Delphi Shareware Komponente TekRTF empfehlen. Ich nutze die Komponente schon sehr zufriedenstellend seit Jahren. Kann wirklich alles und hat den Vorteil dass der Endanwender relativ leicht die Reporttemplates selbst in Word bearbeiten kann (oder natürlich die fertigen Reports ändern kann).
EDIT: Link verbessert

DelphiManiac 2. Apr 2007 19:44

Re: Zeiterfassung + Rechnungserstellung (netzwerkfähig)
 
@jelly

Danke für den Link, ich probiere die Shareware mal aus...

Jelly 2. Apr 2007 20:12

Re: Zeiterfassung + Rechnungserstellung (netzwerkfähig)
 
z.B. dieser Bericht wurde mit ekrtf erstellt. Nur um mal zu zeigen was geht.

DelphiManiac 2. Apr 2007 20:52

Re: Zeiterfassung + Rechnungserstellung (netzwerkfähig)
 
@Jelly
:thumb:
ja gefällt mir sehr gut, kann durchaus sein, dass ich dich bezüglich ein paar Fragen zu dem Tool mal
anspreche...
:-)

Gruß DelphiManiac

DelphiManiac 3. Apr 2007 11:19

Re: Zeiterfassung + Rechnungserstellung (netzwerkfähig)
 
Hallo,

ich habe mir jetzt eine Datenbank angelegt, diese nennt sich dbcontrolling:
sie hat jetzt ersteinmal 2 Tabellen
ganz einfach gehalten für den Anfang:

tblMitarbeiter
-MitarbNr
-Name
-Vorname
-GebDatum

tblKunden
-KundenNr
-Name
-Vorname
-GebDatum

habe auch schon einmal ein paar Daten über IBExpert eingepflegt, das Tool gefällt mir gut, komme immer besser damit zurecht :-)

So in meiner Anwendung habe ich nun eine TZConnection auf meine Form gezogen. Soweit so gut.
über
Delphi-Quellcode:
connDatabase.Connect;
kann ich mich ja mit der Datenbank verbinden.

Aber wie kann ich mir jetzt am einfachsten die Daten einmal im Programm anzeigen lassen?
Mit der Komponente DBGrid??
Weiß aber nicht genau wie ich nun vorgehen muss.

Danke euch

mkinzler 3. Apr 2007 11:25

Re: Zeiterfassung + Rechnungserstellung (netzwerkfähig)
 
Zur Tabellenstruktur:
Ich würde künstliche Schlüssel verwenden.

Welche Zugriffskomponeneten?
Im Allgemeinen Grid mit DataSource verbinden und diese mit dem DataSet (T..Table bzw. T..Query)

DelphiManiac 3. Apr 2007 11:33

Re: Zeiterfassung + Rechnungserstellung (netzwerkfähig)
 
Ok,

könnte natürlich auch ID's benutzen für den Primary_Key.

Nur mal kurz zum Verständnis:

TZConnection ist für den Verbindungsaufbau

TZTable hält eine Tabelle lokal vor (also eine Art Dataset)

TDatasource verknüpft ein Dataset(mit den Daten aus der DB) mit den Steuerelementen (hier in meinem Fall TDBGrid)

Ist das ersteinmal so richtig interpretiert?

DelphiManiac 3. Apr 2007 11:35

Re: Zeiterfassung + Rechnungserstellung (netzwerkfähig)
 
Meine Frage ist nun, wie bekomme ich denn jetzt generell eine
Untermenge in mein Dataset.

SELECT * FROM tblMitarbeiter .....
Wie kann ich die Daten (die mein SQL-Statement aufbereitet in ein Dataset leiten?)

Danke

mkinzler 3. Apr 2007 11:39

Re: Zeiterfassung + Rechnungserstellung (netzwerkfähig)
 
Zitat:

Ist das ersteinmal so richtig interpretiert?
Ja, wobei die Table-Komponente eher zur Rückwärtskompatibiltät dient.
Zitat:

Meine Frage ist nun, wie bekomme ich denn jetzt generell eine
Untermenge in mein Dataset.

SELECT * FROM tblMitarbeiter .....
Wie kann ich die Daten (die mein SQL-Statement aufbereitet in ein Dataset leiten?)
Verwende TZQuery. Dies ist auch ein DataSet undbesitzt die Eigenschaft SQL, welche eine Abfrage aufnimmt.

DelphiManiac 3. Apr 2007 11:43

Re: Zeiterfassung + Rechnungserstellung (netzwerkfähig)
 
@mkinzler

Ersteinmal danke, dass du mir hilfst,
habe eine TZQuery mit dem SQL Statement vereinbart.
Als Connection Objekt habe ich meine TZConnection genommen.
Aber wie komme ich (du sagst das das Query auch eine Art Dataset ist) an die Daten (Also meine Tabelleninhalte) ran?

mkinzler 3. Apr 2007 11:57

Re: Zeiterfassung + Rechnungserstellung (netzwerkfähig)
 
Entweder DataSource mit TZQuery verknüpfen und datasensitive Komponenten verwenden oder
Delphi-Quellcode:
ZQuery.FieldByName('<Feldname'>.Value
bzw.
Delphi-Quellcode:
ZQuery.FieldByName('<Feldname'>.as<Typ>

DelphiManiac 3. Apr 2007 12:04

Re: Zeiterfassung + Rechnungserstellung (netzwerkfähig)
 
Kann ich mir die Fieldnames auch irgendwie anzeigen lassen?

DelphiManiac 3. Apr 2007 12:08

Re: Zeiterfassung + Rechnungserstellung (netzwerkfähig)
 
Ok ich kann auch über den Index gehen habe ich gesehen:

Delphi-Quellcode:
 ShowMessage(ZQuery1.Fields[1].Value);
Nur das Verknüpfen von Datasource und Query klappt nicht.

Bei Datasource
..>DataSet kann ich nur TZTable auswählen, aber nicht meine Query

mkinzler 3. Apr 2007 12:17

Re: Zeiterfassung + Rechnungserstellung (netzwerkfähig)
 
Stelle mal dein projekt hier ein oder sende es per PM. Dann werde ich es mir mal anschauen.

DelphiManiac 10. Apr 2007 11:44

Re: Zeiterfassung + Rechnungserstellung (netzwerkfähig)
 
Hallo,

ich habe es nun geschafft, meine Tabelle im DBGrid darzustellen,

Es gibt ja die Möglichkeit die Tabelle zuverändern, neuen Datensatz einzufügen.
Ich würde gerne die Änderungen auch in der DB wirksam machen, wie mache ich das im DBGrid?

Muss ich dafür das TZUpdateSQL verwenden?`


Danke euch!

mkinzler 10. Apr 2007 12:08

Re: Zeiterfassung + Rechnungserstellung (netzwerkfähig)
 
Zitat:

Muss ich dafür das TZUpdateSQL verwenden?`
Ja, dort die entsprechenden SQL-Statements eintragen und die Komponente dann mit dem Query verbinden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz