GUI-แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ 1C RAC-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒแƒœ แƒ˜แƒกแƒ”แƒ• Tcl/Tk-แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘

แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒฉแƒ•แƒ”แƒœ แƒฉแƒแƒ•แƒฃแƒฆแƒ แƒ›แƒแƒ•แƒ“แƒ˜แƒ— แƒ—แƒ”แƒ›แƒแƒก, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก 1C แƒžแƒ แƒแƒ“แƒฃแƒฅแƒขแƒ”แƒ‘แƒ˜ Linux แƒ’แƒแƒ แƒ”แƒ›แƒแƒจแƒ˜, แƒแƒฆแƒ›แƒแƒ•แƒแƒฉแƒ˜แƒœแƒ”แƒ— แƒ”แƒ แƒ—แƒ˜ แƒœแƒแƒ™แƒšแƒ˜ - แƒ›แƒแƒกแƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ’แƒ แƒแƒคแƒ˜แƒ™แƒฃแƒšแƒ˜ แƒ›แƒ แƒแƒ•แƒแƒš แƒžแƒšแƒแƒขแƒคแƒแƒ แƒ›แƒ˜แƒก แƒฎแƒ”แƒšแƒกแƒแƒฌแƒงแƒแƒก แƒแƒ แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒ 1C แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ™แƒšแƒแƒกแƒขแƒ”แƒ แƒ˜แƒก แƒ›แƒแƒ แƒ—แƒ•แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ“แƒ แƒ’แƒแƒ“แƒแƒฌแƒงแƒ“แƒ แƒแƒ› แƒฎแƒแƒ แƒ•แƒ”แƒ–แƒ˜แƒก แƒ’แƒแƒ›แƒแƒกแƒฌแƒแƒ แƒ”แƒ‘แƒ rac แƒ™แƒแƒœแƒกแƒแƒšแƒ˜แƒก แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก GUI-แƒ˜แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒ—. Tcl/tk แƒจแƒ”แƒ˜แƒ แƒฉแƒ แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒ”แƒœแƒแƒ“, แƒ แƒแƒ’แƒแƒ แƒช, แƒฉแƒ”แƒ›แƒ˜ แƒแƒ–แƒ แƒ˜แƒ—, แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒจแƒ”แƒกแƒแƒคแƒ”แƒ แƒ˜แƒกแƒ˜ แƒแƒ› แƒแƒ›แƒแƒชแƒแƒœแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒแƒกแƒ” แƒ แƒแƒ›, แƒ›แƒ” แƒ›แƒ˜แƒœแƒ“แƒ แƒฌแƒแƒ แƒ›แƒแƒ’แƒ˜แƒ“แƒ’แƒ˜แƒœแƒแƒ— แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒ˜แƒก แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ แƒแƒกแƒžแƒ”แƒฅแƒขแƒ˜ แƒแƒ› แƒ›แƒแƒกแƒแƒšแƒแƒจแƒ˜.

แƒกแƒแƒ›แƒฃแƒจแƒแƒแƒ“ แƒ“แƒแƒ’แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ— tcl/tk แƒ“แƒ 1C แƒ“แƒ˜แƒกแƒขแƒ แƒ˜แƒ‘แƒฃแƒชแƒ˜แƒ. แƒ“แƒ แƒ แƒแƒ“แƒ’แƒแƒœ แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ” แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒ˜ tcl/tk แƒ›แƒ˜แƒฌแƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜ แƒ›แƒแƒฅแƒกแƒ˜แƒ›แƒแƒšแƒฃแƒ แƒแƒ“ แƒ’แƒแƒ›แƒแƒ›แƒ”แƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒœแƒ แƒ›แƒ”แƒกแƒแƒ›แƒ” แƒ›แƒฎแƒแƒ แƒ˜แƒก แƒžแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”, แƒ“แƒแƒ›แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒ•แƒ”แƒ แƒกแƒ˜แƒ 8.6.7, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒแƒ˜แƒชแƒแƒ•แƒก ttk - แƒžแƒแƒ™แƒ”แƒขแƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒ’แƒ แƒแƒคแƒ˜แƒ™แƒฃแƒšแƒ˜ แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒ—, แƒ แƒแƒ›แƒ”แƒšแƒ—แƒแƒ’แƒแƒœ แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒแƒ“ แƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ ttk. ::TreeView, แƒ˜แƒก แƒ˜แƒซแƒšแƒ”แƒ•แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ แƒแƒ’แƒแƒ แƒช แƒฎแƒ˜แƒก แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒก, แƒแƒกแƒ”แƒ•แƒ” แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒก (แƒกแƒ˜แƒ˜แƒก) แƒกแƒแƒฎแƒ˜แƒ—. แƒแƒกแƒ”แƒ•แƒ”, แƒแƒฎแƒแƒš แƒ•แƒ”แƒ แƒกแƒ˜แƒแƒจแƒ˜ แƒ’แƒแƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ“แƒ แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒ’แƒแƒ›แƒแƒœแƒแƒ™แƒšแƒ˜แƒกแƒ”แƒ‘แƒ˜แƒ— (แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ try, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒžแƒ แƒแƒ”แƒฅแƒขแƒจแƒ˜ แƒ’แƒแƒ แƒ” แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒกแƒแƒก).

แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜ แƒจแƒ”แƒ“แƒ’แƒ”แƒ‘แƒ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒคแƒแƒ˜แƒšแƒ˜แƒกแƒแƒ’แƒแƒœ (แƒ—แƒฃแƒ›แƒชแƒ แƒแƒ แƒแƒคแƒ”แƒ แƒ˜ แƒ’แƒ˜แƒจแƒšแƒ˜แƒ— แƒฎแƒ”แƒšแƒก, แƒ แƒแƒ› แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ’แƒแƒแƒ™แƒ”แƒ—แƒแƒ— แƒ”แƒ แƒ—แƒจแƒ˜):

