Autor Thema: Doppelte Rechnungsnummer verhindern  (Gelesen 9182 mal)

Offline macom111

  • Senior Mitglied
  • ****
  • Beiträge: 293
  • Geschlecht: Männlich
  • Anfänger in der Datenbankentwicklung!!!
Doppelte Rechnungsnummer verhindern
« am: 02.01.06 - 23:03:23 »
Hallo zusammen,

habe in meiner DB ein Feld "RechNr" (Rechnungsnummer) vom Typ "Text".
Kann ich verhindern, daß ein neues Dok. durch falsche Eingabe mit der gleichen RechnNr. gespeichert wird?
Geht das evtl. mit @Functions?
Finde nichts in der Hilfe und hier im Forum, da ich nicht genau weiß nach was ich suchen muß.
Vielen Dank schon mal für Eure Hilfe.

Gruß Siggi
« Letzte Änderung: 29.01.06 - 00:08:11 von macom111 »

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Doppelte Rechnungsnummer verhindern
« Antwort #1 am: 02.01.06 - 23:17:33 »
Hallo Siggi,

mit @functions wird es ein Krampf, sollte aber auch gehen. Mit LotusScript geht es sehr einfach und komfortabel. Warum machst Du das nicht im QuerySave mit LotusScript?

Mit @functions hast Du ein wesentliches Problem:
Du kannst mit @dbLookup auf eine entsprechende Ansicht prüfen, ob es ein (! - wenn mehr, sind die Messen ja schon gelesen ...) Dokument mit dieser ReNr. schon gibt. Das darf aber nur VOR dem Speichern passieren (Eingabevalidierung des Felder ReNr) und nur, wenn das Dokument neu ist. Wurde es bereits gespeichert, würde ja bei einem erneuten Speichern ggf. genau dieses Dokument gefunden.
Folge: Du musst neben der Absicherung, dass nur neue Dokumente auf ReNr geprüft werden, auch dafür sorgen, dass bereits gespeicherte Dokumente keine Änderung der ReNr mehr erlauben.

Das nur als Ansatz. Vielleicht hilft es zu einer möglichen Umsetzung, vielleicht führt es Dich zu einer anderen Lösung - oder zu LotusScript.

Bernhard

Glombi

  • Gast
Re: Doppelte Rechnungsnummer verhindern
« Antwort #2 am: 03.01.06 - 11:08:22 »
Ich mache das so:
Ein @DbLookup mit dem Key Rechnungsnummer auf eine Ansicht, die in der 2. Spalte die Formel:
@Text(@DocumentUnqiueID)
hat.

Die Abfrage wäre dann

_Lookup := @DbLookup("":"NoCache";"";"Name der Ansicht";Rechnungsnummer;2);
@If(
 @IsError(_Lookup);
   @Success;
 @Elements(_Lookup) = 1 & _Lookup = @Text(@DocumentUnqiueID);
    @Success;
 @Failure("Die Rechnungsnummer wurde bereits vergeben!")
)

Andreas

Driri

  • Gast
Re: Doppelte Rechnungsnummer verhindern
« Antwort #3 am: 03.01.06 - 11:12:17 »
Man sollte allerdings bedenken, daß so ein Konstrukt nur sauber funktioniert, wenn es auf nur einem Server genutzt wird. In dem Moment, wo Änderungen an mehreren Standorten durchgeführt werden und die Replikation mit ins Spiel kommt, kann man die doppelte Vergabe nur nachträglich abfangen.

Offline macom111

  • Senior Mitglied
  • ****
  • Beiträge: 293
  • Geschlecht: Männlich
  • Anfänger in der Datenbankentwicklung!!!
Re: Doppelte Rechnungsnummer verhindern
« Antwort #4 am: 03.01.06 - 22:41:40 »
mit @functions wird es ein Krampf, sollte aber auch gehen. Mit LotusScript geht es sehr infach und komfortabel. Warum machst Du das nicht im QuerySave mit LotusScript?
Hallo Bernhard,

