erstellen eines Bestellprogrammes - aus Excel wird Vb.Net

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von DerSmurf.

    erstellen eines Bestellprogrammes - aus Excel wird Vb.Net

    Hallo ihr lieben - wiedermal ein Thread von mir :o)
    Ich habe in meinem alten VBA Programm für jede Firma eine Datei zum erstellen von Bestellungen (über 50 Stück).
    Eine solche Bestelldatei hänge ich an. Den Code habe ich leicht geändert, damit die Datei ohne bestehende Ordnerstruktur läuft. Für diejenigen, die sich diese *.xlsm nicht ansehen möchten, hier die Kurzerklärung, was die Datei kann:
    Spoiler anzeigen
    - tabellarische Auflistung aller Artikel - links Artikeldaten (Name, Art.Nr. Bestellmenge, etc) - rechts je eine Spalte für alte Bestellungen mit entsprechender Menge
    -automatische Erkennung von EAN Codes mit Artikelsuche. Also EAN Code einscannen, Artikel wird gefunden
    - export der Bestellung als pdf (in halbwegs hübsch)
    - Mailversand an Firma, bzw. deren Außendienst
    - anzeige von verkauften Artikeln innerhalb eines auswählbaren Zeitraumes
    - Möglichkeit zum speichern einer Bestellung als "Bestand" - also Inventurähnlich


    Dies möchte ich jetzt in Vb.Net nachbauen. Natürlich möchte ich keine 50+ Programme erstellen (ich glaube so ein Mist macht man nur einmal), sondern ein Programm.
    Dann werde ich für jede Firma eine xml anlegen und das angeschlossene DataSet entsprechend füllen.
    Denn das Programm soll unabhängig vom Hauptprogramm (also auf anderen PCs - ohne Hauptprogramm) laufen und es soll möglich sein, dass mehrere Leute gleichzeitig bestellen.
    Deswegen die vielen DataSets.
    Im Hauptpgrogramm werde ich zwei Buttons einbauen - einen zum einfachten Starten, einen zum starten und importieren von Artikeldaten.
    Ich habe mir gedacht, dass ich beim Start über das Hauptrogramm den Lieferanten auswähle und diesen als Parameter übergebe. (Button einfach starten) und
    ich möchte den Lieferanten auswählen und noch den Parameter " Import" übergeben (Button importieren).
    Wenn mein Bestellprogramm den Parameter "Import" empfängt, werde ich einen Datenabgleich zwischen Hauptprogramm und Unterprogramm starten.
    Also Artikelpreise , Ves und dergleichen abgleichen und Artikel hinzufügen, die in der Bestelldatei fehlen.
    Wird das Bestellprogramm ohne Parameter gestartet (also außerhalb des Hauptprogrammes), werde ich den Ordner, welches die DataSets enthält mit einer Schleife durchgehen und entsprechend die Firmen in einer Combobox zur Auswahl anbieten.

    1. Frage:
    Macht mein Vorhaben bis hier her Sinn, oder gibt es etwas dass ihr anders machen würdet?

    2.Frage:
    Wie muss mein Datenmodell aussehen, um zu den Artikeln Bestelldaten (Datumsangaben), sowie Bestandsdaten (Datumsangaben) zu erfassen?
    Neben meiner bereits erstellten DataTable für die Artikel (Name, Art.Nr, Preis, etc.) würde ich eine weitere Table erzeugen, welche die Rows Datum und Bestellung(boolean), Bestand(boolean) enthält. In die ArtikelDataTable kommt dann die Fremdschlüsselspalte mit Verweis auf die neue. Passt das so?

    3. Frage:
    Ich mag den tabellarischen Aufbau meiner jetzigen Bestelldateien.
    Allerdings ist mit vb.net ja viel mehr möglich als mit meinem Excel Programm. Wie würdet ihr das umsetzen (grob)

    Ich habe dann mal meinen Ansatz hochgeladen.
    Das "Hauptprogramm" enthält die relevanten DataTables meines Hauptprogrammes. Natürlich habe ich mir keine Mühe in der Gestaltung gemacht.
    Dateien
    Noch eine Frage (ohne das etwas heruntergeladen werden muss).
    Um meinen Artikelexport / import zu schreiben, muss ich im Hauptprogramm alle Artikel aus meinem DataSet suchen, die zum ausgewählten Lieferanten gehören. Das mache ich so:

    VB.NET-Quellcode

    1. Private Sub BTNOrderWith_Click(sender As Object, e As EventArgs) Handles BTNOrderWith.Click
    2. 'Firma auswählen
    3. LoadSupplier()
    4. If SupplierBindingSource.Current Is Nothing Then Exit Sub
    5. Dim SelectedSupplier = DirectCast(DirectCast(SupplierBindingSource.Current, DataRowView).Row, DtsSettings.SupplierRow)
    6. Dim RelevantRows = DtsSettings.Article.Where(Function(x) x.SupplierID = SelectedSupplier.ID)
    7. 'RelevantRows.writexml("\Programme\Bestellung\TEMP" & SelectedSupplier.Name & ".xml") 'wie in xml schreiben?
    8. 'Bestelldatei starten
    9. Diagnostics.Process.Start(Application.StartupPath & "\Programme\Bestellung\Order.exe", SelectedSupplier.Name & " IMPORT")
    10. End Sub
    11. Private Sub LoadSupplier()
    12. Using SupplierSelect As New frmSupplierSelect()
    13. SupplierSelect.DtsSettings = Me.DtsSettings
    14. SupplierSelect.SupplierBindingSource.DataSource = Me.DtsSettings
    15. SupplierSelect.ShowDialog(Me)
    16. SupplierBindingSource.Position = SupplierSelect.SupplierBindingSource.Position
    17. End Using
    18. End Sub


    Wie exportiere ich denn diese Daten (RelevantRows) in eine xml Datei, damit ich diese in meinem Bestellprogramm laden kann?

    Edit: ich habe es nun wie folgt gelöst. Im Hauptprogramm und im Bestellprogramm habe ich ein DataSet DtsExport hinzugefügt.
    Mit folgendem Code schreibe ich die Daten aus "RelevantRows" in dieses DataSet im Hauptprogramm.

    VB.NET-Quellcode

    1. ​Private Sub BTNOrderWith_Click(sender As Object, e As EventArgs) Handles BTNOrderWith.Click
    2. 'Firma auswählen
    3. LoadSupplier()
    4. If SupplierBindingSource.Current Is Nothing Then Exit Sub
    5. Dim SelectedSupplier = DirectCast(DirectCast(SupplierBindingSource.Current, DataRowView).Row, DtsSettings.SupplierRow)
    6. Dim RelevantRows = DtsSettings.Article.Where(Function(x) x.SupplierID = SelectedSupplier.ID)
    7. Dim newArticle As DtsExport.ArticleRow
    8. For Each row In RelevantRows
    9. newArticle = DtsExport.Article.NewArticleRow
    10. newArticle.ArtNr = row.ArtNr
    11. If Not row.IsEANNull Then newArticle.EAN = row.EAN
    12. newArticle.Name1 = row.Name1
    13. If Not row.IsName2Null Then newArticle.Name2 = row.Name2
    14. newArticle.Ve = row.Ve
    15. newArticle.PurchasingPrice = row.PurchasingPrice
    16. newArticle.Tax = row.Tax
    17. If Not row.IsNoteNull Then newArticle.Note = row.Note
    18. DtsExport.Article.Rows.Add(newArticle)
    19. Next
    20. DtsExport.WriteXml(Application.StartupPath & "\Programme\Bestellung\TEMP" & SelectedSupplier.Name & ".xml")
    21. 'Bestelldatei starten
    22. Diagnostics.Process.Start(Application.StartupPath & "\Programme\Bestellung\Order.exe", SelectedSupplier.Name & " IMPORT")
    23. End Sub

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „DerSmurf“ ()

    So meine lieben. Der Import der Daten ist nun fertig und im Programm drin.
    Ich lade das Projekt nochmal hoch - wenn hier jemand mal drüber gucken könnte, wäre das ein Traum.
    Denn ich hantiere recht viel mit den DataSets rum - es klappt alles - aber keine Ahnung, ob das gut ist, was ich da an Code fabriziert habe.

    Wenn jemand dann noch eine Anregung hat, wie ich das Programm (also das Bestellprogramm) dann aufbauen könnte, wäre ich auch sehr dankbar.
    Dateien
    • Hauptprogramm.zip

      (428,45 kB, 61 mal heruntergeladen, zuletzt: )