Автор: Людоговский А.И., ООО "Фирма Элли", г. Москва. Источник: http://script-coding.info/
Объект Microsoft Script Control в среде 1С:Предприятие v7.7 может быть создан следующим образом: ScrCtrl = СоздатьОбъект("MSScriptControl.ScriptControl"); После этого вы можете вызывать и использовать методы и свойства этого объекта.
Объект позволит исполнить любой код на VBScript или JScript. Может быть очень полезен, если нужно исполнить код, который не может быть исполнен непосредственно в 1С:Предприятии. Например:
Полное описание объекта на английском языке можно скачать вместе с его дистрибутивом с сайта Microsoft. При этом, если у вас не слишком старая версия Windows, ничего устанавливать вам скорее всего вообще не придётся. Описание свойств и методов объекта на русском языке в формате синтакс-помощника 1С:Предприятие v7.7 (als-файл) вы можете скачать здесь. Скопируйте ALS-файл в каталог программы (например, "C:\Program FilesCv77\BIN\"), и в конфигураторе в синтакс-помощнике появится ветка "Некоторые объекты Automation". CHM-файл справки на русском языке по встроенным константам и функциям языка VBScript вы можете скачать здесь. Примеры работы с объектом Microsoft Script Control вы можете также получить, рассмотрев код маленькой конфигурации для 1С:Предприятия v7.7 "Администратор 1С", которую вы можете скачать на главной страничке этого сайта.
Функция читает список компьютеров, зарегистрированных в доменах локальной сети, и возвращает таблицу значений с колонками "Домен" и "Компьютер":
Функция глПолучитьКомпьютеры() ЭкспортТаблЗнач=СоздатьОбъект("ТаблицаЗначений");ТаблЗнач.НоваяКолонка("Домен");ТаблЗнач.НоваяКолонка("Компьютер");ПопыткаScrptCtrl=СоздатьОбъект("MSScriptControl.ScriptControl");ScrptCtrl.Language="vbscript";ScrptCtrl.AddCode("|Function GetComputers()|Set WinNT = GetObject(""WinNT:"")|WinNT.Filter = Array(""domain"")|strInfo=vbNullString|For Each Domain In WinNT|Set ADSI = GetObject(""WinNT://"" & Domain.Name) |ADSI.Filter = Array(""computer"")|For Each Comp In ADSI|strInfo=strInfo & Domain.Name & vbTab & Comp.Name & vbCrLf|Next|Next|GetComputers = strInfo|End Function|");Текст=СокрЛП(ScrptCtrl.Run("GetComputers"));ИсключениеСообщить(ОписаниеОшибки());Возврат ТаблЗнач;КонецПопытки;Для ы=1 по СтрКоличествоСтрок(Текст) ЦиклСтрКомп=СтрПолучитьСтроку(Текст,ы);Разд=Найти(СтрКомп,СимволТабуляции);Домен=Лев(СтрКомп,Разд-1);Компьютер=Прав(СтрКомп,СтрДлина(СтрКомп)-Разд);ТаблЗнач.НоваяСтрока();ТаблЗнач.Домен=Домен;ТаблЗнач.Компьютер=Компьютер;КонецЦикла;ТаблЗнач.Сортировать("Домен,Компьютер");Возврат ТаблЗнач;КонецФункции //глПолучитьКомпьютеры
Функция читает список зарегистрированных информационных баз 1С из реестра Windows и возвращает таблицу значений с колонками "Название" и "Путь":
Функция глПолучитьСписокИБ() ЭкспортТаблЗнач=СоздатьОбъект("ТаблицаЗначений");ТаблЗнач.НоваяКолонка("Название");ТаблЗнач.НоваяКолонка("Путь");ПопыткаScrptCtrl=СоздатьОбъект("MSScriptControl.ScriptControl");ScrptCtrl.Language="vbscript";ScrptCtrl.AddCode("|Function Get1CV77Titles()|const HKEY_CURRENT_USER = &H80000001|Set oReg=GetObject(""winmgmts:{impersonationLevel=impersonate}!\.\root\default:StdRegProv"")|strKeyPath = ""SoftwareCCv7.7\Titles""|oReg.EnumValues HKEY_CURRENT_USER, strKeyPath, arrValues|strInfo=vbNullString|For i = LBound(arrValues) To UBound(arrValues)|call oReg.GetStringValue(HKEY_CURRENT_USER,strKeyPath,arrValues(i),Value)|strInfo=strInfo & arrValues(i) & vbTab & Value & vbCrLf|Next|Get1CV77Titles = strInfo|End Function|");Текст=СокрЛП(ScrptCtrl.Run("Get1CV77Titles"));ИсключениеСообщить(ОписаниеОшибки());Возврат ТаблЗнач;КонецПопытки;Для ы=1 по СтрКоличествоСтрок(Текст) ЦиклСтрБазы=СтрПолучитьСтроку(Текст,ы);Разд=Найти(СтрБазы,СимволТабуляции);Путь=Лев(СтрБазы,Разд-1);Название=Прав(СтрБазы,СтрДлина(СтрБазы)-Разд);ТаблЗнач.НоваяСтрока();ТаблЗнач.Название=Название;ТаблЗнач.Путь=Путь;КонецЦикла;ТаблЗнач.Сортировать("Название");Возврат ТаблЗнач;КонецФункции //глПолучитьСписокИБ
Процедура делает Log Off (Парам=4), Shutdown (Парам=5) или Reboot (Парам=6) выбранному компьютеру:
Процедура глViolateComputer(ИмяКомпа,Парам) ЭкспортПопыткаScrptCtrl=СоздатьОбъект("MSScriptControl.ScriptControl");ScrptCtrl.Language="vbscript";ScrptCtrl.AddCode("|Function ViolateComputer()|Set WMI = GetObject(""winmgmts:{(Shutdown,RemoteShutdown)}\"+СокрЛП(ИмяКомпа)+"\Root\CIMV2"")|For Each OS In WMI.ExecQuery(""SELECT * FROM Win32_OperatingSystem"")|OS.Win32Shutdown("+Парам+")|Next|End Function|");ScrptCtrl.Run("ViolateComputer");ИсключениеСообщить(ОписаниеОшибки());КонецПопытки;КонецПроцедуры //глViolateComputer
Функция вычисляет квадратный корень числа:
Функция КвКорень(Чсл)ПопыткаScrptCtrl=СоздатьОбъект("MSScriptControl.ScriptControl");ScrptCtrl.Language="vbscript";ScrptCtrl.AddCode("|Function GetSqr(x)|GetSqr = Sqr(x)|End Function|");Рез=ScrptCtrl.Modules("Global").CodeObject.GetSqr(Чсл);ИсключениеСообщить(ОписаниеОшибки());Возврат 0;КонецПопытки;Возврат Рез;КонецФункции //КвКорень