<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBScript: 1Cv8.1 - Выгрузка базы (Kiber™)]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=4178</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=4178&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBScript: 1Cv8.1 - Выгрузка базы (Kiber™)».]]></description>
		<lastBuildDate>Tue, 16 Feb 2010 09:11:03 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: VBScript: 1Cv8.1 - Выгрузка базы (Kiber™)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=33080#p33080</link>
			<description><![CDATA[<p><span style="color: #0000FF"><strong>Архив всех версий:</strong></span></p>]]></description>
			<author><![CDATA[null@example.com (Kiber)]]></author>
			<pubDate>Tue, 16 Feb 2010 09:11:03 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=33080#p33080</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: 1Cv8.1 - Выгрузка базы (Kiber™)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=33078#p33078</link>
			<description><![CDATA[<p><span style="color: #0000FF"><strong>To-do:</strong></span></p><p><strong>1. </strong>VBScript error handling.<br />К сожалению, большинство ошибок возникает в процессе работы с COM-объектом 1C.<br />Именно эти ошибки не &quot;хватаются&quot; структурой &quot;On Error&quot; VBScript&#039;а.<br />Пока мне непонятно, как с этими ошибками работать и как их ловить.<br />Поэтому стандартной &quot;On Error&quot; реализации пока что не будет.</p><p><strong>2. </strong>Передача параметров.</p><p><strong>2.1. </strong>Передача параметров из командной строки.<br />Огромное количество параметров делает запуск скрипта с передачей параметров проблематичной, так как размеры строки могут превысить допустимые нормы (зависит от того, чем вы будете запускать скрипт).<br />Задумываюсь над частичной передачей параметров, т.е. будут прередаваться только те параметры, которые необходимо изменить. Эта реализация тоже выглядит немного &quot;криво&quot;, хотя идея довольно неплохая.</p><p><strong>2.2. </strong>Передача параметров при помощи файла настроек<br />Наверное, лучшим выходом будет ini. Вроде видел реализацию чтения настроек из ini.<br />А сам скрипт на ini можно будет натравить параметром командной строки.</p>]]></description>
			<author><![CDATA[null@example.com (Kiber)]]></author>
			<pubDate>Tue, 16 Feb 2010 08:59:06 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=33078#p33078</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: 1Cv8.1 - Выгрузка базы (Kiber™)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=33077#p33077</link>
			<description><![CDATA[<div class="codebox"><pre><code>&#039;[:::][:::][:::][:::][:::][:::][:::][:::][:::][:::][:::][:::][:::][:::][:::][:::]
&#039;[:::][:::][:::] Переменные                        [:::][:::][:::][:::][:::][:::]
&#039;[:::] Задержки
WaitMinutes = 0.1 &#039;задержка выхода пользователей из базы после установки блокировки БД
WorkMinutes = 120 &#039;предположительное время работы скрипта в минутах
&#039;[:::] Аутентификация БД
Adm_Nm         = &quot;blank&quot;         &#039;Логин, &quot;blank&quot; = использовать NTLM 
Adm_Pw         = &quot;blank&quot;         &#039;Пароль
Server_Nm     = &quot;1C&quot;             &#039;Сервер
DB_Nm         = &quot;backuptest&quot;     &#039;База
&#039;[:::] Блокирока БД
Lock_Msg     = &quot;Внимание!&quot;&amp;vbCrLf&amp;&quot;Ведутся технические работы.&quot;&amp;vbCrLf&amp;&quot;Доступ к базе данных закрыт.&quot;
Lock_PrmCode = &quot;1&quot;             &#039;Код блокировки базы
&#039;[:::] Пути и папки
str1CPath         = &quot;C:\Program Files\1cv81\bin\1cv8.exe&quot;
BackupPrefix     = &quot;[test]&quot;             &#039;Префикс базы для файлов бекапа
BackupFolder     = &quot;D:\Backup\DT&quot;     &#039;Папка backup&#039;a
LogFolder         = BackupFolder         &#039;Папка лога
massive_SyncFolders    = Array(&quot;\\STORAGE_1\Backup_DT$&quot;, &quot;\\STORAGE_2\Backup_DT$&quot;) &#039;Массив папок для копирования полученного бэкапа
&#039;[:::] Массивы исключений
Excludes_Users         = Array(&quot;Иванов И.И.&quot;, &quot;Петров П.П.&quot;, &quot;Сидоров К.К.&quot;, &quot;Перепёлко Н.Т.&quot;)     &#039;По имени пользователя
Excludes_Computers     = Array(&quot;IVANOV&quot;, &quot;PETROV&quot;, &quot;SIDOROV&quot;, &quot;PEREPELKO&quot;)                         &#039;По имени компьютера
&#039;[:::] Отправка лога по почте
massive_Recipient     = Array(&quot;Admin1@testov.net&quot;, &quot;Admin2@testov.net&quot;, &quot;Admin3@testov.net&quot;, &quot;Admin4@testov.net&quot;) &#039;Массив рассылки
strSender             = &quot;test@test.local&quot;         &#039;Отправитель
strSMTP_Server_Nm     = &quot;SMTPSRV.test.local&quot;         &#039;Сервер
strSMTP_Server_Port = &quot;25&quot;                         &#039;Порт
strSMTP_User_Nm     = &quot;test@test.local&quot;         &#039;Логин
strSMTP_User_Pw     = &quot;testPWtest&quot;                 &#039;Пароль

&#039;[:::][:::][:::][:::][:::][:::][:::][:::][:::][:::][:::][:::][:::][:::][:::][:::]
&#039;[:::][:::][:::] Тело скрипта                      [:::][:::][:::][:::][:::][:::]
&#039;[:::] Заполняем переменные, открываем лог
Dim objConnector
Dim objCluster
Dim objWPConnection
Dim objInfoBase

Set objShell = CreateObject(&quot;WScript.Shell&quot;)
Set objFSO = CreateObject(&quot;Scripting.FileSystemObject&quot;)

BackupName = BackupPrefix&amp;&quot;_&quot;&amp;CurrentDTFormat()

Set LogTextStream = Log_Open_TextStream(LogFolder&amp;&quot;\&quot;&amp;BackupName&amp;&quot;.txt&quot;)
LogTextStream.Write vbCrLf&amp;&quot;--------------- BEGIN ---------------------------------------------&quot;&amp;vbCrLf 
LogTextStream.Write Now()&amp;vbCrLf 
LogTextStream.Write &quot;    Backup: &#039;&quot;&amp;BackupName&amp;&quot;&#039;&quot;&amp;vbCrLf 
LogTextStream.Write &quot;    Server: &#039;&quot;&amp;Server_Nm&amp;&quot;&#039;&quot;&amp;vbCrLf 
LogTextStream.Write &quot;    DB: &#039;&quot;&amp;DB_Nm&amp;&quot;&#039;&quot;&amp;vbCrLf 
LogTextStream.Write &quot;    1CPath: &#039;&quot;&amp;str1CPath&amp;&quot;&#039;&quot;&amp;vbCrLf 

strSubject = &quot;1c backup &quot;&amp;BackupName&amp;&quot;: &quot;
strTextBody = &quot;Краткий лог выгрузки &quot;&amp;BackupName&amp;&quot;:&quot;&amp;vbCrLf&amp;vbCrLf
strAttachmentPath = LogFolder&amp;&quot;\&quot;&amp;BackupName&amp;&quot;.txt&quot;
FlagDBFound = False 

Lock_TimeMnts = WaitMinutes + WorkMinutes

&#039;[:::] Находим базу
Call DB_Find()&#039;(LogTextStream, strTextBody, Server_Nm, DB_Nm, Adm_Nm, Adm_Pw, FlagDBFound, objConnector, objCluster, objWPConnection, objInfoBase)
&#039;[:::] Отрабатываем ошибки
If Not FlagDBFound Then
LogTextStream.Write Now()&amp;&quot;    База данных не найдена!&quot;&amp;vbCrLf
LogTextStream.Write Now()&amp;vbCrLf 
LogTextStream.Write &quot;--------------- END   ---------------------------------------------&quot;&amp;vbCrLf 
LogTextStream.Close
    strTextBody = strTextBody&amp;&quot;DB not found!&quot;&amp;vbCrLf
    strSubject  = strSubject&amp;&quot;FAIL. DB not found.&quot;
    Call SendEmail()&#039;(massive_Recipient, strSubject, strTextBody, strAttachmentPath, strSender, strSMTP_User_Nm, strSMTP_User_Pw, strSMTP_Server_Nm, strSMTP_Server_Port)
    WScript.Quit
End If

&#039;[:::] Устанавливаем блокировку
Call DB_Lock()&#039;(LogTextStream, objInfoBase, objWPConnection, Lock_TimeMnts, Lock_Msg, Lock_PrmCode)

&#039;[:::] Ждем пока пользователей выкинет
LogTextStream.Write Now()&amp;&quot;    Ждем &quot;&amp;WaitMinutes&amp;&quot; минут (&quot;&amp;WaitMinutes*60&amp;&quot; секунд)...&quot;&amp;vbCrLf
WScript.Sleep(WaitMinutes*60*1000)

&#039;[:::] Выкидываем тех, кто не вышел
Call DB_DropUsers()&#039;(LogTextStream, strTextBody, objInfoBase, objWPConnection, FlagWasExceptions)
&#039;[:::] Отрабатываем ошибки
If FlagWasExceptions Then
LogTextStream.Write Now()&amp;&quot;    Выгрузка базы отменена по причине исключительной ситуации&quot;&amp;vbCrLf 
LogTextStream.Write Now()&amp;vbCrLf 
LogTextStream.Write &quot;--------------- END   ---------------------------------------------&quot;&amp;vbCrLf 
LogTextStream.Close
    strTextBody = strTextBody&amp;&quot;Выгрузка базы отменена так как не все соединения были разорваны (найдены исключения).&quot;&amp;vbCrLf 
    strSubject  = strSubject&amp;&quot;cancelled by exceptions.&quot;
    Call SendEmail()&#039;(massive_Recipient, strSubject, strTextBody, strAttachmentPath, strSender, strSMTP_User_Nm, strSMTP_User_Pw, strSMTP_Server_Nm, strSMTP_Server_Port)
    WScript.Quit
End If


&#039;[:::] Делаем backup
strTextBody = strTextBody&amp;&quot;Все соединения были успешно разорваны (исключений не найдено).&quot;&amp;vbCrLf
LogTextStream.Write Now()&amp;&quot;    Лог выгрузки: {&quot;&amp;vbCrLf&amp;vbCrLf 
LogTextStream.Close

RunCommand = &quot;&quot;&quot;&quot;&amp;str1CPath&amp;&quot;&quot;&quot;&quot; 
RunCommand = RunCommand&amp;&quot; DESIGNER&quot;
RunCommand = RunCommand&amp;&quot; /S&quot;&quot;&quot;&amp;Server_Nm&amp;&quot;\&quot;&amp;DB_Nm&amp;&quot;&quot;&quot;&quot;
If Adm_Nm &lt;&gt; &quot;blank&quot; Then
    RunCommand = RunCommand&amp;&quot; /N&quot;&quot;&quot;&amp;Adm_Nm&amp;&quot;&quot;&quot; /P&quot;&quot;&quot;&amp;Adm_Pw&amp;&quot;&quot;&quot;&quot;
Else
    RunCommand = RunCommand&amp;&quot; /WA+&quot;
End If
RunCommand = RunCommand&amp;&quot; /UC &quot;&amp;Lock_PrmCode
RunCommand = RunCommand&amp;&quot; /Visible&quot;
RunCommand = RunCommand&amp;&quot; /Out&quot;&quot;&quot;&amp;LogFolder&amp;&quot;\&quot;&amp;BackupName&amp;&quot;.txt&quot;&quot;&quot;
RunCommand = RunCommand&amp;&quot; -NoTruncate&quot;
RunCommand = RunCommand&amp;&quot; /DumpIB&quot;&quot;&quot;&amp;BackupFolder&amp;&quot;\&quot;&amp;BackupName&amp;&quot;.dt&quot;&quot;&quot;
 
objShell.Run RunCommand, 2, True 

Set LogTextStream = Log_Open_TextStream(LogFolder&amp;&quot;\&quot;&amp;BackupName&amp;&quot;.txt&quot;)
LogTextStream.Write vbCrLf&amp;Now()&amp;&quot;    }&quot;&amp;vbCrLf 

&#039;[:::] Отрабатываем ошибки
LogTextStream.Write Now()&amp;&quot;    Проверяем физическое наличие backup&#039;a:&quot;&amp;vbCrLf
If Not objFSO.FileExists(BackupFolder&amp;&quot;\&quot;&amp;BackupName&amp;&quot;.dt&quot;) Then
LogTextStream.Write Now()&amp;&quot;        Файл отсутствует! БАЗА НЕ ВЫГРУЖЕНА!!!&quot;&amp;vbCrLf
LogTextStream.Write Now()&amp;vbCrLf 
LogTextStream.Write &quot;--------------- END   ---------------------------------------------&quot;&amp;vbCrLf 
LogTextStream.Close
    strTextBody = strTextBody&amp;&quot;Файл отсутствует! БАЗА НЕ ВЫГРУЖЕНА!!!&quot;&amp;vbCrLf 
    strSubject  = strSubject&amp;&quot;FAIL.&quot;
    Call SendEmail()&#039;(massive_Recipient, strSubject, strTextBody, strAttachmentPath, strSender, strSMTP_User_Nm, strSMTP_User_Pw, strSMTP_Server_Nm, strSMTP_Server_Port)
    WScript.Quit
End If
LogTextStream.Write Now()&amp;&quot;        Файл на месте. База выгружена.&quot;&amp;vbCrLf
strTextBody = strTextBody&amp;&quot;Файл на месте. База выгружена.&quot;&amp;vbCrLf 
strSubject  = strSubject&amp;&quot;success.&quot;


&#039;[:::] Снимаем блокировку
Call DB_UnLock()&#039;(LogTextStream, objInfoBase, objWPConnection)

&#039;[:::] Синхронизируем папки бэкапов
LogTextStream.Write Now()&amp;&quot;    Начинаем копировать в целевые папки синхронизации&quot;&amp;vbCrLf
strTextBody = strTextBody&amp;&quot;Синхронизация:&quot;&amp;vbCrLf 
For Each SyncPath In massive_SyncFolders
LogTextStream.Write Now()&amp;&quot;        &lt;&quot;&amp;SyncPath&amp;&quot;&gt;:&quot;
    If objFSO.FolderExists(SyncPath) Then
LogTextStream.Write &quot;Папка доступна. Запущено копирование.&quot;&amp;vbCrLf
        objFSO.CopyFile BackupFolder&amp;&quot;\&quot;&amp;BackupName&amp;&quot;.dt&quot; , SyncPath&amp;&quot;\&quot;, True
        objFSO.CopyFile    LogFolder&amp;&quot;\&quot;&amp;BackupName&amp;&quot;.txt&quot;, SyncPath&amp;&quot;\&quot;, True
        If objFSO.FileExists(SyncPath&amp;&quot;\&quot;&amp;BackupName&amp;&quot;.dt&quot;) Then
            strTextBody = strTextBody&amp;&quot;&lt;&quot;&amp;SyncPath&amp;&quot;&gt;: ОК.&quot;&amp;vbCrLf
LogTextStream.Write Now()&amp;&quot;            ОК.&quot;
        Else
            strTextBody = strTextBody&amp;&quot;&lt;&quot;&amp;SyncPath&amp;&quot;&gt;: FAIL.&quot;&amp;vbCrLf 
    extStream.Write Now()&amp;&quot;            FAIL.&quot;
        End If
    Else
        strTextBody = strTextBody&amp;&quot;&lt;&quot;&amp;SyncPath&amp;&quot;&gt;: FAIL.&quot;&amp;vbCrLf 
LogTextStream.Write &quot;Папка недоступна.&quot;
    End If
Next

&#039;[:::] Закрываем лог
LogTextStream.Write Now()&amp;vbCrLf 
LogTextStream.Write &quot;--------------- END   ---------------------------------------------&quot;&amp;vbCrLf 
LogTextStream.Close

&#039;[:::] Отправляем сообщения по почте
Call SendEmail()&#039;(massive_Recipient, strSubject, strTextBody, strAttachmentPath, strSender, strSMTP_User_Nm, strSMTP_User_Pw, strSMTP_Server_Nm, strSMTP_Server_Port)

&#039;[:::][:::][:::][:::][:::][:::][:::][:::][:::][:::][:::][:::][:::][:::][:::][:::]
&#039;[:::][:::][:::] Процедуры работы с базой данных   [:::][:::][:::][:::][:::][:::]

&#039; // Процедура находит нужную БД на сервере, и возвращает параметры соединений
&#039; // Takes:
&#039; //     LogTextStream     - (obj) Log stream
&#039; //     strTextBody     - (str) Short log for mail  
&#039; //     Server_Nm         - (str) Server name
&#039; //     DB_Nm             - (str) DataBase name
&#039; //     Adm_Nm             - (str) Administrator user name
&#039; //     Adm_Pw             - (str) Administrator user password
&#039; // Returns (changes):
&#039; //     LogTextStream         - (obj) Log stream
&#039; //     strTextBody         - (str) Short log for mail  
&#039; //     FlagDBFound         - (boolean) true = database was found
&#039; //     objConnector         - (obj) V81.COMConnector
&#039; //     objCluster             - (obj) Cluster in server structure
&#039; //     objWPConnection     - (obj) Connection to working process
&#039; //     objInfoBase         - (obj) 1C database
Sub DB_Find()&#039;(LogTextStream, strTextBody, Server_Nm, DB_Nm, Adm_Nm, Adm_Pw, FlagDBFound, objConnector, objCluster, objWPConnection, objInfoBase)
    Dim ConnectString
    FlagDBFound = False
        
    Set objConnector = CreateObject(&quot;V81.COMConnector&quot;)
    Set objAgent = objConnector.ConnectAgent(Server_Nm)
    massive_objCluster = objAgent.GetClusters()
LogTextStream.Write Now()&amp;&quot;    Получен список кластеров, начинаем перебор:&quot;&amp;vbCrLf
    For Each objCluster In massive_objCluster 
LogTextStream.Write Now()&amp;&quot;    [&quot;&amp;objCluster.Name&amp;&quot;] {&quot;&amp;vbCrLf
        objAgent.Authenticate objCluster, &quot; &quot;, &quot; &quot;
LogTextStream.Write Now()&amp;&quot;        Аутентификация кластера пройдена&quot;&amp;vbCrLf
        massive_objProcess = objAgent.GetWorkingProcesses(objCluster)
LogTextStream.Write Now()&amp;&quot;        Получен список процессов, начинаем перебор:&quot;&amp;vbCrLf
        For Each objProcess In massive_objProcess 
LogTextStream.Write Now()&amp;&quot;        HostName: &#039;&quot;&amp;objProcess.HostName&amp;&quot;&#039; Port: &#039;&quot;&amp;objProcess.MainPort&amp;&quot;&#039; {&quot;&amp;vbCrLf
            ConnectString = objProcess.HostName&amp;&quot;:&quot;&amp;objProcess.MainPort
            Set objWPConnection = objConnector.ConnectWorkingProcess(ConnectString)
            If Adm_Nm &lt;&gt; &quot;blank&quot; Then
                objWPConnection.AddAuthentication Adm_Nm, Adm_Pw
LogTextStream.Write Now()&amp;&quot;            Аутентификация процесса пройдена&quot;&amp;vbCrLf
            Else
LogTextStream.Write Now()&amp;&quot;            Использована NTLM аутентификация текущего пользователя&quot;&amp;vbCrLf
            End If &#039;Adm_Nm &lt;&gt; &quot;blank&quot;
            massive_objInfoBase = objWPConnection.GetInfoBases()
LogTextStream.Write Now()&amp;&quot;            Получен список баз, начинаем перебор:&quot;
            For Each objInfoBase In massive_objInfoBase
LogTextStream.Write vbCrLf
LogTextStream.Write Now()&amp;&quot;                &lt;&quot;&amp;objInfoBase.Name&amp;&quot;&gt;&quot;
                If UCase(objInfoBase.Name) = UCase(DB_Nm) Then
                    &#039;закрываем теги и выходим из процедуры
                    strTextBody = strTextBody&amp;&quot;DB Found: [&quot;&amp;objCluster.Name&amp;&quot;], HostName: &#039;&quot;&amp;objProcess.HostName&amp;&quot;&#039; Port: &#039;&quot;&amp;objProcess.MainPort&amp;&quot;&#039;, &lt;&quot;&amp;objInfoBase.Name&amp;&quot;&gt;.&quot;&amp;vbCrLf
LogTextStream.Write &quot;: Совпадение!&quot;&amp;vbCrLf
LogTextStream.Write Now()&amp;&quot;        } HostName: &#039;&quot;&amp;objProcess.HostName&amp;&quot;&#039; Port: &#039;&quot;&amp;objProcess.MainPort&amp;&quot;&#039;&quot;&amp;vbCrLf
LogTextStream.Write Now()&amp;&quot;    } [&quot;&amp;objCluster.Name&amp;&quot;]&quot;&amp;vbCrLf
                    FlagDBFound = True
                    Exit Sub
                End If &#039;UCase(objInfoBase.Name) = UCase(DB_Nm)
            Next &#039;massive_objInfoBase
LogTextStream.Write vbCrLf
LogTextStream.Write Now()&amp;&quot;        } HostName: &#039;&quot;&amp;objProcess.HostName&amp;&quot;&#039; Port: &#039;&quot;&amp;objProcess.MainPort&amp;&quot;&#039;&quot;&amp;vbCrLf
        Next &#039;massive_objProcess
LogTextStream.Write Now()&amp;&quot;    } [&quot;&amp;objCluster.Name&amp;&quot;]&quot;&amp;vbCrLf
    Next &#039;massive_objCluster
End Sub &#039;DB_Find&#039;

&#039; // Процедура устанавливает блокировку БД
&#039; // Takes:
&#039; //     LogTextStream         - (obj) Log stream  
&#039; //     strTextBody         - (str) Short log for mail  
&#039; //     objInfoBase         - (obj) 1C database
&#039; //     objWPConnection     - (obj) Connection to working process
&#039; //     Lock_TimeMnts         - (real) Time in minutes to lock
&#039; //     Lock_Msg             - (str) Lock message displaying to user
&#039; //     Lock_PrmCode         - (str) Lock permission code
&#039; // Returns (changes):
&#039; //     LogTextStream         - (obj) Log stream
Sub DB_Lock()&#039;(LogTextStream, objInfoBase, objWPConnection, Lock_TimeMnts, Lock_Msg, Lock_PrmCode)
LogTextStream.Write Now()&amp;&quot;    Устанавливаем блокировку базы [&quot;&amp;objInfoBase.Name&amp;&quot;] на &quot;&amp;Lock_TimeMnts&amp;&quot; минут:&quot;&amp;vbCrLf
    objInfoBase.ConnectDenied     = True
    objInfoBase.DeniedFrom         = CStr(Now())
    objInfoBase.DeniedTo         = CStr(DateAdd(&quot;n&quot;,Lock_TimeMnts,Now()))
    objInfoBase.DeniedMessage     = Lock_Msg
    objInfoBase.PermissionCode     = Lock_PrmCode
    objWPConnection.UpdateInfoBase(objInfoBase)
LogTextStream.Write Now()&amp;&quot;        done&quot;&amp;vbCrLf
End Sub &#039;DB_Lock&#039;

&#039; // Процедура снимает блокировку БД
&#039; // Takes:
&#039; //     LogTextStream         - (obj) Log stream  
&#039; //     objInfoBase         - (obj) 1C database
&#039; //     objWPConnection     - (obj) Connection to working process
Sub DB_UnLock()&#039;(LogTextStream, objInfoBase, objWPConnection)
LogTextStream.Write Now()&amp;&quot;    Снимаем блокировку базы [&quot;&amp;objInfoBase.Name&amp;&quot;]:&quot;&amp;vbCrLf
    objInfoBase.ConnectDenied     = False
    objWPConnection.UpdateInfoBase(objInfoBase)
LogTextStream.Write Now()&amp;&quot;        done&quot;&amp;vbCrLf
End Sub &#039;DB_UnLock&#039;

&#039; // Процедура отключает подключения к БД
&#039; // Takes:
&#039; //     LogTextStream         - (obj) Log stream  
&#039; //     strTextBody         - (str) Short log for mail  
&#039; //     objInfoBase         - (obj) 1C database
&#039; //     objWPConnection     - (obj) Connection to working process
&#039; // Returns (changes):
&#039; //     LogTextStream         - (obj) Log stream
&#039; //     strTextBody         - (str) Short log for mail  
&#039; //     FlagWasExceptions      - (boolean) true = not all connections was disconnected
Sub DB_DropUsers()&#039;(LogTextStream, strTextBody, objInfoBase, objWPConnection, FlagWasExceptions)
LogTextStream.Write Now()&amp;&quot;    Получаем список подключений к базе, и отключаем их:&quot;&amp;vbCrLf
    FlagWasExceptions = False
    massive_objUserConnection = objWPConnection.GetInfoBaseConnections(objInfoBase)
    For Each objUserConnection In massive_objUserConnection
LogTextStream.Write Now()&amp;&quot;        name: &#039;&quot;&amp;objUserConnection.UserName&amp;&quot;&#039;, computer:&#039;&quot;&amp;objUserConnection.HostName&amp;&quot;&#039;, appID: &#039;&quot;&amp;objUserConnection.AppID&amp;&quot;&#039;&quot;&amp;vbCrLf
        If (objUserConnection.AppID = &quot;COMConsole&quot;) Then
LogTextStream.Write Now()&amp;&quot;            тип подключения в списке исключений&quot;&amp;vbCrLf
        ElseIf CheckMassiveForExactMatch(Excludes_Users, objUserConnection.UserName) Then
            FlagWasExceptions = True
            strTextBody = strTextBody&amp;&quot;(исключение по имени пользователя) name: &#039;&quot;&amp;objUserConnection.UserName&amp;&quot;&#039;, computer:&#039;&quot;&amp;objUserConnection.HostName&amp;&quot;&#039;, appID: &#039;&quot;&amp;objUserConnection.AppID&amp;&quot;&#039;.&quot;&amp;vbCrLf
LogTextStream.Write Now()&amp;&quot;            пользователь в списке исключений&quot;&amp;vbCrLf
        ElseIf CheckMassiveForExactMatch(Excludes_Computers, objUserConnection.HostName) Then
            FlagWasExceptions = True
            strTextBody = strTextBody&amp;&quot;(исключение по имени комьюра) name: &#039;&quot;&amp;objUserConnection.UserName&amp;&quot;&#039;, computer:&#039;&quot;&amp;objUserConnection.HostName&amp;&quot;&#039;, appID: &#039;&quot;&amp;objUserConnection.AppID&amp;&quot;&#039;.&quot;&amp;vbCrLf
LogTextStream.Write Now()&amp;&quot;            компьютер в списке исключений&quot;&amp;vbCrLf
        Else
            objWPConnection.Disconnect objUserConnection
LogTextStream.Write Now()&amp;&quot;            disconnected successfully&quot;&amp;vbCrLf
        End If
    Next
LogTextStream.Write Now()&amp;&quot;    Отключили.&quot;&amp;vbCrLf
End Sub &#039;DB_DropUsers&#039;

&#039;[:::][:::][:::][:::][:::][:::][:::][:::][:::][:::][:::][:::][:::][:::][:::][:::]
&#039;[:::][:::][:::] Процедуры работы с почтой         [:::][:::][:::][:::][:::][:::]
Sub SendEmail()&#039;(massive_Recipient, strSubject, strTextBody, strAttachmentPath, strSender, strSMTP_User_Nm, strSMTP_User_Pw, strSMTP_Server_Nm, strSMTP_Server_Port)

    Const cdoSendUsingPickup = 1 &#039;Send message using the local SMTP service pickup directory. 
    Const cdoSendUsingPort = 2 &#039;Send the message using the network (SMTP over the network). 
    
    Const cdoAnonymous = 0 &#039;Do not authenticate
    Const cdoBasic = 1 &#039;basic (clear-text) authentication
    Const cdoNTLM = 2 &#039;NTLM
    
    Set objMessage = CreateObject(&quot;CDO.Message&quot;) 
    objMessage.Subject = strSubject 
    objMessage.From = strSender
    objMessage.BodyPart.Charset=&quot;windows-1251&quot; 
    objMessage.TextBody = strTextBody
    objMessage.AddAttachment strAttachmentPath
    
    &#039;==This section provides the configuration information for the remote SMTP server.
    &#039;==Normally you will only change the server name or IP.
    &#039; http://msdn.microsoft.com/en-us/library/ms526318(EXCHG.10).aspx
    
    objMessage.Configuration.Fields.Item _
    (&quot;http://schemas.microsoft.com/cdo/configuration/sendusing&quot;) = 2 
    
    &#039;Name or IP of Remote SMTP Server
    objMessage.Configuration.Fields.Item _
    (&quot;http://schemas.microsoft.com/cdo/configuration/smtpserver&quot;) = strSMTP_Server_Nm
    
    &#039;Type of authentication, NONE, Basic (Base64 encoded), NTLM
    objMessage.Configuration.Fields.Item _
    (&quot;http://schemas.microsoft.com/cdo/configuration/smtpauthenticate&quot;) = cdoBasic
    
    &#039;Your UserID on the SMTP server
    objMessage.Configuration.Fields.Item _
    (&quot;http://schemas.microsoft.com/cdo/configuration/sendusername&quot;) = strSMTP_User_Nm
    
    &#039;Your password on the SMTP server
    objMessage.Configuration.Fields.Item _
    (&quot;http://schemas.microsoft.com/cdo/configuration/sendpassword&quot;) = strSMTP_User_Pw
    
    &#039;Server port (typically 25)
    objMessage.Configuration.Fields.Item _
    (&quot;http://schemas.microsoft.com/cdo/configuration/smtpserverport&quot;) = strSMTP_Server_Port 
    
    &#039;Use SSL for the connection (False or True)
    objMessage.Configuration.Fields.Item _
    (&quot;http://schemas.microsoft.com/cdo/configuration/smtpusessl&quot;) = False
    
    &#039;Connection Timeout in seconds (the maximum time CDO will try to establish a connection to the SMTP server)
    objMessage.Configuration.Fields.Item _
    (&quot;http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout&quot;) = 60
    
    objMessage.Configuration.Fields.Item _        
    (&quot;http://schemas.microsoft.com/cdo/configuration/languagecode&quot;) = 1049
    
    objMessage.Configuration.Fields.Item _
    (&quot;http://schemas.microsoft.com/cdo/configuration/usemessageresponsetext&quot;) = true

    objMessage.Configuration.Fields.Update
    
    &#039;==End remote SMTP server configuration section==
    For Each strRecipient In massive_Recipient
        objMessage.To = strRecipient
        objMessage.Send
    Next

End Sub &#039;SendEmail&#039;



&#039;[:::][:::][:::][:::][:::][:::][:::][:::][:::][:::][:::][:::][:::][:::][:::][:::]
&#039;[:::][:::][:::] Вспомогательные функции и процедуры    [:::][:::][:::][:::][:::]

&#039; // Процедура 
Sub hz()
End Sub &#039;hz&#039;

&#039; // Функция открывает поток записи в текстовый файл
&#039; // Takes:
&#039; //     FileName             - (str) Full file name + path  
&#039; // Returns:
&#039; //     Log_Open_TextStream - (obj) Log stream
Function Log_Open_TextStream(FileName)
    If objFSO.FileExists(FileName) Then
        Set File = objFSO.GetFile(FileName)
        Set Log_Open_TextStream = File.OpenAsTextStream(8)
    Else
        Set Log_Open_TextStream = objFSO.CreateTextFile(FileName, True)
    End If
End Function &#039;Log_Open_TextStream&#039;

&#039; // Функция возвращает текущую дату в формате &#039;YYYY-MM-DD_HH&#039;
&#039; // Returns:
&#039; //     CurrentDTFormat - (str) current date in &#039;YYYY-MM-DD_HH&#039; format
Function CurrentDTFormat()
  &#039;Месяц
  m = Month(Date())
  If m &lt; 10 Then
      m = &quot;0&quot;&amp;m
  End If
  
  &#039;День
  d = Day(Date())
  If d &lt; 10 Then
      d = &quot;0&quot;&amp;d
  End If
  
  &#039;Час
  h = Hour(Time())
  If h &lt; 10 Then
      h = &quot;0&quot;&amp;h
  End If
  
  &#039;Возвращаемое значение
  CurrentDTFormat = Year(Date())&amp;&quot;-&quot;&amp;m&amp;&quot;-&quot;&amp;d&amp;&quot;_&quot;&amp;h
End Function &#039;CurrentDTFormat&#039;

&#039; // Функция производит поиск значения в массиве
&#039; // Takes:
&#039; //     chkMassive     - (str massive) Massive for check in
&#039; //     chkValue     - (str) Value for check out
&#039; // Returns:
&#039; //     CheckMassiveForExactMatch - (boolean) true = One of chkMassive values have exact match with chkValue
Function CheckMassiveForExactMatch(chkMassive, chkValue)
    tmpFilter = Filter(chkMassive, chkValue)
    CheckMassiveForExactMatch = False
    If IsArray(tmpFilter) And UBound(tmpFilter) &gt;= 0 Then
        For Each tmpValue In tmpFilter
            If tmpValue = chkValue Then
                CheckMassiveForExactMatch = True
                Exit Function
            End If
        Next  
    End If
End Function &#039;CheckMassiveForExactMatch&#039;</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Kiber)]]></author>
			<pubDate>Tue, 16 Feb 2010 08:47:46 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=33077#p33077</guid>
		</item>
		<item>
			<title><![CDATA[VBScript: 1Cv8.1 - Выгрузка базы (Kiber™)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=33076#p33076</link>
			<description><![CDATA[<p><strong>Скрипт предназначен для backup&#039;a базы 1С на платформе версии 8.1.</strong></p><p><span style="color: #0000FF"><strong>Возможности скрипта:</strong></span><br /><strong>1. </strong>Блокировка базы<br /><strong>2. </strong>Бэкап базы<br /><strong>3. </strong>Выброс пользователей из базы (работа со массивом исключений)<br /><strong>4. </strong>Копирование полученного бэкапа в указанные места<br /><strong>5. </strong>Лог всех действий скрипта<br /><strong>6. </strong>Отправка результата работы скрипта (с кратким логом и с полным в виде вложения) по почте (необходима SMTP авторизация)</p><p><span style="color: #0000FF"><strong>Структура скрипта:</strong></span><br /><a href="http://img196.imageshack.us/img196/5514/vbs1cbackupkiber1.png"><span class="postimg"><img src="http://img196.imageshack.us/img196/5514/vbs1cbackupkiber1.th.png" alt="http://img196.imageshack.us/img196/5514/vbs1cbackupkiber1.th.png" /></span></a></p><p><span style="color: #0000FF"><strong>Обсуждение, предложения, багрепорты и пожелания:</strong></span><br /><a href="http://forum.script-coding.com/viewtopic.php?id=4178">Здесь</a></p><p>Извиняюсь за © в шапке, он нужен для идентификации.<br />За основу взят скрипт dred2001 (http://infostart.ru/public/63813), за что ему огромное спасибо.</p>]]></description>
			<author><![CDATA[null@example.com (Kiber)]]></author>
			<pubDate>Tue, 16 Feb 2010 08:44:55 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=33076#p33076</guid>
		</item>
	</channel>
</rss>