Guckst Du, was unter Bild von "Arnie" steht.  ;) Trifft leider immer noch zu. Ich  bin froh, wenn ich´s mit @functions hinbekomme. Die Zeit!!!!  >:( 3 Bücher habe ich ja schon über Lotus Script und auch schon mal darin gelesen. Sie liegen direkt vor mir.
Ich werde mir Deinen "Ansatz" zu gemüte führen. Vielen Dank für die Tipps.


@Glombie:
Hallo Andreas,

vielen Dank für die Formel. Habe zwar noch nicht alles verstanden, bin aber auf dem besten Weg dorthin (zerpflücke sie gerade) ;D


@Driri:
Es gibt nur einen Server, und das wird sich auch in Zukunft vermutlich nicht so schnell ändern.

Danke euch allen. Melde mich nochmal, wenn ich´s nicht hinbekomme.

Gruß Siggi
« Letzte Änderung: 03.01.06 - 22:50:10 von macom111 »

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Doppelte Rechnungsnummer verhindern
« Antwort #5 am: 03.01.06 - 22:54:03 »
Hallo Siggi,

schau' Dir am besten das Beispiel von Andreas an - für die meisten Fälle reicht das aus und ist weiter gedacht als mein "Ansatz". Einer LS-Lösung liegt übrigens der gleiche Ansatz zu Grunde. Ich kann allerdings in der Regel in solchen Fällen nicht mehr mit @functions (die ich SEHR schätze - wo sie passen, und sie passen sehr oft) arbeiten, da es bei mir in der Regel erheblich mehr abzusichern gilt bzw. die LS-Lösung eben seit Jahren bewährter, robuster Standard aus der Werkzeugkiste ist.

Wichtig ist auch Ingos Hinweis: Das Ganze funktioniert nur sicher (egal, ob @functions oder LS oder JavaScript oder Java mit entspr. GUI-Framework), wenn eine Eingabe / Änderung der Rechnungsnummer nur auf einem einzigen Server möglich ist.

Bernhard

PS und vollkommen off-topic: "Arnie" mag ich nicht mehr ... Rein persönlich sehe ich schon das erste bestätigte Todesurteil als verwerflich an. Rein statistisch hat sich Herr Schwarzenecker aber nun (seit "Nr. 3") an einem Justizmord beteiligt.

Offline macom111

  • Senior Mitglied
  • ****
  • Beiträge: 293
  • Geschlecht: Männlich
  • Anfänger in der Datenbankentwicklung!!!
Re: Doppelte Rechnungsnummer verhindern
« Antwort #6 am: 12.01.06 - 21:59:35 »
Hallo zusammen,

leider hab´ ich´s bis jetzt nicht hinbekommen. Es passiert gar nichts, das Dok wird einfach gespeichert – ohne Meldung.

Jetzt dachte ich mir, ich taste mich erstmal an @DBLookup heran und versuche eine einfache Abfrage auf die Rechnungsnummern der Spalte „RechnungsNr“.

Meine DB sieht folgendermaßen aus:
DB Name =  „HardwEDV“
Maskenname =  „Hardware“
Feldname für die Rechnungsnummer =  „RechnungsNr“ vom Typ Text
Ansicht mit allen Feldern = „Alle Rechnungen“ – die Spalte 8 ist das Feld „RechungsNr“
Eigene Ansicht mit nur 1er Spalte für das Feld „RechnungsNr“ = „Lookup_RechnungsNr“

Jetzt möchte ich mir aus der Ansicht „Lookup_RechnungsNr“ aus der 1sten Spalte alle Rechnugsnummern anzeigen lassen.
Meine Formel im Querysave der Maske sieht folgendermaßen aus:

REM {Parameter zuweisen};
Datenbanktyp := "Notes";
Cacheoption := "NoCache";
Server := "";
Datenbank := "hardwedv.nsf";
Ansicht := "Lookup_RechnungsNr";
Schlüssel := "RechnungsNr";
Spaltennummer := 1;

REM {Mit Schlüssel suchen};
Liste := @DbLookup (Datenbanktyp : Cacheoption; Server : Datenbank; Ansicht; Schlüssel; Spaltennummer);

REM {Liste an Benutzer ausgeben};
@Prompt ([OkCancelList]; "Rechnngsnummer"; "Wählen Sie eine Rechnungsnummer"; ""; Liste);


Öffne ich nun ein neues Dok und Speichere es, kommt folgende Meldung:
Eintrag im Index nicht gefunden, oder der Index ist für die Ansicht nicht aufgebaut.

Die Ansicht ist aber Indexiert und die Spalte ist sortiert.

Was mache ich falsch? Bitte um Hilfe.

Gruß Siggi

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Doppelte Rechnungsnummer verhindern
« Antwort #7 am: 12.01.06 - 22:06:19 »
Zitat
Schlüssel := "RechnungsNr";

Das ist der Fehler. Du übergibst einen String namens "RechnungsNr", suchst abr den Wert des Feldes RechnungsNr. Und "08154711" ist nicht gleich "RechnungsNr".

Bernhard

Offline macom111

  • Senior Mitglied
  • ****
  • Beiträge: 293
  • Geschlecht: Männlich
  • Anfänger in der Datenbankentwicklung!!!
Re: Doppelte Rechnungsnummer verhindern
« Antwort #8 am: 12.01.06 - 22:21:19 »
Aahh, habe verstanden.
Ich gebe bei Schlüssel := "300" ein, dann wird mir die Rechnungsnummer  300 ausgegeben.

Wie kann ich mir aber jetzt alle Rechnungnr. der Spalte ausgeben lassen?
Stehe ich auf der Leitung?

Siggi

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Doppelte Rechnungsnummer verhindern
« Antwort #9 am: 12.01.06 - 22:47:13 »
Sorry, aber jetzt verstehe ich an der Frage gar nix mehr ...

Alle Rechnungsnummern (solange die Datenmenge nicht 64k übersteigt) bekommst Du mit @DbColumn. Aber das kann ja wohl nicht Sinn und Zweck Deiner Übung sein.

Was ich immer weniger verstehe (Siggi, das geht nicht gegen Dich): Warum lassen Firmen und andere Organisationen eigentlich überhaupt Newbees an die Systeme? Warum nehmen sie nicht wenigstens Fachleute hinzu, die während der Lösungsentwicklung auch noch ihr Wissen abgeben?
Diese ganze Frickelei, die man hier im Forum so erlebt als Abbild der realen Welt ...

Bernhard

Offline macom111

  • Senior Mitglied
  • ****
  • Beiträge: 293
  • Geschlecht: Männlich
  • Anfänger in der Datenbankentwicklung!!!
Re: Doppelte Rechnungsnummer verhindern
« Antwort #10 am: 12.01.06 - 23:10:09 »
@DBColumn ist mir schon klar. Das wende ich auf andere Felder an.
Ich versuche halt jetzt, um @DBLoookup zu verstehen, die Möglichkeiten zu testen.
Deshalb habe ich versucht, mir über @Prompt alle Rechnungnr. auslesen zu lassen - geht aber vermutlich nicht.

Bei dieser DB handelt es sich um eine DB, die wir nur in der EDV verwenden. Sie war mein erstes "Prachtstück". An dieser DB teste ich halt neue Funktionen.

Die schweren Sachen lassen wir natürlich Entwickeln.

Gruß Siggi

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Doppelte Rechnungsnummer verhindern
« Antwort #11 am: 12.01.06 - 23:24:26 »
Ich versuche halt jetzt, um @DBLoookup zu verstehen, die Möglichkeiten zu testen.

Dringender Ratschlag: Vor dem Testen die Doku lesen  ;)