rac_gui.cfg - แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒ˜ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ
rac_gui.tcl - แƒ›แƒ—แƒแƒ•แƒแƒ แƒ˜ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒก แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ˜
lib แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒก, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒแƒ“ แƒ˜แƒขแƒ•แƒ˜แƒ แƒ—แƒ”แƒ‘แƒ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒกแƒแƒก:
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 แƒ™แƒแƒ›แƒฃแƒœแƒแƒšแƒฃแƒ แƒ˜ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒก แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒ˜แƒฎแƒกแƒœแƒ”แƒ‘แƒ แƒ’แƒ แƒแƒคแƒ˜แƒ™แƒฃแƒšแƒ˜ แƒคแƒแƒœแƒฏแƒแƒ แƒ. แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒก แƒ˜แƒœแƒขแƒ”แƒ แƒคแƒ”แƒ˜แƒกแƒ˜ แƒจแƒ”แƒ“แƒ’แƒ”แƒ‘แƒ แƒกแƒแƒ›แƒ˜ แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ˜แƒกแƒ’แƒแƒœ:

แƒฎแƒ”แƒšแƒกแƒแƒฌแƒงแƒแƒ”แƒ‘แƒ˜แƒก แƒžแƒแƒœแƒ”แƒšแƒ˜, แƒฎแƒ” แƒ“แƒ แƒกแƒ˜แƒ

"แƒฎแƒ˜แƒก" แƒจแƒ˜แƒœแƒแƒแƒ แƒกแƒ˜ แƒ›แƒแƒฅแƒกแƒ˜แƒ›แƒแƒšแƒฃแƒ แƒแƒ“ แƒ’แƒแƒ•แƒฃแƒ™แƒ”แƒ—แƒ” Windows-แƒ˜แƒก แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒฃแƒš แƒแƒฆแƒญแƒฃแƒ แƒ•แƒ˜แƒšแƒแƒ‘แƒแƒก 1C-แƒ“แƒแƒœ.

GUI-แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ 1C RAC-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒแƒœ แƒ˜แƒกแƒ”แƒ• Tcl/Tk-แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘

แƒ›แƒ—แƒแƒ•แƒแƒ แƒ˜ แƒ™แƒแƒ“แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฅแƒ›แƒœแƒ˜แƒก แƒแƒ› แƒคแƒแƒœแƒฏแƒแƒ แƒแƒก, แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒคแƒแƒ˜แƒšแƒก
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

แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒแƒกแƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒก แƒแƒšแƒ’แƒแƒ แƒ˜แƒ—แƒ›แƒ˜ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜แƒ:

1. แƒฃแƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ”แƒก แƒงแƒแƒ•แƒšแƒ˜แƒกแƒ, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒแƒ›แƒแƒขแƒแƒ— แƒ›แƒ—แƒแƒ•แƒแƒ แƒ˜ แƒ™แƒšแƒแƒกแƒขแƒ”แƒ แƒฃแƒšแƒ˜ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜ (แƒแƒœแƒฃ แƒ™แƒšแƒแƒกแƒขแƒ”แƒ แƒ˜แƒก แƒ›แƒแƒ แƒ—แƒ•แƒ˜แƒก แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜ (Linux-แƒจแƒ˜ แƒ›แƒ”แƒœแƒ”แƒฏแƒ›แƒ”แƒœแƒขแƒ˜ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ˜แƒ— โ€ž/opt/1C/v8.3/x86_64/ras แƒ™แƒšแƒแƒกแƒขแƒ”แƒ แƒ˜ โ€” daemonโ€œ)).

แƒแƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก แƒ“แƒแƒแƒฌแƒ™แƒแƒžแƒฃแƒœแƒ”แƒ— แƒฆแƒ˜แƒšแƒแƒ™แƒ–แƒ” โ€ž+โ€œ แƒ“แƒ แƒ’แƒแƒฎแƒกแƒœแƒ˜แƒš แƒคแƒแƒœแƒฏแƒแƒ แƒแƒจแƒ˜ แƒจแƒ”แƒ˜แƒงแƒ•แƒแƒœแƒ”แƒ— แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ˜ แƒ“แƒ แƒžแƒแƒ แƒขแƒ˜:

GUI-แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ 1C RAC-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒแƒœ แƒ˜แƒกแƒ”แƒ• Tcl/Tk-แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘

แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒฉแƒ•แƒ”แƒœแƒ˜ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜ แƒ’แƒแƒ›แƒแƒฉแƒœแƒ“แƒ”แƒ‘แƒ แƒฎแƒ”แƒจแƒ˜ แƒ›แƒแƒกแƒ–แƒ” แƒ“แƒแƒฌแƒ™แƒแƒžแƒฃแƒœแƒ”แƒ‘แƒ˜แƒ—, แƒ’แƒแƒ˜แƒฎแƒกแƒœแƒ”แƒ‘แƒ แƒ™แƒšแƒแƒกแƒขแƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒ แƒแƒœ แƒ’แƒแƒ›แƒแƒฉแƒœแƒ“แƒ”แƒ‘แƒ แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜แƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ.

2. แƒ™แƒšแƒแƒกแƒขแƒ”แƒ แƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ–แƒ” แƒ“แƒแƒฌแƒ™แƒแƒžแƒฃแƒœแƒ”แƒ‘แƒ˜แƒ— แƒ’แƒแƒ˜แƒฎแƒกแƒœแƒ”แƒ‘แƒ แƒ›แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒ.

