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

เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ€ เจนเจฐ เจšเฉ€เจœเจผ เจจเฉ‚เฉฐ เจกเจพเจ‰เจจเจฒเฉ‹เจก เจ•เจฐเจจ เจ…เจคเฉ‡ rac เจ‰เจชเจฏเฉ‹เจ—เจคเจพ เจฆเฉ€ เจฎเฉŒเจœเฉ‚เจฆเจ—เฉ€ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจจ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจ‡เฉฑเจ• เจ—เฉเจฐเจพเจซเจฟเจ•เจฒ เจตเจฟเฉฐเจกเฉ‹ เจฒเจพเจ‚เจš เจ•เฉ€เจคเฉ€ เจœเจพเจตเฉ‡เจ—เฉ€เฅค เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจตเจฟเฉฑเจš เจคเจฟเฉฐเจจ เจคเฉฑเจค เจนเฉเฉฐเจฆเฉ‡ เจนเจจ:

เจŸเฉ‚เจฒเจฌเจพเจฐ, เจฐเฉเฉฑเจ– เจ…เจคเฉ‡ เจธเฉ‚เจšเฉ€

เจฎเฉˆเจ‚ "เจฐเฉเฉฑเจ–" เจฆเฉ€เจ†เจ‚ เจธเจฎเฉฑเจ—เจฐเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ 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 เจ•เจฒเฉฑเจธเจŸเจฐ โ€”เจกเฉ‡เจฎเจจโ€) เจ•เจฎเจพเจ‚เจก เจจเจพเจฒ เจฒเจพเจ‚เจš เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ) เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค

เจ…เจœเจฟเจนเจพ เจ•เจฐเจจ เจฒเจˆ, โ€œ+โ€ เจฌเจŸเจจ เจคเฉ‡ เจ•เจฒเจฟเจ• เจ•เจฐเฉ‹ เจ…เจคเฉ‡ เจ–เฉเฉฑเจฒเจฃ เจตเจพเจฒเฉ€ เจตเจฟเฉฐเจกเฉ‹ เจตเจฟเฉฑเจš, เจธเจฐเจตเจฐ เจฆเจพ เจชเจคเจพ เจ…เจคเฉ‡ เจชเฉ‹เจฐเจŸ เจฆเจฐเจœ เจ•เจฐเฉ‹:

1C RAC เจฒเจˆ GUI เจฒเจฟเจ–เจฃเจพ, เจœเจพเจ‚ เจฆเฉเจฌเจพเจฐเจพ Tcl/Tk เจฌเจพเจฐเฉ‡

เจฌเจพเจ…เจฆ เจตเจฟเฉฑเจš, เจธเจพเจกเจพ เจธเจฐเจตเจฐ เจ‡เจธ 'เจคเฉ‡ เจ•เจฒเจฟเฉฑเจ• เจ•เจฐเจจ เจจเจพเจฒ เจŸเฉเจฐเฉ€ เจตเจฟเฉฑเจš เจฆเจฟเจ–เจพเจˆ เจฆเฉ‡เจตเฉ‡เจ—เจพ, เจ•เจฒเฉฑเจธเจŸเจฐเจพเจ‚ เจฆเฉ€ เจ‡เฉฑเจ• เจธเฉ‚เจšเฉ€ เจ–เฉเฉฑเจฒ เจœเจพเจตเฉ‡เจ—เฉ€ เจœเจพเจ‚ เจ‡เฉฑเจ• เจ•เฉเจจเฉˆเจ•เจธเจผเจจ เจ—เจฒเจคเฉ€ เจฆเจฟเจ–เจพเจˆ เจฆเฉ‡เจตเฉ‡เจ—เฉ€.

2. เจ•เจฒเฉฑเจธเจŸเจฐ เจฆเฉ‡ เจจเจพเจฎ 'เจคเฉ‡ เจ•เจฒเจฟเฉฑเจ• เจ•เจฐเจจ เจจเจพเจฒ เจ‡เจธเจฆเฉ‡ เจฒเจˆ เจ‰เจชเจฒเจฌเจง เจซเฉฐเจ•เจธเจผเจจเจพเจ‚ เจฆเฉ€ เจธเฉ‚เจšเฉ€ เจ–เฉเฉฑเจฒเฉเจน เจœเจพเจตเฉ‡เจ—เฉ€เฅค

3เฅคโ€ฆ

