Smarty

Features

Mit Hilfe der integrierten Template-Engine Smarty können einfach und flexibel zeichenbasierte Ausgabestrukturen von Datenformaten wie CSV, XML oder JSON an die Bedürfnisse des Kunden angepasst werden. Im Grunde muss lediglich das vorhandene Zielformat in eine Textdatei kopiert und mit den entsprechenden Variablen gefüllt werden. Diese können dabei noch umformatiert werden.
Belegdaten finden sich z.B. in der Smarty-Variable $beleg und werden in gewohnter PHP-Objektschreibweise angesprochen, z.B. $beleg->kundennummer oder $beleg->belegnr. Die Namensgebung gleicht der Benennung von Datenbank-Spaltennamen. Auch ein Zugriff auf komplexere Strukturen ist möglich (je nach Beleg). So kann im Lieferschein auf den zu Grunde liegenden Auftrag zugegriffen werden: $beleg->auftrag->lieferdatum.Verkürztes Beispiel mit fiktivem Format

 {* Beleg-Stammdaten -------------------------------- *}
{$beleg->status}
{$beleg->datum|date_format:'%d.%m.%Y'}
{$beleg->belegnr}
{$beleg->kundennummer}
{$beleg->name}
{* Zugriff auf Daten des zugrundeliegenden Auftrages *}
{$beleg->auftrag->lieferdatum}
{* Weitere Felder entfernt *}

{* Positionen - Beginn ------------------------------ *}
   {* Schleife durchläuft alle verfügbaren Positionen *}
   {foreach from=$beleg->positionen key=keypos item=position}
     {$position->nummer}
     {$position->bezeichnung}
     {$position->beschreibung}
     {$position->menge}
     {$position->preis}
     {* Weitere Felder entfernt *}   
   {/foreach}
{* Positionen - Ende -------------------------------- *}

Datenmanipulation und Strukturen

Formatumwandlung

Datumswerte können nach Anforderung ausgegeben werden:Zahlen können nach Bedarf umformatiert werden. Hier am Beispiel der Spalte "Menge":Grundsätzlich können alle Formate ausgegeben werden, die durch die Funktion sprintf in PHP verfügbar sind.

Anrufen komplexerer Strukturen

ArtikelStammdaten aus Positionen anprechen

Über die Belegpositionen können auch "darunterliegende" Strukturen abgerufen werden, die nicht direkt im Beleg gespeichert sind. Ein Beispiel dafür ist das Gewicht eines Artikels. Dieses kann über {$position->articledata->gewicht} abgerufen werden. So kann, z.B. durch eine Multiplikation mit der Menge der Position und dem Aufaddieren aller Gewichte, auch das Gesamtgewicht aller Artikel eines Beleges berechnet und übertragen werden.
Über $position->articledata können alle Spalten aus der Tabelle artikel angesprichen werden. Dabei sollte immmer beachtet werden ob Informationen aus den Artikel-Stammdaten evtl. in der Auftragsposition beereirts verändert worden sein könnten. Im Zweifelsfall sollte der Wert aus dem Beleg verwendet werden.

Beispiele

Im Folgenden haben wir Ihnen einige Beispiele zusammengefasst, die die Ausgabe verschiedener Lieferscheinformate in den Formaten EDI, CSV und XML ermöglichen. Bitte prüfen Sie bei eigener Anwendung die Spaltenbeschriftungen (CSV), Tagnamen (XML) und EDI-Spezifikationen. Natürlich sind auch weiteere Ausgabeformate (wie z.B. JSON) denkbar.

Beispiel Lieferschein CSV (ausführlich)

Das folgende Beispiel listet ein ausführliches Beispiel für einen Export eines Lieferscheines in verschiedenen Formaten.

Format EDI

- wird ergänzt -

Format CSV

"tracking";"beleg_status";"beleg_datum";"beleg_lieferdatum";"beleg_tatsaechlicheslieferdatum";"beleg_versandart";"beleg_zahlungsweise";"beleg_belegnr";"beleg_hauptbelegnr";"beleg_kundennummer";"beleg_name";"beleg_abteilung";"beleg_unterabteilung";"beleg_adresszusatz";"beleg_ansprechpartner";"beleg_telefon";"beleg_email";"beleg_land";"beleg_strasse";"beleg_plz";"beleg_ort";"beleg_projekt";"beleg_aktion";"beleg_internebemerkung";"beleg_internebezeichnung";"beleg_freitext";"beleg_ihrebestellnummer";"beleg_lieferbedingung";"beleg_art";"artikel_nummer";"artikel_bezeichnung";"artikel_beschreibung";"artikel_menge";"artikel_preis";"artikel_rabatt";"artikel_waehrung";"artikel_lieferdatum";"artikel_sort";"artikel_umsatzsteuer";"artikel_einheit";"artikel_zolltarifnummer";"artikel_herkunftsland";"artikel_artikelnummerkunde";"wunschlieferdatum";"artikel_freifeld1";"artikel_freifeld2";"artikel_freifeld3";"artikel_freifeld40"{foreach from=$beleg->positionen key=keyrow item=position}{* Positionen *}\"{$position->tracking}";\"{$beleg->status}";\"{$beleg->datum|date_format:'%d.%m.%Y'}";\"{$beleg->lieferdatum}";\"{$beleg->tatsaechlicheslieferdatum}";\"{$beleg->versandart}";\"{$beleg->zahlungsweise}";\"{$beleg->belegnr}";\"{$beleg->hauptbelegnr}";\"{$beleg->kundennummer}";\"{$beleg->name}";\"{$beleg->abteilung}";\"{$beleg->unterabteilung}";\"{$beleg->adresszusatz}";\"{$beleg->ansprechpartner}";\"{$beleg->telefon}";\"{$beleg->email}";\"{$beleg->land}";\"{$beleg->strasse}";\"{$beleg->plz}";\"{$beleg->ort}";\"{$beleg->projekt}";\"{$beleg->aktion}";\"{$beleg->internebemerkung}";\"{$beleg->internebezeichnung}";\"{$beleg->freitext}";\"{$beleg->ihrebestellnummer}";\"{$beleg->lieferbedingung}";\"{$beleg->art}";\"{$position->nummer}";\"{$position->bezeichnung}";\"{$position->beschreibung}";\"{$position->menge|string_format:'%.2f'}";\"{$position->preis}";\"{$position->rabatt}";\"{$position->waehrung}";\"{$position->lieferdatum}";\"{$position->sort}";\"{$position->umsatzsteuer}";\"{$position->einheit}";\"{$position->zolltarifnummer}";\"{$position->herkunftsland}";\"{$position->artikelnummerkunde}";\"{$beleg->auftrag->lieferdatum}";\"{$position->freifeld1}";\"{$position->freifeld2}";\"{$position->freifeld3}";\{* Ggf. weitere Freifelder *}";\"{$position->freifeld40}";\
{/foreach}

