Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Tabelle/Datenbank für Erfassung von Bearbeitungsfortschritt

Begonnen von micha286, November 09, 2011, 16:54:54

⏪ vorheriges - nächstes ⏩

micha286

Hallo liebe Access-Profis,

entweder bin ich nicht clever genug bei der Suche, oder aber es gibt zu meinem folgenden Problem noch keinen Thread hier im Forum:

Ich möchte für die Bearbeitung eines Auftrages den Bearbeitungsfortschritt festhalten. Konkret geht es dabei um 20 Prozessschritte, die für jeden Auftrag erledigt werden müssen. Zusätzlich ist mit jedem Bearbeitungsschritt eine Gebühr fällig, die prozentual von der Auftragssumme abhängt.

Gibt es dazu einen Standard-Ansatz, den ich verfolgen könnte? Leider habe ich eine Vorlage dazu noch nicht entdecken können.

Meine Überlegung ist bis dato also, eine Tabelle mit der folgenden Struktur anzulegen:



ID Auftrag
blnStep1Schritt erledigt Ja/Nein?
datStep1Datum
txtUserStep1Zuständiger MA
lngGebuehr1Gebühr für Step1
blnStep2Schritt erledigt Ja/Nein?
datStep2Datum
txtUserStep2Zuständiger MA
lngGebuehr2Gebühr für Step2
usw

Die %-Gebühren für den jeweiligen Prozessschritt, würde ich in einer weiteren Tabelle ablegen:

ID Step
lngStep          %-Anteil


Die Berechnung für die Gebühr lngGebuehr1 soll dann wie folgt ablaufen:

Pseudo-Code: If blnStep1 = JA Then lngStep1*"Auftragssume" Else 0

Zusätzlich benötige ich dann auch noche eine Erfassung der bisher angefallenen Gebühren...vermutlich über eine Abfrage?


Die Verknüpfung der %-Anteile zu den Gebühren-Schritten funktioniert so aber leider nicht und wie ich die Gebühr (ggf. als Standardwert) in der 1. Tabelle berechnen lassen kann, weiß ich leider auch nicht.

Ich würde mich freuen, wenn ihr mir bei meinem Problem helfen könntet. Falls es keine konkrete Lösung gibt, so bin ich auch über sämtliche Anregungen zu diesem Thema dankbar.

Vielen Dank also schon einmal für eure Untersützung!

Beste Grüße

DF6GL

#1
HAllo,

wenn ich das richtig interpretiere, brauchst Du 4 (evtl 5) Tabellen:

tblProzesse
ProzessID
Prozess_Name
Prozess_Datum
.
.
.


tblProzessschritte
PSID
PS_ProzessID
PS_SchrittNr
PS_Datum
PS_StatID
PS_MAID
PS_Gebuehr
.
.
.

tblStatus
StatID
Stat_Bezeichnung
.
.
.

tblMitarbeiter
MAID
MA_Name
.
.
.

TblSchritte
SchrittNr
Schritt_Bezeichnung
.
.

Dabei die Tabellen über die ID-Felder miteinander in Beziehung setzen.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Beaker s.a.

Hallo Micha,

Zitat
Gibt es dazu einen Standard-Ansatz, den ich verfolgen könnte?

Ja, Normalisierung  ;)

Spass bei Seite,

Zitat
ID Auftrag
blnStep1, Schritt erledigt Ja/Nein?
datStep1, Datum
txtUserStep1, Zuständiger MA
lngGebuehr1, Gebühr für Step1
usw

Auch wenn Du scheinbar eine feste Anzahl Prozessschritte hast, musst Du die Spalten zu Datensätzen machen (Normalisierung).
Etwa so:
IDProzess (PK)
IDAuftrag (FK)
IDStep (FK) *
datStep Datum,
Erledigt (Boolean), braucht man zwar IMO nicht, da Not IsNull(StepDatum) das gleiche Ergebnis hat
Mitarbeiter

