Announcement

Collapse
No announcement yet.

Palettenverfolgung mit Access2016/Excel/SQL

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Palettenverfolgung mit Access2016/Excel/SQL

    Hallo,
    ich möchte softwaretechnisch für Schulungszwecke ein kleines virtuelles Palettenlager und zugehöriger Fördertechnik projektieren und
    habe Probleme für eine einzulagernde Palette auf dem IPunkt ein freies Lagerfach zu ermitteln.
    Ablauf: Die Paletten gelangen über einen IPunkt ins System, werden dabei verzielt, werden dann weiter über 2 Staubahnen SB1 und SB2
    zum Regalbediengerät RBG gefördert und ins Zielfach eingelagert. Es gibt in Access 2 Tabellen:
    1.) tabPaletten - mit den Datensätzen für z.B. 100 Paletten (Primärschlüssel ist 'pID' )
    2.) tabTopologie - mit den Datensätzen für z.B. 250 Topologie-Elemente (Lagerplätze, Staubahnen, Fahrzeuge usw. ist 'tID')
    Wichtig: Einige Topologie-Elemente (auch Lagerplätze) haben mehrere Stellplätze (z.B. bei Lagerkanälen)
    Diese Tabellen werden einmal angelegt und werden dann inhaltlich nicht mehr verändert. Beide Tabellen sollen
    - so will ich das - keine direkte Beziehung zueinander haben
    Für die Abbildung der Palettentransporte und Palettenaufenthaltsorte gibt es eine 3. Tabelle 'tabPalPos' als Relationstabelle.
    zwischen 'tabPaletten' und 'tabTopologie'. Also ganz klassisch.
    Beim Systemeintritt der Palette am IPunkt wird ein freier Lagerplatz ermittelt, z.B.: 02.05.04.
    Es erfolgt jetzt die 'Beobachtung' der Palette in der Topologie einzig mittels Tabelle 'tabPalPos'
    tabPalPos hat dieses Satzformat: ..................................ppID .............ppPalettenNr ...........ppAufenthaltsort .........ppZielort.
    INSERT bei Systemeintritt, z.B.: ......................................667788 .........2711 .......................'IPunkt' .........................'02.05.04'
    UPDATE bei Lastwechsel, z.B. auf Staubahn2 ...............667788 .........2711 ........................'Stau2' .........................'02.05.04'
    UPDATE bei Beschicken des Zielplatzes ........................667788 .........2711 ........................'02.05.04'................ .... '02.05.04'
    UPDATE evtl. Umlagern von 02.05.04 nach 01.02.01 ....667788 ..........2711 .......................'02.05.02' .....................'01.02.01'
    UPDATE beim Start Auslagern nach AB1 .......................667788 .........2711 .......................'02.05.04' .....................'AB1'
    UPDATE beim Lastwechsel auf RBG ..............................667788 .........2711 .......................'RBG' ...........................'AB1'
    UPDATE bei Ankunft auf Auslagerbahn1 ........................667788 .........2711 .......................'AB1' ............................'AB1'
    UPDATE beim Umlagern von 02.05.04 nach 01.02.01.. .667788 .........2711 .......................'02.05.02' ....................'01.02.01'
    DELETE bei Entnahme der Palette von AB1 (über ppPalettenNr)
    Für die Zielfindung muss ich einen freien Lagerplatz ermitteln. Ein freier Lagerplatz darf weder unter ppAufenthaltsort
    noch unter ppZielort eingetragen sein. Auch muss berücksichtigt werden, dass ein Lagerplatz/Lagerkanal ggf. mehrere Paletten
    aufnehmen kann. Das macht mir Probleme bei der Entwicklung eines treffenden SELECTs, der alles berücksichtigt.
    Die SELECT-Treffermenge z.B. über Excel/VBA nachzuarbeiten ist kein Problem, aber das möchte ich nicht.
    Seht Ihr eine Möglichkeit, die Zielermittlung (freier Lagerplatz) direkt mit einem SELECT hinzubekommen?
    Gruß
    Uwe42

  • #2
    SQL arbeitet Mengen orientiert. Daten die nicht definiert sind, können maximal indirekt ermittelt werden.

    Wenn Deine Topologietabelle benannte Elemente beinhaltet, die Du in der Relationstabelle unter ppAufenthaltsort, ppZielort verwendest, ist es möglich. Es müssen alle verwendbaren Orte irgendwo aufgeführt werden. Dann kann man diese (definierten) Orte nehmen und die benutzten davon abziehen.
    Gleiches Muster gilt für die Location im Ort, da habe ich anhand der Beschreibung nicht gesehen, wie solche Locations definiert sein sollen.

    Comment


    • #3
      Vielen Dank für Deine schnelle Antwort.
      Ich möchte aber nicht, dass Du viel Zeit in die Lösung meines Problems steckst.

      Meine Topologietabelle 'tabTopologie' hat diese Struktur (mit einigen Beispielsätzen)
      tID.........tObjekt..........tMaxPaletten......... .....tFahrwegKonstante............tMaxGewicht ................ tMaxHoehe
      6028 01.01.04...........3.............................. ....15....................................860..... ..............................1800
      6029 01.01.05...........1.............................. ....16....................................800..... ..............................1700
      6174......Stau1................10................. ...............0.................................. ....0.......................................0
      6180......RBG..................1.................. ................0................................. .....0...................................... 0

      Meine Relationstabelle 'tabPalPos' hat diese Struktur (mit einigen Beispielsätzen)
      ppID.......ppPalettenNr..........ppAufenthaltsort. ..........ppPalettenziel
      546............1404.....................IPunkt.... .......................01.01.04
      547............1300.....................01.01.05.. .....................AB1
      548............1305.....................Stau2..... .......................01.01.06

      Die Menge der Lagerkanäle wird über tObjekt LIKE '%__.%' gebildet, damit bleiben andere Objekte wie Stau1, RBG und
      andere Objekte für die Zielermittlung unberücksichtigt.
      Die Menge der belegten Lagerplätze lässt sich über ppAufenthaltsort und ppPalettenziel ermitteln.
      Für die Zielermittlung brauche ich aber das Gegenteil, die !!Ausschlussmenge!!
      .......................tObjekt --- ppAufenthaltsort --- ppPalettenziel in Verbindung mit tMaxPaletten.

      Ich habe so meine Probleme, wenn ich z.B. beginne mit .....:
      SELECT COUNT (ppPalettenziel) AS Paletten, tObjekt, ppAufenthaltsort, ppPalettenziel, tMaxPaletten, tFW_Konst,
      ................................. tMaxGewicht, tMaxHöhe, (tMaxPaletten-Paletten) AS FreiePlätze

      und fortsetze mit ......
      ...... WHERE
      ............tObjekt LIKE '%__.%'
      ...............AND ......
      ...............AND.......
      ..... GROUP BY tMaxPaletten, tObjekt, ............,ppPalettenziel
      ......HAVING COUNT (ppPalettenziel) < tMaxPaletten
      .....ORDER BY .......

      Ich erhalte u.a. auch solche 'freien' Ziele, die aber gem. 'ppAufenthaltsort' als belegt gelten müssten.
      Vielleicht sollte ich über Tabellenabfrageerstellungen nachdenken, um schrittweise zur Lösung zu kommen.
      Problem hierbei: Über ADO funktioniert der SELECT ... INTO nicht, wenn die Treffermenge aus mehreren Tabellen gebildet wird.
      Wenn alle Stricke reißen, werde ich die SELECT-Treffermenge doch noch mit VBA optimieren.
      Falls Du noch einen einfachen Vorschlag hast, ich würde mich freuen.
      uwe42

      Comment


      • #4
        Dein SQL Fragment ist jetzt nicht wirklich eindeutig, also mit wenig Zeit:
        Das Group by ist sehr kleinteilig, die gezählte Anzahl bezieht sich - man kann es durch die ..... nicht ansatzweise erkennen - auf 8 plus x Felder. Mit Count, Group by über 8 Spalten erhälst Du die Anzahl der eindeutigen Kombinatioen aus 8 Feldern.
        Die Abwesenheit der Join Clause lässt natürlich auch kein Rückschluss auf die Datenmenge zu, obwohl Du ja anschaulicher Weise ein paar Daten angibst.

        Comment


        • #5
          Noch ein Tipp:
          Nimm einfach das Kernstatement (ohne Verrechnung) und ohne Having clause und lass es "lose" laufen.
          Lass Dich überraschen, was rauskommt und versuch es zu verstehen.
          Wenn Du es soweit hast, dass nachzählbar richtige Werte kommen, nimm das having wieder rein.
          usw.

          Klar kann man -wenn alle Stricke reißen- auf client code schwenken. Aber das ist niemals schneller, wartungsaufwändiger usw. .
          Gerade wenn es ein Schulungsprojekt ist, sollte es ja vorbildlich umgesetzt sein oder?

          Comment


          • #6
            Du hast recht.
            Die vorbildliche Umsetzung muss Ziel sein.
            Ich bin optimistisch und arbeite noch daran. Vielleicht wird das SQL-Statement komplizierter als ich zunächst dachte.
            Jedenfalls vielen Dank für Deine Informationen.
            uwe42

            Comment


            • #7
              Ach und noch eine Sache zum Kontext "Schulung".
              Gibt es etwas, das für Access spricht, außer man ist Access Verkäufer?

              Wie wär's mit Libre Office, einer echten Opensource DB usw?
              Zumindest SQL ist bei Access relativ weit weg vom Standard.

              @kompliziert:
              Divide And Conquer

              Comment


              • #8
                Zum Kontext "Schulung" auf Basis Excel/Access.
                Unsere Studierenden an der Berufsakademie durchlaufen bei Ihren Betrieben eine Duale Ausbildung.
                Der theoretische Teil (also 50% des Studiums) erfolgt an unserer Berufsakademie.
                Die Studierenden und ihre Betrieb sind auf MS-Office fixiert und auch darin geschult.
                Libre Office scheidet somit leider aus.
                Wir haben bislang unsere Themen in Access / Excel / SQL / VBA modelliert und realisiert und
                haben das Teile-und-herrsche-Verfahren in SQL/VBA programmiert,
                z.B. für Einlagern einer Palette in dieser Vorgehensweise::
                -1.) bilde das Gesamtangebot aller Topologie-Objekte
                -2.) reduziere das Angebot um die Objekte, die keine Lagerplätze/Lagerkanäle sind
                -3.) reduziere das Angebot um die Plätze/Kanäle, die gesperrt sind
                -4.) reduziere das Angebot um die Plätze/Kanäle, die voll belegt sind
                -5.) reduziere das Angebot um die Plätze/Kanäle, zu denen Paletten in der Fördertechnik bereits
                unterwegs sind und die damit voll belegt würden
                -6.) reduziere das Angebot um die Plätze/Kanäle, die für das Palettengewicht nicht geeignet sind
                -7.) reduziere das Angebot um die Plätze/Kanäle, die für die Palettenhöhe nicht geeignet sind
                -8.) Sortiere das Restangebot nach RBG-Fahrweg
                -9.) Sortiere das Restangebot nach Platzhöhe
                -10.) Sortiere das Restangebot nach Platzbelastbarkeit
                -11.) Ergebnis: Nimm den 1. Datensatz aus dem Restangebot und nimm daraus den Zielplatz
                Bei der Darstellung der Ergebnismenge jedes Schrittes in jeweils einer eigenen Userform sieht man deutlich,
                wie sich Zielmenge entwickelt. Für Schulungszwecke ganz interessant, benötigt aber Programmieraufwand.
                Ein "tolles" SELECT"-Statement mit vergleichbarer Leistung zu entwickeln, das halte ich nicht mehr für sinnvoll.
                Ich werde versuchen, die Ergebnismenge jedes Schrittes als eigene Tabelle darzustellen und diese dann
                im nächsten Schritt mit einem Folge-SELECT weiter zu verarbeiten.
                (Also Problemlösung mit Tabellenerstellungsabfragen angehen)

                Also nochmals vielen Dank für Deine Infos
                uwe42

                Comment


                • #9
                  Das sieht doch nach einem brauchbaren Vorgehen aus.

                  Das schrittweise Vorgehen lässt sich eigentlich auch sehr schön mit "einfachen" SQL Statements abbilden. Und zwar ähnlich zu den genannten Tabellen mit Zwischenergebnissen. In SQL wären es verschachtelte Select Statements.
                  Das kann man nun in verschiedene Richtungen Treiben.
                  - für jeden Schritt ein neues, umkleidendes SQL Statement (ergibt am Schluss ein verschachteltes SQL Monster)
                  - jedes Statement als View gestalten, sieht in der Nutzung nachher jeweils aus wie eine Tabelle, ist aber dynamisch. (in Access wäre es wahrscheinlich jeweils eine benannte Abfrage)
                  In der Praxis kann man sicher nicht jeden Schritt als eigenen View abbilden, weil Filterkriterien dynamisch bleiben müssen usw., aber separate Zwischenergebnis-Tabellen sind natürlich noch weniger dynamisch.

                  Mit den Views kann man die bis dahin erreichte Abfragekomplexität verstecken und sich auf den nächsten Schritt konzentrieren.
                  Am Ende kann man nach Bedarf zufammenfassen, vereinfachen, optimieren und als neue Lernstufe, logische Schichten bilden:
                  Also Zwischenschritte in Views gießen, die einen einheitlichen Zwischenstand liefern, der kann (muss) dann einheitlich an den entsprechenden Stellen eingesetzt werden, im laufenden Betrieb und Reporting fürs Dashbord zum Beispiel.

                  Was die "Access" Thematik angeht nur kurz: Man kann den Schülern jedenfalls in einer halben Stunde aufzeigen, dass es jenseits von MS auch eine Welt gibt und zwar eine, die sie kostenlos (geradezu grenzenlos) beackern können. Ich kann verstehen, dass man hier Anforderungen der Wirtschaft nachkommt. Hier würde ich mal konstatieren, dass auch die Wirtschaft meist ganz gut ohne Access auskäme, wenn man sich mal drum kümmern würde. Wartung und Support gibt es auch für Opensource Software. Und was wünscht sich ein Unternehmen mehr, als quelloffene Sourcen?
                  MS selbst hat die Zeichen der Zeit erkannt und integriert z.B. Linux direkt in Windows.

                  Comment


                  • #10
                    Du hast sicherlich recht. Aber ich habe bei der Normalisierung meiner DB einen Fehler gemacht,
                    in meiner Relationstabelle 'tabPalPos' habe ich einerseits eine Referenz über die PalettenNr zu den Paletten
                    und andererseits eine Referenz zur Topologie. So weit so gut. Aber die Referenz zur Topologie ist doppelt
                    durch die Attribute 'ppAufenthaltsort' und 'ppPalettenziel' und damit redundant.
                    Ich bin kein großer Spezialist für Datenbanken, deshalb ist mir der Fehler zunächst nicht aufgefallen.
                    Aber jetzt weiß ich wie es geht.
                    Hinsichtlich Wahl der Datenbank und des Betriebssystems kann man trefflich diskutieren und Standpunkte vertreten.
                    Aber man muss auch beachten: 'don't touch a running System'; und da sind die Betriebe mit ihren
                    'eingeschwungenen' Systemen gegenüber "Verbesserungsvorschlägen" sehr zurückhaltend.
                    Nochmals vielen Dank
                    uwe42



                    Comment


                    • #11
                      Ja, Normalisierung ist ein großes Thema.

                      Wahl der Datenbank: Es soll nur eine Anregung sein. Und auch wenn der Spruch legendär ist, in der Praxis werden produktive Systeme, genaugenommen ihre Pflege und Weiterentwicklung bis hin zu Technologiewechsel oft sträflich vernachlässigt. Das jungfräuliche, unberührte, laufende System bietet oft ein klägliches Bild in der Realität.

                      Und wo wenn nicht in der Schule: für einen Blick über den Tellerrand findet sich bestimmt etwas Zeit.
                      Und noch ein kleiner Stups:
                      Viele Dinge, die man z.B. von google, amazon, facebook usw. kennt (Technik, nicht Produkte), sind von diesen Firmen erdacht, entwickelt, weiterentwickelt und veröffentlicht worden, open source. Allein das Thema machine learing, KI! Kann man sich alles runterladen und loslegen, zahlt man keinen Cent für, ob als Schule, Lehrer oder Schüler.
                      Ich bin bestimmt kein Fan der genannten Firmen und ihrem Expansionsbestreben und Datenhunger, aber wenn es ums Lernen geht, noch ein Zitat eines der google Gründer, ganz grob: "<an die Schüler und Studenten>, lernt nicht diesen alten Scheiß!"
                      Und es muss nicht von google oder fb kommen, open source software gibt es auch ohne diese Firmen.
                      Man sollte mal ne Sekunde drüber nachdenken: C als Programmiersprache ist die Basis von > tausenden Bibliotheken und unzähligen Softwaren. Diese Sprache ist frei, frei nutzbar, keiner kann sie einem wegnehmen und sie steht für fast jede erdenkliche Plattform zur Verfügung. Natürlich ist sie etwas in die Jahre gekommen. Damit zu arbeiten ist verhältnismäßig mühsam, aber erhellend.
                      Die Sprache Go hat was die Gesamteigenschaften angeht eine große Nähe zu C (jenseits der Technik), obwohl sie erst "ganz frisch" von google erfunden wurde. Sie ist ebenfalls frei verfügbar, uneingeschränkt nutzbar, verfügt trotz der kurzen Zeit am Markt über sehr starke Libs und bietet sehr moderne Features.

                      Wie gesagt, alles nur Vorschläge/Anregung/Option. Mein Sohn hat gerade das Abi hinter sich, auf einer sogenannten MINT Schule. Die Laptops der Schule waren letztes Mal, wo es in Frage stand, gerade bei der Potentialanalyse in der Jahrgangsstufe 8. Damit wurde im Idealfall dann festgestellt, was man diesen Schülern würde beibringen können, wenn die Ressourcen dafür zur Verfügung stehen würden.

                      Comment


                      • #12
                        Nun, mein SELECT-Problem mit dem Betrieb der Datenbank über SQL ist gelöst.

                        Aber zu dem Themenfeld, das Dich bewegt und zu dem Du Beurteilungen abgibst, zu dem habe ich eine völlig andere Sichtweise.
                        Das liegt sicherlich auch daran, wie man beruflich tätig ist und welche Erfahrungen man gesammelt hat.
                        Über C/C++ reden wir nicht, das praktizieren wir (Visual Studio).
                        Ich komme aus der Automatisierungstechnik (Blickrichtung Siemens) mit den Schwerpunkten Steuerungs-, Antriebs, und
                        Regelungstechnik, einschl. Materialfluss-Steuerung und Lagertechnik).

                        Besuche einmal Unternehmen und lass die dort eingesetzten Systeme auf Dich wirken. Überlege dann noch einmal Deine Kritik.
                        Gehe z.B. einmal zu Nobilia, die täglich ca. 2.500 Küchen fertigen.
                        Übrigens Schulen mit MINT-Schwerpunkten erachte ich als zunehmend wichtig. Besonders auch dann, wenn Kooperationen mit
                        Betrieben in Verbindung mit Praktika angestrebt werden. Dann haben Potentialanalysen eine höhere Aussagekraft und ersparen
                        unseren jungen Leuten später manche Fehlstarts in Ausbildung und Studium.
                        Das verlangt natürlich auch der Lehrerschaft Kommunikationsbereitschaft mit der Industrie und dem Handwerk ab.

                        mfg. uwe42

                        Comment


                        • #13
                          Natürlich ist eine Sichtweise subjektiv. Beispiel Küchen:
                          Käufer: Planen, planen, planen, bestellen, warten 3 Monate, bekommen eine Lieferung, die ist unvollständig. Warum 3 Monate warten, warum trotzdem ein fehlerhafte Lieferung?
                          Fertigungsoptimierung: Anfrage eines Küchen-Herstellers zur Optimierung; Status quo: 2 Fußballfeld große Hallen, in denen ein Typ mit dem Bestellzettel im Auto rumfährt und die vorgefertigten Teile einsammelt. Wo was liegt, hat er im Kopf! (Das Beispiel ist allerdings 10 Jahre her)
                          2500 Küchen pro Tag bekommt man so wahrscheinlich nicht hin. Aber gut, in der Branche hat es ja schon kräftige Konsolidierung Ein Fall für KI oder machine learning ist die Küchenfertigung aber sicher auch nicht.

                          "Küche" ist m.E. ein gutes Beispiel dafür, dass es Wirtschaftszweige gibt, die mit ganz unterschiedlichen Heransgehensweisen und Technologien zu ganz unterschiedlichen Ergebnissen kommen. Mit einer Küche bewegt man sich preislich im Bereich von PKW. Wenn ich das vergleiche, zweifele ich daran, ob der Preis einer Küche vergleichsweise zu rechtfertigen ist. So oder so, eine Fertigungsplanung oder Produktionssteuerung kann über weite Strecken ohne MS Produkte auskommen und ohne SAP.

                          Was also in Deiner Perspektive für MS spricht und was gegen Open Source, sehe ich nicht so recht. Ich plädiere lediglich für den Blick nach links und rechts und diesen seinen Schülern mitzugeben. Riesige Möglichkeiten, die jenseits der Branchenriesen existieren, vor allem eben niedrigschwellig, günstige Hardware, kostenlose Software.
                          Siemens ist natürlich ein Standard, den man in der Fertigung beherrschen muss. Aber das spricht nicht gegen Open Source. Heute gibt es halt SPS auch per Raspberry Pi. Und das eine zu beschnuppern, muss ja nicht bedeuten, das andere zu verachten oder zu ignorieren.
                          Und am Ende bedeutet ja z.B. das Lernen einer Open Source Datenbank nicht, dass man nicht mit Access zurecht kommen kann, wenn es mal fällig ist. Die Prinzipien und die "Physik" dahinter sind gleich. MS oder andere machen es bestenfalls umgänglicher.

                          MINT
                          Nichts von dem was hier geschrieben ist, weder Dein Ausgangsproblem noch die Aspekte der folgenden Beiträge finden sich inhaltlich an der MINT Schule, die ich kenne. Und um das mal zuzuspitzen: Eine Schule an der man MS Word lernt, statt Textverarbeitung, eine Schule die per E-Mail Word Dokumente versendet usw. hat eine ganze Menge nicht verstanden.
                          Ich halte es natürlich für sehr wichtig, EDV, Informatik usw. anzubieten. Ob im Rahmen von MINT oder wie auch immer. Es ist aber nach meiner Erfahrung ein hohles Label, mindestens am Gymnasium meines Sohnes oder nehmen wir das Nachbargymnasium, top Hardware, keine Informatiklehrer. Natürlich kann man Informatik auch ohne Rechner unterrichten, aber wir leben in Zeiten in denen es fast nicht mehr günstiger werden kann, jedem Schüler einen Rechner zu bieten. Was also muss noch passieren?

                          So damit lass ich es wohl mal gut sein. Immerhin finde ich es interessant, zumindest auf diesem Weg mal mit einem engagierten Lehrer Kontakt zu haben.

                          Comment

                          Working...
                          X