0

Tage zwischen Daten in Untertabelle

Hallo zusammen,

 

ich hab ein Start Reisedatum Start (mit Uhrzeit) und ein Reisedatum Ende (mit Uhrzeit).

Ich hätte gerne, dann wenn die beiden Daten ausgefüllt wurden, dass eine Untertabelle entsteht mit allen Tagen die eben zu dem Intervall gehören, aufgelistet werden.

 

Also 12.01.2021 - 14.01.2021

 

Dann entsteht eine Untertabelle:

12.01.2021

13.01.2021

14.01.2021

 

Kann man das irgendwie umsetzen?

 

Vielen Dank!

19 Antworten

null
    • Ninox-Professional
    • planoxpro
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo, man könnte das bspw. mit einer Schaltfläche machen (Trigger ginge wahrscheinlich auch, wäre aber aufwändiger):

     

    if Start and Ende then
       let me := this;
       let vDat := date(Start);
       while vDat <= Ende do
          let newDate := (create UNTERTABELLE);
          newDate.(HAUPTTABELLE := me);
          newDate.(Datum := vDat);
          vDat := date(year(vDat), month(vDat), day(vDat) + 1)
       end
    end

    • Torsten_Stang.1
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo,

     

    ich hab das für die Erfassung von Reisekosten-Abrechnungen auch schon umgesetzt -  zudem dynamisch, d.h. wenn ich die Daten ändere, werden bereits angelegte Reisetage außerhalb des Reisezeitraums automatisch gelöscht. Jeweils als Änderungstrigger bei Start- und Enddatum:

     

    let my := this;
    let myStart := date(year('Datum Abfahrt'), month('Datum Abfahrt'), day('Datum Abfahrt'));
    let myEnd := date(year('Datum Rückkehr'), month('Datum Rückkehr'), day('Datum Rückkehr'));
    for d in select Reisetag where Reisekosten = my do
    if d.Reisetag < my.'Datum Abfahrt' or d.Reisetag > my.'Datum Rückkehr' or my.Reisedauer = 1 then
    delete d
    end
    end;
    if Reisedauer > 1 then
    for i from myStart to myEnd + 1 step 1000 * 60 * 60 * 24 do
    let myDate := first(select Reisetag where Reisetag = i and Reisekosten = my);
    if not myDate then
    let newDate := (create Reisetag);
    newDate.(
    Reisekosten := my;
    Reisetag := i
    )
    end
    end
    end

     

    Anmerkung: Ich lege Reisetage nur an, wenn die Reise länger als 1 Tag ist - anderenfalls genügt der rudimentäre Reisekosten-Datensatz. Und: Da ich gerade auf dem Sprung bin direkt mein Code an mein Datenmodell angepasst, müsste also auf das vorhandene Datenmodell angepasst werden.

     

    lg, Torsten

    • Kalberg
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Torsten,

     

    genau darum geht es bei mir auch. Ich suche eine Lösung für eine Reisekostenabrechnung.

    Ich denn dabei auch berücksichtigt, dass bei z.B. 3 Tagen Abwesenheit, der erste/letzte Tag als Anreise/Abreise gezählt wird und nur der Zwischentag die vollen 28€ in DE erhält?

     

    Wäre es möglich, dass du mir dein Datenmodell als Download zur Verfügung stellst?

     

    Liebe Grüße

    Sebastian

    • Torsten_Stang.1
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo,

     

    ja, ist es. Außerdem pflege ich Reiseziele (je Reisetag) mit jeweils gültigen Verpflegungspauschalen.

     

    Datenmodell muss ich mal schauen, wie ich das funktional aus meiner Datenbank "herausoperiert" bekomme. Bin gerade unterwegs, schau's mir später an.

     

    lg, Torsten

    • Kalberg
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Das wäre super. Schon einmal vielen Dank!

    • DV digital vereinfacht GmbH
    • Sebastian_Kalberg
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Torsten,

     

    entschuldige die "Störung", hast du nochmal nachgesehen?

     

    Vielen Dank!

    • Torsten_Stang.1
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Örgs,

     

    nein und beinahe vergessen - Danke für die Erinnerung, ich bemühe mich, das noch heute Nachmittag zu erledigen.

     

    lg, Torsten

    • Torsten_Stang.1
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Sebastian,

     

    sooooo, ich hab mich mal ran gemacht. War in der Tat nicht ohne, weil beim Import die internen Indizes neu aufgebaut werden und so manche Funktion in's Nirwana zeigt. Ich hoffe, ich hab alles so erwischt, dass die Funktion gewährleistet oder zumindest nachvollziehbar ist.

     

    https://www.dropbox.com/s/db93nowins1m9u7/Reisekosten.ninox?dl=0

     

    Viel Erfolg!

    • Kalberg
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Wow! Vielen vielen Dank! 

     

    Ich versuche es gerade für mich in meiner Gesamt-Datenbank nachzubauen... wenn ich das datum der Rückkehr eingebe dann erscheinen die Tage auch in der Untertabelle allerdings übernimmt er die pauschalen Beiträge für VMA und Übernachtung nicht... Ich finde den Haken nicht.

     

    Hast du eine Idee? Spielt der Status eine Rolle? Weil den habe ich erstmal weggelassen...

     

    Lieben Dank

    • Torsten_Stang.1
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo,

     

    aus der Ferne schwer zu beurteilen. In jedem Fall spielt der Status für das Heranziehen der Pauschalen keine Rolle. Vielmehr habe ich das Umbiegen der Feldbezüge in Funktionen beim Import im Verdacht. :-/

     

    Schade, dass es das Mittwochs-Webinar bei Ninox nicht mehr gibt. Wäre wohl ein gut lösbares Problem, wenn man auf die DB schauen könnte.

     

    lg, Torsten

    • Kalberg
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hi Torsten,

     

    bei der "nach Änderung" war als fixer Wert die 13 eingetragen, weil Deutschland die 13 bei den Pauschbeträgen war. Bei mir habe ich nur Deutschland aktuell, sodass ich die 13 zu einer 1 ändern musste. Jetzt funktioniert es! Vielen Dank!

    • Tempera Strings GmbH
    • Jan.1
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Torsten Stang Ich wollte mich auch grade mal daran machen das umzusetzen, allerdings wäre es natürlich klasse nicht das Rad neu erfinden zu müssen. Leider ist der Dropbox Link nicht mehr aktuell. Wärest du bereit das nochmal hochzuladen?

    • Torsten_Stang.1
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Jan,

     

    hier nochmal der Link zur DB:

    https://www.dropbox.com/s/zizf5hf78numb4z/Reisekosten.ninox?dl=0
     

    • Kruna
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hallo zusammen,

    auf der Suche nach einer Lösung zum Thema Reisekostenabrechnung, bin ich hier fündig geworden.

    Torsten Stangzunächst vielen DAnk für Deine Mühe und Bereitstellung der Datenbank.👍

    Ich habe diese nun improtiert und versuche die anzupassen. Dabei sehe ich gerade, dass ich der Tabelle 'Mitarbeiter' in zwei Feldern, Fehler aufgetaucht sind.

    Ich kann diese leider nicht so genau zuordnen. Könntest Du mir bitte evtl helfen?

    zB Feld 1 (fx) - Resturlaub 31.12. aktuelles Jahr:

    let myDate := date(year(today()), 12, 31);
    sum(B1[B = 1 and D <= myDate].Benutzer) - sum(B1[B = 2 and D <= myDate].Benutzer)

     

    Feld 2 (Button) - Urlaubsanspruch aktuelles Jahr:

    let my := this;
    let myAnspruch := Q;
    let myYear := year(today());
    let myCom := "Urlaubsanspruch " + myYear;
    let myDate := date(myYear, 1, 1);
    let new := ERR("Eine Tabelle wurde nicht gefunden: S");
    new.(Reisekosten := my);
    new.(Nachname := 1);
    new.(Vorname := myDate);
    new.('Geburts-Datum' := myDate);
    new.(Benutzer := myAnspruch);
    new.('E-Mail' := myCom)

    ps: ich sehe gerade, dass auch in der Untertabelle Reisekosten der Tabelle 'Mitarbeiter' sind einige Button mit Fehler angezeigt.

    Vielen Dank schon mal.

     

    Gruß Kruna

      • Torsten_Stang.1
      • vor 1 Jahr
      • Gemeldet - anzeigen

       Hm, das liegt wohl daran, dass ich die Tabelle aus meinem Kontext herausgerissen habe, das Thema Urlaub jedoch nicht mitgenommen habe, da es hier konkret "nur" um Reisekosten ging.

      Ich schau's mir bei Gelegenheit mal an, kann aber dauern, bin quasi im Aufbruch in den Urlaub (wie passend ;-) ).

      • Kruna
      • vor 1 Jahr
      • Gemeldet - anzeigen

      , ok, kein Problem, das eilt nicht.

      Ja, passend auch hier😀 Bin acuh auf dem Weg in den (Kurz)Urlaub, dabei verbunden mit einer geschäftlichen (Kurz)Reise. Daher kam das Thema gerade bei mir auf.

      Ich wünsche Dir noch einen schönen und vor allem erholsamen Urlaub.

      Gruß Kruna

    • Kruna
    • vor 3 Monaten
    • Gemeldet - anzeigen

    Hallo Thorsten, wie schnell doch so ein Jahr vergeht ;-) und wieder (immer noch) bin ich bei dem Thema Reisekostenabrechnung beschäftigt, nur das ich dieses Thema jetzt in Ninox brauchen werde.
    Ich habe nun Deine DB ganz gut angepasst und es funktioniert soweit alles ganz gut - bis auf einen Punkt, den ich einfach nicht gelöst bekomme.
    Ich versuche mal folgend zu erklären:
    Wenn 'Datum Abfahrt' und 'Datum Rückkehr' zwei Tage+ beinhalten, dann erscheint die Ansicht Reisetage, indem auch das Reiseziel angegeben wird.

    Wie schaffe ich es denn, dass bei nur einem Tag >8Std, der Datensatz in der Ansicht erscheint, incl. Reiseziel. Hintergrund ist, dass ich versuche ein Drucklayout für eine monatliche Reiskostenabrechnung zu erstellen und komme da nicht weiter.

    Hättest Du eine Idee für mich oder könntest mir btte weiterhelfen.

    Vieln Dank schon mal.

    Gruß Kruna

      • Torsten_Stang.1
      • vor 3 Monaten
      • Gemeldet - anzeigen

       Puh, hab mich schon ewig nicht mehr mit den Skripten beschäftigt.

      Soweit ich mich erinnere, erfolgt das "Management" der Reisetage als Änderungstrigger jeweils bei den Datum- und Uhrzeitfeldern für Abfahrt und Rückkehr, abhängig davon, ob 'Reisedauer' > 1 ist:

      if 'Datum Abfahrt' and 'Uhrzeit Abfahrt' and 'Datum Rückkehr' and 'Uhrzeit Rückkehr' then
          Reisezeitraum := appointment(datetime('Datum Abfahrt', 'Uhrzeit Abfahrt'), datetime('Datum Rückkehr', 'Uhrzeit Rückkehr'))
      end;
      let my := this;
      let myStart := date(year('Datum Abfahrt'), month('Datum Abfahrt'), day('Datum Abfahrt'));
      let myEnd := date(year('Datum Rückkehr'), month('Datum Rückkehr'), day('Datum Rückkehr'));
      for d in select Reisetag where Reisekosten = my do
          if d.Reisetag < my.'Datum Abfahrt' or d.Reisetag > my.'Datum Rückkehr' or
              my.Reisedauer = 1 then
              delete d
          end
      end;
      if Reisedauer > 1 then
          for i from myStart to myEnd + 1 step 1000 * 60 * 60 * 24 do
              let myDate := first(select Reisetag where Reisetag = i and Reisekosten = my);
              if not myDate then
                  let newDate := (create Reisetag);
                  newDate.(
                      Reisekosten := my;
                      Reisetag := i;
                      Reiseziel := first(select Reiseziel where 'Land / Region' = "Deutschland")
                  )
              end
          end
      end
      

      Wenn man diese if-Abfrage (Zeile 13) weglässt, sollte(!) er bei Bedarf auch einen Tag anlegen, dann aber unbedingt auch "my.Reisedauer = 1" (Zeile 9) im vorherigen Loop raus nehmen, sonst löscht er den Eintrag mutmaßlich direkt wieder... ;)

      Ohne Gewähr, die DB ist bei mir produktiv, testen kann ich es ad hoc nicht.

    • Kruna
    • vor 3 Monaten
    • Gemeldet - anzeigen

    Hallo Thorsten, ich habe es gerade mal ausprobiert (if-Abfrage (Zeile 13) und my.Reisedauer = 1" (Zeile 9) weglassen) und es hat geklappt - die Ansicht Reisetage wird 'angelegt' ! Super und tausend dank.👍

     

    Gruß Kruna

Content aside

  • vor 3 MonatenZuletzt aktiv
  • 19Antworten
  • 914Ansichten
  • 3 Folge bereits