Funktion
Berufsbezeichnungen aus der SWD in die PND
Zeile 6029 - 6209
Beschreibung
Code in WinIBW2 (Makro/VBScript)Sub
Sub PND315()
'********************************************************************
'Autor: D. Horst, DNBF, Hanspeter Schneider, HEBIS, Stand: 19.01.2009
'Anforderung: B. Pfeifer, DNBF, AfS
Dim FldTmp ' Kategorie und Inhalt im Pica-Zeichensatz
Dim StrTmp ' Feldinhalt im latin1 - Zeichensatz
Dim StrLen ' Länge des Feldes
Dim StrCmd ' Such-Kommando
Dim waitTxt ' Warnungstext für 'Weiter'
Dim strStatus ' Status nach Suche
Dim strSize ' Size nach Suche
Dim deskriptor ' Deskriptor für 315
Dim PPN ' gefundene PPN
Dim winid ' id of edit screen
Dim swinid ' id of search window
Dim tmpid ' id of actual window
Dim exist_a ' true, wenn schon Deskriptor a existiert
Dim trunkiert ' "?" falls Suchbegriff trunkiert, sonst ""
on error resume next
waitTxt = Application.LatinToPica ( _
"+ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +" &vbLf & _
"+ +" &vbLf & _
"+ Sie haben keinen Datensatz zum Verknüpfen ausgewählt +" & vbLf & _
"+ +" & vbLf & _
"+ Dennoch erwartet das aufgerufenen Skript eine Fortsetzung +" & vbLf & _
"+ mit der Funktion 'Script / Weiter' +" & vbLf & _
"+ +" & vbLf & _
"+ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +" &vbLf )
winid = Application.ActiveWindow.WindowID
Application.ActiveWindow.Title.StartOfField
Application.ActiveWindow.Title.WordRight 1
Application.ActiveWindow.Title.EndOfField True
FldTmp = Application.ActiveWindow.Title.GetTagAndSelection
if left(FldTmp,4) <> "315 " then
msgbox "Dieses Skript kann nur eine Kategorie vom Typ 315 bearbeiten", vbCritical
exit sub
end if
StrTmp = Application.ActiveWindow.Title.GetSelection()
if left(StrTmp,1) = "|" then
msgbox "Der Feldinhalt in Kategorie 315 beginnt mit einem in diesem Skript nicht erlaubten Zeichen.", vbCritical
exit sub
end if
StrTmp = Application.PicaToLatin(StrTmp)
trunkiert = ""
strlen = len(StrTmp)
if strlen > 0 then
if right(StrTmp,1) = "?" then
trunkiert = Application.GetProfileInt("PND315","allow_wild",0)
if trunkiert = 0 then
msgbox "Das Skript erlaubt keine trunkierte Suche." &vbLf & _
"Bitte suchen Sie nach vollständigen Berufsbezeichnungen", _
vbCritical
exit sub
end if
trunkiert = "?"
strlen = strlen - 1
end if
end if
if strlen = 0 then
msgbox "Kategorie 315 enthält keinen sinnvollen Inhalt.", vbCritical
exit sub
end if
Application.ActiveWindow.Title.StartOfBuffer
'exist_a = (Finde 315 |a| <> leer)
exist_a = (Application.ActiveWindow.Title.FindTag ("315 |a|", 0, false, False) <> "")
Application.ActiveWindow.Title.StartOfBuffer
Application.ActiveWindow.Title.Find FldTmp, true, false, false
Application.ActiveWindow.Title.StartOfField
Application.ActiveWindow.Title.WordRight 1
Application.ActiveWindow.Title.EndOfField True
'msgbox "exist_a:" & exist_a & " trunk:" & trunkiert & " suche:" & StrTmp
'wenn keine 315 |a| existiert und nicht trunkiert ist dann Suchkommando mit Teilbestandseinschränkung für Indikator a
if (not exist_a) or (trunkiert = "") then
StrCmd = "f sp """ & StrTmp & """ and zg b"
deskriptor = "|a|"
Application.ActiveWindow.Command StrCmd, True
strStatus = Application.ActiveWindow.Status 'Status auslesen
else
strStatus = "NOHITS"
end if
if strStatus = "NOHITS" then
StrCmd = "rec n;f sp """ & StrTmp & """"
deskriptor = "|b|"
Application.ActiveWindow.Command StrCmd, True
strStatus = Application.ActiveWindow.Status
'weitere Bedingung für erneute leere Treffermenge einfügen
if strStatus = "NOHITS" then
PND315NoLink strTmp
exit sub
end if
end if
if strStatus <> "OK" then
msgbox "Es ist ein unerwarteter Fehler aufgetreten." &vbLf &_
"Bitte wenden Sie sich an Ihren Systembetreuer.", vbCritical
exit sub
end if
' Ab hier ist strStatus = "OK", in Suchfenster
swinid = Application.ActiveWindow.WindowID
setsz = Application.ActiveWindow.Variable("P3GSZ")
if (left(setsz,1) = "%") then
setsz = mid(setsz,4)
end if
if setsz > 10 then
msgbox "Die Suche ergab insgesamt " & setsz & " Treffer." &vbLf &_
"Bitte schränken Sie den Suchbegriff ein, um die Treffermenge " &_
"zu reduzieren", vbCritical
Application.ActiveWindow.CloseWindow
exit sub
end if
if setsz > 1 then
msgbox "Die Suche ergab insgesamt " & setsz & " Treffer." &vbLf &_
"Bitte suchen Sie den entsprechenden Normdatensatz aus," & vbLf &_
"den Sie zur Verknüpfung verwenden wollen, und aktivieren" & vbLf &_
"Sie danach den Menü-Eintrag Script/Weiter." & vbLf & vbLf &_
"Sollten Sie keinen entsprechenden Normdatensatz finden," &vbLf &_
"so schließen Sie einfach das aktuelle Fenster und aktivieren" &vbLf &_
"Sie danach den Menü-Eintrag Script/Weiter."
Application.ActiveWindow.ShowMessage "Verknüpfen mit 'Script/Weiter'", 0
Application.ActivateWindow winid
Application.ActiveWindow.Title.StartOfBuffer
Application.ActiveWindow.Title.InsertText waitTxt
Application.ActivateWindow swinid
Application.Pause
tmpid = Application.ActiveWindow.WindowID
Application.ActivateWindow winid
Application.ActiveWindow.Title.StartOfBuffer
do while Application.ActiveWindow.Title.FindTag("+",0,true,false) <> ""
Application.ActiveWindow.Title.DeleteLine 1
loop
Application.ActiveWindow.Title.Find FldTmp, true, false, false
Application.ActiveWindow.Title.StartOfField
Application.ActiveWindow.Title.WordRight 1
Application.ActiveWindow.Title.EndOfField True
Application.ActivateWindow tmpid
end if
' Hier nach weiter. Zwei Möglichkeiten:
' a) Wir sind noch im Suchfenster, dann wurde eine PPN gefunden
' b) Anderenfalls kann keine Verknüpfung hergestellt werden
if swinid <> Application.ActiveWindow.WindowID then
PND315NoLink strTmp
exit sub
end if
PPN = Application.ActiveWindow.Variable("P3GPP")
Application.ActiveWindow.CloseWindow
if exist_a then deskriptor = "|b|"
'Application.ActiveWindow.Title.Find FldTmp, true, false, false
'Application.ActiveWindow.Title.StartOfField
'Application.ActiveWindow.Title.WordRight 1
'Application.ActiveWindow.Title.EndOfField True
Application.ActiveWindow.Title.InsertText deskriptor & "!" & PPN & "!"
End Sub