1C RAC-เดฏเตโ€Œเด•เตเด•เดพเดฏเดฟ เด’เดฐเต GUI เดŽเดดเตเดคเตเดจเตเดจเต, เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดตเต€เดฃเตเดŸเตเด‚ Tcl/Tk-เดฏเต† เด•เตเดฑเดฟเดšเตเดšเต

เดฒเดฟเดจเด•เตเดธเต เดชเดฐเดฟเดคเดธเตเดฅเดฟเดคเดฟเดฏเดฟเตฝ 1C เด‰เตฝเดชเตเดชเดจเตเดจเด™เตเด™เตพ เดŽเด™เตเด™เดจเต† เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต เดŽเดจเตเดจ เดตเดฟเดทเดฏเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เดžเด™เตเด™เตพ เด†เดดเตเดจเตเดจเดฟเดฑเด™เตเด™เดฟเดฏเดชเตเดชเต‹เตพ, เด’เดฐเต เดชเต‹เดฐเดพเดฏเตเดฎ เด•เดฃเตเดŸเต†เดคเตเดคเดฟ - 1C เดธเต†เตผเดตเดฑเตเด•เดณเตเดŸเต† เด’เดฐเต เด•เตเดฒเดธเตเดฑเตเดฑเตผ เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดธเต—เด•เดฐเตเดฏเดชเตเดฐเดฆเดฎเดพเดฏ เด—เตเดฐเดพเดซเดฟเด•เตเด•เตฝ เดฎเตพเดŸเตเดŸเดฟ-เดชเตเดฒเดพเดฑเตเดฑเตเดซเต‹เด‚ เด‰เดชเด•เดฐเดฃเดคเตเดคเดฟเดจเตเดฑเต† เด…เดญเดพเดตเด‚. เดฑเต‡เด•เต เด•เตบเดธเต‹เตพ เดฏเต‚เดŸเตเดŸเดฟเดฒเดฟเดฑเตเดฑเดฟเด•เตเด•เดพเดฏเดฟ เด’เดฐเต GUI เดŽเดดเตเดคเดฟ เดˆ เดชเต‹เดฐเดพเดฏเตเดฎ เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เดพเตป เดคเต€เดฐเตเดฎเดพเดจเดฟเดšเตเดšเต. เดŽเดจเตเดฑเต† เด…เดญเดฟเดชเตเดฐเดพเดฏเดคเตเดคเดฟเตฝ, เดˆ เดŸเดพเดธเตโ€Œเด•เตเด•เดฟเดจเต เดเดฑเตเดฑเดตเตเด‚ เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดพเดฏเดคเต เดŽเดจเตเดจ เดจเดฟเดฒเดฏเดฟเตฝ, เดตเดฟเด•เดธเดจ เดญเดพเดทเดฏเดพเดฏเดฟ Tcl/tk เดคเดฟเดฐเดžเตเดžเต†เดŸเตเดคเตเดคเต. เด…เดคเดฟเดจเดพเตฝ, เดˆ เดฎเต†เดฑเตเดฑเต€เดฐเดฟเดฏเดฒเดฟเตฝ เดชเดฐเดฟเดนเดพเดฐเดคเตเดคเดฟเดจเตเดฑเต† เดฐเดธเด•เดฐเดฎเดพเดฏ เดšเดฟเดฒ เดตเดถเด™เตเด™เตพ เด…เดตเดคเดฐเดฟเดชเตเดชเดฟเด•เตเด•เดพเตป เดžเดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต.

เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เตพเด•เตเด•เต tcl/tk, 1C เดตเดฟเดคเดฐเดฃเด™เตเด™เตพ เด†เดตเดถเตเดฏเดฎเดพเดฃเต. เดฎเต‚เดจเตเดจเดพเด‚ เด•เด•เตเดทเดฟ เดชเดพเด•เตเด•เต‡เดœเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเดคเต† เด…เดŸเดฟเดธเตเดฅเดพเดจ tcl/tk เดกเต†เดฒเดฟเดตเดฑเดฟเดฏเตเดŸเต† เด•เดดเดฟเดตเตเด•เตพ เดชเดฐเดฎเดพเดตเดงเดฟ เดชเตเดฐเดฏเต‹เดœเดจเดชเตเดชเต†เดŸเตเดคเตเดคเดพเตป เดžเดพเตป เดคเต€เดฐเตเดฎเดพเดจเดฟเดšเตเดšเดคเดฟเดจเดพเตฝ, เดŽเดจเดฟเด•เตเด•เต เดชเดคเดฟเดชเตเดชเต 8.6.7 เด†เดตเดถเตเดฏเดฎเดพเดฃเต, เด…เดคเดฟเตฝ ttk เด‰เตพเดชเตเดชเต†เดŸเตเดจเตเดจเต - เด…เดงเดฟเด• เด—เตเดฐเดพเดซเดฟเด•เต เด˜เดŸเด•เด™เตเด™เดณเตเดณเตเดณ เด’เดฐเต เดชเดพเด•เตเด•เต‡เดœเต, เด…เดคเดฟเตฝ เดžเด™เตเด™เตพเด•เตเด•เต เดชเตเดฐเดงเดพเดจเดฎเดพเดฏเตเด‚ ttk เด†เดตเดถเตเดฏเดฎเดพเดฃเต. ::TreeView, เด’เดฐเต เดŸเตเดฐเต€ เด˜เดŸเดจเดฏเตเดŸเต† เดฐเต‚เดชเดคเตเดคเดฟเดฒเตเด‚ เด’เดฐเต เดชเดŸเตเดŸเดฟเด•เดฏเตเดŸเต† เดฐเต‚เดชเดคเตเดคเดฟเดฒเตเด‚ (เดฒเดฟเดธเตเดฑเตเดฑเต) เดกเดพเดฑเตเดฑ เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเด•เตเด•เดพเตป เด‡เดคเต เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต. เด•เต‚เดŸเดพเดคเต†, เดชเตเดคเดฟเดฏ เดชเดคเดฟเดชเตเดชเดฟเตฝ, เด’เดดเดฟเดตเดพเด•เตเด•เดฒเตเด•เตพ เด‰เดณเตเดณ เดœเต‹เดฒเดฟ เดชเตเดจเตผเดจเดฟเตผเดฎเตเดฎเดฟเดšเตเดšเต (เดฌเดพเดนเตเดฏ เด•เดฎเดพเตปเดกเตเด•เตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเตฝ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจ เดŸเตเดฐเตˆ เด•เดฎเดพเตปเดกเต).

เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเตฝ เดจเดฟเดฐเดตเดงเดฟ เดซเดฏเดฒเตเด•เตพ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต (เดŽเดฒเตเดฒเดพเด‚ เด’เดจเตเดจเดฟเตฝ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเตฝ เดจเดฟเดจเตเดจเต เด’เดจเตเดจเตเด‚ เดจเดฟเด™เตเด™เดณเต† เดคเดŸเดฏเตเดจเตเดจเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเดฒเตเด‚):

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

เด†เดตเดถเตเดฏเดฎเตเดณเตเดณเดคเต†เดฒเตเดฒเดพเด‚ เดกเต—เตบเดฒเต‹เดกเต เดšเต†เดฏเตโ€Œเดคเต เดฑเดพเด•เตเด•เต เดฏเต‚เดŸเตเดŸเดฟเดฒเดฟเดฑเตเดฑเดฟเดฏเตเดŸเต† เดธเดพเดจเตเดจเดฟเดงเตเดฏเด‚ เดชเดฐเดฟเดถเต‹เดงเดฟเดšเตเดš เดถเต‡เดทเด‚, เด’เดฐเต เด—เตเดฐเดพเดซเดฟเด•เตเด•เตฝ เดตเดฟเตปเดกเต‹ เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เตเด‚. เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เด‡เดจเตเดฑเตผเดซเต‡เดธเดฟเตฝ เดฎเต‚เดจเตเดจเต เด˜เดŸเด•เด™เตเด™เตพ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต:

เดŸเต‚เตพเดฌเดพเตผ, เดŸเตเดฐเต€, เดฒเดฟเดธเตเดฑเตเดฑเต

1C เดฏเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเต เดตเดฟเตปเดกเต‹เดธเต เด‰เดชเด•เดฐเดฃเด™เตเด™เตพเด•เตเด•เต เด•เดดเดฟเดฏเตเดจเตเดจเดคเตเดฐ เดธเดพเดฎเตเดฏเดฎเตเดณเตเดณ "เดฎเดฐเด‚" เดฏเตเดŸเต† เด‰เดณเตเดณเดŸเด•เตเด•เด‚ เดžเดพเตป เด‰เดฃเตเดŸเดพเด•เตเด•เดฟ.

