Wie schreibende Liste mit mehreren Tabellen

Paul@GEKKO

Mitglied
Hallo Zusammen,

ich stecke wieder einmal fest und muss um Hilfe bitten!

Ich möchte versuchen, eine "schreibende Liste" zu realisieren, diese über ein Kontextmenü aus dem ediArtikelstamm aufgerufen werden soll.

Hier ein zuerst ein Auszug der Tabellen:
upload_2020-8-13_12-59-24.png

Nun habe ich aus den beiden Tabellen(Tabellen importieren 1:gkkArtikelLieferumfang; 2:gkkLieferumfang) eine Datenquelle erzeugt, am Feld "Status" die Datenreferenz 'LieferumfangInklusive' gesetzt, dann das ganze in einem Listenelement überführt und per Rechte-Maustaste "Schreibzugriff ermöglichen" geklickt und einen Datensatz "recLieferumfang" mit Bezug auf den beiden Tabellen angelegt.

Jedoch ist der Ansatz glaube schon falsch, denn es fehlt die Beziehung zu den beiden Datenquellen (gkkArtikelLieferumfang.LieferumfangID = gkkLieferumfang.ID) und auch die Datenreferenz funktioniert nicht so wie gedacht:

upload_2020-8-13_13-27-26.png

Dort stellte ich mir vor, bei Status zwischen 1 und -1 zu wechseln, für den Benutzer solle dann die Auswahl zwischen 'Inkl.' und 'ohne' erscheinen, ähnlich der Bezeichnung, hier sollte die Datenreferenz alle bereits abgelegten Bezeichnungen zur Auswahl anbieten!
Es soll auch möglich sein, eine neue Bezeichnung händisch einzugeben, diese dann mit einer neuen ID (Aufgezählt) in gkkLieferumfang abgelegt werden soll, dazu dürfen aber keine aktuellen Bezeichnungen bei Änderung geupdatet/überschrieben werden.

Ebenfalls soll man eine neue Zeile schreiben können, diese dann mit ID von gkkLieferumfang in gkkArtikelLieferumfang.LieferumfangID und Status 1,-1(Inkl, ohne) zur Artikelnummer abgelegt werden soll.

Ich habe nun einiges an try&error hinter mir und hoffe hier einige Gedankenanstöße zu bekommen!

In jedem Falle vielen Dank für eure Aufmerksamkeit und Unterstützungen!

MfG Paul@GEKKO
 

Anhänge

  • upload_2020-8-13_12-55-17.png
    upload_2020-8-13_12-55-17.png
    14,9 KB · Aufrufe: 9
  • upload_2020-8-13_12-55-37.png
    upload_2020-8-13_12-55-37.png
    28,8 KB · Aufrufe: 8
Wie zwei Tabellen in einem Datensatz hinterlegt werden, schauen Sie bitte bei recArtikelstamm.Sage.Wawi. Dort werden Felder aus KHKArtikel (Artikelnummer) und KHKArtikelVarianten (Artikelnummer, AuspraegungID) in einem Datensatz zusammengeführt. Ansonsten schauen Sie sich bitte in der Hilfe das Kapitel "Zusammenhänge der Metadatenobjekte" an. Dort sind auch Datenreferenzen beschrieben. Auch eine schreibende Liste wird dort erstellt (allerdings nur auf eine Tabelle).

Hallo Zusammen,

ich stecke wieder einmal fest und muss um Hilfe bitten!

Ich möchte versuchen, eine "schreibende Liste" zu realisieren, diese über ein Kontextmenü aus dem ediArtikelstamm aufgerufen werden soll.
:
:
Dort stellte ich mir vor, bei Status zwischen 1 und -1 zu wechseln, für den Benutzer solle dann die Auswahl zwischen 'Inkl.' und 'ohne' erscheinen, ähnlich der Bezeichnung, hier sollte die Datenreferenz alle bereits abgelegten Bezeichnungen zur Auswahl anbieten!
Es soll auch möglich sein, eine neue Bezeichnung händisch einzugeben, diese dann mit einer neuen ID (Aufgezählt) in gkkLieferumfang abgelegt werden soll, dazu dürfen aber keine aktuellen Bezeichnungen bei Änderung geupdatet/überschrieben werden.

