Artikel-Verwaltung mal etwas umständlicher :-/

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von thefiloe.

    Artikel-Verwaltung mal etwas umständlicher :-/

    Hallo zusammen,

    ich habe bei einem Migrationsprojekt (von VB 6 -> VB.NET) zwei (für mich) bedeutende Probleme und hoffe ihr könnt mir dabei helfen.

    Es geht um eine Art Artikel-Verwaltung mit zugehöriger Bestell-Verwaltung. Es gibt 3 Arten von Artikeln.
    a) Alleinstehender Artikel (fängt immer mit "A" an)
    b) Bundle Artikel (fängt immer mit B an und besteht aus mehreren Artikeln, die zu einem Bundle gehören müssen)
    c) Bundle-Zugehörige-Artikel (fangen mit C, D oder E an und müssen zu einem Bundle gehören)

    Jeder Artikel hat bestimmte aber teilweise unterschiedliche Eigenschaften.

    Das Ganze ist über eine Access-Datenbank gesteuert, die seit Jahren gewachsen ist (also den kompletten Artikelstamm enthält). Alle Artikel sind in einer einzigen Tabelle. Es gibt also keine m:n Tabelle die z.B. alle Bundle-Zugehörige Artikel mit einem Bundle-Artikel verknüpft. Artikelnummern von Artikeln die mit "A" beginnen bestehen aus 4 Teilen (z.B. A 123 45 678), Bundle und Bundle-Zugehörige-Artikel bestehen aus 5 Teilen (z.B. B 123 456 78 910).
    In der Datenbank stehen sie aber z.B. als "A12345678" drin und wurden programmatisch auseinander gerissen. Nun soll das (um es schöner darzustellen) getrennt dargestellt werden. Habe ich soweit auch bereits gelöst durch weitere Spalten und entsprechende Teilung der Artikelnummern nach dem Schema des jeweiligen Aufbaus.


    Nun würde ich das Ganze gerne alles sauberer gestalten, als es bisher war ohne dem Kunden seine langjährigen Gewohnheiten zu nehmen, was die Pflege angeht. Das ist z.B., dass er bisher die einzelnen "Blöcke" der Artikelnummer in getrennten Textboxen eingegeben hat, bei der Anlage einer Bestellung dann aber in einem Feld die komplette Artikelnummer ausgewählt werden soll.


    Nun mein erstes Problem:

    Wie realisiere ich es mit einem DataGridView und/oder DetailView, dass man bspw. eine Combobox sieht, in der die komplette Artikelnummer steht und im Hintergrund die ID des Artikels gespeichert wird? Habe mich die letzten Tage intensiv mit dem FourView Model von "ErfinderDesRades" befasst, aber leider keine Möglichkeit gefunden eine Combobox mit einem "CONCAT-Wert" über 5 Spalten zu füllen als DisplayMember. Als ValueMember die ID zu hinterlegen ist kein Problem. Ich würde auch ungerne weiterhin die komplette Artikelnummer in einer Spalte vorhalten nur um diese Darstellung zu realisieren.


    Zweites Problem (eher ein allgemeineres Problem):

    Ich würde gerne Radioboxen zum Befüllen einer Spalte verwenden, um zu vermeiden, dass Werte eingegeben werden, die nicht sein sollen (und weil es in der alten Version des programms auch so war ... Gewohnheiten des Kunden ...). Es gibt in der Tabelle der Artikel eine Spalte "x" die varchar(3) ist und darin soll entweder "abc" oder "def" stehen. Mittels der verkünpften Radioboxen soll je nach Auswahl der eine oder andere Wert in die Spalte geschrieben werden. Habe dazu versucht das Textfeld zu verstecken und bei Änderung der Radiobox-Auswahl den Wert entsprechend gefüllt. Leider Funktioniert das nur (und auch nur bedingt), wenn das Textfeld "Visible" ist. Sobald ich Visible=False mache funktioniert das garnicht mehr. Wenn es Visible ist kommt erstmal ein Fehler der besagt, dass MaxLength der Spalte überschritten wird. Der Fehler kommt auch nur einmal.


    Schonmal vielen Dank vorab für hilfreiche Anregungen.

    nauralos schrieb:

    Es geht um eine Art Artikel-Verwaltung mit zugehöriger Bestell-Verwaltung. Es gibt 3 Arten von Artikeln.
    a) Alleinstehender Artikel (fängt immer mit "A" an)
    b) Bundle Artikel (fängt immer mit B an und besteht aus mehreren Artikeln, die zu einem Bundle gehören müssen)
    c) Bundle-Zugehörige-Artikel (fangen mit C, D oder E an und müssen zu einem Bundle gehören)


    Ich glaube dieses Konzept solltest du noch einmal überdenken :D

    Sind denn nicht alle Artikel Artikel?

    Du könntest eine extra Tabelle anlegen in der man Bundles erstellen kann, ein Bundle kann mehrere einzelne Artikle enthalten...dazu braucht eine Artikelnummer keine B am anfang.

    Ein Software Bundle besteht auch aus mehreren einzelnen Softwares, welche theoretisch auch einzeln zu verfügung stehen können, jedoch im Bundle einen extra Bundle-Preis haben.


    nauralos schrieb:

    eine Combobox sieht, in der die komplette Artikelnummer steht und im Hintergrund die ID des Artikels gespeichert wird? Habe mich die letzten Tage


    Wieso hast du eine Artikelnummer und eine ID? Ist eine Artikelnummer nicht Unique und kann als ID verwendet werden?

    Wieso hast du verschiedene Arten von Artikeln?


    Hallo shaebich,

    danke für dein Feedback. Um mal ein realitätsnahes Beispiel zu nennen. Ein Bundle-Artikel in meinem Sinne (bzw. im Sinne der Anwendung) ist z.B. ein Auto. Das Auto widerrum besteht (grob ums einfach zu halten) aus 4 Reifen, 4 Türen, 4 Sitzen und 1 Kofferraum. Ja man bekommt das dann über Ersatzteile auch alles einzeln, aber das Programm verwaltet nur Bestellungen von kompletten Autos. Um genau zu sein verwaltet es z.B. Teile wie die Autotür, wozu Fenster, Motor für elektr. Fensterheber usw. gehört. Über die Artikelnummern von Auto-Zulieferern mag man nicht diskutieren :) Das geben die Hersteller vor. Man muss es einfach so machen. Und da gehört dann ein A, B, C, D oder E davor, je nachdem was es ist. Die ID ist für mich der PK, der (für mein Empfinden) nicht vom user per GUI editierbar sein sollte, sondern lediglich intern der Eindeutigkeit dient. Und die Artikelnummer besteht ja aus bis zu 5 Teilen, die getrennt eingegeben und somit auch getrennt gespeichert werden sollen. Mit einem PK über mehrere Spalten tu ich mir noch schwerer.
    Klar ich verstehe dein Problem schon ;)

    Habe viel im SAP mit Materialstämmen etc. zu tun.

    Dein Problem ist viel grundlegender und du solltest es an der Wurzel packen ;)
    Was du brauchst sind keine "Bundle"-Artikel sondern Unterartikel von Artikeln. (z.B. Gehört die Türverkleidung definitiv zur "Tür A" und dies wird als FK im Materialstammsatz der Türverkleidung eingetragen.)

    nauralos schrieb:

    Über die Artikelnummern von Auto-Zulieferern mag man nicht diskutieren


    Definitiv sollten wir dies tun!! Du übernimmst die selben Artikelnummer des Herstellers? Jeder Lieferant hat seine eigenen Artikelnummern welche im Stammsatz des Artikels die Herstellerteilenummer haben.

    So arbeitest du intern mit deinen eigenen Artikelnummern und extern kannst du auch die HTN verwenden.


    Also überleg dir eine passende Struktur für deine Datenbank, werfe hier ein Bildchen rein und man kann es korrigieren.
    Aber so wie sich es hier anhört, ist dies ein richtiges Projekt, also mach dir richtige Gedanken, sonst wirst du später probleme bekommen.


    mfg :)

    shaebich schrieb:

    z.B. Gehört die Türverkleidung definitiv zur "Tür A" und dies wird als FK im Materialstammsatz der Türverkleidung eingetragen.

    Da würde ich dir widersprechen wollen. Weder die Türverkleidung (der Unterartikel) erhält die Info zu welcher Tür (der Artikel) sie gehört, noch erhält die Tür die Info welche Türverkleidung sie bekommt, da eine Tür sowohl verschiedene Türverkleidungen haben kann (z.B. je nachdem ob elekt. Fensterheber vorh. sind oder nicht), als auch eine Türverkleidung zu mehreren Türen passen kann (die z.B. nur andere Lackierungen haben, aber von der Form gleich sind). Würde ich eher in einer komplett getrennten Tabelle (m:n) verknüpfen.

    shaebich schrieb:

    Du übernimmst die selben Artikelnummer des Herstellers? Jeder Lieferant hat seine eigenen Artikelnummern welche im Stammsatz des Artikels die Herstellerteilenummer haben.

    Ich hatte versucht das Ganze so allgemein/einfach, wie möglich zu beschreiben ohne zu kompliziert zu werden. Wollte da keine Grundsatz-Diskusion über die Art und Weise der Artikelnummern-Vergabe draus machen. Ich entwickle das Programm, nutze es aber nicht. Mein Kunde vergibt die Nummern so (hat er mir vorgegeben). Ob die nun vom Hersteller sind oder von ihm selbst ist für mich an der Stelle relativ bedeutungslos. Er will es, er kriegt es. Dann hab ich halt meine interne ID zur eindeutigkeit, seine 4 oder 5-stellige Lieferantenteilenummer oder Herstellerteilenummer. Ich würde aber in Frage stellen wollen, dass das jetzt was mit meinem Problem zu tun hat. Die Anforderung ist eindeutig definiert, dass die Artikelnummern in 4 bzw. 5 getrennten Feldern eingegeben werden sollen (auch bei Neuanlage). Wie kriege ich aber eine Combobox "gebaut", die als DisplayMember einen CONCAT-Wert über 5 Spalten + Leerzeichen dazwischen hat?

    shaebich schrieb:

    Also überleg dir eine passende Struktur für deine Datenbank, werfe hier ein Bildchen rein und man kann es korrigieren. Aber so wie sich es hier anhört, ist dies ein richtiges Projekt, also mach dir richtige Gedanken, sonst wirst du später probleme bekommen.

    Werd mal schauen, dass ich morgen mal ein ERM dazu baue.
    Ja das ist ein richtiges Projekt. Mein Problem ist grad hauptsächlich die "neue" Welt von .NET kennenzulernen. Bin gelernter Fachinformatiker - Anwendungsentw. (Jahrgang 2003) und habe seit der Ausbildung kein VB mehr gesehen. Bin die letzten Jahre mehr mit PHP unterwegs gewesen und seit 2 Jahren hauptberuflich IT-Projektleiter.

    nauralos schrieb:

    Wie kriege ich aber eine Combobox "gebaut", die als DisplayMember einen CONCAT-Wert über 5 Spalten + Leerzeichen dazwischen hat?


    Man könnte doch eine einfache SELECT Abfrage schreiben, in der der Id und die 5 Spalten zusammengefügt als Alias ausgegeben werden z. B.

    SQL-Abfrage

    1. SELECT Id, Teil1 & ' ' & Teil2 & ' ' & Teil3 & ' ' & Teil4 & ' ' & Teil5 AS Teilenummer FROM Artikel

    Und dann könntest du dieses Alias als Displaymember verwenden.

    nauralos schrieb:

    Sobald ich Visible=False mache funktioniert das garnicht mehr.


    So wie ich das verstehe, hast du einfach ein DataGridView in dem die Dinge eingetragen werden. Korrekt?

    Falls ja könntest du versuchen die Spalte auf ReadOnly zu stellen und kurz vor dem Befüllen wieder deaktivieren und mit dem Wert der Radiobox zu füllen.

    Aber ich verstehe deinen Beitrag auch irgendwie nicht.
    Du trotzt jedem gesetz der Datenbänkerei...Trenne GUI von Datenbank etc.
    Ich habe ein DataGridView und daneben ein DetailView in einer Form mit zwei Panels. So wie in "Film IV - DetailView" von die vier Views auf Video

    shaebich schrieb:

    Aber ich verstehe deinen Beitrag auch irgendwie nicht.
    Du trotzt jedem gesetz der Datenbänkerei...Trenne GUI von Datenbank etc.


    Ich will sicherstellen, dass in der Spalte "x" entweder "abc" oder "def" steht und nicht den Anwender irgendwelche 3 Buchstaben eingeben lassen.

    Deine Anmerkung mit den Gesetzen der "Datenbänkerei" verstehe ich nicht. Kannst du das bitte genauer erläutern?!
    Guggemol die vier Views auf Video ganz genau an und gib uns dann eine ganz genaue Beschreibung von deinem Problem und wo es klemmt.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.