{"id":55000993,"date":"2015-08-01T00:00:00","date_gmt":"2020-05-22T19:21:53","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=993"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Bestellverwaltung_mit_Versand","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Bestellverwaltung_mit_Versand\/","title":{"rendered":"Bestellverwaltung mit Versand"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg07.met.vgwort.de\/na\/787f06c9739944e78757a4444dae5283\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Zu einer ordentlichen Bestellverwaltung geh&ouml;rt die M&ouml;glichkeit, den Versand der bestellten Artikel vorzubereiten. In diesem Beitrag stellen wir das Grundger&uuml;ste einer einfachen Bestellverwaltung vor, deren Daten wir dann nutzen, um Versendungen &uuml;ber das DHL-Gesch&auml;ftskundenportal vorzubereiten. Dazu m&uuml;ssen wir aus den eingegebenen Bestelldaten die Daten zu einer CSV-Datei zusammenf&uuml;hren, die wir dann an &uuml;ber das Internetportal von DHL einreichen und als Ergebnis die ben&ouml;tigten Versandetiketten erhalten.<\/b><\/p>\n<p>Im Beitrag <b>Versandetiketten mit DHL-IntraShip <\/b>(<b>www.access-im-unternehmen.de\/991<\/b>) erhalten Sie die grundlegenden Informationen &uuml;ber den Einsatz des Gesch&auml;ftskundenportals von DHL, der Beitrag <b>Klasse f&uuml;r DHL-Intraship-CSV-Dateien <\/b>(<b>www.access-im-unternehmen.de\/992<\/b>) liefert eine Bauanleitung f&uuml;r eine Klasse, mit der Sie die f&uuml;r die CSV-Datei ben&ouml;tigten Daten auf einfache Weise eingeben k&ouml;nnen.<\/p>\n<p>Die Informationen dieser beiden Beitr&auml;ge flie&szlig;en in unsere L&ouml;sung ein, wobei wir die Daten aus Tabellen wie <b>tblKunden<\/b>, <b>tblBestellungen<\/b>, <b>tblBestellpositionen <\/b>und <b>tblArtikel <\/b>zusammensuchen.<\/p>\n<h2>Datenmodell<\/h2>\n<p>Das Datenmodell der Beispieldatenbank sieht wie in Bild 1 aus. Die enthaltenen Tabellen weisen lediglich die notwendigsten Felder auf, um Bestellungen aufzunehmen und die f&uuml;r den Versand notwendigen Dateien zusammenzustellen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2015_04\/pic_993_001.png\" alt=\"Datenmodell der Beispielanwendung\" width=\"650\" height=\"319,7581\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Datenmodell der Beispielanwendung<\/span><\/b><\/p>\n<p>Dabei ist die Tabelle <b>tblKunden<\/b>, welche die &uuml;blichen Kundendaten enth&auml;lt, per 1:n-Beziehung mit der Lookuptabelle <b>tblAnreden <\/b>verkn&uuml;pft, welche die verschiedenen Anreden speichert. Auf die Kundentabelle wiederum verweist die Tabelle <b>tblBestellung <\/b>per Fremdschl&uuml;sselfeld. Auf diese Weise wird einer Bestellung der Kunde zugeordnet. Die Tabelle <b>tblArtikel <\/b>speichert ein paar grundlegende Artikeldaten wie den Artikelnamen oder den Einzelpreis. F&uuml;r die Erstellung der Versanddatei ist es wichtig, das Gewicht der einzelnen Artikel zu kennen, daher finden Sie dort auch das Feld <b>Gewicht<\/b>. Schlie&szlig;lich nimmt das Feld <b>Kurzbezeichnung <\/b>eine Abk&uuml;rzung f&uuml;r den Artikelnamen auf. Wozu wir dies ben&ouml;tigten, erfahren Sie weiter unten.<\/p>\n<p>Die Bestellungen und die Artikel f&uuml;hrt die Tabelle <b>tblBestellpositionen <\/b>zusammen. Sie ordnet die einzelnen Artikel aus der Tabelle <b>tblArtikel<\/b> den Bestellungen zu. Dabei sollen der aktuelle Preis und das aktuelle Gewicht des Artikels in zwei entsprechenden Feldern dieser Tabelle gespeichert werden. Damit sichern wir die zum Zeitpunkt der Bestellung g&uuml;ltigen Daten, falls sich Preis oder Gewicht eines Artikels einmal &auml;ndern sollten.<\/p>\n<p>Die Tabelle <b>tblBestellpositionen <\/b>nimmt aber auch noch ein Feld namens <b>Versanddatum <\/b>auf, welches bei Erstellung des Versandetiketts mit dem entsprechenden Datum gef&uuml;llt wird. Auf diese Weise erkennen wir, dass ein Artikel bereits versendet wurde. Schlie&szlig;lich finden Sie in dieser Tabelle das Feld <b>Sendungsverfolgung<\/b>. Wenn wir schon mit DHL-Paketen arbeiten, die sich ja online verfolgen lassen, wollen wir auch die dazugeh&ouml;rige Trackingnummer in der Tabelle speichern. Diese erhalten wir bei der Verwendung der nachfolgenden Technik zwar nur auf einem kleinen Umweg, aber immer noch schneller, als wenn wir diese von Hand eintragen.<\/p>\n<h2>Formulare der L&ouml;sung<\/h2>\n<p>Das erste Formular hei&szlig;t <b>frmBestellungsdetails <\/b>und soll die einfache Eingabe von Bestellungen erm&ouml;glichen (s. Bild 2). Dazu geben Sie das Bestelldatum im Feld <b>Bestelldatum <\/b>ein und w&auml;hlen einen der bereits angelegten Kunden aus dem Kombinationsfeld <b>cboKundeID <\/b>aus. Gegebenenfalls handelt es sich um einen neuen Kunden &#8211; diesen k&ouml;nnen Sie dann &uuml;ber einen Klick auf die Schaltfl&auml;che mit den drei Punkten neben dem Kombinationsfeld in einem weiteren Formular hinzuf&uuml;gen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2015_04\/pic_993_002.png\" alt=\"Das Formular frmBestellungsdetails in der Formularansicht\" width=\"550\" height=\"290,1342\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Das Formular frmBestellungsdetails in der Formularansicht<\/span><\/b><\/p>\n<p>Mit dieser Schaltfl&auml;che k&ouml;nnen Sie das gleiche Formular nach der Auswahl eines Kunden &ouml;ffnen, um dessen Kundendaten zu bearbeiten (s. Bild 3).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2015_04\/pic_993_003.png\" alt=\"Bearbeiten der Kundendetails\" width=\"550\" height=\"309,9371\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Bearbeiten der Kundendetails<\/span><\/b><\/p>\n<p>Unten finden Sie ein Unterformular in der Datenblattansicht vor, mit dem Sie die Bestellpositionen zu der aktuellen Bestellung hinzuf&uuml;gen k&ouml;nnen. Dazu w&auml;hlen Sie den gew&uuml;nschten Artikel mit dem Kombinationsfeld aus.<\/p>\n<p>Dadurch stellt das Unterformular automatisch die Inhalte der Felder <b>Einzelpreis <\/b>und <b>Gewicht <\/b>auf die in der zugrunde liegenden Tabelle <b>tblArtikel <\/b>ein und legt f&uuml;r das Feld <b>Menge<\/b> den Standardwert <b>1 <\/b>fest. Ein Klick auf die Schaltfl&auml;che <b>cmdVersandVorbereiten <\/b>soll schlie&szlig;lich die CSV-Datei genau f&uuml;r diese eine Bestellung anlegen.<\/p>\n<p>Das zweite Formular namens <b>frmBestellungsdetails_Versand <\/b>ist etwas anders aufgebaut (s. Bild 4). Es soll zun&auml;chst alle Bestellpositionen, deren Gewicht gr&ouml;&szlig;er als 0 ist, anzeigen &#8211; egal, ob diese bereits versendet wurden oder nicht. Oben bietet eine Optionsgruppe die M&ouml;glichkeit, alternativ alle Bestellpositionen anzuzeigen, die bereits versendet wurden, oder diejenigen, die noch nicht versendet wurden.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2015_04\/pic_993_004.png\" alt=\"Das Formular frmBestellungsdetails_Versand in der Formularansicht\" width=\"700\" height=\"253,5171\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Das Formular frmBestellungsdetails_Versand in der Formularansicht<\/span><\/b><\/p>\n<p>Auch hier gibt es eine Schaltfl&auml;che namens <b>cmdVersandVorbereiten<\/b>. Diese ber&uuml;cksichtigt aber direkt alle noch offenen Bestellpositionen, also diejenigen, deren Feld Versanddatum noch leer ist.<\/p>\n<h2>Formular frmBestellungsdetails erstellen<\/h2>\n<p>Das Formular <b>frmBestellungsdetails <\/b>sieht im Entwurf wie in Bild 5 aus. Es verwendet die Tabelle <b>tblBestellungen <\/b>als Datenherkunft. Das Kombinationsfeld <b>cboKun-deID <\/b>bezieht seine Daten aus der folgenden Abfrage:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2015_04\/pic_993_005.png\" alt=\"Das Formular frmBestellungsdetails in der Entwurfsansicht\" width=\"422,5\" height=\"290,5136\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Das Formular frmBestellungsdetails in der Entwurfsansicht<\/span><\/b><\/p>\n<pre>SELECT [KundeID], [Firma] FROM tblKunden;<\/pre>\n<p>Wenn der Benutzer auf die Schaltfl&auml;che <b>cmdKundendetails <\/b>klickt, l&ouml;st dies die Prozedur aus Listing 1 aus. Dies &ouml;ffnet das Formular <b>frmKundendetails<\/b>. Wenn f&uuml;r das Kombinationsfeld <b>cboKundeID <\/b>noch kein Eintrag ausgew&auml;hlt wurde, soll das Formular <b>frmKundendetails <\/b>einen neuen, leeren Datensatz anzeigen, anderenfalls den aktuell im Kombinationsfeld ausgew&auml;hlten. Zu diesem Zweck wird der Prim&auml;rschl&uuml;sselwert f&uuml;r diesen Datensatz per &ouml;ffnungsargument an das Formular <b>frmKundendetails <\/b>&uuml;bergeben.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdKundendetails_Click()\r\n     <span style=\"color:blue;\">If <\/span>IsNull(Me!cboKundeID)<span style=\"color:blue;\"> Then<\/span>\r\n         DoCmd.OpenForm \"frmKundendetails\", DataMode:=acFormAdd\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         DoCmd.OpenForm \"frmKundendetails\", DataMode:=acFormEdit, OpenArgs:=Me!cboKundeID\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> frmKundendetails = Forms!frmKundendetails\r\n     <span style=\"color:blue;\">With<\/span> frmKundendetails\r\n         .Modal = <span style=\"color:blue;\">True<\/span>\r\n         .OnUnload = \"[Event Procedure]\"\r\n     End <span style=\"color:blue;\">With<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: &ouml;ffnen des Formulars zum Bearbeiten der Kundendetails oder zum Erstellen eines neuen Kunden<\/span><\/b><\/p>\n<p>In beiden F&auml;llen speichert die Prozedur nun einen Verweis auf das Formular in der Variablen <b>frmKundendetails<\/b>, welches im Kopf des Klassenmoduls des Formulars <b>frmBestellungsdetails <\/b>wie folgt deklariert wurde:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>WithEvents frmKundendetails<span style=\"color:blue;\"> As <\/span>Form<\/pre>\n<p>Dadurch k&ouml;nnen wir in diesem Klassenmodul auch Ereignisprozeduren f&uuml;r dieses Formular implementieren. In diesem Fall m&ouml;chten wir auf das Ereignis <b>Beim Entladen <\/b>reagieren, indem wir den aktuell im Formular <b>frmKundendetails <\/b>angezeigten Datensatz einlesen und im Kombinationsfeld <b>cboKundeID <\/b>ausw&auml;hlen. Dazu stellen wir zun&auml;chst die Eigenschaft <b>OnUnload <\/b>von <b>frmKundendetails <\/b>auf den Wert <b>[Event Procedure] <\/b>ein. Dieses Ereignis programmieren wir dann wie folgt:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>frmKundendetails_Unload(Cancel<span style=\"color:blue;\"> As Integer<\/span>)\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> IsNull(frmKundendetails!KundeID)<span style=\"color:blue;\"> Then<\/span>\r\n         Me!cboKundeID.Requery\r\n         Me!cboKundeID = frmKundendetails!KundeID\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Dies sorgt daf&uuml;r, dass wenn der Benutzer das Formular <b>frmKundendetails <\/b>schlie&szlig;t, vorher noch das Ereignis <b>frmKundendetails_Unload <\/b>im Klassenmodul des Formulars <b>frmBestellungsdetails <\/b>ausgef&uuml;hrt wird und zweierlei erledigt: die Datensatzherkunft des Kombinationsfeldes <b>cboKundeID <\/b>zu aktualisieren und den aktuell im Formular angezeigten Datensatz dort auszuw&auml;hlen.<\/p>\n<h2>Kundendetails bearbeiten<\/h2>\n<p>Damit das Formular <b>frmKundendetails <\/b>gleich beim &ouml;ffnen den richtigen Datensatz anzeigt, legen Sie die folgende Prozedur f&uuml;r das Ereignis <b>Beim &ouml;ffnen <\/b>des Formulars an:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Open(Cancel<span style=\"color:blue;\"> As Integer<\/span>)\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> IsNull(Me.OpenArgs)<span style=\"color:blue;\"> Then<\/span>\r\n         Me.Recordset.FindFirst \"KundeID = \" & Me.OpenArgs\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Diese pr&uuml;ft, ob das &ouml;ffnungsargument einen Wert enth&auml;lt, und stellt das Formular in diesem Fall auf den betroffenen Datensatz ein.<\/p>\n<h2>Versand vorbereiten<\/h2>\n<p>Die Schaltfl&auml;che <b>cmdVersandVorbereiten <\/b>im unteren Bereich l&ouml;st die folgende Prozedur aus:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdVersandVorbereiten_Click()\r\n     <span style=\"color:blue;\">Dim <\/span>strSatz<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strDateiname<span style=\"color:blue;\"> As String<\/span>\r\n     strSatz = SatzErstellen(Me!BestellungID)\r\n     strDateiname = CurrentProject.Path & \"\\DHL_\" _\r\n         & Format(Date, \"yyyymmdd\") & \".csv\"\r\n     Open strDateiname For Output<span style=\"color:blue;\"> As <\/span>#1\r\n     Print #1, strSatz\r\n     Close #1\r\n     <span style=\"color:blue;\">Call<\/span> ShellExecute(Me.hWnd, \"open\", strDateiname, \"\", _\r\n         \"\", SW_NORMAL)\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><!--30percent--><\/p>\n<p>Diese ruft zun&auml;chst die Funktion <b>SatzErstellen <\/b>auf und &uuml;bergibt dabei den Prim&auml;rschl&uuml;sselwert der aktuell angezeigten Bestellung als Parameter. Diese Funktion erstellt die CSV-Datei auf Basis der Daten zu den Bestellpositionen dieser Bestellung und liefert den Inhalt im <b>String<\/b>-Format an die Variable <b>strSatz <\/b>zur&uuml;ck (siehe weiter unten). Die folgende Anweisung stellt einen Dateinamen zusammen, der aus dem Verzeichnis der aktuellen Datenbank, der Zeichenfolge <b>DHL_<\/b>, dem Datum im Format <b>yyyymmdd <\/b>und der Dateiendung <b>.csv <\/b>besteht, also etwa <b>DHL_20150630.csv<\/b>. Dann &ouml;ffnet sie eine neue Textdatei unter diesem Namen, schreibt den Inhalt der Variablen <b>strSatz <\/b>hinein und schlie&szlig;t die Datei wieder. Schlie&szlig;lich &ouml;ffnet die Prozedur die neu erstellte Datei noch mit der daf&uuml;r vorgesehenen Anwendung &#8211; in diesem Fall mit Excel. Das Ergebnis sieht dann beispielsweise wie in Bild 6 aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2015_04\/pic_993_006.png\" alt=\"Frisch erstellte Versanddatei in Excel\" width=\"700\" height=\"237,4449\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Frisch erstellte Versanddatei in Excel<\/span><\/b><\/p>\n<h2>Unterformular<\/h2>\n<p>Damit das Unterformular gleich den Einzelpreis, das Gewicht und die Menge f&uuml;r die Bestellposition einstellt, legen wir f&uuml;r das Ereignis <b>Vor Aktualisierung <\/b>des Kombinationsfeldes <b>cboArtikelID <\/b>noch die folgende Ereignisprozedur an:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cboArtikelID_BeforeUpdate(Cancel<span style=\"color:blue;\"> As Integer<\/span>)\r\n     Me!Einzelpreis = DLookup(\"Einzelpreis\", _\r\n         \"tblArtikel\", \"ArtikelID = \" & Nz(Me!cboArtikelID))\r\n     Me!Gewicht = DLookup(\"Gewicht\", \"tblArtikel\", _\r\n         \"ArtikelID = \" & Nz(Me!cboArtikelID))\r\n     Me!Menge = 1\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Prozedur holt sich die entsprechenden Werte f&uuml;r den gew&auml;hlten Artikel aus der Tabelle <b>tblArtikel<\/b>. Werden diese nun im Rahmen dieser Bestellung angepasst, hat das keine Auswirkungen auf den Originalpreis.<\/p>\n<h2>S&auml;tze f&uuml;r die CSV-Datei erstellen<\/h2>\n<p>Die Prozedur <b>SatzErstellen <\/b>erwartet mit dem Parameter <b>lngBestellungID <\/b>den Prim&auml;rschl&uuml;sselwert der Bestellung, deren Bestellpositionen f&uuml;r die Erstellung der S&auml;tze f&uuml;r eine Verwendung herangezogen werden sollen (s. Listing 2).<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>SatzErstellen(lngBestellungID<span style=\"color:blue;\"> As Long<\/span>)<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>objDPEEMain<span style=\"color:blue;\"> As <\/span>clsDPEEMain\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>rstBestellungEmpfaenger<span style=\"color:blue;\"> As <\/span>DAO.Recordset, rstBestellpositionen<span style=\"color:blue;\"> As <\/span>DAO.Recordset, rstOptionen<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Dim <\/span>curGesamtpreis<span style=\"color:blue;\"> As Currency<\/span>, curGesamtgewicht<span style=\"color:blue;\"> As Currency<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strSendungsreferenz<span style=\"color:blue;\"> As String<\/span>, intTrennung<span style=\"color:blue;\"> As Integer<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">Set<\/span> rstOptionen = db.OpenRecordset(\"SELECT * FROM tblOptionen\", dbOpenDynaset)\r\n     <span style=\"color:blue;\">Set<\/span> rstBestellungEmpfaenger = db.OpenRecordset(\"SELECT * FROM qryBestellungEmpfaenger WHERE BestellungID = \" _\r\n         & lngBestellungID, dbOpenDynaset)\r\n     <span style=\"color:blue;\">Set<\/span> rstBestellpositionen = db.OpenRecordset(\"SELECT * FROM qryBestellpositionenNichtVersendet \" _\r\n         & \"WHERE BestellungID = \" & lngBestellungID & \" AND Gewicht &gt; 0\", dbOpenDynaset)\r\n     strSendungsreferenz = lngBestellungID\r\n     <span style=\"color:blue;\">Do While<\/span> <span style=\"color:blue;\">Not<\/span> rstBestellpositionen.EOF\r\n         <span style=\"color:blue;\">With<\/span> rstBestellpositionen\r\n             curGesamtpreis = curGesamtpreis + !Einzelpreis * !Menge\r\n             curGesamtgewicht = curGesamtgewicht + !Gewicht * !Menge\r\n             strSendungsreferenz = strSendungsreferenz & \" \" & !Kurzbezeichnung\r\n             .Edit\r\n             !Versanddatum = Date\r\n             .Update\r\n             .Move<span style=\"color:blue;\">Next<\/span>\r\n         End <span style=\"color:blue;\">With<\/span>\r\n     <span style=\"color:blue;\">Loop<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> objDPEEMain = <span style=\"color:blue;\">New<\/span> clsDPEEMain\r\n     <span style=\"color:blue;\">With<\/span> objDPEEMain\r\n         .Ordnungsnummer = rstBestellungen!BestellungID\r\n         <span style=\"color:blue;\">With<\/span> .DPEEShipment\r\n             .Produktcode = eDHLPaket\r\n             .Sendungsdatum = Date\r\n             .Gewicht = curGesamtgewicht\r\n             .Sendungsreferenz = strSendungsreferenz\r\n             .Warenwert = curGesamtpreis\r\n             .WarenwertWaehrung = \"EUR\"\r\n             .Teilnahme = \"01\"\r\n         End <span style=\"color:blue;\">With<\/span>\r\n         <span style=\"color:blue;\">With<\/span> .DPEESender\r\n             .Kundennummer = rstOptionen!DHLKundennummer\r\n             .Firmenname1 = rstOptionen!AbsenderFirma\r\n             .Kontaktperson = rstOptionen!AbsenderVorname & rstOptionen!AbsenderNachname\r\n             .Strasse = rstOptionen!AbsenderStrasse\r\n             .Hausnummer = rstOptionen!AbsenderHausnummer\r\n             .PLZ = rstOptionen!AbsenderPLZ\r\n             .Stadt = rstOptionen!AbsenderOrt\r\n             .Laendercode = LaendercodeAusLand(rstOptionen!AbsenderLand)\r\n             .Emailadresse = rstOptionen!AbsenderEMail\r\n             .Telefonnummer = rstOptionen!AbsenderTelefon\r\n         End <span style=\"color:blue;\">With<\/span>\r\n         ...<\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Erstellen der CSV-Datei auf Basis eines Bestelldatensatzes, Teil I<\/span><\/b><\/p>\n<p>Sie greift zun&auml;chst auf &uuml;ber das Recordset <b>rstOptionen <\/b>auf eine Tabelle namens <b>tblOptionen<\/b> zu, welche die Informationen zum Versender enth&auml;lt. Wichtig ist hier vor allem das Feld <b>DHLKundennummer<\/b>, welches Sie mit der von DHL gelieferten Kundennummer f&uuml;llen (s. Bild 7).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2015_04\/pic_993_007.png\" alt=\"Tabelle mit den Absenderdaten\" width=\"422,5\" height=\"335,6704\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Tabelle mit den Absenderdaten<\/span><\/b><\/p>\n<p>Ein weiteres Recordset namens <b>rstBestellungEmpfaenger<\/b> greift auf den Datensatz der Abfrage <b>qryBestellungEmpfaenger <\/b>zu, der dem per Parameter &uuml;bermittelten Prim&auml;rschl&uuml;sselwert entspricht (s. Bild 8).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2015_04\/pic_993_008.png\" alt=\"Abfrage mit den Empf&auml;nderdaten\" width=\"550\" height=\"257,8907\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Abfrage mit den Empf&auml;nderdaten<\/span><\/b><\/p>\n<p>Das dritte Recordset hei&szlig;t <b>rstBestellpositionen <\/b>und greift auf die Abfrage <b>qryBestellpositionenNichtVersendet <\/b>zu. Diese liefert die Daten der Tabelle <b>tblBestellpositionen <\/b>plus das Feld <b>Kurzbezeichnung <\/b>der Tabelle <b>tblArtikel<\/b>, wobei nur solche Datens&auml;tze herangezogen werden, deren Feld <b>Versanddatum<\/b> noch leer ist. Au&szlig;erdem muss der Wert des Feldes <b>Gewicht <\/b>gr&ouml;&szlig;er als <b>0 <\/b>sein (so werden beispielsweise eBooks oder sonstige digitale Artikel nicht ber&uuml;cksichtigt) und die <b>BestellungID <\/b>muss der aktuell bearbeiteten Bestellung entsprechen.<\/p>\n<p>Die Funktion speichert dann zun&auml;chst den Prim&auml;rschl&uuml;sselwert der Bestellung als Sendungsreferenz in der Variablen <b>strSendungsreferenz<\/b>. Anschlie&szlig;end durchl&auml;uft sie alle Datens&auml;tze des Recordsets <b>rstBestellpositionen<\/b>, um den Gesamtpreis und das Gesamtgewicht aller zu versendenden Artikel dieser Bestellung zu ermitteln. Und hier kommt nun auch die Kurzbezeichnung der Artikel zum Tragen: Diese werden n&auml;mlich ebenfalls an die Variable <b>strSendungsreferenz<\/b> angeh&auml;ngt. Wozu das Weil die Sendungsreferenz sp&auml;ter auf dem DHL-Versandetikett ausgedruckt wird. So brauchen Sie nur noch mit den Versandetiketten ins Lager zu gehen und die per Kurzbezeichnung identifizierbaren Artikel zu verpacken.<\/p>\n<p>Au&szlig;erdem stellt die Prozedur innerhalb dieser Schleife den Wert des Feldes <b>Versanddatum <\/b>aller ber&uuml;cksichtigten Datens&auml;tze auf das aktuelle Datum ein.<\/p>\n<p>Nun kommt die Klasse <b>objDPEE<\/b>, die wir im Detail im Beitrag <b>Klasse f&uuml;r DHL-Intraship-CSV-Dateien <\/b>(<b>www.access-im-unternehmen.de\/992<\/b>) beschreiben, ins Spiel. F&uuml;r diese legen wir zun&auml;chst die <b>Ordnungsnummer <\/b>fest, welche dem Prim&auml;rschl&uuml;sselwert der Bestellung entspricht.<\/p>\n<p>Dann folgen die Eigenschaften des untergeordneten Objekts <b>DBPPShipment<\/b>. Dieses nimmt die allgemeinen Informationen zu der Lieferung auf wie den Produktcode, das Sendungsdatum, das Gewicht, die Sendungsreferenz (in unserem Fall die <b>BestellungID <\/b>plus die Kurzbezeichnung der enthaltenen Artikel) und den Warenwert.<\/p>\n<p>Das Unterobjekt <b>DPEESender <\/b>f&uuml;llen wir mit den Daten aus dem Recordset <b>rstOptionen<\/b>. Fehlt noch das Objekt <b>DPEEReceiver<\/b>, dessen Eigenschaften wir mit den Daten f&uuml;r den Empf&auml;nger der Sendung aus dem Recordset <b>rstBestellung-Empfaenger <\/b>f&uuml;llen (s. Listing 3).<\/p>\n<pre>         ...\r\n         <span style=\"color:blue;\">With<\/span> .DPEEReceiver\r\n             .Firmenname = rstBestellungEmpfaenger!Kundenname\r\n             <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> <span style=\"color:blue;\">Len<\/span>(Nz(rstBestellungEmpfaenger!Firma, \"\")) = 0<span style=\"color:blue;\"> Then<\/span>\r\n                 <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(rstBestellungEmpfaenger!Firma) &gt; 30<span style=\"color:blue;\"> Then<\/span>\r\n                     intTrennung = <span style=\"color:blue;\">InStrRev<\/span>(<span style=\"color:blue;\">Left<\/span>(rstBestellungEmpfaenger!Firma, 30), \" \")\r\n                     .Firmenname2 = <span style=\"color:blue;\">Trim<\/span>(<span style=\"color:blue;\">Left<\/span>(rstBestellungEmpfaenger!Firma, intTrennung))\r\n                     .Firmenname3 = <span style=\"color:blue;\">Trim<\/span>(<span style=\"color:blue;\">Mid<\/span>(rstBestellungEmpfaenger!Firma, intTrennung))\r\n                 <span style=\"color:blue;\">Else<\/span>\r\n                     .Firmenname2 = rstBestellungEmpfaenger!Firma\r\n                 <span style=\"color:blue;\">End If<\/span>\r\n             <span style=\"color:blue;\">End If<\/span>\r\n             .Kontaktperson = rstBestellungEmpfaenger!Kundenname\r\n             .Strasse = rstBestellungEmpfaenger!Strasse\r\n             .Hausnummer = rstBestellungEmpfaenger!Hausnummer\r\n             .PLZ = rstBestellungEmpfaenger!PLZ\r\n             .Stadt = rstBestellungEmpfaenger!Ort\r\n             .Land = LaendercodeAusLand(rstBestellungEmpfaenger!Land)\r\n             .Emailadresse = rstBestellungEmpfaenger!EMail\r\n         End <span style=\"color:blue;\">With<\/span>\r\n         <span style=\"color:blue;\">With<\/span> .AddDPEEItem\r\n             .GewichtDesPackstueckesInKg = curGesamtgewicht\r\n             .PackartKollitraeger = ePaket\r\n         End <span style=\"color:blue;\">With<\/span>\r\n         <span style=\"color:blue;\">With<\/span> .AddDPEENotification\r\n             .Emailadresse = \"andre@minhorst.com\"\r\n         End <span style=\"color:blue;\">With<\/span>\r\n         SatzErstellen = .Satz\r\n     End <span style=\"color:blue;\">With<\/span>\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 3: Erstellen der CSV-Datei auf Basis eines Bestelldatensatzes, Teil II<\/span><\/b><\/p>\n<p>Der Kundenname landet auf jeden Fall in der Eigenschaft <b>Firmenname<\/b>. Der Hintergrund ist, dass diese Bezeichnung in der E-Mail f&uuml;r die Versandbest&auml;tigung verwendet wird. Hier wollen wir den Namen des Kunden, nicht den Firmennamen platzieren.<\/p>\n<p>Dann pr&uuml;ft die Funktion, ob das Feld <b>Firma <\/b>einen Wert enth&auml;lt. Falls ja, erfolgt eine weitere Pr&uuml;fung, ob die L&auml;nge  des Firmennamens mehr als 30 Zeichen betr&auml;gt. In diesem Fall ermittelt die Funktion das letzte Leerzeichen vor dem 30. Zeichen und teilt den Firmennamen an dieser Stelle auf. Der erste Teil landet in der Eigenschaft <b>Firmenname2<\/b>, der zweite in <b>Firmenname3<\/b>. Ist der Firmenname nicht l&auml;nger als 30 Zeichen, landet er komplett in <b>Firmenname2<\/b>.<\/p>\n<p>Der Kundenname landet au&szlig;erdem in der Eigenschaft <b>Kontaktperson<\/b>. Bei den &uuml;brigen Zuweisungen ist nur noch die Eigenschaft <b>Land <\/b>interessant. Hier ermitteln wir aus der Bezeichnung des Landes mit der Funktion <b>LaendercodeAusLand <\/b>den L&auml;ndercode f&uuml;r das mit dem Feld <b>Land <\/b>gelieferte Land.<\/p>\n<p>Das n&auml;chste Unterobjekt kann mehrfach hinzuf&uuml;gt werden, in diesem Fall ben&ouml;tigen wir es jedoch nur einmal. Dazu nutzen wir die Funktion <b>AddDPEEItem <\/b>und weisen dem dadurch repr&auml;sentierten Packst&uuml;ck das Gewicht und die Packart zu. Schlie&szlig;lich folgt noch ein Objekt, das wir mit <b>AddDPEENotification <\/b>hinzuf&uuml;gen und das die E-Mail-Adresse f&uuml;r die Benachrichtigung nach dem Erstellen der Ladeliste enth&auml;lt. Schlie&szlig;lich tr&auml;gt die Funktion den Inhalt der Funktion <b>Satz<\/b>, welche die Zeilen f&uuml;r diese Lieferung f&uuml;r die CSV-Datei liefert, als Funktionsergebnis in <b>SatzErstellen <\/b>ein.<\/p>\n<h2>Versand&uuml;bersichtsformular<\/h2>\n<p>Neben dem einfachen Bestellformular haben wir ja noch das &uuml;bersichtsformular, das alle Bestellpositionen anzeigt und die M&ouml;glichkeit bietet, auf einen Mausklick alle Bestellpositionen zum Versand hinzuzuf&uuml;gen, deren Versanddatum noch nicht gef&uuml;llt wurde.<\/p>\n<p>Die durch die Schaltfl&auml;che <b>cmdVersandVorbereiten <\/b>dieses Formulars ausgel&ouml;ste Funktion durchl&auml;uft eine Schleife &uuml;ber ein Recordset, das alle Werte des Feldes <b>BestellungID <\/b>der Abfrage <b>qryBestellpositionenNichtVersendet <\/b>enth&auml;lt, deren <b>Gewicht <\/b>gr&ouml;&szlig;er als <b>0 <\/b>ist (s. Listing 4).<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdVersandVorbereiten_Click()\r\n     <span style=\"color:blue;\">Dim <\/span>strSatz<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strDateiname<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>rst<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">Set<\/span> rst = db.OpenRecordset(\"SELECT DISTINCT BestellungID FROM qryBestellpositionenNichtVersendet \" _\r\n         & \"WHERE Gewicht &gt; 0\", dbOpenDynaset)\r\n     <span style=\"color:blue;\">Do While<\/span> <span style=\"color:blue;\">Not<\/span> rst.EOF\r\n         strSatz = strSatz & SatzErstellen(rst!BestellungID)\r\n         rst.Move<span style=\"color:blue;\">Next<\/span>\r\n     <span style=\"color:blue;\">Loop<\/span>\r\n     strDateiname = CurrentProject.Path & \"\\DHL_\" & Format(Date, \"yyyymmdd\") & \".csv\"\r\n     Open strDateiname For Output<span style=\"color:blue;\"> As <\/span>#1\r\n     Print #1, strSatz\r\n     Close #1\r\n     <span style=\"color:blue;\">Call<\/span> ShellExecute(Me.hWnd, \"open\", strDateiname, \"\", \"\", SW_NORMAL)\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 4: Versandvorbereitung f&uuml;r alle noch offenen Bestellpositionen<\/span><\/b><\/p>\n<p>Innerhalb dieser Schleife ruft sie jeweils die Funktion <b>SatzErstellen <\/b>auf und f&uuml;gt die Ergebnisse in der Variablen <b>strSatz <\/b>zusammen. Diese enth&auml;lt nun aneinandergef&uuml;gt die Zeilen der einzelnen Versendungen f&uuml;r die CSV-Datei, welche sie auch gleich in diese einf&uuml;gt. Anschlie&szlig;end &ouml;ffnet sie die Datei mit der entsprechenden Anwendung.<\/p>\n<h2>CSV-Datei verwenden<\/h2>\n<p>Die so erzeugte CSV-Datei k&ouml;nnen Sie nun wie im Beitrag <b>Versandetiketten mit DHL IntraShip <\/b>(<b>www.access-im-unternehmen.de\/991<\/b>) hochladen und dort die Bestellung der Versandetiketten durch Erstellen der Ladeliste\/Einlieferungsliste ausl&ouml;sen.<\/p>\n<h2>Sendungsverfolgung<\/h2>\n<p>Diese Einlieferungsliste ist das fehlende St&uuml;ck in unserer Puzzlesammlung, denn sie enth&auml;lt sowohl die Sendungsnummern, unter denen wir die Sendungen verfolgen k&ouml;nnen, als auch die in der Sendungsreferenz untergebrachte Kundennummer (s. Bild 9). Nur: Wie k&ouml;nnen wir mit m&ouml;glichst wenig Handarbeit die Sendungsnummern den entsprechenden Bestellpositionen zuweisen<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2015_04\/pic_993_009.png\" alt=\"Einlieferungsliste\" width=\"650\" height=\"316,7273\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 9: Einlieferungsliste<\/span><\/b><\/p>\n<p>Wenn wir den kompletten Inhalt dieses Dokuments in ein Textfeld kopieren, finden Sie f&uuml;r jede Position etwa die folgenden Zeilen:<\/p>\n<pre>Sendungsnr.:\r\n00340433836763669083\r\nKD-Sendungsreferenz:\r\n99003137 AOFF<\/pre>\n<p>Diese k&ouml;nnen wir nun einfach parsen, nachdem wir den Inhalt in das Textfeld eines Formulars namens <b>frmSendungsnummern <\/b>eingetragen haben.<\/p>\n<p>Dies erledigt die Prozedur, die durch die Schaltfl&auml;che <b>cmdZuordnen <\/b>ausgel&ouml;st wird (s. Listing 5). Die Prozedur tr&auml;gt zun&auml;chst den Inhalt des Textfeldes in die Variable <b>strListe <\/b>ein. Dann sucht sie in diesem Ausdruck nach dem ersten Auftreten der Zeile <b>Sendungsnr.: <\/b>und tr&auml;gt die Position der Fundstelle in die Variable <b>lngPosStart <\/b>ein. Sollte dieser Wert danach nicht <b>0 <\/b>sein, was darauf hindeutet, dass es eine solche Zeile gibt, starten wir eine <b>Do While<\/b>-Schleife, die erst beendet wird, wenn <b>lngPosStart <\/b>den Wert <b>0 <\/b>enth&auml;lt.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdZuordnen_Click()\r\n     <span style=\"color:blue;\">Dim <\/span>lngPosStart<span style=\"color:blue;\"> As Long<\/span>, lngPosEnde<span style=\"color:blue;\"> As Long<\/span>, lngBestellungID<span style=\"color:blue;\"> As Long<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strListe<span style=\"color:blue;\"> As String<\/span>, strSendungsnummer<span style=\"color:blue;\"> As String<\/span>, strSendungsreferenz<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     strListe = Me!txtListe\r\n     lngPosStart = <span style=\"color:blue;\">InStr<\/span>(1, strListe, \"Sendungsnr.:\" & <span style=\"color:blue;\">vbCrLf<\/span>)\r\n     <span style=\"color:blue;\">Do While<\/span> <span style=\"color:blue;\">Not<\/span> lngPosStart = 0\r\n         lngPosEnde = <span style=\"color:blue;\">InStr<\/span>(lngPosStart + 14, strListe, <span style=\"color:blue;\">vbCrLf<\/span>)\r\n         strSendungsnummer = <span style=\"color:blue;\">Mid<\/span>(strListe, lngPosStart + 14, lngPosEnde - lngPosStart - 14)\r\n         lngPosStart = <span style=\"color:blue;\">InStr<\/span>(lngPosEnde + 1, strListe, \"KD-Sendungsreferenz:\" & <span style=\"color:blue;\">vbCrLf<\/span>)\r\n         lngPosEnde = <span style=\"color:blue;\">InStr<\/span>(lngPosStart + 22, strListe, <span style=\"color:blue;\">vbCrLf<\/span>)\r\n         strSendungsreferenz = <span style=\"color:blue;\">Mid<\/span>(strListe, lngPosStart + 22, lngPosEnde - lngPosStart - 22)\r\n         lngBestellungID = <span style=\"color:blue;\">Mid<\/span>(strSendungsreferenz, 1, <span style=\"color:blue;\">InStr<\/span>(1, strSendungsreferenz, \" \"))\r\n         <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n         db.Execute \"UPDATE tblBestellpositionen SET Sendungsverfolgung = ''\" & strSendungsnummer & \"'' WHERE \" _\r\n             & \"BestellungID = \" & lngBestellungID & \" AND Gewicht &gt; 0 AND Sendungsverfolgung IS NULL\", dbFailOnError\r\n         lngPosStart = <span style=\"color:blue;\">InStr<\/span>(lngPosStart + 1, strListe, \"Sendungsnr.:\" & <span style=\"color:blue;\">vbCrLf<\/span>)\r\n     <span style=\"color:blue;\">Loop<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 5: Zuweisen der Sendungsnummern zu den Bestellpositionen<\/span><\/b><\/p>\n<p>Hier ermittelt die Prozedur nun das Ende der folgenden Zeile. Die Startposition liefert die zuvor ermittelte Startposition plus der Anzahl der Zeichen der Zeile <b>Sendungsnr.:<\/b>, die Endposition liefert die erste Fundstelle des Zeichens <b>vbCrLf<\/b>, also eines weiteren Zeilenumbruchs. Dazwischen finden wir mit einem Aufruf der <b>Mid<\/b>-Funktion die Sendungsnummer, die wir gleich in <b>strSendungsnummer <\/b>speichern.<\/p>\n<p>Auf die gleiche Weise suchen wir nun nach der Zeile <b>KD-Sendungsreferenz <\/b>und lesen den Wert der folgenden Zeile ein, welcher der Referenz entspricht &#8211; also etwa <b>12345679 AEMA<\/b>. Dieser Wert landet in <b>strSendungsreferenz<\/b>. Daraus ermitteln wir dann den Teil bis zum ersten Leerzeichen, welcher die eigentliche <b>BestellungID <\/b>enth&auml;lt, und speichern diesen Wert in <b>lngBestellungID<\/b>.<\/p>\n<p>Nun k&ouml;nnen wir mit einer <b>UPDATE<\/b>-Methode f&uuml;r die Datens&auml;tze der Tabelle <b>tblBestellpositionen<\/b>, deren Feld <b>BestellungID <\/b>den Wert aus <b>lngBestellung <\/b>enth&auml;lt und deren Gewicht gr&ouml;&szlig;er als <b>0 <\/b>ist, den Inhalt von <b>strSendungsnummer <\/b>in das Feld <b>Sendungsnummer <\/b>eintragen.<\/p>\n<p>Dies wird durch die <b>Do While<\/b>-Schleife so lange wiederholt, bis kein weiterer Ausdruck <b>Sendungsnr.: <\/b>mehr gefunden wird. Auf diese Weise landet die Sendungsnummer in den entsprechenden Datens&auml;tzen und kann f&uuml;r die Verfolgung von Sendungen eingesetzt werden.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>DHL.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{70DE5DD2-65D6-4B7C-8664-16025FC399A4}\/aiu_993.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Zu einer ordentlichen Bestellverwaltung geh&ouml;rt die M&ouml;glichkeit, den Versand der bestellten Artikel vorzubereiten. In diesem Beitrag stellen wir das Grundger&uuml;ste einer einfachen Bestellverwaltung vor, deren Daten wir dann nutzen, um Versendungen &uuml;ber das DHL-Gesch&auml;ftskundenportal vorzubereiten. Dazu m&uuml;ssen wir aus den eingegebenen Bestelldaten die Daten zu einer CSV-Datei zusammenf&uuml;hren, die wir dann an &uuml;ber das Internetportal von DHL einreichen und als Ergebnis die ben&ouml;tigten Versandetiketten erhalten.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662015,66042015,44000027],"tags":[],"class_list":["post-55000993","post","type-post","status-publish","format-standard","hentry","category-662015","category-66042015","category-Loesungen"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Bestellverwaltung mit Versand - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/Bestellverwaltung_mit_Versand\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Bestellverwaltung mit Versand\" \/>\n<meta property=\"og:description\" content=\"Zu einer ordentlichen Bestellverwaltung geh&ouml;rt die M&ouml;glichkeit, den Versand der bestellten Artikel vorzubereiten. In diesem Beitrag stellen wir das Grundger&uuml;ste einer einfachen Bestellverwaltung vor, deren Daten wir dann nutzen, um Versendungen &uuml;ber das DHL-Gesch&auml;ftskundenportal vorzubereiten. Dazu m&uuml;ssen wir aus den eingegebenen Bestelldaten die Daten zu einer CSV-Datei zusammenf&uuml;hren, die wir dann an &uuml;ber das Internetportal von DHL einreichen und als Ergebnis die ben&ouml;tigten Versandetiketten erhalten.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Bestellverwaltung_mit_Versand\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T19:21:53+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg07.met.vgwort.de\/na\/787f06c9739944e78757a4444dae5283\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"17\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Bestellverwaltung_mit_Versand\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Bestellverwaltung_mit_Versand\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Bestellverwaltung mit Versand\",\"datePublished\":\"2020-05-22T19:21:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Bestellverwaltung_mit_Versand\\\/\"},\"wordCount\":2730,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Bestellverwaltung_mit_Versand\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/787f06c9739944e78757a4444dae5283\",\"articleSection\":[\"2015\",\"4\\\/2015\",\"L\u00f6sungen\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Bestellverwaltung_mit_Versand\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Bestellverwaltung_mit_Versand\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Bestellverwaltung_mit_Versand\\\/\",\"name\":\"Bestellverwaltung mit Versand - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Bestellverwaltung_mit_Versand\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Bestellverwaltung_mit_Versand\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/787f06c9739944e78757a4444dae5283\",\"datePublished\":\"2020-05-22T19:21:53+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Bestellverwaltung_mit_Versand\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Bestellverwaltung_mit_Versand\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Bestellverwaltung_mit_Versand\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/787f06c9739944e78757a4444dae5283\",\"contentUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/787f06c9739944e78757a4444dae5283\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Bestellverwaltung_mit_Versand\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Bestellverwaltung mit Versand\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Bestellverwaltung mit Versand - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/Bestellverwaltung_mit_Versand\/","og_locale":"de_DE","og_type":"article","og_title":"Bestellverwaltung mit Versand","og_description":"Zu einer ordentlichen Bestellverwaltung geh&ouml;rt die M&ouml;glichkeit, den Versand der bestellten Artikel vorzubereiten. In diesem Beitrag stellen wir das Grundger&uuml;ste einer einfachen Bestellverwaltung vor, deren Daten wir dann nutzen, um Versendungen &uuml;ber das DHL-Gesch&auml;ftskundenportal vorzubereiten. Dazu m&uuml;ssen wir aus den eingegebenen Bestelldaten die Daten zu einer CSV-Datei zusammenf&uuml;hren, die wir dann an &uuml;ber das Internetportal von DHL einreichen und als Ergebnis die ben&ouml;tigten Versandetiketten erhalten.","og_url":"https:\/\/access-im-unternehmen.de\/Bestellverwaltung_mit_Versand\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T19:21:53+00:00","og_image":[{"url":"http:\/\/vg07.met.vgwort.de\/na\/787f06c9739944e78757a4444dae5283","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"17\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Bestellverwaltung_mit_Versand\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Bestellverwaltung_mit_Versand\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Bestellverwaltung mit Versand","datePublished":"2020-05-22T19:21:53+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Bestellverwaltung_mit_Versand\/"},"wordCount":2730,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Bestellverwaltung_mit_Versand\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/787f06c9739944e78757a4444dae5283","articleSection":["2015","4\/2015","L\u00f6sungen"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Bestellverwaltung_mit_Versand\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Bestellverwaltung_mit_Versand\/","url":"https:\/\/access-im-unternehmen.de\/Bestellverwaltung_mit_Versand\/","name":"Bestellverwaltung mit Versand - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Bestellverwaltung_mit_Versand\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Bestellverwaltung_mit_Versand\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/787f06c9739944e78757a4444dae5283","datePublished":"2020-05-22T19:21:53+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Bestellverwaltung_mit_Versand\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Bestellverwaltung_mit_Versand\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Bestellverwaltung_mit_Versand\/#primaryimage","url":"http:\/\/vg07.met.vgwort.de\/na\/787f06c9739944e78757a4444dae5283","contentUrl":"http:\/\/vg07.met.vgwort.de\/na\/787f06c9739944e78757a4444dae5283"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Bestellverwaltung_mit_Versand\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Bestellverwaltung mit Versand"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000993","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55000993"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000993\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000993"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000993"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000993"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}