1C RAC-เดฏเตโ€Œเด•เตเด•เดพเดฏเดฟ เด’เดฐเต GUI เดŽเดดเตเดคเตเดจเตเดจเต, เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดตเต€เดฃเตเดŸเตเด‚ 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. เด†เดฆเตเดฏเด‚, เดจเดฟเด™เตเด™เตพ เดชเตเดฐเดงเดพเดจ เด•เตเดฒเดธเตเดฑเตเดฑเตผ เดธเต†เตผเดตเตผ เดšเต‡เตผเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต (เด…เดคเดพเดฏเดคเต, เด•เตเดฒเดธเตเดฑเตเดฑเตผ เดฎเดพเดจเต‡เดœเตเดฎเต†เดจเตเดฑเต เดธเต†เตผเดตเตผ (เดฒเดฟเดจเด•เตเดธเดฟเตฝ, "/opt/1C/v8.3/x86_64/ras cluster โ€”daemon" เดŽเดจเตเดจ เด•เดฎเดพเตปเดกเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเดพเดฃเต เดฎเดพเดจเต‡เดœเตเดฎเต†เดจเตเดฑเต เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเดคเต)).

เด‡เดคเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต, "+" เดฌเดŸเตเดŸเดฃเดฟเตฝ เด•เตเดฒเดฟเด•เตเด•เต เดšเต†เดฏเตเดคเต เดคเตเดฑเด•เตเด•เตเดจเตเดจ เดตเดฟเตปเดกเต‹เดฏเดฟเตฝ เดธเต†เตผเดตเตผ เดตเดฟเดฒเดพเดธเดตเตเด‚ เดชเต‹เตผเดŸเตเดŸเตเด‚ เดจเตฝเด•เตเด•:

1C RAC-เดฏเตโ€Œเด•เตเด•เดพเดฏเดฟ เด’เดฐเต GUI เดŽเดดเตเดคเตเดจเตเดจเต, เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดตเต€เดฃเตเดŸเตเด‚ Tcl/Tk-เดฏเต† เด•เตเดฑเดฟเดšเตเดšเต

เด…เดคเดฟเดจเตเดถเต‡เดทเด‚, เดžเด™เตเด™เดณเตเดŸเต† เดธเต†เตผเดตเตผ เด…เดคเดฟเตฝ เด•เตเดฒเดฟเด•เตเด•เตเดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดฒเต‚เดŸเต† เดŸเตเดฐเต€เดฏเดฟเตฝ เดฆเตƒเดถเตเดฏเดฎเดพเด•เตเด‚, เด•เตเดฒเดธเตเดฑเตเดฑเดฑเตเด•เดณเตเดŸเต† เด’เดฐเต เดฒเดฟเดธเตเดฑเตเดฑเต เดคเตเดฑเด•เตเด•เตเด‚ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด’เดฐเต เด•เดฃเด•เตเดทเตป เดชเดฟเดถเด•เต เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเด•เตเด•เตเด‚.

2. เด•เตเดฒเดธเตเดฑเตเดฑเตผ เดจเดพเดฎเดคเตเดคเดฟเตฝ เด•เตเดฒเดฟเด•เตเด•เตเดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต เด…เดคเดฟเดจเต เดฒเดญเตเดฏเดฎเดพเดฏ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเดŸเต† เด’เดฐเต เดฒเดฟเดธเตเดฑเตเดฑเต เดคเตเดฑเด•เตเด•เตเด‚.

3.โ€ฆ

เด…เด™เตเด™เดจเต†, เด…เดคเดพเดฏเดคเต. เด’เดฐเต เดชเตเดคเดฟเดฏ เด•เตเดฒเดธเตเดฑเตเดฑเตผ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดฒเดฟเดธเตเดฑเตเดฑเดฟเตฝ เดฒเดญเตเดฏเดฎเดพเดฏ เดเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เด’เดจเตเดจเต เดคเดฟเดฐเดžเตเดžเต†เดŸเตเดคเตเดคเต เดŸเต‚เตพเดฌเดพเดฑเดฟเดฒเต† "+" เดฌเดŸเตเดŸเตบ เด…เดฎเตผเดคเตเดคเตเด•, เดชเตเดคเดฟเดฏ เดšเต‡เตผเด•เตเด•เตเด• เดกเดฏเดฒเต‹เด—เต เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเด•เตเด•เตเด‚:

