Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Daten in Untertabelle "vererben"

Begonnen von Christian5467, Januar 05, 2022, 12:07:11

⏪ vorheriges - nächstes ⏩

Christian5467

Hallo zusammen,

Ich möchte meine Wareneingänge in Access verwalten.

Dafür habe ich eine Tabelle "Eingang" sowie eine "Untertabelle" Eingangspositionen.
Die Tabelle "Eingang" hat das Feld "Eingang ID" als Autowert. Die Verknüpfung zur Tabelle "Eingandspositionen" erfolgt über eine 1:N Beziehung mit dem Feld "EingangkopfID" in der Untertabelle "Eingangspositionen".
Das funktioniert auch.

Jetzt möchte ich nachträglich die Wareneingänge stornieren können. Das soll entweder pro Position gehen oder für den gesamten Wareneingang. Dafür habe ich in beiden Tabellen das Feld "Storno" als Ja/Nein angelegt.

Wenn ich jetzt den gesamten Wareneingang storniere, möchte ich dass auch automatisch alle Positionen diesesw Wareneingangs storniert werden. Wie kann ich das anstellen?

Danke und Gruß
Christian

MzKlMu

Hallo,
mit einer Aktualisierungsabfrage das die Ja/Nein Felder der Tabelle für das Ufo auf True setzt.
Die Aktualisierungsabfrage muss auf die im Ufo verwendete EingangkopfID gefiltert werden.

Was machst Du mit der Menge wenn storniert wird ?
Gruß Klaus

Christian5467

Vielen Dank für die schnelle Hilfe.

Es handelt sich in diesem Fall um Eingangsbuchungen für Dienstleistungen, hier gibt es dann in diesem Fall keine Weiterverwendung.

Dein Vorschlag bedeutet, dass ich in dem Feld Storno im HF ein Ereignis "Nach Aktualisierung" erstellen soll?
Wie sähe der Code dafür aus?

Danke und Gruß
Christian

MzKlMu

Hallo,
erstelle eine Aktualisierungsabfrage manuell (zunächst ohne Kriterium) mit den bei dir vorhandenen Tabellen/Feldnamen.
Zeige hier den SQL Code dieser Abfrage.
Gruß Klaus

Beaker s.a.

Hallo,
Das Booleanfeld in der Kopftabelle halte ich für überflüssig.
Der Zustand lässt sich jeder Zeit anhand der (gefilterten)
Detailtabelle ermitteln.

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Christian5467

----------
Hallo,
erstelle eine Aktualisierungsabfrage manuell (zunächst ohne Kriterium) mit den bei dir vorhandenen Tabellen/Feldnamen.
Zeige hier den SQL Code dieser Abfrage.
----------

Hallo,
hier der SQL Code für die Auswahlabfrage der beiden Tabellen:

SELECT [Eingang Detail].[WE Kennz 1] AS [Eingang Detail_WE Kennz 1], [Eingang Detail].[WE Nummer], [Eingang Detail].Artikelnummer, [Eingang Detail].Menge, [Eingang Detail].Kosten, [Eingang Detail].Charge, [Eingang Detail].Serialnummer, [Eingang Detail].Ablaufdatum, [Eingang Detail].Information, [Eingang Detail].Storno AS [Eingang Detail_Storno], [Eingang Kopf].[Eingang ID], [Eingang Kopf].Datum, [Eingang Kopf].Lieferant, [Eingang Kopf].[WE Kennz 1] AS [Eingang Kopf_WE Kennz 1], [Eingang Kopf].Bemerkung, [Eingang Kopf].[Rechnung Nr], [Eingang Kopf].Storno AS [Eingang Kopf_Storno]
FROM [Eingang Kopf] RIGHT JOIN [Eingang Detail] ON [Eingang Kopf].[WE Kennz 1] = [Eingang Detail].[WE Kennz 1];

Nach Konvertierung als Aktualisierungsabfrage erhalte ich folgenden SQL Tesxt:

UPDATE [Eingang Kopf] RIGHT JOIN [Eingang Detail] ON [Eingang Kopf].[WE Kennz 1] = [Eingang Detail].[WE Kennz 1] SET;
Ich habe bisher ohne Erfolg probiert...
Vielen Dank für die Hilfe!

