Wie kann ich in einer anderen Tabelle nach Datum und dazu passenden Datensatz Treffern suchen?
Ninox Profile

Falls ich die Aufgabenstellung aus dem Screenshot richtig interpretiere, erscheint mir Leos Vorschlag als der sinnvollste. Mit der Einschränkung, dass mir nicht klar ist, was das join() bewirken soll. Ich würde statt dessen zu first() tendieren:

 

let SuchDatum := 'Heutiges Datum Abfragetabelle';
'1. Suchtext aus Haupttabelle' := first(select Haupttabelle where 'Datum A' = SuchDatum or 'Datum A' = SuchDatum or 'Datum C' = SuchDatum or 'Datum D' =SuchDatum or date(start('Geplanter Termin')) =SuchDatum).'Text 1';
'2. Suchtext aus Haupttabelle' := first(select Haupttabelle where 'Datum A' = SuchDatum or 'Datum A' =SuchDatum or 'Datum C' = SuchDatum or 'Datum D' = SuchDatum or date(start('Geplanter Termin')) =SuchDatum).'Text 2'

 

 

 

Ninox Profile

Nabend Jungs... Komme grad von einer OP zurück und bin heim geflüchtet. Ninox hat heilende Kräfte scheint mir :-)

 

Also: Es mag ja sein, dass der oder der Code nun besser wäre. Aber: Es funktioniert ja nun und was da unter der Haube passiert ist mir dann auch egal. Bei der nächsten App kann ich dann den anderen Weg ausprobieren.

@Bernd:

Also es ist so: Pro Auftrag können bis zu vier Tage mit Datum drinstehen. An dem einen war ich nur einen Tag beschäftigt, an einem anderen Auftrag 2 oder auch 3 oder seltener 4 Tage. Das notiere ich in dem Auftrag und daher stehen eben bis zu 4 Tage in einem Auftrag drin. An diesen Tagen die Datum A,B,C oder D ausgefüllt haben war ich dann dort definitiv vor Ort. Soweit das Einfache, was auch keine Probleme machen würde.

Nun gibts Sonderfälle: Ich habe zweimal den selben Tag in Datum A und Datum B aber beides in nur einem Auftrag. Das sind z.B. Jobs zu denen ich von zuhause aus hinfahre aber auch von dort wieder zurück nach Hause. Dann werden zwei Zeilen ausgefüllt - für die Rückfahrt - Daher sind manchmal eben zwei gleiche Tage in einem Auftrag zu finden. Und hier soll die Suche natürlich nur einmal zuschlagen und nur einmal einen Treffer eintragen.

Ninox Profile

Möchte nicht aufdringlich und besserwisserisch wirken, aber wenn der Code funktioniert, warum hast du dann Probleme?

probier folgendes aus. 

---

let SuchDatum := 'Datum Mo.';

'Reisegrund Mo.':= join (select  'Haupttabelle' where 'Datum A' = SuchDatum or 'Datum B' = SuchDatum or 'Datum C' = SuchDatum or 'Datum D' = SuchDatum or date(start('Geplanter Termin'))=Suchdatum.AuftragsSatz.'Adresse für Reisekosten',"

")

----

@Copytexter,

join ist hier erforderlich, weil damit auch andere Aufträge (aus anderen Datensätzen) an selben Tag gezählt werden.

Leo

B

ok, dann meine Variante:

 

let SuchDatum := 'Heutiges Datum Abfragetabelle';

var Text := "";

for Satz in (select 'Haupttabelle' where 'Datum A' = SuchDatum) do

    if Text >"" then

        Text := Text + "; "

    else

        void

    end;

    Text := Text + Satz.'Text 1';

end;

for Satz in (select 'Haupttabelle' where 'Datum B'= SuchDatum and not 'Datum A' = 'Datum B') do

    if Text >"" then

        Text := Text + "; "

    else

        void

    end;

    Text := Text + Satz.'Text 1';

end;

 

for Satz in (select 'Haupttabelle' where 'Datum C'= SuchDatum and not('Datum A' = 'Datum C' or 'Datum B' = 'Datum C')) do

    if Text >"" then

        Text := Text + "; "

    else

        void

    end;

    Text := Text + Satz.'Text 1';

end;

 

for Satz in (select 'Haupttabelle' where 'Datum D'= SuchDatum and not ('Datum A' = 'Datum D' or 'Datum B' = 'Datum D' or 'Datum C' = 'Datum D')) do

    if Text >"" then

        Text := Text + "; "

    else

        void

    end;

    Text := Text + Satz.'Text 1';

end;

 

if Satz != null and '1. Suchtext aus Haupttabelle' != null then

    '1. Suchtext aus Haupttabelle' := Text;

end;

Ninox Profile

Hallo Leo.

Ich habe deine Formel ja ausprobiert, kam bisher aber noch nicht drauf wo der Fehler liegt. Liegt ja an mir und dass ich irgendwo sicherlich eine Klammer oder Punkt anders setzen müsste nehme ich an. Ich habe nun schon 2 Buttons: Bernd und Leo :-)

