Formulareditor

Fragen, Anregungen oder Tipps und Tricks? Hier ist der erste Anlaufpunkt.
Nicht sicher, wo ein Thema hingehört? Hier hinein - wir kümmern uns! :)

Moderator: Forum Moderatoren

Forumsregeln
TM-Startforum - "offen für alle Themen".
Beiträge, die in einen anderen Bereich passen, werden bei Bedarf verschoben.
Antworten
JoergS_inaktiv
Beiträge: 83
Registriert: Dienstag 9. Januar 2007, 14:39
19
Wohnort: Schleswig
Kontaktdaten:

Formulareditor

Beitrag von JoergS_inaktiv »

hallo,

suche einen kleinen Tipp zur Formularerstellung:

Ich möchte gerne von einem TM-Formular "HM-VO.tmf" ein zweites Formular "HM-text.tmf" aufrufen. Einen im einem Textfeld des ersten Formulars eingegebe-nen Text (z.B. "W" oder "E" o.ä.) möchte ich (als Parameter) an das zweite Formular übergeben, um dort mit diesem zu arbeiten.

Das aufrufende Formular enthält nur ein Texteingabefeld mit Namen "SchluesselIn" und unten angegebenen (abgespeckten) Code. Wenn ich hier im Texteinga-befeld ein "W" eintrage und dann über die Tastenkombinationen "Alt+d" und dann "m" das Formular in den Druckmanager gebe, wird vor dem Druck das zweite Formular HM-text.tmf aufgerufen. Dabei soll der Inhalt des Texteingabefelds als Parameter übergeben werden.

Formular HM-VO.tmf -------------------------------------------->

Option Explicit
dim Patform
DIM Api,File
Set PatForm = CreateObject("TMFTools.StandardFormular")
Set Api = PatForm.Api
Dim Param

Sub Form_QueryPrint( ByVal Cancel )
if SchluesselIn.Text = "W" then
Param = SchluesselIn.Text
Set Param=CreateObject ("TMAuto.ParameterList")
App.OpenForm "test\HM-text.tmf",Param
end if
if SchluesselIn.Text = "E" then
Param = SchluesselIn.Text
Set Param=CreateObject ("TMAuto.ParameterList")
App.OpenForm "test\HM-text.tmf",Param ' "Param" soll als Parameter übergeben werden
end if
End Sub

---------------------------------------------------------------<

Im zweiten (aufgerufenen) Formular findet sich ebenfalls nur ein Texteingabefeld "hm", dessen Inhalt vom übergebenen Parameter (Inhalt des Texteingabefelds des 1. Formulars) abhängig sein soll und dieser Code:

Formular Hm-text.tmf ----------------------------------------->

Option Explicit
dim texta, textb
texta = "Text-A" 'Anzeigetext Variante 1
textb = "Text-B" ' 2

Sub Form_OnLoad
Call fillHM
end sub

sub fillHM
'if Param = W then
hm.Text = texta
'end if
end sub

---------------------------------------------------------------<

Wenn ich im 2. Formular die Zeilen " 'if Param = W then" und " 'end if" auskommentiere, bekomme ich bei der Ausführung die Fehlermeldung:

" Source:'Laufzeitfehler in Microsoft VBScript'
Line:15 Char:4
Error:0 'Variable ist nicht definiert: 'Param' ' "

Meine Frage ist jetzt: wie bekomme ich den Parameter "Param" übergeben, so dass das Script korrekt läuft?


Für Ihre Hilfe - Vielen Dank!

joergschoenen
Benutzeravatar
wahnfried
Beiträge: 3180
Registriert: Freitag 13. Januar 2006, 23:46
20
Wohnort: Braunschweig

Re: Formulareditor

Beitrag von wahnfried »

Hallo,

im zweiten Formular ist ja auch "param" nicht definiert (im ersten schon):