1C RAC-เดฏเตโ€Œเด•เตเด•เดพเดฏเดฟ เด’เดฐเต GUI เดŽเดดเตเดคเตเดจเตเดจเต, เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดตเต€เดฃเตเดŸเตเด‚ 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
}

เดŸเดฟเด•เตเด•เดฟเดณเดฟเดจเตเดฑเต† เด—เตเดฃเด™เตเด™เดณเดฟเตฝ เด’เดจเตเดจเต เด‡เดคเดพ: เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเดฟเดจเตเดฑเต† เดฎเต‚เดฒเตเดฏเด‚ เด’เดฐเต เดจเดŸเดชเดŸเดฟเด•เตเดฐเดฎ เดจเดพเดฎเดฎเดพเดฏเดฟ เดจเตฝเด•เดพเด‚:

Add::$key .frm_tree.tree $host $values

เด…เดคเดพเดฏเดคเต, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดžเด™เตเด™เตพ เดชเตเดฐเดงเดพเดจ เดธเต†เตผเดตเดฑเดฟเตฝ เดšเต‚เดฃเตเดŸเดฟเด•เตเด•เดพเดฃเดฟเดšเตเดšเต โ€œ+โ€ เด…เดฎเตผเดคเตเดคเตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เดšเต‡เตผเด•เตเด•เตเด•:: เดธเต†เตผเดตเตผ เดจเดŸเดชเดŸเดฟเด•เตเดฐเดฎเด‚ เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เตเด‚, เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเดฒเดพเดฃเต†เด™เตเด•เดฟเตฝ - เดšเต‡เตผเด•เตเด•เตเด•:: เด•เตเดฒเดธเตเดฑเตเดฑเดฑเตเด‚ เดฎเดฑเตเดฑเตเด‚ (เดŽเดตเดฟเดŸเต†เดฏเดพเดฃเต†เดจเตเดจเต เดžเดพเตป เดŽเดดเตเดคเดพเด‚. เด†เดตเดถเตเดฏเดฎเดพเดฏ "เด•เต€เด•เตพ" เด•เตเดฑเดšเตเดšเต เดšเตเดตเดŸเต† เดจเดฟเดจเตเดจเต เดตเดฐเตเดจเตเดจเต), เดฒเดฟเดธเตเดฑเตเดฑเตเดšเต†เดฏเตเดค เดจเดŸเดชเดŸเดฟเด•เตเดฐเดฎเด™เตเด™เตพ เดธเดจเตเดฆเตผเดญเดคเตเดคเดฟเดจเต เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดพเดฏ เด—เตเดฐเดพเดซเดฟเด•เต เด˜เดŸเด•เด™เตเด™เตพ เดตเดฐเดฏเตเด•เตเด•เตเดจเตเดจเต.

เดจเดฟเด™เตเด™เตพ เด‡เดคเดฟเดจเด•เด‚ เดถเตเดฐเดฆเตเดงเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เดพเด‚, เดซเต‹เดฎเตเด•เตพ เดถเตˆเดฒเดฟเดฏเดฟเตฝ เดธเดฎเดพเดจเดฎเดพเดฃเต - เด‡เดคเต เด†เดถเตเดšเดฐเตเดฏเด•เดฐเดฎเดฒเตเดฒ, เด•เดพเดฐเดฃเด‚ เด…เดต เด’เดฐเต เดจเดŸเดชเดŸเดฟเด•เตเดฐเดฎเดคเตเดคเดฟเดฒเต‚เดŸเต†เดฏเดพเดฃเต เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเต, เด•เต‚เดŸเตเดคเตฝ เด•เตƒเดคเตเดฏเดฎเดพเดฏเดฟ เดซเต‹เดฎเดฟเดจเตเดฑเต† เดชเตเดฐเดงเดพเดจ เดซเตเดฐเต†เดฏเดฟเด‚ (เดตเดฟเตปเดกเต‹, เดฌเดŸเตเดŸเดฃเตเด•เตพ, เด‡เดฎเต‡เดœเต, เดฒเต‡เดฌเตฝ), เดจเดŸเดชเดŸเดฟเด•เตเดฐเดฎเดคเตเดคเดฟเดจเตเดฑเต† เดชเต‡เดฐเต เด†เดกเต เดŸเต‹เดชเตเดชเต เดฒเต†เดตเตฝ

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
}

