Hallo
Bin dabei die Formulare zu erstellen und hänge jetzt an der Erzeugung der ET_Nummer.
Ich habe diverse Text und Kombinationsfelder erstellt und generiere hieraus eine neue Nummer.
Funktioniert soweit schon aber jetzt sollen entweder das vorletzte oder letzte Feld automatisch in ein anders Formular wechseln, wenn die Nummer noch nicht vergeben ist.
Formularwechsel kein Problem.
Private Sub cbo_frm_Neuteil_anlegen_G_Item_Click()
strGit1 = Me!cbo_frm_Neuteil_anlegen_G_Item.Column(0)
If strGit1 <= 0 Then
strGit = Mid(strGit1, 7, 3)
Me!txt_frm_Neuteil_anlegen_Nummer = (strWsop) & "-" & (strMgr) & "-" & (strGit)
Else: Dim frm_NeueNummer
DoCmd.OpenForm "frm_NeueNummer"
Forms!frm_NeueNummer!cboNeueNummer = (strWsop) & "-" & (strMgr)
'Response = acDataErrContinue
End If
End Sub
Auch die Übergabe in das Kombifeld ist ok.
Jetzt soll aber die Liste aufgehen und sichtbar sein, sodaß der Ersteller die höchste Nummer mit dem Workshopcode sowie Materialcode sieht.
SELECT tblTeile.ET_Number FROM tblTeile ORDER BY tblTeile.ET_Number DESC;
Beispiel hier 12-31-028-001 nun könnte mann -029-001 eingeben und hätte die neue Nummer.
Leider zeigt das Feld die eingefügten Daten zwar an aber ich kann erst etwas eingeben, wenn ich dahinterklicke und auch die Liste ist nicht sichtbar erst nachdem ich einen Trennstrich eingebe.
Am liebsten wäre mir natürlich wenn "einfach" die vorhandene Nummer um 1 erhöht werden kann, hierzu habe ich aber nix gefunden.
Wie bekomme ich das Feld dazu den Cursor direkt hinter die kopierten Daten zu setzen oder falls möglich gleich die Nummer zu erzeugen ?
Cord
Siehe FAQ 4.13 (http://www.donkarl.com/FAQ/FAQ4Formulare.htm#4.13)
PS: ab Version 2007 kann man auch direkt über ein festgelegtes Formular neue Zeilen für ein Listen- oder Kombifeld eintragen bzw. alte editieren, wenn die Eigenschaft List Items Edit Form auf ein besagtes Formular angebeni ist, sowie Allow Value List Edits auf Ja eingestellt ist. Bei aufgeklapptem Kombifeld erscheint dann links unterhalb der Liste ein durchsichtiger Knopf (siehe Bildanhang).
Hallo Cord,
Zitatdie vorhandene Nummer um 1 erhöht werden kann
NeueNummer = DMax("Nummernfeld", "TabelleMitNummer") +1
Zitatden Cursor direkt hinter die kopierten Daten zu setzen
FormReferenz.DeinFeld.SetFocus
FormReferenz.DeinFeld.SelStart = Len(FormReferenz.DeinFeld)
gruss ekkehard
Hallo Lachtaube und Ekkehard
@ Lachtaube war nicht ganz was ich brauche werde mir das aber merken werde ich bestimmt noch brauchen :)
@ Ekkehard
Habe das jetzt mit
Private Sub Form_Load()
FormReferenz.cboNeueNummer.SetFocus
FormReferenz.cboNeueNummer.SelStart = Len(FormReferenz.cboNeueNummer)
End Sub
Eingesetzt bekomme aber Fehlermeldung 424 Objekt erforderlich
An die gleiche Stelle müsste dann ja auch ein Filter für die DMax ? oder brauche ich dafür eine Abfrage ?
Bin immer noch nicht firm genug um die Zusammenhänge zu sehen.
Cord
Hab da nochmal geändert
Private Sub Form_Load()
Forms!frm_NeueNummer!cboNeueNummer.SetFocus
Forms!frm_NeueNummer!cboNeueNummer.SelStart = Len(frm_NeueNummer.cboNeueNummer)
End Sub
Leider auch ohne Erfolg
Hallo Cord,
"Formreferenz" ist ein Platzhalter für das betreffende Formular. Also entweder
Me.
wenn es auf dem aktuellen Formular stattfindet, oder
Forms.DeinFormular.
wenn's auf einem anderen (geöffneten!) Formular passieren soll.
ZitatAn die gleiche Stelle müsste dann ja auch ein Filter für die DMax ?
Kann ich nicht beurteilen, da ich die Struktur (Datenmodell) nicht kenne.
Wenn du eine Bedingung benötigst, musst du die als dritten Parameter
bei DMax einfügen
NeueNummer = DMax("Nummernfeld", "TabelleMitNummer", "IrgendeinFeld = " & Irgendwas) + 1
gruss ekkehard
Hallo Cord,
Deine Ergänzung gerade erst gelesen.
".cboNeueNummer" befindet sich auf "frm_NeueNummer" ?
Dann reicht Me., - muss aber auch bei Len mit rein
Private Sub Form_Load()
Me!cboNeueNummer.SetFocus
Me!cboNeueNummer.SelStart = Len(Me!cboNeueNummer)
End Sub
gruss ekkehard
Jetzt bekomme ich Typenunverträglich Laufzeitfehler 13
aber erst in der 2ten Zeile komischerweise (so zeigt es der Debugger an)
Cord
Hm, bei mir funzt das ohne Fehler.
Du könntest es mit
ZitatLen(Me!cboNeueNummer.Text)
versuchen.
Nur wenn Steuerelemente sichtbar und fokussiert sind, stehen Eigenschaften wie Text, SelLength zur Verfügung.
Wenn das Ergebnis aber bereits bekannt und gespeichert ist, genügt es doch, dieses Ergebnis dem ungebundenes Kombield zuzuweisen, bzw. bei einem gebundenen Kombifeld zum entsprechenden Datensatz zu navigieren. Die Codefragmente lassen IMHO nur Interpretationen zu - besser wäre es, den kompletten Code der beteiligten Formulare zu kennen.
PS: Es bleibt auch zu hoffen, dass das Ergebnis später nicht wieder zur Auswertung zerpflückt werden muss (Stichwort: Normalisierung, atomare Feldinhalte).
@Lachtaube
ZitatNur wenn Steuerelemente sichtbar und fokussiert sind, stehen Eigenschaften wie Text, SelLength zur Verfügung.
Von der Sichtbarkeit bin ich ausgegangen; - er will da was eintragen. Den
Focus habe ich ja explizit gesetzt.
Ansonsten kann ich dir nur zustimmen.
gruss ekkehard
Zitat von: Beaker s.a. am Oktober 22, 2018, 17:41:55
@Lachtaube
ZitatIch will die Rohdaten nicht ändern, (wegen Excel-Export). Da, die User weiterhin unter Excel auswerten wollen.
Von der Sichtbarkeit bin ich ausgegangen; - er will da was eintragen. Den
Focus habe ich ja explizit gesetzt.
Ansonsten kann ich dir nur zustimmen.
gruss ekkehard
Kann es sein, das das nicht für mich war ?
Habe versucht dort etwas einzutragen und bekomme zurück " ) erwartet Komma wird markiert.
Falls der Text doch für mich war:
Habe keine andere Möglichkeit gefunden eine neue Nummer zu generieren wie ein zusätzliches Formular, daher macht ein Formular bei "nicht vorhanden in Liste" dieses neue Formular auf in dem nur ein Kombifeld sowie OK und Abbrechen vorhanden sind. Bei OK wird die neue Nummer an das Feld zurückübertragen aus dem anderen Formular. Von hier soll dann wenn alle Daten drin sind alles auf einmal mit zwei Anfügeabfragen an tblTeile und tblStueckliste übertragen werden.
Cord
Hallo Cord,
Sorry, falsches Zitat eingefügt; - habe ich eben noch geändert. War eine
Antwort an Lachtaube.
Ansonsten wäre es wohl das Beste, wenn du deine DB mal hier hochlädst.
gruss ekkehard
Habe das mal gepackt und hochgeladen.
Danke für eure Hilfe
Cord
Hallo,
so wird das doch nix...
Stell mal den (genauen) Algorithmus zur Berechnung einer neuen ET-Nummer vor.
Ein paar Beispielwerte sind auch nicht schlecht...
Hallo Franz
Die Berechnung erfolgt zT über das frm_Neuteil_anlegen und zum anderen Teil über frm_NeueNummer.
Ich habe mal versucht, das über eine Grafik anschaulich zu machen.
Nachdem die Kombination aus Workshop und Materialgruppe gewählt ist gibt man eine Bezeichnung ein. Wenn ein Teil schon vorhanden ist (zB Drehbank) soll er das erkennen, die Bezeichnung Fein verlangen und die Nummer automatisch ergänzen( Beispiel aus der Grafik: ich gebe ein Workshopcode,Materialgruppe und Drehbank ergibt im Feld Nummer = 99-99-001 weil Drehbank kennt er ja schon).
Falls das Teil nicht bekannt ist soll er die höchste Nummer mit der Kombination aus Workshopcode und Materialgruppe suchen und diese um 1 erhöhen, die letzen 3 können direkt auf -001 gesetzt werden weil ist ja das erste Teil mit dieser Bezeichnung.
(zur Beispieltabelle : 99-99 und Werkbank ergibt 99-99-002-001)
Muss ich die Bezeichnung verfeinern zB Zubehör oder Einzelteile und gebe ich etwas ein das er schon kennt gibt es eine Fehlermeldung mit dem Hinweis "ist vorhanden mit Nummer" (ist schon im Form). Wenn nicht vorhanden möchte ich, das die höchste vorhandene Nummer (hier 002) + 1 gesetzt wird.
(zur Beispieltabelle: 99-99-001 und Bohrfutter ergibt 99-99-001-003)
Ein Teil dieses Ablaufs funktioniert schon im Form frm_Neuteil_anlegen leider noch nicht alles ich würde auch gerne das 2te Form weglassen und alles in einem machen.
Wobei das die Königslösung ist ;D
Mir würde schon reichen, wenn ich Workshop und Materialgruppe auswähle und das Teil nicht vorhanden ist er mir die höchste Nummer anzeigt und die eingegeben wird genau wie beim Einzelteil dann aus 99-99-001 und die höchste vergebene Anzeigt, damit ich die nächste eingeben kann und so auch zu meiner Nummer komme.
Ich hoffe das ist erschöpfend erklärt.
Cord
Hallo,
ist die dahinterliegende Tabell normalisiert?
Wenn das Feld "Bezeichnung" als Kombifeld ausgeführt wird, könnte beim Ereignis "Not in List" eine Funktion gestartet werden, die die genannten Berechnung ausführt. Ebenso mit einem Kombifeld für "BezeichnungFein" , das den rechten Teil der Gesamtnummer berechnet.
Lad mal die DB hier hoch..
Datenbank ist schon oben.
Hab ne neue Version hochgeladen hier ist die tblTeile mit der ET-Number als Zahl und String geänderte ET is am Ende angefügt.
Hatte gehofft damit das Feld Nummer im frmNeuteil_anlegen zu überlisten leider auch ohne Erfolg.
Da sind schon einige Funktionen drin die das erreichen sollen aber nicht so funktionieren wie gewünscht.
Cord
Hallo,
ich denke, das Tabellenmodell ist noch nicht stimmig.
Was hat die ET_Nummer in tblTeile zu suchen, wenn sie vom Workshop abhängt?
Was soll "ET"-Nummer denn bedeuten? ist das eine "Zeichnungsnummer" oder "Bauplannummer"
Wenn die ET_Nummer in tblDetails hinterlegt wird, ist dort eine laufende Nr (als Teil der gesamten ET-Nummer) relativ leicht zu errechnen und von mir aus auch abzuspeichern.
Hallo Franz
ET steht hier für Einzelteil und soll eine von uns intern vergeben Nummer sein. Die gleichzeitig einen Bezug zum Workshop und Materialgruppe herstellt. Teile die in mehreren Workshops eingesetzt können oder werden haben die Kennung ALL (99).
Für mich war tblTeile der richtige Platz für diese Nummer, die Workshops sind ja in einer eigenen Tabelle
Die tblStueckliste hat sich aus der alten Exceltabelle ergeben, die aus diversen Workshoplisten alle einzeln zusammengesetzt war.
Ich muss also noch eine Tabelle erstellen, die nur die Teilenummer, eine ID und als FremdID die aus tblTeile enthält ? und die ET aus tblTeile löschen ?
Cord
Hallo,
Ich interpretiere:
tblStückliste (hieße vielleicht besser WorkshopTeile) enthält diejenigen Teile, die zu einem bestimmten Workshop zugeordnet sind. Wenn mehrere gleiche Teile zu einem Workshop gehören, so sollen diese Teile von 001 ab durch nummeriert werden. Dann versteh ich allerdings nicht die "QTY"-Felder .
Wenn jedes einzelne Teil in der tblStückliste eine fortlaufende Nummer , abhängig vom Workshop, erhalten soll, so muss die ET-Nummer, und zwar nur der "rechte" Teil als Feld in tblStückliste stehen.
Die komplette ET-Nummer wird dann für weitere Zwecke immer aus dieser LFDNr und den anderen ID-Werten (Codes) zusammengesetzt.
Hmmm ich glaube meine Erklärung war nicht genau genug.
Die ET_Number soll nur einmal erstellt werden, weil soll ja unsere unveränderliche Nummer für ein bestimmtes Teil sein.
Wenn ich die Nummer nur aus den letzten beiden Teilen zusammensetze kann es zu doppelten kommen, was ich nicht will.
In der tblStueckliste sind die Workshops (ID) mit den dazugehörigen Teilen (ID) zusammengebracht. Ist denn eine Tabelle über ? tblWorkshops ?
Zitat von: DF6GL am Oktober 26, 2018, 16:44:14
tblStückliste (hieße vielleicht besser WorkshopTeile) enthält diejenigen Teile, die zu einem bestimmten Workshop zugeordnet sind.
Ja genau hier sind alle Teile zusammengebracht mit den Workshops.
Zitat von: DF6GL am Oktober 26, 2018, 16:44:14
Hallo,
Wenn mehrere gleiche Teile zu einem Workshop gehören, so sollen diese Teile von 001 ab durch nummeriert werden. Dann versteh ich allerdings nicht die "QTY"-Felder .
Nein nicht nach Workshop sonder nach der Benennung der Teile siehe Beispiel vorher.
Werkbank ist 99-99-001-001 was heisst Workshopcode ist 99 für allgemeine Verwendung 99 ist Materialcode war hier nur Beispiel, dann Werkbank 001-001 heißt Werkbank ist Haupteil und noch nicht vorhanden.
Sollte jetzt für diese Werkbank ein zusätzliches Teil hier ein Schraubstock benötigt werden ist die Benennung bei G-Item Werkbank und bei SG-Item Schraubstock was ergibt 99-99-001 weil Werkbank und 99-99-001-002 für Schraubstock.
Große Frage
Ist mein Ansatz hier völlig falsch oder überzogen ?
Für mich ist wichtig, das ich den Lieferanten und den Empfängern eine Zuordnung vereinfachen möchte indem ich beim Verpacken schon die Codes der Workshops usw draufmachen kann und die das dann verteilen können.
Wenn das so ist bitte sagen dann muss ich das komplett überarbeiten.
zB würde denn reichen wenn ich den Teile nur Materialgruppen zuordne zB Werkstattausrüstung und die Workshopzuordnung nur über die Stückliste mache und das aus der Nummer völlig rausnehme ?
Cord
Hallo,
also, entweder ist heute Montag oder ich verstehe die Nummerierung nicht.... :o
Nur zum Verständnis: Was ist denn ein "Workshop"?
Ist das ein "Laden" , der mit Artikeln (Teilen) handelt, soll heißen, diese beschafft und verkauft
oder ist das ein "Seminar", bei dem die Teilnehmer gewisse Tätigkeiten und Arbeiten erlernen können?
Wenn , wie ich vermute, ein bestimmtes Teil in einem bestimmten "Laden" angeboten und verkauft werden soll, dann muss zunächst jedes Teil seine "Identnummer" ("Teilenummer") als solches erhalten, die das Teil eindeutig identifiziert. (Wenn gleiche Teile von unterschiedlichen Herstellern stammen können, muss die Teilenummer aber noch um die Herstellernummer ergänzt werden, bzw. für jedes Teil unterschiedlich sein.)
Wird das Teil in einen Workshop "geliefert" und soll dann zu diesem Workshop gehörend gekennzeichnet werden, ist ab hier die o. g. Teilenummer um die Workshop-Nummer zu ergänzen.
Diese komplette "Teile-Hersteller-Workshop-Nummer" muss jedoch nicht in einer Tabelle gespeichert werden und kann jederzeit zur schönen Ansicht dort zusammengesetzt werden, wo es erforderlich ist.
Hallo Franz ja war Montag ;D
So ist das wenn man den ganzen Tag in Begriffen denkt.
Ein Workshop kann eine Klassenraumeinrichtung sein zB Tische, Beamer,Stühle.... Oder auch eine echte Werkstatt (hier Lehrwerkstatt) für Fzg oder was auch immer man braucht. Diese werden in verschiedenen Schulen eingerichtet. Liegst also mit Seminar richtig.
Herstellernummer hier tblLieferant habe ich in der Nummer nicht berücksichtigt, da sich der auch ändern kann kommt nicht auf den Hersteller sondern nur auf den Lieferer an. Ist aber in tblTeile als ID_L_F berücksichtigt. Kann also jederzeit berücksichtigt werden.
Aber kann ich dann nach der Nummer suchen wenn ich die zusammensetze ? um dieses Teil zB zu Bearbeiten (Preis ändern oder auch den Lieferanten).
Verkauft werden die Teile nicht, es können zwar Sachen verbraucht werden aber nicht verkauft. Ist im Grunde als Einrichtung zu sehen.
Das war für mich der Grund ALL = Allgemein unter Workshop anzulegen und in der tblStuekliste wieder eine Zuordnung zu den Workshops zu schaffen.
Geht das auch anders ? kann ich in der tblTeile Mehrfacheintragungen in einem Feld vornehmen und ein Teil verschiedenen Workshops zuordnen ?
Cord
Hallo,
also handelt es sich um eine Inventar-DB...
Dann gliedere auf, wie die Hirarchie der Daten (minimal) aussehen sollte (z. B als Tabellen):
Schulen
1:n Workplaces
1:n
Lehrräume
1:n
Inventar (LehrraumLieferantenteile)
1:n
|
Teile (Ressourcen) |
1:n |
Lieferantenteile
1:n
Lieferanten
Evtl. nötige Stammdaten- bzw. Nachschlagetabellen habe ich jetzt nicht berücksichtigt
"Inventar" erhält eine fortlaufende Nr. Entweder absolut oder immer bei 1 beginnend bezgl. eines Lehrraums (und/oder eines Lieferantenteils).
Eine sprechende Inventarnummer kann jederzeit mit den Angaben (Lieferanten-Code, WorkPlace-Code) in den einzelnen 1-Tabellen wie gewünscht zusammengesetzt werden.
Es gibt keine (gespeicherte) Mengenangabe (Anzahl eines Teils). Jedes Einzelteil hat seine eigene ID.
Ist der Tabellenaufbau stimmig, sind anschließende Auswertungen, bzw. Filterungen auch "stimmig".
Ist keine Inventar DB sondern eine Lieferteile DB wir haben diverse Stücklisten (tblStueckliste) aus der wir die Lieferlisten, Bestellisten usw erstellen wollen.
Ok nach diversen Versuchen mit Tabellen mach ich das doch mit Text.
Wichtig für mich ist, das diese selbst erzeugt Nummer feststeht und keine Doppelte vorkommen kann, daher auch die Speicherung in der tblTeile mit der ID zusammen.
Die Workshop ID wird für 2 Dinge benutzt.
Einmal zur Nummernfindung hier inklusive der 99 für ALL.
Sowie zur Zuordnung zu einer Stückliste für einen Workshop hier ohne ALL.
Die Materialgruppe schränkt das ganze weiter ein (Einrichtung oder Werkzeug zB)
und mit der Benennung und dem Feincode G-ITEM und SG-ITEM soll die Nummer abhängig von den ersten 4 Stellen erzeugt werden.
Das bedeutet die -001-001 kann mehrfach vorkommen aber niemals 99-99-001-001 zweimal.
Beispiel:
99-99-001-001
99-07-001-001
91-99-001-001
Ich hoffe meine Erklärung ist ok so.
Cord
Hallo,
das Ganze ist für mich sehr verworren...
ZitatIst keine Inventar DB sondern eine Lieferteile DB
also doch ein "Laden".... ::)
"Stücklisten" sind dann wohl "Lieferscheine"
Egal, wie man es dreht: Die Nummer in "Teile" abzulegen ist, wenn sie von der Workshopnummer abhängt, schlichtweg falsch.
Der richtige Ort ist und bleibt die Stückliste, ob nun als komplette Nr. oder als LFDNR abgespeichert und aus den anderen Nummern zusammengesetzt..
Habe dir eine kurze PN gesendet.
Aus den Stücklisten sollen auch Lieferscheine Bestellungen und ähnliches erstellt werden ja.
Also muss die ET_Number von der tblTeile in die tblStueckliste wandern.
Die Zusammensetzung möchte ich gerne so beibehalten aber fertig in der Liste speichern sprich einmal erstellen und speichern.
Cord