3.

แƒ“แƒ แƒแƒกแƒ” แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ”.แƒ˜. แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒšแƒแƒกแƒขแƒ”แƒ แƒ˜แƒก แƒ“แƒแƒกแƒแƒ›แƒแƒขแƒ”แƒ‘แƒšแƒแƒ“, แƒแƒ˜แƒ แƒฉแƒ˜แƒ”แƒ— แƒกแƒ˜แƒแƒจแƒ˜ แƒแƒ แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒ›แƒ” แƒ“แƒ แƒ“แƒแƒแƒญแƒ˜แƒ แƒ”แƒ— แƒฆแƒ˜แƒšแƒแƒ™แƒก โ€ž+โ€œ แƒฎแƒ”แƒšแƒกแƒแƒฌแƒงแƒแƒ—แƒ แƒ–แƒแƒšแƒจแƒ˜ แƒ“แƒ แƒ’แƒแƒ›แƒแƒฉแƒœแƒ“แƒ”แƒ‘แƒ แƒแƒฎแƒแƒšแƒ˜ แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒก แƒ“แƒ˜แƒแƒšแƒแƒ’แƒ˜:

GUI-แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ 1C RAC-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒแƒœ แƒ˜แƒกแƒ”แƒ• Tcl/Tk-แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘

แƒฎแƒ”แƒšแƒกแƒแƒฌแƒงแƒแƒ—แƒ แƒ–แƒแƒšแƒจแƒ˜ แƒฆแƒ˜แƒšแƒแƒ™แƒ”แƒ‘แƒ˜ แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ”แƒœ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒก แƒ™แƒแƒœแƒขแƒ”แƒฅแƒกแƒขแƒ˜แƒ“แƒแƒœ แƒ’แƒแƒ›แƒแƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ”, แƒ”.แƒ˜. แƒ˜แƒ›แƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ—, แƒ—แƒฃ แƒ แƒแƒ›แƒ”แƒšแƒ˜ แƒฎแƒ˜แƒก แƒแƒœ แƒกแƒ˜แƒ˜แƒก แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ˜แƒ แƒแƒ แƒฉแƒ”แƒฃแƒšแƒ˜, แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ“แƒ”แƒ‘แƒ แƒ”แƒ แƒ—แƒ˜ แƒแƒœ แƒกแƒฎแƒ•แƒ แƒžแƒ แƒแƒชแƒ”แƒ“แƒฃแƒ แƒ.

แƒ›แƒแƒ“แƒ˜แƒ— แƒจแƒ”แƒ•แƒฎแƒ”แƒ“แƒแƒ— แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒก แƒฆแƒ˜แƒšแƒแƒ™แƒ˜แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒก (โ€œ+โ€):

แƒฆแƒ˜แƒšแƒแƒ™แƒ˜แƒก แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ™แƒแƒ“แƒ˜:

ttk::button $frm_tool.btn_add  -command Add  -image add_grey_32

แƒแƒฅ แƒฉแƒ•แƒ”แƒœ แƒ•แƒฎแƒ”แƒ“แƒแƒ•แƒ—, แƒ แƒแƒ› แƒฆแƒ˜แƒšแƒแƒ™แƒ–แƒ” แƒ“แƒแƒญแƒ”แƒ แƒ˜แƒกแƒแƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ“แƒ”แƒ‘แƒ "แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ" แƒžแƒ แƒแƒชแƒ”แƒ“แƒฃแƒ แƒ, แƒ›แƒ˜แƒกแƒ˜ แƒ™แƒแƒ“แƒ˜:

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-แƒ˜แƒก แƒ”แƒ แƒ—-แƒ”แƒ แƒ—แƒ˜ แƒฃแƒžแƒ˜แƒ แƒแƒขแƒ”แƒกแƒแƒ‘แƒ: แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ’แƒแƒ“แƒแƒกแƒชแƒ”แƒ— แƒชแƒ•แƒšแƒแƒ“แƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ, แƒ แƒแƒ’แƒแƒ แƒช แƒžแƒ แƒแƒชแƒ”แƒ“แƒฃแƒ แƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ˜:

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

แƒ™แƒแƒ แƒ’แƒ˜, แƒแƒ› แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ’แƒ แƒซแƒ”แƒšแƒ”แƒ‘แƒ˜แƒ—, แƒ›แƒ” แƒ•แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘ แƒžแƒ แƒแƒชแƒ”แƒ“แƒฃแƒ แƒ”แƒ‘แƒก, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒก แƒ“แƒ˜แƒแƒšแƒแƒ’แƒ”แƒ‘แƒก แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒแƒœ แƒ™แƒšแƒแƒกแƒขแƒ”แƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.

แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ::แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜

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-แƒจแƒ˜, แƒ’แƒ แƒแƒคแƒ˜แƒ™แƒฃแƒšแƒ˜ แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒ—แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ“แƒแƒ˜แƒšแƒแƒฎแƒแƒก แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒกแƒแƒก แƒแƒคแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก. แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒกแƒแƒฌแƒงแƒ˜แƒกแƒ˜ แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ แƒฆแƒ˜แƒšแƒแƒ™แƒ˜แƒก แƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก:

ttk::button $frm_btn.btn_ok -image ok_grey_24 -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
    }