Variante 1:

Variante 2:

 

Dass die Formel funktionierte bezog ich auf Bernds Formel der nur das aussortieren der Doppelten fehlte. Mit der letzten Formel von Bernd gehts. Es wird nur ein Auftrag pro Suche angezeigt, egal wie oft das Datum in dem Auftrag vorkommt.

 

Hotelbelege auf die selbe Weise suchen:

Da ich nun Geschmack gefunden habe, wollte ich mit der selben Methode auch gleich Hotelbelege suchen die - wenn vorhanden - in den Aufträgen als PDF anhängen. Das funktioniert - so halb. Irgendwie findet er das PDF und zeigt es mir im Zielfeld (Bild Feld) auch an wenn ich auf "Sichern unter" gehe. Dann sieht man, dass er da was speichern will aber wohl nicht kann. Wenn ich sichern will, kommt ein Copy sonstwas Fehler. Wenn ich als Zielfeld ein Berechnungsfeld wähle funktioniert die Formel gar nicht. Ich denke es fehlt eine Art Copy Anweisung?!

Die Hotelbelegeformel ist nun die von Bernd mit den Feldern für die Hotelbelege. Aber weil PDF gehts wohl nicht wie ich dachte.

 

 

let SuchDatum := 'Datum Mo.';
var HotelZettel := "";
for Satz in select AUFTRAG where Datum_A = SuchDatum do
if HotelZettel > "" then
HotelZettel := HotelZettel + " & "
else
void
end;
HotelZettel := HotelZettel + Satz.HOTELBELEG
end;
for Satz in select AUFTRAG where Datum_B = SuchDatum and not Datum_A = Datum_B do
if HotelZettel > "" then
HotelZettel := HotelZettel + " & "
else
void
end;
HotelZettel := HotelZettel + Satz.HOTELBELEG
end;
for Satz in select AUFTRAG where Datum_C = SuchDatum and not (Datum_A = Datum_C or Datum_B = Datum_C) do
if HotelZettel > "" then
HotelZettel := HotelZettel + " & "
else
void
end;
HotelZettel := HotelZettel + Satz.HOTELBELEG
end;
for Satz in select AUFTRAG where Datum_D = SuchDatum and not (Datum_A = Datum_D or Datum_B = Datum_D or Datum_C = Datum_D) do
if HotelZettel > "" then
HotelZettel := HotelZettel + " & "
else
void
end;
HotelZettel := HotelZettel + Satz.HOTELBELEG
end;
for Satz in select AUFTRAG where date(start('Geplanter Termin')) = SuchDatum and not (Datum_A = date(start('Geplanter Termin')) or Datum_B = date(start('Geplanter Termin')) or Datum_C = date(start('Geplanter Termin')) or Datum_D = date(start('Geplanter Termin'))) do
if HotelZettel > "" then
HotelZettel := HotelZettel + " & "
else
void
end;
HotelZettel := HotelZettel + Satz.HOTELBELEG
end;
if HotelZettel != null and 'Hotelbeleg aus Auftrag' != null or 'Hotelbeleg aus Auftrag' = null then
'Hotelbeleg aus Auftrag' := HotelZettel
end

 

Ninox Profile

Ninox Profile

B

guten Morgen,

ich glaube, mit PDF's wird das nicht gehen... Ist ja kein Textfeld mit beliebiger Länge...

Ninox Profile

Ja Schade weil er die PDFs ja sogar findet:

Das ""HotelZettel + " & "" hatte ich übrigens vorher schon auf HotelZettel ohne Kreuzchen geändert.

W

Werte Forum-Helfer,

Ich möchte aus einer Tabelle Rechnungen alle Datensätze für das aktuelle Quartal rauspicken und in eine Tabelle RG-Buchung einlesen. Die Tabelle RG-Buchung dient zum Export in die Buchhaltungssoftware. Deswegen muss die Tabelle RG-Buchung vor jedem einlesen gelöscht werden.

Ich fühle mihc mich der Herausforderung aktuell etwas überfordert und möchte nicht noch mehr ZEit mit Experimenten und Forensuche verpuffen. Deswegen wäre ich sehr dankbar, wenn mir da jemand unter die Arme greifen kann. 

 

let SuchDatum := yearquarter(Datum);
let GB := 7;

'Einnahmen CHF' := first(select Rechnungen where yearquarter('Datum RG') = SuchDatum and Typ = 7).'Summe incl MWST'

 

 

 

Reply