Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Anregungen zum Versand

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Anregungen zum Versand

    Hey PHPler, ich stehe zur Zeit vor der folgenden Situation:

    Ich entwickle an einem Shop der verschiedene Versandpartner hat (Post, DHL, DPD, UPS und Spedition). Jeder Versender hat unterschiedliche Preis / bzw. Gewichtsklassen.

    Die Abfrage pro Artikel funktioniert einwandfrei, ich bekomme nur bei mehreren Artikeln / Versendern ein Problem. z.B. ein Kunde bestellt:

    2 X Testartikel je 5 KG (Summe 10 KG)
    3 X Musterartikel je 12 KG (Summe 36 KG)
    5 X Bespielartikel (je 0,3 KG) (Summe 1,5 KG)

    In dem Land soll die Ware wenn möglich per Post versendet werden (z.b. 4 € je paket) pro Paket sind max. 30 KG möglich.

    Gibt es eine Logik die Ware optimal zu verteilen (2 Pakete)?

    Paket 1: 2 X 12 KG + 5 X 0,3 (25,5 KG)
    Paket 2: 1 X 12 KG + 2 X 5 KG (22 KG)

    Vielen Dank im voraus
    Gruß Werner
    Mein kleines Projekt: Fussball Satrup
    Wird ein OpenSource CMS für Fussballvereine


  • #2
    Normalerweise wird ein anderer Versandpartner gewählt, wenn die Gewichtslimit überschritten wird, denn was machst du, wenn der Kunde einen einzigen Posten bestellt, der von sich aus schon schwerer ist.
    Um deinen Ansatz zu verwirklichen würde ich die Artikel nacheinander packen. Du fängst mit dem schwersten an und guckst dann, ob das nächst schwerere noch hineinpasst. Wenn nicht, dann das danach usw. bis das Paket voll ist.
    Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

    Kommentar


    • #3
      Hey Manko,

      dafür habe ich weitere Versender und Abfragen. Sollte ein Gewicht > 31 KG und < 70 KG sein wird automatisch der Versender UPS bzw. DPD genommen. Sollte der Artikel > 70 KG oder ein bestimmtes Gurtmaß überschreiten wird der Artikel per Spedition versendet.

      Das "einizige" Problem welches sich mir "zur Zeit" eröffnet ist das packen, hier nochmal ein Beispiel:

      2 X Artikel A (je 20 KG)
      2 X Artikel B (je 10 KG)

      Ich als Mensch erkenne sofort 2 Pakete â 30 KG (1 X 20 & 1 X 10 KG)
      PHP in der for schleife macht mir 3 Pakete

      Paket 1 : 1 X 20 KG
      Paket 2 : 1 X 20 KG
      Paket 3 : 2 X 10 KG

      Das ist nicht befriedigend
      Gruß Werner
      Mein kleines Projekt: Fussball Satrup
      Wird ein OpenSource CMS für Fussballvereine

      Kommentar


      • #4
        Dann ist deine Abfrage falsch... probiers mal mit "kleiner gleich" anstatt nur "kleiner" (du sagtest, dein Limit liegt bei 30kg - also sollte "exakt 30kg" noch durchgehen)
        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

        Kommentar


        • #5
          Ich würd das wie von Manko vorgeschlagen machen, einfach in einer Schleife die Artikel einzeln durchlaufen (nach dem schwersten Artikel sortiert) und dann die Pakete schnürren.

          PHP-Code:
          $test = array(5,5);
          $muster = array(12,12,12);
          $example = array(0.3,0.3,0.3,0.3,0.3);
          $all array_merge($test$muster$example);
          rsort($all);
          $packages = array();
          $max 30;
          foreach (
          $all as $weight) {
            for (
          $i 0$i count($packages); ++$i) {
              if (
          array_sum($packages[$i]) + $weight <= $max) {
                
          // Paket noch nicht voll, Gewicht zuordnen und nächsten Artikel behandeln
                
          $packages[$i][] = $weight;
                continue 
          2;
              } elseif (
          $weight $max) {
                
          // zuviel Gewicht (Spedition!)
                
          die("oops");
              } else {
                
          // nächstes Paket versuchen
                
          continue;
              }
            }
            
          // kein Paket frei, neues erstellen
            
          $packages[] = array($weight);
          }
          echo 
          "<pre>"print_r($packagestrue), "</pre>";
          exit; 
          "Mein Name ist Lohse, ich kaufe hier ein."

          Kommentar


          • #6
            da habe ich zu lange an meiner Antwort geschrieben und der nächste Beitrag war schon da

            hmm, die abfrage ist nicht falsch da ich kleine gleich 31 abfrage. Das Problem ist (glaube ich) die Tiefe der Vergleiche, ich wollte hier nur kein komplexeres Beispiel aufführen:

            A = 2 X 25 KG (50 KG)
            B = 2 X 15 KG (30 KG)
            C = 2 X 10 KG (20 KG)
            D = 4 X 7,5 KG (30 KG)
            E = 5 X 5 KG (25 KG)
            F = 6 X 2,5 KG (15 KG)
            G = 7 X 2 KG (14 KG)
            H = 2 X 0,6 KG (1,2 KG)

            Summe: 185,2 KG

            Ich frage mich wie will man diese Artikel prüfen / durchlaufen lassen um eine optimales Packverhältnis zu erreichen.
            Gruß Werner
            Mein kleines Projekt: Fussball Satrup
            Wird ein OpenSource CMS für Fussballvereine

            Kommentar


            • #7
              Schau dir mal das sogenannte „Rucksackproblem“ an. Ich denke, das ist das, was du suchst.
              Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

              Kommentar


              • #8
                ok

                Danke @Chriz, mit Deinem Beispiel habe ich das Problem lösen können
                Gruß Werner
                Mein kleines Projekt: Fussball Satrup
                Wird ein OpenSource CMS für Fussballvereine

                Kommentar


                • #9
                  Zitat von woskamp Beitrag anzeigen
                  Gibt es eine Logik die Ware optimal zu verteilen (2 Pakete)?
                  Die steht im Lager und nennt sich Lagerarbeiter. Nur anhand des Gewichtes bestimmen zu wollen was in ein Paket passt halte ich für pure Illusion. Das mag in wenigen Branchen funktionieren, aber wohl eher nicht bei:
                  PHP-Code:
                  2 X 25 KG (50 KG)
                  2 X 15 KG (30 KG)
                  2 X 10 KG (20 KG)
                  4 X 7,5 KG (30 KG)
                  5 X 5 KG (25 KG)
                  6 X 2,5 KG (15 KG)
                  7 X 2 KG (14 KG)
                  2 X 0,6 KG (1,2 KG
                  Je nach Anfordernung würde ichs ganz einfach machen
                  PHP-Code:
                  CEIL($gewicht/31*) = colis

                  *oder zur Sicherheit 25kg 
                  oder es sein lassen. Um das so zu realisieren das es die Praxis abildet, müsste man die Maße kenne, dazu die im Lager verwendenten Kartongrößen und dann den PC Tetris spielen lassen. Sonderfälle mal ganz außen vorgelassen. Viel Spaß.

                  Kommentar


                  • #10
                    Hey @erc,

                    ich habe es vernünftig lösen können. Es geht dabei nicht um die korrekten Gurtmaße, und der Lagerarbeiter ruft bestimmt nicht den Kunden an. Davon mal abgesehen soll ja schon vorher

                    1. dem Kunden mitgeteilt werden wie teuer der Versand ist
                    2. wie viele Pakete er erwarten darf

                    Der Code von Chriz geht in die Richtung welche ich nun nutze und bisher funktioniert es einwandfrei (ca. 200 Artikel getestet, fehlen noch ein par tausend ...)

                    Gruß Werner
                    Gruß Werner
                    Mein kleines Projekt: Fussball Satrup
                    Wird ein OpenSource CMS für Fussballvereine

                    Kommentar


                    • #11
                      Trotzdem ist das Argument absolut richtig, dass sowohl Packmaße als auch Gewicht

                      - preisbestimmend
                      - Karton-bestimmend sind.

                      Nur das Gewicht kalkulieren ist Quark. Erst recht auf den Cent genau. IMHO hat eine ordentliche Firma auch bestimmte Pauschalversandkosten / Gewichtsklasse.
                      Bspw. werden Waren in ein Schema S M L XL eingeordnet. XL könnte dabei eine Schrankwand sein, L besonders sperrige und/oder aber sehr schwere (Paketversand-fähige) Waren. Je nach Warenschema setze ich eine Menge an, die in ein Standardpaket passt und rechne den Preis für die benötigten Pakete ab. Habe ich Pakete gespart, spare ich Versandkosten, anderenfalls zahle ich drauf. Nach etwas Erfahrung korrigiere ich die Werte nach und alle sind glücklich. Bei ausreichender Gewinnspanne setze ich noch einen Versandfrei-Betrag fest.
                      --

                      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                      Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                      --

                      Kommentar


                      • #12
                        Ich würde hier auch eine Mischkalkulation festsetzen. Wie nikosch schon schrieb, sind dabei die Waren in Gewichtsklassen einzuordnen und dann zahle ich evtl. bei der einen oder anderen Sendung an Porto obendrauf, aber dafür spare ich bei anderen wiederum, was letztendlich im Idealfall auf +/- 0 oder gar einen gewissen Gewinnbetrag herauskommt.
                        Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

                        Kommentar

                        Lädt...
                        X