ergänzen Sie entweder in der Zeile "dim texta, textb" noch den Begriff ", param"
oder setzen Sie an den Anfang der "Sub fillHM" eine Zeile "dim param"
(vielleicht war's das schon?)

Eine schone Lehrstunde, wie man mehrere Textbausteine in ein aufzurufendes Formular übergeben kann, finden Sie in den Ärztlichen Attesten, bei denen von der DinA5-Version per Buttonklick Text und Betreff in das DinA4-Attest übernommen werden. Passwort "tmtest"... (das kann man sogar "höher schachteln", so daß man sich in einem "Attest zweite Seite" die erste DinA4-Seite in einem eigenen Fensterchen anzeigen lassen kann, um beim Weiterschreiben ggfs. auf Gliederungspunkte der ersten Seite Bezug zu nehmen, sie kopieren kann oder so...)

Grüsse, Wahnfried
Stefan
Beiträge: 546
Registriert: Dienstag 15. August 2006, 23:46
20
Wohnort: Land Brandenburg

Re: Formulareditor

Beitrag von Stefan »

Hallo joergschoenen,

woher haben Sie denn das Beispiel? Ich konnte es leider nicht ausprobieren aber das Problem ist, dass 'Param' durch die Deklaration in 'HM-VO.tmf' nicht automatisch in 'Hm-text.tmf' "bekannt" ist.
Wahnfried sprach die fehlende Deklaration schon an und zusätzlich müssen Sie 'Param' o.ä. den übergebenen Parameter aus 'HM-VO.tmf' zuweisen.

Mit 'OpenArgs' müssten Sie an den übergebenen Parameter von 'HM-VO.tmf' kommen, welchen Sie beim Start des Formulars ('Sub Form_OnLoad') der deklarierten Variablen übergeben. Diese überprüfen Sie dann auf den Wert 'E' oder 'W'.
Gruß
Stefan
Benutzeravatar
wahnfried
Beiträge: 3180
Registriert: Freitag 13. Januar 2006, 23:46
20
Wohnort: Braunschweig

Re: Formulareditor

Beitrag von wahnfried »

JoergSchoenen hat geschrieben:Ich möchte gerne von einem TM-Formular "HM-VO.tmf" ein zweites Formular "HM-text.tmf" aufrufen. Einen im einem Textfeld des ersten Formulars eingegebe-nen Text (z.B. "W" oder "E" o.ä.) möchte ich (als Parameter) an das zweite Formular übergeben, um dort mit diesem zu arbeiten.

Das aufrufende Formular enthält nur ein Texteingabefeld mit Namen "SchluesselIn" und unten angegebenen (abgespeckten) Code. Wenn ich hier im Texteinga-befeld ein "W" eintrage und dann über die Tastenkombinationen "Alt+d" und dann "m" das Formular in den Druckmanager gebe, wird vor dem Druck das zweite Formular HM-text.tmf aufgerufen. Dabei soll der Inhalt des Texteingabefelds als Parameter übergeben werden.
welchen Druckmanager meinen Sie? Wenn es der TurboMed-Druckmanager in einem Mehrplatzsystem wäre, hätte ich die Frage, wie bei einem lokal verarbeiteten "param" die Übergabe an einen druckenden (anderen) PC erfolgt. Wenn dagegen der Druck vom selben PC aus erfolgt, an dem der Druckauftrag gestellt ist, ist der "param" noch bekannt, sofern nicht erneut ein gleichartiges Formular verarbeitet wurde (dann wäre "param" inzwischen durch das weitere Formular umdefiniert?).
JoergSchoenen hat geschrieben:Formular HM-VO.tmf -------------------------------------------->

Option Explicit
dim Patform
DIM Api,File
Set PatForm = CreateObject("TMFTools.StandardFormular")
Set Api = PatForm.Api
Dim Param

Sub Form_QueryPrint( ByVal Cancel )
if SchluesselIn.Text = "W" then
Param = SchluesselIn.Text
Set Param=CreateObject ("TMAuto.ParameterList")
App.OpenForm "test\HM-text.tmf",Param
end if
if SchluesselIn.Text = "E" then
Param = SchluesselIn.Text
Set Param=CreateObject ("TMAuto.ParameterList")
App.OpenForm "test\HM-text.tmf",Param ' "Param" soll als Parameter übergeben werden
end if
End Sub

---------------------------------------------------------------<
...und was ist mit anderen Eingaben als "W" und "E"? wäre da nicht ein: else tmtools.msgbox "wollense mir veräppeln?" vor dem letzten "end if" sinnvoll?
JoergSchoenen hat geschrieben:Im zweiten (aufgerufenen) Formular findet sich ebenfalls nur ein Texteingabefeld "hm", dessen Inhalt vom übergebenen Parameter (Inhalt des Texteingabefelds des 1. Formulars) abhängig sein soll und dieser Code:

Formular Hm-text.tmf ----------------------------------------->

Option Explicit
dim texta, textb
texta = "Text-A" 'Anzeigetext Variante 1
textb = "Text-B" ' 2

Sub Form_OnLoad
Call fillHM
end sub

sub fillHM
'if Param = W then
hm.Text = texta
'end if
end sub

---------------------------------------------------------------<
...und wo bleibt "Text-B"?
JoergSchoenen hat geschrieben:Wenn ich im 2. Formular die Zeilen " 'if Param = W then" und " 'end if" auskommentiere, bekomme ich bei der Ausführung die Fehlermeldung:

" Source:'Laufzeitfehler in Microsoft VBScript'
Line:15 Char:4
Error:0 'Variable ist nicht definiert: 'Param' ' "
...Sie meinen sicher: wenn man die Auskommentierung = Zeilen-Inaktivierung durch die vorangestellten Apostrophe entfernt?

Grüsse, Wahnfried
JoergS_inaktiv
Beiträge: 83
Registriert: Dienstag 9. Januar 2007, 14:39
19
Wohnort: Schleswig
Kontaktdaten:

Re: Formulareditor

Beitrag von JoergS_inaktiv »

hallo Wahnfried und Stefan,
erst mal Danke für die Rückmeldungen!

ad 1) im zweiten Formular habe ich absichtlich "Param" nicht definiert, weil es ja keine neue Variable sondern ein Übergabe-Wert sein soll. Habe es jetzt doch mal probiert - Fehlermeldung: " Variable W nicht definiert", dann in "sub fillHM" eine Zeile geändert: 'if Param = "W" then' (also W in " "), => Script läuft ohne Fehlermeldung, zeigt aber nicht den gewünschten Text, da der Übergabetext nicht in "Pa-ram" angekommen ist.