เดˆ เดจเดŸเดชเดŸเดฟเด•เตเดฐเดฎเด™เตเด™เดณเตเดŸเต† เด•เต‹เดกเต เดคเดพเดฐเดคเดฎเตเดฏเด‚ เดšเต†เดฏเตเดฏเตเดฎเตเดชเต‹เตพ, เดตเตเดฏเดคเตเดฏเดพเดธเด‚ เดจเด—เตเดจเดจเต‡เดคเตเดฐเด™เตเด™เตพเด•เตเด•เต เดฆเตƒเดถเตเดฏเดฎเดพเดฃเต; เดžเดพเตป "เดถเดฐเดฟ" เดฌเดŸเตเดŸเตบ เดนเดพเตปเดกเตเดฒเดฑเดฟเตฝ เดถเตเดฐเดฆเตเดง เด•เต‡เดจเตเดฆเตเดฐเต€เด•เดฐเดฟเด•เตเด•เตเด‚. 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

เดˆ เดฐเดฃเตเดŸเต เดฐเต€เดคเดฟเด•เดณเตเด‚ เดฎเตเด•เดณเดฟเดฒเตเดณเตเดณ เด•เต‹เดกเดฟเตฝ เด•เดพเดฃเดพเตป เด•เดดเดฟเดฏเตเด‚.

เดˆ เดฌเดŸเตเดŸเดฃเดฟเตฝ เด•เตเดฒเดฟเด•เตเด•เตเดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต, เดˆ เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเตฝ, เดฑเตบเด•เดฎเดพเตปเดกเต เดชเตเดฐเตŠเดธเต€เดœเดฟเดฏเตผ เดฑเต‡เด•เตเด•เดฟเดจเตเดฑเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดคเตเดคเดฟเตฝ เด’เดฐเต เด•เตเดฒเดธเตเดฑเตเดฑเตผ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ เดœเดจเดฑเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดค เด•เดฎเดพเตปเดกเต เดฒเตˆเตป เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเต:

/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

เด‡เดชเตเดชเต‹เตพ เดจเดฎเตเดฎเตพ เดชเตเดฐเดงเดพเดจ เด•เดฎเดพเตปเดกเดฟเดฒเต‡เด•เตเด•เต เดตเดฐเตเดจเตเดจเต, เด…เดคเต เดจเดฎเตเด•เตเด•เต เด†เดตเดถเตเดฏเดฎเดพเดฏ เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดฑเดพเด•เตเด•เดฟเดจเตเดฑเต† เดธเดฎเดพเดฐเด‚เดญเด‚ เดจเดฟเดฏเดจเตเดคเตเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เด†เดตเดถเตเดฏเดฎเต†เด™เตเด•เดฟเตฝ เด•เดฎเดพเตปเดกเตเด•เดณเตเดŸเต† เด”เดŸเตเดŸเตเดชเตเดŸเตเดŸเต เดฒเดฟเดธเตเดฑเตเดฑเตเด•เดณเดฟเดฒเต‡เด•เตเด•เตเด‚ เดฑเดฟเดŸเตเดŸเต‡เดฃเตเด•เดณเดฟเดฒเต‡เด•เตเด•เตเด‚ เดชเดพเดดเตเดธเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต:

เดฑเตบเด•เดฎเดพเตปเดกเต

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

เดชเตเดฐเดงเดพเดจ เดธเต†เตผเดตเตผ เดกเดพเดฑเตเดฑ เดจเตฝเด•เดฟเดฏ เดถเต‡เดทเด‚, เด…เดคเต เดŸเตเดฐเต€เดฏเดฟเดฒเต‡เด•เตเด•เต เดšเต‡เตผเด•เตเด•เตเด‚, เด‡เดคเดฟเดจเดพเดฏเดฟ, เดฎเตเด•เดณเดฟเดฒเตเดณเตเดณ เดšเต‡เตผเด•เตเด•เตเด•:เดธเต†เตผเดตเตผ เดจเดŸเดชเดŸเดฟเด•เตเดฐเดฎเดคเตเดคเดฟเตฝ, เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เด•เต‹เดกเต เด‰เดคเตเดคเดฐเดตเดพเดฆเดฟเดฏเดพเดฃเต:

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