แƒ–แƒ”แƒ›แƒแƒ— แƒ›แƒแƒงแƒ•แƒแƒœแƒ˜แƒš แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒจแƒ˜, "แƒฉแƒแƒ™แƒ”แƒขแƒ˜แƒšแƒ˜" แƒฆแƒ˜แƒšแƒแƒ™แƒ˜ แƒ˜แƒฌแƒงแƒ”แƒ‘แƒก แƒ™แƒšแƒแƒกแƒขแƒ”แƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒ“แƒฃแƒ แƒแƒก.

แƒแƒฅ แƒฆแƒ˜แƒ แƒก แƒ“แƒ˜แƒ’แƒ แƒ”แƒกแƒ˜แƒ˜แƒก แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ แƒ’แƒ แƒแƒคแƒ˜แƒ™แƒฃแƒš แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒแƒ–แƒ” Tk-แƒจแƒ˜ - แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒจแƒ”แƒงแƒ•แƒแƒœแƒ˜แƒก แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก (แƒจแƒ”แƒกแƒ•แƒšแƒ, แƒ™แƒแƒ›แƒ‘แƒแƒ‘แƒแƒฅแƒกแƒ˜, แƒ’แƒแƒ›แƒจแƒ•แƒ”แƒ‘แƒ˜ แƒฆแƒ˜แƒšแƒแƒ™แƒ˜ แƒ“แƒ แƒ.แƒจ.) แƒจแƒ”แƒ›แƒแƒฆแƒ”แƒ‘แƒฃแƒš แƒ˜แƒฅแƒœแƒ แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ˜, แƒ แƒแƒ’แƒแƒ แƒช แƒขแƒ”แƒฅแƒกแƒขแƒฃแƒ แƒ˜ แƒชแƒ•แƒšแƒแƒ“แƒ˜:

entry  $frm.ent_lifetime_limit -textvariable lifetime_limit

แƒ”แƒก แƒชแƒ•แƒšแƒแƒ“แƒ˜ แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒฃแƒšแƒ˜แƒ แƒ’แƒšแƒแƒ‘แƒแƒšแƒฃแƒ  แƒกแƒแƒฎแƒ”แƒšแƒ—แƒ แƒกแƒ˜แƒ•แƒ แƒชแƒ”แƒจแƒ˜ แƒ“แƒ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒแƒ›แƒŸแƒแƒ›แƒแƒ“ แƒจแƒ”แƒงแƒ•แƒแƒœแƒ˜แƒš แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒแƒก. แƒ˜แƒ›แƒแƒ—. แƒ•แƒ”แƒšแƒ˜แƒ“แƒแƒœ แƒจแƒ”แƒงแƒ•แƒแƒœแƒ˜แƒšแƒ˜ แƒขแƒ”แƒฅแƒกแƒขแƒ˜แƒก แƒ›แƒ˜แƒกแƒแƒฆแƒ”แƒ‘แƒแƒ“, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒฃแƒœแƒ“แƒ แƒฌแƒแƒ˜แƒ™แƒ˜แƒ—แƒฎแƒแƒ— แƒชแƒ•แƒšแƒแƒ“แƒ˜แƒก แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ (แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒ˜แƒ› แƒžแƒ˜แƒ แƒแƒ‘แƒ˜แƒ—, แƒ แƒแƒ› แƒ˜แƒ’แƒ˜ แƒ’แƒแƒœแƒ˜แƒกแƒแƒ–แƒฆแƒ•แƒ แƒแƒก แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒกแƒแƒก).

แƒจแƒ”แƒงแƒ•แƒแƒœแƒ˜แƒšแƒ˜ แƒขแƒ”แƒฅแƒกแƒขแƒ˜แƒก แƒแƒฆแƒ“แƒ’แƒ”แƒœแƒ˜แƒก แƒ›แƒ”แƒแƒ แƒ” แƒ›แƒ”แƒ—แƒแƒ“แƒ˜ (แƒจแƒ”แƒกแƒ•แƒšแƒ˜แƒก แƒขแƒ˜แƒžแƒ˜แƒก แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก) แƒแƒ แƒ˜แƒก get แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ:

.add.frm.ent_name get

แƒแƒ แƒ˜แƒ•แƒ” แƒ”แƒก แƒ›แƒ”แƒ—แƒแƒ“แƒ˜ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ˜แƒฎแƒ˜แƒšแƒแƒ— แƒ–แƒ”แƒ›แƒแƒ— แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒš แƒ™แƒแƒ“แƒจแƒ˜.

แƒแƒ› แƒฆแƒ˜แƒšแƒแƒ™แƒ–แƒ” แƒ“แƒแƒฌแƒ™แƒแƒžแƒฃแƒœแƒ”แƒ‘แƒ˜แƒ—, แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ˜แƒฌแƒงแƒ”แƒ‘แƒ RunCommand แƒžแƒ แƒแƒชแƒ”แƒ“แƒฃแƒ แƒ แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ˜แƒก แƒฎแƒแƒ–แƒ˜แƒ— rac-แƒ˜แƒก แƒ—แƒ•แƒแƒšแƒกแƒแƒ–แƒ แƒ˜แƒกแƒ˜แƒ— แƒ™แƒšแƒแƒกแƒขแƒ”แƒ แƒ˜แƒก แƒ“แƒแƒกแƒแƒ›แƒแƒขแƒ”แƒ‘แƒšแƒแƒ“:

/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

