<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; JS: по 1С скрипт 2014 года: Локальный кэш 1С 8.2 показать.js]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=18245</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=18245&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «JS: по 1С скрипт 2014 года: Локальный кэш 1С 8.2 показать.js».]]></description>
		<lastBuildDate>Sun, 07 Jul 2024 19:42:21 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[JS: по 1С скрипт 2014 года: Локальный кэш 1С 8.2 показать.js]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=161237#p161237</link>
			<description><![CDATA[<p>Не знаю, как сейчас, но когда лет десять назад я некоторое время работал с 1С:Предприятием 8.2, очистка локального кэша при проблемах с базой была иногда актуальна. Конечно, был, вроде, ключик командной строки, но не всегда он срабатывал как надо, насколько помню. Поэтому пользовался тогда старыми своим скриптом (который привожу здесь), чтобы &quot;почистить&quot; локальный кэш в некоторых случаях. Скрипт привожу для иллюстрации некоторых приёмов работы на JScript (WSH). По 1С не работаю давно уже, поэтому не знаю, насколько он может быть работоспособен и актуален теперь.<br /></p><div class="codebox"><pre><code>//  Скрипт для всех баз 1С:Предприятия 8.2, имеющихся в окне запуска, строит дерево ссылок на локальный кэш.
var FSO = new ActiveXObject(&quot;Scripting.FileSystemObject&quot;);
var ForReading = 1, ForWriting = 2, ForAppending = 8;
var Shell = new ActiveXObject(&quot;Shell.Application&quot;);
var WshShell = new ActiveXObject(&quot;WScript.Shell&quot;);
var localAppdata = getTree(FSO.BuildPath(Shell.Namespace(&quot;shell:Local AppData&quot;).Self.Path, &quot;1C&quot;));
var configurations = [], appdata = getTree(FSO.BuildPath(Shell.Namespace(&quot;shell:AppData&quot;).Self.Path, &quot;1C&quot;));
var userName = new ActiveXObject(&quot;WScript.Network&quot;).userName;

if(!WScript.Arguments.Named.Exists(&quot;explicitly&quot;)){
    // Сначала добавим общие информационные базы
    var s, cfg = findEntries(appdata, /\\1CEStart\.cfg$/i);
    for (var i=0; i&lt;cfg.length; i++) {
        if(FSO.FileExists(cfg[i]))
            with(FSO.OpenTextFile(cfg[i], ForReading, false, -1))
                while(!AtEndOfStream)
                    if(/^CommonInfoBases=(.*)$/i.test(s=ReadLine()))
                        if(FSO.FileExists(s=RegExp.$1))configurations = configurations.concat(readBases(s));
    }
    // Теперь базы текущего пользователя
    var ibases = findEntries(appdata, /\\ibases\.v8i$/i);
    for (var i=0; i&lt;ibases.length; i++)configurations = configurations.concat(readBases(ibases[i]));
}
// Теперь обработаем безымянные параметры командной строки
Args = WScript.Arguments.Unnamed
for (var i=0; i&lt;Args.length; i++) {
    Arg = Args.Item(i)
    if(FSO.GetExtensionName(Arg) == &quot;v8i&quot; &amp;&amp; FSO.FileExists(Arg))
        configurations = configurations.concat(readBases(Arg));
}

configurations = configurations.sort(function(a, b){return a.folder==b.folder?0:a.folder&lt;b.folder?-1:1})

var trees = [makeTree(localAppdata), makeTree(appdata)]

for (var i=0; i&lt;trees.length; i++) {
    WshShell.Run(&quot;explorer &quot; + trees[i]);
}

WScript.Sleep(2000);
WshShell.Popup(&quot;Построение дерева завершено.&quot;, 2, WScript.ScriptName, 64);

function readBases(filename){
    with(new ActiveXObject(&quot;ADODB.Stream&quot;)){Type=2;Mode=3;Open();Charset=&quot;UTF-8&quot;;LoadFromFile(filename);
        Position=3;var lines=ReadText().split(&quot;\r\n&quot;);Close();
    }
    for (var i=0, data=[]; i&lt;lines.length; i++) {
        if(/^\[([^]]+)\]$/.test(line=lines[i])){
            var element = new String(RegExp.$1);
            element.folder = &quot;/&quot;;
            element.id = &quot;&quot;;
            data.push(element);
        }
        else if(/^ID=(.*)$/i.test(line))element.id = RegExp.$1;
        else if(/^Folder=(.*)$/i.test(line))element.folder = RegExp.$1;
    }
    return data
}

function findEntries(data, regexp){var entry, found=[];
    for (var i=0; i&lt;data.length; i++) {
        if(regexp.test(entry=data[i]))found.push(entry);
    }
    return found;
}

function getTree(path, data){var newPath, currentFolder, folders, files;
    if(typeof(data)==&quot;undefined&quot;)data = [];
    path = FSO.GetAbsolutePathName(path);
    try {
        currentFolder = FSO.GetFolder(path);
    } catch(e) {
        if ((e.number &amp; 0xFFFF) == 76) return data; // Папка не найдена
        else throw e;
    }
    folders = new Enumerator(currentFolder.SubFolders);
    for(;!folders.atEnd();folders.moveNext()){data.push(newPath = FSO.BuildPath(path, folders.item().Name));
        getTree(newPath, data);
    }
    files = new Enumerator(currentFolder.Files);
    for(;!files.atEnd();files.moveNext()){data.push(FSO.BuildPath(path, files.item().Name))}
    return data
}

function makeTree(startPath){
    var destName = &quot;Локальный кэш 1С (&quot; + userName + &quot;) &quot;;
    if(!/Local/.test(startPath)){
        destName += &quot;Roaming&quot;
        var cacheNames = &quot;ExtCompT|tmplts|&quot;;
    }else{
        destName += &quot;Local&quot;
        var cacheNames = &quot;dumps|logs|&quot;;
    }
    var cacheParent, cacheParents = &quot;&quot;, cacheName;
    // Очистим ранее созданное дерево
    var treeRoot = FSO.BuildPath(FSO.GetFile(WScript.ScriptFullName).ParentFolder, destName);
    var tree = getTree(treeRoot);
    for (var i=tree.length-1; i&gt;=0; i--) {
        if(FSO.FileExists(path=tree[i]))FSO.DeleteFile(path);
        else if(FSO.FolderExists(path))FSO.DeleteFolder(path);
    }
    // Построим новое дерево
    if(!FSO.FolderExists(treeRoot))FSO.CreateFolder(treeRoot);
    for (var i=0; i&lt;configurations.length; i++) {
        var configuration = configurations[i];
        var folderName = FSO.BuildPath(treeRoot , configuration.folder.replace(/\//g, &quot;\\&quot;));
        if(!FSO.FolderExists(folderName))FSO.CreateFolder(folderName);
        if(configuration.id){var caches = findEntries(startPath, new RegExp(&quot;\\\\&quot; + configuration.id + &quot;$&quot;));
            cacheName = configuration.id + &quot;|&quot;;
            if(caches &amp;&amp; cacheNames.indexOf(cacheName) == -1)cacheNames += cacheName;
            for (var j=0; j&lt;caches.length; j++) {
                var cache = caches[j], in_=&quot; в &quot; + (cacheParent = (cacheFolder = FSO.GetFolder(cache)).ParentFolder).Name;
                cacheParent = cacheParent.Path.replace(/\\/g, &quot;\\\\&quot;).replace(/\./g, &quot;\\.&quot;) + &quot;|&quot;;
                if(cacheParents.indexOf(cacheParent) == -1)cacheParents += cacheParent;
                var shortcutName = FSO.BuildPath(folderName, configuration + in_ + &quot;.lnk&quot;);
                if(FSO.FileExists(shortcutName))FSO.DeleteFile(shortcutName);
                with(WshShell.CreateShortcut(shortcutName)){
                    TargetPath = cache;
                    Save();
                }
            }
        }
        
    }
    // Добавим найденные кэши, не описанные в списках баз
    var cachesFound = findEntries(startPath, new RegExp(&quot;^(?:&quot; + cacheParents.slice(0, -1) + &quot;)\\\\(?!&quot; +
        cacheNames.slice(0, -1) + &quot;)[^\\\\]+$&quot;));
    for (var i=0; i&lt;cachesFound.length; i++) {
        if(FSO.FolderExists(cache = cachesFound[i])){cacheFolder = FSO.GetFolder(cache);
            var shortcutName = FSO.BuildPath(treeRoot, &quot;!Неизвестный кэш &quot; + cacheFolder.Name + &quot; в &quot; +
                cacheFolder.ParentFolder.Name + &quot;.lnk&quot;);
            if(FSO.FileExists(shortcutName))FSO.DeleteFile(shortcutName);
            with(WshShell.CreateShortcut(shortcutName)){
                TargetPath = cache;
                Save();
            }
        }
    }
    return destName;
}
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (kvk-2019)]]></author>
			<pubDate>Sun, 07 Jul 2024 19:42:21 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=161237#p161237</guid>
		</item>
	</channel>
</rss>