เด…เดคเดจเตเดธเดฐเดฟเดšเตเดšเต, เดชเตเดฐเดงเดพเดจ เดธเต†เตผเดตเดฑเดฟเดจเดพเดฏเดฟ เดฑเตบ:: เดธเต†เตผเดตเตผ เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เตเด‚ (เด’เดฐเต เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเดจเดพเดฏเดฟ - เดฑเตบ:: เด•เตเดฒเดธเตเดฑเตเดฑเตผ, เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจ เดธเต†เตผเดตเดฑเดฟเดจเดพเดฏเดฟ - เดฑเตบ:: เดตเตผเด•เตเด•เต_เดธเต†เตผเดตเตผ เดฎเตเดคเดฒเดพเดฏเดต). เด†. $เด•เต€ เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเดฟเดจเตเดฑเต† เดฎเต‚เดฒเตเดฏเด‚ เด“เดชเตโ€Œเดทเตป เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดฟเดฏ เดŸเตเดฐเต€ เดŽเดฒเดฎเต†เดจเตเดฑเดฟเดจเตเดฑเต† เดชเต‡เดฐเดฟเดจเตเดฑเต† เดญเดพเด—เดฎเดพเดฃเต -เดเดกเดฟ.

เดจเดŸเดชเดŸเดฟเด•เตเดฐเดฎเด‚ เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เดพเด‚

เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเด•::เดธเต†เตผเดตเตผ

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

เดˆ เดจเดŸเดชเดŸเดฟเด•เตเดฐเดฎเด‚ เดฑเตบเด•เดฎเดพเตปเดกเต เด•เดฎเดพเตปเดกเต เดตเดดเดฟ เดธเต†เตผเดตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต เดธเตเดตเต€เด•เดฐเดฟเดšเตเดšเดคเต เดชเตเดฐเต‹เดธเดธเตเดธเต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดŸเตเดฐเต€เดฏเดฟเดฒเต‡เด•เตเด•เต เดŽเดฒเตเดฒเดพเดคเตเดคเดฐเด‚ เด•เดพเดฐเตเดฏเด™เตเด™เดณเตเด‚ เดšเต‡เตผเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต - เด•เตเดฒเดธเตเดฑเตเดฑเดฑเตเด•เตพ, เดตเดฟเดตเดฟเดง เดฑเต‚เดŸเตเดŸเต เด˜เดŸเด•เด™เตเด™เตพ (เดฌเต‡เดธเต, เดตเตผเด•เตเด•เดฟเด‚เด—เต เดธเต†เตผเดตเดฑเตเด•เตพ, เดธเต†เดทเดจเตเด•เตพ เดฎเตเดคเดฒเดพเดฏเดต). เดจเดฟเด™เตเด™เตพ เดธเต‚เด•เตเดทเตเดฎเดฎเดพเดฏเดฟ เดจเต‹เด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เด…เด•เดคเตเดคเตเดณเตเดณ InsertItemsWorkList เดจเดŸเดชเดŸเดฟเด•เตเดฐเดฎเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เด•เต‹เตพ เดจเดฟเด™เตเด™เตพ เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เตเด‚. $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

เด—เตเดฐเดพเดซเดฟเด•เตเด•เตฝ เดฐเต‚เดชเดคเตเดคเดฟเตฝ เด‡เดคเต เด‡เดคเตเดชเต‹เดฒเต† เด•เดพเดฃเดชเตเดชเต†เดŸเตเด‚:

1C RAC-เดฏเตโ€Œเด•เตเด•เดพเดฏเดฟ เด’เดฐเต GUI เดŽเดดเตเดคเตเดจเตเดจเต, เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดตเต€เดฃเตเดŸเตเด‚ 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
}

เด‡เดตเดฟเดŸเต†, เด’เดฐเต เดฒเดณเดฟเดคเดฎเดพเดฏ เด•เดฎเดพเตปเดกเดฟเดจเต เดชเด•เดฐเด‚ [เดธเตเดชเตเดฒเดฟเดฑเตเดฑเต $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 
    }
}

เด…เดต เดคเดฎเตเดฎเดฟเดฒเตเดณเตเดณ เดตเตเดฏเดคเตเดฏเดพเดธเด‚ เด’เดฐเต เดฒเต‚เดชเตเดชเดฟเดจเตเดฑเต† เด‰เดชเดฏเต‹เด—เดฎเดพเดฃเต, เด…เดคเดฟเตฝ เด†เดตเตผเดคเตเดคเดฟเดšเตเดšเตเดณเตเดณ เด•เดฎเดพเตปเดกเตเด•เตพ (เด•เตพ) เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดŸเตเดŸเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต. เดเดคเต เดธเดฎเต€เดชเดจเดฎเดพเดฃเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เต‡เดฃเตเดŸเดคเต เดŽเดจเตเดจเดคเต เดกเดตเดฒเดชเตเดชเดฑเตเดŸเต† เดตเดฟเดตเต‡เดšเดจเดพเดงเดฟเด•เดพเดฐเดคเตเดคเดฟเดฒเดพเดฃเต.