เจ…เจคเฉ‡ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚, i.e. เจ‡เฉฑเจ• เจจเจตเจพเจ‚ เจ•เจฒเฉฑเจธเจŸเจฐ เจœเฉ‹เฉœเจจ เจฒเจˆ, เจธเฉ‚เจšเฉ€ เจตเจฟเฉฑเจš เจ‰เจชเจฒเจฌเจง เจ•เจฟเจธเฉ‡ เจ‡เฉฑเจ• เจจเฉ‚เฉฐ เจšเฉเจฃเฉ‹ เจ…เจคเฉ‡ เจŸเฉ‚เจฒเจฌเจพเจฐ เจตเจฟเฉฑเจš "+" เจฌเจŸเจจ เจฆเจฌเจพเจ“ เจ…เจคเฉ‡ เจจเจตเจพเจ‚ เจœเฉ‹เฉœเฉ‹ เจกเจพเจ‡เจฒเจพเจ— เจชเฉเจฐเจฆเจฐเจธเจผเจฟเจค เจนเฉ‹เจตเฉ‡เจ—เจพ:

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

เจญเจพเจต, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจœเฉ‡เจ•เจฐ เจ…เจธเฉ€เจ‚ เจฎเฉเฉฑเจ– เจธเจฐเจตเจฐ เจตเฉฑเจฒ เจ‡เจธเจผเจพเจฐเจพ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ โ€œ+โ€ เจฆเจฌเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚, เจคเจพเจ‚ Add::server เจตเจฟเจงเฉ€ เจธเจผเฉเจฐเฉ‚ เจ•เฉ€เจคเฉ€ เจœเจพเจตเฉ‡เจ—เฉ€, เจœเฉ‡เจ•เจฐ เจ•เจฒเฉฑเจธเจŸเจฐ เจตเจฟเฉฑเจš - Add::cluster เจ…เจคเฉ‡ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจนเฉ‹เจฐ (เจฎเฉˆเจ‚ เจ‡เจธ เจฌเจพเจฐเฉ‡ เจฒเจฟเจ–เจพเจ‚เจ—เจพ เจ•เจฟ เจ•เจฟเฉฑเจฅเฉ‡ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ€เจ†เจ‚ "เจ•เฉเฉฐเจœเฉ€เจ†เจ‚" เจฅเฉ‹เฉœเฉเจนเฉ‡ เจœเจฟเจนเฉ‡ เจนเฉ‡เจ เจพเจ‚ เจคเฉ‹เจ‚ เจ†เจ‰เจ‚เจฆเฉ€เจ†เจ‚ เจนเจจ), เจธเฉ‚เจšเฉ€เจฌเฉฑเจง เจชเฉเจฐเจ•เจฟเจฐเจฟเจ†เจตเจพเจ‚ เจธเฉฐเจฆเจฐเจญ เจฆเฉ‡ เจ…เจจเฉเจ•เฉ‚เจฒ เจ—เฉเจฐเจพเจซเจฟเจ• เจคเฉฑเจคเจพเจ‚ เจจเฉ‚เฉฐ เจ–เจฟเฉฑเจšเจฆเฉ€เจ†เจ‚ เจนเจจเฅค

เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจฆเฉ‡เจ–เจฟเจ† เจนเฉ‹เจตเฉ‡เจ—เจพ, เจซเจพเจฐเจฎ เจธเจผเฉˆเจฒเฉ€ เจตเจฟเฉฑเจš เจธเจฎเจพเจจ เจนเจจ - เจ‡เจน เจ•เฉ‹เจˆ เจนเฉˆเจฐเจพเจจเฉ€ เจฆเฉ€ เจ—เฉฑเจฒ เจจเจนเฉ€เจ‚ เจนเฉˆ, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‰เจน เจ‡เฉฑเจ• เจตเจฟเจงเฉ€ เจฆเฉเจ†เจฐเจพ เจชเฉเจฐเจฆเจฐเจธเจผเจฟเจค เจนเฉเฉฐเจฆเฉ‡ เจนเจจ, เจซเจพเจฐเจฎ เจฆเฉ‡ เจฎเฉเฉฑเจ– เจซเจฐเฉ‡เจฎ (เจตเจฟเฉฐเจกเฉ‹, เจฌเจŸเจจ, เจšเจฟเฉฑเจคเจฐ, เจฒเฉ‡เจฌเจฒ), เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจฆเจพ เจจเจพเจฎ. เจŸเฉŒเจช เจฒเฉˆเจตเจฒ เจธเจผเจพเจฎเจฒ เจ•เจฐเฉ‹

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

