Ansicht über Relation öffnen

Hallo,

ich würde gern über eine Relation eine Ansicht öffnen lassen. Und zwar habe ich eine Ansicht Betriebsvergleich, wodrin sich ein Container mit allen zugehörigen Belegposten befindet. Die Ansicht Betriebsvergleich und Belegposten sind über eine 1:N Beziehung miteinander verknüpft. Ich möchte nun, dass wenn man im Container auf einen Datensatz doppelklickt, den Beleg zum Belegposten angezeigt bekommt und nicht die Ansicht Belegposten. Belegposten und Beleg stehen natürlich auch in Relation, sodass ich auch bei Layout und Spalten im Container Belegposten die Belegfelder angezeigt bekomme.

Ich habe ein Skript angefangen, komme aber nicht weiter, weil ich keine andere Methode für OpenView finde, außer, dass nur über den Ansichtsnamen geöffnet wird. Bei mir muss sozusagen über den Container geöffnet werden. Deswegen hole ich mir auch die BelegID
–> sSalesDocumentID = cstr(ocur.GetContentsByName(„SalesDocumentID“))

[code]Dim oProject,oActiveView,ocur,oinput,oconts,ocont,oCurrentRecordSet,oCurrentRecord
Dim sSalesDocumentID,bFilter

Set oProject = cRM.CurrentProject
Set oActiveView = oProject.ActiveViews.ActiveView
set oinput=oActiveView.CurrentInputForm(2)
set oconts=oinput.containers
set ocont=oconts.itembyname(„ID.SalesDocumentItems.IntercompanyComparisonID#{E49A9175-AAE4-4FF8-B36A-389969161129}“)
set ocur=ocont.CurrentRecord

'Set oCurrentRecordSet = oActiveView.CurrentRecordSet
'Set oCurrentRecord = cRM.CurrentProject.ActiveViews.ActiveView.CurrentRecordset
'Set oCurrentRecord = oCurrentRecordSet.CurrentRecordsynchronized

sSalesDocumentID = cstr(ocur.GetContentsByName(„SalesDocumentID“))

cRM.CurrentProject.OpenNewViewByName(„SalesDocuments“)
[/code]

Vielleicht kann mir einer helfen.

Viele Grüße
Edith P.

Hallo Edith,

das ist ein auch mir nicht unbekanntes ‚Problem‘. Leider gint es im cRM kein Ereignis ‚Doppelklick im Container‘, das abgefangen werden könnte. Also bleibt Dir nichts anderes übrig, als einen Button anzulegen und den im Container gewählten Beleg per Script zu öffnen.

Nach meiner Erfahrung gewöhnen sich die User schnell an diese Vorgehensweise.

Viele Grüße

Walter

Hallo Walter,

danke für deine Antwort. Das mit dem Button und dem Skript wollt ich auch so machen. Nur stellt sich mir die Frage, ob das so auch funktionieren würde über eine Relation der Tabelle, die im Container angezeigt wird eine andere Ansicht aufzumachen. Klingt bisschen kompliziert, hoffe man versteht es.
Wie ich im ersten Beitrag geschrieben habe, möchte ich die Ansicht Belege öffnen, aus dem Container Belegposten. Dafür würde ich dann auf den Button mit dem Skript klicken, sodass er mir nicht die Belegposten, sondern den damit in Relation stehenden Beleg öffnet.

Reicht es dann aus, wenn man im Skript „cRM.CurrentProject.OpenNewViewByName(„SalesDocuments“)“ ?

Viele Grüße
Edith P.

Hallo Edith,

ganz so einfach ist’s nicht:

Wie Du es in Deinem Script schon richtig machst, setzt Du den CurrentRecord auf den im Container ausgewählten Datensatz.
Dann holst Du Dir aus diesem Record den Feldinhalt, der per Relation mit Deiner Ansicht ‚Belege‘ verbunden ist (BelegID).
Jetzt die Ansicht ‚Belege‘ öffnen bzw. aktivieren, falls Sie schon offen ist, und nach der BelegID filtern.
Und dann evtl. noch die Maskenansicht erzwingen.

Ungetestet:

[code]Dim oProject,oActiveView,ocur,oinput,oconts,ocont,oCurrentRecordSet,oCurrentRecord
Dim sSalesDocumentID, bFilter

Set oProject = cRM.CurrentProject
Set oActiveView = oProject.ActiveViews.ActiveView
set oinput=oActiveView.CurrentInputForm(2)
set oconts=oinput.containers
set ocont=oconts.itembyname(„ID.SalesDocumentItems.IntercompanyComparisonID#{E49A9175-AAE4-4FF8-B36A-389969161129}“)
set ocur=ocont.CurrentRecord
'BelegID holen
sSalesDocumentID = cstr(ocur.GetContentsByName(„SalesDocumentID“))

'Muss die Ansicht ‚Belege‘ geöffnet oder aktiviert werden?
If cRM.CurrentProject.ActiveViews.ItemByName(„Belege“) Is Nothing Then
'Ansicht neu öffnen
cRM.CurrentProject.OpenNewViewByName(„Belege“)
Else
'Geöffnete Ansicht aktivieren
cRM.CurrentProject.OpenActiveViewByName(„Belege“).Activate
End If

'Maskenansicht erzwingen
cRM.InvokeMenu 32783, True

Set oActiveView = oProject.ActiveViews.ActiveView
Set oCurrentRecordSet = oActiveView.CurrentRecordset
'Nach der BelegID filtern
bFilter = oRecordset.SetFilter(„BelegID = 0x“ & sSalesDocumentID)

If bFilter = False Then
MsgBox „Der Filter auf ‚Belege‘ konnte nicht gesetzt werden.“
End If
[/code]

Viele Grüße

Walter

Hallo Walter,

danke für die Hilfe. Es hat geklappt. Hab auch zuerst versucht einen Filter zu erstellen.

VG
Edith P.