Makro um in einem Subformular nach Wahl aus Listenfeld ein entsprechend zugehöriges Feld in Spalte zu übertragen

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
marcel00
Beiträge: 11
Registriert: Do 17. Jan 2019, 10:59

Makro um in einem Subformular nach Wahl aus Listenfeld ein entsprechend zugehöriges Feld in Spalte zu übertragen

Beitrag von marcel00 » Do 17. Jan 2019, 11:30

Hallo

in der angehängten Datenbank würde ich gerne im Subformular mit Spalte ID_Subkomponente unter dem Formular Zuordnungen_Komponenten_Grd_List einen Wert aus einem Listenfeld übernehmen. Dieser Wert ist in einer Tabelle Komponenten abgelegt. Nun soll über ein Makro dieser Komponente der zugehörige Bruttopreis in der Spalte Bruttopreis pro Stück übergeben werden. Dabei befindet sich der Bruttopreis ebenfalls in der gleichen Tabelle wie die ID der Komponente selber. Schlussendlich soll Bruttopreis pro Stück mit der Anzahl der Komponente, welche im Subformular eingegeben wird, multipliziert werden, und das Ergebnis in die Spalte Total brutto übertragen werden. Schön wäre abschliessend eine Summe über alle Zeilen in der Spalte Total brutto bilden zu können und das Ergebnis in z.b. einer weiteren Spalte abzulegen.
Ich habe bereits ein Makro S_Insert_Totalbrutto erstellt komme aber nicht weiter. Ermöglicht werden soll das zuvor geschilderte über die Betätigung der Taste Berechnen

Code: Alles auswählen

Sub S_Insert_Totalbrutto
	DIM oDoc AS OBJECT
	DIM oDrawpage AS OBJECT
	DIM oForm AS OBJECT 'usw für alle mit o
	DIM totalbrutto,total AS Double
	oDoc = thisComponent
	oDrawpage = oDoc.drawpage
	oform = oDrawpage.forms.getByName("F_Baugruppen").getByName("SubForm").getByName("SubForm_Grid")
	anzahl = oform.GetByName("Komponente Anzahl")
	stueckpreis = oform.GetByName("Bruttopreis pro Stück")
	totalbrutto = CInt(anzahl.Text)*CDbl(stueckpreis.Text)'anzahl * stueckpreis
	total = oform.getByName("Total Brutto").updateDouble(totalbrutto)
End Sub	
Ich brauche wahrscheinlich etwas mit der Wertzuweisung über .... WHERE ID Komponente
Dateianhänge
RMC Database.zip
(86.96 KiB) 27-mal heruntergeladen

RobertG
Beiträge: 1959
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Makro um in einem Subformular nach Wahl aus Listenfeld ein entsprechend zugehöriges Feld in Spalte zu übertragen

Beitrag von RobertG » Do 17. Jan 2019, 17:51

Hallo marcel00,

ich mache ungerne unnütze Arbeiten. deswegen erst einmal ein Hinweis: In einer Datenbank wird nicht sbgespeichert, was direkt aus anderen Werten berechnet werden kann. Du hast den Bruttopreis (sogar in drei Tabellen - welchen nimmst Du denn nun?) und die Stückzahl (zumindest einmal, in der gleichen Tabelle wie einen der 3 Bruttopreise).

Das was Du in dieser einen Tabelle eintragen willst kannst Du direkt aus den anderen beiden Elementen Anzahl und Preis berechnen. Das Feld ist also nicht notwendig. Dafür nutzt Du eine Abfrage.

Das gesamte Formular kannst Du auf Basis einer Abfrage hin bekommen. Makros würde ich nur dann benutzen, wenn es wirklich nicht anders geht. Versuche zuerst einmal Deine Tabellen in eine passende Beziehung zu bringen und dann eine entsprechende Abfrage zu erstellen, bevor Du mit Kanonen auf Spatzen schießt.

Gruß

Robert
http://de.libreoffice.org/hilfe/dokumentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/map_3/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

marcel00
Beiträge: 11
Registriert: Do 17. Jan 2019, 10:59

Re: Makro um in einem Subformular nach Wahl aus Listenfeld ein entsprechend zugehöriges Feld in Spalte zu übertragen

Beitrag von marcel00 » Do 17. Jan 2019, 18:55

Hallo Robert,

erst mal vielen Dank für die schnelle Antwort.Ich habe eine Baugruppe der ich andere Baugruppen oder Bauteile in einer Anzahl zuweise. Dies geschieht in dem Formular Zuordnungen_Komponenten_Grd_List. Die zugehörige Tabelle ist rel_Komponenten. Ich habe bisher noch keine Abfrage durchgeführt und ersehe keine Möglichkeit wie ich direkt in der Tabelle rel_Komponenten eine Berechnung für die Spalte Total Brutto durchführen lassen kann. Ich habe die Spalte Bruttopreis in der Tabelle rel_Komponenten gelöscht, da diese Information bereits in der Tabelle Komponenten vorhanden ist. Über den Abfrageassistenten sehe ich nur die Möglichkeit bestimmte Felder zu selektieren, um diese dann mit eingebenen Werten zu vergleichen. Ich sehe hier keine Möglichkeit eine Berechnungsvoschrift für ein Feld vorzugeben. Können Berechnungen nur in Formularen ausgeführt werden?

