0

Massendatenänderung fortlaufende Zahl

ein altes Problem von mir welches immer noch offen ist..

 

wie kann ich per massendatenänderung eine Tabellenspalte mit vortlaufender nummerierung befüllen..  am beispiel in einer Tabelle mit Namen und Vornamen kommt eine Spalte persNR dazu welche anfangs leer als Zahlenfeld definiert ist und nun mit 1-100 befüllt werden muss da schon 100 Personen eingepflegt wurden..

 

an der Internen NR kann mans nicht fest machen da die Zahl nicht fortlaufen ist..

35 Antworten

null
    • bernd
    • vor 5 Jahren
    • Gemeldet - anzeigen

    wenn ich das richtig verstanden habe, gibt es Mitarbeiter in verschiedenen Abteilungen. Einige Mitarbeiter werden dann in andere Abteilungen "ausgeborgt". Nur diese Mitarbeiter sollen eine neue PersonenID bekommen

    ist das so korrekt? 

    • Martin_K
    • vor 5 Jahren
    • Gemeldet - anzeigen

    im Grunde kann man das so sehen..

    die Außenstelle bekommt alle Monate eine aktualisierte Datei mit allen Mitarbeitern 

    korrigiert um Pesionen und Abgängen uvm

    zwei mal im Jahr gibt es eine wiederkehrende Ablöse von Mitarbeitern 

    über das Jahr verteilt gibt es auch in den Abteilungen durch Pension, Krankheit, uvm. außerordentliche Wechsel.

    die PersID ist im Unternehmen eindeutig gebunden und generiert aus Geb.Dat und Nummer

    die AbteilungsPersID ist die Nummer die nur für die Abteilung gilt und von 1 - x Nummeriert ist .

    Das heißt, manche bleiben manche kommen und die AbteilungsPersID muss neu vergeben werden.. 

    heißt ich kann nicht nach PersID oder nach Namen sortieren sondern alle so wie ich sie reihe aufsteigend vergeben werden..

     

    aber lassen wir es gut sein... in der OS X Version funktioniert das Kopieren und Einfügen problemlos ohne Umwege

    • bernd
    • vor 5 Jahren
    • Gemeldet - anzeigen

    letzet Versuch, ok: hier werden alle "neuen" Mitarbeiter eine laufende Nummer vergeben, beginnend mit der letzten (maximalen) bereits vergebene Nummer + 1 der Abgteilung... Alle anderen Mitarbeiter, die eine Nummer bereits haben, werden nicht geändert...

     

    var MID := max((select 'Tabellenname').'persNR');

    for DAS in select 'Tabellenname' where 'persNR' = null do

        MID := MID + 1;

       'persNR' := MID;

    end;

    'persNR' ist der Feldname für die neue Personalnummer

    • Martin_K
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Danke Bernd schaue ich mir an.. 

    • Martin_K
    • vor 5 Jahren
    • Gemeldet - anzeigen

    nein hat nicht wirklich geklappt macht aber nichts.. Danke trotzdem dafür..

    • bernd
    • vor 5 Jahren
    • Gemeldet - anzeigen

    stell doch mal das Problem im Webinar vor, dann ist Birker in Aktion...

    • Maurice
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo, der von Bernd aufgezeigte Ansatz zur Benennung mit Sortierung funktioniert bei mir wie er (fast) soll. Ich hätte gerne nach der Sortierung nach Nachname eine weitere Sortierung nach Vorname und dann erfolgt der Eintrag ins Feld. Meine Versuche mit order by Nachname and Vorname oder umgekehrt liefen ins Leere.

    Maurice

    • Leonid_Semik
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Maurice,

    man kann in Ninox mit order by FELDNAME die Datensätze "virtuell" sortieren. Beim Sortieren nach mehreren "Spalten" kann man order by auch mehrmals verwenden. Dabei ist die reihenfolge der Spalten umgekert der Wunschlogik. 

    ---

    let myCounter := 1;
    for i in ((select TABELLE where BEDINGUNG) order by Vorname) order by Nachname do
    i.(FELDNAME := myCounter);
    myCounter := myCounter + 1
    end

    ---

    Leo

    • Maurice
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Leo. Klappt, vielen Dank.

    • Maurice
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo,

    jetzt ist die Sache doch nicht so einfach.

    Ich habe eine Tabelle RuR mit Personen, die bestimmten Kursjahrgängen zugeteilt sind (die Kursjahrgänge werden über ein Zahlenfeld festgelegt, in dem einfach die Jahreszahl wie 2021 oder 2022 steht bzw. verknüpft mit der dazugehörigen Tabelle Jahrgang. Die fortlaufende Nummer wird dann wie folgt generiert:

    let myCounter := 1;
    let thisKurs := Kursjahrgang.Jahrgang;
    let Kurs := substr(text(Kursjahrgang.Jahrgang), 2);
    for i in ((select '01 RuR' where thisKurs = Kursjahrgang.Jahrgang) order by 'Vorname Ref') order by 'Name Ref' do
    i.(Kurs := substr(text(Kursjahrgang.Jahrgang), 2));
    i.('RuR-ID' := "K" + i.Kurs + "-" + format(myCounter, "000"));
    myCounter := myCounter + 1
    end;

    Also jemand erhält dann beispielsweise die ID: K22-003, der im Jahrgang 2022 ist. Führe ich den Button bei jemandem im Jahrgang 2021 erhalten die Personen des Jahrgangs 2021 eine ID. So weit so gut. Jetzt möchte ich, dass ab dem 1.2. des jeweiligen Jahres keine Änderung der RuR-ID mehr möglich ist. Mein erster Ansatz war, im Feld RuR-ID einen Schreibschutz bei Schreibbar wenn einzubauen mit:

    let Sperrdatum := date(Kursjahrgang.Jahrgang, 2, 1);
    today() < Sperrdatum

    Der Schreibschutz ist aber nicht wirksam durch das Beschreiben durch den Button. Wundert mich, dass der Schreibschutz nicht bei Befehlsflächen wirkt. Da wiegt man sich in falscher Sicherheit.

    Spontan fällt mir als Abhilfe ein, beim Auslösebutton für die Beschriftung eine if-Bedingung einzubauen, die das Sperrdatum nutzt. Gibt es noch andere Wege?

    Der Schreibschutz im Feld RuR-ID ist natürlich unschädlich, da er ja das manuelle Ändern verhindert.