แƒแƒฎแƒšแƒ แƒฉแƒ•แƒ”แƒœ แƒ›แƒ˜แƒ•แƒ“แƒ˜แƒ•แƒแƒ แƒ— แƒ›แƒ—แƒแƒ•แƒแƒ  แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒแƒ–แƒ”, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ”แƒ‘แƒก rac-แƒ˜แƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒแƒก แƒฉแƒ•แƒ”แƒœแƒ—แƒ•แƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒ แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜แƒ—, แƒแƒกแƒ”แƒ•แƒ” แƒแƒแƒœแƒแƒšแƒ˜แƒ–แƒ”แƒ‘แƒก แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒ›แƒแƒ•แƒแƒšแƒก แƒกแƒ˜แƒ”แƒ‘แƒจแƒ˜ แƒ“แƒ แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒก, แƒกแƒแƒญแƒ˜แƒ แƒแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜:

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 แƒžแƒ แƒแƒชแƒ”แƒ“แƒฃแƒ แƒแƒจแƒ˜ (แƒคแƒแƒ˜แƒšแƒ˜ 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::server แƒแƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ“แƒ”แƒ‘แƒ แƒ›แƒ—แƒแƒ•แƒแƒ แƒ˜ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก (แƒ™แƒšแƒแƒกแƒขแƒ”แƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก - Run::cluster, แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก - Run::work_server แƒ“แƒ แƒ.แƒจ.). แƒ˜แƒ›แƒแƒ—. $key แƒชแƒ•แƒšแƒแƒ“แƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ แƒแƒ แƒ˜แƒก แƒแƒคแƒชแƒ˜แƒแƒœแƒ˜แƒก แƒ›แƒ˜แƒ”แƒ  แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒฎแƒ˜แƒก แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ˜แƒก แƒœแƒแƒฌแƒ˜แƒšแƒ˜ -แƒ˜แƒ“แƒ˜.

แƒ›แƒแƒ“แƒ˜แƒ— แƒงแƒฃแƒ แƒแƒ“แƒฆแƒ”แƒ‘แƒ แƒ›แƒ˜แƒ•แƒแƒฅแƒชแƒ˜แƒแƒ— แƒžแƒ แƒแƒชแƒ”แƒ“แƒฃแƒ แƒแƒก

แƒ’แƒแƒฃแƒจแƒ•แƒ˜แƒ—:: แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜

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 แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ— แƒ“แƒ แƒแƒ›แƒแƒขแƒ”แƒ‘แƒก แƒฎแƒ”แƒก แƒงแƒ•แƒ”แƒšแƒ แƒกแƒแƒฎแƒ˜แƒก แƒœแƒ˜แƒ•แƒ—แƒก - แƒ™แƒšแƒแƒกแƒขแƒ”แƒ แƒ”แƒ‘แƒก, แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ root แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒก (แƒ‘แƒแƒ–แƒ”แƒ‘แƒ˜, แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ”แƒ‘แƒ˜, แƒกแƒ”แƒกแƒ˜แƒ”แƒ‘แƒ˜ แƒ“แƒ แƒ.แƒจ.). แƒ—แƒฃ แƒ™แƒแƒ แƒ’แƒแƒ“ แƒ“แƒแƒแƒ™แƒ•แƒ˜แƒ แƒ“แƒ”แƒ‘แƒ˜แƒ—, แƒจแƒ˜แƒ’แƒœแƒ˜แƒ— แƒจแƒ”แƒแƒ›แƒฉแƒœแƒ”แƒ•แƒ— แƒ–แƒแƒ แƒก InsertItemsWorkList แƒžแƒ แƒแƒชแƒ”แƒ“แƒฃแƒ แƒแƒ–แƒ”. แƒ˜แƒ’แƒ˜ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ’แƒ แƒแƒคแƒ˜แƒ™แƒฃแƒš แƒกแƒ˜แƒแƒจแƒ˜ แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒกแƒแƒ›แƒแƒขแƒ”แƒ‘แƒšแƒแƒ“ rac แƒ™แƒแƒœแƒกแƒแƒšแƒ˜แƒก แƒฃแƒขแƒ˜แƒšแƒ˜แƒขแƒ˜แƒก แƒ’แƒแƒ›แƒแƒกแƒแƒ•แƒšแƒ˜แƒก แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ˜แƒ—, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ“แƒ แƒ” แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒงแƒ แƒกแƒ˜แƒแƒจแƒ˜ $lst แƒชแƒ•แƒšแƒแƒ“แƒจแƒ˜. แƒ”แƒก แƒแƒ แƒ˜แƒก แƒกแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒฌแƒงแƒ•แƒ˜แƒšแƒ”แƒ‘แƒก, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ’แƒแƒ›แƒแƒงแƒแƒคแƒ˜แƒšแƒ˜แƒ แƒแƒ แƒฌแƒ”แƒ แƒขแƒ˜แƒšแƒ˜แƒ—.

แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒ™แƒšแƒแƒกแƒขแƒ”แƒ แƒฃแƒšแƒ˜ แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒ:

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

แƒ’แƒ แƒแƒคแƒ˜แƒ™แƒฃแƒšแƒ˜ แƒคแƒแƒ แƒ›แƒ˜แƒ—, แƒ”แƒก แƒแƒกแƒ” แƒ’แƒแƒ›แƒแƒ˜แƒงแƒฃแƒ แƒ”แƒ‘แƒ:

GUI-แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ 1C RAC-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒแƒœ แƒ˜แƒกแƒ”แƒ• Tcl/Tk-แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘

แƒ–แƒ”แƒ›แƒแƒ— แƒ›แƒแƒงแƒ•แƒแƒœแƒ˜แƒšแƒ˜ แƒžแƒ แƒแƒชแƒ”แƒ“แƒฃแƒ แƒ แƒ˜แƒ แƒฉแƒ”แƒ•แƒก แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ”แƒ‘แƒก แƒกแƒแƒ—แƒแƒฃแƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒก แƒจแƒ”แƒกแƒแƒ•แƒกแƒ”แƒ‘แƒแƒ“:

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
}