Ebenfalls soll man eine neue Zeile schreiben können, diese dann mit ID von gkkLieferumfang in gkkArtikelLieferumfang.LieferumfangID und Status 1,-1(Inkl, ohne) zur Artikelnummer abgelegt werden soll.
MfG Paul@GEKKO

Ich muss es einfach loswerden: Sind das nicht Fragen, die man mal in einer Schulung stellen sollte, oder einer/m Fachfrau/Fachmann, die/dem man mal für einen Tag bucht? Ich meine, eine konkrete Frage zu einem konkreten Fall hat gute Chancen auf eine Antwort. Aber ... ich stelle mir vor... es soll möglich sein... mit einer neuen ID...es dürfen aber keine... Da sind 25 Nachfragen vorprogrammiert.
 
Ich muss es einfach loswerden: Sind das nicht Fragen, die man mal in einer Schulung stellen sollte, oder einer/m Fachfrau/Fachmann, die/dem man mal für einen Tag bucht? Ich meine, eine konkrete Frage zu einem konkreten Fall hat gute Chancen auf eine Antwort. Aber ... ich stelle mir vor... es soll möglich sein... mit einer neuen ID...es dürfen aber keine... Da sind 25 Nachfragen vorprogrammiert.

Ich habe heute meine Bestätigung zur Teilnahme ans "Bootcamp" bekommen und hoffe dort, auch mal einige spezielle Fragen aufarbeiten lassen zu können! Ich frage gerne speziell und ausführlich, erwarte jedoch keine sehr ausführliche Antwort, eher sowas wie... "siehe mal in den Eigenschaften von..." oder einen Hinweis wie "Ist nur über Makro oder .Net realisierbar", ggf. mit einen Verweis auf einen Rezept aus dem Kochbuch ^^

Wenn der Frust an einer Aufgabe zu groß wird, ist unser Sage-Forum meine erste anlauf Stelle :cool:

...
Ich hole mir nun ersteinmal Inspiration aus den Sage Standards!


Nochmals vielen Dank und MfG Paul@GEKKO
 
