von RobertG » Fr, 27.07.2012 17:56
Hallo Lain,
Lain hat geschrieben:Also die Ja/nein felder sind wirklich nur dazu da, damit man schnell sehen kann, das der auftrag/rechnung abgeschlossen ist, damit man nicht lange aufs datum gucken muss.
diese Felder sind wirklich nur dazu da, den Status auf einen Blick ersichtlich zu machen.
Also würde das Folgende reichen:
In der von mir angehängten Datenbank war eine Abfrage "Abfrage_AuftragNr_RechnungNr". Diese Abfrage erstellt aus der "Auftrag"-Tabelle nebenher die Auftragsnummer und die Rechnungsnummer und ist Grundlage für das Formular "Auftragsbearbeitung". ich habe die Abfrage hier einmal ergänzt:
Code: Alles auswählen
SELECT "Auftrag".*, 'AU-' || CONVERT ( YEAR( "Auftrag"."Auftrag-Datum" ) , CHAR ) || '-' || CONVERT ( "Auftrag"."Angebots-Nr." , CHAR ) AS "Auftrag-Nr.", 'RE-' || CONVERT ( YEAR( "Auftrag"."Rechnung-Datum" ) , CHAR ) || '-' || CONVERT ( "Auftrag"."Angebots-Nr." , CHAR ) AS "Rechnung-Nr.", CASE WHEN "Auftrag"."Abschluss-Datum" IS NULL THEN FALSE ELSE TRUE END AS "Auftrag erteilt", CASE WHEN "Auftrag"."Zahlungseingang-Datum" IS NULL THEN FALSE ELSE TRUE END AS "Gezahlt" FROM "Auftrag"
Der Start mit "Auftrag".* stellt die gesamte Tabelle "Auftrag" dar. Anschließend werden "Auftrag-Nr." und "Rechnung-Nr." erstellt. Mit den || werden Felder oder auch Textinhalte verbunden. Da es sich um Textinhalte halten soll, habe ich aus dem Jahr und der Angebotsnummer einfach Text erstellt und entsprechend verbunden. Diese Felder hast Du schon, auch in dem Formular - dort dann als schreibgeschützt, werden also nur dargestellt.
Anschließend wird mit CASE WHEN nachgefragt, ob das "Abschluss-Datum" leer ist (IS NULL). Wenn es leer ist, dann wird in einer Checkbox "FALSE" (also Nein, nicht angekreuzt) angegeben, wenn es gefüllt ist, dann wird "TRUE" angegeben. Damit werden die Ja/Nein-Felder für den Auftrag und für den Zahlungseingang überflüssig. Die Eigenschaft kannst Du in dem Formular aus diesen Feldern lesen. Du brauchst also nichts anzuklicken und läufst damit auch nicht die Gefahr, das einmal zu vergessen und plötzlich eine Erinnerung zu schicken, weil eben das Ja/Nein-Feld nicht gefüllt war.
Lain hat geschrieben:Zu deinen anmerkungen in der Tabelle Auftrag: das mit dem Boolean hab ich ja schon erklärt. Und das Mahnverfahren muss leider mit berücksichtigt werden, die daten sind dazu da nachvollziehen zu können, wann die einzelnen schritte unternommen wurden.
Du hast für das Mahnverfahren 3 Datumsfelder in der Tabelle. In dem Bibliotheksprogramm, das dem Handbuch Base beiliegt, habe ich auch 3 Mahnmöglichkeiten. Nur ist dieses Verfahren ausgegliedert. Es gibt dann eine Tabelle, die nur die Angebotsnummer und ein Datum speichern würde. Das erste Datum wäre die Erinnerung, das 2. Datum die erste Mahnung ... Du könntest so beliebig viele Mahnungen verschicken, bevor das letzte Datum "Inkasso-Datum" vollzogen wird. Das ist in sofern universeller handhabbar, als wirklich jeder Mahnschriftverkehr festgehalten wird und nicht eben nur drei Datumswerte mit unterschiedlicher Benennung.
Lain hat geschrieben:
Wegen der berechenbarkeit der Datums-Angaben, ist es möglich das den wert in dem Summenfeld nach der automatischen berechnung noch zu verändern (z.b. wenn z.b. ein kunde vereinbart, das er erst später zahlt)?
Die Berechnung so eines Datums im Voraus ist leider mit den Mitteln der mitgelieferten HSQLDB nicht möglich. Andere Datenbanken, auch die aktuelle Version der frei verfügbaren HSQLDB, haben so eine Funktion wie DATE_ADD(). Mit der eingebauten Datenbank kannst Du zwar den Unterschied zwischen zwei Datumswerten über DATEDIFF() ausrechnen - in allen möglichen Maßeinheiten - aber der umgekehrte Weg geht nicht mit vertretbarem Aufwand - abgesehen davon, dass die Schaltjahre Zusatzprobleme bereiten.
Früher habe ich mir damit geholfen, einfach eine Tabelle zu erstellen, die aus lauter Datumswerten und fortlaufenden Zahlenwerten bestand. Habe dazu einfach Calc benutzt, oben "1" und das gewünschte Startdatum angegeben und dann mit der Autofill-Funktion nach unten gezogen. Da hatte ich dann eine Tabelle mit fortlaufenden Datumswerten und Zahlenwerten. 5 Tage aufwärts war: Startdatum nachsehen, Wert daneben auslesen, 5 addieren, Ergebnisdatum nachsehen.
Mittlerweile würde ich so etwas mit DateADD() über Makros realisieren. Allerdings ist es mit dem Kalender in Datumsfeldern doch recht einfach, eben einmal 2 Wochen Zahlungsfrist nachzuvollziehen. Ein per Makro ermittelter Wert könnte natürlich geändert werden. Er würde nur dann geschrieben, wenn keine Zahlungsfrist vorgegeben wurde - also bei einem leeren Feld.
Ich weiß allerdings im Moment nicht, ob ich das Makro hier irgendwo greifbar liegen habe.
Gruß
Robert
Hallo Lain,
[quote="Lain"]Also die Ja/nein felder sind wirklich nur dazu da, damit man schnell sehen kann, das der auftrag/rechnung abgeschlossen ist, damit man nicht lange aufs datum gucken muss.
diese Felder sind wirklich nur dazu da, den Status auf einen Blick ersichtlich zu machen.[/quote]
Also würde das Folgende reichen:
In der von mir angehängten Datenbank war eine Abfrage "Abfrage_AuftragNr_RechnungNr". Diese Abfrage erstellt aus der "Auftrag"-Tabelle nebenher die Auftragsnummer und die Rechnungsnummer und ist Grundlage für das Formular "Auftragsbearbeitung". ich habe die Abfrage hier einmal ergänzt:
[code]
SELECT "Auftrag".*, 'AU-' || CONVERT ( YEAR( "Auftrag"."Auftrag-Datum" ) , CHAR ) || '-' || CONVERT ( "Auftrag"."Angebots-Nr." , CHAR ) AS "Auftrag-Nr.", 'RE-' || CONVERT ( YEAR( "Auftrag"."Rechnung-Datum" ) , CHAR ) || '-' || CONVERT ( "Auftrag"."Angebots-Nr." , CHAR ) AS "Rechnung-Nr.", CASE WHEN "Auftrag"."Abschluss-Datum" IS NULL THEN FALSE ELSE TRUE END AS "Auftrag erteilt", CASE WHEN "Auftrag"."Zahlungseingang-Datum" IS NULL THEN FALSE ELSE TRUE END AS "Gezahlt" FROM "Auftrag"
[/code]
Der Start mit "Auftrag".* stellt die gesamte Tabelle "Auftrag" dar. Anschließend werden "Auftrag-Nr." und "Rechnung-Nr." erstellt. Mit den || werden Felder oder auch Textinhalte verbunden. Da es sich um Textinhalte halten soll, habe ich aus dem Jahr und der Angebotsnummer einfach Text erstellt und entsprechend verbunden. Diese Felder hast Du schon, auch in dem Formular - dort dann als schreibgeschützt, werden also nur dargestellt.
Anschließend wird mit CASE WHEN nachgefragt, ob das "Abschluss-Datum" leer ist (IS NULL). Wenn es leer ist, dann wird in einer Checkbox "FALSE" (also Nein, nicht angekreuzt) angegeben, wenn es gefüllt ist, dann wird "TRUE" angegeben. Damit werden die Ja/Nein-Felder für den Auftrag und für den Zahlungseingang überflüssig. Die Eigenschaft kannst Du in dem Formular aus diesen Feldern lesen. Du brauchst also nichts anzuklicken und läufst damit auch nicht die Gefahr, das einmal zu vergessen und plötzlich eine Erinnerung zu schicken, weil eben das Ja/Nein-Feld nicht gefüllt war.
[quote="Lain"]Zu deinen anmerkungen in der Tabelle Auftrag: das mit dem Boolean hab ich ja schon erklärt. Und das Mahnverfahren muss leider mit berücksichtigt werden, die daten sind dazu da nachvollziehen zu können, wann die einzelnen schritte unternommen wurden.[/quote]
Du hast für das Mahnverfahren 3 Datumsfelder in der Tabelle. In dem Bibliotheksprogramm, das dem Handbuch Base beiliegt, habe ich auch 3 Mahnmöglichkeiten. Nur ist dieses Verfahren ausgegliedert. Es gibt dann eine Tabelle, die nur die Angebotsnummer und ein Datum speichern würde. Das erste Datum wäre die Erinnerung, das 2. Datum die erste Mahnung ... Du könntest so beliebig viele Mahnungen verschicken, bevor das letzte Datum "Inkasso-Datum" vollzogen wird. Das ist in sofern universeller handhabbar, als wirklich jeder Mahnschriftverkehr festgehalten wird und nicht eben nur drei Datumswerte mit unterschiedlicher Benennung.
[quote="Lain"]
Wegen der berechenbarkeit der Datums-Angaben, ist es möglich das den wert in dem Summenfeld nach der automatischen berechnung noch zu verändern (z.b. wenn z.b. ein kunde vereinbart, das er erst später zahlt)?[/quote]
Die Berechnung so eines Datums im Voraus ist leider mit den Mitteln der mitgelieferten HSQLDB nicht möglich. Andere Datenbanken, auch die aktuelle Version der frei verfügbaren HSQLDB, haben so eine Funktion wie DATE_ADD(). Mit der eingebauten Datenbank kannst Du zwar den Unterschied zwischen zwei Datumswerten über DATEDIFF() ausrechnen - in allen möglichen Maßeinheiten - aber der umgekehrte Weg geht nicht mit vertretbarem Aufwand - abgesehen davon, dass die Schaltjahre Zusatzprobleme bereiten.
Früher habe ich mir damit geholfen, einfach eine Tabelle zu erstellen, die aus lauter Datumswerten und fortlaufenden Zahlenwerten bestand. Habe dazu einfach Calc benutzt, oben "1" und das gewünschte Startdatum angegeben und dann mit der Autofill-Funktion nach unten gezogen. Da hatte ich dann eine Tabelle mit fortlaufenden Datumswerten und Zahlenwerten. 5 Tage aufwärts war: Startdatum nachsehen, Wert daneben auslesen, 5 addieren, Ergebnisdatum nachsehen.
Mittlerweile würde ich so etwas mit DateADD() über Makros realisieren. Allerdings ist es mit dem Kalender in Datumsfeldern doch recht einfach, eben einmal 2 Wochen Zahlungsfrist nachzuvollziehen. Ein per Makro ermittelter Wert könnte natürlich geändert werden. Er würde nur dann geschrieben, wenn keine Zahlungsfrist vorgegeben wurde - also bei einem leeren Feld.
Ich weiß allerdings im Moment nicht, ob ich das Makro hier irgendwo greifbar liegen habe.
Gruß
Robert