āĻ†āĻŽāĻ°āĻž 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 - āĻĒā§āĻ°āĻ§āĻžāĻ¨ GUI
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
}

āĻāĻ‡ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻ•ā§‹āĻĄ āĻ¤ā§āĻ˛āĻ¨āĻž āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āĻ¯āĻŸāĻŋ āĻ–āĻžāĻ˛āĻŋ āĻšā§‹āĻ–ā§‡ āĻĻā§ƒāĻļā§āĻ¯āĻŽāĻžāĻ¨ āĻšāĻ¯āĻŧ, āĻ†āĻŽāĻŋ āĻ āĻŋāĻ• āĻ†āĻ›ā§‡ āĻŦā§‹āĻ¤āĻžāĻŽ āĻšā§āĻ¯āĻžāĻ¨ā§āĻĄāĻ˛āĻžāĻ°ā§‡ āĻĢā§‹āĻ•āĻžāĻ¸ āĻ•āĻ°āĻŦāĨ¤ āĻŸāĻžāĻ•āĻžāĻ¯āĻŧ, āĻ—ā§āĻ°āĻžāĻĢāĻŋāĻ•āĻžāĻ˛ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨āĻ—ā§āĻ˛āĻŋāĻ° āĻŦā§ˆāĻļāĻŋāĻˇā§āĻŸā§āĻ¯āĻ—ā§āĻ˛āĻŋ āĻ°āĻžāĻ¨āĻŸāĻžāĻ‡āĻŽā§‡ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ“āĻ­āĻžāĻ°āĻ°āĻžāĻ‡āĻĄ āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°. āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻĒā§āĻ°āĻžāĻĨāĻŽāĻŋāĻ• āĻŦā§‹āĻ¤āĻžāĻŽ āĻ†āĻ‰āĻŸāĻĒā§āĻŸ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ:

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-āĻāĻ° āĻĒā§āĻ°āĻŦāĻ°ā§āĻ¤āĻ¨ āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻ•āĻ°ā§‡, āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§‡ āĻ•āĻŽāĻžāĻ¨ā§āĻĄā§‡āĻ° āĻ†āĻ‰āĻŸāĻĒā§āĻŸāĻ•ā§‡ āĻ¤āĻžāĻ˛āĻŋāĻ•āĻž āĻāĻŦāĻ‚ āĻ°āĻŋāĻŸāĻžāĻ°ā§āĻ¨ā§‡ āĻĒāĻžāĻ°ā§āĻ¸ āĻ•āĻ°ā§‡:

āĻ†āĻĒāĻ¨āĻžāĻ° āĻ†āĻĻā§‡āĻļ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§āĻ¨

proc RunCommand {root par} {
    global dir rac_cmd cluster work_list_row_count agent_user agent_pwd cluster_user cluster_pwd
    puts "$rac_cmd $par"
    set work_list_row_count 0
    # ĐžŅ‚ĐēŅ€Ņ‹Đ˛Đ°ĐĩĐŧ ĐēĐ°ĐŊĐ°Đģ в ĐŊĐĩĐąĐģĐžĐēиŅ€ŅƒŅŽŅ‰ĐĩĐŧ Ņ€ĐĩĐļиĐŧĐĩ
    # $rac - ĐēĐžĐŧĐ°ĐŊĐ´Đ° Ņ ĐŋĐžĐģĐŊŅ‹Đŧ ĐŋŅƒŅ‚Ņ‘Đŧ
    # $par - ŅŅ„ĐžŅ€ĐŧиŅ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Đĩ ĐēĐģŅŽŅ‡Đ¸ СаĐŋŅƒŅĐēĐ° и ĐžĐŋŅ†Đ¸Đ¸    
    set pipe [open "|$rac_cmd $par" "r"]
    try {
        set lst ""
        set l ""
        # вŅ‹Đ˛ĐžĐ´ ĐēĐžĐŧĐ°ĐŊĐ´Ņ‹ дОйавĐģŅĐĩĐŧ в ŅĐŋиŅĐžĐē ŅĐŋиŅĐēОв
        while {[gets $pipe line]>=0} {
            #puts $line
            if {$line eq ""} {
                lappend l $lst
                set lst ""
            } else {
                lappend lst [string trim $line]
            }
        }
        close $pipe
        return $l
    } on error {result options} {
        # ЗаĐŋŅƒŅĐē ОйŅ€Đ°ĐąĐžŅ‚Ņ‡Đ¸ĐēĐ° ĐžŅˆĐ¸ĐąĐžĐē
        ErrorParcing $result $options
        return ""
    }
}

āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡āĻ° āĻĄā§‡āĻŸāĻž āĻĒā§āĻ°āĻŦā§‡āĻļ āĻ•āĻ°āĻžāĻ° āĻĒāĻ°ā§‡, āĻāĻŸāĻŋ āĻŸā§āĻ°āĻŋāĻ¤ā§‡ āĻ¯ā§āĻ•ā§āĻ¤ āĻ•āĻ°āĻž āĻšāĻŦā§‡, āĻāĻ° āĻœāĻ¨ā§āĻ¯, āĻ‰āĻĒāĻ°ā§‡āĻ° Add:server āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ¤ā§‡, āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻ•ā§‹āĻĄāĻŸāĻŋ āĻĻāĻžāĻ¯āĻŧā§€:

.frm_tree.tree insert {} end -id "server::$host" -text "$host" -values "$host"

āĻāĻ–āĻ¨, āĻŸā§āĻ°āĻŋāĻ¤ā§‡ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡āĻ° āĻ¨āĻžāĻŽā§‡āĻ° āĻ‰āĻĒāĻ° āĻ•ā§āĻ˛āĻŋāĻ• āĻ•āĻ°āĻžāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡, āĻ†āĻŽāĻ°āĻž āĻāĻ‡ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻĒāĻ°āĻŋāĻšāĻžāĻ˛āĻŋāĻ¤ āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ°āĻ—ā§āĻ˛āĻŋāĻ° āĻāĻ•āĻŸāĻŋ āĻ¤āĻžāĻ˛āĻŋāĻ•āĻž āĻĒāĻžāĻ‡ āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ°ā§‡ āĻ•ā§āĻ˛āĻŋāĻ• āĻ•āĻ°āĻžāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡, āĻ†āĻŽāĻ°āĻž āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ° āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨āĻ—ā§āĻ˛āĻŋāĻ° (āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°, āĻ‡āĻ¨āĻĢā§‹āĻŦā§‡āĻ¸, āĻ‡āĻ¤ā§āĻ¯āĻžāĻĻāĻŋ) āĻāĻ•āĻŸāĻŋ āĻ¤āĻžāĻ˛āĻŋāĻ•āĻž āĻĒāĻžāĻ‡āĨ¤ āĻāĻŸāĻŋ TreePress āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ¤ā§‡ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ (lib/function.tcl āĻĢāĻžāĻ‡āĻ˛):

proc TreePress {tree} {
   global host server active_cluster infobase
   # ĐžĐŋŅ€ĐĩĐ´ĐĩĐģŅĐĩĐŧ вŅ‹Đ´ĐĩĐģĐĩĐŊĐŊŅ‹Đš ŅĐģĐĩĐŧĐĩĐŊŅ‚
    set id  [$tree selection]
   # ŅƒŅŅ‚Đ°ĐŊавĐģиваĐĩĐŧ ĐŊŅƒĐļĐŊŅ‹Đĩ ĐŗĐģОйаĐģŅŒĐŊŅ‹Đĩ ĐŋĐĩŅ€ĐĩĐŧĐĩĐŊĐŊŅ‹Đĩ
    SetGlobalVarFromTreeItems $tree $id
   # ОĐŋŅ€ĐĩĐ´ĐĩĐģŅĐĩĐŧ ĐēĐģŅŽŅ‡ и СĐŊĐ°Ņ‡ĐĩĐŊиĐĩ, Ņ‚.Đĩ. иĐŧĐĩĐŊĐŊĐž Ņ‚иĐŋ вŅ‹ĐąŅ€Đ°ĐŊĐŊĐžĐŗĐž ŅĐģĐĩĐŧĐĩĐŊŅ‚Đ°
    set values [$tree item $id -values]
    set key [lindex [split $id "::"] 0]
   # и в СавиŅĐ¸ĐŧĐžŅŅ‚и ĐžŅ‚ Ņ‚ĐžĐŗĐž Ņ‡Ņ‚Đž вŅ‹ĐąŅ€Đ°Đģи ĐąŅƒĐ´ĐĩŅ‚ СаĐŋŅƒŅ‰ĐĩĐŊĐ° ŅĐžĐžŅ‚вĐĩŅ‚ŅŅ‚вŅƒŅŽŅ‰Đ°Ņ ĐŋŅ€ĐžŅ†ĐĩĐ´ŅƒŅ€Đ° 
   # в ĐŋŅ€ĐžŅŅ‚Ņ€Đ°ĐŊŅŅ‚вĐĩ иĐŧŅ‘ĐŊ Run
    Run::$key $tree $host $values
}