ad 2) sehr interessantes Formular "Ärztliches Attest"!, habe mir das jetzt mal angesehen und versu-che mal daran herum. Sieht so aus, als ob das meine Fragen lösen könnte!!! - Vielen Dank für den Tipp!!!

ad 3) "Mit 'OpenArgs' müssten Sie an den übergebenen Parameter von 'HM-VO.tmf' kommen, wel-chen Sie beim Start des Formulars ('Sub Form_OnLoad') der deklarierten Variablen übergeben." - Genau das ist mein Problem! Wie funktioniert das. Vielleicht finde ich das ja in "Ärztliches Attest".

ad 4) Der Druckmanager ist mir ganz egal. Will das Formular ja nur vor dem Druck prüfen.
(letztlich geht es mir um das alte Formular "Heilmittelverordnung Physikalischen Therapie 7_2004.tmf", welches ich statt der neuen Verordnung "Heilmittelverordnung gemäss Heilmittelrichtli-nien" verwenden möchte. Statt dessen möchte ich eigene Hilfen und Prüfungen einbauen.)
Wenn ich das Formular ausgefüllt habe und mit "Alt + d" + "d" + <OK> ausdrucken möchte, soll vor dem Druck diese Prüfung laufen.

ad 5) Natürlich sollen im fertigen Formular andere Eingaben als "W" oder "E" abgefragt werden, nämlich die Heilmittelschlüssel wie z.B. "WS1a" oder "ZN1b". Und die Abfrage soll nicht über einzelne "if"´s sondern über eine "case"-Reihe laufen und zusätzlich MsgBox-Meldungen bei ungültigen oder fehlenden Schlüsseln. Die geposteten Formulare sind aber völlig abgespeckte Test-Versionen.

ad 6) das mit dem "auskommentieren" haben Sie richtig verstanden.

