{"id":37390,"date":"2019-10-31T22:17:21","date_gmt":"2019-10-31T19:17:21","guid":{"rendered":"https:\/\/prohoster.info\/blog\/pishem-gui-k-1s-rac-ili-snova-o-tcl-tk\/"},"modified":"2019-10-31T22:17:21","modified_gmt":"2019-10-31T19:17:21","slug":"pishem-gui-k-1s-rac-ili-snova-o-tcl-tk","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/pishem-gui-k-1s-rac-ili-snova-o-tcl-tk","title":{"rendered":"Wir schreiben ein GUI f\u00fcr 1C RAC, oder wieder \u00fcber Tcl\/Tk","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>\u041f\u043e \u043c\u0435\u0440\u0435 \u0432\u043d\u0438\u043a\u0430\u043d\u0438\u044f \u0432 \u0442\u0435\u043c\u0443 \u0440\u0430\u0431\u043e\u0442\u044b 1\u0421-\u043e\u0432\u0441\u043a\u0438\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432 \u0432 \u0441\u0440\u0435\u0434\u0435 linux, \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0441\u044f \u043e\u0434\u0438\u043d \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a \u2014 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0443\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 1\u0421. \u0418 \u0440\u0435\u0448\u0435\u043d\u043e \u0431\u044b\u043b\u043e \u044d\u0442\u043e\u0442 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c, \u043f\u0443\u0442\u0451\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f GUI \u0434\u043b\u044f \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0439 \u0443\u0442\u0438\u043b\u0438\u0442\u044b rac. \u042f\u0437\u044b\u043a\u043e\u043c \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0431\u044b\u043b \u0432\u044b\u0431\u0440\u0430\u043d tcl\/tk \u043a\u0430\u043a, \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438. \u0418 \u0432\u043e\u0442, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0430\u0441\u043f\u0435\u043a\u0442\u044b \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0445\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0435.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u044b tcl\/tk \u0438 1\u0421. \u0410 \u0442\u0430\u043a \u043a\u0430\u043a \u044f \u0440\u0435\u0448\u0438\u043b \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u043f\u043e\u0441\u0442\u0430\u0432\u043a\u0438 tcl\/tk \u0431\u0435\u0437 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432, \u0442\u043e \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0432\u0435\u0440\u0441\u0438\u044f 8.6.7, \u043a\u0443\u0434\u0430 \u0432\u0445\u043e\u0434\u0438\u0442 ttk \u2014 \u043f\u0430\u043a\u0435\u0442 \u0441 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c, ttk::TreeView, \u043e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u0430\u043a \u0432 \u0432\u0438\u0434\u0435 \u0434\u0440\u0435\u0432\u043e\u0432\u0438\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0442\u0430\u043a \u0438 \u0432 \u0432\u0438\u0434\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b (\u0441\u043f\u0438\u0441\u043a\u0430). \u0415\u0449\u0451, \u0432 \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u0430\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\u043c\u0438 (\u043a\u043e\u043c\u0430\u043d\u0434\u0430 try, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u043a\u043e\u043c\u0430\u043d\u0434).<\/p>\n<p>\u041f\u0440\u043e\u0435\u043a\u0442 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 (\u0445\u043e\u0442\u044f \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u0435\u0448\u0430\u0435\u0442 \u0432\u0441\u0451 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0434\u043d\u0438\u043c): <\/p>\n<p>rac_gui.cfg \u2014 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0439 \u043a\u043e\u043d\u0444\u0438\u0433<br \/>\nrac_gui.tcl \u2014 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430<br \/>\n\u0412 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 lib \u043b\u0435\u0436\u0430\u0442 \u0444\u0430\u0439\u043b\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u044b\u0435 \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435:<br \/>\nfunction.tcl \u2014 \u0444\u0430\u0439\u043b \u0441 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430\u043c\u0438<br \/>\ngui.tcl \u2014 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441<br \/>\nimages.tcl \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0432 base64<\/p>\n<p>\u0424\u0430\u0439\u043b rac_gui.tcl, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440, \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u043c\u043e\u0434\u0443\u043b\u0438, \u043a\u043e\u043d\u0444\u0438\u0433\u0438 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430 \u0441 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438:<\/p>\n<p><b class=\"spoiler_title\">rac_gui.tcl<\/b><\/p>\n<pre><code>#!\/bin\/sh\nexec wish \"$0\" -- \"$@\"\n\n# \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\nset dir(root) [pwd]\n# \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433, \u0435\u0441\u043b\u0438 \u0435\u0433\u043e \u043d\u0435\u0442 \u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0451\u043c\nset dir(work) [file join $env(HOME) .rac_gui]\nif {[file exists $dir(work)] == 0 } {\n    file mkdir $dir(work)    \n}\n# \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u0441 \u043c\u043e\u0434\u0443\u043b\u044f\u043c\u0438\nset dir(lib) \"[file join $dir(root) lib]\"\n\n# \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043a\u043e\u043d\u0444\u0438\u0433, \u0435\u0441\u043b\u0438 \u043e\u043d \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442, \u0442\u043e \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0439\nif {[file exists [file join $dir(work) rac_gui.cfg]] ==0} {\n    file copy [file join [pwd] rac_gui.cfg] [file join $dir(work) rac_gui.cfg]\n} \nsource [file join $dir(work) rac_gui.cfg]\n# \u041a\u043e\u0434 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u044f rac \u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043f\u0443\u0442\u0438 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0435\n# \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430 \u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u0435\u0434\u0435\u043d \u0434\u0438\u0430\u043b\u043e\u0433 \u0434\u043b\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438\n# \u0438 \u044d\u0442\u043e\u0442 \u043f\u0443\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u0430\u043d \u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\nif {[file exists $rac_cmd] == 0} {\n    set rac_cmd [tk_getOpenFile -initialdir $env(HOME) -parent . -title \"\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u043f\u0443\u0442\u044c \u0434\u043e rac\" -initialfile rac]\n    file copy [file join $dir(work) rac_gui.cfg] [file join $dir(work) rac_gui.cfg.bak] \n    set orig_file [open [file join $dir(work) rac_gui.cfg.bak] \"r\"]\n    set file [open [file join $dir(work) rac_gui.cfg] \"w\"]\n    while {[gets $orig_file line] &gt;=0 } {\n        if {[string match \"set rac_cmd*\" $line]} {\n            puts $file \"set rac_cmd $rac_cmd\"\n        } else {\n            puts $file $line\n        }\n    }\n    close $file\n    close $orig_file\n    #return \"$host:$port\"\n    file delete [file join $dir(work) 1c_srv.cfg.bak] \n} else {\n    puts \"Found $rac_cmd\"\n}\n\nset cluster_user \"\"\nset cluster_pwd \"\"\nset agent_user \"\"\nset agent_pwd \"\"\n## LOAD FILE ##\n# \u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043c\u043e\u0434\u0443\u043b\u0438 \u043a\u0440\u043e\u043c\u0435 gui.tcl \u0442\u0430\u043a \u043a\u0430\u043a \u0435\u0433\u043e \u043d\u0430\u0434\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c\nforeach modFile [lsort [glob -nocomplain [file join $dir(lib) *.tcl]]] {\n    if {[file tail $modFile] ne \"gui.tcl\"} {\n        source $modFile\n        puts \"Loaded module $modFile\"\n    }\n}\nsource [file join $dir(lib) gui.tcl]\nsource [file join $dir(work) rac_gui.cfg]\n\n# \u0427\u0438\u0442\u0430\u0435\u043c \u0444\u0430\u0439\u043b \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 1\u0421\n# \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u0434\u0435\u0440\u0435\u0432\u043e\nif [file exists [file join $dir(work) 1c_srv.cfg]] {\n    set f [open [file join $dir(work) 1c_srv.cfg] \"RDONLY\"]\n    while {[gets $f line] &gt;=0} {\n        .frm_tree.tree insert {} end -id \"server::$line\" -text \"$line\" -values \"$line\"\n    }    \n}<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0432\u0441\u0435\u0433\u043e, \u0447\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u044b rac, \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043e \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u043a\u043d\u043e. \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0442\u0440\u0451\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432:<\/p>\n<p>\u041f\u0430\u043d\u0435\u043b\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u0434\u0435\u0440\u0435\u0432\u043e \u0438 \u0441\u043f\u0438\u0441\u043e\u043a<\/p>\n<p>\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u00ab\u0434\u0435\u0440\u0435\u0432\u0430\u00bb \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0445\u043e\u0436\u0438\u043c \u043d\u0430 \u0448\u0442\u0430\u0442\u043d\u0443\u044e windows-\u043e\u0441\u043d\u0430\u0441\u0442\u043a\u0443 \u043e\u0442 1\u0421.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/nuk-svk.ru\/wp-content\/uploads\/2018\/07\/rac_gui_1.png\"><img decoding=\"async\" alt=\"\u041f\u0438\u0448\u0435\u043c GUI \u043a 1\u0421 RAC, \u0438\u043b\u0438 \u0441\u043d\u043e\u0432\u0430 \u043e Tcl\/Tk\" src=\"\/wp-content\/uploads\/2019\/08\/3f41d0297350ddb5838e064c0d5c7952.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043a\u043e\u0434 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0434\u0430\u043d\u043d\u043e\u0435 \u043e\u043a\u043d\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u0435 <br \/>\n<b class=\"spoiler_title\">lib\/gui.tcl<\/b><\/p>\n<pre><code># \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0438 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043e\u043a\u043d\u0430\n# \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e topLevelGeometry \u0432 \u043a\u043e\u043d\u0444\u0438\u0433 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b\nif {[info exists topLevelGeometry]} {\n    wm geometry . $topLevelGeometry\n} else {\n    wm geometry . 1024x768\n}\n# \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043e\u043a\u043d\u0430\nwm title . \"1C Rac GUI\"\nwm iconname . \"1C Rac Gui\"\n# \u0438\u043a\u043e\u043d\u043a\u0430 \u043e\u043a\u043d\u0430 (\u0431\u0435\u0440\u0435\u0442\u0441\u044f \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 lib\/imges.tcl)\nwm iconphoto . tcl\nwm protocol . WM_DELETE_WINDOW Quit\nwm overrideredirect . 0\nwm positionfrom . user\n\nttk::style theme use clam\n\n# \u041f\u0430\u043d\u0435\u043b\u044c \u0438\u043d\u0441\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432\nset frm_tool [frame .frm_tool]\npack $frm_tool -side left -fill y \nttk::panedwindow .panel -orient horizontal -style TPanedwindow\npack .panel -expand true -fill both\npack propagate .panel false\n\nttk::button $frm_tool.btn_add  -command Add  -image add_grey_32\nttk::button $frm_tool.btn_del  -command Del -image del_grey_32\nttk::button $frm_tool.btn_edit  -command Edit -image edit_grey_32\nttk::button $frm_tool.btn_quit -command Quit -image quit_grey_32\n\npack $frm_tool.btn_add $frm_tool.btn_del $frm_tool.btn_edit -side top -padx 5 -pady 5\npack $frm_tool.btn_quit  -side bottom -padx 5 -pady 5\n\n# \u0414\u0435\u0440\u0435\u0432\u043e \u0441 \u043f\u043e\u043b\u043e\u0441\u0430\u043c\u0438 \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0438\nset frm_tree [frame .frm_tree]\n\nttk::scrollbar $frm_tree.hsb1 -orient horizontal -command [list $frm_tree.tree xview]\nttk::scrollbar $frm_tree.vsb1 -orient vertical -command [list $frm_tree.tree yview]\nset tree [ttk::treeview $frm_tree.tree -show tree \n-xscrollcommand [list $frm_tree.hsb1 set] -yscrollcommand [list $frm_tree.vsb1 set]]\n\ngrid $tree -row 0 -column 0 -sticky nsew\ngrid $frm_tree.vsb1 -row 0 -column 1 -sticky nsew\ngrid $frm_tree.hsb1 -row 1 -column 0 -sticky nsew\ngrid columnconfigure $frm_tree 0 -weight 1\ngrid rowconfigure $frm_tree 0 -weight 1\n\n# \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u043c\u044b\u0448\u0438\nbind $frm_tree.tree &lt;ButtonRelease&gt; \"TreePress $frm_tree.tree\"\n\n# \u0421\u043f\u0438\u0441\u043e\u043a \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u044b\u0445 (\u0442\u0430\u0431\u043b\u0438\u0446\u0430)\nset frm_work [frame .frm_work]\nttk::scrollbar $frm_work.hsb -orient horizontal -command [list $frm_work.tree_work xview]\nttk::scrollbar $frm_work.vsb -orient vertical -command [list $frm_work.tree_work yview]\nset tree_work [\n    ttk::treeview $frm_work.tree_work \n    -show headings  -columns \"par val\" -displaycolumns \"par val\"\n    -xscrollcommand [list $frm_work.hsb set] \n    -yscrollcommand [list $frm_work.vsb set]\n]\n# \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0446\u0432\u0435\u0442\u043e\u0432 \u0434\u043b\u044f \u0447\u0435\u0440\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435\n$tree_work tag configure dark -background $color(dark_table_bg)\n$tree_work tag configure light -background $color(light_table_bg)\n\n# \u0420\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0430 \u0444\u043e\u0440\u043c\u0435\ngrid $tree_work -row 0 -column 0 -sticky nsew\ngrid $frm_work.vsb -row 0 -column 1 -sticky nsew\ngrid $frm_work.hsb -row 1 -column 0 -sticky nsew\ngrid columnconfigure $frm_work 0 -weight 1\ngrid rowconfigure $frm_work 0 -weight 1\npack $frm_tree $frm_work -side left -expand true -fill both\n\n#.panel add $frm_tool -weight 1\n.panel add $frm_tree -weight 1 \n.panel add $frm_work -weight 1\n<\/code><\/pre>\n<p>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439:<\/p>\n<p>1. \u0412 \u043d\u0430\u0447\u0430\u043b\u0435, \u043d\u0430\u0434\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 (\u0442.\u0435. \u0441\u0435\u0440\u0432\u0435\u0440 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u043c (\u0432 linux \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 &#171;\/opt\/1C\/v8.3\/x86_64\/ras cluster &#8212;daemon&#187;)).<\/p>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0436\u043c\u0451\u0442 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 &#171;+&#187; \u0438 \u0432 \u043e\u0442\u043a\u0440\u044b\u0432\u0448\u0435\u043c\u0441\u044f \u043e\u043a\u043d\u0435, \u0432\u0432\u043e\u0434\u0438\u043c \u0430\u0434\u0440\u0435\u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 \u043f\u043e\u0440\u0442:<\/p>\n<p><img decoding=\"async\" alt=\"\u041f\u0438\u0448\u0435\u043c GUI \u043a 1\u0421 RAC, \u0438\u043b\u0438 \u0441\u043d\u043e\u0432\u0430 \u043e Tcl\/Tk\" src=\"\/wp-content\/uploads\/2019\/08\/8b5efdb46ba621cb0ed73ae3a7da5e7d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u041f\u043e\u0441\u043b\u0435, \u0432 \u0434\u0435\u0440\u0435\u0432\u0435 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u043d\u0430\u0448 \u0441\u0435\u0440\u0432\u0435\u0440 \u043f\u043e \u0449\u0435\u043b\u0447\u043a\u0443 \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c, \u043e\u0442\u043a\u0440\u043e\u0435\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 \u043b\u0438\u0431\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u0435\u0434\u0435\u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p>2. \u0429\u0435\u043b\u043a\u043d\u0443\u0432 \u043d\u0430 \u0438\u043c\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u043e\u0442\u043a\u0440\u043e\u0435\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 \u0434\u043b\u044f \u043d\u0435\u0433\u043e.<\/p>\n<p>3.\u2026<\/p>\n<p>\u041d\u0443 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435, \u0442.\u0435. \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440, \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u043b\u044e\u0431\u043e\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0438 \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u043c \u043a\u043d\u043e\u043f\u043a\u0443 &#171;+&#187; \u0432 \u043f\u0430\u043d\u0435\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u0435\u0434\u0435\u043d \u0434\u0438\u0430\u043b\u043e\u0433 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/nuk-svk.ru\/wp-content\/uploads\/2018\/07\/rac_gui_3.png\"><img decoding=\"async\" alt=\"\u041f\u0438\u0448\u0435\u043c GUI \u043a 1\u0421 RAC, \u0438\u043b\u0438 \u0441\u043d\u043e\u0432\u0430 \u043e Tcl\/Tk\" src=\"\/wp-content\/uploads\/2019\/08\/ada35eb333b4d948711da9c9720b8b24.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>\u041a\u043d\u043e\u043f\u043a\u0438 \u0432 \u043f\u0430\u043d\u0435\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430, \u0442.\u0435. \u043e\u0442 \u0442\u043e\u0433\u043e \u043a\u0430\u043a\u043e\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0434\u0435\u0440\u0435\u0432\u0430 \u0438\u043b\u0438 \u0441\u043f\u0438\u0441\u043a\u0430 \u0432\u044b\u0431\u0440\u0430\u043d, \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u0442\u0430 \u0438\u043b\u0438 \u0438\u043d\u0430\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430. <\/p>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f (&#171;+&#187;):<\/p>\n<p>\u041a\u043e\u0434 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043d\u043e\u043f\u043a\u0438:<\/p>\n<pre><code>ttk::button $frm_tool.btn_add  -command Add  -image add_grey_32<\/code><\/pre>\n<p>\n\u0422\u0443\u0442 \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043a\u043d\u043e\u043f\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u00abAdd\u00bb, \u0435\u0451 \u043a\u043e\u0434:<\/p>\n<pre><code>proc Add {} {\n    global active_cluster host\n    # \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\n    set id  [.frm_tree.tree selection] \n    # \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\n    set values [.frm_tree.tree item [.frm_tree.tree selection] -values]\n    set key [lindex [split $id \"::\"] 0]\n    # \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e \u0447\u0442\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u043b\u0438 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u0430 \u043d\u0443\u0436\u043d\u0430\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430\n    if {$key eq \"\" || $key eq \"server\"} {\n        set host [ Add::server ]\n        return\n    }\n    Add::$key .frm_tree.tree $host $values\n}<\/code><\/pre>\n<p>\n\u0412\u043e\u0442 \u0438 \u043f\u0440\u043e\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u0435\u0442 \u043e\u0434\u0438\u043d \u0438\u0437 \u043f\u043b\u044e\u0441\u043e\u0432 \u0442\u0438\u043a\u043b\u044f \u2014 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u043c\u0435\u043d\u0438 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439: <\/p>\n<pre><code>Add::$key .frm_tree.tree $host $values<\/code><\/pre>\n<p>\n\u0422.\u0435., \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0435\u0441\u043b\u0438 \u043c\u044b \u0442\u043a\u043d\u0451\u043c \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u043d\u0430\u0436\u043c\u0451\u043c &#171;+&#187; \u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 Add::server, \u0435\u0441\u043b\u0438 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u2014 Add::cluster \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435 (\u043e \u0442\u043e\u043c \u043e\u0442\u043a\u0443\u0434\u0430 \u0431\u0435\u0440\u0443\u0442\u0441\u044f \u043d\u0443\u0436\u043d\u044b\u0435 \u00ab\u043a\u043b\u044e\u0447\u0438\u00bb \u043d\u0430\u043f\u0438\u0448\u0443 \u0447\u0443\u0442\u044c \u043d\u0438\u0436\u0435), \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u044e\u0442 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0443.<\/p>\n<p>\u041a\u0430\u043a \u0432\u044b \u0443\u0436\u0435 \u043c\u043e\u0433\u043b\u0438 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0444\u043e\u0440\u043c\u044b \u043f\u043e\u0445\u043e\u0436\u0438 \u043f\u043e \u0441\u0442\u0438\u043b\u044e \u2014 \u044d\u0442\u043e \u0438 \u043d\u0435 \u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0432\u0435\u0434\u044c \u043e\u043d\u0438 \u0432\u044b\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043e\u0439, \u0442\u043e\u0447\u043d\u0435\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043a\u0430\u0440\u043a\u0430\u0441 \u0444\u043e\u0440\u043c\u044b (\u043e\u043a\u043d\u043e, \u043a\u043d\u043e\u043f\u043a\u0438, \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u043c\u0435\u0442\u043a\u0430), \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b <b class=\"spoiler_title\">AddTopLevel<\/b><\/p>\n<pre><code>proc AddToplevel {lbl img {win_name .add}} {\n    set cmd \"destroy $win_name\"\n    if [winfo exists $win_name] {destroy $win_name}\n    toplevel $win_name\n    wm title $win_name $lbl\n    wm iconphoto $win_name tcl\n    # \u043c\u0435\u0442\u043a\u0430 \u0441 \u0438\u043a\u043e\u043d\u043a\u043e\u0439\n    ttk::label $win_name.lbl -image $img\n    # \u0444\u0440\u0435\u0439\u043c \u0441 \u043f\u043e\u043b\u044f\u043c\u0438 \u0432\u0432\u043e\u0434\u0430\n    set frm [ttk::labelframe $win_name.frm -text $lbl -labelanchor nw]\n    \n    grid columnconfigure $frm 0 -weight 1\n    grid rowconfigure $frm 0 -weight 1\n    # \u0444\u0440\u0435\u0439\u043c \u0438 \u043a\u043d\u043e\u043f\u043a\u0438\n    set frm_btn [frame $win_name.frm_btn -border 0]\n    ttk::button $frm_btn.btn_ok -image ok_grey_24 -command { }\n    ttk::button $frm_btn.btn_cancel -command $cmd -image quit_grey_24 \n    grid $win_name.lbl -row 0 -column 0 -sticky nw -padx 5 -pady 10\n    grid $frm -row 0 -column 1 -sticky nw -padx 5 -pady 5\n    grid $frm_btn -row 1 -column 1 -sticky se -padx 5 -pady 5\n    pack  $frm_btn.btn_cancel  -side right\n    pack  $frm_btn.btn_ok  -side right -padx 10\n    return $frm\n}\n<\/code><\/pre>\n<p>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432\u044b\u0437\u043e\u0432\u0430: \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a, \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0438\u043a\u043e\u043d\u043a\u0438 \u0438\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 (lib\/images.tcl) \u0438 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0438\u043c\u044f \u043e\u043a\u043d\u0430 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e .add). \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0435\u0441\u043b\u0438 \u0431\u0440\u0430\u0442\u044c \u0432\u044b\u0448\u0435\u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0442\u043e \u0432\u044b\u0437\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e:<\/p>\n<pre><code>AddToplevel \"\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430\" server_grey_64<\/code><\/pre>\n<p>\n\u0438\u043b\u0438<\/p>\n<pre><code>AddToplevel \"\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\" cluster_grey_64<\/code><\/pre>\n<p>\n\u041d\u0443 \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0432 \u0441 \u044d\u0442\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u043f\u043e\u043a\u0430\u0436\u0443 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u0432\u043e\u0434\u044f\u0442 \u0434\u0438\u0430\u043b\u043e\u0433\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438\u043b\u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430.<\/p>\n<p><b class=\"spoiler_title\">Add::server<\/b><\/p>\n<pre><code>proc Add::server {} {\n    global default\n    # \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0444\u043e\u0440\u043c\u0443\n    set frm [AddToplevel \"\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430\" server_grey_64]\n    # \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u0442\u043a\u0438 \u0438 \u043f\u043e\u043b\u044f \u0432\u0432\u043e\u0434\u0430 \u043d\u0430 \u044d\u0442\u0443 \u0444\u043e\u0440\u043c\u0443\n    label $frm.lbl_host -text \"\u0410\u0434\u0440\u0435\u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\"\n    entry  $frm.ent_host\n    label $frm.lbl_port -text \"\u041f\u043e\u0440\u0442\"\n    entry $frm.ent_port \n    $frm.ent_port  insert end $default(port)\n    grid $frm.lbl_host -row 0 -column 0 -sticky nw -padx 5 -pady 5\n    grid $frm.ent_host -row 0 -column 1 -sticky nsew -padx 5 -pady 5\n    grid $frm.lbl_port -row 1 -column 0 -sticky nw -padx 5 -pady 5\n    grid $frm.ent_port -row 1 -column 1 -sticky nsew -padx 5 -pady 5\n    grid columnconfigure $frm 0 -weight 1\n    grid rowconfigure $frm 0 -weight 1\n    #set frm_btn [frame .add.frm_btn -border 0]\n    # \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043a\u043d\u043e\u043f\u043a\u0438\n    .add.frm_btn.btn_ok configure -command {\n        set host [SaveMainServer [.add.frm.ent_host get] [.add.frm.ent_port get]]\n        .frm_tree.tree insert {} end -id \"server::$host\" -text \"$host\" -values \"$host\"\n        destroy .add\n        return $host\n    }\n    return $frm\n}<\/code><\/pre>\n<p><b class=\"spoiler_title\">Add::cluster<\/b><\/p>\n<pre><code>proc Add::cluster {tree host values} {\n    global default lifetime_limit expiration_timeout session_fault_tolerance_level\n    global max_memory_size max_memory_time_limit errors_count_threshold security_level\n    global load_balancing_mode kill_problem_processes \n    agent_user agent_pwd cluster_user cluster_pwd auth_agent\n    if {$agent_user ne \"\" &amp;&amp; $agent_pwd ne \"\"} {\n        set auth_agent \"--agent-user=$agent_user --agent-pwd=$agent_pwd\"\n    } else {\n        set auth_agent \"\"\n    }\n    # \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 ()\n    set lifetime_limit $default(lifetime_limit)\n    set expiration_timeout $default(expiration_timeout)\n    set session_fault_tolerance_level $default(session_fault_tolerance_level)\n    set max_memory_size $default(max_memory_size)\n    set max_memory_time_limit $default(max_memory_time_limit)\n    set errors_count_threshold $default(errors_count_threshold)\n    set security_level [lindex $default(security_level) 0]\n    set load_balancing_mode [lindex $default(load_balancing_mode) 0]\n    \n    set frm [AddToplevel \"\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\" cluster_grey_64]\n    \n    label $frm.lbl_host -text \"\u0410\u0434\u0440\u0435\u0441 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430\"\n    entry  $frm.ent_host\n    label $frm.lbl_port -text \"\u041f\u043e\u0440\u0442\"\n    entry $frm.ent_port \n    $frm.ent_port  insert end $default(port)\n    label $frm.lbl_name -text \"\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\"\n    entry  $frm.ent_name\n    label $frm.lbl_secure_connect -text \"\u0417\u0430\u0449\u0438\u0449\u0451\u043d\u043d\u043e\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435\"\n    ttk::combobox $frm.cb_security_level -textvariable security_level -values $default(security_level)\n    label $frm.lbl_expiration_timeout -text \"\u041e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0447\u0435\u0440\u0435\u0437:\"\n    entry  $frm.ent_expiration_timeout -textvariable expiration_timeout\n    label $frm.lbl_session_fault_tolerance_level -text \"\u0423\u0440\u043e\u0432\u0435\u043d\u044c \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u0438\"\n    entry  $frm.ent_session_fault_tolerance_level -textvariable session_fault_tolerance_level\n    label $frm.lbl_load_balancing_mode -text \"\u0420\u0435\u0436\u0438\u043c \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438\"\n    ttk::combobox $frm.cb_load_balancing_mode -textvariable load_balancing_mode \n    -values $default(load_balancing_mode)\n    label $frm.lbl_errors_count_threshold -text \"\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e\u0435 \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043e\u0448\u0438\u0431\u043e\u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0430, %\"\n    entry  $frm.ent_errors_count_threshold -textvariable errors_count_threshold\n    label $frm.lbl_processes -text \"\u0420\u0430\u0431\u043e\u0447\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b:\"\n    label $frm.lbl_lifetime_limit -text \"\u041f\u0435\u0440\u0438\u043e\u0434 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430, \u0441\u0435\u043a.\"\n    entry  $frm.ent_lifetime_limit -textvariable lifetime_limit\n    label $frm.lbl_max_memory_size -text \"\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0439 \u043e\u0431\u044a\u0451\u043c \u043f\u0430\u043c\u044f\u0442\u0438, \u041a\u0411\"\n    entry  $frm.ent_max_memory_size -textvariable max_memory_size\n    label $frm.lbl_max_memory_time_limit -text \"\u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u043f\u0440\u0435\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e\u0433\u043e \u043e\u0431\u044a\u0451\u043c\u0430 \u043f\u0430\u043c\u044f\u0442\u0438, \u0441\u0435\u043a.\"\n    entry  $frm.ent_max_memory_time_limit -textvariable max_memory_time_limit\n    label $frm.lbl_kill_problem_processes -justify left -anchor nw -text \"\u041f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043d\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b\"\n    checkbutton $frm.check_kill_problem_processes -variable kill_problem_processes -onvalue yes -offvalue no    \n    \n    grid $frm.lbl_host -row 0 -column 0 -sticky nw -padx 5 -pady 5\n    grid $frm.ent_host -row 0 -column 1 -sticky nsew -padx 5 -pady 5\n    grid $frm.lbl_port -row 1 -column 0 -sticky nw -padx 5 -pady 5\n    grid $frm.ent_port -row 1 -column 1 -sticky nsew -padx 5 -pady 5\n    grid $frm.lbl_name -row 2 -column 0 -sticky nw -padx 5 -pady 5\n    grid $frm.ent_name -row 2 -column 1 -sticky nsew -padx 5 -pady 5\n    grid $frm.lbl_secure_connect -row 3 -column 0 -sticky nw -padx 5 -pady 5\n    grid $frm.cb_security_level -row 3 -column 1 -sticky nsew -padx 5 -pady 5\n    grid $frm.lbl_expiration_timeout -row 4 -column 0 -sticky nw -padx 5 -pady 5\n    grid $frm.ent_expiration_timeout -row 4 -column 1 -sticky nsew -padx 5 -pady 5\n    grid $frm.lbl_session_fault_tolerance_level -row 5 -column 0 -sticky nw -padx 5 -pady 5\n    grid $frm.ent_session_fault_tolerance_level -row 5 -column 1 -sticky nsew -padx 5 -pady 5\n    grid $frm.lbl_load_balancing_mode -row 6 -column 0 -sticky nw -padx 5 -pady 5\n    grid $frm.cb_load_balancing_mode -row 6 -column 1 -sticky nsew -padx 5 -pady 5\n    grid $frm.lbl_errors_count_threshold -row 7 -column 0 -sticky nw -padx 5 -pady 5\n    grid $frm.ent_errors_count_threshold -row 7 -column 1 -sticky nsew -padx 5 -pady 5\n    grid $frm.lbl_processes -row 8 -column 0 -sticky nw -padx 5 -pady 5\n    grid $frm.lbl_lifetime_limit -row 9 -column 0 -sticky nw -padx 5 -pady 5\n    grid $frm.ent_lifetime_limit -row 9 -column 1 -sticky nsew -padx 5 -pady 5\n    grid $frm.lbl_max_memory_size -row 10 -column 0 -sticky nw -padx 5 -pady 5\n    grid $frm.ent_max_memory_size -row 10 -column 1 -sticky nsew -padx 5 -pady 5\n    grid $frm.lbl_max_memory_time_limit -row 11 -column 0 -sticky nw -padx 5 -pady 5\n    grid $frm.ent_max_memory_time_limit -row 11 -column 1 -sticky nsew -padx 5 -pady 5\n    grid $frm.lbl_kill_problem_processes -row 12 -column 0 -sticky nw -padx 5 -pady 5\n    grid $frm.check_kill_problem_processes -row 12 -column 1 -sticky nw -padx 5 -pady 5\n    # \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\n    .add.frm_btn.btn_ok configure -command {\n        RunCommand \"\" \"cluster insert \n        --host=[.add.frm.ent_host get] \n        --port=[.add.frm.ent_port get] \n        --name=[.add.frm.ent_name get] \n        --expiration-timeout=$expiration_timeout \n        --lifetime-limit=$lifetime_limit \n        --max-memory-size=$max_memory_size \n        --max-memory-time-limit=$max_memory_time_limit \n        --security-level=$security_level \n        --session-fault-tolerance-level=$session_fault_tolerance_level \n        --load-balancing-mode=$load_balancing_mode \n        --errors-count-threshold=$errors_count_threshold \n        --kill-problem-processes=$kill_problem_processes \n        $auth_agent $host\"\n        Run::server $tree $host \"\"\n        destroy .add\n    }\n    return $frm\n}<\/code><\/pre>\n<p>\u041f\u0440\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u043a\u043e\u0434\u0430 \u044d\u0442\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440, \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0432\u0438\u0434\u043d\u0430 \u043d\u0435 \u0432\u043e\u043e\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u043c \u0433\u043b\u0430\u0437\u043e\u043c, \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0437\u0430\u043e\u0441\u0442\u0440\u044e \u043d\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 \u00ab\u041e\u043a\u00bb. \u0412 Tk \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0432\u043e\u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043e\u043f\u0446\u0438\u0438 <i>configure<\/i>. \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0432\u044b\u0432\u043e\u0434\u0430 \u043a\u043d\u043e\u043f\u043a\u0438:<\/p>\n<pre><code>ttk::button $frm_btn.btn_ok -image ok_grey_24 -command { }<\/code><\/pre>\n<p>\n\u041d\u043e \u0430 \u0432 \u043d\u0430\u0448\u0438\u0445 \u0444\u043e\u0440\u043c\u0430\u0445 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438:<\/p>\n<pre><code>  .add.frm_btn.btn_ok configure -command {\n        RunCommand \"\" \"cluster insert \n        --host=[.add.frm.ent_host get] \n        --port=[.add.frm.ent_port get] \n        --name=[.add.frm.ent_name get] \n        --expiration-timeout=$expiration_timeout \n        --lifetime-limit=$lifetime_limit \n        --max-memory-size=$max_memory_size \n        --max-memory-time-limit=$max_memory_time_limit \n        --security-level=$security_level \n        --session-fault-tolerance-level=$session_fault_tolerance_level \n        --load-balancing-mode=$load_balancing_mode \n        --errors-count-threshold=$errors_count_threshold \n        --kill-problem-processes=$kill_problem_processes \n        $auth_agent $host\"\n        Run::server $tree $host \"\"\n        destroy .add\n    }\n<\/code><\/pre>\n<p>\n\u0412 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u043e\u043c \u0432\u044b\u0448\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 \u00ab\u0437\u0430\u0431\u0438\u0442\u00bb \u0437\u0430\u043f\u0443\u0441\u043a \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430.<\/p>\n<p>\u0422\u0443\u0442 \u0441\u0442\u043e\u0438\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0432 Tk \u2014 \u0434\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432\u0432\u043e\u0434\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 (entry, combobox, checkbutton \u0438 \u0442.\u0434.) \u0432\u0432\u0435\u0434\u0451\u043d \u0442\u0430\u043a\u043e\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043a\u0430\u043a \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f (textvariable):<\/p>\n<pre><code>entry  $frm.ent_lifetime_limit -textvariable lifetime_limit<\/code><\/pre>\n<p>\n\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u044d\u0442\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430 \u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u0438\u043c\u0451\u043d \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0432\u0432\u0435\u0434\u0451\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0422.\u0435. \u0434\u0430\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 \u0438\u0437 \u043f\u043e\u043b\u044f \u043d\u0430\u0434\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 (\u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438, \u0447\u0442\u043e \u043e\u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430). <\/p>\n<p>\u0412\u0442\u043e\u0440\u043e\u0439 \u043c\u0435\u0442\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0432\u0432\u0435\u0434\u0451\u043d\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430 (\u0434\u043b\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0442\u0438\u043f\u0430 entry) \u044d\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b get:<\/p>\n<pre><code>.add.frm.ent_name get<\/code><\/pre>\n<p>\n\u041e\u0431\u0430 \u044d\u0442\u0438 \u043c\u0435\u0442\u043e\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432 \u0432\u044b\u0448\u0435\u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u043e\u043c \u043a\u043e\u0434\u0435.<\/p>\n<p>\u041d\u0430\u0436\u0430\u0442\u0438\u0435 \u044d\u0442\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u0438, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 RunCommand \u0441 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u0445 rac:<\/p>\n<pre><code class=\"bash\">\/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<\/code><\/pre>\n<p>\n\u0412\u043e\u0442 \u0438 \u043f\u043e\u0434\u043e\u0448\u043b\u0438 \u043a \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u0435, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c rac \u0441 \u043d\u0443\u0436\u043d\u044b\u043c\u0438 \u043d\u0430\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438, \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442 \u0432\u044b\u0432\u043e\u0434 \u043a\u043e\u043c\u0430\u043d\u0434 \u043d\u0430 \u0441\u043f\u0438\u0441\u043a\u0438 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f:<\/p>\n<p><b class=\"spoiler_title\">RunCommand<\/b><\/p>\n<pre><code>proc RunCommand {root par} {\n    global dir rac_cmd cluster work_list_row_count agent_user agent_pwd cluster_user cluster_pwd\n    puts \"$rac_cmd $par\"\n    set work_list_row_count 0\n    # \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043a\u0430\u043d\u0430\u043b \u0432 \u043d\u0435\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0435\u043c \u0440\u0435\u0436\u0438\u043c\u0435\n    # $rac - \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0441 \u043f\u043e\u043b\u043d\u044b\u043c \u043f\u0443\u0442\u0451\u043c\n    # $par - \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043a\u043b\u044e\u0447\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0438 \u043e\u043f\u0446\u0438\u0438    \n    set pipe [open \"|$rac_cmd $par\" \"r\"]\n    try {\n        set lst \"\"\n        set l \"\"\n        # \u0432\u044b\u0432\u043e\u0434 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u043f\u0438\u0441\u043a\u043e\u0432\n        while {[gets $pipe line]&gt;=0} {\n            #puts $line\n            if {$line eq \"\"} {\n                lappend l $lst\n                set lst \"\"\n            } else {\n                lappend lst [string trim $line]\n            }\n        }\n        close $pipe\n        return $l\n    } on error {result options} {\n        # \u0417\u0430\u043f\u0443\u0441\u043a \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u043e\u0448\u0438\u0431\u043e\u043a\n        ErrorParcing $result $options\n        return \"\"\n    }\n}<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0432\u0432\u043e\u0434\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0432 \u0434\u0435\u0440\u0435\u0432\u043e, \u0437\u0430 \u044d\u0442\u043e, \u0432 \u0432\u044b\u0448\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0435 Add:server, \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code>.frm_tree.tree insert {} end -id \"server::$host\" -text \"$host\" -values \"$host\"<\/code><\/pre>\n<p>\n\u0422\u0435\u043f\u0435\u0440\u044c \u0449\u0435\u043b\u043a\u043d\u0443\u0432 \u043f\u043e \u0438\u043c\u0435\u043d\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0432 \u0434\u0435\u0440\u0435\u0432\u0435, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u043e\u043d\u044b\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c, \u0430 \u0449\u0435\u043b\u043a\u043d\u0443\u0432 \u043d\u0430 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435, \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 (<a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/server\"   title=\"\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"1352\">\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432<\/a>, \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0431\u0430\u0437 \u0438 \u0442.\u0434.). \u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u044d\u0442\u043e \u0432 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0435 TreePress (\u0444\u0430\u0439\u043b lib\/function.tcl):<\/p>\n<pre><code>proc TreePress {tree} {\n   global host server active_cluster infobase\n   # \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\n    set id  [$tree selection]\n   # \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u0435 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435\n    SetGlobalVarFromTreeItems $tree $id\n   # \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043a\u043b\u044e\u0447 \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0442.\u0435. \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0438\u043f \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\n    set values [$tree item $id -values]\n    set key [lindex [split $id \"::\"] 0]\n   # \u0438 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e \u0447\u0442\u043e \u0432\u044b\u0431\u0440\u0430\u043b\u0438 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \n   # \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u0438\u043c\u0451\u043d Run\n    Run::$key $tree $host $values\n}<\/code><\/pre>\n<p>\n\u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0434\u043b\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0441\u044f Run::server (\u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u2014 Run::cluster, \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u2014 Run::work_server \u0438 \u0442.\u0434.). \u0422.\u0435. \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 $key \u044d\u0442\u043e \u0447\u0430\u0441\u0442\u044c \u0438\u043c\u0435\u043d\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0434\u0435\u0440\u0435\u0432\u0430, \u0437\u0430\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u043e\u043f\u0446\u0438\u0435\u0439 <i>-id<\/i>.<\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u043c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443<\/p>\n<p><b class=\"spoiler_title\">Run::server<\/b><\/p>\n<pre><code>proc Run::server {tree host values} {\n    # \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430\n    set lst [RunCommand server::$host \"cluster list $host\"]\n    if {$lst eq \"\"} {return}\n    set l [lindex $lst 0]\n    #puts $lst\n    # \u0443\u0434\u0430\u043b\u044f\u0435\u043c \u043b\u0438\u0448\u043d\u0435\u0435 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430\n    .frm_work.tree_work delete  [ .frm_work.tree_work children {}]\n    # \u0447\u0438\u0442\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a\n    foreach cluster_list $lst {\n        # \u0417\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438\n        InsertItemsWorkList $cluster_list\n        # \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0432\u044b\u0432\u043e\u0434 (\u0441\u043f\u0438\u0441\u043e\u043a) \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0434\u0435\u0440\u0435\u0432\u043e\n        foreach i $cluster_list {\n            #puts $i\n            set cluster_list [split $i \":\"]\n            if  {[string trim [lindex $cluster_list 0]] eq \"cluster\"} {\n                set cluster_id [string trim [lindex $cluster_list 1]]\n                lappend cluster($cluster_id) $cluster_id\n            }\n            if  {[string trim [lindex $cluster_list 0]] eq \"name\"} {\n                lappend  cluster($cluster_id) [string trim [lindex $cluster_list 1]]\n            }\n        }\n    }\n    # \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u044b \u0432 \u0434\u0435\u0440\u0435\u0432\u043e\n    foreach x [array names cluster] {\n        set id [lindex $cluster($x) 0]\n        if { [$tree exists \"cluster::$id\"] == 0 } {\n            $tree insert \"server::$host\" end -id \"cluster::$id\" -text \"[lindex $cluster($x) 1]\" -values \"$id\"\n            # \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\n            InsertClusterItems $tree $id\n        }\n    }\n    if { [$tree exists \"agent_admins::$id\"] == 0 } {\n        $tree insert \"server::$host\" end -id \"agent_admins::$id\" -text \"\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u044b\" -values \"$id\"\n        #InsertClusterItems $tree $id\n    }\n}<\/code><\/pre>\n<p>\u0414\u0430\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0442\u043e, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043e \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 RunCommand, \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u0441\u044f\u043a\u043e\u0435-\u0440\u0430\u0437\u043d\u043e\u0435 \u0432 \u0434\u0435\u0440\u0435\u0432\u043e \u2014 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u044b, \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043a\u043e\u0440\u043d\u0435\u0432\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b (\u0431\u0430\u0437\u044b, \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u044b, \u0441\u0435\u0430\u043d\u0441\u044b \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435). \u0415\u0441\u043b\u0438 \u043f\u0440\u0438\u0433\u043b\u044f\u0434\u0435\u0442\u044c\u0441\u044f, \u0442\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c \u0432\u044b\u0437\u043e\u0432 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b InsertItemsWorkList. \u041e\u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044f \u0432\u044b\u0432\u043e\u0434 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0439 \u0443\u0442\u0438\u043b\u0438\u0442\u044b rac, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u043d\u0435\u0435 \u0431\u044b\u043b \u0432 \u0432\u0438\u0434\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e $lst. \u042d\u0442\u043e \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u043f\u0438\u0441\u043a\u043e\u0432, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u043f\u0430\u0440\u044b \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0435 \u0434\u0432\u043e\u0435\u0442\u043e\u0447\u0438\u0435\u043c. <\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430:<\/p>\n<pre><code>svk@svk ~]$ \/opt\/1C\/v8.3\/x86_64\/rac connection list --cluster=783d2170-56c3-11e8-c586-fc75165efbb2 localhost:1545\nconnection     : dcf5991c-7d24-11e8-1690-fc75165efbb2\nconn-id        : 0\nhost           : svk.home\nprocess        : 79de2e16-56c3-11e8-c586-fc75165efbb2\ninfobase       : 00000000-0000-0000-0000-000000000000\napplication    : \"JobScheduler\"\nconnected-at   : 2018-07-01T14:49:51\nsession-number : 0\nblocked-by-ls  : 0\n\nconnection     : b993293a-7d24-11e8-1690-fc75165efbb2\nconn-id        : 0\nhost           : svk.home\nprocess        : 79de2e16-56c3-11e8-c586-fc75165efbb2\ninfobase       : 00000000-0000-0000-0000-000000000000\napplication    : \"JobScheduler\"\nconnected-at   : 2018-07-01T14:48:52\nsession-number : 0\nblocked-by-ls  : 0\n<\/code><\/pre>\n<p>\n\u0412 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0432\u0438\u0434\u0435 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/nuk-svk.ru\/wp-content\/uploads\/2018\/07\/rac_gui_4.png\"><img decoding=\"async\" alt=\"\u041f\u0438\u0448\u0435\u043c GUI \u043a 1\u0421 RAC, \u0438\u043b\u0438 \u0441\u043d\u043e\u0432\u0430 \u043e Tcl\/Tk\" src=\"\/wp-content\/uploads\/2019\/08\/4153a3613539dc7821274a2bedaabf47.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>\u0412\u044b\u0448\u0435\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442 \u043d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b:<\/p>\n<p><b class=\"spoiler_title\">InsertItemsWorkList<\/b><\/p>\n<pre><code>proc InsertItemsWorkList {lst} {\n    global work_list_row_count\n    # \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0447\u0435\u0440\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0446\u0432\u0435\u0442\u0430 \u0434\u043b\u044f \u0441\u0442\u0440\u043e\u043a\u0438\n    if [expr $work_list_row_count % 2] {\n        set tag dark\n    } else {\n        set tag light\n    }\n    # \u0440\u0430\u0437\u0431\u043e\u0440 \u0441\u0442\u0440\u043e\u043a \u043d\u0430 \u043f\u0430\u0440\u044b \u043a\u043b\u044e\u0447 - \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\n    foreach i $lst {\n        if [regexp -nocase -all -- {(D+)(s*?|)(:)(s*?|)(.*)} $i match param v2 v3 v4 value] {\n            lappend column_list [string trim $param]\n            lappend value_list [string trim $value]\n        }\n    }\n     # \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b\n    .frm_work.tree_work configure -columns $column_list -displaycolumns $column_list\n    .frm_work.tree_work insert {} end  -values $value_list -tags $tag\n    .frm_work.tree_work column #0 -stretch\n    # \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432\n    foreach j $column_list {\n        .frm_work.tree_work heading $j -text $j\n    }\n    incr work_list_row_count\n}<\/code><\/pre>\n<p>\u0422\u0443\u0442 \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b [split $str &#171;:&#187;], \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 \u043d\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 &#171;:&#187; \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a, \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u043e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0442\u0430\u043a\u0436\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0434\u0432\u043e\u0435\u0442\u043e\u0447\u0438\u0435.<\/p>\n<p>\u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 InsertClusterItems (\u043e\u0434\u043d\u0430 \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445) \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0432 \u0434\u0435\u0440\u0435\u0432\u043e \u043a \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u043c\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443 cluster \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430\u043c\u0438<br \/>\n<b class=\"spoiler_title\">InsertClusterItems<\/b><\/p>\n<pre><code>proc InsertClusterItems {tree id} {\n    set parent \"cluster::$id\"\n    $tree insert $parent end -id \"infobases::$id\" -text \"\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0431\u0430\u0437\u044b\" -values \"$id\"\n    $tree insert $parent end -id \"servers::$id\" -text \"\u0420\u0430\u0431\u043e\u0447\u0438\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" -values \"$id\"\n    $tree insert $parent end -id \"admins::$id\" -text \"\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u044b\" -values \"$id\"\n    $tree insert $parent end -id \"managers::$id\" -text \"\u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u044b \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\" -values $id\n    $tree insert $parent end -id \"processes::$id\" -text \"\u0420\u0430\u0431\u043e\u0447\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b\" -values \"workprocess-all\"\n    $tree insert $parent end -id \"sessions::$id\" -text \"\u0421\u0435\u0430\u043d\u0441\u044b\" -values \"sessions-all\"\n    $tree insert $parent end -id \"locks::$id\" -text \"\u0411\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438\" -values \"blocks-all\"\n    $tree insert $parent end -id \"connections::$id\" -text \"\u0421\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f\" -values \"connections-all\"\n    $tree insert $parent end -id \"profiles::$id\" -text \"\u041f\u0440\u043e\u0444\u0438\u043b\u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438\" -values $id\n}\n<\/code><\/pre>\n<p>\u041c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0435\u0449\u0451 \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b, \u0433\u0434\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e \u0432\u0438\u0434\u043d\u043e \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0445\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434:<\/p>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0440\u0435\u0448\u0435\u043d\u044b \u0432 \u043b\u043e\u0431:<\/p>\n<p><b class=\"spoiler_title\">InsertBaseItems<\/b><\/p>\n<pre><code>proc InsertBaseItems {tree id} {\n    set parent \"infobase::$id\"\n    if { [$tree exists \"sessions::$id\"] == 0 } {\n        $tree insert $parent end -id \"sessions::$id\" -text \"\u0421\u0435\u0430\u043d\u0441\u044b\" -values \"$id\"\n    }\n    if { [$tree exists \"locks::$id\"] == 0 } {\n        $tree insert $parent end -id \"locks::$id\" -text \"\u0411\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438\" -values \"$id\"\n    }\n    if { [$tree exists \"connections::$id\"] == 0 } {\n        $tree insert $parent end -id \"connections::$id\" -text \"\u0421\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f\" -values \"$id\"\n    }\n}\n<\/code><\/pre>\n<p>\u0410 \u0442\u0443\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439:<\/p>\n<p><b class=\"spoiler_title\">InsertProfileItems<\/b><\/p>\n<pre><code>proc InsertProfileItems {tree id} {\n    set parent \"profile::$id\"\n    set lst {\n        {dir \"\u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0438\"}\n        {com \"\u0420\u0430\u0437\u0440\u0435\u0448\u0451\u043d\u043d\u044b\u0435 COM-\u043a\u043b\u0430\u0441\u0441\u044b\"}\n        {addin \"\u0412\u043d\u0435\u0448\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b\"}\n        {module \"\u0412\u043d\u0435\u0448\u043d\u0438\u0435 \u043e\u0442\u0447\u0451\u0442\u044b \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438\"}\n        {app \"\u0420\u0430\u0437\u0440\u0435\u0448\u0451\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\"}\n        {inet \"\u0420\u0435\u0441\u0443\u0440\u0441\u044b \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\"}\n    }\n    foreach i $lst {\n        append item [lindex $i 0] \"::$id\"\n        if { [$tree exists $item] == 0 } {\n            $tree insert $parent end -id $item -text [lindex $i 1] -values \"$id\"\n        }\n        unset item \n    }\n}<\/code><\/pre>\n<p>\u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u0432 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0446\u0438\u043a\u043b\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0430\u044f\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 (\u043a\u043e\u043c\u0430\u043d\u0434\u044b). \u041a\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u2014 \u044d\u0442\u043e \u0443\u0436\u0435 \u043d\u0430 \u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430.<\/p>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438, \u0441\u0430\u043c\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438. \u0422\u0430\u043a \u043a\u0430\u043a, \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c, \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b (\u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0431\u0430\u0437\u0430) \u0442\u043e \u0438 \u0434\u0438\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u0435 \u0444\u043e\u0440\u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435. \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0432\u044b\u0437\u043e\u0432\u0430 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440 \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<p><i>Add::$key-&gt;AddToplevel<\/i><\/p>\n<p>\u0410 \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0430\u043a:<\/p>\n<p><i>Edit::$key-&gt;Add::$key-&gt;AddTopLevel<\/i><\/p>\n<p>\u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432\u043e\u0437\u044c\u043c\u0451\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430, \u0442.\u0435. \u0449\u0435\u043b\u043a\u043d\u0443\u0432 \u0432 \u0434\u0435\u0440\u0435\u0432\u0435 \u043d\u0430 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430, \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u043c \u043a\u043d\u043e\u043f\u043a\u0443 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043f\u0430\u043d\u0435\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 (\u043a\u0430\u0440\u0430\u043d\u0434\u0430\u0448\u0438\u043a) \u0438 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u0435\u0434\u0435\u043d\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u0444\u043e\u0440\u043c\u0430:<\/p>\n<p><img decoding=\"async\" alt=\"\u041f\u0438\u0448\u0435\u043c GUI \u043a 1\u0421 RAC, \u0438\u043b\u0438 \u0441\u043d\u043e\u0432\u0430 \u043e Tcl\/Tk\" src=\"\/wp-content\/uploads\/2019\/08\/788ba4b324b246130e9a4702796069e3.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b class=\"spoiler_title\">Edit::cluster<\/b><\/p>\n<pre><code>proc Edit::cluster {tree host values} {\n    global default lifetime_limit expiration_timeout session_fault_tolerance_level\n    global max_memory_size max_memory_time_limit errors_count_threshold security_level\n    global load_balancing_mode kill_problem_processes active_cluster \n    agent_user agent_pwd cluster_user cluster_pwd auth\n    if {$cluster_user ne \"\" &amp;&amp; $cluster_pwd ne \"\"} {\n        set auth \"--cluster-user=$cluster_user --cluster-pwd=$cluster_pwd\"\n    } else {\n        set auth \"\"\n    }\n    # \u0440\u0438\u0441\u0443\u0435\u043c \u0444\u043e\u0440\u043c\u0443 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\n    set frm [Add::cluster $tree $host $values]\n    # \u043c\u0435\u043d\u044f\u0435\u043c \u0442\u0435\u043a\u0441\u0442 \u043d\u0430 \u043c\u0435\u0442\u043a\u0435\n    $frm configure -text \"\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\"\n    \n    set active_cluster $values\n    # \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0443\n    set lst [RunCommand cluster::$values \"cluster info --cluster=$active_cluster $host\"]\n    # \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043f\u043e\u043b\u044f\n    FormFieldsDataInsert $frm $lst\n    # \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043f\u043e\u043b\u044f, \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043e\n    $frm.ent_host configure -state disable\n    $frm.ent_port configure -state disable\n    # \u043f\u0435\u0440\u0435\u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\n    .add.frm_btn.btn_ok configure -command {\n        RunCommand \"\" \"cluster update \n        --cluster=$active_cluster $auth \n        --name=[.add.frm.ent_name get] \n        --expiration-timeout=$expiration_timeout \n        --lifetime-limit=$lifetime_limit \n        --max-memory-size=$max_memory_size \n        --max-memory-time-limit=$max_memory_time_limit \n        --security-level=$security_level \n        --session-fault-tolerance-level=$session_fault_tolerance_level \n        --load-balancing-mode=$load_balancing_mode \n        --errors-count-threshold=$errors_count_threshold \n        --kill-problem-processes=$kill_problem_processes \n        $auth $host\"\n        $tree delete \"cluster::$active_cluster\"\n        Run::server $tree $host \"\"\n        destroy .add\n    }\n}<\/code><\/pre>\n<p>\u041f\u043e \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c \u0432 \u043a\u043e\u0434\u0435, \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u0432\u0441\u0451 \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043a\u043e\u0434 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u043a\u043d\u043e\u043f\u043a\u0438 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d \u0438 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 FormFieldsDataInsert, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u043e\u043b\u044f \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435:<\/p>\n<p><b class=\"spoiler_title\">FormFieldsDataInsert<\/b><\/p>\n<pre><code>proc FormFieldsDataInsert {frm lst} {\n    foreach i [lindex $lst 0] {\n        # \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439\n        if [regexp -nocase -all -- {(D+)(s*?|)(:)(s*?|)(.*)} $i match param v2 v3 v4 value] {\n            # \u043c\u0435\u043d\u044f\u0435\u043c \u0441\u0438\u043c\u0432\u043e\u043b\u044b\n            regsub -all -- \"-\" [string trim $param] \"_\" entry_name\n            # \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u043c\u0438\n            if [winfo exists $frm.ent_$entry_name] {\n                $frm.ent_$entry_name delete 0 end\n                $frm.ent_$entry_name insert end [string trim $value \"\"\"]\n            }\n            if [winfo exists $frm.cb_$entry_name] {\n                global $entry_name\n                set $entry_name [string trim $value \"\"\"]\n            }\n            # \u0434\u043b\u044f \u0447\u0435\u043a\u0431\u043e\u043a\u0441\u043e\u0432 \u043c\u0435\u043d\u044f\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\n            if [winfo exists $frm.check_$entry_name] {\n                global $entry_name\n                if {$value eq \"0\"} {\n                    set $entry_name no\n                } elseif {$value eq \"1\"} {\n                    set $entry_name yes\n                } else {\n                    set $entry_name $value\n                }\n            }\n        }\n    }\n}\n<\/code><\/pre>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0435 \u0432\u0441\u043f\u043b\u044b\u043b \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u043f\u043b\u044e\u0441 tcl \u2014 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u043c\u0451\u043d \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445. \u0422.\u0435. \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0444\u043e\u0440\u043c \u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439 \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u043a\u043b\u044e\u0447\u0430\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u044b rac \u0438 \u043d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432\u044b\u0432\u043e\u0434\u0430 \u043a\u043e\u043c\u0430\u043d\u0434 \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u2014 \u0442\u0438\u0440\u0435 \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u043e \u043d\u0430 \u043f\u043e\u0434\u0447\u0435\u0440\u043a. \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443 <i> scheduled-jobs-deny<\/i> \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u043e\u043b\u044e <i>ent_scheduled_jobs_deny<\/i> \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <i>scheduled_jobs_deny<\/i>.<\/p>\n<p>\u0424\u043e\u0440\u043c\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u0441\u043e\u0441\u0442\u0430\u0432\u043e\u043c \u043f\u043e\u043b\u0435\u0439, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0431\u0430\u0437\u043e\u0439:<\/p>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0418\u0411<\/p>\n<p><img decoding=\"async\" alt=\"\u041f\u0438\u0448\u0435\u043c GUI \u043a 1\u0421 RAC, \u0438\u043b\u0438 \u0441\u043d\u043e\u0432\u0430 \u043e Tcl\/Tk\" src=\"\/wp-content\/uploads\/2019\/08\/fcfd5cfc9a3d27650e2694375b7f10ee.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0418\u0411<\/p>\n<p><img decoding=\"async\" alt=\"\u041f\u0438\u0448\u0435\u043c GUI \u043a 1\u0421 RAC, \u0438\u043b\u0438 \u0441\u043d\u043e\u0432\u0430 \u043e Tcl\/Tk\" src=\"\/wp-content\/uploads\/2019\/08\/6748cd7e59663e46f9853def2df48950.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u0412 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Edit::infobase \u043d\u0430 \u0444\u043e\u0440\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0435 \u043f\u043e\u043b\u044f, \u043a\u043e\u0434 \u043e\u0431\u044a\u0451\u043c\u043d\u044b\u0439 \u043f\u043e\u0441\u0435\u043c\u0443 \u0442\u0443\u0442 \u043d\u0435 \u043f\u0440\u0438\u0432\u043e\u0436\u0443.<\/p>\n<p>\u041f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0438 \u0434\u043b\u044f \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430 \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442 \u043d\u0435\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432, \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432, \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0431\u0430\u0437 \u0438 \u0442.\u043f., \u0442\u043e \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043a \u043a\u0430\u043a\u043e\u043c\u0443 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0443 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a\u0430\u043a\u043e\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438\u043b\u0438 \u0418\u0411, \u0432\u0432\u0435\u0434\u0435\u043d\u044b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0449\u0435\u043b\u0447\u043a\u0435 \u043f\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c \u0434\u0435\u0440\u0435\u0432\u0430. \u0422.\u0435. \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u043f\u0440\u043e\u0431\u0435\u0433\u0430\u0435\u0442 \u043f\u043e \u0432\u0441\u0435\u043c \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c \u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435:<\/p>\n<p><b class=\"spoiler_title\">SetGlobalVarFromTreeItems<\/b><\/p>\n<pre><code>proc SetGlobalVarFromTreeItems {tree id} {\n    global host server active_cluster infobase\n    set parent [$tree parent $id]\n    set values [$tree item $id -values]\n    set key [lindex [split $id \"::\"] 0]\n    switch -- $key {\n        server {set host $values}\n        work_server {set server $values}\n        cluster {set active_cluster $values}\n        infobase {set infobase $values}\n    }\n    if {$parent eq \"\"} {\n        return\n    } else {\n        SetGlobalVarFromTreeItems $tree $parent\n    }\n}\n<\/code><\/pre>\n<p>\u041a\u043b\u0430\u0441\u0442\u0435\u0440 1\u0421 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u043a\u0430\u043a \u0441 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0442\u0430\u043a \u0438 \u0431\u0435\u0437. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0432\u0430 \u0432\u0438\u0434\u0430 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u2014 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440 \u0430\u0433\u0435\u043d\u0442\u0430 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0438 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u0432\u0435\u0434\u0435\u043d\u044b \u0435\u0449\u0451 4 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0445 \u043b\u043e\u0433\u0438\u043d \u0438 \u043f\u0430\u0440\u043e\u043b\u044c \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430. \u0422.\u0435. \u0435\u0441\u043b\u0438 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0443\u0447\u0451\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430, \u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u0435\u0434\u0435\u043d \u0434\u0438\u0430\u043b\u043e\u0433 \u0434\u043b\u044f \u0432\u0432\u043e\u0434\u0430 \u043b\u043e\u0433\u0438\u043d\u0430 \u0438 \u043f\u0430\u0440\u043e\u043b\u044f, \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u044f\u0442\u0441\u044f \u0432 \u043a\u0430\u0436\u0434\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0434\u043b\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430.<\/p>\n<p>\u0417\u0430 \u044d\u0442\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043e\u0448\u0438\u0431\u043e\u043a<\/p>\n<p><b class=\"spoiler_title\">ErrorParcing<\/b><\/p>\n<pre><code>proc ErrorParcing {err opt} {\n    global cluster_user cluster_pwd agent_user agent_pwd\n        switch -regexp -- $err {\n        \"Cluster administrator is not authenticated\" {\n            AuthorisationDialog \"\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\"\n            .auth_win.frm_btn.btn_ok configure -command {\n                set cluster_user [.auth_win.frm.ent_name get]\n                set cluster_pwd [.auth_win.frm.ent_pwd get]\n                destroy .auth_win\n            }\n            #RunCommand $root $par\n        }\n        \"Central server administrator is not authenticated\" {\n            AuthorisationDialog \"\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440 \u0430\u0433\u0435\u043d\u0442\u0430 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\"\n            .auth_win.frm_btn.btn_ok configure -command {\n                set agent_user [.auth_win.frm.ent_name get]\n                set agent_pwd [.auth_win.frm.ent_pwd get]\n                destroy .auth_win\n            }\n        }\n        \"\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u043d\u0435 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\" {\n            AuthorisationDialog \"\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\"\n            .auth_win.frm_btn.btn_ok configure -command {\n                set cluster_user [.auth_win.frm.ent_name get]\n                set cluster_pwd [.auth_win.frm.ent_pwd get]\n                destroy .auth_win\n            }\n            #RunCommand $root $par\n        }\n        \"\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043d\u0435 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\" {\n            AuthorisationDialog \"\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440 \u0430\u0433\u0435\u043d\u0442\u0430 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\"\n            .auth_win.frm_btn.btn_ok configure -command {\n                set agent_user [.auth_win.frm.ent_name get]\n                set agent_pwd [.auth_win.frm.ent_pwd get]\n                destroy .auth_win\n            }\n        }\n        (.+) {\n            tk_messageBox -type ok -icon error -message \"$err\"\n        }\n    }\n}<\/code><\/pre>\n<p>\u0422.\u0435. \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0430, \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0438 \u0440\u0435\u0430\u043a\u0446\u0438\u044f.<\/p>\n<p>\u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043e\u0432 \u044d\u0434\u0430\u043a \u043d\u0430 95, \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u043f\u0440\u043e\u0444\u0438\u043b\u044f\u043c\u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u043d\u0443 \u0438 \u043e\u0442\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c =). \u041d\u0430 \u044d\u0442\u043e\u043c \u0432\u0441\u0451. \u041f\u0440\u043e\u0448\u0443 \u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0437\u0430 \u0441\u043a\u043e\u043c\u043a\u0430\u043d\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435. <\/p>\n<p>\u041a\u043e\u0434, \u043f\u043e \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d <noindex><a rel=\"nofollow\" href=\"https:\/\/bitbucket.org\/svk28\/rac-gui\">\u0442\u0443\u0442<\/a><\/noindex>.<\/p>\n<p>\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435: \u0414\u043e\u0434\u0435\u043b\u0430\u043b \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u043f\u0440\u043e\u0444\u0438\u043b\u044f\u043c\u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438. \u0422\u0435\u043f\u0435\u0440\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u043d\u0430 100%.<\/p>\n<p>\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 2: \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u0439 \u0438 \u0440\u0443\u0441\u0441\u043a\u0438\u0439, \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430 \u0432 win7<br \/>\n<img decoding=\"async\" alt=\"\u041f\u0438\u0448\u0435\u043c GUI \u043a 1\u0421 RAC, \u0438\u043b\u0438 \u0441\u043d\u043e\u0432\u0430 \u043e Tcl\/Tk\" src=\"\/wp-content\/uploads\/2019\/08\/8c91cdcb5ac5de4241b5b178fb075c6e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/415835\/\">habr.com<\/a><\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u043e \u043c\u0435\u0440\u0435 \u0432\u043d\u0438\u043a\u0430\u043d\u0438\u044f \u0432 \u0442\u0435\u043c\u0443 \u0440\u0430\u0431\u043e\u0442\u044b 1\u0421-\u043e\u0432\u0441\u043a\u0438\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432 \u0432 \u0441\u0440\u0435\u0434\u0435 linux, \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0441\u044f \u043e\u0434\u0438\u043d \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a \u2014 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0443\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 1\u0421. \u0418 \u0440\u0435\u0448\u0435\u043d\u043e \u0431\u044b\u043b\u043e \u044d\u0442\u043e\u0442 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c, \u043f\u0443\u0442\u0451\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f GUI \u0434\u043b\u044f \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0439 \u0443\u0442\u0438\u043b\u0438\u0442\u044b rac. \u042f\u0437\u044b\u043a\u043e\u043c \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0431\u044b\u043b \u0432\u044b\u0431\u0440\u0430\u043d tcl\/tk \u043a\u0430\u043a, \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438. \u0418 \u0432\u043e\u0442, [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":28053,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-37390","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u043e \u043c\u0435\u0440\u0435 \u0432\u043d\u0438\u043a\u0430\u043d\u0438\u044f \u0432 \u0442\u0435\u043c\u0443 \u0440\u0430\u0431\u043e\u0442\u044b 1\u0421-\u043e\u0432\u0441\u043a\u0438\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432 \u0432 \u0441\u0440\u0435\u0434\u0435 linux, \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0441\u044f \u043e\u0434\u0438\u043d \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a \u2014 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0443\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 1\u0421. \u0418 \u0440\u0435\u0448\u0435\u043d\u043e \u0431\u044b\u043b\u043e \u044d\u0442\u043e\u0442 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c, \u043f\u0443\u0442\u0451\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f GUI \u0434\u043b\u044f \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0439 \u0443\u0442\u0438\u043b\u0438\u0442\u044b rac. \u042f\u0437\u044b\u043a\u043e\u043c \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0431\u044b\u043b \u0432\u044b\u0431\u0440\u0430\u043d tcl\/tk \u043a\u0430\u043a, \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438. \u0418 \u0432\u043e\u0442,\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/pishem-gui-k-1s-rac-ili-snova-o-tcl-tk\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041f\u0438\u0448\u0435\u043c GUI \u043a 1\u0421 RAC, \u0438\u043b\u0438 \u0441\u043d\u043e\u0432\u0430 \u043e Tcl\/Tk | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u043e \u043c\u0435\u0440\u0435 \u0432\u043d\u0438\u043a\u0430\u043d\u0438\u044f \u0432 \u0442\u0435\u043c\u0443 \u0440\u0430\u0431\u043e\u0442\u044b 1\u0421-\u043e\u0432\u0441\u043a\u0438\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432 \u0432 \u0441\u0440\u0435\u0434\u0435 linux, \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0441\u044f \u043e\u0434\u0438\u043d \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a \u2014 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0443\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 1\u0421. \u0418 \u0440\u0435\u0448\u0435\u043d\u043e \u0431\u044b\u043b\u043e \u044d\u0442\u043e\u0442 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c, \u043f\u0443\u0442\u0451\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f GUI \u0434\u043b\u044f \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0439 \u0443\u0442\u0438\u043b\u0438\u0442\u044b rac. \u042f\u0437\u044b\u043a\u043e\u043c \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0431\u044b\u043b \u0432\u044b\u0431\u0440\u0430\u043d tcl\/tk \u043a\u0430\u043a, \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438. \u0418 \u0432\u043e\u0442,\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/pishem-gui-k-1s-rac-ili-snova-o-tcl-tk\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:17:21+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:17:21+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47 Erstellen einer GUI f\u00fcr 1C RAC, oder wieder \u00fcber Tcl\/Tk | ProHoster","description":"Beim Einarbeiten in die Welt der 1C-Produkte unter Linux wurde ein Mangel entdeckt \u2013 es fehlt an einem benutzerfreundlichen, plattform\u00fcbergreifenden Tool zur Verwaltung eines 1C-Serverclusters. Daher wurde entschieden, diesen Mangel durch die Erstellung einer GUI f\u00fcr das Konsolen-Tool rac zu beheben. Als Programmiersprache wurde Tcl\/Tk gew\u00e4hlt, da sie meiner Meinung nach f\u00fcr diese Aufgabe am besten geeignet ist. Und hier ist es:","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/pishem-gui-k-1s-rac-ili-snova-o-tcl-tk","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041f\u0438\u0448\u0435\u043c GUI \u043a 1\u0421 RAC, \u0438\u043b\u0438 \u0441\u043d\u043e\u0432\u0430 \u043e Tcl\/Tk | ProHoster","og:description":"\u041f\u043e \u043c\u0435\u0440\u0435 \u0432\u043d\u0438\u043a\u0430\u043d\u0438\u044f \u0432 \u0442\u0435\u043c\u0443 \u0440\u0430\u0431\u043e\u0442\u044b 1\u0421-\u043e\u0432\u0441\u043a\u0438\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432 \u0432 \u0441\u0440\u0435\u0434\u0435 linux, \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0441\u044f \u043e\u0434\u0438\u043d \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a \u2014 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0443\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 1\u0421. \u0418 \u0440\u0435\u0448\u0435\u043d\u043e \u0431\u044b\u043b\u043e \u044d\u0442\u043e\u0442 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c, \u043f\u0443\u0442\u0451\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f GUI \u0434\u043b\u044f \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0439 \u0443\u0442\u0438\u043b\u0438\u0442\u044b rac. \u042f\u0437\u044b\u043a\u043e\u043c \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0431\u044b\u043b \u0432\u044b\u0431\u0440\u0430\u043d tcl\/tk \u043a\u0430\u043a, \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438. \u0418 \u0432\u043e\u0442,","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/pishem-gui-k-1s-rac-ili-snova-o-tcl-tk","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:17:21+00:00","article:modified_time":"2019-10-31T19:17:21+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"37390","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-02-09 17:59:22","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:27:26","updated":"2026-02-09 17:59:22"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/37390","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=37390"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/37390\/revisions"}],"predecessor-version":[{"id":158596,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/37390\/revisions\/158596"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/28053"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=37390"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=37390"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=37390"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}