āĻ¤āĻĻāĻ¨ā§āĻ¸āĻžāĻ°ā§‡, āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ Run::server āĻšāĻžāĻ˛ā§ āĻ•āĻ°āĻž āĻšāĻŦā§‡ (Cluster-āĻāĻ° āĻœāĻ¨ā§āĻ¯ 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 āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡

āĻ‰āĻĒāĻ°ā§‡āĻ° āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻŸāĻŋ āĻšā§‡āĻĄāĻžāĻ°ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ā§‡āĻ° āĻ¨āĻžāĻŽ āĻāĻŦāĻ‚ āĻŸā§‡āĻŦāĻŋāĻ˛āĻŸāĻŋ āĻĒā§‚āĻ°āĻŖ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻĄā§‡āĻŸāĻž āĻŦā§‡āĻ° āĻ•āĻ°ā§‡:

InsertItemsWorklist

proc InsertItemsWorkList {lst} {
    global work_list_row_count
    # ŅƒŅŅ‚Đ°ĐŊОвĐēĐ° Ņ‡ĐĩŅ€ĐĩдОваĐŊиŅ Ņ†Đ˛ĐĩŅ‚Đ° Đ´ĐģŅ ŅŅ‚Ņ€ĐžĐēи
    if [expr $work_list_row_count % 2] {
        set tag dark
    } else {
        set tag light
    }
    # Ņ€Đ°ĐˇĐąĐžŅ€ ŅŅ‚Ņ€ĐžĐē ĐŊĐ° ĐŋĐ°Ņ€Ņ‹ ĐēĐģŅŽŅ‡ - СĐŊĐ°Ņ‡ĐĩĐŊиĐĩ
    foreach i $lst {
        if [regexp -nocase -all -- {(D+)(s*?|)(:)(s*?|)(.*)} $i match param v2 v3 v4 value] {
            lappend column_list [string trim $param]
            lappend value_list [string trim $value]
        }
    }
     # СаĐŋĐžĐģĐŊĐĩĐŊиĐĩ Ņ‚Đ°ĐąĐģиŅ†Ņ‹
    .frm_work.tree_work configure -columns $column_list -displaycolumns $column_list
    .frm_work.tree_work insert {} end  -values $value_list -tags $tag
    .frm_work.tree_work column #0 -stretch
    # ŅƒŅŅ‚Đ°ĐŊОвĐēĐ° СаĐŗĐžĐģОвĐēОв
    foreach j $column_list {
        .frm_work.tree_work heading $j -text $j
    }
    incr work_list_row_count
}

āĻāĻ–āĻžāĻ¨ā§‡, āĻāĻ•āĻŸāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ•āĻŽāĻžāĻ¨ā§āĻĄā§‡āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§‡ [split $str ":"], āĻ¯āĻž āĻ¸ā§āĻŸā§āĻ°āĻŋāĻ‚āĻŸāĻŋāĻ•ā§‡ ":" āĻĻā§āĻŦāĻžāĻ°āĻž āĻŦāĻŋāĻ­āĻ•ā§āĻ¤ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨āĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻŦāĻŋāĻ­āĻ•ā§āĻ¤ āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ āĻ¤āĻžāĻ˛āĻŋāĻ•āĻž āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡, āĻāĻ•āĻŸāĻŋ āĻ°ā§‡āĻ—ā§āĻ˛āĻžāĻ° āĻāĻ•ā§āĻ¸āĻĒā§āĻ°ā§‡āĻļāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ, āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻ•āĻŋāĻ›ā§ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ā§‡ āĻāĻ•āĻŸāĻŋ āĻ•ā§‹āĻ˛āĻ¨āĻ“ āĻĨāĻžāĻ•ā§‡āĨ¤

InsertClusterItems āĻĒāĻĻā§āĻ§āĻ¤āĻŋ (āĻ…āĻ¨ā§‡āĻ•āĻ—ā§āĻ˛āĻŋ āĻ…āĻ¨ā§āĻ°ā§‚āĻĒāĻ—ā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻāĻ•āĻŸāĻŋ) āĻ•ā§‡āĻŦāĻ˛ āĻ—āĻžāĻ›ā§‡āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ° āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻ‚āĻļā§āĻ˛āĻŋāĻˇā§āĻŸ āĻļāĻ¨āĻžāĻ•ā§āĻ¤āĻ•āĻžāĻ°ā§€āĻ° āĻ¸āĻžāĻĨā§‡ āĻšāĻžāĻ‡āĻ˛ā§āĻĄ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨āĻ—ā§āĻ˛āĻŋāĻ° āĻāĻ•āĻŸāĻŋ āĻ¤āĻžāĻ˛āĻŋāĻ•āĻž āĻ¯ā§‹āĻ— āĻ•āĻ°ā§‡
ClusterItems āĻ¸āĻ¨ā§āĻ¨āĻŋāĻŦā§‡āĻļ āĻ•āĻ°āĻžāĻ¨

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->āĻ¯ā§‹āĻ— āĻ•āĻ°ā§āĻ¨::$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

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 āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡

āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨āĻž āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ¤ā§‡ Edit::infobase, āĻĢāĻ°ā§āĻŽāĻŸāĻŋāĻ¤ā§‡ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ° āĻ¯ā§‹āĻ— āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻ‡ āĻ†āĻŽāĻŋ āĻāĻ–āĻžāĻ¨ā§‡ āĻ•ā§‹āĻĄāĻŸāĻŋ āĻĻāĻŋāĻšā§āĻ›āĻŋ āĻ¨āĻžāĨ¤

āĻ¸āĻžāĻĻā§ƒāĻļā§āĻ¯ āĻĻā§āĻŦāĻžāĻ°āĻž, āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¯ā§‹āĻ—, āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨āĻž, āĻŽā§āĻ›ā§‡ āĻĢā§‡āĻ˛āĻžāĻ° āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤

āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻ‡āĻ‰āĻŸāĻŋāĻ˛āĻŋāĻŸāĻŋ āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨āĻŸāĻŋ āĻŦā§‹āĻāĻžāĻ¯āĻŧ āĻ¸ā§€āĻŽāĻžāĻšā§€āĻ¨ āĻ¸āĻ‚āĻ–ā§āĻ¯āĻ• āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°, āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ°, āĻ‡āĻ¨āĻĢā§‹āĻŦā§‡āĻ¸ āĻ‡āĻ¤ā§āĻ¯āĻžāĻĻāĻŋ, āĻ•ā§‹āĻ¨ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻŦāĻž IS āĻ•ā§‹āĻ¨ āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ°ā§‡āĻ° āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ—āĻ¤ āĻ¤āĻž āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŖ āĻ•āĻ°āĻ¤ā§‡, āĻŦā§‡āĻļ āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋ āĻ—ā§āĻ˛ā§‹āĻŦāĻžāĻ˛ āĻ­ā§‡āĻ°āĻŋāĻ¯āĻŧā§‡āĻŦāĻ˛ āĻšāĻžāĻ˛ā§ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ, āĻ¯āĻžāĻ° āĻŽāĻžāĻ¨āĻ—ā§āĻ˛āĻŋ āĻ†āĻĒāĻ¨āĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻŦāĻžāĻ° āĻ•ā§āĻ˛āĻŋāĻ• āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ¸ā§‡āĻŸ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻ—āĻžāĻ›ā§‡āĻ° āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨āĨ¤ āĻ¸ā§‡āĻ—ā§āĻ˛ā§‹. āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻŸāĻŋ āĻĒā§āĻ¨āĻ°āĻžāĻŦā§ƒāĻ¤ā§āĻ¤āĻŋāĻŽā§‚āĻ˛āĻ•āĻ­āĻžāĻŦā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻŽā§‚āĻ˛ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨āĻ—ā§āĻ˛āĻŋāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻšāĻ˛ā§‡ āĻāĻŦāĻ‚ āĻ­ā§‡āĻ°āĻŋāĻ¯āĻŧā§‡āĻŦāĻ˛ āĻ¸ā§‡āĻŸ āĻ•āĻ°ā§‡:

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

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