Gruß

marcel00
Dateianhänge
RMC Database.zip
(86.9 KiB) 27-mal heruntergeladen

marcel00
Beiträge: 11
Registriert: Do 17. Jan 2019, 10:59

Re: Makro um in einem Subformular nach Wahl aus Listenfeld ein entsprechend zugehöriges Feld in Spalte zu übertragen

Beitrag von marcel00 » Do 17. Jan 2019, 20:27

Ich habe jetzt eine Abfrage im Query design erstellt, die wie folgt lautet:

Code: Alles auswählen

SELECT "Komponenten"."Bruttopreis", "rel_Komponenten"."Bauteil Anzahl","Komponenten"."Bruttopreis" * "rel_Komponenten"."Bauteil Anzahl" AS "rel_Komponenten"."Bruttopreis gesamt" FROM "rel_Komponenten", "Komponenten" WHERE "rel_Komponenten"."ID_Komponente" = "Komponenten"."ID"
Jetzt bekomme ich einen Syntax Fehler angezeigt. Was ist falsch? Eigentlich sollte aus der Tabelle Komponenten der Bruttopreis und aus rel_Komponenten die Bauteil Anzahl selektiert werden, welche dann miteinander multipliziert werden und das Ergebnis als Bruttopreis gesamt in rel_Komponenten abgelegt werden soll.

RobertG
Beiträge: 1959
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Makro um in einem Subformular nach Wahl aus Listenfeld ein entsprechend zugehöriges Feld in Spalte zu übertragen

Beitrag von RobertG » Do 17. Jan 2019, 21:25

Hallo marcel00,

Du darfst bei dem Alias nicht einen Tabellennamen dabei schreiben. Nicht

Code: Alles auswählen

"Komponenten"."Bruttopreis" * "rel_Komponenten"."Bauteil Anzahl" AS "rel_Komponenten"."Bruttopreis gesamt"
sondern

Code: Alles auswählen

"Komponenten"."Bruttopreis" * "rel_Komponenten"."Bauteil Anzahl" AS "Bruttopreis gesamt"
Die Fehlermeldung ist die allgemeine bei der internen HSQLDB, wenn gar nicht anderes mehr klar ist. Daraus kannst Du leider an dieser Stelle nichts besonderes ablesen.

Gruß

Robert
http://de.libreoffice.org/hilfe/dokumentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/map_3/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

marcel00
Beiträge: 11
Registriert: Do 17. Jan 2019, 10:59

Re: Makro um in einem Subformular nach Wahl aus Listenfeld ein entsprechend zugehöriges Feld in Spalte zu übertragen

Beitrag von marcel00 » Fr 18. Jan 2019, 09:54

Ich habe jetzt eine Abfrage Kalkulation Bruttopreis gesamt erstellt. Wenn ich im Hauptformular Zuordnungen_Komponenten_Grd_List eine Baugruppe anklicke bzw. hinzufüge so werden mir im darunterliegenden Subformular die zugehörigen Komponenten angezeigt, welche ich dort auch verändern bzw. hinzufügen kann. Dabei sind diese Komponenten aus einem Listenfeld auszuwählen. Zugriff erfolgt auf die Tabelle Komponenten. Ich kann dem Subformular im Formularnavigator die Eigenschaft der Abfrage erteilen, kann dann jedoch nicht mehr aus einem Listenfeld die Komponenten hinzufügen oder ändern. Muß jetzt noch ein weiteres Subformular mit der Abfrage erstellt werden, damit Auswahl und Abfrage gleichzeitig möglich sind?
Gruß

Marcel00
Dateianhänge
RMC Database.zip
(86.89 KiB) 25-mal heruntergeladen

RobertG
Beiträge: 1959
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Makro um in einem Subformular nach Wahl aus Listenfeld ein entsprechend zugehöriges Feld in Spalte zu übertragen

Beitrag von RobertG » Fr 18. Jan 2019, 17:45

Hallo Marcel00,

eine Abfrage, die editierbar sein soll, muss die Primärschlüssel aller betroffenen Tabellen enthalten.

Du fasst in Deiner Abfrage bereits Felder von verschiedenen Tabellen zusammen, die in einem Formular eigentlich in entsprechenden Listenfeldern liegen. Dadurch vermeidest Du, dass Du in dem Formular weiter mit den Listenfeldern arbeiten kannst, weil einfach die entsprechenden Fremdschlüsselfelder "ID_Komponente" und "ID_Baugruppe" fehlen.

Die folgende Abfrage mit korrelierenden Unterabfragen für die zu berechnenden Felder würde Dir genügen:

Code: Alles auswählen