เจ‰เจชเจฐเฉ‹เจ•เจค เจ•เฉ‹เจก เจตเจฟเฉฑเจš เจ‡เจน เจฆเฉ‹เจตเฉ‡เจ‚ เจขเฉฐเจ— เจตเฉ‡เจ–เฉ‡ เจœเจพ เจธเจ•เจฆเฉ‡ เจนเจจเฅค

เจ‡เจธ เจฌเจŸเจจ เจจเฉ‚เฉฐ เจฆเจฌเจพเจ‰เจฃ เจจเจพเจฒ, เจ‡เจธ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš, rac เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจ•เจฒเฉฑเจธเจŸเจฐ เจœเฉ‹เฉœเจจ เจฒเจˆ เจคเจฟเจ†เจฐ เจ•เจฎเจพเจ‚เจก เจฒเจพเจˆเจจ เจฆเฉ‡ เจจเจพเจฒ RunCommand เจตเจฟเจงเฉ€ เจจเฉ‚เฉฐ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจฆเจพ เจนเฉˆ:

/opt/1C/v8.3/x86_64/rac cluster insert  --host=localhost  --port=1540  --name=dsdsds  --expiration-timeout=0  --lifetime-limit=0  --max-memory-size=0  --max-memory-time-limit=0  --security-level=0  --session-fault-tolerance-level=0  --load-balancing-mode=performance  --errors-count-threshold=0  --kill-problem-processes=no   localhost:1545

เจนเฉเจฃ เจ…เจธเฉ€เจ‚ เจฎเฉเฉฑเจ– เจ•เจฎเจพเจ‚เจก 'เจคเฉ‡ เจ†เจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚, เจœเฉ‹ เจธเจพเจจเฉ‚เฉฐ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ‡ เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐเจพเจ‚ เจจเจพเจฒ 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 เจตเจฟเจงเฉ€ (file lib/function.tcl) เจตเจฟเฉฑเจš เจฒเจพเจ—เฉ‚ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ:

proc TreePress {tree} {
   global host server active_cluster infobase
   # ะพะฟั€ะตะดะตะปัะตะผ ะฒั‹ะดะตะปะตะฝะฝั‹ะน ัะปะตะผะตะฝั‚
    set id  [$tree selection]
   # ัƒัั‚ะฐะฝะฐะฒะปะธะฒะฐะตะผ ะฝัƒะถะฝั‹ะต ะณะปะพะฑะฐะปัŒะฝั‹ะต ะฟะตั€ะตะผะตะฝะฝั‹ะต
    SetGlobalVarFromTreeItems $tree $id
   # ะžะฟั€ะตะดะตะปัะตะผ ะบะปัŽั‡ ะธ ะทะฝะฐั‡ะตะฝะธะต, ั‚.ะต. ะธะผะตะฝะฝะพ ั‚ะธะฟ ะฒั‹ะฑั€ะฐะฝะฝะพะณะพ ัะปะตะผะตะฝั‚ะฐ
    set values [$tree item $id -values]
    set key [lindex [split $id "::"] 0]
   # ะธ ะฒ ะทะฐะฒะธัะธะผะพัั‚ะธ ะพั‚ ั‚ะพะณะพ ั‡ั‚ะพ ะฒั‹ะฑั€ะฐะปะธ ะฑัƒะดะตั‚ ะทะฐะฟัƒั‰ะตะฝะฐ ัะพะพั‚ะฒะตั‚ัั‚ะฒัƒัŽั‰ะฐั ะฟั€ะพั†ะตะดัƒั€ะฐ 
   # ะฒ ะฟั€ะพัั‚ั€ะฐะฝัั‚ะฒะต ะธะผั‘ะฝ Run
    Run::$key $tree $host $values
}

เจ‡เจธ เจ…เจจเฉเจธเจพเจฐ, Run::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 เจ•เจฎเจพเจ‚เจก เจฆเฉเจ†เจฐเจพ เจชเฉเจฐเจพเจชเจค เจ•เฉ€เจคเฉ€เจ†เจ‚ เจ—เจˆเจ†เจ‚ เจšเฉ€เจœเจผเจพเจ‚ 'เจคเฉ‡ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจ•เจฐเจฆเฉ€ เจนเฉˆ เจ…เจคเฉ‡ เจŸเฉเจฐเฉ€ - เจ•เจฒเฉฑเจธเจŸเจฐ, เจตเฉฑเจ–-เจตเฉฑเจ– เจฐเฉ‚เจŸ เจคเฉฑเจค (เจฌเฉ‡เจธ, เจ•เจพเจฐเจœเจธเจผเฉ€เจฒ เจธเจฐเจตเจฐ, เจธเฉˆเจธเจผเจจ, เจ…เจคเฉ‡ เจนเฉ‹เจฐ) เจตเจฟเฉฑเจš เจนเจฐ เจคเจฐเฉเจนเจพเจ‚ เจฆเฉ€เจ†เจ‚ เจšเฉ€เจœเจผเจพเจ‚ เจœเฉ‹เฉœเจฆเฉ€ เจนเฉˆเฅค เจœเฉ‡ เจคเฉเจธเฉ€เจ‚ เจงเจฟเจ†เจจ เจจเจพเจฒ เจฆเฉ‡เจ–เจฆเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจคเฉเจธเฉ€เจ‚ เจ…เฉฐเจฆเจฐ 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