เด˜เดŸเด•เด™เตเด™เตพ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเดคเตเด‚ เดกเดพเดฑเตเดฑ เดตเต€เดฃเตเดŸเต†เดŸเตเด•เตเด•เตเดจเตเดจเดคเตเด‚ เดžเด™เตเด™เตพ เด•เดตเตผ เดšเต†เดฏเตเดคเต, เด‡เดชเตเดชเต‹เตพ เดŽเดกเดฟเดฑเตเดฑเดฟเด‚เด—เดฟเตฝ เดถเตเดฐเดฆเตเดง เด•เต‡เดจเตเดฆเตเดฐเต€เด•เดฐเดฟเด•เตเด•เต‡เดฃเตเดŸ เดธเดฎเดฏเดฎเดพเดฃเดฟเดคเต. เด…เดŸเดฟเดธเตเดฅเดพเดจเดชเดฐเดฎเดพเดฏเดฟ, เด’เดฐเต‡ เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ เดŽเดกเดฟเดฑเตเดฑเตเดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเด‚ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเดพเตฝ (เดตเดฟเดตเดฐ เด…เดŸเดฟเดคเตเดคเดฑ เด’เดดเดฟเด•เต†), เด…เดคเต‡ เดกเดฏเดฒเต‹เด—เต เดซเต‹เดฎเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต. เดšเต‡เตผเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดจเดŸเดชเดŸเดฟเด•เตเดฐเดฎเด™เตเด™เตพ เดตเดฟเดณเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด…เตฝเด—เต‹เดฐเดฟเดคเด‚ เด‡เดคเตเดชเต‹เดฒเต† เด•เดพเดฃเดชเตเดชเต†เดŸเตเดจเตเดจเต:

เดšเต‡เตผเด•เตเด•เตเด•::$key->AddToplevel

เด‡เดคเตเดชเต‹เดฒเต† เดŽเดกเดฟเดฑเตเดฑเดฟเด‚เด—เดฟเดจเตเด‚:

เดŽเดกเดฟเดฑเตเดฑเต::$key->เดšเต‡เตผเด•เตเด•เตเด•::$key->AddTopLevel

เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดจเดฎเตเด•เตเด•เต เด’เดฐเต เด•เตเดฒเดธเตเดฑเตเดฑเตผ เดŽเดกเดฟเดฑเตเดฑเตเดšเต†เดฏเตเดฏเดพเด‚, เด…เดคเดพเดฏเดคเต. เดŸเตเดฐเต€เดฏเดฟเดฒเต† เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเดจเตเดฑเต† เดชเต‡เดฐเดฟเตฝ เด•เตเดฒเดฟเด•เตเด•เตเดšเต†เดฏเตโ€Œเดค เดถเต‡เดทเด‚, เดŸเต‚เตพเดฌเดพเดฑเดฟเดฒเต† (เดชเต†เตปเดธเดฟเตฝ) เดŽเดกเดฟเดฑเตเดฑเต เดฌเดŸเตเดŸเตบ เด…เดฎเตผเดคเตเดคเตเด•, เด…เดจเตเดฌเดจเตเดง เดซเต‹เด‚ เดธเตเด•เตเดฐเต€เดจเดฟเตฝ เดฆเตƒเดถเตเดฏเดฎเดพเด•เตเด‚:

1C RAC-เดฏเตโ€Œเด•เตเด•เดพเดฏเดฟ เด’เดฐเต GUI เดŽเดดเตเดคเตเดจเตเดจเต, เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดตเต€เดฃเตเดŸเตเด‚ 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 เดจเตเดฑเต† เดฎเดฑเตเดฑเตŠเดฐเต เดจเต‡เดŸเตเดŸเด‚ เด‰เดฏเตผเดจเตเดจเต - เดฎเดฑเตเดฑเต เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เดณเตเดŸเต† เดฎเต‚เดฒเตเดฏเด™เตเด™เตพ เดตเต‡เดฐเดฟเดฏเดฌเดฟเตพ เดจเดพเดฎเด™เตเด™เดณเดพเดฏเดฟ เดฎเดพเดฑเตเดฑเดฟเดธเตเดฅเดพเดชเดฟเด•เตเด•เตเดจเตเดจเต. เด†. เดซเต‹เดฎเตเด•เตพ เดชเต‚เดฐเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเตเด‚ เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เตพ เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเดคเตเด‚ เดฏเดพเดจเตเดคเตเดฐเดฟเด•เดฎเดพเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดซเต€เตฝเดกเตเด•เดณเตเดŸเต†เดฏเตเด‚ เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เดณเตเดŸเต†เดฏเตเด‚ เดชเต‡เดฐเตเด•เตพ เดฑเดพเด•เตเด•เต เดฏเต‚เดŸเตเดŸเดฟเดฒเดฟเดฑเตเดฑเดฟเดฏเตเดŸเต† เด•เดฎเดพเตปเดกเต เดฒเตˆเตป เดธเตเดตเดฟเดšเตเดšเตเด•เตพเด•เตเด•เตเด‚ เด•เดฎเดพเตปเดกเต เด”เดŸเตเดŸเตโ€ŒเดชเตเดŸเตเดŸเต เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เดณเตเดŸเต† เดชเต‡เดฐเตเด•เตพเด•เตเด•เตเด‚ เดšเดฟเดฒ เด’เดดเดฟเดตเดพเด•เตเด•เดฒเตเด•เดณเต‹เดŸเต เดฏเต‹เดœเดฟเด•เตเด•เตเดจเตเดจเต - เดกเดพเดทเดฟเดจเต เดชเด•เดฐเด‚ เด’เดฐเต เด…เดฃเตเดŸเตผ เดธเตโ€Œเด•เต‹เตผ เดจเตฝเด•เตเดจเตเดจเต. เด‰เดฆเดพ เดทเต†เดกเตเดฏเต‚เตพ เดšเต†เดฏเตเดค เดœเต‹เดฒเดฟเด•เตพ เดจเดฟเดทเต‡เดงเดฟเด•เตเด•เตเดจเตเดจเต เดซเต€เตฝเดกเตเดฎเดพเดฏเดฟ เดชเตŠเดฐเตเดคเตเดคเดชเตเดชเต†เดŸเตเดจเตเดจเต ent_scheduled_jobs_deny เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด‚ เดทเต†เดกเตเดฏเต‚เตพ เดšเต†เดฏเตเดค_เดœเต‹เดฒเดฟเด•เตพ_เดจเดฟเดทเต‡เดงเดฟ.

เดšเต‡เตผเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เดŽเดกเดฟเดฑเตเดฑเตเดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดฎเตเดณเตเดณ เดซเต‹เดฎเตเด•เตพ เดซเต€เตฝเดกเตเด•เดณเตเดŸเต† เด˜เดŸเดจเดฏเดฟเตฝ เดตเตเดฏเดคเตเดฏเดพเดธเดชเตเดชเต†เดŸเตเดŸเดฟเดฐเดฟเด•เตเด•เดพเด‚, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เด’เดฐเต เดตเดฟเดตเดฐ เด…เดŸเดฟเดคเตเดคเดฑเดฏเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเด•:

เดตเดฟเดตเดฐ เดธเตเดฐเด•เตเดท เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต

1C RAC-เดฏเตโ€Œเด•เตเด•เดพเดฏเดฟ เด’เดฐเต GUI เดŽเดดเตเดคเตเดจเตเดจเต, เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดตเต€เดฃเตเดŸเตเด‚ Tcl/Tk-เดฏเต† เด•เตเดฑเดฟเดšเตเดšเต

เดตเดฟเดตเดฐ เดธเตเดฐเด•เตเดท เดŽเดกเดฟเดฑเตเดฑเตเดšเต†เดฏเตเดฏเตเดจเตเดจเต

1C RAC-เดฏเตโ€Œเด•เตเด•เดพเดฏเดฟ เด’เดฐเต GUI เดŽเดดเตเดคเตเดจเตเดจเต, เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดตเต€เดฃเตเดŸเตเด‚ 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-เดฒเต† เดœเต‹เดฒเดฟ เดชเดฐเต€เด•เตเดทเดฟเดšเตเดšเต
1C RAC-เดฏเตโ€Œเด•เตเด•เดพเดฏเดฟ เด’เดฐเต GUI เดŽเดดเตเดคเตเดจเตเดจเต, เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดตเต€เดฃเตเดŸเตเด‚ Tcl/Tk-เดฏเต† เด•เตเดฑเดฟเดšเตเดšเต

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•