Gruß
Christian

MzKlMu

#6
Hallo,
was sind denn die Ja/Nein Felder ?
Der 2. Code ist nicht vollständig. Set kann nicht hinten stehen.

Zeige bitte mal ein Bild des Beziehungsfensters.

Zitat von: ekkehardDas Booleanfeld in der Kopftabelle halte ich für überflüssig.
Sehe ich auch so.

Übrigens, die Objekt und Feldnamen mit den Leerzeichen solltest Du ändern, so lange der Aufwand nicht so groß ist.
Gruß Klaus

Christian5467

Hallo zusammen,

Anbei 2 Screenshots. Der erste der Tabellenbeziehung. Der 2. des SQL Codes, den ich im SQL Fenster der Aktualisierungsabfrage sehe.

Gruß
Christian

Sie dürfen in diesem Board keine Dateianhänge sehen.

Sie dürfen in diesem Board keine Dateianhänge sehen.

MzKlMu

#8
Hallo,
das gezeigte Bild ist kein Bild der Beziehungen. Das ist ein Bild der Verknpüfung in der Abfrage, das hat mit den Beziehungen nichts zu tun.
Beziehungen werden im Beziehungsfenster angelegt und liegen ein für alle mal fest. Beziehunegn und Verknüpfen können gleich sein, müssen aber nicht.

Wenn das gezeigte Bild auch für die Beziehungen gilt (sind überhaupt Beziehungen angelegt?), so wäre diese aber ohnehin falsch. Beziehungen laufen immer über den Primärschlüssel und ein extra Feld in den n-Tabelle als Fremdschlüssel. Bei korrekt angelegten Beziehungen ist "WE Kennz 1" ist in der Detailtabelle überflüssig bzw. falsch. Das musst Du ändern, das wird so nichts. Siehe Bild
Und ändere unbedingt die Feldnamen "Kosten / Einheit" ist eine Katastrophe.

Du solltest Dir die Grundlagen zu Access aneignen.
https://www.access-tutorial.de/
.
.
Gruß Klaus

Christian5467

Hallo,

vielen Dank für die Erklärung. In der tat bin ich gerade dabei, mir einige Kenntnisse mithilfe von Büchern anzueignen. Danke für den Link.

Ich habe das Feld "WE Kennz 1" extra so angelegt, weil ich damit den ersten Teil der "WE Nummer" erstelle. Das Feld "WE Kennz 1" ist in der Tabelle "Eingang Kopf" indiziert ohne Duplikate, insofern ist es mit dem AutoWert der "Eingang ID" vergleichbar. Das Feld habe ich so in der Tabelle gelassen, weil es nicht stört.


Die Beziehungen habe ich nochmal angehängt, sind aber aus meiner Laiensicht für das Problem nicht relvant.
Sie dürfen in diesem Board keine Dateianhänge sehen.

Jedoch nochmal zurück zu meinen Problem? Wie genau kann ich jetzt das Stornokennzeichen vererben?

Vielen Dank und Gruß
Christian

MzKlMu

#10
Hallo,
die Beziehungen sind falsch, zwar nicht alle, aber doch einige.
Zunächst das mit dem bereits beschriebenen WE Kennz 1.
Dann die Materialgruppe, die gehört nicht in die Materialtabelle sondern in die MatUntergruppe. Bei Material ist diese zu löschen..
Dann gibt es noch verwirrende Feldnamen, wieso nennst Du Lieferanten ID der Tabelle LfGruppe nicht LfGruppeID ?

In den Beziehungen stellt man grundsätzlich den Typ 1 ein. Das wird nur in den Verknüpfungen der Abfragen bei Bedarf geändert. Anere Beziehungstypen können zu nicht aktualisierbaren Abfragen führen.
Die Felder Einkauf und Verkauf, wenn das Mengen sind gehören die in ein Feld.

So wie ich die Feldnamen der Fremdschlüsselfelder sehe, hast Du da vermutlich auch Nachschlagefelder in den Tabellen angelegt, die solltest Du auch unbedingt ändern. Nachschlagefelder in Tabellen führen zu Fehlern und sind nur in Formularen sinnvoll.

Deine Feldnamen mit den Sonderzeichen werden Dir regelmäßig lästig werden.