เจ—เฉเจฐเจพเจซเจฟเจ•เจฒ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจ‡เจน เจ•เฉเจ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจฆเจฟเจ–เจพเจˆ เจฆเฉ‡เจตเฉ‡เจ—เจพ:

1C RAC เจฒเจˆ GUI เจฒเจฟเจ–เจฃเจพ, เจœเจพเจ‚ เจฆเฉเจฌเจพเจฐเจพ Tcl/Tk เจฌเจพเจฐเฉ‡

เจ‰เจชเจฐเฉ‹เจ•เจค เจตเจฟเจงเฉ€ เจธเจพเจฐเจฃเฉ€ เจจเฉ‚เฉฐ เจญเจฐเจจ เจฒเจˆ เจธเจฟเจฐเจฒเฉ‡เจ– เจ…เจคเฉ‡ เจกเฉ‡เจŸเจพ เจฒเจˆ เจคเฉฑเจคเจพเจ‚ เจฆเฉ‡ เจจเจพเจฎ เจšเฉเจฃเจฆเฉ€ เจนเฉˆ:

เจ†เจˆเจŸเจฎเจพเจ‚ เจตเจฐเจ•เจฒเจฟเจธเจŸ เจธเจผเจพเจฎเจฒ เจ•เจฐเฉ‹

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 เจตเจฟเจงเฉ€ (เจ•เจˆ เจธเจฎเจพเจจ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ‡เฉฑเจ•) เจฌเจธ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ‡ เจ•เจฒเฉฑเจธเจŸเจฐ เจคเฉฑเจค เจฆเฉ‡ เจŸเฉเจฐเฉ€ เจตเจฟเฉฑเจš เจธเฉฐเจฌเฉฐเจงเจฟเจค เจชเจ›เจพเจฃเจ•เจฐเจคเจพเจตเจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ เจšเจพเจˆเจฒเจก เจเจฒเฉ€เจฎเฉˆเจ‚เจŸเจธ เจฆเฉ€ เจ‡เฉฑเจ• เจธเฉ‚เจšเฉ€ เจœเฉ‹เฉœเจฆเฉ€ เจนเฉˆเฅค
เจ•เจฒเฉฑเจธเจŸเจฐ เจ†เจˆเจŸเจฎเจพเจ‚ เจธเจผเจพเจฎเจฒ เจ•เจฐเฉ‹

proc InsertClusterItems {tree id} {
    set parent "cluster::$id"
    $tree insert $parent end -id "infobases::$id" -text "ะ˜ะฝั„ะพั€ะผะฐั†ะธะพะฝะฝั‹ะต ะฑะฐะทั‹" -values "$id"
    $tree insert $parent end -id "servers::$id" -text "ะ ะฐะฑะพั‡ะธะต ัะตั€ะฒะตั€ั‹" -values "$id"
    $tree insert $parent end -id "admins::$id" -text "ะะดะผะธะฝะธัั‚ั€ะฐั‚ะพั€ั‹" -values "$id"
    $tree insert $parent end -id "managers::$id" -text "ะœะตะฝะตะดะถะตั€ั‹ ะบะปะฐัั‚ะตั€ะฐ" -values $id
    $tree insert $parent end -id "processes::$id" -text "ะ ะฐะฑะพั‡ะธะต ะฟั€ะพั†ะตััั‹" -values "workprocess-all"
    $tree insert $parent end -id "sessions::$id" -text "ะกะตะฐะฝัั‹" -values "sessions-all"
    $tree insert $parent end -id "locks::$id" -text "ะ‘ะปะพะบะธั€ะพะฒะบะธ" -values "blocks-all"
    $tree insert $parent end -id "connections::$id" -text "ะกะพะตะดะธะฝะตะฝะธั" -values "connections-all"
    $tree insert $parent end -id "profiles::$id" -text "ะŸั€ะพั„ะธะปะธ ะฑะตะทะพะฟะฐัะฝะพัั‚ะธ" -values $id
}