แƒแƒฅ, แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ˜แƒก แƒœแƒแƒชแƒ•แƒšแƒแƒ“ [split $str ":"], แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒงแƒแƒคแƒก แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒก ":"-แƒ˜แƒ— แƒ’แƒแƒ›แƒแƒงแƒแƒคแƒ˜แƒš แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒแƒ“ แƒ“แƒ แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒก แƒกแƒ˜แƒแƒก, แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ แƒ”แƒ’แƒฃแƒšแƒแƒ แƒฃแƒšแƒ˜ แƒ’แƒแƒ›แƒแƒฎแƒแƒขแƒฃแƒšแƒ”แƒ‘แƒ, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ–แƒแƒ’แƒ˜แƒ”แƒ แƒ—แƒ˜ แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ˜ แƒแƒกแƒ”แƒ•แƒ” แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒแƒ แƒฌแƒ”แƒ แƒขแƒ˜แƒšแƒก.

InsertClusterItems แƒžแƒ แƒแƒชแƒ”แƒ“แƒฃแƒ แƒ (แƒ”แƒ แƒ—-แƒ”แƒ แƒ—แƒ˜ แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ˜ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ”แƒ“แƒแƒœ) แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒแƒ›แƒแƒขแƒ”แƒ‘แƒก แƒฏแƒ’แƒฃแƒคแƒฃแƒ แƒ˜ แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒแƒก แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒ˜ แƒ˜แƒ“แƒ”แƒœแƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒแƒ แƒ”แƒ‘แƒ˜แƒ— แƒกแƒแƒญแƒ˜แƒ แƒ แƒ™แƒแƒกแƒ”แƒขแƒฃแƒ แƒ˜ แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ˜แƒก แƒฎแƒ”แƒก.
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"
    }
}

แƒแƒ˜ แƒฃแƒคแƒ แƒ แƒกแƒฌแƒแƒ แƒ˜ แƒ›แƒ˜แƒ“แƒ’แƒแƒ›แƒ:

InsertProfileItems

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 
    }
}

แƒ›แƒแƒ— แƒจแƒแƒ แƒ˜แƒก แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒ แƒแƒ แƒ˜แƒก แƒ›แƒแƒ แƒงแƒฃแƒŸแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ, แƒ แƒแƒ›แƒ”แƒšแƒจแƒ˜แƒช แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ’แƒแƒœแƒ›แƒ”แƒแƒ แƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘(แƒ”แƒ‘)แƒ˜. แƒ แƒแƒ›แƒ”แƒšแƒ˜ แƒ›แƒ˜แƒ“แƒ’แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒแƒ แƒ˜แƒก แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ˜แƒก แƒจแƒ”แƒฎแƒ”แƒ“แƒฃแƒšแƒ”แƒ‘แƒ˜แƒกแƒแƒ›แƒ”แƒ‘แƒ .

แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒœแƒ•แƒ˜แƒฎแƒ˜แƒšแƒ”แƒ— แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ แƒ“แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒซแƒ˜แƒ”แƒ‘แƒ, แƒแƒฎแƒšแƒ แƒ“แƒ แƒแƒ แƒคแƒแƒ™แƒฃแƒกแƒ˜แƒ แƒ”แƒ‘แƒ แƒ›แƒแƒแƒฎแƒ“แƒ˜แƒœแƒแƒ— แƒ แƒ”แƒ“แƒแƒฅแƒขแƒ˜แƒ แƒ”แƒ‘แƒแƒ–แƒ”. แƒ•แƒ˜แƒœแƒแƒ˜แƒ“แƒแƒœ, แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒแƒ“, แƒ˜แƒ’แƒ˜แƒ•แƒ” แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ แƒ”แƒ“แƒแƒฅแƒขแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒ แƒ“แƒแƒกแƒแƒ›แƒแƒขแƒ”แƒ‘แƒšแƒแƒ“ (แƒกแƒแƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ แƒ‘แƒแƒ–แƒ˜แƒก แƒ’แƒแƒ แƒ“แƒ), แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ˜แƒ’แƒ˜แƒ•แƒ” แƒ“แƒ˜แƒแƒšแƒแƒ’แƒฃแƒ แƒ˜ แƒคแƒแƒ แƒ›แƒ”แƒ‘แƒ˜. แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒ“แƒฃแƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒซแƒแƒฎแƒ”แƒ‘แƒ˜แƒก แƒแƒšแƒ’แƒแƒ แƒ˜แƒ—แƒ›แƒ˜ แƒแƒกแƒ” แƒ’แƒแƒ›แƒแƒ˜แƒงแƒฃแƒ แƒ”แƒ‘แƒ:

Add::$key->AddToplevel

แƒ“แƒ แƒแƒกแƒ”แƒ—แƒ˜ แƒ แƒ”แƒ“แƒแƒฅแƒขแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก:

Edit::$key->Add::$key->AddTopLevel

แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒแƒ•แƒ˜แƒฆแƒแƒ— แƒ™แƒšแƒแƒกแƒขแƒ”แƒ แƒ˜แƒก แƒ แƒ”แƒ“แƒแƒฅแƒขแƒ˜แƒ แƒ”แƒ‘แƒ, แƒ”.แƒ˜. แƒฎแƒ”แƒจแƒ˜ แƒ™แƒšแƒแƒกแƒขแƒ”แƒ แƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ–แƒ” แƒ“แƒแƒฌแƒ™แƒแƒžแƒฃแƒœแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ“แƒแƒแƒญแƒ˜แƒ แƒ”แƒ— แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒ—แƒ แƒžแƒแƒœแƒ”แƒšแƒจแƒ˜ (แƒคแƒแƒœแƒฅแƒแƒ แƒ˜) แƒฆแƒ˜แƒšแƒแƒ™แƒก แƒ แƒ”แƒ“แƒแƒฅแƒขแƒ˜แƒ แƒ”แƒ‘แƒ แƒ“แƒ แƒ”แƒ™แƒ แƒแƒœแƒ–แƒ” แƒ’แƒแƒ›แƒแƒฉแƒœแƒ“แƒ”แƒ‘แƒ แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒ˜ แƒคแƒแƒ แƒ›แƒ:

GUI-แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ 1C RAC-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒแƒœ แƒ˜แƒกแƒ”แƒ• Tcl/Tk-แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘
แƒ แƒ”แƒ“แƒแƒฅแƒขแƒ˜แƒ แƒ”แƒ‘แƒ::แƒ™แƒšแƒแƒกแƒขแƒ”แƒ แƒ˜

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-แƒ˜แƒก แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ”แƒ แƒ—แƒ˜ แƒฃแƒžแƒ˜แƒ แƒแƒขแƒ”แƒกแƒแƒ‘แƒ - แƒกแƒฎแƒ•แƒ แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜ แƒฉแƒแƒœแƒแƒชแƒ•แƒšแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒชแƒ•แƒšแƒแƒ“แƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ”แƒ‘แƒ˜แƒ—. แƒ˜แƒ›แƒแƒ—. แƒคแƒแƒ แƒ›แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ•แƒกแƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒ˜แƒœแƒ˜แƒชแƒ˜แƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ•แƒ”แƒšแƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ”แƒกแƒแƒ‘แƒแƒ›แƒ”แƒ‘แƒ rac แƒฃแƒขแƒ˜แƒšแƒ˜แƒขแƒแƒก แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ˜แƒก แƒฎแƒแƒ–แƒ˜แƒก แƒ’แƒแƒ“แƒแƒ›แƒ แƒ—แƒ•แƒ”แƒšแƒ”แƒ‘แƒก แƒ“แƒ แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒ›แƒแƒ•แƒแƒšแƒ˜ แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ”แƒ‘แƒก แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒ’แƒแƒ›แƒแƒœแƒแƒ™แƒšแƒ˜แƒกแƒ˜แƒ— - แƒขแƒ˜แƒ แƒ” แƒ˜แƒชแƒ•แƒšแƒ”แƒ‘แƒ แƒฅแƒ•แƒ”แƒ“แƒ แƒฎแƒแƒ–แƒ˜แƒ—. แฒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“ แƒ“แƒแƒ’แƒ”แƒ’แƒ›แƒ˜แƒšแƒ˜-แƒกแƒแƒ›แƒฃแƒจแƒแƒ-แƒฃแƒแƒ แƒ˜ แƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ แƒ›แƒแƒ”แƒ“แƒแƒœแƒก ent_scheduled_jobs_แƒฃแƒแƒ แƒ˜ แƒ“แƒ แƒชแƒ•แƒšแƒแƒ“แƒ˜ แƒ“แƒแƒ’แƒ”แƒ’แƒ›แƒ˜แƒšแƒ˜_แƒกแƒแƒ›แƒฃแƒจแƒแƒ_แƒฃแƒแƒ แƒ˜.

แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒ แƒ”แƒ“แƒแƒฅแƒขแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒคแƒแƒ แƒ›แƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ“แƒ”แƒ‘แƒแƒ“แƒ”แƒก แƒ•แƒ”แƒšแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒ“แƒ’แƒ”แƒœแƒšแƒแƒ‘แƒ˜แƒ—, แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒกแƒแƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ แƒ‘แƒแƒ–แƒแƒกแƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ:

แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ˜แƒก แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ

GUI-แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ 1C RAC-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒแƒœ แƒ˜แƒกแƒ”แƒ• Tcl/Tk-แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘

แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ˜แƒก แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ”แƒ‘แƒ˜แƒก แƒ แƒ”แƒ“แƒแƒฅแƒขแƒ˜แƒ แƒ”แƒ‘แƒ

GUI-แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ 1C RAC-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒแƒœ แƒ˜แƒกแƒ”แƒ• Tcl/Tk-แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘

แƒ แƒ”แƒ“แƒแƒฅแƒขแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒ“แƒฃแƒ แƒแƒจแƒ˜ Edit::infobase แƒคแƒแƒ แƒ›แƒแƒก แƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒ แƒกแƒแƒญแƒ˜แƒ แƒ แƒ•แƒ”แƒšแƒ”แƒ‘แƒ˜, แƒ™แƒแƒ“แƒ˜ แƒ›แƒแƒชแƒฃแƒšแƒแƒ‘แƒ˜แƒ—แƒ˜แƒ, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒแƒฅ แƒแƒ  แƒฌแƒแƒ แƒ›แƒแƒ•แƒแƒ“แƒ’แƒ”แƒœ.

แƒแƒœแƒแƒšแƒแƒ’แƒ˜แƒ˜แƒ—, แƒกแƒฎแƒ•แƒ แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ“แƒ”แƒ‘แƒ แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒก, แƒ แƒ”แƒ“แƒแƒฅแƒขแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก, แƒฌแƒแƒจแƒšแƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒ“แƒฃแƒ แƒ”แƒ‘แƒ˜.