Du fragst zwar hier um Rat, aber die Hinweise ignorierst Du.

Zitat von: undefinedWie genau kann ich jetzt das Stornokennzeichen vererben?
Da gibt es nichts zu vererben, das Feld Storno in der Tabelle "Eingang Kopf" ist überflüssig. Lege im Formularkopf des Ufos einen Button an und nenne den "btnStorno", Beschriftung: "Alles stornieren"
Im Ereignis "Beim Klicken" des Button folgenden Code.

CurrentDb.Execute "UPDATE [Eingang Detail] SET Storno = True WHERE [WE Kennz 1] " & Me.[WE Kennz 1], DbFailOnError
Gruß Klaus

Christian5467

Hallo,

vielen Dank für die Informationen.
Ich ignoriere die Hinweise nicht, ich werde meine Datenbank entsprechend ändern, das wird jedoch etwas dauern, da es dann noch einige Formulare gibt, die ich dann auch anpassen muss. Das kann erst in den folgenden Tagen geschehen.

Nochmals Danke und Gruß
Christian

MzKlMu

Gruß Klaus

Christian5467

Hallo, ich bin es nochmal.

Ich habe jetzt die Betiehungen entsprechend Deinen Hinweisen geändert und einige Feldnahmen überarbeitet und sprechender bezeichnet. Eine Frahe habe ich aber noch zu den beiden Tabellen "Eingang Kopf" und "Eingang Detail"

Mein Ziel ist es für jede Wareneingangsposition eine eindeutige WE Nummer zu erhalten. Diese WE Nummer soll einen Hinweise auf die Lieferung ("Eingang Kopf") und auf die Position beinhalten und erstmal eine gleichbleibende Länge von 9 Stellen haben, wobei die erste Stelle der Buchstabe E sein soll.

Ich habe das aktuell so gelöst:
- Erstellung des Wareneingangs über ein Hauptformular (HF) für Tabelle "Eingang Kopf" und ein eingebettetes Unterformular (UF) für Tabelle "Eingang Detail".
- Im HU habe ich eine Funktion, welche aus dem Buchstaben E und der Summe aus 1000+dem AutoWert Feldes einen 5-stelligen Wert bildet."Exxxx" Dieser Wert ist einzigartig und wird in das Feld WE Kennz 1 geschrieben.
- Das Feld WE Kennz 1 ist dann die Verknüpfung zum Unterformular. Es befindet sich im Unterformular nicht sichtbar im Datensatz.
- Nach der Eingabe des Artikels im Unterformular wird der Wert aus WE Kennz 1 mit dem Autowert der Tabelle "Eingang Detail" zu einer 9-stelligen Buchstaben-Zahlenkombination Exxxxyyyy verknüpft und in das Feld WE Nummer geschrieben.

Deshalb die Krücke mit dem Feld WE Kennz 1.

Wie geht es mit Access Hausmitteln ohne große Programmierung besser?

Vielen Dank für Deine Geduld und Gruß
Christian




DF6GL

#14
Hallo,

ZitatMein Ziel ist es für jede Wareneingangsposition eine eindeutige WE Nummer zu erhalten. Diese WE Nummer soll einen Hinweise auf die Lieferung ("Eingang Kopf") und auf die Position beinhalten und erstmal eine gleichbleibende Länge von 9 Stellen haben, wobei die erste Stelle der Buchstabe E sein soll.


Wozu braucht es eine sprechende Nummer?

Mit Feld [Eingang Detail ID]  hast Du bereits eine eindeutige Nummer für jede Position. Die Zusammenballung von ID-Werten zusätzlich zu einem Buchstaben bringt keinen Info-Gewinn. Und gespeichert werden muss ein solcher Wert auch nicht; der kann jederzeit dort, wo man ihn braucht, neu berechnet werden.



BTW:  Vermeide DRINGEND Sonder- und Leerzeichen bei der Namensgebung, genauso wie reservierte Wörter. 

Stelle alle Beziehungen mit Typ 1 ein. Wenn das nicht geht, stimmt der Tabellenaufbau nicht, bzw. sind fehlerhafte Daten schon gespeichert. (--> befolge Tipps von Klaus. Eigentlich sind es keine Tipps, sondern nötige Vorgaben.)