Inaktiv druckvorlagen - Vorgang.Kunde.Ansprechpartner - hilfe - bereits gelöst

bummelchen

Aktives Mitglied
17. April 2010
10
0
hallo,

in den emailvorlagen gibt es vorgang.kunde.ansprechpartner... folgend name, email,...
in den druckvorlagen finde ich diesen punkt leider nicht.

mit meinen mangelhaften sql kenntnissen bin ich leider bei den directqueries gescheitert.

kann mir jemand behilflich sein?

benötigt werden equivalent zu
Vorgang.Kunde.Ansprechpartner.Name
Vorgang.Kunde.Ansprechpartner.EMail

danke!
 

gutberle

Sehr aktives Mitglied
29. März 2011
1.292
395
Das ist grundsätzlich nicht schwierig, aber wie soll das funktionieren. - In den Dialogen der Auftragsbearbeitung gibt es ja keine Möglichkeit, einen Ansprechpartner auszuwählen, gleichzeitig kannst Du beim Kunden aber mehrere anlegen.
>> Welchen davon willst Du zurückgeliefert bekommen, den ersten/obersten?
 

bummelchen

Aktives Mitglied
17. April 2010
10
0
hallo gute perle ;)

den in der auftragserfassung ausgewählten. siehe abbildung.

lg peter
 

Anhänge

  • Unbenannt.jpg
    Unbenannt.jpg
    148,3 KB · Aufrufe: 50

gutberle

Sehr aktives Mitglied
29. März 2011
1.292
395
Moin Peter,

erst einmal Chapeau, das ist zwar ziemlich von Hinten durch die Brust ins Auge, aber jo, so kann man tatsächlich indirekt einen Ansprechpartner auswählen, wieder was gelernt ... :rolleyes:

Und jetzt bitte nicht erschrecken, die folgende SQL Abfrage ist ein bißchen komplexer als Du sie vielleicht erwartet hättest. Ich habe aber der Vollständigkeit halber gleich die Abfrage, die ich benutze, um bei Lieferantenbestellungen die Ansprechpartner-Infos aus der DB zu holen, an Deinen "Fund" mit der Email-Adresse angepasst und diese Abfrage macht deutlich mehr als Du eigentlich wolltest, ist aber eben auch deutlich mächtiger ...
Code:
JTL_DirectQuery("SELECT 'Name='+ISNULL(cName,'')+'|Abteilung='+ISNULL(cAbteilung,'')+'|Email='+ISNULL(cMail,'')+'|Tel='+ISNULL(cTel,'')+'|Fax='+ISNULL(cFax,'') FROM tansprechpartner   
    WHERE cMail='"+Vorgang.Rechnungsadresse.EMail+"' AND kKunde="+ToString$(Vorgang.Kunde.InterneKundennummer)+"
    UNION
    SELECT 'Name='+CONCAT(cTitel,CASE WHEN cTitel<>'' THEN ' ' ELSE '' END,cVorname,CASE WHEN cVorname<>'' THEN ' ' ELSE '' END,cName)
   +'|Abteilung='+ISNULL(cZusatz,'')+'|Email='+ISNULL(cEMail,'')+'|Tel='+ISNULL(cTel,'')+'|Fax='+ISNULL(cFax,'') FROM tKunde
       WHERE NOT EXISTS (SELECT 0 FROM tansprechpartner WHERE cMail='"+Vorgang.Rechnungsadresse.EMail+"' AND kKunde="+ToString$(Vorgang.Kunde.InterneKundennummer)+")
       AND kKunde="+ToString$(Vorgang.Kunde.InterneKundennummer))

Ok, und was macht das gute Stück?

Es liefert gleich alle Infos aus dem Ansprechpartner des Kunden zurück, der über die ausgewählte Email-Adresse identifiziert wird. Und diese Daten werden gleich in dem Format zurückgeliefert, das man in den Vorlagen super-elegant über den Alias$() Befehl auswerten kann.

Und damit man auch dann vernünftige Werte zurückgeliefert bekommt, wenn man keinen Ansprechpartner ausgewählt hat, oder es schlicht keinen gibt, prüft die Abfrage auch darauf und liefert in diesem Fall die analogen Infos aus dem primären Kundendatensatz zurück. Das könntest Du zwar auch in der Vorlage selbst prüfen, aber das wäre ein immer wiederkehrender sinnloser Aufwand, deshalb erledige ich das gleich mit.

Um einfach damit arbeiten zu können, mache ich in der Summe also Folgendes:

- Ich lege mir unter "Projekt > Benutzervariablen" eine neue Benutzervariable namens "Ansprechpartner" an.
- Dieser neuen Variable, die über @Ansprechpartner überall im Formular ansprechbar ist, gebe ich als Wert die obige Abfrage mit.
- Wenn ich jetzt im Formular irgendwo z.B. die Email-Adresse des Ansprechpartners verwenden will, benutze ich den Formel-Ausdruck Alias$("Email",@Ansprechpartner).
- Die verfügbaren Feldnamen für diese Alias$() Abfragen sind dann "Name", "Abteilung", "Email", "Tel", "Fax".

Das war's, eigentlich ganz einfach ... :)

Gruß,
Ingmar
 
Zuletzt bearbeitet:

gutberle

Sehr aktives Mitglied
29. März 2011
1.292
395
Hallo Peter,

mir ist aufgefallen, dass in der Lösung von oben noch etwas drin ist, was spezifisch für meine Art von Geschäft ist und das für Dich und Andere vielleicht eher ungünstig und ohne Erklärung auch nicht nachvollziehbar ist.

Bei mir ist es so, dass mein Ansprechpartner immer der primäre Kundendatensatz ist, weil ich an Unis und Kliniken verkaufe und die Abwicklung über allerlei Stellen (Bestellabteilung, Rechnungsabteilung, Wareneingangsprüfung, ...) geht, die mich als Ansprechpartner nicht wirklich interessieren und "wenn was ist", dann will ich mit meinem Kunden (also Endanwender) mailen oder sprechen und der steht im primären Kundendatensatz.

Aus Sicht eines "normalen" Verkäufers und Onlinehändlers, wie den meisten hier im Forum, würde es aber definitiv mehr Sinn machen, immer dann, wenn über Deinen Email-Trick kein expliziter Ansprechpartner ausgewählt wurde, als Backup die Daten aus der in Angebot/Auftrag angegebenen Rechnungsadresse zu nehmen, also die direkt im Angebot/Auftrag sichtbaren Kontaktdaten. - Das will ich hier noch nachreichen ...

1. Ansprechpartner mit Backup aus Rechnungsadresse
Code:
JTL_DirectQuery("SELECT 'Name='+ISNULL(cName,'')+'|Abteilung='+ISNULL(cAbteilung,'')+'|Email='+ISNULL(cMail,'')+'|Tel='+ISNULL(cTel,'')+'|Fax='+ISNULL(cFax,'') FROM tansprechpartner
    WHERE cMail='"+Vorgang.Rechnungsadresse.EMail+"' AND kKunde="+ToString$(Vorgang.Kunde.InterneKundennummer)+"
    UNION
    SELECT 'Name='+CONCAT(cTitel,CASE WHEN cTitel<>'' THEN ' ' ELSE '' END,cVorname,CASE WHEN cVorname<>'' THEN ' ' ELSE '' END,cName)
    +'|Abteilung='+ISNULL(cZusatz,'')+'|Email='+ISNULL(cMail,'')+'|Tel='+ISNULL(cTel,'')+'|Fax='+ISNULL(cFax,'') FROM trechnungsadresse
        JOIN tBestellung ON tBestellung.kRechnungsAdresse=trechnungsadresse.kRechnungsAdresse
        WHERE NOT EXISTS (SELECT 0 FROM tansprechpartner WHERE cMail='"+Vorgang.Rechnungsadresse.EMail+"' AND kKunde="+ToString$(Vorgang.Kunde.InterneKundennummer)+")
        AND kKunde="+ToString$(Vorgang.Kunde.InterneKundennummer)+"
        AND kBestellung="+ToString$(Vorgang.InterneAuftragsnummer))
... und wenn man mal so darüber nachdenkt, dann stellt man fest, dass es natürlich auch total Sinn machen kann, das gleiche Spiel auch für die Lieferadresse zu treiben, also auch dort über die Email-Adresse einen Ansprechpartner auszuwählen und seine/ihre Kontaktdaten in einer zweiten Benutzervariablen für den schnellen Zugriff abzulegen. - Dazu braucht man dann eine zweite Benutzervariable, in der man den neuen Code ablegt und der sieht dann so aus ...

2. Ansprechpartner mit Backup aus Lieferadresse
Code:
JTL_DirectQuery("SELECT 'Name='+ISNULL(cName,'')+'|Abteilung='+ISNULL(cAbteilung,'')+'|Email='+ISNULL(cMail,'')+'|Tel='+ISNULL(cTel,'')+'|Fax='+ISNULL(cFax,'') FROM tansprechpartner
    WHERE cMail='"+Vorgang.Lieferadresse.EMail+"' AND kKunde="+ToString$(Vorgang.Kunde.InterneKundennummer)+"
    UNION
    SELECT 'Name='+CONCAT(cTitel,CASE WHEN cTitel<>'' THEN ' ' ELSE '' END,cVorname,CASE WHEN cVorname<>'' THEN ' ' ELSE '' END,cName)
    +'|Abteilung='+ISNULL(cZusatz,'')+'|Email='+ISNULL(cMail,'')+'|Tel='+ISNULL(cTel,'')+'|Fax='+ISNULL(cFax,'') FROM tlieferadresse
        JOIN tBestellung ON tBestellung.kLieferAdresse=tlieferadresse.kLieferAdresse
        WHERE NOT EXISTS (SELECT 0 FROM tansprechpartner WHERE cMail='"+Vorgang.Lieferadresse.EMail+"' AND kKunde="+ToString$(Vorgang.Kunde.InterneKundennummer)+")
        AND kKunde="+ToString$(Vorgang.Kunde.InterneKundennummer)+"
        AND kBestellung="+ToString$(Vorgang.InterneAuftragsnummer))

Du würdest Dir dann zwei Benutzervariablen anlegen, z.B. @AnsprechpartnerRA und @AnsprechpartnerLA und alles andere wäre wie im Beitrag oben, die Abteilung des Ansprechpartners aus der Lieferadresse wäre also z.B. über Alias$("Abteilung",@AnsprechpartnerLA) abfragbar.

Gruß,
Ingmar
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: bummelchen

Ähnliche Themen