Muss es eine schreibende Liste sein? Muss es aus dem Kontextmenü aufzurufen sein?
Wenn ich es richtig sehe, dann ist doch gkkArtikelLieferumfang eine ganz normale 1:N-Beziehung zum Artikel. Sprich Sie können sich doch mit einem Multi-Data-Edit an den Artikelstamm hängen (Beispiel: https://sagegmbh.atlassian.net/wiki...tung+von+zus+tzlichen+Registern+in+Stammdaten)
Mit gkkLieferumfang können Sie eine schreibende Liste als Grundlagendialog machen. Beides zusammen wird nicht funktionieren.
 
Sollte es nicht möglich sein, eine schreibende Liste über "mehrere Tabellen" zu realisieren, würde ich gerne folgendes realisieren:

Eine schreibende Liste für gkkArtikelLieferumfang (Artikelnummer, Status[Datenreferenz 1=inkl.; -1=ohne], LieferumfangID(laufende Nr. mit Datenreferenz auf gkkLieferumfang[ID; Bezeichnung])

Nun mal Datenreferenzen außen vor, ich komme nur bis zu dieser Stelle:
upload_2020-8-14_14-19-15.png

Jedoch habe ich in keiner der beiden Tabellen einen "Timestamp"(siehe Abbildung, rechts: Eigenschaften dtsgkkArtikelLieferumfang) zur Verfügung und wüsste nicht, wie ich den AppDesigner dazu bringe, nicht mehr danach zu fragen!?!
Auch das setzen eines Feldes des Datensatzes in RowVersion1 führte zu der selben Meldung bei der Vorschau des Data-Edit-Elements: "Definition fehlerhaft"

Meiner Meinung nach, passt das Konzept "schreibende Liste" hier noch am besten, ich lasse mich gerne auch über mögliche Konflikte oder Nachteile aufklären ^^...

Wie kann ich das Pflichtfeld "RowVersion-Feld Tabelle1" befüllen, oder welche Eigenschaften müsste ich anpassen?


Vielen Dank und MfG Paul@GEKKO
 
Zuletzt bearbeitet:
Ein Datensatz kann aus maximal zwei Tabellen aufgebaut werden (recArtikelstamm.Sage.Wawi)

Sie brauchen ein Feld wie:
"Timestamp" ROWVERSION,

Des Feld wird für die Behandlung der konkurrierenden Zugriffe benötigt.
 
Ja Super, damit klappt es jetzt auch :)

Nun habe ich gleich das nächste Problem wahrgenommen:

Wenn ich in der Datenquelle gkkArtikelLieferumfang die Where Bedingung "AND gkkArtikelLieferumfang.Artikelnummer = CFN_ParentKeyField(1)" hinzufüge, dann kann ich zwar die Datenquellenvorschau sehen(zur Artikelnummer==ParentKeyField) und auch das lstArtikelLieferumfang korrekt sehen, jedoch habe ich keine Chance bei dem daraus erzeugten Data-Edit-Element, denn wenn ich diesen Filter in der Datenquelle setze, bekomme ich dies:

upload_2020-8-17_13-9-14.png


Lasse ich nun die Bedingung aus der Datenquelle weg, dann bekomme ich immerhin das hier ("ungefiltert"):

upload_2020-8-17_13-10-57.png


Ziel ist es jetzt, dieses Data-Edit-Element mit übergabe der Artikelnummer aus dem Artikelstamm aufzurufen, jedoch ist mir nun völlig unschlüssig, wie ich...
1. ...die Where-Bedingung in der Datenquelle richtig setze?
2. ...das Data-Edit mit den richtigen Parameter aufrufe?

Zum Thema Aufruf habe ich folgendes probiert:
per gbOpenControlCenterDrilldown
https://sagegmbh.atlassian.net/wiki/spaces/S1/pages/109051905/Aufruf+Drilldown-Funktion

per gbOpenAuskunftParameter
oder
MacroStarten(Funktionsaufruf) und im MakroEditor Befehl: DatenEditDialogÖffnen+Parameter1:das Data-Edit-Element;Parameter2:"Parameter1:=Artikelnummer; Parameter1Value"& $[FieldValue(Artikelnummer)]


Da bisher nichts einen Erfolg gebracht hatte, nehme ich an, ich nutze die falschen "Funktionen/Parameter" in der Where-Bedingung der Datenquelle.

Wie setze ich die Where-Bedingung in der Datenquelle richtig, um das Data-Edit(mit schreibender Liste) nach Artikelnummer gefiltert aufzurufen?


Ich bedanke mich nochmals herzlichst für die außerordentliche Unterstützung hier :-D

MfG Paul@GEKKO
 
Ich hab nicht geprüft, ob Sie irgendwo geschrieben haben, welche Version Sie verwenden, daher allgemein: eine Navigationsliste kann erst ab Version 8.1.2 gefiltert werden. Vorher ist das nicht möglich.

Sie verwenden die Makros FestlegenAdHocFilterSuche und DatenEditDialogÖffnen.
Ein Beispiel finden Sie im Kontextmenü ArtikelstammVerkaufspreise.Sage.Wawi, Kontextmenüeintrag Staffelpreise.
 
Guten Tag @ALangmaack-Sage,

vielen Dank für die Info! Diese Variante funktioniert ganz gut und bin hier diesmal auf keinerlei Hürde gestoßen :)
Ich werde dies so als Teil meiner Lösung implementieren...