เจคเฉเจธเฉ€เจ‚ เจ‡เฉฑเจ• เจธเจฎเจพเจจ เจตเจฟเจงเฉ€ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจ เจฒเจˆ เจฆเฉ‹ เจนเฉ‹เจฐ เจตเจฟเจ•เจฒเจชเจพเจ‚ 'เจคเฉ‡ เจตเจฟเจšเจพเจฐ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจœเจฟเฉฑเจฅเฉ‡ เจ‡เจน เจธเจชเฉฑเจธเจผเจŸ เจคเฉŒเจฐ 'เจคเฉ‡ เจฆเจฟเจ–เจพเจˆ เจฆเฉ‡เจตเฉ‡เจ—เจพ เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจ•เจฟเจตเฉ‡เจ‚ เจ…เจจเฉเจ•เฉ‚เจฒเจฟเจค เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจ…เจคเฉ‡ เจฆเฉเจนเจฐเจพเจ‰เจฃ เจตเจพเจฒเฉ€เจ†เจ‚ เจ•เจฎเจพเจ‚เจกเจพเจ‚ เจคเฉ‹เจ‚ เจ›เฉเจŸเจ•เจพเจฐเจพ เจชเจพ เจธเจ•เจฆเฉ‡ เจนเฉ‹:

เจ‡เจธ เจตเจฟเจงเฉ€ เจตเจฟเฉฑเจš, เจœเฉ‹เฉœเจจเจพ เจ…เจคเฉ‡ เจœเจพเจ‚เจš เจ•เจฐเจจเจพ เจธเจฟเจฐเฉ‡ เจคเฉ‹เจ‚ เจนเฉฑเจฒ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ:

InsertBaseItems

proc InsertBaseItems {tree id} {
    set parent "infobase::$id"
    if { [$tree exists "sessions::$id"] == 0 } {
        $tree insert $parent end -id "sessions::$id" -text "ะกะตะฐะฝัั‹" -values "$id"
    }
    if { [$tree exists "locks::$id"] == 0 } {
        $tree insert $parent end -id "locks::$id" -text "ะ‘ะปะพะบะธั€ะพะฒะบะธ" -values "$id"
    }
    if { [$tree exists "connections::$id"] == 0 } {
        $tree insert $parent end -id "connections::$id" -text "ะกะพะตะดะธะฝะตะฝะธั" -values "$id"
    }
}

เจ‡เฉฑเจฅเฉ‡ เจ‡เฉฑเจ• เจนเฉ‹เจฐ เจธเจนเฉ€ เจชเจนเฉเฉฐเจš เจนเฉˆ:

เจชเฉเจฐเฉ‹เจซเจพเจˆเจฒ เจ†เจˆเจŸเจฎเจพเจ‚ เจธเจผเจพเจฎเจฒ เจ•เจฐเฉ‹

proc InsertProfileItems {tree id} {
    set parent "profile::$id"
    set lst {
        {dir "ะ’ะธั€ั‚ัƒะฐะปัŒะฝั‹ะต ะบะฐั‚ะฐะปะพะณะธ"}
        {com "ะ ะฐะทั€ะตัˆั‘ะฝะฝั‹ะต COM-ะบะปะฐััั‹"}
        {addin "ะ’ะฝะตัˆะฝะธะต ะบะพะผะฟะพะฝะตะฝั‚ั‹"}
        {module "ะ’ะฝะตัˆะฝะธะต ะพั‚ั‡ั‘ั‚ั‹ ะธ ะพะฑั€ะฐะฑะพั‚ะบะธ"}
        {app "ะ ะฐะทั€ะตัˆั‘ะฝะฝั‹ะต ะฟั€ะธะปะพะถะตะฝะธั"}
        {inet "ะ ะตััƒั€ัั‹ ะธะฝั‚ะตั€ะฝะตั‚"}
    }
    foreach i $lst {
        append item [lindex $i 0] "::$id"
        if { [$tree exists $item] == 0 } {
            $tree insert $parent end -id $item -text [lindex $i 1] -values "$id"
        }
        unset item 
    }
}

