0

Artikel aus Untertabelle zusammenfassen

Hallo zusammen, 

Ich stehe vor einer Fragestellung, die ich mit meinen Kompetenzen nicht lösen kann.(Bin auch kein Berufsprogrammierer, finde aber das Ninox ein echt cooles Tool für bedarfsgerechte Lösungen ist.) 

Ich brauche also jemanden der mir hilft folgendes Problem zu lösen.

Es geht um die Materialbedarfsermittlung in diversen ProjektenGrundsätzlich gibt es jeweils ein Projekt in dem es mehrere Räume gibt. In diesen Räumen gibt es mehrere Objekte, für die mehrere Artikel aus einer Liste  Artikel-Stamm ausgewählt werden.

Soweit so gut.

In der Tabelle Projektbedarf soll nun der ganze Materialbedarf (also alle die gesamte Menge der jeweils ausgewählten Artikel aus den Objekten der Räume) zusammengefasst werden. Bei jeder Änderung eines Artikels in einem zugehörigem Objekt sollte die Tabelle Projektbedarf idealerweise automatisch aktualisiert werden.

Die Tabelle Projektbedarf soll dann per Knopfdruck in eine Tabelle Rechnung für den Kunden übertragen werden und für Bestellungen bei den Lieferanten genutzt werden.

 

Ich habe nun seit Tagen schon Stunden versucht das mit meine Fähigkeiten zu lösen und komme nicht auf den Punkt einer brauchbaren Lösung. Ich scheitere schon dabei, die Artikel in der Tabelle Projektbedarf zusammenzufassen. Von einer automatischen Aktualisierung bin ich noch weit entfernt. 

 

delete Projektbedarf;

let my := this;

let myAdr := 'Projekt-Nr:';

let myDatum := Datum;

let myArtikel := (select Artikel where 'PrjNr:' = myAdr);

for n in Projektbedarf do

for p in myArtikel do

if n.Produktname = p.Artikelliste.Produktbeschreibung then

n.(Menge := n.Menge + p.Menge)

else

let new := (create Projektbedarf);

new.(Projekte := my);

new.(Produktname := p.Artikelliste.Produktbeschreibung);

new.(Preis := p.Preis);

new.(Menge := p.Menge)

end

end

end

 

Herzlichen Dank im Voraus für Hilfestellung

Jürgen

Das Datenmodell zum besseren Verständnis im AnhangBildschirmfoto 2019-09-09 um 08.11.48

6 Antworten

null
    • webportal
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ergänzung:

    Mein Gedanke zum Einlesen in die Tabelle Projektbedarf war folgender:

    Jeden Datensatz in der Tabelle Artikel Projektbezogen(mit Hilfe einer ProjektNr:) lesen und prüfen, ob dieser Artikel schon in der Tabelle Projektbedarf für dieses Projekt vorkommt. Wenn ja, nur zum bestehendne Aritkel die Menge dazu addieren. Wenn Nein, dann einen neuen Datensatz für den Artiel in der der Tabelle Projektbedarf anlegen.

    Klingt eigentlich nicht so kompliziert.  

    Einen neuen Datensatz anzulegen klappt einwandfrei. Allerdings funktionieren meine Lösungsversuchen zum Abfragen, ob ein Artikel (Datensatz) in der Tabelle Projektbedarf vorhanden ist, nicht (bis zum addieren komme ich also garnicht). 

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Also, von der Tabelle 'Projekte' ausgehend könnten die verschachtelten Schleifen vielleicht so (oder ähnlich) aussehen:

    let myProjekt := this;
    for rLoop in Raum do
        let myRaum := rLoop;
        for oLoop in rLoop.Objekt do
            let myObjekt := oLoop;
            for aLoop in oLoop.Artikel do
                let myArtikel := aLoop;
                let myPB := first(select Projektbedarf where Projekte = myProjekt and Artikel = myArtikel);
                if myPB != null then
                    myPB.(Menge := myPB.Menge + aLoop.Menge)
                else
                    let newPB := (create Projektbedarf);
                    newPB.(Artikel := myArtikel.Artikelbez);
                    newPB.(Menge := aLoop.Menge);
                    newPB.(Projekte := myProjekt)
                end
            end
        end
    end

    Ich fürchte allerdings, dass die Idee generell mit dem Datenmodell nicht funktioniert. Denn es sind ja alles 1:N-Verbindungen. Das heißt, jeder Raum, jedes Objekt und jeder Artikel kann nur ein mal zugeordnet werden. Man müsste statt dessen wohl mit N:M-Verbindungen arbeiten.

    Allerdings unter Vorbehalt, denn ich bin mir nicht sicher, ob ich die Idee überhaupt richtig verstanden habe.

    • webportal
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Vielen Dank, aber ich komme damit auch nicht weiter. Die Artikel tauchen in der Liste Prjoektbedarf nicht zusammegerechnet auf.

    Mir geht es geht im Prinzip um ein Werkzeug, für das  Aufmass bzw. MaterialBedarfsermittlung auf der Baustelle. 

    Da gibt es ein Projekt mit Etagen/Wohnungen/Räumen innerhalb der Räume gibt es Ojekte/Bereiche/Flächen etc

    diesen werden die benötigten Artikel zugewiesen.

    Die Tabelle Projektbedarf soll die einzelnen Artikel nun einfach mengenmässig zusammenfassen, damit bestellt und abgerechnet werden kann.

    Eigentlich ein gewöhnlicher Vorgang auf einer Baustelle. 

     

    Eigentlich muss ich ja nur innerhalb der Tabelle Projektbedarf wissen wieviele verschiedene Artikel vorhanden sind, die Mengen aller gleichnamigen Artikel zusammenrechnen und die überflüssigen dann löschen.  Prinzipiell die Tabelle auf den Inhalt der Statuszeile einer GruBildschirmfoto 2019-09-09 um 21.19.35ppierung mit Summenwerten eindampfen.Bildschirmfoto 2019-09-09 um 21.19.47Hilft da nicht die Funktion unique in irgendeinerweise?

    • webportal
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Copytexter,

    habe nun folgende Lösung gebaselt

    und scheint das Problem zu lösen

     

    delete Projektbedarf;
    let my := this;
    let myDatum := Datum;
    let myPNR := 'ProjektNr:';
    let myUN := unique((select Artikel)['ProjektNr:' = myPNR].Artikelliste.Produktbeschreibung);
    for ii in myUN do
    let myAR := split(ii, ",");
    let newP := (create Projektbedarf);
    newP.(Artikel := item(myAR, 0));
    newP.(Projekte := my)
    end;
    let myPB := (select Projektbedarf)['ProjektNr:' = myPNR];
    for n in myPB do
    let myArtikel := (select Artikel)['ProjektNr:' = myPNR and Artikelliste.Produktbeschreibung = n.Artikel];
    n.(Menge := sum(myArtikel.Menge));
    n.(Summe := sum(myArtikel.Summe));
    n.(Preis := first(myArtikel.Preis));
    n.(Lieferant := first(myArtikel.Artikelliste.Lieferanten.Firma))
    end

     

    wenns noch vereinfact werdne kann, gerne 

    nochmals Danke für Deine Mühe.

    • webportal
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Löse das ganze per Knopfdruck aus - ist auch OK

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    So ganz durchschaue ich die Sache immer noch nicht, aber - wenn's funktioniert ... Was will man mehr!? ;)

Content aside

  • vor 4 JahrenZuletzt aktiv
  • 6Antworten
  • 1720Ansichten