Beim bearbeiten meines Übungsprojektes begann ich zu zweifeln, ob das Konzept der schreibenden Liste hier der richtige Lösungsweg ist, denn ich vermisse eine "Neue Zeile", mit der ich weiteren Lieferumfang zum Artikel nennen kann! Ich habe ein Kontextmenü mit Standard Sage Funktionen, wie DatensatzKopieren, DatensatzLoeschen, DatensatzNeu,... , angelegt, jedoch kann ich die Datensätze weder Kopieren(Meldung: "Fehler bei der Verarbeitung") und DatensatzNeu erscheint erst garnicht im Kontextmenü!?!!

Nun ist es richtig, dass man den Datensatz nicht kopieren kann, denn jede Angabe eines Lieferumfanges darf nur einmal zum Artikel abgelegt werden (Schlüssel: Artikelnummer und LieferumfangID), jedoch stellt sich nun die Frage:

Wenn es möglich ist, wo und wie gebe ich an, dass an letzter Stelle eine "neue Zeile*" zum Hinzufügen eines Datensatzes vorhanden ist? ...oder muss ich dann zwangsläufig auf ein Multi-Data-Edit Element zurückgreifen...

____________________________________________________________________________
Exkurs Makro-Editor:
Beim herumspielen im MakroEditor habe ich die Funktion "FestlegenLokaleVar" gesichtet, da ist mir der Sinn gekommen, Strings (AppDesigner-Lösung>Grundlagen>Strings) zu "manipulieren", was ganz praktisch sein könnte, aber es scheint so nicht zu Funktionieren!

upload_2020-8-19_13-0-58.png
Was nicht Funktioniert:
String strArtikelnummer mit Index 0 und Wert = 00000000
Parameter1 Parameter2
gekko.ArtikelGekko.strArtikelnummer.0 "Test"
[strArtikelnummer] "Test"
[_strArtikelnummer] "Test"
[strArtikelnummer.0] "Test"
[_strArtikelnummer.0] "Test"
strArtikelnummer "Test"
"strArtikelnummer" "Test"

.
.

.

Ist es denn überhaupt möglich über den Makro-Editor, in den Metadaten, deklarierte Strings zu ändern?

Es wäre eine sehr komfortable Lösung, soetwas über den Makro-Editor zu realisieren.


__________________________________________________________________________________




Danke und MfG Paul@GEKKO
 
Wenn Sie in einer schreibenden Liste neue Zeilen hinzufügen wollen, müssen Sie im Daten-Edit-Element in der Eigenschaft "Editiermodus" = "Editierbar mit Detailbereich" einstellen. Ein neuer Datensatz kann nicht in der Liste angelegt werden. Den Kontextmenüeintrag mit DatensatzNeu brauchen Sie aber trotzdem.

Ihre Manipulation von Strings habe ich nicht verstanden. Sie können in Strings und Meldungen mit Platzhaltern {0}, {1}, {2}... arbeiten, die dann im Makro im Parameter 2 gesetzt werden können. Vielleicht ist es das ja was Sie brauchen.
 
Guten Morgen,

ich würde gerne die im AppDesigner deklarierten Strings nachträglich verändern wollen.
Der String kann dann in der Where-Bedingung genutzt werden, ich glaube diesen könnte ich dann auch als "Standardwert" an geeigneter Stelle verwenden und ich denke, es werden sich noch weiter Anwendungen dafür finden!

Ist es denn Möglich den Wert eines angelegten Strings zu ändern?
upload_2020-8-21_10-26-59.png

MfG Paul@GEKKO
 
Strings können nicht verändert werden. Im Standard (also bei Sage) werden Strings auch in andere Sprachen übersetzt. Da kann eine programmatisch Änderung nicht funktionieren.

Wenn Sie aber ein SQL Kontext bezogen ändern wollen (Sie schreiben was von WHERE-Bedingung), dann schauen Sie sich doch mal den Platzhalter $[Call(...)] an. Der ist sehr flexible, benötigt aber Programmierkenntnisse.
 
OK, dann weiß ich ja bescheid :)

Ich werde mir den Call-Platzhalter mal anschauen, aber vorerst bedanke ich mich und wünsche ein schönes Wochenende!


MfG Paul@GEKKO
 
Zurück
Oben