Berechnung der offenen Produktionsmengen

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

Janni

Berechnung der offenen Produktionsmengen

Beitrag von Janni » Mi, 20.04.2016 11:04

Guten Tag,

ich habe folgendes Problem bei der Programmierung einer Auftragsdatenbank :

Ich möchte eine Tabelle mit den offenen Aufträgen anlegen. Diese soll wie folgt strukturiert sein:

Auftragsnummer Produkt Offene Auflage
1001 (PK) Broschur 1000

Nun habe ich eine zweite Tabelle mit der produzierenden Kostenstellle:

Auftragsnunmer Mitarbeiter Produzierte Menge
1001 (PK) 101 500


Wenn nun also der Mitarbeiter 500 Exemplare produziert, kann ich das mittels Ansicht per Formel einfach abziehen lassen, Dann wird die neue, noch offene Auflage in der Auftragsansicht angezeigt:

Auftragsnummer Produkt Offene Auflage
1001 (PK) Broschur 500


Soweit so gut. Ich könnte jetzt auch eine zweite Maschine einbinden, also zweite Kostenstelle, welche die anderen 500 Exp. produziert. Das funktioniert auch alles. Aber wie bekomme ich es hin, dass die gleiche Maschine den Rest der Auflage produziert und es in der Auftragsdatenbank nur einmal angezeigt wird?

Momentan sieht das nämlich so aus :
Auftragsnunmer Mitarbeiter Produzierte Menge
1001 (PK) 101 500
1001 (PK) 101 500

Auftragsnummer Produkt Offene Auflage
1001 (PK) Broschur 500
1001 Broschur 500

Normal müsste ja nun bei "Offene Auflage" ein Wert von 0 stehen. Wie bekomme ich das hin? Ich weiß momentan leider echt nicht mehr weiter.

Ich würde mich über eine Antwort freuen !

Grüße

Jan

Toxitom
********
Beiträge: 3505
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Berechnung der offenen Produktionsmengen

Beitrag von Toxitom » Mi, 20.04.2016 11:32

Hallo Jan,

hmm, also trotz mehrmaligen durchlesens ist mir Deine Struktur nicht wirklich klar.

Also: Du hast eine Tabelle (T1) mit den Auftragsdaten: Auftragsnummer Produkt Auflage

Eine zweite Tabelle (T2) erfasst die Produktion: Auftragsnummer Mitarbeiter 'Produzierte Menge'

Der gemeinsame Schlüssel ist die Auftragsnummer.

Nun möchtest du gerne eine Ergebnistabelle, die Dir anzeigt, wieviel Restauflage noch produziert werden muss?

Nun, dafür nutzt man an sich Select-Abfragen, die Dir diesen Wert jederzeit problemlos darstellen können - in dem Fall eben mit Unterabfragen.

Soetwas wie:
Select T1. Auftragsnummer, T1 Produkt, T1.Auflage, T1.Auflage-SUM(T2.'Produzierte Menge') From T1..T2 Where T2.Auftragsnr = T1.Auftragsnummer) etc.

Stichwort: InnerJoin

Soetwas liesse sich theoretisch auch in einen View einbinden - ist aber eher unüblich. Views stellen kombinierete Abbildungen von Tabellen dar - nicht unbedingt Select-Anweisungen.

Vielleicht hilft es :)
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic

Jacko7350
*
Beiträge: 15
Registriert: Mi, 17.02.2016 11:04

Re: Berechnung der offenen Produktionsmengen

Beitrag von Jacko7350 » Mi, 20.04.2016 13:23

test.odb
(32.9 KiB) 125-mal heruntergeladen
Hey, Jan hier !
Erstmal vielen Dank für deine Antwort !

Ich denke, du hast mein Anliegen ganz gut verstanden. Ich danke dir auch für den Hinweis von InnerJoin.