Deshalb habe ich versucht, mir über @Prompt alle Rechnungnr. auslesen zu lassen - geht aber vermutlich nicht.

Klar geht das (ab R6). Ab das wird doch eine langweilige Lektüre, die selben Nummern nochmal zu lesen, die man schon in der Ansicht sehen könnte.

Und irgendwie lenkst Du jetzt vom Thema ab, zu dem Du uns befragt hast: Doppelte Rechnungsnummern verhindern. Warum machen wir nicht damit weiter ...

Bernhard

Offline macom111

  • Senior Mitglied
  • ****
  • Beiträge: 293
  • Geschlecht: Männlich
  • Anfänger in der Datenbankentwicklung!!!
Re: Doppelte Rechnungsnummer verhindern
« Antwort #12 am: 13.01.06 - 15:15:42 »

Dringender Ratschlag: Vor dem Testen die Doku lesen  ;)


Das mache ich natürlich. aber wenn ich alles verstehen würde, müßte ich ja nicht um Hilfe bitten.  ;)


Und irgendwie lenkst Du jetzt vom Thema ab, zu dem Du uns befragt hast: Doppelte Rechnungsnummern verhindern. Warum machen wir nicht damit weiter ...


Ich lenke ganz und gar nicht vom Thema ab. Klar geht es mir um die doppelten RNr. Und ich habe auch nicht um die Formel von Andreas gebeten (ich find´s aber trotzdem super, daß er mir gleich seine fertige Lösung angeboten hat) sondern um Hilfe gebeten, da ich nicht genau wußte, wonach ich suchen muß (Guckst Du erstes Posting  ;)). Ich will ja nicht alles vorgekaut bekommen, sondern es so weit wie möglich selbst versuchen.
Da die Formel von Andreas aber nicht funktioniert (ist doch etwas zu hoch für mich), dachte ich mir, ich taste mich Schritt für Schritt an @DBLookup vor.
Mein Gedanke war jetzt:
Die Formel von Andreas muß ja irgendwie alle RNr. lesen um ein doppelte zu vermeiden. Also müßte es auch möglich sein, sich mit @DBLookup und @Promt alle RNr. ausgeben zu lassen.
Habe ich verstanden wie das funktioniert, sollte ich auch besser verstanden haben, wie @DBLookup funktioniert. So kann ich mich an die Formel von Andreas heranarbeiten und komme evtl. dahinter, warum sie bei mir nicht funktioniert. Also einfach Schritt für Schritt.

