Artifact 590c4bf86170dc25283639c2baa9992451dc97cf:
- File epf/epfloader.js — part of check-in [34c07e0802] at 2012-12-29 13:26:13 on branch trunk — Добавил макрос Перезагрузить все 1С-скрипты (user: artbear size: 2363)
$engine JScript $uname v8Epf $dname Обработки 1С $addin stdlib EpfLoader = new (stdlib.Class.extend({ construct : function() { this.v8 = new ActiveXObject("V82.Application"); this.v8.Connect('File="' + this.getIbPath() + '";'); var libs = v8New('Structure'); libs.Insert('СтандартнаяБиблиотека', stdlib); this.v8.Init(Designer, libs); this.loadAllEpf(); events.connect(Designer, "beforeExitApp", this, 'destruct'); }, destruct: function() { this.unloadAllEpf(); delete this.v8; delete this.macroses; }, getIbPath : function() { return this.getEpfRootPath() + "\\ib"; }, getEpfRootPath : function() { return stdlib.getSnegopatMainFolder() + "scripts\\epf"; }, loadAllEpf: function() { var fso = new ActiveXObject("Scripting.FileSystemObject"); var re_epf = /\.epf$/i; (function (loader, root) { var folder = fso.GetFolder(root); var folders = new Enumerator(folder.SubFolders); for (; !folders.atEnd(); folders.moveNext()) { arguments.callee(loader, folders.item().Path); } var files = new Enumerator(folder.Files); for (; !files.atEnd(); files.moveNext()) { var file = files.item(); if (re_epf.test(file.Name)) { loader.loadEpf(file.Path); } } })(this, this.getEpfRootPath()); }, loadEpf: function(path) { this.macroses = new Array(); var epf = this.v8.LoadEpf(path); if (epf) { var epfName = epf.Metadata().Name; var macroses = this.v8.GetMacroses(epf); for (var i=0; i<macroses.Count(); i++) {//макрос this.addEpfMacros(epf, epfName, macroses.Get(i)); } } }, addEpfMacros: function(epf, epfName, macroName) { var name = 'macros' + epfName + '->' + macroName.substr(6); SelfScript.self[name] = function() { var _epf = epf; // Catch it into closure! eval('_epf.' + macroName + '();'); }; this.macroses.push(name); }, unloadAllEpf: function () { for (var i=0; i<this.macroses.length; i++) { delete SelfScript.self[this.macroses[i]]; } }, getEpf: function (epfName) { return this.v8.GetEpf(epfName); } })); SelfScript.Self['macrosПерезагрузить все 1С-скрипты'] = function () { EpfLoader.unloadAllEpf(); EpfLoader.loadAllEpf(); }