*
Zitat
Die %-Gebühren für den jeweiligen Prozessschritt, würde ich in einer weiteren Tabelle ablegen:
ID Step
lngStep          %-Anteil

Genau, und die wird zu der Tabelle oben gejoined. Ds Präfix von lngStep weisst auf einen Long-Datentyp hin. Der ist aber ganzzahlig (integer) und IMO für Prozentzahlen schlecht geeignet, da Du dann immer selber durch 100 teilen musst. Nimm Currency, ist dezimal und mit vier Stellen hinter dem Komma genau genug.

Zitat
Die Berechnung für die Gebühr lngGebuehr1 soll dann wie folgt ablaufen:
Pseudo-Code: If blnStep1 = JA Then lngStep1*"Auftragssume" Else 0

Zusätzlich benötige ich dann auch noche eine Erfassung der bisher angefallenen Gebühren...vermutlich über eine Abfrage?

Kannst Du mit obigem Modell alles per Abfrage berechnen; - und sogar noch mehr (Dauer der einzelnen Prozesse z.B.)

hth
gruss
ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

micha286

Hallo ihr beiden,

schonmal vielen Dank für eure beiden Antworten. Einen Schritt in Richtung Lösung bin ich damit glaube ich schon gekommen.

@ DF6GL: Wenn ich die Struktur so anlege, funktioniert es prinzipiell so, wie bei Beaker, oder? Aber ich stehe spätestens dann vor einem Problem, wenn ich die Verfolgung des Arbeitsprozesses über ein Formular gestalten möchte. Ich stelle mir es so vor, dass ich für jeden Prozess die einzelnen Prozessschritte nur "abhaken" (also über ein bln-Feld) muss und das Datum und den MA hinzufüge. In deinem Vorschlag müsste ich den jeweiligen Prozessschritt vorher noch aus einem Kombinationsfeld o.ä. auswählen, oder? Dann wäre es rein theoretisch möglich, für einen Prozess den gleichen Prozessschritt mehrfach auszuwählen, korrekt? Das müsste ich natürlich irgendwie vermeiden können...

@ Beaker: Den generellen von dir vorgeschlagenen Aufbau habe ich verstanden, die Normalisierung kann ich nachvollziehen und habe sie auch so umgesetzt. Auch bei dir ergibt sich aber das Problem bei der Verfolgung des Arbeitsprozesses über ein Formular (s.o.), oder kann man das über eine Aktualisierungsabfrage o.ä. laufen lassen? Vielleicht meinst du dass auch mit dem Tabelle joinen, das müsstest du für mich dann aber bitte noch einmal erläutern.

Besten Dank euch beiden für eure Hilfe!

Gruß
Micha

MzKlMu

Hallo,
ZitatIn deinem Vorschlag müsste ich den jeweiligen Prozessschritt vorher noch aus einem Kombinationsfeld o.ä. auswählen, oder?
Ja, das ist richtig. Wenn aber immer alle Prozessschritte in der gleichen Reihenfolge bearbeitet werden, kannst Du auch beim Anlegen eines neuen Prozesses par Anfägeabrage alle Schritte anfügen. Der Eintrag eines Datum (per Doppelklick z.B.) heist, der Schritt ist erledigt. Auf Ja/Nein Felder würde ich unter allen Umständen verzichten. Die Schritte mit Datum sin erledigt, die ohne eben nicht.
ZitatDann wäre es rein theoretisch möglich, für einen Prozess den gleichen Prozessschritt mehrfach auszuwählen, korrekt?
Das zwar korrekt, kann aber durch einen zusammengesetzten eindeutigen Index auf Tabelleneben zuverlässig verhindert werden.
Wenn Du wie vorgeschlagen alle 20 Schritte gleich anfügst stellt sich das Problem in der Form aber gar nicht.
Du kanns mit einem Haupformular (Prozess) und darin einem Unterformular für die Schritte (verknüpft über die Schlüsselfelder) in einem Formular alleProzesse und dessen Schritte sehen und bearbeiten.
Dazu ist weder VBA noch eine Aktualisierungsabfrage notwendig. Du denkst viel zu kompliziert, das sind Dinge die Access serienmäßig automatisch beherscht.
Gruß Klaus