เจ‰เจนเจจเจพเจ‚ เจตเจฟเฉฑเจš เจ…เฉฐเจคเจฐ เจ‡เฉฑเจ• เจฒเฉ‚เจช เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจนเฉˆ, เจœเจฟเจธ เจตเจฟเฉฑเจš เจฆเฉเจนเจฐเจพเจˆเจ†เจ‚ เจ—เจˆเจ†เจ‚ เจ•เจฎเจพเจ‚เจกเจพเจ‚ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‡เจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค เจ•เจฟเจธ เจชเจนเฉเฉฐเจš เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจเจพ เจกเจฟเจตเฉˆเจฒเจชเจฐ เจฆเฉ€ เจฎเจฐเจœเจผเฉ€ 'เจคเฉ‡ เจนเฉˆเฅค

เจ…เจธเฉ€เจ‚ เจคเฉฑเจค เจœเฉ‹เฉœเจจ เจ…เจคเฉ‡ เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจฎเฉเฉœ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจจเฉ‚เฉฐ เจ•เจตเจฐ เจ•เฉ€เจคเจพ เจนเฉˆ, เจนเฉเจฃ เจธเฉฐเจชเจพเจฆเจจ 'เจคเฉ‡ เจงเจฟเจ†เจจ เจฆเฉ‡เจฃ เจฆเจพ เจธเจฎเจพเจ‚ เจ† เจ—เจฟเจ† เจนเฉˆเฅค เจ•เจฟเจ‰เจ‚เจ•เจฟ, เจฎเฉ‚เจฒ เจฐเฉ‚เจช เจตเจฟเฉฑเจš, เจ‰เจนเฉ€ เจฎเจพเจชเจฆเฉฐเจกเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจธเฉฐเจชเจพเจฆเจจ เจ…เจคเฉ‡ เจœเฉ‹เฉœเจจ เจฒเจˆ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ (เจœเจพเจฃเจ•เจพเจฐเฉ€ เจ…เจงเจพเจฐ เจฆเฉ‡ เจ…เจชเจตเจพเจฆ เจฆเฉ‡ เจจเจพเจฒ), เจ‰เจนเฉ€ เจกเจพเจ‡เจฒเจพเจ— เจซเจพเจฐเจฎ เจตเจฐเจคเฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจนเจจเฅค เจœเฉ‹เฉœเจจ เจฒเจˆ เจ•เจพเจฒเจฟเฉฐเจ— เจชเฉเจฐเจ•เจฟเจฐเจฟเจ†เจตเจพเจ‚ เจฒเจˆ เจเจฒเจ—เฉ‹เจฐเจฟเจฆเจฎ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจฆเจฟเจ–เจพเจˆ เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ:

เจœเฉ‹เฉœเฉ‹::$key->AddToplevel

เจ…เจคเฉ‡ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจฆเฉ‡ เจธเฉฐเจชเจพเจฆเจจ เจฒเจˆ:

เจธเฉฐเจชเจพเจฆเจฟเจค เจ•เจฐเฉ‹::$key->Add::$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 เจฆเจพ เจ‡เฉฑเจ• เจนเฉ‹เจฐ เจซเจพเจ‡เจฆเจพ เจธเจพเจนเจฎเจฃเฉ‡ เจ†เจ‡เจ† - เจฆเฉ‚เจœเฉ‡ เจตเฉ‡เจฐเฉ€เจเจฌเจฒเจพเจ‚ เจฆเฉ‡ เจฎเฉเฉฑเจฒ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจจเจพเจฎเจพเจ‚ เจตเจœเฉ‹เจ‚ เจฌเจฆเจฒเฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจนเจจเฅค เจ‰เจน. เจซเจพเจฐเจฎเจพเจ‚ เจจเฉ‚เฉฐ เจญเจฐเจจ เจ…เจคเฉ‡ เจตเฉ‡เจฐเฉ€เจเจฌเจฒเจพเจ‚ เจฆเฉ€ เจธเจผเฉเจฐเฉ‚เจ†เจค เจจเฉ‚เฉฐ เจธเจตเฉˆเจšเจพเจฒเจค เจ•เจฐเจจ เจฒเจˆ, เจ–เฉ‡เจคเจฐเจพเจ‚ เจ…เจคเฉ‡ เจตเฉ‡เจฐเฉ€เจเจฌเจฒเจพเจ‚ เจฆเฉ‡ เจจเจพเจฎ rac เจ‰เจชเจฏเฉ‹เจ—เจคเจพ เจฆเฉ‡ เจ•เจฎเจพเจ‚เจก เจฒเจพเจˆเจจ เจธเจตเจฟเฉฑเจšเจพเจ‚ เจ…เจคเฉ‡ เจ•เฉเจ เจ…เจชเจตเจพเจฆ เจฆเฉ‡ เจจเจพเจฒ เจ•เจฎเจพเจ‚เจก เจ†เจ‰เจŸเจชเฉเฉฑเจŸ เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐเจพเจ‚ เจฆเฉ‡ เจจเจพเจฎ เจจเจพเจฒ เจฎเฉ‡เจฒ เจ–เจพเจ‚เจฆเฉ‡ เจนเจจ - เจกเฉˆเจธเจผ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจ…เฉฐเจกเจฐเจธเจ•เฉ‹เจฐ เจจเจพเจฒ เจฌเจฆเจฒเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค เจ‰เจฆเจพ เจ…เจจเฉเจธเฉ‚เจšเจฟเจค-เจจเฉŒเจ•เจฐเฉ€เจ†เจ‚-เจ‡เจจเจ•เจพเจฐ เจ–เฉ‡เจคเจฐ เจจเจพเจฒ เจฎเฉ‡เจฒ เจ–เจพเจ‚เจฆเจพ เจนเฉˆ ent_scheduled_jobs_deny เจ…เจคเฉ‡ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจ…เจจเฉเจธเฉ‚เจšเจฟเจค_เจจเฉŒเจ•เจฐเฉ€เจ†เจ‚_เจฎเฉฐเจจเฉ‹.