Zunächst noch mal besten Dank. Werde berichten, wenn das Formular läuft.

JoergSchoenen
Stefan
Beiträge: 546
Registriert: Dienstag 15. August 2006, 23:46
20
Wohnort: Land Brandenburg

Re: Formulareditor

Beitrag von Stefan »

Hallo JoergSchoenen,
JoergSchoenen hat geschrieben:...
ad 3) "Mit 'OpenArgs' müssten Sie an den übergebenen Parameter von 'HM-VO.tmf' kommen, wel-chen Sie beim Start des Formulars ('Sub Form_OnLoad') der deklarierten Variablen übergeben." - Genau das ist mein Problem! Wie funktioniert das. Vielleicht finde ich das ja in "Ärztliches Attest".
...
Mit 'OpenArgs' lag ich falsch. Das gibt es bei VBA und TM arbeitet ja mit VBScript.

Beim Ärztlichen Attest läuft die Parameter-Weitergabe über eine Parameter-Liste.
Die Liste wird erzeugt:

Code: Alles auswählen

 Set params   = CreateObject ("TMAuto.ParameterList") 
und dann mit den Werten "gefüllt".

Code: Alles auswählen

params.Add Behandlungsfall, "Behandlungsfall"
params.Add Patient, "Patient"
...
Wie genau dann auf die übergebenen Werte zugegriffen wird habe ich noch nicht gefunden.
Gruß
Stefan
rfbdoc
PowerUser
Beiträge: 3065
Registriert: Sonntag 30. April 2006, 19:31
20
Hat sich bedankt: 56 mal
Hat Dank erhalten: 100 mal

Re: Formulareditor

Beitrag von rfbdoc »

Ich habe den thread nicht im einzelnen verfolgt, vielleicht hilft ihnen dies weiter.
Im vorliegenden Fall soll der Wert des Feldes DatumY im Startformular in das Feld DatumB des Folgeformulars übernommen werden:


Im ersten Schritt wird im Startformular eine neue Variable "PDatumB" als Objekt definiert
set PDatumB= CreateObject("TMAuto.Parameter")

Im zweiten Schritt wird dem Objekt ein Wert aus dem Starformular zugeteilt:
PDatumB.Value = DatumY.Text (DatumY ist im Formular als Datenfeld vorhanden)

Im dritten Schritt eine Liste der zu übergebenden Werte erstellt (hier besteht die Liste jetzt nur aus einem Wert)
Set List=CreateObject ("TMAuto.ParameterList")
List.Add PDatumB