micha286

#5
Hallo MzKlMu,

vielen Dank für deine Antwort. Ich habe deine Anmerkung mit dem Ja/Nein berücksichtig, das Feld gibt es jetzt nicht mehr. Leider hänge ich jetzt an der Anfügeabfrage, vermutlich stehe ich einfach nur auf dem berühmten Schlauch:

Ich habe jetzt eine Tabelle tbl_Prozess, so wie von euch vorgeschlagen, die wie folgt aussieht:

IDProzess (PK, AutoWert)
IDAuftrag (FK)
IDStep (FK)*
datStep
IDMA (FK)

und zu * die folgende Tabelle tbl_Step:

IDStep (PK, AutoWert)
txtStep
curStep

Wenn ich dich richtig verstanden habe und wie es für mich auch schlüssig kling, soll nun bei der Neuanlage eines Auftrages (den würde ich dann im Hauptformular als neuen Datensatz aufrufen) per Anfügeabfrage automatisch die in tbl_Step angegebenen Schritte der tbl_Prozess hinzugefügt werden und im UFO angezeigt werden. Soweit korrekt? Das funktioniert an und für sich auch, allerdings nur wenn ich sämtliche Beziehungen der Tabelle tbl_Prozess entferne...oder kann es noch einen anderen Grund geben, warum es nicht funktioniert? Wäre super, wenn du mir nochmal auf Sprünge helfen würdest....erst dachte ich wohl zu kompliziert, nun vielleicht zu dämlich :)

Besten Dank schonmal vorab!


MzKlMu

#6
Hallo,
Mir ist die Tabelle Prozess nicht ganz klar. Sollte die Tabelle für den prozess nicht noch mehr Felder zum Prozess enthalten. Eigentlich sehe ich das so:

tblProzess
IDProzess (PK, AutoWert)
IDAuftrag (FK)
IDMA (FK)

tblProzessStep
IDProzessStep (PK, Autowert)
IDProzess (FK)
IDStep (FK)
datStep

tblStep
IDStep (PK, AutoWert)
txtStep
curStep

Die Anfügeabfrage muss 20 Datensätze an die Tabelle "tblProzessStep" anfügen.
Gruß Klaus

micha286

:) Da haben wir wohl gleichzeitig gearbeitet. Die Fehlende Tabelle habe ich hinzugefügt, leuchtet mir auch ein, hatte ich leider übersehen. Ich hänge jetzt noch an de Beziehungen (siehe auch mein obiger Post, editet). Wenn ich per Anfügeabfrage die 20 Schritte hinzufüge, klappt das bis auf eine Ausnahme soweit ganz gut. Wenn ich aber die Schritte hinzufüge, steht aktuell in IDProzess stets der Wert "0", da Access meckert sobald ich die Felder IDProzess aus tblProzess und tblProzessSteps miteinander in Beziehung setze (mit referentieller Integrität)...macht einerseits Sinn, das es so nicht geht, andererseits sehe ich gerade nicht, wie ich das gestalten kann damit er mir automatisch den richtigen Prozess da reinschreibt. Oder mache ich das über das Formular und dann ggf. über OpenArgs etc.?

Besten Dank nochmal!

MzKlMu

Hallo,
zeige bitte mal den aktuellen Aufbau, oder beser, lade die DB hier hoch, aber im Format Access2003 bitte.
Gruß Klaus

micha286

Hallo,

ich habe die Datenbank jetzt mal mit hochgeladen. Das ist nur mein Entwurf, den ich zwecks Veranschaulichung mit einigen Kommentaren versehen habe (nicht erschrecken, das ist wirklich nur ein Entwurf für mich, damit ich den Aufbau sauber hinbekomme). Bin dir für jeden Kommentar dankbar!

[Anhang gelöscht durch Administrator]