Gruß Siggi

Offline Ranki

  • Junior Mitglied
  • **
  • Beiträge: 63
  • Geschlecht: Männlich
    • Ranki.de
Re: Doppelte Rechnungsnummer verhindern
« Antwort #13 am: 18.01.06 - 09:52:03 »
Hallo Siggi,

kannst Du nochmal gerade den Stand der Dinge nennen?! Blicke da nicht mehr durch; hat sich an Deinem ursprünglichen problem was geändert oder bekommst Du jetzt immernoch "Eintrag im Index nicht gefunden"?

Schönen Gruß
Sascha

Offline macom111

  • Senior Mitglied
  • ****
  • Beiträge: 293
  • Geschlecht: Männlich
  • Anfänger in der Datenbankentwicklung!!!
Re: Doppelte Rechnungsnummer verhindern
« Antwort #14 am: 21.01.06 - 18:54:58 »
Hallo Sascha,

Nein.  "Eintrag im Index nicht gefunden" bekomme ich nicht mehr.
Vorausgesetzt, ich trage bei Schlüssel nicht den Feldnamen „RechnungNr“ ein, sondern suche nach einer Rechnungsnummer – z.B. Der „300“.
Also: Schlüssel := „300“.

REM {Parameter zuweisen};
Datenbanktyp := "Notes";
Cacheoption := "NoCache";
Server := "";
Datenbank := "hardwedv.nsf";
Ansicht := "Lookup_RechnungsNr";
Schlüssel := "300";
Spaltennummer := 1;

REM {Mit Schlüssel suchen};
Liste := @DbLookup (Datenbanktyp : Cacheoption; Server : Datenbank; Ansicht; Schlüssel; Spaltennummer);

REM {Liste an Benutzer ausgeben};
@Prompt ([OkCancelList]; "Rechnngsnummer"; "Wählen Sie eine Rechnungsnummer"; ""; Liste);


Die Rechnungsnummer 300 wird mir jetzt im  @Prompt ausgegeben.

Als nächstes möchte ich mir mit @Prompt alle Rechnungsnummern des Feldes „RechnungsNr“ ausgeben lassen. Warum?

Zitat

Die Formel von Andreas muß ja irgendwie alle RNr. lesen um ein doppelte zu vermeiden. Also müßte es auch möglich sein, sich mit @DBLookup und @Promt alle RNr. ausgeben zu lassen.
Habe ich verstanden wie das funktioniert, sollte ich auch besser verstanden haben, wie @DBLookup funktioniert. So kann ich mich an die Formel von Andreas heranarbeiten und komme evtl. dahinter, warum sie bei mir nicht funktioniert. Also einfach Schritt für Schritt.

Zitat

Gruß siggi