Allerdings will es immernoch nicht so richtig klappen. Wenn ich deinen Vorschlag (angepasst) in der Abfrage eingebe, erhalte ich jedesmal einen Syntaxfehler :(

Ich habe diesmal die datenbank angehangen. Vllt hast du oder wer anderes ja kurz Lust mal reinzuschauen. Dort ist auch nochmal gut einsehbar, was die Problematik ist. In der Ansicht ist ein und der selbe Auftrag mehrmals mit einer kleinen Teilauflage produziert. Die noch zu produzierende Menge ist somit leider immer falsch :(

RobertG
*******
Beiträge: 1735
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Berechnung der offenen Produktionsmengen

Beitrag von RobertG » Mi, 20.04.2016 19:48

Hallo Jan,

ich nehme an, dass es um die Summierung von des Felds "Fortdruck" geht, das bei gleicher "Auftragsnummer" jetzt insgesamt schon 3000 Drucke gemacht hat. Richtig?
Ersetze einmal den Inhalt Deiner Ansicht durch diesen:

Code: Alles auswählen

SELECT "kunden"."Kundennummer", "a"."Auftragsnummer", "kunden"."Name", "a"."Objekt", "a"."Auflage", "Auflage" - (SELECT SUM("Fortdruck") FROM "maschine" WHERE "Auftragsnummer" = "a"."Auftragsnummer")  AS "Noch zu drucken", (SELECT SUM("Fortdruck") FROM "maschine" WHERE "Auftragsnummer" = "a"."Auftragsnummer") AS "Bereits gedruckt" FROM "eingang" AS "a", "kunden" WHERE "a"."Kundennummer" = "kunden"."Kundennummer"
Da wird alles zu einem Auftrag zusammengezählt. Das Ergebnis ist bei Deinen Angaben eine einzige Datenzeile mit allen Abzügen aus dem Druck.

Gruß

Robert

Jann

Re: Berechnung der offenen Produktionsmengen

Beitrag von Jann » Do, 21.04.2016 09:06

Hey Robert,

jetzt funktioniert es endlich und tut das, was ich wollte :) !

Vielen vielen Dank, du hast mir sehr geholfen !

Liebe Grüße

Jan

Jacko7350
*
Beiträge: 15
Registriert: Mi, 17.02.2016 11:04

Re: Berechnung der offenen Produktionsmengen

Beitrag von Jacko7350 » Mo, 20.06.2016 13:04

Ich muss das Thema leider doch nochmal anfangen.

Mit der Select eingabe kam ich in dem ersten Beispiel gut zurecht. Anders sieht es jetzt momentan aus.

Vllt kannst du mir hier nochmal helfen?

Ich habe die Druckliste "F1.0.Druckplanung". Da sind quasie alle Druckaufträge drin und diese sind durch Signaturen gekennzeichnet.

Nun habe ich "F1.1.Druckmaschine_1" und "F1.2.Druckmaschine_2". Diese produzieren unabhängig voneinander.

In der Abfrage soll nun immer stehen, wieviel noch zu produzieren ist. Unabhängig davon , ob eine Maschine produziert oder beide. Zudem soll mir immer die aktuelle Menge an fehlenden Druckbogen angezeigt werden und nicht jede Rechnung einzeln. Wie also oben schonmal angesprochen.

Mein Code :

Code: Alles auswählen

SELECT "F1.0.Druckplanung"."Auftragsnummer", "F1.0.Druckplanung"."Signatur", "F1.0.Druckplanung"."Fortdruckbogen" - IFNULL( "F1.1.Druckmaschine_1"."Gedruckte Auflagebogen", 0 ) - IFNULL( "F1.2.Druckmaschine_2"."Gedruckte Auflagebogen", 0 ) AS "Restliche Auflagebogen" FROM "F1.0.Druckplanung" LEFT JOIN "F1.1.Druckmaschine_1" ON "F1.1.Druckmaschine_1"."Signatur" = "F1.0.Druckplanung"."Signatur" LEFT JOIN "F1.2.Druckmaschine_2" ON "F1.2.Druckmaschine_2"."Signatur" = "F1.0.Druckplanung"."Signatur"

Also unabhängig voneinander werden sie so schonmal ausgegeben. Allerdings werden die werte der jeweiligen Signatur noch nicht addiert :( Habe das mit deinem Code oben versucht umsetzen aber ich habe jedesmal einen Syntax-Fehler :(

RobertG
*******
Beiträge: 1735
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Berechnung der offenen Produktionsmengen

Beitrag von RobertG » Di, 21.06.2016 07:35

Hallo Jan,

die Abfrage passt nicht zu Deiner bisherigen Datenbank. Ohne ein Beispiel kann ich schlecht nachvollziehen, welches Problem Du dabei hast.

Gruß

Robert

Jacko7350
*
Beiträge: 15
Registriert: Mi, 17.02.2016 11:04

Re: Berechnung der offenen Produktionsmengen

Beitrag von Jacko7350 » Di, 21.06.2016 10:52

Hey Robert,

tut mir sehr leid. Ich habe die Tabellen als Datenbank angelegt und hier jetzt nochmal hochgeladen.

Wie gesagt, die unabhängige Berechnung von 1+n Maschinen funktioniert soweit. Aber in der Abfrage werden die gesamten Produktionsmengen der jeweiligen Signatur leider nicht summiert und ausgegeben sondern jeweils einzeln.

Ich habe das schon mit deiner Hilfestellung oben versucht. Bei einer Maschine habe ich das auch soweit mal hinbekomen. Bei zwei Maschinen funktionierte es leider bisher noch nicht :(
Dateianhänge
problemfall.odb
(3.74 KiB) 100-mal heruntergeladen

RobertG
*******
Beiträge: 1735
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Berechnung der offenen Produktionsmengen

Beitrag von RobertG » Di, 21.06.2016 21:02

Hallo Jan,

ich habe das einmal kurz und leider dann vielleicht nicht auf die einfache Tour gelöst, da ich nicht so viel Zeit habe:

Code: Alles auswählen

SELECT "a".*, "a"."Fortdruckbogen" - "a"."Gedruckte Auflagebogen" AS "Restliche Auflagebogen" FROM (SELECT "F1.0.Druckplanung"."Auftragsnummer", "F1.0.Druckplanung"."Signatur", "F1.0.Druckplanung"."Fortdruckbogen", SUM(IFNULL( "F1.1.Druckmaschine_1"."Gedruckte Auflagebogen", 0 )+ IFNULL( "F1.2.Druckmaschine_2"."Gedruckte Auflagebogen", 0 )) AS "Gedruckte Auflagebogen" FROM "F1.0.Druckplanung" LEFT JOIN "F1.1.Druckmaschine_1" ON "F1.1.Druckmaschine_1"."Signatur" = "F1.0.Druckplanung"."Signatur" LEFT JOIN "F1.2.Druckmaschine_2" ON "F1.2.Druckmaschine_2"."Signatur" = "F1.0.Druckplanung"."Signatur" GROUP BY "F1.0.Druckplanung"."Auftragsnummer", "F1.0.Druckplanung"."Signatur", "F1.0.Druckplanung"."Fortdruckbogen") AS "a"
Der Haken bei Deiner Auflistung war, dass die Abfrage natürlich zwei Datensätze darstellt, da in einer Tabelle 2 und in der anderen 1 Datensatz waren. Hier musst Du zuerst die einzelnen Elemente gruppieren und die Summen von den bereits erfolgten Drucken zu den Gruppierungen aufstellen. Das Ergebnis aus dieser Auflistung habe als Grundlage für die Abfrage genommen, bei der aus den geplanten Drucken und den Erfolgten Drucken die Differenz gezogen wird. Das geht so nicht direkt innerhalb einer Gruppierung.

Gruß

Robert

Jacko7350
*
Beiträge: 15
Registriert: Mi, 17.02.2016 11:04

Re: Berechnung der offenen Produktionsmengen

Beitrag von Jacko7350 » Mi, 22.06.2016 18:30

Hey Robert,

vielen Dank ! Ich wollte das ganze erst ein wenig verinnerlichen und selbstständig auf weitere Beispiele anwenden bevor ich mich melde.

Es funktioniert ganz wunderbar und ich denke, ich kann es ganz gut nachvollziehen. Vielen Dank also, es hat mich sehr viel weitergebracht.

Schöne Grüße

Jan

Jacko7350
*
Beiträge: 15
Registriert: Mi, 17.02.2016 11:04

Re: Berechnung der offenen Produktionsmengen

Beitrag von Jacko7350 » Mo, 15.08.2016 18:11

Halli Hallo,

es ist mal wieder an der Zeit ein paar Probleme mit Produktionsmengen zu haben ^^

Ich habe meine alte Produktionsdatenbank noch einmal überarbeitet. Es ging ja immer darum, dass ein Auftrag an zwei Produktionsmaschinen produziert werden sollte und in der Abfrage diese dann miteinander berechnet werden sollten. Unabhängig davon, ob eine Maschine produziert hat oder beide.
Bisher habe ich für diese Aufträge nur eine einzige "Signatur" verwendet. Diese bestand aus einem VARCHAR text. Bei einem hohen Datenbankvolumen wurde die rechenzeit so leider jedoch recht hoch, weshalb ich mich dafür entschieden habe, das ganze nochmal aufzufächern in "Aufragsnummer", "Version" "Produktteil" und "Bogennummer". Diese vier Parameter zeigen im Grunde "hey, das ist der Auftrag mit der Version, davon der Umschlag und Bogensatz nummer 1".

So, das ganze soll nun an einer, zwei oder beiden Maschinen laufen. Bisher haben wir das hier über den sql code direkt gelöst. das funktionierte bei einem parameter, der passen musste auch gut. jetzt müssen jedoch vier parameter zueinander passen und da bekomme ich probleme :(

Zudem würde ich das ganz gerne über das Frontend bzw die Benutzeroberfläche direkt lösen und nicht über den sql code. Gibt es da eine Möglichkeit?!


Wäre für Hilfe dankbar und viele Grüße

Jan
Dateianhänge
problemdatenbank.odb
(3.42 KiB) 91-mal heruntergeladen

RobertG
*******
Beiträge: 1735
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Berechnung der offenen Produktionsmengen

Beitrag von RobertG » Di, 16.08.2016 19:14

Hallo Jan,

auch nach mehrmaligem Durchlesen verstehe ich jetzt nicht, wovon eine Summe gezogen werden soll und wonach irgendwelche Felder gruppiert werden sollen.

Grundsätzlich aber: Wenn es um Geschwindigkeit geht, dann ist die Datenbank beim Berechnen deutlich schneller irgendetwas auf der Benutzeroberfläche. Denn die Benutzeroberfläche ist zwar für Dich der kürzeste Weg, aber eben nicht für die Daten. Dass Du das Ergebnis Deiner Eingaben vernünftig sehen kannst, das sollte ein Formular lösen. Nie aber die Berechnung.

Gruß

Robert

Jacko7350
*
Beiträge: 15
Registriert: Mi, 17.02.2016 11:04

Re: Berechnung der offenen Produktionsmengen

Beitrag von Jacko7350 » Di, 16.08.2016 21:08

Hey Robert,

sorry für die schlechte Beschreibung. Ich habe das Beispiel nochmal etwas umgeändert.

Also :

Zwei Maschinen produzieren einen Auftrag. Der Auftrag wird identifiziert durch "Auftragsnummer" , "Version" , "Produktteil".

Wenn zwei Maschinen also beide einen Auftrag mit diesen 3 Kennzeichnungen fertigen, dann fertigen sie genau das gleiche.

Maschine 1 fertigt nun einen Auftrag z.B. mit der Auftragsnummer 1234 , der Version Englisch , den Umschlag des Produktes. Menge : 500 Stk.
Maschone 2 fertigt nun ebenfalls : Auftragsnummer 1234, Version Englisch, Umschlag 500 Stk.
und zusätzlich
Maschine 2 : 1234, Version Englisch, Inhalt 300 Stück

Dann wären dies insgesamt 1000 Stk. für 1234, Englisch Umschlag und 300 Stück für 1234 Englisch Inhalt.

Ich habe es so versucht anzuweden wie du oben bereits mal beschrieben hattest. Also für jede Maschine die Parameter in einer ansicht gruppiert und dann die fertigte Menge summiert. In der Abfrage sollten dann beide maschinen miteinander berechnet werden. Die Abfrage soll dann am Ende die insgesamt gefertigten Mengen ausgeben. Ganz egal, ob sie an einer Maschine oder an beiden Maschinen gefertigt wurden.Leider funktioniert das nciht :(
Dateianhänge
problemdatenbank.odb
(5.5 KiB) 91-mal heruntergeladen

RobertG
*******
Beiträge: 1735
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Berechnung der offenen Produktionsmengen

Beitrag von RobertG » Mi, 17.08.2016 08:34

Hallo Jan,

die letzte angehangene Datenbank lässt sich leider nicht komplett laden. Der Zugriff auf die Tabellen ist wegen eines "Error im Scriptfile" nicht möglich. Kannst Du nicht nur die vorhergehende Datenbank um ein paar Datensätze ergänzen, damit auch irgendetwas in den Summen berechnet werden kann? Oder ist die letzte Version schon wieder anders von den Feldern her?

Bei der Bildung von Summen oder ähnlichem solltest Du immer einen Alias für das daraus entstehende Feld vergeben. Dann klappt der Aufruf von solchen Abfragen oder Ansichten z.B. auch später bei Berichten besser.

Gruß

Robert

Jacko7350
*
Beiträge: 15
Registriert: Mi, 17.02.2016 11:04

Re: Berechnung der offenen Produktionsmengen

Beitrag von Jacko7350 » Mi, 17.08.2016 09:09

Guten Morgen Robert,

sehr seltsam. Jetzt müsste man es öffnen können.

Habe eben Alias für die antworten von m1 und m2 verwendet. leider werden nach wie vor nur die berechnungen in der ansicht ausgegeben, bei denen BEIDE maschinen dran beteildigt waren....trotz ifnull.
Dateianhänge
problemfalldatenbank.odb
(6.35 KiB) 94-mal heruntergeladen

Antworten