Format XML

{$beleg->status}
{$beleg->datum|date_format:'%d.%m.%Y'}
{$beleg->lieferdatum}
{$beleg->tatsaechlicheslieferdatum}
{$beleg->versandart}
{$beleg->zahlungsweise}
{$beleg->belegnr}
{$beleg->hauptbelegnr}
{$beleg->kundennummer}
{$beleg->name}
{$beleg->abteilung}
{$beleg->unterabteilung}
{$beleg->adresszusatz}
{$beleg->ansprechpartner}
{$beleg->telefon}
{$beleg->email}
{$beleg->land}
{$beleg->strasse}
{$beleg->plz}
{$beleg->ort}
{$beleg->projekt}
{$beleg->aktion}
{$beleg->internebemerkung}
{$beleg->internebezeichnung}
{$beleg->freitext}
{$beleg->ihrebestellnummer}
{$beleg->lieferbedingung}
{$beleg->art}
{foreach from=$beleg->positionen key=keypos item=position}
  {$position->nummer}
  {$position->bezeichnung}
  {$position->beschreibung}
  {$position->menge}
  {$position->preis}
  {$position->rabatt}
  {$position->waehrung}
  {$position->lieferdatum}
  {$position->sort}
  {$position->umsatzsteuer}
  {$position->einheit}
  {$position->zolltarifnummer}
  {$position->herkunftsland}
  {$position->artikelnummerkunde}
  {$position->freifeld1}
  {$position->freifeld2}
  {$position->freifeld3}
  {* Ggf. weitere Freifelder *}
  {$position->freifeld40}
{/foreach}
{if $beleg->versand}
{foreach from=$beleg->versand key=keyversand item=tracking} {* Versand *}
  {$tracking->tracking}
{/foreach}
{/if}

Beispiel Lieferschein mit MHD

Im Folgenden werden Beispiele als Ergänzung zu obigen Code-Beispielen gezeigt, die nur die Besonderheiten in Bezug auf MHDs in einer Position berücksichtigen.

Format CSV

- wird ergänzt -

Format XML

- wird ergänzt -
 

Beispiel Lieferschein mit Charge

Im Folgenden werden Beispiele als Ergänzung zu obigen Code-Beispielen gezeigt, die nur die Besonderheiten in Bezug auf Chargen in einer Position berücksichtigen.

Format CSV

- wird ergänzt -

Format XML

- wird ergänzt -
 

Beispiel Lieferschein mit Charge und MHD

Im Folgenden werden Beispiele als Ergänzung zu obigen Code-Beispielen gezeigt, die nur die Besonderheiten in Bezug auf MHDs und Chargen in einer Position berücksichtigen.

Format CSV

- wird ergänzt -

Format XML

- wird ergänzt -
 

Beispiel Auftrag

Anwendbar nur bei direktem Fulfillment ohne Autoversand. Diese Option sollte genau geprüft werden, meistens ist die Übertragung von Lieferscheinen der optimale Weg.

Format EDI

- wird ergänzt -

Format CSV

- wird ergänzt -

Format XML

- wird ergänzt -

Eingehende Datenkonvertierung

Es stehen folgende Objekte zur Verfügung

$csv ein Array aus Objekten mit dem Headerspalten als Keys
$xml ein Object das aus einem Xml gaparst wurde
$object ist ein $xml falls Ursprungsdaten ein gültiges xml waren, sonst das $csv Objekt
$original ist der Original-String des Eingangs

Operationen

{"Der Auftrag enthält keine Positionen"|error}
gibt einen Fehler an Smarty aus das in den Übertragungsmonitor geloggt wird

{"SELECT nummer FROM artikel"|assignsql assign="artikelnummern"}
speichert das Ergebnis der Sqlabrfage in die Variable $artikelnummern

{$original|replace:"1.0":"2.0"|getxml assign="neuesxml"}
Ersetzt alle Strings 1.0 zu 2.0 und speichert wandelt es in ein neues Objekt $neuesxml um

{$position->nummer|pregreplace:'/[^0-9]/':''}
füht eine Requläre Ersätzung auf das ein Objekt aus