Hallo Robert,
zuerst muss ich Dir 1-2 Zähne ziehen: Ohne eigene Aktionen wie die Auswahl von "USt. frei Reverse Charge" und klicken auf "keine USt." wird es nicht gehen, denn die Steuerschlüssel greifen bei Deinem Problem leider nicht. Die Steuerschlüssel sind durchaus mächtig und JTL hat die Auswahllogik ja auch stark mit Differenzierungen nach Zonen, Steuerklassen, Warengruppen, Versandarten und Positionsarten aufgerüstet, aber man kann z.B. nicht nach Kundengruppen differenzieren und schon dadurch ist für Deinen Fall keine 100% eindeutige und korrekte Zuordnung mehr möglich. - Und falls Du für §19 UStG 1a und für §19 UStG 1c am Ende auch noch unterschiedliche Buchungskonten brauchst, geht das durch die nicht ausreichend differenzierbaren Steuerschlüssel auch nicht, schade aber so ist es halt.
Insgesamt kann man Deine Logik schon in eine einzige Abfrage pressen, aber die wäre echt komplex, weil sie spezifisch für den jeweiligen Vorgang prüfen müsste ... welche Firma A/B ist es, wo sitzt der Kunde (Lieferanschrift/Rechnungsanschrift?) und vor allem, ob unter den Artikeln des Auftrags zumindest einer ist, der eine "Bauleistung" oder eine "Gaslieferung" darstellt.
Die Abfrage von Firma und Liefer-/Rechnungsland ist noch mit
DotLiquid Variablen der Vorlagen zu machen, bei den Artikel wird es dann aber haarig, wenn Du das über die Zugehörigkeit zu einer Artikelkategorie abfragen willst. Du bekommst zwar mit
Auftragspositionen.Artikel.Warengruppe.Name die erste zugeordnete Oberkategorie zurückgeliefert, aber immer die alphabetisch erste und da magst Du mit "Bauleistung" und "Chemie" gesehen noch Glück haben, aber damit hast Du dann links im Kategorienbaum gleich zwei eigene Oberkategorien für etwas stehen, dass Du eigentlich nur für die Auswahl von Vorlagentexten und sofern möglich auch des Steuerschlüssels benutzen willst. Und später kommt dann die Kategorie "Abfallsentsorgung" dazu und alles bricht auseinander ...
Und selbst wenn Du das als OK akzeptieren würdest, käme noch dazu, dass Du ja ggfls. viele Artikel im Auftrag hast und schon
einer aus der Kategorie "Bauleistung" oder "Gaslieferung" würde reichen, aber Du müsstest rausfinden, ob irgendeiner der Artikel im aktuellen Auftrag aus einer der beiden Kategorien stammt. Mit den Bordmitteln der Vorlagen geht das überhaupt nicht, zumal die Artikelpositionen auch nur im Berichtscontainer verfügbar sind und Du brauchst sie außerhalb. Und selbst in SQL ist das echt komplex, weil man nur auf die tiefsten Kategorien direkten (=einfachen) Zugriff hat und sich für jede dem Artikel zugeordnete Kategorie in mehreren Schleifen rekursiv nach vorne zur Oberkategorie durchhangeln muss. Das können aber viele und unterschiedlich tief geschachtelte Kategoribäume sein und das ist dann schon keine SQL Abfrage mehr, sondern echte SQL Programmierung.
Es gibt auch andere Wege, z.B. über SetVar() und GetVar(), aber mit denen habe ich gar keine guten Erfahrungen gemacht, weil sie a) instabil funktionierten und b) es eine rechte Zauberei war, die Inititalisierung und das Update mit SetVar() an die richtigen Stellen zu bringen und durch die Einbringung der Funktionen ändern sich dann auch noch die Spalten der Tabelle, etc. - Alles in allem gut für manches, aber ein Heiden-Aufriss und ich war am Ende immer nur froh, dass es funktionierte, ohne ein Gefühl dafür bekommen zu haben, wann exakt es tut und warum manchmal nicht. - Würde ich nicht empfehlen, auch wenn es prinzipiell gehen würde.
Die Leistungsart, also ob RC und falls ja, welcher Typ, ist ja aber eine Eigenschaft des Vorgangs selbst und dann bietet sich doch eine viel einfachere Lösung an, nämlich die über ein Auftragsattribut. Ich arbeite sehr viel mit Attributen und bilde darüber alles ab, was sonst nicht oder mit mit ähnlichem Aufriss wie Dein Problem hier zu lösen wäre. Mein Vorschlag wäre also, dass Du Dir ein Auftragsattribut "Leistungsart" anlegst und immer dann, wenn es sich bei einem Auftrag um eine Bauleistung handelt, schreibst Du da "Bauleistung" rein, sonst "Gaslieferung" oder anderenfalls eben gar nichts. Um Fehler zu vermeiden, kannst Du das auch als "Bau" und "Gas" abkürzen, denn in der Vorlage fragst Du das Attribut dann einfach mit
Left$(Upper$(Atrim$(Alias$("Leistungsart",Vorgang.Auftrag.Attribute))),3) und da käme dann immer "BAU", "GAS" raus, egal ob Du abkürzt oder nicht, Groß-/Kleinschreibung, etc. Es zählen dann immer nur die ersten drei Buchstaben von links.
Die Darstellungslogik würde dann so funktionieren ...
- A als §19UStG
1a, Bauleistungen - Kunde in AT
(Vorgang.Firma.Name="A") AND (Vorgang.Kunde.LandISO="AT") AND (Left$(Upper$(Atrim$(Alias$("Leistungsart",Vorgang.Auftrag.Attribute))),3)="BAU")
- B als §19UStG
1c + UStBBKV bei Lieferung an Wiederverkäufer - Kunde in AT
(Vorgang.Firma.Name="B") AND (Vorgang.Auftrag.Kunde.Kundengruppe.Name="Wiederverkäufer") AND (Vorgang.Kunde.LandISO="AT") AND (Left$(Upper$(Atrim$(Alias$("Leistungsart",Vorgang.Auftrag.Attribute))),3)="GAS")
Und wie oben bereits gesagt musst Du der
Wawi noch nachhelfen, indem Du unten im Auftrag von Hand "USt. frei Reverse Charge" und "keine USt." setzt, sofern die Wawi das nicht schon automatisch korrekt detektiert hat. Einfacher geht es leider nicht.
Gruß,
Ingmar