เจœเฉ‹เฉœเจจ เจ…เจคเฉ‡ เจธเฉฐเจชเจพเจฆเจฟเจค เจ•เจฐเจจ เจฒเจˆ เจซเจพเจฐเจฎ เจ–เฉ‡เจคเจฐเจพเจ‚ เจฆเฉ€ เจฐเจšเจจเจพ เจตเจฟเฉฑเจš เจตเฉฑเจ–เจฐเฉ‡ เจนเฉ‹ เจธเจ•เจฆเฉ‡ เจนเจจ, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจ‡เฉฑเจ• เจœเจพเจฃเจ•เจพเจฐเฉ€ เจ…เจงเจพเจฐ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจเจพ:

เจœเจพเจฃเจ•เจพเจฐเฉ€ เจธเฉเจฐเฉฑเจ–เจฟเจ† เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจจเจพ

1C RAC เจฒเจˆ GUI เจฒเจฟเจ–เจฃเจพ, เจœเจพเจ‚ เจฆเฉเจฌเจพเจฐเจพ Tcl/Tk เจฌเจพเจฐเฉ‡

เจœเจพเจฃเจ•เจพเจฐเฉ€ เจธเฉเจฐเฉฑเจ–เจฟเจ† เจฆเจพ เจธเฉฐเจชเจพเจฆเจจ เจ•เจฐเจจเจพ

1C RAC เจฒเจˆ GUI เจฒเจฟเจ–เจฃเจพ, เจœเจพเจ‚ เจฆเฉเจฌเจพเจฐเจพ Tcl/Tk เจฌเจพเจฐเฉ‡

เจธเฉฐเจชเจพเจฆเจจ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจตเจฟเฉฑเจš เจธเฉฐเจชเจพเจฆเจจ::เจ‡เจจเจซเฉ‹เจฌเฉ‡เจธ, เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ‡ เจ–เฉ‡เจคเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจซเจพเจฐเจฎ เจตเจฟเฉฑเจš เจœเฉ‹เฉœเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจ‡เจธ เจฒเจˆ เจฎเฉˆเจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจ‡เฉฑเจฅเฉ‡ เจชเฉ‡เจธเจผ เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเจพ เจนเจพเจ‚เฅค

เจธเจฎเจพเจจเจคเจพ เจฆเฉเจ†เจฐเจพ, เจนเฉ‹เจฐ เจคเฉฑเจคเจพเจ‚ เจฒเจˆ เจœเฉ‹เฉœเจจ, เจธเฉฐเจชเจพเจฆเจจ เจ•เจฐเจจ, เจฎเจฟเจŸเจพเจ‰เจฃ เจฆเฉ€เจ†เจ‚ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ†เจตเจพเจ‚ เจฒเจพเจ—เฉ‚ เจ•เฉ€เจคเฉ€เจ†เจ‚ เจœเจพเจ‚เจฆเฉ€เจ†เจ‚ เจนเจจเฅค

เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‰เจชเจฏเฉ‹เจ—เจคเจพ เจฆเฉ‡ เจธเฉฐเจšเจพเจฒเจจ เจฆเจพ เจฎเจคเจฒเจฌ เจธเจฐเจตเจฐ, เจ•เจฒเฉฑเจธเจŸเจฐ, เจœเจพเจฃเจ•เจพเจฐเฉ€ เจฌเฉ‡เจธ, เจ†เจฆเจฟ เจฆเฉ€ เจ…เจธเฉ€เจฎเจฟเจค เจ—เจฟเจฃเจคเฉ€ เจนเฉˆ, เจ‡เจน เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฐเจจ เจฒเจˆ เจ•เจฟ เจ•เจฟเจนเฉœเจพ เจ•เจฒเฉฑเจธเจŸเจฐ เจ•เจฟเจธ เจธเจฐเจตเจฐ เจœเจพเจ‚ เจธเฉ‚เจšเจจเจพ เจธเฉเจฐเฉฑเจ–เจฟเจ† เจชเฉเจฐเจฃเจพเจฒเฉ€ เจจเจพเจฒ เจธเจฌเฉฐเจงเจค เจนเฉˆ, เจ•เจˆ เจ—เจฒเฉ‹เจฌเจฒ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจชเฉ‡เจธเจผ เจ•เฉ€เจคเฉ‡ เจ—เจ เจนเจจ, เจœเจฟเจจเฉเจนเจพเจ‚ เจฆเฉ‡ เจฎเฉเฉฑเจฒ เจนเจฐเฉ‡เจ• เจจเฉ‚เฉฐ เจธเฉˆเฉฑเจŸ เจ•เฉ€เจคเฉ‡ เจ—เจ เจนเจจเฅค เจœเจฆเฉ‹เจ‚ เจคเฉเจธเฉ€เจ‚ เจฐเฉเฉฑเจ– เจฆเฉ‡ เจคเฉฑเจคเจพเจ‚ 'เจคเฉ‡ เจ•เจฒเจฟเฉฑเจ• เจ•เจฐเจฆเฉ‡ เจนเฉ‹เฅค เจ‰เจน. เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจฎเฉเฉœ-เจฎเฉเฉœ เจธเจพเจฐเฉ‡ เจฎเฉ‚เจฒ เจคเฉฑเจคเจพเจ‚ เจฆเฉเจ†เจฐเจพ เจšเจฒเจฆเฉ€ เจนเฉˆ เจ…เจคเฉ‡ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจธเฉˆเฉฑเจŸ เจ•เจฐเจฆเฉ€ เจนเฉˆ:

GlobalVarFromTreeItems เจธเฉˆเฉฑเจŸ เจ•เจฐเฉ‹

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 เจนเฉ‹เจฐ เจ—เจฒเฉ‹เจฌเจฒ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจชเฉ‡เจธเจผ เจ•เฉ€เจคเฉ‡ เจ—เจ เจธเจจเฅค เจ‰เจน. เจœเฉ‡เจ•เจฐ เจ•เจฒเฉฑเจธเจŸเจฐ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจชเฉเจฐเจธเจผเจพเจธเจ• เจ–เจพเจคเจพ เจนเฉˆ, เจคเจพเจ‚ เจคเฉเจนเจพเจกเจพ เจฒเฉŒเจ—เจ‡เจจ เจ…เจคเฉ‡ เจชเจพเจธเจตเจฐเจก เจฆเจฐเจœ เจ•เจฐเจจ เจฒเจˆ เจ‡เฉฑเจ• เจกเจพเจ‡เจฒเจพเจ— เจชเฉเจฐเจฆเจฐเจธเจผเจฟเจค เจ•เฉ€เจคเจพ เจœเจพเจตเฉ‡เจ—เจพ, เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจฎเฉˆเจฎเฉ‹เจฐเฉ€ เจตเจฟเฉฑเจš เจธเฉเจฐเฉฑเจ–เจฟเจ…เจค เจ•เฉ€เจคเจพ เจœเจพเจตเฉ‡เจ—เจพ เจ…เจคเฉ‡ เจธเฉฐเจฌเฉฐเจงเจฟเจค เจ•เจฒเฉฑเจธเจŸเจฐ เจฒเจˆ เจนเจฐเฉ‡เจ• เจ•เจฎเจพเจ‚เจก เจตเจฟเฉฑเจš เจชเจพ เจฆเจฟเฉฑเจคเจพ เจœเจพเจตเฉ‡เจ—เจพเฅค

เจ‡เจน เจ—เจฒเจคเฉ€ เจจเฉ‚เฉฐ เจธเฉฐเจญเจพเจฒเจฃ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจฆเฉ€ เจœเจผเจฟเฉฐเจฎเฉ‡เจตเจพเจฐเฉ€ เจนเฉˆเฅค

เจ—เจฒเจคเฉ€ เจชเจพเจฐเจธเจฟเฉฐเจ—

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

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