Brauche bitte Hilfe für einen Code im Berechnungsfeld
Hallo zusammen,
habe gefühlt etliche 'Möglichkeiten' ausprobiert, komme aber leider nicht weiter.
Ich habe mich an der Vorlage 'Rechnungen' orientiert.
Ich habe eine
Tabelle Kunden
Tabelle Produkte, die ich wiederum mit Tabelle Kunden verküpft habe (da Kunden auch Lieferanten der einzelnen Produkte sein können)
Die Untertabelle 'Rechnungspositionen' ist mit Tabelle Produkte verküpft.
So, nun möchte ich in einem Berechnungsfeld in Tabelle Kunden sehen können, wieviel € Lieferanten 'erzielt' haben.
Was ich bereits hinbekommen habe ist:
sum(Produkte.Rechnungspositionen.'Netto-Gesamt')
Ich hätte aber gerne noch ein Berechnungsfeld, welches mir nur die Summe der bereits bezahlten RG anzeigt.
Für 'normale' Kunden, die direkt in einer Rechnung ausgewählt werden, habe ich ein Berechnungsfeld mit folgendem Code:
sum(Rechnungen[text(Status) = "bezahlt"].'Netto Gesamt:')
Ich hatte u.a. versucht
if Rechnungen.Status = 3 then
sum(Produkte.Rechnungspositionen.'Netto-Gesamt')
end
aber dann bleibt das Feld leer,
Hat jemand eine Idee, wie das funktionieren könnte?
Vielen Dank schon mal!
Gruß Kruna
30 Antworten
-
Hallo Kruna,
vielleicht so:
sum(Produkte.Rechnungspositionen[Rechnungen.Status=3] .'Netto-Gesamt')
Leo
-
Hallo Leo,
vielen Dank, aber leider hat das auch nicht geklappt.
Ich habe den Code mal in der DB Vorlage Rechnungen eingesetzt und bekomme folgenden Fehler angezeigt
Gruß Kruna
-
Die Verknüpfung zu Rechnungen heißt dort Rechnung, also:
sum(Produkte.Rechnungspositionen[Rechnung.Status=3] .'Netto-Gesamt')
-
HAllo Leo,
genauso...suuuuuper, jetzt hat es funktioniert!!! Vielen Dank!!!!
Gruß Kruna
-
Ich habe da noch eine Frage, denn irgendwie komme ich wieder nicht weiter. Ich halte mich nach wie vor an dem Beispiel der DB Rechnungen.
Dort gibt es ein Auswahlfeld TYP. Nehmen wir an ich würde TYP 1 oder TYP 3 wählen, dann sollte nicht 'Netto Gesamt' ausgewählt werden, sondern 'Mwst.'
Mein Ansatz war
if Produkte.Rechnungspositionen.Rechnung.Typ = 1 or Produkte.Rechnungspositionen.Rechnung.Typ = 3 then
sum(Produkte.Rechnungspositionen.'Mwst.')
else
sum(Produkte.Rechnungspositionen.'Netto-Gesamt')
endich habe das dann in meiner DB folgerndermassen umgesetzt:
if 'Werbeträger_'.Rechnungspositionen.Rechnungen.Rechnungstitel = 5 or 'Werbeträger_'.Rechnungspositionen.Rechnungen.Rechnungstitel = 7 then
sum('Werbeträger_'.Rechnungspositionen.'Summe Provi')
else
sum('Werbeträger_'.Rechnungspositionen.'Endsumme netto')
endIn der DB Rechnungen funktionert der Code, aber in meiner DB nicht. Hat jemand eine Idee, woran das liegen könnte oder was ich falsch gemacht habe könnte?
Vielen Dank!
Gruß Kruna
-
NAchtrag:
mit eckigen Klammern
if 'Werbeträger_'.Rechnungspositionen[Rechnungen.Rechnungstitel = 5] or 'Werbeträger_'.Rechnungspositionen[Rechnungen.Rechnungstitel = 7] then
sum('Werbeträger_'.Rechnungspositionen.'Summe Provi')
else
sum('Werbeträger_'.Rechnungspositionen.'Endsumme netto')
endfunktioniert es auch nicht
-
evtl., weil es auch hier RECHNUNG anstelle RECHNUNGEN heißen müßte?
-
Hallo Tacho, danke für Deinen Ansatz, aber die Verknüpfung zu Rechnungen heißt bei mir Rechnungen, daher ist das richtig.
Das kuriose ist wenn ich die eckige Klammer weglasse dann kommt der Betrag 'Endsumme netto' und bleibt, egal welchen Rechnungstitel ich wähle und wenn ich die eckige Klammer anwende, dann erscheint der Betrag 'Summe provi', ebenso egal welchen Rechnungstitel ich wähle
-
Hallo Kruna,
das, was du schreibst, macht eigentlich keinen Sinn:
ein werberträger hat mehrere Positionen und diese können u.U. zu mehreren Rechnungen gehöhren. Jetzt fragst du (übersetzt) WENN von dem Werbeträger die Rechnungspositionen welche zu den Rechnungen mit Rechnungstitel 5 gehöhren... dann 'Summe Provi'. Da, wo die Drei Punkte sind, soll jetzt nocht etwas stehen.
Es ist gar nicht klar was genau geprüft werden soll. Angenommen es gibt zu einem Werbeträger sowohl die Rechnungen mit Titel 5 als auch mit Titel 4. Was soll Ninox jetzt nehmen? -
Vielen DAnk Leo,
ok entschuldige, ich versuche es noch einmal etwas verständlicher.
Ich habe in Kunden ein Berechnungsfeld und da soll der Code eigentlich rein. Wie oben beschrieben habe ich Tabelle Kunden auch mit Produkte - in meinem Fall - Werbeträger verknüpft (da ein Kunden auch Lieferant, quasi Pächter eines Werbeträgers ist)
In Tabelle Rechnungen habe ich ein Auswahlfeld Rechnungstitel u.a. 1. Rechnung, 2. Stornorechnung usw. 5. Provisionsgutschrift 7. Provisionsgutschrift xxx (wie in der Vorlage Rechnungen das Auswahlfeld Typ)
Wenn nun in der Rechnung 5. Provisionsgutschrift oder 7. Provisionsgutschrift xxx ausgewählt wird, dann soll in Rechnungspositionen das Berechnungsfeld 'Summe von Provi' genommen werden. Bei allen anderen Rechnungstiteln soll in Rechnungspositionen das Berechnungsfeld 'Endsumme netto' genommen werden.
-
sum('Werbeträger_'.Rechnungspositionen.if Rechnungen.Rechnungstitel=5 or Rechnungen.Rechnungstitel=7 then 'Summe Provi' else 'Endsumme netto')
-
end vergessen
sum('Werbeträger_'.Rechnungspositionen.if Rechnungen.Rechnungstitel=5 or Rechnungen.Rechnungstitel=7 then 'Summe Provi' else 'Endsumme netto' end)
-
Wooww!!! Tausend DAnk LEo,
wie immer genau die Lösung nach der ich gesucht hatte!
Gruß
Kruna
-
HAllo nochmals,
entschuldigung, ich habe noch ein Berechnungsfeld und versuche die ganze Zeit den richtigen Code zu finden.
if 'Werbeträger_'.Rechnungspositionen.Rechnungen.Rechnungstitel = 5 or Rechnungen.Rechnungstitel = 7 then
'Umsatz Pacht' / 100 * first('Werbeträger_'.Rechnungspositionen.'Provi %') - 'RG Pacht'
else
'Umsatz Pacht' - 'RG Pacht'
endThen und else alleine stehend, ist richtig. Irgendwo in der if - Konstruktion ist etwas falsch. Es wird zwar kein Fehler angezeigt, aber nur die 'else'-Berechnung wird berücksichtigt.
Vielen Dank und Gruß Kruna
-
zumindest solltest du bei der 2. Bedingung den ganzen Pfad wiederholen oder, eleganter, ihn vorher in eine Variable schreiben, zB
let xx:='Werbeträger_'.Rechnungspositionen.Rechnungen.Rechnungstitel ;
if xx= 5 or 7 then .......
-
HAllo Arsene,
Ich habe leider immer noch sehr wenig Ahnung und habe versucht aus Leo's Code irgednetwas herzuleiten, aber auch an dieser Stelle vielen DAnk für den Hinweis.
Nun habe ich folgendes eingegeben:
let xx := 'Werbeträger_'.Rechnungspositionen.Rechnungen.Rechnungstitel;
if xx = 5 or 7 then
'Umsatz Pacht' / 100 * first('Werbeträger_'.Rechnungspositionen.'Provi %') - 'RG Pacht'
else
'Umsatz Pacht' - 'RG Pacht'
endThen-Anweisung funktioniert, aber else nicht, oder was habe ich wieder falsch gemacht?
Gruß Kruna
-
Versuch mal
if xx = 5 or xx = 7 then
-
gerade ausprobiert mit dem Ergebnis, dass nun die else-Anweisung funktioniert, aber then nicht.
Gruß
Kruna
-
Die Syntax der Abfrage ist so auf jeden Fall richtig. Erstelle mal ein Funktionsfeld und schreibe dort hinein:
'Werbeträger_'.Rechnungspositionen.Rechnungen.Rechnungstitel
Dann sieht man, was als Wert zurückgegeben wird.
-
Ich habe es gerade mal versucht und es wird im Funktionsfeld kein Wert zurückgegeben, das Feld bleibt leer.
Gruß
Kruna
-
Stimmt der Pfad? Ist 'Rechnungstitel' ein (einfaches) Auswahlfeld? Ist dort tatsächlich ein Wert ausgewählt?
-
Der Pfad sollte stimmen (funktioniert bei anderen Berechungsfeldern ebenso), Rechnungstitel ist ein einfaches Auswahlfeld und ein Wert(Provisionsgutschrift) ist auch ausgewählt.
Gruß Kruna
-
Wie Leo schon sagte: Da die Werbeträger in mehreren Rechnungspositionen vorkommen, weiß Ninox nicht, welche es nehmen soll. Du müsstest also auch hier mit first() arbeiten, so, wie du es auch in der Formel gemacht hast. Zum Beispiel so:
let xx := 'Werbeträger_'.first(Rechnungspositionen).Rechnungen.Rechnungstitel
Allerdings wäre das jetzt eine rein technische Lösung, die den Wert anhand der ersten Rechnungsposition zurückgibt. Vermutlich ist aber der Wert einer ganz bestimmten Rechnung gefragt. Mir ist aber nicht klar, welcher und wo genau das Ergebnis erscheinen soll.
-
first() hat auch nichts gebracht.
Das Ergebnis bzw das Berechnungsfeld ist in der Tabelle Kunden, wie zB hier:
Wie ich Anfangs geschrieben hatte, ist TAbelle Kunden auch mit Tabelle Werbeträger verknüpft. Das wäre equivalent zur DB Vorlage Rechnungen Kunden>Produkte.
Des Weiteren hattest Du mir mal eine DB zugeschickt
Dort waren diese Berechnungsfelder, die ich gerade versuche zu implemetieren udn eigentlich funktionieren sie auch, ausser wenn Kunde mit Produkte verknüpft und Produkte zB mit TAbelle Rechungspositionen.
Ich hoffe, dass ich mich einigermassen verständlcih erklären kann, bitte um Nachsicht.
Gruß
kruna
-
Kruna, ich verstehe nicht, in WELCHER Rechnung du den Rechnungstitel abfragen willst. Ein Produkt kommt normalerweise in mehreren Positionen verschiedener Rechnungen vor. Kunden haben in der Regel mehrere Rechnungen mit verschiedenen Positionen.
Der Pfad "Produkte.Rechnungspositionen.Rechnungen.Rechnungstitel" würde aber eine eindeutige Verbindung zwischen den einzelnen Tabellen voraussetzen. Sprich: Jedes Produkt dürfte nur in einer einzigen Rechnungsposition vorkommen und diese wiederum nur in einer einzigen Rechnung.
Ich sehe also keine direkte Verbindungslinie zwischen einem Produkt und einer bestimmten Rechnung.
Oder ist jedes Produkt einmalig, kommt also immer nur ein einziges Mal als Rechnungsposition in einer einzigen Rechnung vor und dann nie wieder? Dann könnte man es mal so versuchen:
let xx := first('Werbeträger_').first(Rechnungspositionen).Rechnungen.Rechnungstitel
Aber Sinn ergibt das alles für mich nicht.
Content aside
- vor 3 JahrenZuletzt aktiv
- 30Antworten
- 943Ansichten