Im Anschluss wird das Folgeforumlar aufgerufen (bei mir aus dem Unterordner \Formulare\SelbsterstellteFormulare
Set DialogFenster=App.OpenForm ("$\TurboMed\Formulare\SelbsterstellteFormulare\Abmeldung.tmf",List)

Damit ist das Skript im Startformular abgeschlossen

Beispiel aus dem Skript des Startformulars
Sub Folgeseite
Dim FormList,DialogFenster,list
Dim PdatumB
set FormList = CreateObject("TMAuto.StringList")
set PDatumB = CreateObject("TMAuto.Parameter")
PDatumB.Value=DatumY.Text

FormList.clear
Set List=CreateObject ("TMAuto.ParameterList")
List.Add Patient, "Patient"
List.Add Behandlungsfall, "Behandlungsfall"
List.Add PDatumB, "PDatumB"

Set PatForm.Behandlungsfall = Behandlungsfall
Set DialogFenster=App.OpenForm ("$\TurboMed\Formulare\SelbsterstellteFormulare\Abmeldung.tmf",List)
End sub

Im Folgeformular werden der so weitergegebene Wert PDatumB übernommen mit der Syntax
DatumB.Text=PDatumB.Value
(In dem neu aufgerufenem Formular ist das Datenfeld DatumB vorhanden)
Nun hat das Feld DatumB des Folgeformulars den Wert aus dem Datenfeld DatumY des Startformulars.

Beispiel aus dem Skript des Folgeformulars:
DatumB.Text=PDatum.Value

Viel Erfolg
R.F.B.
JoergS_inaktiv
Beiträge: 83
Registriert: Dienstag 9. Januar 2007, 14:39
19
Wohnort: Schleswig
Kontaktdaten:

Re: Formulareditor

Beitrag von JoergS_inaktiv »

hallo,
habe jetzt mit dem "Ärztlichen Attest" herumgespielt (Dank für den Tipp) und die Scripts dahingehend verändert:
HM-VO.tmf --------------------------------->

Option Explicit
dim Patform
DIM Api,File
Set PatForm = CreateObject("TMFTools.StandardFormular")
Set Api = PatForm.Api
Dim Param

Sub Form_QueryPrint( ByVal Cancel )
dim params
dim ge_text
dim tmp_text
Set ge_text = CreateObject ("TMAuto.Parameter")
Set params = CreateObject ("TMAuto.ParameterList")
tmp_text = SchluesselIn.Text 'Inhalt des Texteingabefelds
ge_text.value = tmp_text
params.Add ge_text, "ge_text"
App.OpenForm "test\HM-text1.tmf", params '"

' Dim WshShell
' Dim iReturn
' Dim sMessage, sTitel
' sMessage = "Eingaben korrekt?"
' sTitel = "Eingabekontrolle"
' Set WshShell = CreateObject("WScript.Shell")
' iReturn = WshShell.Popup(sMessage,5 , sTitel , vbOKCancel + vbExclamation )
' Select Case iReturn
' Case vbOk
' Case vbCancel
' Cancel.Value = true
' End select
End Sub
--------------------------------------------------<

HM-text1.tmf --------------------------------->

Option Explicit
dim Patform
Set PatForm = CreateObject("TMFTools.StandardFormular")

Sub Form_OnLoad
Formatdaten_laden
end sub

Sub Formatdaten_laden
dim uebergabe, ges_text
on error resume next
Set uebergabe = ge_text
ges_text = uebergabe
hm.Text = ges_text
end sub
--------------------------------------------------->

So klappt das schon ganz gut mit der Parameterübergabe. Der Inhalt des Texteingabefeld "SchluesselIn" wird ins zweite Formular übernommen (Feld "hm").
Weil ich das zweite Formular aber über die Druck-Start Prozedur gestartet habe, wird mit dem Aufruf dieses Formulars die Druck-Prozedur zuende gebracht und das erste Formular geschlossen. Das kann ich verhindern, wenn ich den oben auskommentierten Absatz aktiviere. Es wird eine Auswahlbox eingeblendet, in der ich mit "Cancel" den Druck stoppen oder mit "OK" zuende bringen kann. Allerdings wird das zweite Fenster dadurch nicht geschlossen. - Werde weiter berichten.
(Zweck des Ganzen: s. Posting heute um 06:01, Punkt 4)

JoergSchoenen
Benutzeravatar
wahnfried
Beiträge: 3180
Registriert: Freitag 13. Januar 2006, 23:46
20
Wohnort: Braunschweig

Re: Formulareditor

Beitrag von wahnfried »

JoergSchoenen hat geschrieben:hallo,
habe jetzt mit dem "Ärztlichen Attest" herumgespielt (Dank für den Tipp) und die Scripts dahingehend verändert:
HM-VO.tmf --------------------------------->
...
Sub Form_QueryPrint( ByVal Cancel )
dim params
dim ge_text
dim tmp_text
Set ge_text = CreateObject ("TMAuto.Parameter")
Set params = CreateObject ("TMAuto.ParameterList")
tmp_text = SchluesselIn.Text 'Inhalt des Texteingabefelds
ge_text.value = tmp_text
params.Add ge_text, "ge_text"
App.OpenForm "test\HM-text1.tmf", params '"
wofür dient die doppelte Ersetzung (Umweg über tmp_text)? Wenn der Inhalt von "SchluesselIn" nicht noch modifiziert/ergänzt werden soll, reicht doch "ge_text.value = SchluesselIn.text" ??
JoergSchoenen hat geschrieben:HM-text1.tmf --------------------------------->
...
Sub Formatdaten_laden
dim uebergabe, ges_text
on error resume next
Set uebergabe = ge_text
ges_text = uebergabe
hm.Text = ges_text
end sub
--------------------------------------------------->
Auch hier würde ich den Umweg über "ges_text" nicht für nötig halten und direkt nach "set uebergabe = ge_text" anschließen mit "hm.text = uebergabe"
JoergSchoenen hat geschrieben:Weil ich das zweite Formular aber über die Druck-Start Prozedur gestartet habe, wird mit dem Aufruf dieses Formulars die Druck-Prozedur zuende gebracht und das erste Formular geschlossen. Das kann ich verhindern, wenn ich den oben auskommentierten Absatz aktiviere. Es wird eine Auswahlbox eingeblendet, in der ich mit "Cancel" den Druck stoppen oder mit "OK" zuende bringen kann. Allerdings wird das zweite Fenster dadurch nicht geschlossen.
Warum denn das Eingabefeld für den/die Parameter erst durch die Druck-Prozedur starten?? Als Übungsaufgabe ganz schön, für den von Ihnen mitgeteilten Zweck m.E. zu endgültig.

Wenn ich Eintragungen für das Formular vorbereiten will, brauche ich evtl. ein Schaltfeld mit Hotkey wie im Attest den Schalter für das Übertragen auf A4-Attest, dem ich auch eine Funktionstaste zuweisen kann.

Im Falle der Heilmittelverordnung öffne ich bereits jetzt vom Eintragsfeld der Therapieform per F4 die Liste der Langrezepteinträge, vom Eintragsfeld für Diagnosen per F11 die Diagnosen des Patienten, vom Therapieziel- und Begründungsfeld per F4 die Zeilenmakros. Eine Auswahlliste aller Kodierungen - möglichst mit Anzeige des betr. Abschnittes der HM-Richtlinien in einem Extra-Feld - fehlt allerdings wirklich. Man kann es so regeln, daß ein Global-Schalter die ganze Auswahlen-Reihe nacheinander anstößt, die Auswahlen vom Eintragsfeld wie bisher immer nur dieses Feld bearbeiten.

Bei Schaltern brauche ich für jeden Schalter sowohl die Aktivierungsprozedur per Mausklick als auch per Hotkey-Tastenkombination - und beides ruft dann die jeweilige Sub zum Öffnen der Auswahlliste oder eines Eintragsfeldes (oder eben nacheinander alle Auswahlmöglichkeiten, deren Aufruf-Sub's ja alle bereits da sein müssen...) auf, deren Auswahl per Enter, Esc oder "OK-Schalter" direkt in die Variablen zur Ersetzung des Inhaltes des betr. Feldes im HMVPT-Formular 7_2004 übernommen wird (ggfs als Anfügung zum bisherigen Inhalt des Feldes). Schließlich möchte ich mich möglicherweise nochmal anders entscheiden und nochmal (anders) auswählen - oder beim Wieder-Aufruf des in der F3 beim Drucken oder Verlassen abgespeicherten Formulars soll die Auswahl ebenfalls nochmal neu erfolgen können.

Und beim primären Aufruf des Heilmittelverordnungs-Formulars könne in der "Sub Form_OnLoad" der "Alles-Nacheinander-Auswahlschalter" irgendwann nach dem "FuelleKopf" automatisch aufgerufen werden... Sowas würde ich sukzessive dem Heilmittelverordnungsformular implementieren, wenn das Konzept zum Arbeitsablauf "Füllen des Formulars" und "Korrigieren von Einträgen" steht.

Tipp zum Arbeiten mit dem Formulareditor: nach wenigen erfolgreichen Schritten in der Weiterentwicklung immer unter neuem Namen abspeichern und dann weiterverändern. Man macht manchmal Fehler, die man bereut, wenn man nicht auf einen kurz zurückliegenden Zwischenschritt zurückgreifen kann. Schalter im Layout und die dazugehörigen Sub's im Quelltext kann man gut aus anderen Formularen kopieren und anpassen.

Grüsse, Wahnfried
Antworten

Wer ist online?

Mitglieder in diesem Forum: Ahrefs [Bot], Bing [Bot], Semrush [Bot] und 4 Gäste