แƒ•แƒ˜แƒœแƒแƒ˜แƒ“แƒแƒœ แƒ™แƒแƒ›แƒฃแƒœแƒแƒšแƒฃแƒ แƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒœแƒ˜แƒ แƒ”แƒ‘แƒ แƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒแƒ‘แƒก แƒจแƒ”แƒฃแƒ–แƒฆแƒฃแƒ“แƒแƒ•แƒ˜ แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ˜แƒก แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ”แƒ‘แƒก, แƒ™แƒšแƒแƒกแƒขแƒ”แƒ แƒ”แƒ‘แƒก, แƒกแƒแƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ แƒ‘แƒแƒ–แƒ”แƒ‘แƒก แƒ“แƒ แƒ.แƒจ., แƒ˜แƒ›แƒ˜แƒก แƒ“แƒแƒกแƒแƒ“แƒ’แƒ”แƒœแƒแƒ“, แƒ—แƒฃ แƒ แƒแƒ›แƒ”แƒšแƒ˜ แƒ™แƒšแƒแƒกแƒขแƒ”แƒ แƒ˜ แƒ แƒแƒ›แƒ”แƒš แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒก แƒแƒœ แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒฃแƒšแƒ˜ แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒแƒก แƒ”แƒ™แƒฃแƒ—แƒ•แƒœแƒ˜แƒก, แƒ“แƒแƒœแƒ”แƒ แƒ’แƒ˜แƒšแƒ˜แƒ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ’แƒšแƒแƒ‘แƒแƒšแƒฃแƒ แƒ˜ แƒชแƒ•แƒšแƒแƒ“แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ—แƒ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜ แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒจแƒ˜. แƒ“แƒ แƒ, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ“แƒแƒแƒญแƒ˜แƒ แƒ”แƒ— แƒฎแƒ˜แƒก แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒก. แƒ˜แƒ›แƒแƒ—. แƒžแƒ แƒแƒชแƒ”แƒ“แƒฃแƒ แƒ แƒ แƒ”แƒ™แƒฃแƒ แƒกแƒ˜แƒฃแƒšแƒแƒ“ แƒ’แƒแƒ“แƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒ แƒ›แƒ—แƒแƒ•แƒแƒ  แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒจแƒ˜ แƒ“แƒ แƒแƒ“แƒ’แƒ”แƒœแƒก แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒก:

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 แƒ™แƒšแƒแƒกแƒขแƒ”แƒ แƒ˜ แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒแƒซแƒšแƒ”แƒ•แƒ— แƒ˜แƒ›แƒฃแƒจแƒแƒแƒ— แƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ” แƒแƒœ แƒ›แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”. แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒแƒ“แƒ›แƒ˜แƒœแƒ˜แƒกแƒขแƒ แƒแƒขแƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒแƒ แƒ˜ แƒขแƒ˜แƒžแƒ˜ - แƒ™แƒšแƒแƒกแƒขแƒ”แƒ แƒฃแƒšแƒ˜ แƒแƒ’แƒ”แƒœแƒขแƒ˜แƒก แƒแƒ“แƒ›แƒ˜แƒœแƒ˜แƒกแƒขแƒ แƒแƒขแƒแƒ แƒ˜ แƒ“แƒ แƒ™แƒšแƒแƒกแƒขแƒ”แƒ  แƒแƒ“แƒ›แƒ˜แƒœแƒ˜แƒกแƒขแƒ แƒแƒขแƒแƒ แƒ˜. แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒแƒ“, แƒกแƒฌแƒแƒ แƒ˜ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒแƒ˜แƒœแƒ”แƒ แƒ’แƒ แƒ™แƒ˜แƒ“แƒ”แƒ• 4 แƒ’แƒšแƒแƒ‘แƒแƒšแƒฃแƒ แƒ˜ แƒชแƒ•แƒšแƒแƒ“แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒแƒ“แƒ›แƒ˜แƒœแƒ˜แƒกแƒขแƒ แƒแƒขแƒแƒ แƒ˜แƒก แƒจแƒ”แƒกแƒ•แƒšแƒแƒก แƒ“แƒ แƒžแƒแƒ แƒแƒšแƒก. แƒ˜แƒ›แƒแƒ—. แƒ—แƒฃ แƒ™แƒšแƒแƒกแƒขแƒ”แƒ แƒจแƒ˜ แƒแƒ แƒ˜แƒก แƒแƒ“แƒ›แƒ˜แƒœแƒ˜แƒกแƒขแƒ แƒแƒขแƒแƒ แƒ˜แƒก แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ˜, แƒ’แƒแƒ›แƒแƒฉแƒœแƒ“แƒ”แƒ‘แƒ แƒ“แƒ˜แƒแƒšแƒแƒ’แƒ˜ แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒจแƒ”แƒกแƒ•แƒšแƒ˜แƒกแƒ แƒ“แƒ แƒžแƒแƒ แƒแƒšแƒ˜แƒก แƒจแƒ”แƒกแƒแƒงแƒ•แƒแƒœแƒแƒ“, แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ˜แƒœแƒแƒฎแƒ”แƒ‘แƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒแƒจแƒ˜ แƒ“แƒ แƒฉแƒแƒกแƒ›แƒฃแƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒ˜ แƒ™แƒšแƒแƒกแƒขแƒ”แƒ แƒ˜แƒก แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒš แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒแƒจแƒ˜.

แƒ”แƒก แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒกแƒ›แƒ’แƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒ“แƒฃแƒ แƒแƒ–แƒ”.

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-แƒจแƒ˜
GUI-แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ 1C RAC-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒแƒœ แƒ˜แƒกแƒ”แƒ• Tcl/Tk-แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