Linux áááºáááºážáá»ááºááœáẠ1C áá¯ááºáá¯ááºáá»á¬áž áááºááá¯á·á¡áá¯ááºáá¯ááºáá¯á¶á áá±á«ááºážá
ááºááᯠáá»áœááºá¯ááºááá¯á· á¡áá±ážá
áááºáá±á·áá¬áá±á¬á¡áá«ááœáẠá¡á¬ážáááºážáá»ááºáá
áºáᯠááœá±á·ááŸááá²á·ááẠ- 1C áá¬áá¬áá»á¬áž á¡á
á¯á¡áá±ážááᯠá
á®áá¶ááá·áºááœá²áááºá¡ááœáẠá¡áááºááŒá±áá±á¬ ááááºáá
áºá¡á
á¯á¶-ááááºáá±á¬ááºážáá°ážááºáááŸáááŒááºážá ááá¯á·á¡ááŒáẠrac console utility á¡ááœáẠGUI ááá¯áá±ážááŒááºážááŒáá·áº á€á¡á¬ážáááºážáá»ááºááᯠááŒááºááẠáá¯á¶ážááŒááºáá²á·áááºá áá»áœááºáá±á¬á·áºá¡ááŒááºá¡áá á€áá¯ááºáááºážá¡ááœáẠá¡ááá·áºáá±á¬áºáá¯á¶ážááŒá
áºáá±á¬ááŒá±á¬áá·áº Tcl/tk ááᯠááœá¶á·ááŒáá¯ážááá¯ážáááºáá±ážáá¬áá¬á
áá¬ážá¡ááŒá
Ạááœá±ážáá»ááºáá²á·áááºá áá«ááŒá±á¬áá·áº áá®áá
á¹á
ááºážááŸá¬ ááŒá±ááŸááºážáá»ááºáá²á· á
áááºáááºá
á¬ážá
áá¬áá±á¬ááºážáá²á· ááá¹áááá»áá¯á·ááᯠáááºááŒáá»ááºáá«áááºá
á¡áá¯ááºáá¯ááºááẠáááºááẠtcl/tk ááŸáá·áº 1C ááŒáá·áºáá±ááŸá¯áá»á¬áž ááá¯á¡ááºáá«áááºá ááŒááºááá¯áá¹ááá® áááºáá±á·áá»áºáá»á¬ážááᯠá¡áá¯á¶ážáááŒá¯áá² á¡ááŒá±áᶠtcl/tk áá±ážááá¯á·ááŒááºážá á
áœááºážáááºá¡áá»á¬ážá
á¯ááᯠá¡áá¯á¶ážááŒá¯ááẠáá¯á¶ážááŒááºááá¯ááºáá±á¬ááŒá±á¬áá·áºá ttk áá«áááºáá±á¬ áá¬ážááŸááºáž 8.6.7 - áá»áœááºá¯ááºááá¯á· á¡áááááá¯á¡ááºááá·áº ttk á¡ááá¯ááááºáá
áºááŒááºá
ááºáá»á¬ážáá«ááŸááá±á¬ áááºáá±á·áá»áºááᯠááá¯á¡ááºáá«áááºá ::TreeViewá áááºážááẠáá
áºáááºááœá²á·á
ááºážáá¯á¶áá¯á¶á
á¶ááŸáá·áº ááá¬áž (á
á¬áááºáž) áá¯á¶á
á¶ááŒáá·áº áá±áá¬ááᯠááŒáááœáá·áºááŒá¯áááºá ááá¯á·á¡ááŒááºá áá¬ážááŸááºážá¡áá
áºááœááºá ááŒáœááºážáá»ááºáá»á¬ážááŸáá·áº á¡áá¯ááºá¡á¬áž ááŒááºáááºáá¯ááºáá±á¬ááºáá²á·ááẠ(ááŒááºá command áá»á¬ážááᯠáá¯ááºáá±á¬ááºááá·áºá¡áá« ááá±á¬áá»ááºááœáẠá¡áá¯á¶ážááŒá¯ááá·áº try command ááᯠá¡áá¯á¶ážááŒá¯áááº)á
ááá±á¬áá»ááºááœáẠááá¯ááºáá»á¬ážá áœá¬áá«áááºááẠ(áá áºá á¯á¶áá áºáá¯áá²ááœáẠá¡áá¬á¡á¬ážáá¯á¶ážáá¯ááºáá±á¬ááºááẠáááºááá·áºá¡áá¬áá០ááá·áºááá¯áá¬ážáá®ážáá¬ážááŒááºážáááŸááá±á¬áºáááºáž)
rac_gui.cfg - áá¯á¶áá± config
rac_gui.tcl - áááºáááœáŸáá·áºáááºááá·áº áá¬ááºááœáŸááºáž
lib directory ááœáẠstartup ááœáẠá¡ááá¯á¡áá»á±á¬áẠload áá¯ááºááá·áº ááá¯ááºáá»á¬áž áá«ááŸááááºá
function.tcl - áá¯ááºáá¯á¶ážáá¯ááºáááºážáá»á¬ážááŸáá·áºá¡áá°ááá¯ááº
gui.tcl - áááºáááááºáá
Ạá¡ááºáá¬áá±á·á
áº
images.tcl - base64 áá¯ááºáá¯á¶á
á¬ááŒáá·áºááá¯ááº
rac_gui.tcl ááá¯ááºááẠá¡ááŸááºááááºá¡á¬ážááŒáá·áº á áá¬ážááŒááºááᯠá áááºáááºá ááááºážááŸááºáá»á¬ážááᯠá¡á ááŒá¯áááºá áá±á¬áºáá»á°ážáá»á¬ážááᯠááœáá·áºáááºá ááŒááºáááºááŸá¯áá»á¬ážá á áááºááŒáá·áºá ááŸááºáá»ááºáá»á¬ážááŸáá·áºá¡áá° ááá¯ááºá á¡ááŒá±á¬ááºážá¡áá¬áá»á¬áž
rac_gui.tcl
#!/bin/sh
exec wish "$0" -- "$@"
# УÑÑаМавлОваеЌ ÑекÑÑОй каÑалПг
set dir(root) [pwd]
# УÑÑаМавлОваеЌ ÑабПÑОй каÑалПг, еÑлО егП ÐœÐµÑ ÑП ÑПзЎаÑÐŒ
set dir(work) [file join $env(HOME) .rac_gui]
if {[file exists $dir(work)] == 0 } {
file mkdir $dir(work)
}
# каÑалПг Ñ ÐŒÐŸÐŽÑлÑЌО
set dir(lib) "[file join $dir(root) lib]"
# загÑÑжаеЌ пПлÑзПваÑелÑÑкОй кПМÑОг, еÑлО ПМ ПÑÑÑÑÑÑвÑеÑ, ÑП кПпОÑÑеЌ ЎеÑПлÑÐœÑй
if {[file exists [file join $dir(work) rac_gui.cfg]] ==0} {
file copy [file join [pwd] rac_gui.cfg] [file join $dir(work) rac_gui.cfg]
}
source [file join $dir(work) rac_gui.cfg]
# ÐПЎ пÑПвеÑкО МалОÑÐžÑ rac О пÑавОлÑМПÑÑО ÑÐºÐ°Ð·Ð°ÐœÐžÑ Ð¿ÑÑО в кПМÑОге
# еÑлО пÑПгÑаЌЌа Ме МайЎеМа ÑП бÑÐŽÐµÑ Ð²ÑвеЎеМ ЎОалПг ÐŽÐ»Ñ ÑÐºÐ°Ð·Ð°ÐœÐžÑ ÐºÐŸÑÑекÑМПгП пÑÑО
# О ÑÑÐŸÑ Ð¿ÑÑÑ Ð±ÑÐŽÐµÑ Ð·Ð°Ð¿ÐžÑаМ в пПлÑзПваÑелÑÑкОй кПМÑОг
if {[file exists $rac_cmd] == 0} {
set rac_cmd [tk_getOpenFile -initialdir $env(HOME) -parent . -title "УкажОÑе пÑÑÑ ÐŽÐŸ rac" -initialfile rac]
file copy [file join $dir(work) rac_gui.cfg] [file join $dir(work) rac_gui.cfg.bak]
set orig_file [open [file join $dir(work) rac_gui.cfg.bak] "r"]
set file [open [file join $dir(work) rac_gui.cfg] "w"]
while {[gets $orig_file line] >=0 } {
if {[string match "set rac_cmd*" $line]} {
puts $file "set rac_cmd $rac_cmd"
} else {
puts $file $line
}
}
close $file
close $orig_file
#return "$host:$port"
file delete [file join $dir(work) 1c_srv.cfg.bak]
} else {
puts "Found $rac_cmd"
}
set cluster_user ""
set cluster_pwd ""
set agent_user ""
set agent_pwd ""
## LOAD FILE ##
# ÐагÑÑжаеЌ ЌПЎÑлО кÑПЌе gui.tcl Ñак как егП МаЎП загÑÑзОÑÑ Ð¿ÐŸÑлеЎМОЌ
foreach modFile [lsort [glob -nocomplain [file join $dir(lib) *.tcl]]] {
if {[file tail $modFile] ne "gui.tcl"} {
source $modFile
puts "Loaded module $modFile"
}
}
source [file join $dir(lib) gui.tcl]
source [file join $dir(work) rac_gui.cfg]
# ЧОÑаеЌ Ñайл ÑП ÑпОÑкПЌ ÑеÑвеÑПв 1С
# О ЎПбавлÑеЌ в ЎеÑевП
if [file exists [file join $dir(work) 1c_srv.cfg]] {
set f [open [file join $dir(work) 1c_srv.cfg] "RDONLY"]
while {[gets $f line] >=0} {
.frm_tree.tree insert {} end -id "server::$line" -text "$line" -values "$line"
}
}
ááá¯á¡ááºááá·áºá¡áá¬á¡á¬ážáá¯á¶ážááᯠáá±á«ááºážáá¯ááºáá¯ááºááŒá®áž rac utility ááá«áááºááŸá¯ááᯠá á áºáá±ážááŒá®ážáá±á¬ááºá ááááºáá áºáááºážááá¯ážáá áºáᯠá áááºáá«áááºá áááá¯ááááºá¡ááºáá¬áá±á·á áºááœáẠááŒááºá ááºáá¯á¶ážáá¯áá«áááºáááº-
áááááá¬áá¬ážá áá áºáááºááŸáá·áº á á¬áááºáž
áá»áœááºá¯ááºááẠâáá áºáááºâ á á¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážááᯠ1C á០áá¯á¶ááŸáẠWindows á ááºáááááá¬áá»á¬ážááŸáá·áº áááºááá¯ááºááá»áŸ áááºáá°á¡á±á¬áẠááŒá¯áá¯ááºáá¬ážáááºá
á€áááºážááá¯ážááá¯ááœá²á·á
ááºážááá·áº á¡ááááá¯ááºááẠááá¯ááºááœááºáá«ááŸááááºá
lib/gui.tcl
# ÑÑÑаМПвка ÑазЌеÑа О Ð¿ÐŸÐ»ÐŸÐ¶ÐµÐœÐžÑ ÐŸÑМПвМПгП ПкМа
# ЌПжМП ÑÑÑаМПвОÑÑ Ð² пеÑеЌеММÑÑ topLevelGeometry в кПМÑОг пÑПгÑаЌЌÑ
if {[info exists topLevelGeometry]} {
wm geometry . $topLevelGeometry
} else {
wm geometry . 1024x768
}
# ÐагПлПвПк ПкМа
wm title . "1C Rac GUI"
wm iconname . "1C Rac Gui"
# ОкПМка ПкМа (беÑеÑÑÑ ÐžÐ· Ñайла lib/imges.tcl)
wm iconphoto . tcl
wm protocol . WM_DELETE_WINDOW Quit
wm overrideredirect . 0
wm positionfrom . user
ttk::style theme use clam
# ÐÐ°ÐœÐµÐ»Ñ ÐžÐœÑÑÑЌеМÑПв
set frm_tool [frame .frm_tool]
pack $frm_tool -side left -fill y
ttk::panedwindow .panel -orient horizontal -style TPanedwindow
pack .panel -expand true -fill both
pack propagate .panel false
ttk::button $frm_tool.btn_add -command Add -image add_grey_32
ttk::button $frm_tool.btn_del -command Del -image del_grey_32
ttk::button $frm_tool.btn_edit -command Edit -image edit_grey_32
ttk::button $frm_tool.btn_quit -command Quit -image quit_grey_32
pack $frm_tool.btn_add $frm_tool.btn_del $frm_tool.btn_edit -side top -padx 5 -pady 5
pack $frm_tool.btn_quit -side bottom -padx 5 -pady 5
# ÐеÑевП Ñ Ð¿ÐŸÐ»ÐŸÑаЌО пÑПкÑÑÑкО
set frm_tree [frame .frm_tree]
ttk::scrollbar $frm_tree.hsb1 -orient horizontal -command [list $frm_tree.tree xview]
ttk::scrollbar $frm_tree.vsb1 -orient vertical -command [list $frm_tree.tree yview]
set tree [ttk::treeview $frm_tree.tree -show tree
-xscrollcommand [list $frm_tree.hsb1 set] -yscrollcommand [list $frm_tree.vsb1 set]]
grid $tree -row 0 -column 0 -sticky nsew
grid $frm_tree.vsb1 -row 0 -column 1 -sticky nsew
grid $frm_tree.hsb1 -row 1 -column 0 -sticky nsew
grid columnconfigure $frm_tree 0 -weight 1
grid rowconfigure $frm_tree 0 -weight 1
# МазМаÑеМОе ПбÑабПÑÑОка МажаÑÐžÑ ÐºÐœÐŸÐ¿ÐºÐŸÐ¹ ÐŒÑÑО
bind $frm_tree.tree <ButtonRelease> "TreePress $frm_tree.tree"
# СпОÑПк ÐŽÐ»Ñ ÐŽÐ°ÐœÐœÑÑ
(ÑаблОÑа)
set frm_work [frame .frm_work]
ttk::scrollbar $frm_work.hsb -orient horizontal -command [list $frm_work.tree_work xview]
ttk::scrollbar $frm_work.vsb -orient vertical -command [list $frm_work.tree_work yview]
set tree_work [
ttk::treeview $frm_work.tree_work
-show headings -columns "par val" -displaycolumns "par val"
-xscrollcommand [list $frm_work.hsb set]
-yscrollcommand [list $frm_work.vsb set]
]
# УÑÑаМПвка ÑвеÑПв ÐŽÐ»Ñ ÑеÑÐµÐŽÐŸÐ²Ð°ÐœÐžÑ Ð² ÑаблОÑе
$tree_work tag configure dark -background $color(dark_table_bg)
$tree_work tag configure light -background $color(light_table_bg)
# РазЌеÑеМОе ÑлеЌеМÑПв Ма ÑПÑЌе
grid $tree_work -row 0 -column 0 -sticky nsew
grid $frm_work.vsb -row 0 -column 1 -sticky nsew
grid $frm_work.hsb -row 1 -column 0 -sticky nsew
grid columnconfigure $frm_work 0 -weight 1
grid rowconfigure $frm_work 0 -weight 1
pack $frm_tree $frm_work -side left -expand true -fill both
#.panel add $frm_tool -weight 1
.panel add $frm_tree -weight 1
.panel add $frm_work -weight 1
áááá¯ááááºááŸáá·áºá¡áá¯ááºáá¯ááºááẠalgorithm ááŸá¬ á¡á±á¬ááºáá«á¡ááá¯ááºážááŒá áºáááºá
1. ááááŠážá áœá¬á áááºááẠáááºá á¡á á¯á¡áá±ážáá¬áá¬ááᯠáá±á«ááºážááá·áºááẠááá¯á¡ááºááẠ(ááá¯ááá¯áááºááŸá¬á á¡á á¯á¡áá±áž á á®áá¶ááá·áºááœá²ááŸá¯ áá¬áᬠ(Linux ááœáẠá á®áá¶ááá·áºááœá²ááŸá¯ááẠâ/opt/1C/v8.3/x86_64/ras cluster âdaemonâ))))á
áááºážááá¯áá¯ááºáá±á¬ááºááẠâ+â ááá¯ááºááá¯ááŸáááºááŒá®áž ááœáá·áºáá¬áá±á¬áááºážááá¯ážááœáẠáá¬áá¬ááááºá á¬ááŸáá·áº ááááºáááºážááᯠááá·áºááœááºážáá«-
ááá¯á·áá±á¬ááºááœááºá áá»áœááºá¯ááºááá¯á·ááá¬áá¬ááẠáááºážááá¯ááŸáááºááŒááºážááŒáá·áº áá
áºáááºááœáẠáá±á«áºáá¬áááºááŒá
áºááŒá®ážá á¡á
á¯á¡ááœá²á·áá»á¬ážá
á¬áááºážááœáá·áºáá¬ááẠááá¯á·ááá¯áẠáá»áááºáááºááŸá¯á¡ááŸá¬ážá¡ááœááºážáá
áºáᯠááŒááááºááŒá
áºáááºá
2. á¡á á¯á¡áá±ážá¡áááºááᯠááá áºááŸáááºááŒááºážááŒáá·áº áááºážá¡ááœááºáááŸáááá¯ááºááá·áº áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážá á¬áááºážááᯠááœáá·áºáá±ážáááºááŒá áºáááºá
3.
ááŒá®ážáá±á¬á·á i.e. á¡á á¯á¡áá±ážá¡áá áºáá áºáá¯ááá·áºáááºá á á¬áááºážááœááºáááá¯ááºáá±á¬áááºááá·áºá¡áá¬ááá¯áááá¯ááœá±ážáá»ááºááŒá®áž áááááá¬áá¬ážááŸá â+â ááá¯ááºááᯠááŸáááºááŒá®áž áá±á«ááºážááá·áºááá·áº ááá¯ááºáá¬áá±á¬á·ááºá¡áá áºááᯠááŒááá«áááº-
áááááá¬áá¬ážááŸá ááá¯ááºáá»á¬ážááẠá¡ááŒá±á¬ááºážá¡áá¬áá±á«áºáá°áááºá áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠáá¯ááºáá±á¬ááºááẠá ááá¯ááá¯áááºááŸá¬á áá áºááẠááá¯á·ááá¯áẠá á¬áááºážá áááºááá·áºááŒááºá áẠááá¯á·ááá¯áẠá á¬áááºážááᯠááœá±ážáá»ááºáá¬ážáááºá¡áá±á«áºáá°áááºá áá¯ááºáááºážá ááºáá áºáᯠááá¯á·ááá¯áẠá¡ááŒá¬ážáá áºáᯠáá¯ááºáá±á¬ááºáááºááŒá áºáááºá
Add ááá¯áẠ(â+â á á¥ááá¬ááᯠááŒáá·áºááŒáá«á áá¯á·á
ááá¯ááºáá»áá¯ážáááºáá¯ááº-
ttk::button $frm_tool.btn_add -command Add -image add_grey_32
á€áá±áá¬ááœáẠááá¯ááºááᯠááŸáááºááá¯ááºáá±á¬á¡áá«á "Add" áá¯ááºáááºážá ááºááẠáááºážááá¯ááºááᯠáá¯ááºáá±á¬ááºáááá·áºáááºááŒá áºáááº
proc Add {} {
global active_cluster host
# ÐпÑеЎелÑеЌ ОЎеМÑОÑОкаÑÐŸÑ Ð²ÑЎелеММПгП ÑлеЌеМÑа
set id [.frm_tree.tree selection]
# ÐпÑеЎелÑеЌ зМаÑеМОе ÑÑПгП ÑлеЌеМÑа
set values [.frm_tree.tree item [.frm_tree.tree selection] -values]
set key [lindex [split $id "::"] 0]
# в завОÑОЌПÑÑО ÐŸÑ ÑПгП ÑÑП вÑЎелОлО бÑÐŽÐµÑ Ð·Ð°Ð¿ÑÑеМа ÐœÑÐ¶ÐœÐ°Ñ Ð¿ÑПÑеЎÑÑа
if {$key eq "" || $key eq "server"} {
set host [ Add::server ]
return
}
Add::$key .frm_tree.tree $host $values
}
á€áááºááŸá¬ tickle á á¡á¬ážáá¬áá»ááºáá»á¬ážáá²á០áá áºáá¯ááŒá áºáááº- áááºááẠáá¯ááºáá¯á¶ážáá¯ááºáááºážá¡áááºáá áºáá¯á¡áá±ááŒáá·áº variable áá áºáá¯ááááºááá¯ážááᯠáá»á±á¬áºááœá¬ážááá¯ááºáááºá
Add::$key .frm_tree.tree $host $values
á¥ááá¬á¡á¬ážááŒáá·áºá á¡áááºá áá»áœááºá¯ááºááá¯á·ááẠáááºááá¬áá¬ááᯠááœáŸááºááŒááŒá®áž â+â ááᯠááŸáááºáá«áá ááá¯á·áá±á¬áẠá¡á á¯á¡áá±ážááœáẠááŸááá«á Add:: server áá¯ááºáá¯á¶ážáá¯ááºáááºážááᯠá áááºáááá·áºááẠ- Add::cluster á áááºááŒáá·áº (áá»áœááºá¯ááºááẠáááºááá·áºáá±áá¬ááœáẠááŸááááºááᯠáá±ážáá«áááºá ááá¯á¡ááºáá±á¬ "áá±á¬á·áá»á¬áž" ááẠá¡á±á¬ááºáá±á¬áºááŒáá« á¡áááºážáááºá០áááºážáááºáá¬áááº)á áá±á¬áºááŒáá¬ážáá±á¬ áá¯ááºáá¯á¶ážáá¯ááºáááºážáá»á¬ážááẠá¡ááŒá±á¬ááºážá¡áá¬ááŸáá·áº ááá·áºáá»á±á¬áºáá±á¬ ááááºáá áºááŒááºá ááºáá»á¬ážááᯠááœá²áá¯ááºáá«áááºá
áááºáááááŒá¯ááááŒá®ážáá¬ážááŒá áºááá·áºá¡ááá¯ááºáž áá±á¬ááºáá¯á¶á á¶áá»á¬ážááẠáá¯á¶á á¶áá°ááŒá áºááẠ- áá¯ááºáá¯á¶ážáá¯ááºáááºážáá áºáá¯ááŒáá·áº áááºážááá¯á·ááá¯ááŒááá¬ážáá±á¬ááŒá±á¬áá·áº á¡á¶á·ááŒá áá¬ááá¯ááºáá«á áá±á¬ááºááááºááá±á¬áẠ(ááŒáááºážáá±á«ááºá ááá¯ááºáá»á¬ážá áá¯á¶á á¡ááœáŸááºáž)á áá¯ááºáá¯á¶ážáá¯ááºáááºážá¡áááºá AddTopLevel
proc AddToplevel {lbl img {win_name .add}} {
set cmd "destroy $win_name"
if [winfo exists $win_name] {destroy $win_name}
toplevel $win_name
wm title $win_name $lbl
wm iconphoto $win_name tcl
# ЌеÑка Ñ ÐžÐºÐŸÐœÐºÐŸÐ¹
ttk::label $win_name.lbl -image $img
# ÑÑейЌ Ñ Ð¿ÐŸÐ»ÑЌО ввПЎа
set frm [ttk::labelframe $win_name.frm -text $lbl -labelanchor nw]
grid columnconfigure $frm 0 -weight 1
grid rowconfigure $frm 0 -weight 1
# ÑÑейЌ О кМПпкО
set frm_btn [frame $win_name.frm_btn -border 0]
ttk::button $frm_btn.btn_ok -image ok_grey_24 -command { }
ttk::button $frm_btn.btn_cancel -command $cmd -image quit_grey_24
grid $win_name.lbl -row 0 -column 0 -sticky nw -padx 5 -pady 10
grid $frm -row 0 -column 1 -sticky nw -padx 5 -pady 5
grid $frm_btn -row 1 -column 1 -sticky se -padx 5 -pady 5
pack $frm_btn.btn_cancel -side right
pack $frm_btn.btn_ok -side right -padx 10
return $frm
}
áá±á«áºááá¯ááŸá¯ááá·áºáááºáá»ááºáá»á¬áž- áá±á«ááºážá ááºá á á¬ááŒáá·áºááá¯ááºá០á¡áá¯ááºááœááºá¡ááœáẠáá¯á¶á¡ááẠ(lib/images.tcl) ááŸáá·áº ááœá±ážáá»ááºááá¯ááºáá±á¬ áááºážááá¯ážá¡ááẠááá·áºáááºáá»ááºáá áºáᯠ(áá°á .add)á ááá¯á·ááŒá±á¬áá·áºá áá»áœááºá¯ááºááá¯á·ááẠáááºááá¬áá¬ááŸáá·áº á¡á á¯á¡áá±ážááᯠáá±á«ááºážááá·áºáááºá¡ááœáẠá¡áááºáá±á¬áºááŒáá« á¥ááá¬áá»á¬ážááᯠáá°áá«áá áá±á«áºááá¯ááŸá¯ááẠáá»á±á¬áºáá®áááá·áºáááº-
AddToplevel "ÐПбавлеМОе ПÑМПвМПгП ÑеÑвеÑа" server_grey_64
ááá¯á·ááá¯ááº
AddToplevel "ÐПбавлеМОе клаÑÑеÑа" cluster_grey_64
áá±á¬ááºážááŒá®á á€ááá°áá¬áá»á¬ážááŸáá·áºá¡áá° áááºáááºá áá¬áᬠááá¯á·ááá¯áẠá¡á á¯á¡áá±ážá¡ááœáẠááá·áºááœááºážááá·áº ááá¯ááºáá¬áá±á¬á·ááºáá»á¬ážááᯠááŒáááá·áº áá¯ááºáá¯á¶ážáá¯ááºáááºážáá»á¬ážááᯠáá»áœááºá¯ááºááŒáá«áááºá
Add::áá¬áá¬
proc Add::server {} {
global default
# вÑвПЎОЌ ПÑМПвМÑÑ ÑПÑÐŒÑ
set frm [AddToplevel "ÐПбавлеМОе ПÑМПвМПгП ÑеÑвеÑа" server_grey_64]
# ЎПбавлÑеЌ еÑкО О Ð¿ÐŸÐ»Ñ Ð²Ð²ÐŸÐŽÐ° Ма ÑÑÑ ÑПÑÐŒÑ
label $frm.lbl_host -text "ÐÐŽÑÐµÑ ÑеÑвеÑа"
entry $frm.ent_host
label $frm.lbl_port -text "ÐПÑÑ"
entry $frm.ent_port
$frm.ent_port insert end $default(port)
grid $frm.lbl_host -row 0 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.ent_host -row 0 -column 1 -sticky nsew -padx 5 -pady 5
grid $frm.lbl_port -row 1 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.ent_port -row 1 -column 1 -sticky nsew -padx 5 -pady 5
grid columnconfigure $frm 0 -weight 1
grid rowconfigure $frm 0 -weight 1
#set frm_btn [frame .add.frm_btn -border 0]
# пеÑеПпÑеЎелÑеЌ ПбÑабПÑÑОк МажаÑÐžÑ ÐºÐœÐŸÐ¿ÐºÐž
.add.frm_btn.btn_ok configure -command {
set host [SaveMainServer [.add.frm.ent_host get] [.add.frm.ent_port get]]
.frm_tree.tree insert {} end -id "server::$host" -text "$host" -values "$host"
destroy .add
return $host
}
return $frm
}
ááá·áºáá«::á¡á á¯á¡áá±áž
proc Add::cluster {tree host values} {
global default lifetime_limit expiration_timeout session_fault_tolerance_level
global max_memory_size max_memory_time_limit errors_count_threshold security_level
global load_balancing_mode kill_problem_processes
agent_user agent_pwd cluster_user cluster_pwd auth_agent
if {$agent_user ne "" && $agent_pwd ne ""} {
set auth_agent "--agent-user=$agent_user --agent-pwd=$agent_pwd"
} else {
set auth_agent ""
}
# ÑÑÑаМавлОваеЌ глПбалÑÐœÑе пеÑеЌеММÑе ()
set lifetime_limit $default(lifetime_limit)
set expiration_timeout $default(expiration_timeout)
set session_fault_tolerance_level $default(session_fault_tolerance_level)
set max_memory_size $default(max_memory_size)
set max_memory_time_limit $default(max_memory_time_limit)
set errors_count_threshold $default(errors_count_threshold)
set security_level [lindex $default(security_level) 0]
set load_balancing_mode [lindex $default(load_balancing_mode) 0]
set frm [AddToplevel "ÐПбавлеМОе клаÑÑеÑа" cluster_grey_64]
label $frm.lbl_host -text "ÐÐŽÑÐµÑ ÐŸÑМПвМПгП ÑеÑвеÑа"
entry $frm.ent_host
label $frm.lbl_port -text "ÐПÑÑ"
entry $frm.ent_port
$frm.ent_port insert end $default(port)
label $frm.lbl_name -text "ÐазваМОе клаÑÑеÑа"
entry $frm.ent_name
label $frm.lbl_secure_connect -text "ÐаÑОÑÑММПе ÑПеЎОМеМОе"
ttk::combobox $frm.cb_security_level -textvariable security_level -values $default(security_level)
label $frm.lbl_expiration_timeout -text "ÐÑÑаМавлОваÑÑ Ð²ÑклÑÑеММÑе пÑПÑеÑÑÑ ÑеÑез:"
entry $frm.ent_expiration_timeout -textvariable expiration_timeout
label $frm.lbl_session_fault_tolerance_level -text "УÑÐŸÐ²ÐµÐœÑ ÐŸÑказПÑÑÑПйÑОвПÑÑО"
entry $frm.ent_session_fault_tolerance_level -textvariable session_fault_tolerance_level
label $frm.lbl_load_balancing_mode -text "РежОЌ ÑаÑпÑÐµÐŽÐµÐ»ÐµÐœÐžÑ ÐœÐ°Ð³ÑÑзкО"
ttk::combobox $frm.cb_load_balancing_mode -textvariable load_balancing_mode
-values $default(load_balancing_mode)
label $frm.lbl_errors_count_threshold -text "ÐПпÑÑÑОЌПе ПÑклПМеМОе кПлОÑеÑÑва ПÑОбПк ÑеÑвеÑа, %"
entry $frm.ent_errors_count_threshold -textvariable errors_count_threshold
label $frm.lbl_processes -text "РабПÑОе пÑПÑеÑÑÑ:"
label $frm.lbl_lifetime_limit -text "ÐеÑОПЎ пеÑезапÑÑка, Ñек."
entry $frm.ent_lifetime_limit -textvariable lifetime_limit
label $frm.lbl_max_memory_size -text "ÐПпÑÑÑОЌÑй ПбÑÑÐŒ паЌÑÑО, ÐÐ"
entry $frm.ent_max_memory_size -textvariable max_memory_size
label $frm.lbl_max_memory_time_limit -text "ÐÐœÑеÑвал пÑевÑÑÐµÐœÐžÑ ÐŽÐŸÐ¿ÑÑÑОЌПгП ПбÑÑЌа паЌÑÑО, Ñек."
entry $frm.ent_max_memory_time_limit -textvariable max_memory_time_limit
label $frm.lbl_kill_problem_processes -justify left -anchor nw -text "ÐÑОМÑЎОÑелÑМП завеÑÑаÑÑ Ð¿ÑПблеЌМÑе пÑПÑеÑÑÑ"
checkbutton $frm.check_kill_problem_processes -variable kill_problem_processes -onvalue yes -offvalue no
grid $frm.lbl_host -row 0 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.ent_host -row 0 -column 1 -sticky nsew -padx 5 -pady 5
grid $frm.lbl_port -row 1 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.ent_port -row 1 -column 1 -sticky nsew -padx 5 -pady 5
grid $frm.lbl_name -row 2 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.ent_name -row 2 -column 1 -sticky nsew -padx 5 -pady 5
grid $frm.lbl_secure_connect -row 3 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.cb_security_level -row 3 -column 1 -sticky nsew -padx 5 -pady 5
grid $frm.lbl_expiration_timeout -row 4 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.ent_expiration_timeout -row 4 -column 1 -sticky nsew -padx 5 -pady 5
grid $frm.lbl_session_fault_tolerance_level -row 5 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.ent_session_fault_tolerance_level -row 5 -column 1 -sticky nsew -padx 5 -pady 5
grid $frm.lbl_load_balancing_mode -row 6 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.cb_load_balancing_mode -row 6 -column 1 -sticky nsew -padx 5 -pady 5
grid $frm.lbl_errors_count_threshold -row 7 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.ent_errors_count_threshold -row 7 -column 1 -sticky nsew -padx 5 -pady 5
grid $frm.lbl_processes -row 8 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.lbl_lifetime_limit -row 9 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.ent_lifetime_limit -row 9 -column 1 -sticky nsew -padx 5 -pady 5
grid $frm.lbl_max_memory_size -row 10 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.ent_max_memory_size -row 10 -column 1 -sticky nsew -padx 5 -pady 5
grid $frm.lbl_max_memory_time_limit -row 11 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.ent_max_memory_time_limit -row 11 -column 1 -sticky nsew -padx 5 -pady 5
grid $frm.lbl_kill_problem_processes -row 12 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.check_kill_problem_processes -row 12 -column 1 -sticky nw -padx 5 -pady 5
# пеÑеПпÑеЎелÑеЌ ПбÑабПÑÑОк
.add.frm_btn.btn_ok configure -command {
RunCommand "" "cluster insert
--host=[.add.frm.ent_host get]
--port=[.add.frm.ent_port get]
--name=[.add.frm.ent_name get]
--expiration-timeout=$expiration_timeout
--lifetime-limit=$lifetime_limit
--max-memory-size=$max_memory_size
--max-memory-time-limit=$max_memory_time_limit
--security-level=$security_level
--session-fault-tolerance-level=$session_fault_tolerance_level
--load-balancing-mode=$load_balancing_mode
--errors-count-threshold=$errors_count_threshold
--kill-problem-processes=$kill_problem_processes
$auth_agent $host"
Run::server $tree $host ""
destroy .add
}
return $frm
}
á€áá¯ááºáá¯á¶ážáá¯ááºáááºážáá»á¬ážááá¯ááºááᯠááŸáá¯ááºážááŸááºáá±á¬á¡áá«á ááŒá¬ážáá¬ážáá»ááºááᯠáá¬áááºáá»ááºá áááŒáá·áºááŒááºááá¯ááºáááºá "Ok" ááá¯ááºááá¯ááºááœááºáá°ááᯠáá»áœááºá¯ááºá¡á¬áá¯á¶á áá¯ááºáá«áááºá Tk ááœááºá ááœá±ážáá»ááºá áá¬ááᯠá¡áá¯á¶ážááŒá¯á áááá¯ááááºáá¯ááºáá±á¬ááºáá±á ááºá¡ááœááºáž ááááºáá áºááŒááºá ááºáá»á¬ážá áá¯ááºááá¹áááá»á¬ážááᯠááœáŸááºážááá¯ážááá¯ááºáááºá configuration. á¥ááá¬á¡á¬ážááŒáá·áºá ááá¯ááºááá¯ááŒáááẠáááŠáž command
ttk::button $frm_btn.btn_ok -image ok_grey_24 -command { }
ááá¯á·áá±á¬áº áá»áœááºá¯ááºááá¯á·ááá¯á¶á á¶áá»á¬ážááœááºá command ááẠááá¯á¡ááºáá±á¬áá¯ááºáá±á¬ááºááá¯ááºá áœááºážáá±á«áºááœááºáá°áááºáááº-
.add.frm_btn.btn_ok configure -command {
RunCommand "" "cluster insert
--host=[.add.frm.ent_host get]
--port=[.add.frm.ent_port get]
--name=[.add.frm.ent_name get]
--expiration-timeout=$expiration_timeout
--lifetime-limit=$lifetime_limit
--max-memory-size=$max_memory_size
--max-memory-time-limit=$max_memory_time_limit
--security-level=$security_level
--session-fault-tolerance-level=$session_fault_tolerance_level
--load-balancing-mode=$load_balancing_mode
--errors-count-threshold=$errors_count_threshold
--kill-problem-processes=$kill_problem_processes
$auth_agent $host"
Run::server $tree $host ""
destroy .add
}
á¡áááºáá±á¬áºááŒáá«ááá°áá¬ááœááºá "clogged" ááá¯ááºááẠá¡á á¯á¡áá±ážáá áºáá¯ááá·áºááŒááºážáá¯ááºáááºážá ááºááᯠá áááºáááºá
á€áá±áá¬ááœáẠTk ááŸá ááááºáá áºááŒááºá ááºáá»á¬ážááŸáá·áº áá¯ááºáá±á¬ááºááẠááœááºá áœá¬áááºááá¯ážááŸáááẠ- á¡áá»áá¯ážáá»áá¯ážáá±á¬ áá±áá¬ááá·áºááœááºážááá·áºááŒááºá ááºáá»á¬áž (áááºáá±á¬ááºááŸá¯á ááœááºááá¯áá±á¬ááºá áºá áá»ááºááá¯ááºá áááºááŒáá·áº) áá«áá¬áá®áá¬ááᯠá á¬áá¬ážááŒá±á¬ááºážáá²ááŸá¯á¡ááŒá Ạááááºáááºáá²á·áááº-
entry $frm.ent_lifetime_limit -textvariable lifetime_limit
á€ááááºážááŸááºááẠááá¹áá¬áá¯á¶ážááá¯ááºáᬠnamespace ááœááºáááºááŸááºáá¬ážááŒá®áž áááºááŸáááá·áºááœááºážáá¬ážáá±á¬áááºááá¯ážáá»á¬ážáá«ááŸááááºá á¡á²áá«ááœá±á á¡ááœááºááŸááá·áºááœááºážáá¬ážáá±á¬á á¬áá¬ážááá¯ááááºá¡ááœááºá áááºááẠvariable ááŸáá·áºáááºááá¯ááºáá±á¬áááºááá¯ážááá¯áááºáááºáá¬ááá¯ááẠ(áá¯ááºáá«áááºá ááŒááºá ááºááá¯áááºáá®ážáá±á¬á¡áá«ááœááºáááºážááá¯áááºááŸááºáá¬ážáááº)á
ááá·áºááœááºážáá¬ážáá±á¬ á á¬áá¬ážááᯠááŒááºáááºááá°ááẠáá¯ááááááºážáááºáž ( entry type á element áá»á¬ážá¡ááœááº) ááŸá¬ get command ááᯠá¡áá¯á¶ážááŒá¯áááºááŒá áºááẠá
.add.frm.ent_name get
á€áááºážáááºážááŸá áºáá¯áá¯á¶ážááᯠá¡áááºáá±á¬áºááŒáá« áá¯ááºááœáẠááŒáá·áºááŸá¯ááá¯ááºáá«áááºá
á€ááá¯ááºááá¯ááŸáááºááŒááºážááŒáá·áºá á€ááá á¹á ááœááºá rac ááŸáá·áºáááºáááºáá±á¬ á¡á á¯á¡áá±ážááá¯ááá·áºáááºá¡ááœáẠáá¯ááºáá¯ááºáá¬ážáá±á¬ command line ááŒáá·áº RunCommand áá¯ááºáá¯á¶ážáá¯ááºáááºážááᯠá áááºáááº-
/opt/1C/v8.3/x86_64/rac cluster insert --host=localhost --port=1540 --name=dsdsds --expiration-timeout=0 --lifetime-limit=0 --max-memory-size=0 --max-memory-time-limit=0 --security-level=0 --session-fault-tolerance-level=0 --load-balancing-mode=performance --errors-count-threshold=0 --kill-problem-processes=no localhost:1545
ááá¯áá»áœááºá¯ááºááá¯á·áááºáá»áœááºá¯ááºááá¯á·ááá¯á¡ááºáá±á¬ parameters áá»á¬ážááŸáá·áºá¡áá° rac ááá áºááœáŸááºááŸá¯ááá¯ááááºážáá»á¯ááºááá·áº main command ááá¯á·áá±á¬ááºááŸááá¬ááŒá®áž ááá¯á¡ááºáá«áá command áá»á¬ážá output ááᯠlists and returns á¡ááŒá Ạááœá²ááŒááºážá áááºááŒá¬áááº-
RunCommand
proc RunCommand {root par} {
global dir rac_cmd cluster work_list_row_count agent_user agent_pwd cluster_user cluster_pwd
puts "$rac_cmd $par"
set work_list_row_count 0
# ПÑкÑÑваеЌ каМал в МеблПкОÑÑÑÑеЌ ÑежОЌе
# $rac - кПЌаМЎа Ñ Ð¿ÐŸÐ»ÐœÑÐŒ пÑÑÑÐŒ
# $par - ÑÑПÑЌОÑПваММÑе клÑÑО запÑÑка О ПпÑОО
set pipe [open "|$rac_cmd $par" "r"]
try {
set lst ""
set l ""
# вÑвПЎ ÐºÐŸÐŒÐ°ÐœÐŽÑ ÐŽÐŸÐ±Ð°Ð²Ð»ÑеЌ в ÑпОÑПк ÑпОÑкПв
while {[gets $pipe line]>=0} {
#puts $line
if {$line eq ""} {
lappend l $lst
set lst ""
} else {
lappend lst [string trim $line]
}
}
close $pipe
return $l
} on error {result options} {
# ÐапÑÑк ПбÑабПÑÑОка ПÑОбПк
ErrorParcing $result $options
return ""
}
}
áááºááá¬áá¬áá±áá¬ááá¯ááŒáá·áºááœááºážááŒá®ážáá±á¬ááºá áááºážááá¯áá áºáááºáá²ááá¯á·ááá·áºáááá·áºáááºá á€á¡ááœááºá á¡áááºáá±á¬áºááŒáá« Add-server áá¯ááºáá¯á¶ážáá¯ááºáááºážááœááºá á¡á±á¬ááºáá«áá¯ááºááẠáá¬áááºááŸááááº-
.frm_tree.tree insert {} end -id "server::$host" -text "$host" -values "$host"
ááá¯á¡áá«á áá áºáááºááŸá áá¬áá¬á¡áááºááᯠááŸáááºááŒááºážááŒáá·áºá ááá¯áá¬áá¬á០á á®áá¶ááá·áºááœá²ááá·áº á¡á á¯á¡áá±ážáá»á¬ážá á¬áááºážááᯠáá»áœááºá¯ááºááá¯á·áááŸáááŒá®áž á¡á á¯á¡áá±ážáá áºáá¯ááᯠááŸáááºááŒááºážááŒáá·áºá á¡á á¯á¡áá±ážááŒááºá ááºáá»á¬ážá á¬áááºáž (áá¬áá¬áá»á¬ážá á¡ááºááá¯áá±á·á áºáá»á¬áž á áááº) ááᯠáááŸááá«áááºá áááºážááᯠTreePress áá¯ááºáá¯á¶ážáá¯ááºáááºáž (file lib/function.tcl) ááœáẠá¡áá±á¬ááºá¡áááºáá±á¬áºáááº-
proc TreePress {tree} {
global host server active_cluster infobase
# ПпÑеЎелÑеЌ вÑЎелеММÑй ÑлеЌеМÑ
set id [$tree selection]
# ÑÑÑаМавлОваеЌ ÐœÑжМÑе глПбалÑÐœÑе пеÑеЌеММÑе
SetGlobalVarFromTreeItems $tree $id
# ÐпÑеЎелÑеЌ клÑÑ Ðž зМаÑеМОе, Ñ.е. ОЌеММП ÑОп вÑбÑаММПгП ÑлеЌеМÑа
set values [$tree item $id -values]
set key [lindex [split $id "::"] 0]
# О в завОÑОЌПÑÑО ÐŸÑ ÑПгП ÑÑП вÑбÑалО бÑÐŽÐµÑ Ð·Ð°Ð¿ÑÑеМа ÑППÑвеÑÑÑвÑÑÑÐ°Ñ Ð¿ÑПÑеЎÑÑа
# в пÑПÑÑÑаМÑÑве ОЌÑÐœ Run
Run::$key $tree $host $values
}
ááá¯á·ááŒá±á¬áá·áºá Run::áá¬áá¬ááẠáááºááá¬áá¬á¡ááœáẠ(á¡á á¯á¡áá±ážáá áºáá¯á¡ááœáẠ- Run::clusterá á¡áá¯ááºáá¯ááºáá±á¬áá¬áá¬áá áºáá¯á¡ááœáẠ- Run::work_server á áááºááŒáá·áº) ááᯠá áááºáá«áááºá á¡á²áá«ááœá±á $key variable ááááºááá¯ážááẠoption ááŸáááºááŸááºáá¬ážáá±á¬áá áºáááºááŒááºá ááºá¡áááºááá áºá áááºáá áºááá¯ááºážááŒá áºáááºá -á¡áá¯ááºáá®.
áá¯ááºáá¯á¶ážáá¯ááºáááºážááᯠá¡á¬áá¯á¶á áá¯ááºááŒáá·áºáá¡á±á¬ááº
Run::áá¬áá¬
proc Run::server {tree host values} {
# пПлÑÑаеЌ ÑпОÑПк клаÑÑеÑПв ÑÑебÑеЌПгП ÑеÑвеÑа
set lst [RunCommand server::$host "cluster list $host"]
if {$lst eq ""} {return}
set l [lindex $lst 0]
#puts $lst
# ÑЎалÑеЌ лОÑМее Оз ÑпОÑка
.frm_work.tree_work delete [ .frm_work.tree_work children {}]
# ÑОÑаеЌ ÑпОÑПк
foreach cluster_list $lst {
# ÐапПлМÑеЌ ÑпОÑПк пПлÑÑеММÑЌО зМаÑеМОÑЌО
InsertItemsWorkList $cluster_list
# ПбÑабаÑÑваеЌ вÑвПЎ (ÑпОÑПк) ÐŽÐ»Ñ ÐŽÐŸÐ±Ð°Ð²Ð»ÐµÐœÐžÑ ÐŽÐ°ÐœÐœÑÑ
в ЎеÑевП
foreach i $cluster_list {
#puts $i
set cluster_list [split $i ":"]
if {[string trim [lindex $cluster_list 0]] eq "cluster"} {
set cluster_id [string trim [lindex $cluster_list 1]]
lappend cluster($cluster_id) $cluster_id
}
if {[string trim [lindex $cluster_list 0]] eq "name"} {
lappend cluster($cluster_id) [string trim [lindex $cluster_list 1]]
}
}
}
# ЎПбавлÑеЌ клаÑÑеÑÑ Ð² ЎеÑевП
foreach x [array names cluster] {
set id [lindex $cluster($x) 0]
if { [$tree exists "cluster::$id"] == 0 } {
$tree insert "server::$host" end -id "cluster::$id" -text "[lindex $cluster($x) 1]" -values "$id"
# ЎПбавлÑеЌ ÑлеЌеМÑÑ Ð² клаÑÑеÑ
InsertClusterItems $tree $id
}
}
if { [$tree exists "agent_admins::$id"] == 0 } {
$tree insert "server::$host" end -id "agent_admins::$id" -text "ÐЎЌОМОÑÑÑаÑПÑÑ" -values "$id"
#InsertClusterItems $tree $id
}
}
á€áá¯ááºáááºážá ááºááẠRunCommand á¡áááá·áºááŒáá·áº áá¬áá¬ááŸáááŸáááá·áºá¡áá¬ááᯠáá¯ááºáá±á¬ááºááŒá®áž áá áºáááº-á¡á á¯á¡áá±ážáá»á¬ážá á¡áá»áá¯ážáá»áá¯ážáá±á¬ á¡ááŒá áºááŒááºá ááºáá»á¬áž (á¡ááŒá±á áá¯ááºá áááºážáá»á¬ážá áá¯ááºáá±á¬ááºáá±áá±á¬ áá¬áá¬áá»á¬ážá áááºááŸááºáá»á¬ážááŸáá·áº á¡ááŒá¬ážá¡áá¬áá»á¬áž) ááá¯á· á¡áá¬á¡á¬ážáá¯á¶ážááᯠáá±á«ááºážááá·áºáááºá á¡áá®ážáááºááŒáá·áºááŸá¯áá«áá á¡ááœááºážááœáẠInsertItemsWorkList áá¯ááºáá¯á¶ážáá¯ááºáááºážááá¯á· áá¯ááºážáá±á«áºááá¯áááºááᯠáááááŒá¯áááá«áááá·áºáááºá áááºážááᯠááááºá $lst variable ááá¯á· á á¬áááºážá¡ááŒá ẠááŒááºáá±ážáá²á·ááá·áº rac console utility á output ááᯠáá¯ááºáá±á¬ááºááŒááºážááŒáá·áº graphical list áá áºáá¯ááá¯á· á¡á áááºá¡ááá¯ááºážáá»á¬ážááᯠáá±á«ááºážááá·áºááẠá¡áá¯á¶ážááŒá¯áááºá á€áááºááŸá¬ áá±á¬áºáá¶ááŒáá·áº ááá¯ááºážááŒá¬ážáá¬ážáá±á¬ ááŒááºá ááºá¡ááœá²áá»á¬ážáá«ááŸááá±á¬ á á¬áááºážáá»á¬ážááŒá áºáááºá
á¥ááá¬á á¡á á¯á¡áá±ážáá»áááºáááºááŸá¯á á¬áááºáž-
svk@svk ~]$ /opt/1C/v8.3/x86_64/rac connection list --cluster=783d2170-56c3-11e8-c586-fc75165efbb2 localhost:1545
connection : dcf5991c-7d24-11e8-1690-fc75165efbb2
conn-id : 0
host : svk.home
process : 79de2e16-56c3-11e8-c586-fc75165efbb2
infobase : 00000000-0000-0000-0000-000000000000
application : "JobScheduler"
connected-at : 2018-07-01T14:49:51
session-number : 0
blocked-by-ls : 0
connection : b993293a-7d24-11e8-1690-fc75165efbb2
conn-id : 0
host : svk.home
process : 79de2e16-56c3-11e8-c586-fc75165efbb2
infobase : 00000000-0000-0000-0000-000000000000
application : "JobScheduler"
connected-at : 2018-07-01T14:48:52
session-number : 0
blocked-by-ls : 0
ááááºáá áºáá¯á¶á á¶ááŒáá·áº áááºážááẠá€áá²á·ááá¯á·áá±á¬áá¯á¶áá±á«áºáááá·áºáááº-
á¡áááºáá«áá¯ááºáá¯á¶ážáá¯ááºáááºážááẠááá¬ážááá¯ááŒáá·áºááẠáá±á«ááºážá á®ážááŸáá·áºáá±áá¬á¡ááœáẠá¡á áááºá¡ááá¯ááºážáá»á¬ážáá¡áááºáá»á¬ážááᯠááœá±ážáá»ááºáááº-
InsertItemsWorkList
proc InsertItemsWorkList {lst} {
global work_list_row_count
# ÑÑÑаМПвка ÑеÑÐµÐŽÐŸÐ²Ð°ÐœÐžÑ ÑвеÑа ÐŽÐ»Ñ ÑÑÑПкО
if [expr $work_list_row_count % 2] {
set tag dark
} else {
set tag light
}
# ÑÐ°Ð·Ð±ÐŸÑ ÑÑÑПк Ма паÑÑ ÐºÐ»ÑÑ - зМаÑеМОе
foreach i $lst {
if [regexp -nocase -all -- {(D+)(s*?|)(:)(s*?|)(.*)} $i match param v2 v3 v4 value] {
lappend column_list [string trim $param]
lappend value_list [string trim $value]
}
}
# запПлМеМОе ÑаблОÑÑ
.frm_work.tree_work configure -columns $column_list -displaycolumns $column_list
.frm_work.tree_work insert {} end -values $value_list -tags $tag
.frm_work.tree_work column #0 -stretch
# ÑÑÑаМПвка загПлПвкПв
foreach j $column_list {
.frm_work.tree_work heading $j -text $j
}
incr work_list_row_count
}
á€áá±áá¬ááœááºá string ááᯠ":" ááŒá¬ážáá¬ážáá±á¬ ááŒááºá ááºáá»á¬ážá¡ááŒá Ạááá¯ááºážááŒá¬ážááŒá®áž á á¬áááºážááᯠááŒááºáá±ážááá·áº ááá¯ážááŸááºážáá±á¬ command [split $str ":"] á¡á á¬ážá á¡áá»áá¯á·áá±á¬ááŒááºá ááºáá»á¬ážááẠáá±á¬áºáá¶áá áºáá¯áá«áááºáá±á¬ááŒá±á¬áá·áº áá¯á¶ááŸááºá¡áá¯á¶ážá¡ááŸá¯ááºážááᯠá¡áá¯á¶ážááŒá¯áá«áááºá
InsertClusterItems áá¯ááºáá¯á¶ážáá¯ááºáááºáž (á¡áá¬ážáá°áá»á¬ážá
áœá¬áá²ááŸáá
áºáá¯) ááẠááá¯á¡ááºáá±á¬ á¡á
á¯á¡áá±ážááŒááºá
ááºááá
áºáááºááá¯á· áááºááá¯ááºáᬠidentifiers áá»á¬ážááŸáá·áºá¡áá° ááá±ážááŒááºá
ááºáá»á¬ážá
á¬áááºážááᯠááá¯ážááŸááºážá
áœá¬ááá·áºáááºá
InsertClusterItems
proc InsertClusterItems {tree id} {
set parent "cluster::$id"
$tree insert $parent end -id "infobases::$id" -text "ÐÐœÑПÑЌаÑОПММÑе базÑ" -values "$id"
$tree insert $parent end -id "servers::$id" -text "РабПÑОе ÑеÑвеÑÑ" -values "$id"
$tree insert $parent end -id "admins::$id" -text "ÐЎЌОМОÑÑÑаÑПÑÑ" -values "$id"
$tree insert $parent end -id "managers::$id" -text "ÐеМеЎжеÑÑ ÐºÐ»Ð°ÑÑеÑа" -values $id
$tree insert $parent end -id "processes::$id" -text "РабПÑОе пÑПÑеÑÑÑ" -values "workprocess-all"
$tree insert $parent end -id "sessions::$id" -text "СеаМÑÑ" -values "sessions-all"
$tree insert $parent end -id "locks::$id" -text "ÐлПкОÑПвкО" -values "blocks-all"
$tree insert $parent end -id "connections::$id" -text "СПеЎОМеМОÑ" -values "connections-all"
$tree insert $parent end -id "profiles::$id" -text "ÐÑПÑОлО безПпаÑМПÑÑО" -values $id
}
á¡áá¬ážáá°áá¯ááºáá¯á¶ážáá¯ááºáááºážáá áºáá¯ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáááºá¡ááœáẠáá±á¬ááºáááºááœá±ážáá»ááºá áá¬ááŸá áºáá¯ááᯠáááºááá·áºááœááºážá ááºážá á¬ážááá¯ááºáááºá áááºážááẠáááºááá²áá²áá±á¬á¡áááá·áºáá»á¬ážááᯠááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºáá¯ááºáá±á¬ááºááá¯ááºáá¯á¶ááá¯á·ááᯠááŸááºážáááºážá áœá¬ááŒááºááá¯ááºáááº-
á€áá¯ááºáá¯á¶ážáá¯ááºáááºážááœááºá ááá·áºááœááºážááŒááºážááŸáá·áº á á áºáá±ážááŒááºážááᯠááááºááá¯ááºááŒá±ááŸááºážááá¯ááºáááº-
InsertBaseItems
proc InsertBaseItems {tree id} {
set parent "infobase::$id"
if { [$tree exists "sessions::$id"] == 0 } {
$tree insert $parent end -id "sessions::$id" -text "СеаМÑÑ" -values "$id"
}
if { [$tree exists "locks::$id"] == 0 } {
$tree insert $parent end -id "locks::$id" -text "ÐлПкОÑПвкО" -values "$id"
}
if { [$tree exists "connections::$id"] == 0 } {
$tree insert $parent end -id "connections::$id" -text "СПеЎОМеМОÑ" -values "$id"
}
}
á€áááºááŸá¬ ááá¯ááá¯ááŸááºáááºáá±á¬áá»ááºážáááºááŸá¯ááŒá áºáááº-
áááá¯ááá¯ááºá¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážááᯠááá·áºááœááºážáá«á
proc InsertProfileItems {tree id} {
set parent "profile::$id"
set lst {
{dir "ÐОÑÑÑалÑÐœÑе каÑалПгО"}
{com "РазÑеÑÑММÑе COM-клаÑÑÑ"}
{addin "ÐМеÑМОе кПЌпПМеМÑÑ"}
{module "ÐМеÑМОе ПÑÑÑÑÑ Ðž ПбÑабПÑкО"}
{app "РазÑеÑÑММÑе пÑОлПжеМОÑ"}
{inet "РеÑÑÑÑÑ ÐžÐœÑеÑМеÑ"}
}
foreach i $lst {
append item [lindex $i 0] "::$id"
if { [$tree exists $item] == 0 } {
$tree insert $parent end -id $item -text [lindex $i 1] -values "$id"
}
unset item
}
}
áááºážááá¯á·á¡ááŒá¬áž ááŒá¬ážáá¬ážáá»ááºááŸá¬ áááºáá«ááá²áá² á¡áááá·áº(áá»á¬áž)ááᯠáá¯ááºáá±á¬ááºááá·áº ááœááºážáááºá¡áá¯á¶ážááŒá¯ááŸá¯ ááŒá áºáááºá áááºááá·áºáááºážáááºážááᯠá¡áá¯á¶ážááŒá¯áááºááŸá¬ developer á áá¯á¶ážááŒááºáá»ááºá¡áááŒá áºáááºá
ááŒááºá ááºáá»á¬áž áá±á«ááºážááá·áºááŒááºážááŸáá·áº áá±áá¬ááá°ááŒááºážááá¯á·ááᯠá¡áá»á¯á¶ážáááºáá²á·ááŒá®áž ááá¯á¡áá« áááºážááŒááºááŒááºážááᯠá¡á¬áá¯á¶á áá¯ááºááẠá¡áá»áááºáá»áá±á¬ááºááŒá®ááŒá áºáááºá á¡ááŒá±áá¶á¡á¬ážááŒáá·áº áá°áá®áá±á¬áá±á¬ááºáá»á¬ážááᯠáááºážááŒááºááŒááºážááŸáá·áº áá±á«ááºážááá·áºááŒááºážá¡ááœáẠ(á¡áá»ááºá¡áááºá¡ááŒá±áá¶ááŸááœá²á) áá°áá®áá±á¬ ááá¯ááºáá¬áá±á¬á·ááºáá¯á¶á á¶áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áá«áááºá áá±á«ááºážááá·áºááŒááºážá¡ááœáẠáá±á«áºááá¯ááŒááºážááá¯ááºáᬠalgorithm ááẠá€áá²á·ááá¯á· ááŒá áºáááº-
Add::$key->AddToplevel
á€áá²á·ááá¯á· áááºážááŒááºááŒááºážá¡ááœááºá
áááºážááŒááºáááº-:$key->Add::$key->AddTopLevel
á¥ááá¬á á¡á á¯á¡ááœá²á·áá áºáá¯ááᯠáááºážááŒááºááŒáá«á áá¯á·á á¥ááá¬á áá áºáááºááŸá á¡á á¯á¡áá±ážáá¡áááºááᯠááŸáááºááá¯ááºááŒá®ážáá±á¬ááºá áááááá¬áá¬áž (áá²áá¶) ááŸá áááºážááŒááºááá¯ááºááᯠááŸáááºááá¯ááºáááºááŸáá·áº áááºááá¯ááºááá·áºáá¯á¶á á¶ááᯠá ááááºáá±á«áºááœáẠááŒááá«áááº-
áááºážááŒááº::á¡á
á¯á¡áá±áž
proc Edit::cluster {tree host values} {
global default lifetime_limit expiration_timeout session_fault_tolerance_level
global max_memory_size max_memory_time_limit errors_count_threshold security_level
global load_balancing_mode kill_problem_processes active_cluster
agent_user agent_pwd cluster_user cluster_pwd auth
if {$cluster_user ne "" && $cluster_pwd ne ""} {
set auth "--cluster-user=$cluster_user --cluster-pwd=$cluster_pwd"
} else {
set auth ""
}
# ÑОÑÑеЌ ÑПÑÐŒÑ ÐŽÐ»Ñ ÐºÐ»Ð°ÑÑеÑа
set frm [Add::cluster $tree $host $values]
# ЌеМÑеЌ ÑекÑÑ ÐœÐ° ЌеÑке
$frm configure -text "РеЎакÑОÑПваМОе клаÑÑеÑа"
set active_cluster $values
# пПлÑÑаеЌ ЎаММÑе пП вÑÐŽÐµÐ»ÐµÐœÐœÐŸÐŒÑ ÐºÐ»Ð°ÑÑеÑÑ
set lst [RunCommand cluster::$values "cluster info --cluster=$active_cluster $host"]
# запПлМÑеЌ пПлÑ
FormFieldsDataInsert $frm $lst
# вÑклÑÑаеЌ пПлÑ, ÑеЎакÑОÑПваМОе кПÑПÑÑÑ
запÑеÑеМП
$frm.ent_host configure -state disable
$frm.ent_port configure -state disable
# пеÑеМазМаÑаеЌ ПбÑабПÑÑОк
.add.frm_btn.btn_ok configure -command {
RunCommand "" "cluster update
--cluster=$active_cluster $auth
--name=[.add.frm.ent_name get]
--expiration-timeout=$expiration_timeout
--lifetime-limit=$lifetime_limit
--max-memory-size=$max_memory_size
--max-memory-time-limit=$max_memory_time_limit
--security-level=$security_level
--session-fault-tolerance-level=$session_fault_tolerance_level
--load-balancing-mode=$load_balancing_mode
--errors-count-threshold=$errors_count_threshold
--kill-problem-processes=$kill_problem_processes
$auth $host"
$tree delete "cluster::$active_cluster"
Run::server $tree $host ""
destroy .add
}
}
áá¯ááºááŸá ááŸááºáá»ááºáá»á¬ážá¡áá±á«áº á¡ááŒá±áá¶á áá°á¡áá ááá¯ááºááá¯ááºááœááºáá°áá¯ááºááᯠááœáŸááºážááá¯ážáá¬ážááŒá®áž ááœááºáááºáá»á¬ážááᯠáá±áá¬ááŒáá·áºáá±ážááŒá®áž ááááºážááŸááºáá»á¬ážááᯠá áááºáá¯ááºáá±á¬ááºááá·áº FormFieldsDataInsert áá¯ááºáá¯á¶ážáá¯ááºáááºážááŸááœá²á á¡áá¬á¡á¬ážáá¯á¶áž ááŸááºážáááºážááŒááºáá¬ážáá«áááºá
FormFieldsDataInsert
proc FormFieldsDataInsert {frm lst} {
foreach i [lindex $lst 0] {
# пПлÑÑаеЌ ÑпОÑПк паÑаЌеÑÑПв О зМаÑеМОй
if [regexp -nocase -all -- {(D+)(s*?|)(:)(s*?|)(.*)} $i match param v2 v3 v4 value] {
# ЌеМÑеЌ ÑОЌвПлÑ
regsub -all -- "-" [string trim $param] "_" entry_name
# запПлМÑеЌ ЎаММÑЌО
if [winfo exists $frm.ent_$entry_name] {
$frm.ent_$entry_name delete 0 end
$frm.ent_$entry_name insert end [string trim $value """]
}
if [winfo exists $frm.cb_$entry_name] {
global $entry_name
set $entry_name [string trim $value """]
}
# ÐŽÐ»Ñ ÑекбПкÑПв ЌеМÑеЌ зМаÑеМОÑ
if [winfo exists $frm.check_$entry_name] {
global $entry_name
if {$value eq "0"} {
set $entry_name no
} elseif {$value eq "1"} {
set $entry_name yes
} else {
set $entry_name $value
}
}
}
}
}
á€áá¯ááºáá¯á¶ážáá¯ááºáááºážááœááºá tcl ááá±á¬ááºáááºá¡á¬ážáá¬áá»ááºáá áºáá¯áá±á«áºáá¬ááẠ- á¡ááŒá¬áž variable áá»á¬ážááááºááá¯ážáá»á¬ážááᯠvariable á¡áááºáá»á¬ážá¡ááŒá áºá¡á á¬ážááá¯ážáááºá á¡á²áá«ááœá±á áá¯á¶á á¶áá»á¬ážááŒáá·áºá áœááºááŒááºážááŸáá·áº variable áá»á¬ážáá¡á ááŒá¯ááŒááºážááᯠá¡ááá¯á¡áá»á±á¬ááºáá¯ááºáá±á¬ááºáááºá ááœááºáááºáá»á¬ážááŸáá·áº variable áá»á¬ážáá¡áááºáá»á¬ážááẠrac utility á command line switches áá»á¬ážááŸáá·áº ááŒáœááºážáá»ááºá¡áá»áá¯á·ááŒáá·áº command output parameters á¡áááºáá»á¬áž - dash ááᯠunderscore ááŒáá·áºá¡á á¬ážááá¯ážáááºá á¥ááᬠscheduled-jobs-deny ááœááºážááŸáá·áºááá¯ááºáá®áááºá ent_scheduled_jobs_deny ááŸáá·áº ááŒá±á¬ááºážáá²ááá¯ááºáááºá scheduled_jobs_deny.
áá±á«ááºážááá·áºááŒááºážááŸáá·áº áááºážááŒááºááŒááºážá¡ááœáẠáá±á¬ááºáá¯á¶á á¶áá»á¬ážááẠá¡ááœááºáá»á¬ážá ááœá²á·á ááºážááŸá¯ááœáẠááœá²ááŒá¬ážááá¯ááºáááºá á¥ááá¬á á¡áá»ááºá¡áááºá¡ááŒá±áá¶áá áºáá¯ááŒáá·áº áá¯ááºáá±á¬ááºáááº-
ááááºážá¡áá»ááºá¡áááºáá¯á¶ááŒá¯á¶áá±ážááᯠááá·áºááœááºážááŒááºážá
á¡áá»ááºá¡áááºáá¯á¶ááŒá¯á¶áá±ážááᯠáááºážááŒááºááŒááºážá
áááºážááŒááºááŒááºážáá¯ááºáááºážá
ááºááœáẠEdit::infobaseá ááá¯á¡ááºáá±á¬á¡ááœááºáá»á¬ážááᯠáá±á¬ááºááœááºááá·áºáááºá áá¯ááºááẠáá±á¬ááºááá±áá±á¬ááŒá±á¬áá·áº á€áá±áá¬ááœáẠáá»áœááºá¯ááºááááºááŒáá«á
á¥ááá¬á¡á¬ážááŒáá·áºá áá±á«ááºážááá·áºááŒááºážá áááºážááŒááºááŒááºážá áá»ááºááŒááºážá¡ááœáẠáá¯ááºáá¯á¶ážáá¯ááºáááºážáá»á¬ážááᯠá¡ááŒá¬ážááŒááºá ááºáá»á¬ážá¡ááœáẠáá¯ááºáá±á¬ááºáá«áááºá
utility á áá¯ááºáá±á¬ááºáá»ááºááẠá¡ááá·áºá¡áááºáááŸááá±á¬ áá¬áá¬áá»á¬ážá á¡á á¯á¡áá±ážáá»á¬ážá ááááºážá¡áá»ááºá¡ááẠá¡ááŒá±á áá¯ááºá áááºážáá»á¬áž á áááºááá¯á·ááᯠáááºááœáŸááºážáá¬ážáá±á¬ááŒá±á¬áá·áº áááºááá·áºáá¬áᬠááá¯á·ááá¯áẠááááºážá¡áá»ááºá¡ááẠáá¯á¶ááŒá¯á¶áá±ážá áá áºá á¡á á¯á¡áá±ážááᯠááá¯ááºááá¯ááºááŒá±á¬ááºáž áá¯á¶ážááŒááºáááºá¡ááœáẠááá¹áá¬áá¯á¶ážááá¯ááºáᬠááááºážááŸááºáá»á¬ážá áœá¬ááᯠááááºáááºáá²á·ááŒá®ážá áá áºáá¯á á®ááœáẠáááºááŸááºáá¬ážááá·áº áááºááá¯ážáá»á¬ážá áá áºáááºáááŒááºá ááºáá»á¬ážááá¯áááºááá áºááŸáááºáá«á á¡á²áá«ááœá±á áá¯ááºáá¯á¶ážáá¯ááºáááºážááẠáááºáááŒááºá ááºáá»á¬ážá¡á¬ážáá¯á¶ážááŸáááá·áº áááºáá«ááá²áá²áááºáááºááŒá®áž ááááºážááŸááºáá»á¬ážááᯠáááºááŸááºáááº-
SetGlobalVarFromTreeItems
proc SetGlobalVarFromTreeItems {tree id} {
global host server active_cluster infobase
set parent [$tree parent $id]
set values [$tree item $id -values]
set key [lindex [split $id "::"] 0]
switch -- $key {
server {set host $values}
work_server {set server $values}
cluster {set active_cluster $values}
infobase {set infobase $values}
}
if {$parent eq ""} {
return
} else {
SetGlobalVarFromTreeItems $tree $parent
}
}
1C á¡á á¯á¡áá±ážááẠááá·áºá¡á¬áž ááœáá·áºááŒá¯áá»ááºááŒáá·áº ááá¯á·ááá¯áẠá¡áá¯ááºááá¯ááºáá² ááœáá·áºááŒá¯áá¬ážáááºá á á®áá¶ááá·áºááœá²áá° á¡áá»áá¯ážá¡á á¬áž ááŸá áºáá»áá¯áž ááŸáááẠ- á¡á á¯ááá¯áẠááá¯ááºá á¬ážááŸáẠá á®áá¶ááá·áºááœá²áá° ááŸáá·áº á¡á á¯ááá¯áẠá á®áá¶ááá·áºááœá²áá° áá°á ááŸá áºáá»áá¯áž ááŸááááºá ááá¯á·ááŒá±á¬áá·áºá ááŸááºáááºáá±á¬áá¯ááºáá±á¬ááºáá»ááºá¡ááœááºá á á®áá¶ááá·áºááœá²áá°áááºáá±á¬ááºááŒááºážááŸáá·áº á áá¬ážááŸááºáá»á¬ážáá«ááŸááá±á¬ áá±á¬ááºááẠááá¹áá¬áá¯á¶ážááá¯ááºáᬠááááºážááŸáẠá áá¯ááᯠááááºáááºáá±ážáá²á·áááºá á¡á²áá«ááœá±á á¡á á¯á¡áá±ážááœáẠá á®áá¶ááá·áºááœá²áá°á¡áá±á¬áá·áºáá áºáá¯ááŸááá±áá«áá áááºááááºáá±á¬ááºááŸá¯ááŸáá·áº á áá¬ážááŸááºááá¯ááá·áºááœááºážááẠááá¯ááºáá¬áá±á¬á·ááºáá áºáá¯ááŒááááºááŒá áºááŒá®áž áá±áá¬áá»á¬ážááᯠááŸááºáá¬ááºááœááºááááºážáááºážáááºááŒá áºááŒá®áž áááºááá¯ááºáá¬á¡á á¯á¡áá±ážá¡ááœáẠá¡áááá·áºáá áºáá¯á á®ááœáẠááá·áºááœááºážáááºááŒá áºáááºá
á€áááºááŸá¬ á¡ááŸá¬ážá¡ááœááºážááᯠááá¯ááºááœááºááŒááºážá áá¬áááºááŒá áºáááºá
ErrorParcing
proc ErrorParcing {err opt} {
global cluster_user cluster_pwd agent_user agent_pwd
switch -regexp -- $err {
"Cluster administrator is not authenticated" {
AuthorisationDialog "ÐЎЌОМОÑÑÑаÑÐŸÑ ÐºÐ»Ð°ÑÑеÑа"
.auth_win.frm_btn.btn_ok configure -command {
set cluster_user [.auth_win.frm.ent_name get]
set cluster_pwd [.auth_win.frm.ent_pwd get]
destroy .auth_win
}
#RunCommand $root $par
}
"Central server administrator is not authenticated" {
AuthorisationDialog "ÐЎЌОМОÑÑÑаÑÐŸÑ Ð°Ð³ÐµÐœÑа клаÑÑеÑа"
.auth_win.frm_btn.btn_ok configure -command {
set agent_user [.auth_win.frm.ent_name get]
set agent_pwd [.auth_win.frm.ent_pwd get]
destroy .auth_win
}
}
"ÐЎЌОМОÑÑÑаÑÐŸÑ ÐºÐ»Ð°ÑÑеÑа Ме аÑÑеМÑОÑОÑОÑПваМ" {
AuthorisationDialog "ÐЎЌОМОÑÑÑаÑÐŸÑ ÐºÐ»Ð°ÑÑеÑа"
.auth_win.frm_btn.btn_ok configure -command {
set cluster_user [.auth_win.frm.ent_name get]
set cluster_pwd [.auth_win.frm.ent_pwd get]
destroy .auth_win
}
#RunCommand $root $par
}
"ÐЎЌОМОÑÑÑаÑÐŸÑ ÑеМÑÑалÑМПгП ÑеÑвеÑа Ме аÑÑеМÑОÑОÑОÑПваМ" {
AuthorisationDialog "ÐЎЌОМОÑÑÑаÑÐŸÑ Ð°Ð³ÐµÐœÑа клаÑÑеÑа"
.auth_win.frm_btn.btn_ok configure -command {
set agent_user [.auth_win.frm.ent_name get]
set agent_pwd [.auth_win.frm.ent_pwd get]
destroy .auth_win
}
}
(.+) {
tk_messageBox -type ok -icon error -message "$err"
}
}
}
á¡á²áá«ááœá±á á¡áááá·áºááŒááºáá±ážááá·áºá¡áá±á«áºáá°áááºá áá¯á¶á·ááŒááºááŸá¯ááẠáá»á±á¬áºáá®áááºááŒá áºáááºá
áá±á¬áá±á¬áááºááœááºá áá¯ááºáá±á¬ááºááá¯ááºá áœááºážá 95 áá¬ááá¯ááºááŸá¯ááºážááá·áºááᯠá¡áá±á¬ááºá¡ááẠáá±á¬áºáá¬ážááŒá®áž áá»ááºá¡á¬ážáá¯á¶ážááŸá¬ áá¯á¶ááŒá¯á¶áá±ážáááá¯ááá¯ááºáá»á¬ážááŒáá·áº á¡áá¯ááºáá¯ááºááŒá®áž á ááºážáááºááẠ=)á áá«áá«áá²á ááŸá¯ááºááŸááºáááºáá±áá²á· áá¬ááºáááºážá¡ááœáẠáá±á¬ááºážáááºáá«áááºá
áá¯ááºááᯠááŸá±ážááááºááááºážá áááŸáááá¯ááºáááºá
á¡ááºááááº- áá»áœááºá¯ááºááẠáá¯á¶ááŒá¯á¶áá±ážáááá¯ááá¯ááºáá»á¬ážááŒáá·áº áá¯ááºáá±á¬ááºááŒá®ážáá«ááŒá®á ááá¯áá¯ááºáá±á¬ááºáá»ááºááᯠ100% á¡áá±á¬ááºá¡áááºáá±á¬áºááá¯ááºáá«ááŒá®á
á¡ááºáááẠ2- á¡ááºá¹áááááºááŸáá·áº áá¯ááŸá¬ážáá¬áá¬ááá¯á· áááºáááºáá»á²á·ááœááºááŒááºážááᯠááá·áºááœááºážáá¬ážááŒá®ážá win7 ááœáẠá¡áá¯ááºáá¯ááºááŒááºážááᯠá
ááºážáááºááŒá®ážááŒá
áºáááºá
source: www.habr.com