SELECT "ID_Baugruppe", "ID_Komponente", "Bauteil Anzahl", 
(SELECT "Bruttopreis" FROM "Komponenten" WHERE "ID" = "a"."ID_Komponente") AS "Brutto", 
"Bauteil Anzahl" * (SELECT "Bruttopreis" FROM "Komponenten" WHERE "ID" = "a"."ID_Komponente") AS "Bruttopreis gesamt" 
FROM "rel_Komponenten" AS "a"
... wobei Du die Feststellung von "Brutto" auch nicht benötigst.

Gruß

Robert
http://de.libreoffice.org/hilfe/dokumentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/map_3/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

marcel00
Beiträge: 11
Registriert: Do 17. Jan 2019, 10:59

Re: Makro um in einem Subformular nach Wahl aus Listenfeld ein entsprechend zugehöriges Feld in Spalte zu übertragen

Beitrag von marcel00 » Sa 19. Jan 2019, 10:51

Hallo Robert

ein weiteres mal vielen Dank. Ich versuche die SQL Anweisung mit der Tabelle a mal nachzuvollziehen. Leider kann ich nach einmaliger Eingabe der SQL Anweisung nicht mehr aus den Query design in den SQL Modus wechseln(Fehler in der SQL Syntax). Es funktioniert ansonsten einwandfrei. Wäre es möglich die Summe über die Spalte Brutto gesamt zu bilden und das Ergebnis als zusätzliche Spalte Kosten gesamt im Hauptformular neben der Baugruppe zu platzieren? Müsste ich dafür eine neue Abfrage erstellen mit einer Spalte ID Baugruppe und einer Spalte für Kosten gesamt? Ich habe nochmal den letzten Stand der Datenbank angehängt. Ich hatte jetzt in der Tabelle Baugruppen die Spalte Kosten gesamt eingefügt, damit ich die Spalte im Hauptformular auswählen kann. Vermutlich kann dies ausgelassen werden und ähnlich wie beim Subformular die Eigenschaft des Hauptformulars in eine Abfrage umgewandelt werden.

Viele Grüße

Marcel00
Dateianhänge
RMC Database.zip
(87.21 KiB) 24-mal heruntergeladen

RobertG
Beiträge: 1959
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Makro um in einem Subformular nach Wahl aus Listenfeld ein entsprechend zugehöriges Feld in Spalte zu übertragen

Beitrag von RobertG » Sa 19. Jan 2019, 12:06

Hallo Marcel00,

wenn Du eine Abfrage mit korrelierender Unterabfrage bearbeiten willst, dann musst Du beim Bearbeiten direkt in den SQL-Modus starten, nicht über die grafische Benutzeroberfläche. Bei manchen Abfragen meint Base, die Abfrage deuten zu können und merkt dann beim Umschalten, dass irgendetwas so ist, dass das nicht ins Schema passt.

Du möchtest jetzt noch die Summe aller "Bruttopreis gesamt" haben? Geht auch über eine korrelierende Unterabfrage, wobei Du allerdings erst einmal klar bekommen solltest, welche Bedingung dafür denn zusätzlich gilt.

Ansonsten baust Du einfach eine entsprechende Abfrage in die andere Abfrage ein:

Code: Alles auswählen

SELECT SUM("rel_Komponenten"."Bauteil Anzahl" * "Komponenten"."Bruttopreis") 
FROM "rel_Komponenten", "Komponenten" 
WHERE "Komponenten."ID" = "rel_Komponenten"."ID_Komponenten"
Das müsste die Gesamtsumme ergeben. Die willst Du aber sicher noch irgendwie nach einer Bedingung filtern, so etwas ähnlichem wie einer Rechnungsnummer z.B.

Gruß

Robert
http://de.libreoffice.org/hilfe/dokumentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/map_3/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

marcel00
Beiträge: 11
Registriert: Do 17. Jan 2019, 10:59

Re: Makro um in einem Subformular nach Wahl aus Listenfeld ein entsprechend zugehöriges Feld in Spalte zu übertragen

Beitrag von marcel00 » Sa 19. Jan 2019, 13:54

Hallo Robert,

es geht um die Auflistung benötigter Komponenten für im Hauptformular eingegebene Hauptbaugruppen und letztlich um die Kosten zur Herstellung der Hauptbaugruppen, welche nichts anderes sind als jeweils die Summe der im Subformular gewählten Unterbaugruppen und Bauteile so wie Montagekosten dieser. Eine Filterung der Summen müsste also in Bezug auf die Hauptbaugruppen erfolgen, welche im Hauptformular stehen, und das Ergebnis der herausgefilterten Summe müsste dann in der Spalte Baugruppe Kosten in der gleichen Zeile wie die jeweilige Hauptbaugruppe stehen.
Im Prinzip können im Formular Komponenten sämtliche Baugruppen, Bauteile und Montageaufwendungen eingegeben werden, welche dann Hauptbaugruppen zugeordnet werden. Aus der Summe der Kosten für die Hauptbaugruppen ergibt sich dann der Mindestpreis des Endproduktes.

Viele Grüße

Marcel

Antworten