Offline VB3Bernd

  • Junior Mitglied
  • **
  • Beiträge: 90
  • Geschlecht: Männlich
  • Danke!
Re: Doppelte Rechnungsnummer verhindern
« Antwort #15 am: 25.01.06 - 14:22:49 »
Hallo siggi,

@prompt kann nur mit Text umgehen, Du musst wahrscheinlich die Werte umwandeln.

@Prompt ([OkCancelList]; "Rechnungsnummer"; "Wählen Sie eine Rechnungsnummer"; ""; @ToText(Liste))

Grüße
Bernd
SYSTEM
Domino 9.0.1 FP10 HF983
Client Win10 mit Notes 12.0.0
(Revision 20210514.0921)
Mail-Schablone 9.1.0 (20.03.18)
-----------------------------------
Man wird nicht zwischen Weihnachten und Neujahr dick, sondern zwischen Neujahr und Weihnachten! ;-)

Offline Ranki

  • Junior Mitglied
  • **
  • Beiträge: 63
  • Geschlecht: Männlich
    • Ranki.de
Re: Doppelte Rechnungsnummer verhindern
« Antwort #16 am: 25.01.06 - 15:21:40 »
Hallo Siggi,

so ein Problem hatte ich auch schon öfter; wie oben schon gesagt wurde suchst Du jetzt nach dem String "Rechnungsnummer" und der wird nicht gefunden, wohingegen der String "300" gefunden wird, weil Du dazu ja ein Dokument hast.

Zitat
Zitat
Schlüssel := "RechnungsNr";

Das ist der Fehler. Du übergibst einen String namens "RechnungsNr", suchst abr den Wert des Feldes RechnungsNr. Und "08154711" ist nicht gleich "RechnungsNr".

Die Hilfe gibt da einen Anhaltspunkt, indem da steht:
@DbLookup("":"NoCache";"Sales":"Customers.nsf";"ContactList";contactName;"Comments")

Das Entscheidende ist, dass der Schlüssel nach dem gesucht wird, wenn es ein Feld ist, nicht in Anführungsstrichen stehen darf (vgl. contactName). Versuch also mal folgendes:

@DbLookup (Datenbanktyp : Cacheoption; Server : Datenbank; Ansicht; RechnungsNr; Spaltennummer);

Ansonsten, wäre es ein Problem, die DB mal eben hochzuladen?! Am Objekt kann man schneller mal rumfummeln  ;)

Schönen Gruß

Sascha

P.S.: Den Eintrag von Bernd muss Du evtl. auch beachten, aber der Prompt war für Dich ja eh nur zur Überprüfung, gelle?!

Offline macom111

  • Senior Mitglied
  • ****
  • Beiträge: 293
  • Geschlecht: Männlich
  • Anfänger in der Datenbankentwicklung!!!
Re: Doppelte Rechnungsnummer verhindern
« Antwort #17 am: 27.01.06 - 23:05:57 »
Hallo Siggi,Die Hilfe gibt da einen Anhaltspunkt, indem da steht:
@DbLookup("":"NoCache";"Sales":"Customers.nsf";"ContactList";contactName;"Comments")

Das Entscheidende ist, dass der Schlüssel nach dem gesucht wird, wenn es ein Feld ist, nicht in Anführungsstrichen stehen darf (vgl. contactName). Versuch also mal folgendes:

Hallo Sascha,

Vielen Dank, das war der entscheidende Hinweis. Jetzt funktionierts!
Und schon funzt auch die Formel von Andreas.
 ;D
Nochmals Danke @All.

Gruß Siggi

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Doppelte Rechnungsnummer verhindern
« Antwort #18 am: 28.01.06 - 13:20:55 »
Das mit String vs. Feldinhalt stand aber schon in Posting #7  ;)

Bernhard

Offline Ranki

  • Junior Mitglied
  • **
  • Beiträge: 63
  • Geschlecht: Männlich
    • Ranki.de
Re: Doppelte Rechnungsnummer verhindern
« Antwort #19 am: 28.01.06 - 14:11:06 »
Moin, moin,

nichts anderes habe ich versucht zu verdeutlichen  ;)

Schöne Grüße
Sascha

@Siggi: Markierst Du das Thema noch als erledigt?!

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz