Formulardesign für Datenwartung

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
charlytango
Beiträge: 668
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz 2.2.4
CPU-Target: Win 32Bit, 64bit
Wohnort: Wien

Formulardesign für Datenwartung

Beitrag von charlytango »

Hallo!

Ich versuche mit diesem Thread eure Kreativität und euer Wissen anzuzapfen (no na)

Es geht um das Thema Datenwartung, denn trotz verschiedener Mechanismen die das verhindern sollen gelingt es den Benutzern einer Datenbankapplikation doch immer wieder den gleichen Kunden ein oder mehrmals neu anzulegen.
Das stört die DB-Logik besonders bei Statistiken und ist einfach unschön. Saubere und logisch konsistente Daten wären anzustreben.

Damit stellt sich dann auch die Aufgabe wie man denn ZB zwei Kundendatensätze zu einem zusammenführt? Klar kann ich einfach die Foreign Keys in den entsprechenden Tabellen austauschen jedoch "weiß" mein System nicht von jedem einzelnen Feld/Column was die neueste/aktuellste Version der Information ist. (wäre einfach ein Overkill im Aufwand)

Bleibt also nur dem Benutzer die beiden Informationstupel (also sagen wir mal Kundenname, Adresse Telefonnummer etc) anzuzeigen und er muss einzeln entscheiden was er davon behalten will und was Müll ist.

Soweit so gut...

Aber welche Ansätze des Formulardesings für so eine Aufgabe habt ihr in der Vergangenheit für solche Aufgaben gewählt mit welchen Erfahrungen??

Zwei Formulare (oder Frames) nebeneinander ?
Oder speisen 2 Formulare ein drittes?
Eine synchrone Liste wo man irgendwie jedes Feld auswählen kann?
oder andere Layouts?

Bitte um Feedback... THX

Benutzeravatar
Jorg3000
Lazarusforum e. V.
Beiträge: 99
Registriert: So 10. Okt 2021, 10:24
OS, Lazarus, FPC: Win64
Wohnort: NRW

Re: Formulardesign für Datenwartung

Beitrag von Jorg3000 »

Hi!
Ich habe aktuell bzw. immer wieder mal das gleiche Problem und habe mir überlegt, dass ich es mir so einfach wie möglich machen werde (noch nicht umgesetzt) ...
Der User soll sich in der normalen Eingabemaske/Oberfläche einen "besten" Datensatz manuell zusammenstellen, d.h. durch einzelnes Copy&Paste der Feldinhalte.
Ob das für ihn in dem Moment ggf. etwas umständlich ist, ist mir erst mal egal, denn es ist ja nicht die Schuld des Programms, dass ein User es verbockt hat.
Dann markiert der User zwei Datensätze und bekommt eine Auswahl angezeigt, welchen Datensatz er behalten möchte.
Der nicht zu behaltende Datensatz wird gelöscht bzw. seine ID wird in Verknüpfungstabellen durch die ID des "guten" Datensatzes ersetzt.
Die Arbeit mit der Gegenüberstellung einzelner Feldinhalte möchte ich mir nicht machen.
Grüße, Jörg

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 5739
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: Formulardesign für Datenwartung

Beitrag von af0815 »

Wenn du 'markannte' Datensätze isolieren kannst, dann eine einfache List, damit der Benutzer sieht, wieviel Arbeit das ist. Dan dort einen Datensatz anzeigen und den Side by Side anzeigen und den Benutzer e´ntscheiden lassen. Dabei aber berücksichtigen, das er Felder des untegehenden Datensatz in den anderen Datensatz übernehmen kann, wenn da etwas fehlt. Am besten sein 'gewohntes' Formular negeneinander zeigen, da ist der Erkennungswert am besten. Wenn du weisst welcher der beiden Datensätze jünger ist, dann den immer auf der gleichen Seite anzeigen. ZB immer links der jüngste und rechts der ältere Datensatz.

C&P ist bei den Usern nicht so beliebt. Manche wissen nicht mal, was das ist. Ctrl-C und Ctrl-V ist oft etwas ganz neues für so manchen Benutzer. Ja, ja ich habe das Vergnügen Benutzerinterfaces zu machen, und dann auch noch oft mit Touch :shock:
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

hum4n0id3
Beiträge: 195
Registriert: So 5. Mai 2019, 15:23

Re: Formulardesign für Datenwartung

Beitrag von hum4n0id3 »

Ich würde dem vor Speichern einen Suchdurchlauf starten um zu sehen, ob bereits ein ähnlicher Eintrag existiert. Wenn ja, das dem Anwender per Dialog melden und ihn die Wahl geben ob er dennoch Speichern möchte oder nicht.

Suchkriterien könnten sein, Name, Vorname, Straße, Nr., und wenn es geht sowas wie Geburtstag. Ich und mein Papa heißen gleich und es war immer ein Problem uns zu unterscheiden, wo wir noch zusammen gewohnt haben :D Da fragten wir immer nach dem Geburtsdatum :D

So würde ich es machen.

Benutzeravatar
Winni
Beiträge: 1535
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Formulardesign für Datenwartung

Beitrag von Winni »

Hi!

also wir haben das so gemacht:

Name des Kunden eingeben.

Sequentielle Suche über das Namensfeld, die auch Substrings beachtet.

Die Treffer werden in einer Listbox ausgegeben mit

Kundennummer, Name, PLZ, Straße, Ort

Klick auf den gewünschten Kunden. Ergibt die eindeutige Kundennummer, die indiziert ist:

Kunde gefunden.

Winni

charlytango
Beiträge: 668
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz 2.2.4
CPU-Target: Win 32Bit, 64bit
Wohnort: Wien

Re: Formulardesign für Datenwartung

Beitrag von charlytango »

@hum4n0id3
@Winni

Klarerweise gibt es für die Kundensuche ein Formular das in der Lage ist weiche Suchriterien zu verarbeiten und auf unterschiedlichste Weise (über mehrere Suchfelder, per substrings und sogar per soundex) sucht und das Ergebnis in einem Grid (mit etlichen wichtigen Nebendaten wie Adresse, Telnummer, etc etc) so anzeigt dass ein Benutzer den gewünschten Kunden analog aus einem kleinen Subset aussuchen kann. Auch zur Neuanlage werden Wizard-Formulare benutzt die nochmals auf mögliche Doubletten prüfen und ggfs warnen.

Zum Thema Geburtsdatum: Das wird mittlerweile in einigen meiner Applikationen bewusst nicht mehr gespeichert weil die DSGVO (in AT) dafür wieder besondere Vorschriften hat, die man sich nicht eintreten mag. Damit hat man natürlich schon eine potentielle Fehlerquelle.

Ich mache seit drei Dekaden Applikationen mit Firmen, Personen, deren Beziehung zueinander, Adressen samt deren Schreibweisen mit und ohne hinterlegtem Straßenkatalog und das gelegentlich auch noch mandantenfähig.

Klar haben sich meine Suchmasken, Suchstrategien und Anti-Doubletten-Mechanismen weiterentwickelt und verfeinert. Trotzdem gelingt es Benutzern immer wieder Doubletten bei Firmen und Personen zu erzeugen.

Und bei meiner Frage geht es darum solche Doubletten in der Datenbank zusammen zu führen. Noch nicht einmal darum diese zu finden sondern wie man sie dem Benutzer präsentiert damit der bequem,übersichtlich und schnell entscheiden kann welche unterschiedlichen Datenteile erhalten bleiben sollen.
Und deswegen frage ich nach welches Formular-Design die besten Erfahrungen hat.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 5739
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: Formulardesign für Datenwartung

Beitrag von af0815 »

Man muss das Geburtsdatum nicht unbedingt speichern. Es reicht IMHO, wenn du daraus einen Hash aus VN, NN und GebDatum machst. Damit ist es eindeutig, ohne das das Datum gespeichert wird.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

charlytango
Beiträge: 668
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz 2.2.4
CPU-Target: Win 32Bit, 64bit
Wohnort: Wien

Re: Formulardesign für Datenwartung

Beitrag von charlytango »

Danke, gute Idee -- sehr elegant

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 852
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Linux Mint 20 , FPC 3.3.1 , Lazarus 2.1.0 -Win10 & XE7Pro
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: Formulardesign für Datenwartung

Beitrag von kralle »

Moin,

Wie wäre es, wenn das erste Eingabefeld der Nachname ist und wie z B. bei einer G**gle-Suche, wird ab dem zweiten Buchstaben, jeder passende Nachnahme in Auswahlliste vorgeschlagen.
Dann sieht man schnell das es den Nachnamen schon in der Datenbank gibt.
Das gleiche noch mit Vornamen und Du reduzierst Doppeleinträge. Noch das Geburtsdatum für den Hash dazu und spätestens dann fragst Du den Nutzer ob er wirklich den Kunden doppelt anlegen will , Abbrechen will oder den bestehenden Eintrag bearbeiten will.

Gruß Heiko
OS: Manjaro Linux, Debian und Windows 10
FPC-Version: 3.3.1 , Lazarus 2.1.0
+ Delphi XE7SP1

charlytango
Beiträge: 668
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz 2.2.4
CPU-Target: Win 32Bit, 64bit
Wohnort: Wien

Re: Formulardesign für Datenwartung

Beitrag von charlytango »

Danke @kralle, aber es geht nicht um das Verhindern doppelter Einträge (dafür hab ich ausreichend Strategien -- deine ist eine davon)

Es geht um das Zusammenführen bereits erkannter Doubletten und die Frage wie präsentiert man dem Benutzer diesen Arbeitsschritt (denn einige Entscheidungen kann nur der Benutzer treffen z.B. -- was bleibt, welche Daten gewinnen, welche sollen weg. etc -- nicht alles kann automatisch über Datum entschieden werden)

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 852
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Linux Mint 20 , FPC 3.3.1 , Lazarus 2.1.0 -Win10 & XE7Pro
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: Formulardesign für Datenwartung

Beitrag von kralle »

Von wievielen Datenfeldern pro Kundenei trag reden wir hier eigentlich?
10,20 oder mehr?

Gruß Heiko
OS: Manjaro Linux, Debian und Windows 10
FPC-Version: 3.3.1 , Lazarus 2.1.0
+ Delphi XE7SP1

charlytango
Beiträge: 668
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz 2.2.4
CPU-Target: Win 32Bit, 64bit
Wohnort: Wien

Re: Formulardesign für Datenwartung

Beitrag von charlytango »

sagen wir mal etwa 25

Benutzeravatar
kupferstecher
Beiträge: 395
Registriert: Do 17. Nov 2016, 11:52

Re: Formulardesign für Datenwartung

Beitrag von kupferstecher »

charlytango hat geschrieben:
Di 11. Okt 2022, 17:59
Zwei Formulare (oder Frames) nebeneinander ?
Oder speisen 2 Formulare ein drittes?
Eine synchrone Liste wo man irgendwie jedes Feld auswählen kann?
oder andere Layouts?
Mein Vorschlag:
Dem Benutzer ein Formular mit einer Liste mit drei Spalten anzeigen. Die linke/erste Spalte ist der neue Datensatz, die zweite Spalte (mit Freiraum getrennt) ist der neuere Datensatz und die dritte Spalte der ältere Datensatz. Die alten Datensätze werden schreibgeschützt angezeigt, am besten auch visuell (ausgegraut). Über den Bestandsspalten könnte jeweils ein Button "Datensatz übernehmen" sein, der dann den Datensatz in die Spalte des neuen kopiert. In jeder Zeile könnte ein kleiner Button mit Symbol sein, mit dem man nur den einzelnen Eintrag übernehmen kann. Entweder im Menübereich oder unterhalb der Liste dann ein Button zum den neuen Datensatz abspeichern und die alten verwerfen. Alles mit Dialogen absichern um dem Nutzer klar zu machen, dass die Datensätze gelöscht werden. Es könnten auch noch Plausibilitätsprüfungen mit Warnung an den Nutzer eingebaut werden, bspw. dass im zusammengeführten Datensatz nicht weniger Einträge sein sollen wie in einem Ursprünglichen.

Du hast das nicht angesprochen, aber ich würde den Zusammenführungsdialog nicht automatisch dem Benutzer präsentieren, bspw. wenn bei einem Vorgang vom Programm ein doppelter Datensatz detektiert wird, sondern dann die Aktion abbrechen und dem Nutzer mitteilen, dass er über den-und-den Menüpunkt erst aufräumen muss. Andernfalls kann es leicht passieren, dass ein Nutzer sich einfach blind "durchklickt" und am Schluss zwei Datensätze weg sind.

Antworten