MzKlMu

#10
Hallo,
anbei mal ein Vorschlag. Das Anfügen der 20 Schritte habe ich mit Recordsets gemacht, schien mit zweckmäßiger.
Es werden keine doppelten Schritte angefügt, auch nicht bei mehrfachem Drücken des Buttons.

Weitere Änderungen:
IDStep in Tabelle tblProzess ist überflüssig.
Alle Fremdschlüsselfelder habe ich mit dem Suffix "_F" versehen.
Es ist überaus vorteilhaft Primärschlüssel und Fremdschlüssel am Namen unterscheiden zu können.
Überhaupt, sollte es in einer DB keine doppelten Namen geben, auch nicht in unterschiedlichen Tabellen.
Du hattest bei einer Beziehung keine RI gesetzt, wenn das nicht geht sind bereits Fehler in der DB entweder in den Daten (Konsistenz) oder Datentypen. Bei Dir war es die Konsistenz.
In den Formularen habe ich überflüssige Felder entfernt.

Was noch fehlt, ist die Einbindung des Mitarbeiters. Ist für jeden Schritt immer nur ein bestimmter Mitarbeiter zuständig?

DB anbei
Zähle bitte bei einem event. nächsten Upload die Versionsnummer hoch.

[Anhang gelöscht durch Administrator]
Gruß Klaus

micha286

Hallo MzKlMu ,

vielen herzlichen Dank für deinen Vorschlag! Ich habe es leider erst heute geschafft, ihn mir genauer anzuschauen - sieht super aus! Genauso hatte ich mir das in meinen "Pseudo"-Überlegungen vorgestellt. Ich mache mich jetzt mal an die Implementierung.

Beste Grüße

micha286

Sensationell - funktioniert perfekt und genauso, wie ich es mir vorgestellt habe.

Ich bin gerade noch auf die Idee gekommen, die Arbeitsschritte nicht global vorzugeben, sondern je nach Auftrag zu variieren. Die einfachste Idee wäre wohl mit Hilfe einer Checkbox im frm_Auftrag zwischen zwei Varianten (sagen wir 1 und 2) zu wählen. Je nach Auswahl in frm_Auftrag würden dann Arbeitsschritte im Unterformular prozess-steps hinzugefügt (entweder aus tbl_Steps_1 oder tbl_Steps_2).

Lässt sich das einfach umsetzen, oder ist da großer Aufwand notwendig? Falls letzteres gilt, baue ich einfach ein zweites Formular.

Besten Dank noch einmal!

MzKlMu

Hallo,
kannst Du das mal näher beschreiben?
Wie willst Du die Schritte unterscheiden für die Aufträge?
Zwei Tabellen (tbl_Steps_1, tbl_Steps_2) sind schon mal falsch.
Gruß Klaus

micha286

Gerne...

...die zwei Tabellen waren nur zur Veranschaulichung gedacht, mE müssten sämtliche Schritte in einer Tabelle auftauchen aber dann halt untereinander oder so...ich hatte folgende Idee:

frm_Auftrag: Checkbox (blnZusatz) ob Auftragsvariante 1 oder Auftragsvariante 2

tbl_Steps: ID 1-20 = Schritte Auftragsvariante 1, ID 20-40 = Schritte Auftragsvariante 2

tbl_ProzessStep Unterformular: Wenn blnZusatz=Ja, lade schritte ID 20-40, sonst lade schritte 1-20


Während ich das hier gerade niederschreibe, könnte ich mir alternativ auch das vorstellen:

frm_Auftrag: Combobox (cbxVariante) ob Auftragsvariante 1 (IDVariante=1) oder Auftragsvariante 2 (IDVariante=2)

tbl_Steps:

ID Step
txtStep
curStep
IDVariante

tbl_ProzessStep Unterformular: Wenn cbxVariante=1, lade schritte mit IDVariante=1, sonst lade schritte mit IDVariante=2


Ist das so verständlicher formuliert?

Besten Dank für deine Hilfe!