1С и Windows Script Host (WSH) и Windows Management Instrumentation (WMI). ОТ ТЕОРИИ К ПРАКТИКЕ. Часть III. Реестр

Публикация № 166440

Разработка - Обработки - Универсальные обработки

Windows Windows Script Host WSH Windows Management Instrumentation WMI VBS скрипт script реестр управление конфигурация системная информация удаленный компьютер

Описание возможностей Windows Script Host и Windows Management Instrumentation.
Подборка "скриптовых" функций и процедур.
Работа с реестром.

Предыдущие:

1С и WSH и WMI. ОТ ТЕОРИИ К ПРАКТИКЕ. Часть I: //infostart.ru/public/165702/
1С и WSH и WMI. ОТ ТЕОРИИ К ПРАКТИКЕ. Часть II: //infostart.ru/public/166391/

Практическая реализация:

Обработка 1С:Системный Администратор (WSH&WMI): //infostart.ru/public/172189/


ТЕОРИЯ


Microsoft Windows Script Host (WSH) - сервер сценариев Windows.

Используется в качестве инструмента разработки и выполнения специальных сценариев для операционной системы Windows.
Сценарии WSH пишутся на специализированных языках: Microsoft Visual Basic Script Edition (VBScript) или Microsoft JScript.
Свойства и методы объектов Microsoft WSH доступны также в приложениях, способных выступить в роли OLE-клиента.

WSH позволяет работать с:

    - Файловой системой;
    - Ресурсами локальной сети;
    - Реестром;
    - Специальными папками и ярлыками Windows;
    - Процессами. Запускать и контролировать их выполнение.

WSH позволяет взаимодействовать с Microsoft ActiveX:

    - ActiveX Data Object (ADO) — Доступ к базам данных;
    - Active Directory Service Interface (ADSI) — Службы каталогов;
    - Windows Management Instrumentation (WMI) — Инструментарий управления Windows.

Подробно свойства и методы объектов MS Windows Script Host изложены в файле Automation.chm, доступном в ссылках на скачивание.

Windows Management Instrumentation (WMI) - инструментарий управления Windows.

WMI - это одна из базовых технологий для централизованного наблюдения и управления компьютерной инфраструктуры под управлением платформы Windows.
WMI – это расширенная и адаптированная компанией Microsoft реализация стандарта WBEM (WebBased Enterprise Management) компании DMTF Inc.
Основа WBEM - Common Information Model (CIM), реализующая объектно-ориентированный подход к представлению компонентов системы.

WMI позволяет работать с:
    - Системой;
    - Приложениями;
    - Оборудованием;
    - Сетями;
    др. управляемыми компонентами.

Подробно о Windows Management Instrumentation (англ.): http://msdn.microsoft.com/en-us/library/windows/desktop/aa394572%28v=vs.85%29.aspx


ПРАКТИКА


// Корневые ключи реестра и их сокращения:
// HKEY_CURRENT_USER - HKCU
// HKEY_LOCAL_MACHINE - HKLM
// HKEY_CLASSES_ROOT - HKCR
// HKEY_USERS - HKEY_USERS
// HKEY_CURRENT_CONFIG - HKEY_CURRENT_CONFIG


Список процедур и функций:- ЗарегистрироватьФайлDLL() - Ф., позволяющая зарегистрировать файл типа DLL.- УстановленаПрограмма() - Ф., позволяющая проверить установлена/не установлена программа.- Computer_Programs_Product() - Ф., позволяющая получить информацию об установленных программах лок./уд. компьютере (WMI).- Computer_Programs_Registry() - Ф., позволяющая получить информацию об установленных программах лок./уд. компьютере (REGISTRY).- ИзменитьСтартовуюСтраницуInternetExplorer() - Ф., позволяющая изменить стартовую страницу Internet Explorer лок. компьютера.- RegRead() - Ф. чтения значения ключа или группы из системного реестра.- RegWrite() - Ф. создания в системном реестре ключа или группы.- RegDelete() - Ф. удаления ключа или группы из системного реестра.- Computer_RegistryInformation() - Ф., позволяющая получить информацию о реестре лок./уд. компьютера, в т.ч. дату установки Windows.- Computer_Description() - Ф., позволяющая записать в описание лок./уд. компьютера имя домена\пользователя, работающего на нем.WindowsInfo() - Ф., позволяющая получить информацию об установленной Windows на лок. компьютере.- get_windows_key_via_reg_wmi.vbs. VBS-Срипт.  Получение серийного номера Windows.

// Функция, позволяющая зарегистрировать файл типа DLL.
//
// ВАЖНО:

//
// Windows User Account Control (UAC) в ОС Vista и выше
// может помешать регистрации DLL.
//
// В этом случае необходимо:
// Вручную зарегистрировать фалй от имени "Администратора":
// "C:\Documents and Settings\All Users\1С_COMObject\X.DLL"
// Отключать UAC не рекомендуется.
//
// Возвращает:
//     В случае успеха - COMОбъект.
//     Иначе - Неопределено.
// Параметры:
//     ИмяКаталогаDLL - Относительно переменной среды %ALLUSERSPROFILE%.
//     ИмяФайлаDLL - Короткое имя файла DLL.
//     ИмяМакетаDLL - Имя двоичного макета объекта, в котором находится файл DLL.
//     ИмяCOMОбъекта - Имя создаваемого COMОбъекта.
//
&НаСервере
Функция ЗарегистрироватьФайлDLL(ИмяКаталогаDLL = "1С_COMObject" , ИмяФайлаDLL = "X.DLL", ИмяМакетаDLL = "XY", ИмяCOMОбъекта = "XYZ")
    
    ЭтотОбъект = РеквизитФормыВЗначение("Объект");
    
    ALLUSERSPROFILE = Неопределено;
    Попытка
        WshShell = Новый COMОбъект("WScript.Shell");
        WshSysEnv = WshShell.Environment("Process");
        ALLUSERSPROFILE = WshSysEnv.Item("ALLUSERSPROFILE");
    Исключение
         Сообщить(НСтр("ru = '"+ОписаниеОшибки()+"'"), СтатусСообщения.Внимание);
         Возврат Неопределено;
    КонецПопытки;

    КаталогDLL = Новый Файл(ALLUSERSPROFILE + "\" + ИмяКаталогаDLL);
    Если НЕ КаталогDLL.Существует() Тогда
        Попытка
            СоздатьКаталог(КаталогDLL.ПолноеИмя);
        Исключение
            Сообщить(НСтр("ru = '"+ОписаниеОшибки()+"'"), СтатусСообщения.Внимание);
            Возврат Неопределено;
        КонецПопытки;
    КонецЕсли;
    
    ИмяФайлаDLL = КаталогDLL.ПолноеИмя + "\" + ИмяФайлаDLL;
    ФайлDLL = Новый Файл(ИмяФайлаDLL);
    Если НЕ ФайлDLL.Существует() Тогда
        Попытка
            МакетDLL = ЭтотОбъект.ПолучитьМакет(ИмяМакетаDLL);
            МакетDLL.Записать(ФайлDLL.ПолноеИмя);
        Исключение
            Сообщить(НСтр("ru = '"+ОписаниеОшибки()+"'"), СтатусСообщения.Внимание);
            Возврат Неопределено;
        КонецПопытки;
    КонецЕсли;
    
    Попытка
        // "/s" - "тихий" режим REGsvr32: Окна сообщений не отображаются.
        // 0 - Без окна WshShell.
        // Истина - Дождаться завершения.
        WshShell = Новый COMОбъект("WScript.Shell");
        WshShell.Run("REGsvr32 /s " + ИмяФайлаDLL, 0, Истина);
    Исключение
        //Сообщить(НСтр("ru = '"+ОписаниеОшибки()+"'"), СтатусСообщения.Внимание);
        ЗапуститьПриложение("REGsvr32 /s " + ИмяФайлаDLL, , Истина);
    КонецПопытки;
    
    // Проверка регистрации.
    НовыйCOMОбъект = ПолучитьНовыйCOMОбъект(ИмяCOMОбъекта);
    
    Возврат НовыйCOMОбъект;

КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция ПолучитьНовыйCOMОбъект(ИмяCOMОбъекта)
    
    Попытка
        НовыйCOMОбъект = Новый COMОбъект(ИмяCOMОбъекта);
        Возврат НовыйCOMОбъект;
    Исключение
        Возврат Неопределено;
    КонецПопытки;
    
    Возврат Неопределено;
    
КонецФункции


// Функция, позволяющая проверить установлена/не установлена программа.
// Проверяет путь в системном реестре и существование запускаемого файла для программы,
// установку которой на компьютере необходимо проверить.

// Используется функция GetFileInfo, описанная в Части II.
//
&НаКлиентеНаСервереБезКонтекста
Функция УстановленаПрограмма(Программа = "LibreOffice")
 

    Файл = Неопределено;
    Если Программа = "LibreOffice" Тогда
        Файл = RegRead("HKLM\Software\LibreOffice\LibreOffice\3.6\Path");
    Иначе
        // Файл = ...
    КонецЕсли;
    
    Если Файл = Неопределено Тогда
        Возврат Ложь;
    КонецЕсли;
    
    ПрограммаЗапуска = GetFileInfo(Файл);
    
    Если НЕ ПрограммаЗапуска = Неопределено Тогда
        // ... Дополнительная проверка при необходимости имени, размера, ....
        Возврат Истина;

    КонецЕсли;
    
    Возврат Ложь;
    
КонецФункции


// Функция, позволяющая получить информацию об установленных программах локальном/удаленном компьютере.
// Параметры:
//    Computer - Имя компьютера.
// Возвращаемое значение:
//    Таблица значений.
//
// Примечания:
// 1. Только программы, установленные с помощью Windows Installer.
// 2. Полнота информации в Windows 2000/XP/2003 ограничена.
// 3. Может не работать на 64-битных ОС.
// 4. Медленнее чтения из регистра.
//

// При запуске на  на компьютере под управлением Windows Server 2003 возможна ошибка чтения данных,
// т.к. поставщик объекта Win32_Product по умолчанию в Windows Server 2003 не устаналивается
.
// Установка:
// Панель управления - Установка и уделение программ - Установка компонентов Windows - Средства наблюдения и управления:

// Компонента: "Поставщик установщика Windows через WMI"
.
//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
// Подробности на странице: //infostart.ru/public/165702/
//

&НаСервереБезКонтекста
Функция Computer_Programs_Product(Computer = ".")
    
    Win32_ProductInfo = Новый ТаблицаЗначений;
    Win32_ProductInfo.Колонки.Добавить("Caption");
    Win32_ProductInfo.Колонки.Добавить("Description");
    Win32_ProductInfo.Колонки.Добавить("HelpLink");
    Win32_ProductInfo.Колонки.Добавить("HelpTelephone");
    Win32_ProductInfo.Колонки.Добавить("IdentifyingNumber");
    Win32_ProductInfo.Колонки.Добавить("InstallDate");
    Win32_ProductInfo.Колонки.Добавить("InstallLocation");
    Win32_ProductInfo.Колонки.Добавить("InstallSource");
    Win32_ProductInfo.Колонки.Добавить("InstallState");
    Win32_ProductInfo.Колонки.Добавить("Language");
    Win32_ProductInfo.Колонки.Добавить("LocalPackage");
    Win32_ProductInfo.Колонки.Добавить("Name");
    Win32_ProductInfo.Колонки.Добавить("PackageCache");
    Win32_ProductInfo.Колонки.Добавить("PackageCode");
    Win32_ProductInfo.Колонки.Добавить("PackageName");
    Win32_ProductInfo.Колонки.Добавить("ProductID");
    Win32_ProductInfo.Колонки.Добавить("RegCompany");
    Win32_ProductInfo.Колонки.Добавить("RegOwner");
    Win32_ProductInfo.Колонки.Добавить("SKUNumber");
    Win32_ProductInfo.Колонки.Добавить("Transforms");
    Win32_ProductInfo.Колонки.Добавить("URLInfoAbout");
    Win32_ProductInfo.Колонки.Добавить("URLUpdateInfo");
    Win32_ProductInfo.Колонки.Добавить("Vendor");
    Win32_ProductInfo.Колонки.Добавить("Version");
    
    Попытка
        
        WinMGMT = ПолучитьCOMОбъект("winmgmts:\\" + Computer + "\root\cimv2");
        Win32_Product = WinMGMT.ExecQuery("SELECT * FROM Win32_Product");
        
        Для Каждого Product ИЗ Win32_Product Цикл
            ProductInfo = Win32_ProductInfo.Добавить();
            ProductInfo.Caption = ПолучитьЗначениеВПопытке(Product, "Caption");
            ProductInfo.Description = ПолучитьЗначениеВПопытке(Product, "Description");
            ProductInfo.HelpLink = ПолучитьЗначениеВПопытке(Product, "HelpLink");
            ProductInfo.HelpTelephone = ПолучитьЗначениеВПопытке(Product, "HelpTelephone");
            ProductInfo.IdentifyingNumber = ПолучитьЗначениеВПопытке(Product, "IdentifyingNumber");
            InstallDate = ПолучитьЗначениеВПопытке(Product, "InstallDate");
            Попытка
                ProductInfo.InstallDate = Дата(Лев(InstallDate,8));
            Исключение
                ProductInfo.InstallDate = InstallDate;
            КонецПопытки;
            ProductInfo.InstallLocation = ПолучитьЗначениеВПопытке(Product, "InstallLocation");
            ProductInfo.InstallSource = ПолучитьЗначениеВПопытке(Product, "InstallSource");
            InstallState = ПолучитьЗначениеВПопытке(Product, "InstallState");
            Если InstallState = -6 Тогда
                ProductInfo.InstallState = "Bad Configuration";
            ИначеЕсли InstallState = -2 Тогда
                ProductInfo.InstallState = "Invalid Argument";
            ИначеЕсли InstallState = -1 Тогда
                ProductInfo.InstallState = "Unknown Package";
            ИначеЕсли InstallState = 1 Тогда
                ProductInfo.InstallState = "Advertised";
            ИначеЕсли InstallState = 2 Тогда
                ProductInfo.InstallState = "Absent";
            ИначеЕсли InstallState = 5 Тогда
                ProductInfo.InstallState = "Installed";
            Иначе
                ProductInfo.InstallState = "Invalid State";
            КонецЕсли;
            Language = ПолучитьЗначениеВПопытке(Product, "Language");
            Если Language = "1033" Тогда
                ProductInfo.Language = "Английский";
            ИначеЕсли Language = "1049" Тогда
                ProductInfo.Language = "Русский";
            ИначеЕсли Language = "0" Тогда
                ProductInfo.Language = "";
            Иначе
                ProductInfo.Language = Language;
            КонецЕсли;
            ProductInfo.LocalPackage = ПолучитьЗначениеВПопытке(Product, "LocalPackage");
            ProductInfo.Name = ПолучитьЗначениеВПопытке(Product, "Name");
            ProductInfo.PackageCache = ПолучитьЗначениеВПопытке(Product, "PackageCache");
            ProductInfo.PackageCode = ПолучитьЗначениеВПопытке(Product, "PackageCode");
            ProductInfo.PackageName = ПолучитьЗначениеВПопытке(Product, "PackageName");
            ProductInfo.ProductID = ПолучитьЗначениеВПопытке(Product, "ProductID");
            ProductInfo.RegCompany = ПолучитьЗначениеВПопытке(Product, "RegCompany");
            ProductInfo.RegOwner = ПолучитьЗначениеВПопытке(Product, "RegOwner");
            ProductInfo.SKUNumber = ПолучитьЗначениеВПопытке(Product, "SKUNumber");
            ProductInfo.Transforms = ПолучитьЗначениеВПопытке(Product, "Transforms");
            ProductInfo.URLInfoAbout = ПолучитьЗначениеВПопытке(Product, "URLInfoAbout");
            ProductInfo.URLUpdateInfo = ПолучитьЗначениеВПопытке(Product, "URLUpdateInfo");
            ProductInfo.Vendor = ПолучитьЗначениеВПопытке(Product, "Vendor");
            ProductInfo.Version = ПолучитьЗначениеВПопытке(Product, "Version");
        КонецЦикла;
        
    Исключение
    КонецПопытки;

    Win32_ProductInfo.Сортировать("Name");
    
    Возврат Win32_ProductInfo;
    
КонецФункции

&НаСервереБезКонтекста
Функция ПолучитьЗначениеВПопытке(хОбъект, хРеквизит)
    
    Попытка
        Возврат хОбъект[хРеквизит];
    Исключение
        Возврат Неопределено;
    КонецПопытки;
    
    Возврат Неопределено;
    
КонецФункции


// Функция, позволяющая получить информацию об установленных программах локальном/удаленном компьютере.
// Параметры:
//    Computer - Имя компьютера.
// Возвращаемое значение:
//    Таблица значений.
//
// Примечания:
// 1. Полнота информации [в сравнении с функцией Computer_Programs_Product()]:
//        - Количество программ больше, т.к. нет ограничения на "Только программы, установленные с помощью Windows Installer".
//        - Количество данных о конкретной программе меньше, но основная информация доступна.
// 2. Поддержка 64-битных ОС (из-за отсутствия 64-битной Windows - не проверялось).
// 3. Быстрее, чем при использовании WMI: (
"SELECT * FROM Win32_Product").
//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
// Подробности на странице: //infostart.ru/public/165702/
//

&НаСервереБезКонтекста
Функция Computer_Programs_Registry(Computer = ".")
    
    Win32_ProductInfo
= Новый ТаблицаЗначений;
    Win32_ProductInfo.Колонки.Добавить("Caption");
    Win32_ProductInfo.Колонки.Добавить("Description");
    Win32_ProductInfo.Колонки.Добавить("HelpLink");
    Win32_ProductInfo.Колонки.Добавить("HelpTelephone");
    Win32_ProductInfo.Колонки.Добавить("IdentifyingNumber");
    Win32_ProductInfo.Колонки.Добавить("InstallDate");
    Win32_ProductInfo.Колонки.Добавить("InstallLocation");
    Win32_ProductInfo.Колонки.Добавить("InstallSource");
    Win32_ProductInfo.Колонки.Добавить("InstallState");
    Win32_ProductInfo.Колонки.Добавить("Language");
    Win32_ProductInfo.Колонки.Добавить("LocalPackage");
    Win32_ProductInfo.Колонки.Добавить("Name");
    Win32_ProductInfo.Колонки.Добавить("PackageCache");
    Win32_ProductInfo.Колонки.Добавить("PackageCode");
    Win32_ProductInfo.Колонки.Добавить("PackageName");
    Win32_ProductInfo.Колонки.Добавить("ProductID");
    Win32_ProductInfo.Колонки.Добавить("RegCompany");
    Win32_ProductInfo.Колонки.Добавить("RegOwner");
    Win32_ProductInfo.Колонки.Добавить("SKUNumber");
    Win32_ProductInfo.Колонки.Добавить("Transforms");
    Win32_ProductInfo.Колонки.Добавить("URLInfoAbout");
    Win32_ProductInfo.Колонки.Добавить("URLUpdateInfo");
    Win32_ProductInfo.Колонки.Добавить("Vendor");
    Win32_ProductInfo.Колонки.Добавить("Version");
    
    Попытка
        
        WinMGMT = ПолучитьCOMОбъект("winmgmts:\\" + Computer + "\root\default:StdRegProv");
        
        HKCU = 2147483649;
        HKLM = 2147483650;
        
        HKCUPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\";
        HKLMPath32 = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\";
        HKLMPath64 = "SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\";
        
        Computer_Programs_Registry_Key(WinMGMT, HKCU, HKCUPath   , Win32_ProductInfo);
        Computer_Programs_Registry_Key(WinMGMT, HKLM, HKLMPath32, Win32_ProductInfo);
        Computer_Programs_Registry_Key(WinMGMT, HKLM, HKLMPath64, Win32_ProductInfo);
        
    Исключение
    КонецПопытки;
    
    Win32_ProductInfo.Сортировать("Name");
    
    Возврат Win32_ProductInfo;
    
КонецФункции
    
&НаСервереБезКонтекста
Функция Computer_Programs_Registry_Key(WinMGMT, HK, HKPath, Win32_ProductInfo)
    
    Win32_Product = Новый Массив;
    Попытка
        WinMGMT.EnumKey(HK, HKPath, Win32_Product);
        Если Win32_Product = NULL Тогда
            Возврат Неопределено;
        КонецЕсли;
    Исключение
        Возврат Неопределено;
    КонецПопытки;
    
    Для Каждого Product ИЗ Win32_Product Цикл
        Name = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, "DisplayName");
        Version = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, "DisplayVersion");
        ProductID = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, "ProductGuid");
        ParentName = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, "ParentDisplayName");
        NameString = Win32_ProductInfo.Найти(Name, "Name");
        Если Name = Неопределено ИЛИ (НЕ NameString = Неопределено И NameString.Version = Version) Тогда
            Продолжить;
        КонецЕсли;
        ProductInfo = Win32_ProductInfo.Добавить();
        ProductInfo.Caption = Name;
        ProductInfo.Description = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, "Description");
        Если НЕ ЗначениеЗаполнено(ProductInfo.Description) Тогда
            ProductInfo.Description = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, "Comments");
        КонецЕсли;
        Если НЕ ЗначениеЗаполнено(ProductInfo.Description) Тогда
            ProductInfo.Description = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, "Readme");
        КонецЕсли;
        Если НЕ ЗначениеЗаполнено(ProductInfo.Description) Тогда
            ProductInfo.Description = Name;
        КонецЕсли;
        ProductInfo.HelpLink = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, "HelpLink");
        ProductInfo.HelpTelephone = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, "HelpTelephone");
        Если НЕ ЗначениеЗаполнено(ProductID) Тогда
            IdentifyingNumber = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, "UninstallString");
            Если НЕ ЗначениеЗаполнено(IdentifyingNumber) Тогда
                IdentifyingNumber = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, "ModifyPath");
            КонецЕсли;
            Если ЗначениеЗаполнено(IdentifyingNumber) Тогда
                ПозицияЛевойСкобки = Найти(IdentifyingNumber, "{");
                ПозицияПравойСкобки = Найти(IdentifyingNumber, "}");
                Если ПозицияЛевойСкобки > 0 И ПозицияПравойСкобки > 0 Тогда
                    ProductInfo.IdentifyingNumber = Сред(IdentifyingNumber, ПозицияЛевойСкобки, ПозицияПравойСкобки-ПозицияЛевойСкобки+1);
                КонецЕсли;
            КонецЕсли;
        Иначе
            ProductInfo.IdentifyingNumber = ProductID;
        КонецЕсли;
        InstallDate = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, "InstallDate");
        Попытка
            ProductInfo.InstallDate = Дата(Лев(InstallDate,8));
        Исключение
            ProductInfo.InstallDate = InstallDate;
        КонецПопытки;
        ProductInfo.InstallLocation = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, "InstallLocation");
        ProductInfo.InstallSource = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, "InstallSource");
        ProductInfo.InstallState = Неопределено;
        ProductInfo.Language = Неопределено;
        ProductInfo.LocalPackage = Неопределено;
        ProductInfo.Name = Name;
        ProductInfo.PackageCache = Неопределено;
        ProductInfo.PackageCode = Неопределено;
        ProductInfo.PackageName = Неопределено;
        ProductInfo.ProductID = ProductID;
        ProductInfo.RegCompany = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, "RegCompany");
        ProductInfo.RegOwner = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, "RegOwner");
        ProductInfo.SKUNumber = Неопределено;
        ProductInfo.Transforms = Неопределено;
        ProductInfo.URLInfoAbout = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, "URLInfoAbout");
        ProductInfo.URLUpdateInfo = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, "URLUpdateInfo");
        ProductInfo.Vendor = ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKPath, Win32_ProductInfo, Product, "Publisher");
        ProductInfo.Version = Version;
    КонецЦикла;
    
КонецФункции

&НаСервереБезКонтекста
Функция ПолучитьЗначениеВПопытке_Key(WinMGMT, HK, HKXXPath, Win32_ProductInfo, Product, KeyName)
    
    Попытка
        Value = Неопределено;
        WinMGMT.GetStringValue(HK, HKXXPath + Product, KeyName, Value);
        Если Value = NULL ИЛИ СтрДлина(Value) = 0 Тогда
            Возврат Неопределено;
        Иначе
            Возврат Value;
        КонецЕсли;
    Исключение
        Возврат Неопределено;
    КонецПопытки;
    
    Возврат Неопределено;
       
КонецФункции


// Функция, позволяющая изменить стартовую страницу Internet Explorer локального компьютера.
// Для бухгалтеров - одно, для менеджеров - другое, ...
//

&НаКлиентеНаСервереБезКонтекста
Функция ИзменитьСтартовуюСтраницуInternetExplorer(НоваяСтраница)
    
    ТекущаяСтраница = RegRead("HKCU\SOFTWARE\Microsoft\Internet Explorer\Main\Start Page");
    Сообщить("Предыдущая стартовая страница IE: " + ТекущаяСтраница);
    
    RegWrite("HKCU\SOFTWARE\Microsoft\Internet Explorer\Main\Start Page", НоваяСтраница, "REG_SZ");
    
    ТекущаяСтраница = RegRead("HKCU\SOFTWARE\Microsoft\Internet Explorer\Main\Start Page");
    Сообщить("Новая стартовая страница IE: " + ТекущаяСтраница);
    
КонецФункции


// Функция чтения значения ключа или группы из системного реестра.
// Возвращаемые значения типа:
// REG_SZ - строка.
// REG_DWORD - целое число.
// REG_BINARY - массив целый чисел
// REG_EXPAND_SZ - строка.
// REG_MULTI_SZ - массив строк.

&НаКлиентеНаСервереБезКонтекста
Функция RegRead(Путь = "HKLM\Software\Nokia\")
    
    Значение = Неопределено;
    
    Попытка
        WshShell = Новый COMОбъект("WScript.Shell");
        Значение = WshShell.RegRead(Путь);
    Исключение
    КонецПопытки;
    
    Возврат Значение;
    
КонецФункции


// Функция создания в системном реестре ключа или группы.
//
&НаКлиентеНаСервереБезКонтекста
Функция RegWrite(Путь = "HKLM\Software\Nokia\", Ключ = "Nokia_", Тип = "REG_SZ")
    
    Значение = Неопределено;
    
    Попытка
        WshShell = Новый COMОбъект("WScript.Shell");
        WshShell.RegWrite(Путь, Ключ, Тип);
    
        Значение = WshShell.RegRead(Путь);
    Исключение
    КонецПопытки;
    
    Если НЕ Значение = Неопределено Тогда
        Возврат Истина;
    КонецЕсли;
    
    Возврат Ложь;

КонецФункции


// Функция удаления ключа или группы из системного реестра.
//
&НаКлиентеНаСервереБезКонтекста
Функция RegDelete(Путь = Неопределено)
    
    Если Путь = Неопределено Тогда
        Возврат Ложь;
    КонецЕсли;
    
    Значение = Неопределено;
    Попытка
        WshShell = Новый COMОбъект("WScript.Shell");
        WshShell.RegDelete(Путь);
        
        Значение = WshShell.RegRead(Путь);
    Исключение
    КонецПопытки;
    
    Если Значение = Неопределено Тогда
        Возврат Истина;
    КонецЕсли;
    
    Возврат Ложь;
    
КонецФункции


// Функция, позволяющая получить информацию о реестре локального/удаленного компьютера, в т.ч. дату установки Windows.
// Параметры:
//    Computer - Имя компьютера.
// Возвращаемое значение:
//    Структура.
//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
// Подробности на странице: //infostart.ru/public/165702/
//
&НаСервереБезКонтекста

Функция Computer_RegistryInformation(Computer = ".")
    
    WinRegistryInfo = Новый Структура("Name,Description,InstallDate,CurrentSize,MaximumSize");
    
    Попытка
        
        WinMGMT = ПолучитьCOMОбъект("winmgmts:\\" + Computer + "\root\cimv2");
        Win32_Registry = WinMGMT.ExecQuery("SELECT * FROM Win32_Registry");
        
        Для Каждого Registry ИЗ Win32_Registry Цикл
            WinRegistryInfo.Name = Registry.Name;
            WinRegistryInfo.Description = Registry.Description;
            // Дата установки Windows.
            Попытка
                WinRegistryInfo.InstallDate = Дата(Лев(Registry.InstallDate,14));
            Исключение
            КонецПопытки;
            WinRegistryInfo.CurrentSize = Registry.CurrentSize;
            WinRegistryInfo.MaximumSize = Registry.MaximumSize;
        КонецЦикла;
        
    Исключение
    КонецПопытки;
    
    Возврат WinRegistryInfo;

КонецФункции


// Функция, позволяющая записать в описание локального/удаленного компьютера имя домена\пользователя, работающего на нем.
// Описание компьютера отображается в качестве комментария в сетевом окружении.
// Изменяет параметр реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\srvcomment
// Применено WMI, т.к.:
// Изменения параметра в реестре требует перезагрузки компьютера для вступления в силу изменения,
// а при использовании WMI - изменения сразу вступают в силу.
//
// Параметры:
//    Computer - Имя компьютера.
// Возвращаемое значение:
//    Нет.
//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
// Подробности на странице: //infostart.ru/public/165702/
//
&НаСервереБезКонтекста
Функция Computer_Description(Computer = ".")
    
    Попытка
        
        WinMGMT = ПолучитьCOMОбъект("winmgmts:\\" + Computer + "\root\cimv2");
        
        Win32_ComputerSystem = WinMGMT.ExecQuery("SELECT * FROM Win32_ComputerSystem");
        
        Для Каждого ComputerSystem ИЗ Win32_ComputerSystem Цикл
            NewDescription = ComputerSystem.UserName;
        КонецЦикла;
        
        Win32_OS = WinMGMT.InstancesOf("Win32_OperatingSystem");
        
        Для Каждого OS ИЗ Win32_OS Цикл
            OS.Description = NewDescription;
            OS.Put_();
        КонецЦикла;
        
    Исключение
    КонецПопытки;
    
КонецФункции


// Функция, позволяющая получить информацию об установленной Windows на локальном компьютере.
// Параметры:
//    НЕТ.
// Возвращаемое значение:
//    Структура.
//
&НаСервереБезКонтекста
Функция WindowsInfo()
    
    Path = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion";
    WINInfo = Новый Структура("BuildLab,CSDVersion,CurrentBuildNumber,CurrentVersion,ProductId,ProductName,RegisteredOrganization,RegisteredOwner,SystemRoot");
    
    Попытка
        WshShell = Новый COMОбъект("WScript.Shell");
        WINInfo.BuildLab = WshShell.RegRead(Path+"\BuildLab");
        WINInfo.CSDVersion = WshShell.RegRead(Path+"\CSDVersion");
        WINInfo.CurrentBuildNumber = WshShell.RegRead(Path+"\CurrentBuildNumber");
        WINInfo.CurrentVersion = WshShell.RegRead(Path+"\CurrentVersion");
        WINInfo.ProductId = WshShell.RegRead(Path+"\ProductId");
        WINInfo.ProductName = WshShell.RegRead(Path+"\ProductName");
        WINInfo.RegisteredOrganization = WshShell.RegRead(Path+"\RegisteredOrganization");
        WINInfo.RegisteredOwner = WshShell.RegRead(Path+"\RegisteredOwner");
        WINInfo.SystemRoot = WshShell.RegRead(Path+"\SystemRoot");
    Исключение
    КонецПопытки;

    Возврат WINInfo;
    
КонецФункции

 


VBS-Срипт. Получение серийного номера Windows.

' Получение серийного номера Windows.
' Нижеследующий текст необходимо записать в файл, например с именем get_windows_key_via_reg_wmi.vbs

' Командная строка: get_windows_key_via_reg_wmi.vbs
' где - Имя удаленного компьютера.
'
По-умолчанию (без параметра) скрипт выполняется относительно локального компьютера.

' Методы считывания: Утилита REG.EXE  и WMI. Необходимые настройки.
' При считывании из реестра используется утилита REG.EXE.
' При этом на целевом (удаленном) компьютере должна быть запущена служба "Удаленный реестр".
' Если невозможно прочитать значение ключа удаленного реестра, используется WMI.
' При этом на целевом компьютере должен быть настроен WMI для удаленного доступа. см. подробности: //infostart.ru/public/172189

' Windows x32/x64. Особенности использования. Известные проблемы (условие: настройки произведены).
' Рекомендованный способ применения: Локально с правами администратора.
' Получение серийного номера удаленно.
' При удаленном получении серийного номера результат не всегда положительный.
' Исходный ПК x64, Целевой ПК x64 - результат положительный.
' Исходный ПК x64, Целевой ПК x32 - результат положительный.
' Исходный ПК x32, Целевой ПК x32 - результат положительный.
' Исходный ПК x32, Целевой ПК x64 - REG - отрицательный, WMI - положительный результат.
' Пояснение:
' При считывании из x32-Клиента в следствии отображения x64-Ключей на x32-Ключи происходит обращение к ветке реестра:
' HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\DigitalProductID
' Ключ DigitalProductID в разделе HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion по-умолчанию отсутствует.

' Примечание:
' Проверка существования компьютера в сети и его доступности не осуществляется.

On Error Resume Next

const HKLM = &H80000002
const KEY_QUERY_VALUE = &H1

Set WshShell = CreateObject("WScript.Shell")

Set WshArg = WScript.Arguments
If WshArg.Count > 0 Then
    isLocalHost = FALSE
    CompName = WshArg(0)
    If CompName = "." Then
        isLocalHost = TRUE
        CompName = WshShell.ExpandEnvironmentStrings("%computername%")
    End If
Else
    isLocalHost = TRUE
    CompName = WshShell.ExpandEnvironmentStrings("%computername%")
End If

PathFile = WshShell.CurrentDirectory & "\"
FileNameOUT = PathFile & "WinSKey_" & UCase(CompName) & ".txt"

Set FSO = CreateObject("Scripting.FileSystemObject")
Set objFileOUT = FSO.OpenTextFile(FileNameOUT, 2, TRUE)
objFileOUT.Write "PC: " & UCase(CompName) & vbNewLine

' Windows x64.
' При считывании из x32-Клиента в следствии отображения x64-Ключей на x32-Ключи происходит обращение к ветке реестра:
' HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\DigitalProductID
' Ключ DigitalProductID в разделе HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion по-умолчанию отсутствует.

If isLocalHost Then
    ' Извлечение данных из реестра на локальном компьютере.
    sSubKeyName = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\"
    ProductName = WshShell.RegRead(sSubKeyName & "ProductName")
    DigitalProductId = WshShell.RegRead(sSubKeyName & "DigitalProductId")

    WinProductSN = ConvertToKey(DigitalProductId)

    objFileOUT.Write "OS: " & ProductName & vbNewLine
    objFileOUT.Write "REG: " & WinProductSN & vbNewLine
Else
    ' На целевом (удаленном) компьютере должна быть запущена служба "Удаленный реестр".
    sSubKeyName = "\\" & CompName & "\hklm\software\microsoft\windows nt\currentversion"

    ProductName = RegReadKey(sSubKeyName, "ProductName", FSO, PathFile, "EXEC-RUN")
    If NOT IsEmpty(ProductName) Then
        objFileOUT.Write "OS: " & ProductName & vbNewLine
    End If
    
    DigitalProductId = RegReadKey(sSubKeyName, "DigitalProductID", FSO, PathFile, "EXEC-RUN")
    If IsEmpty(DigitalProductId) Then
        ReadRegistry = FALSE
        objFileOUT.Write "REG: Error read " & sSubKeyName & "\DigitalProductId." & vbNewLine
    Else
        ReadRegistry = TRUE
        DigitalProductId = StringToArrayByte(DigitalProductId)

        WinProductSN = ConvertToKey(DigitalProductId)

        objFileOUT.Write "REG: " & WinProductSN & vbNewLine
    End If

    ' На целевом компьютере должна быть настроен WMI для удаленного доступа. см. подробности: //infostart.ru/public/172189
    Set WinMGMT = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & CompName & "\root\default:StdRegProv")
    If Err.Number <> 0 Then
        objFileOUT.Write "WMI: Error= " & Err.Number & ": Error create WinMGMT. " & Err.Description & vbNewLine
        objFileOUT.Close
        WScript.Quit 1
    End If

    sSubKeyName = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\"
    intRes = WinMGMT.CheckAccess(HKLM, sSubKeyName, KEY_QUERY_VALUE, bGranted)
    If intRes <> 0 Then
        objFileOUT.Write "WMI: Error=" & intRes & ": Failed verification of rights to read the " & sSubKeyName & vbNewLine
        objFileOUT.Close
        WScript.Quit 1
    End If

    If bGranted Then
        If IsEmpty(ProductName) Then
            intRes = WinMGMT.GetStringValue(HKLM, sSubKeyName, "ProductName", ProductName)
            If IsEmpty(ProductName) Then
                ProductName = "Windows-?"
            Else
                objFileOUT.Write "OS: " & ProductName & vbNewLine
            End If
        End If
        intRes = WinMGMT.GetBinaryValue(HKLM, sSubKeyName, "DigitalProductId", DigitalProductId)
        If intRes <> 0 Then
            objFileOUT.Write "WMI: Error=" & intRes & ": Error read HKLM\" & sSubKeyName & "DigitalProductId." & vbNewLine
            objFileOUT.Close
            WScript.Quit 1
        End If
    Else
        objFileOUT.Write "WMI: No permission to read the registry key HKLM\" & sSubKeyName & vbNewLine
        objFileOUT.Close
        WScript.Quit 1
    End If

    WinProductSN = ConvertToKey(DigitalProductId)

    objFileOUT.Write "WMI: " & WinProductSN & vbNewLine
End If

objFileOUT.Close
WScript.Quit 0

Function RegReadKey(sSubKeyName, sKeyName, FSO, PathFile, RunExec)
    Dim ObjExec, FileTMP, objFileTMP, intRes, sOUT, IsBreak, ArrOUT, LineKEY, ArrKEY, i, KeyVALUE

    FileTMP = PathFile & sKeyName & ".txt"
    If RunExec = "EXEC" Then    
        Set ObjExec = WshShell.Exec("%comspec% /c reg.exe query " & chr(34) & sSubKeyName & chr(34) & " /v " & sKeyName)
        sOUT = NUL
        IsBreak = FALSE
        Do While TRUE    ' Бесконечный цикл.
            ' Проверяем, достигнут ли конец выходного потока.
            If (Not ObjExec.StdOut.AtEndOfStream) Then
                ' Считываем полностью выходной поток.
                sOUT = sOUT + ObjExec.StdOut.ReadAll
            End If
            If IsBreak Then
                Exit Do    ' Выходим из цикла.
            End If
            ' Проверяем, не завершилось ли выполнение команды.
            If ObjExec.Status=1 Then
                IsBreak = TRUE
            Else
                WScript.Sleep 100    ' Приостанавливаем сценарий на 0,1 сек.
            End If
        Loop
        ArrOUT = Split(sOUT, vbCrLf)    ' Формируем массив из выходного потока.
        LineKEY = ArrOUT(2)        ' Строка, содержащая ключ.
    Else
        intRes = WshShell.Run("%comspec% /c reg.exe query " & chr(34) & sSubKeyName & chr(34) & " /v " & sKeyName & " > " & chr(34) & FileTMP & chr(34), 0, TRUE)
        If intRes = 0 Then
            Set objFileTMP = FSO.OpenTextFile(FileTMP, 1, TRUE)
            objFileTMP.SkipLine
            objFileTMP.SkipLine
            lineKEY = objFileTMP.ReadLine    ' Строка, содержащая ключ.
            objFileTMP.Close
            FSO.DeleteFile(FileTMP)
        Else
            FSO.DeleteFile(FileTMP)
            RegReadKey = NUL
        End If
    End If
    lineKEY = Trim(Replace(lineKEY, "  ", " "))
    ArrKEY = Split(lineKEY)
    KeyVALUE = NUL
    For i = 4 TO UBound(ArrKEY)
        KeyVALUE = KeyVALUE & " " & ArrKEY(i)
    Next
    KeyVALUE = Trim(KeyVALUE)
    RegReadKey = KeyVALUE
End Function

Function StringToArrayByte(byVal regKeySTR)
    Dim newElem, strArr(164)
    ii = -1
    For i = 1 To Len(regKeySTR) Step 2
        ii = ii+1
        newElem = Mid(regKeySTR, i, 2)
        strArr(ii) = StrToByte(newElem)
    Next
    StringToArrayByte = strArr
End Function

Function StrToByte(byval text)
    Dim S1, S2, Value1, Value2

    S1 = Mid(text, 1, 1)
    S2 = Mid(text, 2, 1)

    If S1 = "A" Then Value1 = 160 End If
    If S1 = "B" Then Value1 = 176 End If
    If S1 = "C" Then Value1 = 192 End If
    If S1 = "D" Then Value1 = 208 End If
    If S1 = "E" Then Value1 = 224 End If
    If S1 = "F" Then Value1 = 240 End If

    If S1 = "0" OR S1 = "1" OR S1 = "2" OR S1 = "3" OR S1 = "4" OR S1 = "5" OR S1 = "6" OR S1 = "7" OR S1 = "8" OR S1 = "9" Then Value1 = CInt(S1)*16^1 End If

    If S2 = "A" Then Value2 = 10 End If
    If S2 = "B" Then Value2 = 11 End If
    If S2 = "C" Then Value2 = 12 End If
    If S2 = "D" Then Value2 = 13 End If
    If S2 = "E" Then Value2 = 14 End If
    If S2 = "F" Then Value2 = 15 End If

    If S2 = "0" OR S2 = "1" OR S2 = "2" OR S2 = "3" OR S2 = "4" OR S2 = "5" OR S2 = "6" OR S2 = "7" OR S2 = "8" OR S2 = "9" Then Value2 = CInt(S2) End If

    StrToByte = CByte(Value1+Value2)
End Function

Function ConvertToKey(regKeyHEX8)
    Const KeyOffset = 52
    isWin8 = (regKeyHEX8(66) \ 6) And 1
    regKeyHEX8(66) = (regKeyHEX8(66) And &HF7) Or ((isWin8 And 2) * 4)
    j = 24
    Chars = "BCDFGHJKMPQRTVWXY2346789"    '24 Symbol used in the product keys, Windows and Office.
    Do
        Cur = 0
        y = 14
        Do
            Cur = Cur * 256
            Cur = regKeyHEX8(y + KeyOffset) + Cur
            regKeyHEX8(y + KeyOffset) = (Cur \ 24)
            Cur = Cur Mod 24
            y = y -1
        Loop While y >= 0
        j = j -1
        winKeyOutput = Mid(Chars, Cur + 1, 1) & winKeyOutput
        Last = Cur
    Loop While j >= 0
    If (isWin8 = 1) Then
        keypart1 = Mid(winKeyOutput, 2, Last)
        insert = "N"
        winKeyOutput = Replace(winKeyOutput, keypart1, keypart1 & insert, 2, 1, 0)
        If Last = 0 Then winKeyOutput = insert & winKeyOutput
    End If
    a = Mid(winKeyOutput, 1, 5)
    b = Mid(winKeyOutput, 6, 5)
    c = Mid(winKeyOutput, 11, 5)
    d = Mid(winKeyOutput, 16, 5)
    e = Mid(winKeyOutput, 21, 5)
    ConvertToKey = a & "-" & b & "-" & c & "-" & d & "-" & e
End Function
' Файл get_windows_key_via_reg_wmi.vbs доступен для скачивания в ссылках к обработке Системный администратор: //infostart.ru/public/172189

МА! С уважением к сообществу МА!


Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. TrinitronOTV 7 17.12.12 09:46 Сейчас в теме
тоже присоединюсь к сообществу: большое спасибо за данную публикацию, полезная информация
2. Поручик 4470 17.12.12 11:22 Сейчас в теме
(0) Ради трёх функций надо выделять в отдельную публикацию? Ты случайно не рейтинг с манями нарабатываешь?
4. StepByStep 3440 17.12.12 11:42 Сейчас в теме
(2) Поручик,
1-я часть - То, чем сам пользуюсь, что заинтересовало.
2-я часть - Тематическая - "Работа с Файловой системой".
3-я часть - Тематическая - "Работа с Реестром".
Надо было конечно сразу - по темам, было бы структурировано, что кажется более логично.
Но теперь - что сделано - то сделано.
21. amon_ra 22 08.05.13 12:39 Сейчас в теме
(4) спасибо за статью. Интересует функция ЗарегистрироватьФайлDLL() от имени администратора можно ли зарегать компоненту и что бы uac не появлялась?
22. StepByStep 3440 20.10.13 19:28 Сейчас в теме
(21) amon_ra,
Нативную внешнюю компоненту ?
3. Поручик 4470 17.12.12 11:23 Сейчас в теме
(0) Кстати, Automation.chm ты сам делал?
5. StepByStep 3440 17.12.12 11:47 Сейчас в теме
(3) Поручик,
Automation.chm взял готовым, где взял - теперь уже и не помню.
19. AlexO 130 21.02.13 15:12 Сейчас в теме
(5)
теперь уже и не помню.

я знаю, где взял :)
15. jmw 60 30.01.13 05:47 Сейчас в теме
(3) Порутчик, Automation.chm лежит на Скрипт кодинг-е
http://www.script-coding.com/
6. SeiOkami 1918 17.12.12 11:51 Сейчас в теме
StepByStep, Спасибо большое за интересные статьи, но всё же и вправду объединить их в одну статью было бы лучше. А то как то даже не прилично выглядит)
И всё же плюс =)
7. sstar90 17.12.12 12:35 Сейчас в теме
8. tvixeg 525 18.12.12 12:33 Сейчас в теме
интересует как с помощью WSH можно одновременно изменить размер управляемой формы и перетащить ее верх за границу экрана, сделав таким образом рабочий стол на весь экран. Встречал тут обработку которая может или перетащить за границу экрана, или изменить размер, а одновременно не может. Исходников там нет все зашито в dll.
9. StepByStep 3440 18.12.12 22:44 Сейчас в теме
(8) tvixeg,
WSH - Это сценарии команд, запускаемые интерпретаторами:
- Wscript.exe (если надо, выводит диалоговое окно);
- Cscript.exe (никаких диалоговых окон не выводит).
Wscript.exe - Используется по умолчанию в Windows.

WSH Имеет минимум возможностей по работе с окнами:
- Запустить программу в скрытом/минимальном/стандартном/текущим размером окна.
- Создать ярлык, запускающий программу в максимальном/стандартном/свернутым окном.
- Минимизировать/Отменить минимизацию окон открытых приложений.
- Определить количество открытых окон проводника.
- Расположить окна каскадом.
- Вывести окно сообщений.
- Активизировать окно интересующего приложения.
10. iceflash 4 20.12.12 02:34 Сейчас в теме
(8) tvixeg,
То, о чем вы говорите делается посредством вызовов Win API функций
11. mzelensky 53 20.12.12 07:54 Сейчас в теме
12. AlexBar 51 21.12.12 13:09 Сейчас в теме
Подскажите, как получить из сетевого окружения все компы сети? Доступные домены, IP и имена каждого компа, принадлежность к домену?
StepByStep; +1 Ответить
13. StepByStep 3440 23.12.12 12:31 Сейчас в теме
(12) AlexBar,
Данная часть "WSH. ОТ ТЕОРИИ К ПРАКТИКЕ" посвящена реестру.
Интересующая Вас функция "СетевоеОкружение()" добавлена мной сегодня в Часть I, в сборной, так сказать, "солянке".
Спасибо.
14. StepByStep 3440 29.12.12 16:48 Сейчас в теме
Добавлена новая Функция ЗарегистрироватьФайлDLL().
16. StepByStep 3440 30.01.13 11:44 Сейчас в теме
Добавлены 2 новых функции:
1. RegistryInformation:
Функция, позволяющая получить информацию о реестре локального/удаленного компьютера,
а также дату установки Windows.
2. DescriptionComputer:
Функция, позволяющая записать в описание компьютера (локального/удаленного) имя домена\пользователя, работающего на нем.
Описание компьютера отображается в качестве комментария в сетевом окружении.
17. StepByStep 3440 30.01.13 13:55 Сейчас в теме
Добавлена новая функция WindowsInfo:
Функция, позволяющая получить информацию об установленной Windows на локальном компьютере.
18. StepByStep 3440 21.02.13 13:42 Сейчас в теме
Добавлена новая функция Computer_Programs():
Функция, позволяющая получить информацию об установленных программах локальном/удаленном компьютере.
20. StepByStep 3440 26.02.13 09:39 Сейчас в теме
Функция Computer_Programs() заменена на Computer_Programs_Product().
Добавлена новая функция Computer_Programs_Registry().
Функции, позволяющие получить информацию об установленных программах локальном/удаленном компьютере.
23. StepByStep 3440 20.10.13 19:29 Сейчас в теме
20.10.2013.
Добавлен vbs-Срипт. Получение серийного номера Windows.
24. Ovrfox 14 16.12.15 15:02 Сейчас в теме
Привет всем
Использование * в запросах иногда приводит к существенным временным затратам
Например время исполнения запроса - несколько секунд, а именнованного несколько милисекунд
Win32_ComputerSystem = WinMGMT.ExecQuery("SELECT * FROM Win32_ComputerSystem");
        
        Для Каждого ComputerSystem ИЗ Win32_ComputerSystem Цикл
            NewDescription = ComputerSystem.UserName;
        КонецЦикла;

Win32_ComputerSystem = WinMGMT.ExecQuery("SELECT UserName FROM Win32_ComputerSystem");
        
        Для Каждого ComputerSystem ИЗ Win32_ComputerSystem Цикл
            NewDescription = ComputerSystem.UserName;
        КонецЦикла;
25. StepByStep 3440 24.12.15 17:25 Сейчас в теме
26. ybatiaev 54 14.05.18 15:52 Сейчас в теме
Добрый день!
Подскажите! Не могу понять!
Запускаю Процесс = WshShell.Exec(СтрокаКоманды), где в переменную СтрокаКоманды уже вписана строка создания архива.

В строке запуска присутствует путь создания архива и он является хранилищем(!). Он вида 192.168.0.100, 192.168.0.101 и т.п.
На некоторых терминалках это запускается(в домене), на некоторых нет(не в домене).
Ругается ан ошибки.
1. В отладчике поймал следующую "Ошибка при вызове метода контекста (GetOwner): Произошла исключительная ситуация (SWbemObjectEx): Not found". GetOwner делается для процесса.

2. если в командную строку включить параметр "/OUT Имя лог файла", то в лог выводится следующее
"Ошибка при выполнении файловой операции '\\192.168.0.100\1c\HANDS\ИмяБазы\ИмяБазы 2018-05-14 14-12-35.n1'. 1326(0x0000052E): Вход в систему не произведен: имя пользователя или пароль не опознаны." (с локальными путями нормально)

А, если запустить из под CMD эту строку запуска - всё отрабатывает "на ура"
Все папки хранилища доступны на этом терминальном сервере, все пути реальные и проверены. Доступ ВЕЗДЕ правильный.
Т.е. как бы из под меня с командной строки всё работает, а вот из под EXEC ругается на нелогин. Значит или запускается под другим пользователем. Под каким я не пойму.
Помогите пожалуйста разобраться.
Оставьте свое сообщение

См. также

Быстрая настройка ККМ из 1С с использованием драйвера от Атол без тест-драйвера Промо

Кассовые операции ККМ Кассовые операции v8 Розница Абонемент ($m)

В нашей компании на кассовых местах подключено несколько ККМ от Атола. При подключении к штатным разъемам USB на материнской плате все работает без проблем. Проблемы в тех магазинах, где кассы подключаются через USB-Hub. Данная обработка позволяет быстро, без запуска "Тест-драйвера" и "Управление драйверами", настроить кассовое оборудование. Протестировано на 32-х битной версии 1С и конфигурации 1С:Розница 2.2 с версиями драйверов от Атол 8.16.1.8701 и 9.12.1.6236

1 стартмани

27.08.2018    20490    13    valerasv    7    

Архивирование базы данных 1С средствами сервера

Архивирование (backup) v8 1cv8.cf Россия Абонемент ($m)

Практическое описание технологии архивирования файловой базы 1С средствами Windows Server 2008 R2.

1 стартмани

12.10.2020    667    zemskov    10    

Создаем расширение для скрытия дополнительной информации с формы справочника Партнеры

Обработка справочников v8 1cv8.cf Абонемент ($m)

Всем привет. Статью создал в первую очередь для себя и себе подобных, тех, кто только начинает разбираться в дебрях 1С. Речь здесь пойдет о справочнике "Партнеры", а точнее формы списка этого справочника. Итак. Мы начинаем.

1 стартмани

29.09.2020    583    VID1234    2    

Резервные копии SQL с помощью планировщика виндовс и скрипта

Архивирование (backup) v8 Абонемент ($m)

Всем привет! Сильно не судите, в основном я создаю эту статью для себя, чтобы не забыть об этом, сразу скажу, что я не программист, но по долгу работы приходится решать вопросы. В данной статье я покажу код батника, с помощью которого я делаю резервное копирование баз данных 1С посредством SQL.

1 стартмани

12.03.2020    2669    VID1234    14    

Повышение качества разработок и онлайн контроль ошибок Промо

Журнал регистрации v8 Абонемент ($m)

Анализ ошибок и сбор ошибок журнала регистраций из десятков и сотен баз в одном месте.

09.03.2018    26903    DitriX    48    

Резервное копирование и восстановление БД 1С 8.3 на PostgreSQL 11.5

Архивирование (backup) v8 1cv8.cf Абонемент ($m)

Резервное копирование баз данных 1С является обязательным, чтобы в случае непредвиденной проблемы всегда была возможность все восстановить. В статье мы рассмотрим, как произвести резервное копирование и восстановление из копии базы 1 8.3, работающей на PostgreSQL 11.5.

1 стартмани

30.01.2020    23135    ClickUp    46    

Мультибазовая очистка Журнала регистрации с автоматическим перемещением архивных данных в указанный каталог

Журнал регистрации v8 Россия Абонемент ($m)

На сервере 1С со временем увеличивается в размерах папка , содержащая журналы регистрации 1С и как следствие может возникнуть проблема свободного пространства на системном жестком диске. Чтобы избежать роста папки, необходимо периодически очищать журнал регистрации 1С.

1 стартмани

26.12.2019    3341    bryantsev.yury    3    

Как автоматически заполнить обработкой табличную часть документа "Ввод начальных остатков" (Тип операции = "Расчеты с партнерами"). 1С: ERP

Обработка документов Дебиторская и кредиторская задолженность v8 ERP2 БУ УУ Абонемент ($m)

В 1С: ERP (релиз 2.4.8.82) есть документ "Ввод начальных остатков". Он предназначен для переноса остатков из старых учетных программ при переходе на работу в новой конфигурации. В инструкциях на официальном сайте 1С пользователям новой конфигурации 1С: ERP предлагается заполнить этот документ. Каким образом они будут заполнять, не уточняется. Можно предположить, что предлагается интерактивно, вручную, ввести эти документы. Это следует из картинок в инструкции 1С. В данной статье я предлагаю способ автоматического программного заполнения документа "Ввод начальных остатков" с помощью обработки "Загрузка данных из табличного документа". При этом способе заполнения, время на процесс переноса остатков сокращается в десятки или даже сотни раз.

1 стартмани

20.12.2019    4309    pvlunegov    6    

XDTO - часть 3 Промо

Практика программирования Администрирование данных 1С v8 1cv8.cf Абонемент ($m)

Мы продолжаем цикл статей по изучению подсистемы XDTO в 1С:Предприятие. Это третья часть, в которой мы будем работать непосредственно с подсистемой, рассмотрим главные строительные блоки подсистемы и рассмотрим небольшой пример кода.

3 стартмани

28.01.2013    196598    Evil Beaver    180    

Дополнительные расходы на основе перемещения запасов в УНФ (пошаговая разработка расширения конфигурации)

Обработка документов Учет ТМЦ Расширения v8 УНФ Россия УУ Абонемент ($m)

Доброго времени! Предлагаю небольшое расширение для конфигурации "Управление нашей фирмой", позволяющее включать документ "Перемещение запасов" в таблицу оснований документа "Дополнительные расходы".

1 стартмани

17.10.2019    6627    aximo    4    

Полное копирование одной формы в другую

Практика программирования Универсальные обработки Работа с интерфейсом v8 1cv8.cf Абонемент ($m)

Однажды я столкнулся с необходимостью открыть форму ЛЮБОГО документа с определенными изменениями, не зависящими от структуры объекта (например, заблокировать все кнопки). В интернете решения я не нашел. Обычно на форумах на запросы подобного рода отвечают чем-то вроде "покажи первоначальную задачу, а не спрашивай как реализовать то, что ты придумал". Тем не менее, мне стало интересно, как это можно сделать.

1 стартмани

03.10.2019    5972    nekit_rdx    24    

Многопоточная обработка данных на примере перепроведения документов

Обработка документов Практика программирования v8 ERP2 УТ11 КА2 Абонемент ($m)

Дальнейшее развитие темы фоновой обработки данных - проведение документов в потоках. Настройка параметров и запуск основного процесса (менеджера потоков). Разбивка документов для проведения на не связанные друг с другом наборы и запуск дополнительных фоновых заданий для отдельных потоков. Отслеживание выполнения каждого потока в родительском сеансе.

1 стартмани

17.09.2019    10151    ids79    46    

Обновление типовой конфигурации сразу на несколько релизов (8.2) [не для начинающих] Промо

Администрирование данных 1С v8 1cv8.cf Россия Абонемент ($m)

Как обновить типовую конфигурацию с давно устаревшего релиза на текущий, но не тратить время на последовательное обновление через .cfu? Есть вариант, который позволяет сэкономить довольно много времени. Он не самый очевидный и несколько рискованный (потому и не для начинающих) – через файл .cf конфигурации поставщика. Взять такой .cf можно даже из нетиповой базы актуального релиза! Способ подходит для тех, кто по разным причинам не может обновиться через интернет. Да, И НЕ ЗАБЫВАЕМ ПРЕДВАРИТЕЛЬНО ОБНОВЛЯТЬ ПЛАТФОРМУ!!!

13.02.2012    177827    vvr908    139    

1С и PowerShell - обновление из хранилища

Администрирование данных 1С Инструментарий разработчика v8 Абонемент ($m)

Пример скрипта, упрощающего работу.

1 стартмани

29.08.2019    9279    Jokemas    31    

Централизованное управление кластером 1С Предприятия, состоящим из нескольких рабочих серверов, работающих на платформе GNU/Linux

Сервисные утилиты v8 Абонемент ($m)

При эксплуатации крупных информационных систем, в состав которых могут входить десятки серверов 1С Предприятия, зачастую возникают ситуации, требующие однотипных действий на всех серверах кластера 1С Предприятия или на всех серверах контура. В настоящей статье представлен способ централизованного управления серверами 1С Предприятия, работающими на платформе GNU/Linux. Подобный подход может быть использован и для других задач, возникающих в процессе эксплуатации крупных систем, с целью сокращения как временных затрат специалистов, так и времени простоя системы.

1 стартмани

26.08.2019    3942    Sloth    0    

1С + IIS + SSL: Перевод опубликованной базы на защищенное соединение https с сертификатом от Let's encrypt

Администрирование данных 1С v8 1С:CRM Абонемент ($m)

Всем Доброго времени! Предлагаю Вам небольшую базовую инструкцию, где я опишу, как быстро перевести опубликованную в веб базу 1С на защищенное https соединение, используя стандартный IIS сервер и бесплатный сертификат SSL от Let's encrypt.

1 стартмани

10.08.2019    25695    aximo    37    

Циклический бэкап по дням недели Промо

Архивирование (backup) v7.7 v8 1cv8.cf 1cv7.md Россия Абонемент ($m)

В интернете часто можно встретить статьи о том, как написать скрипты для автоматического архивирования баз MSSQL. Методика, в них предлагаемая создает новый архив каждый новый день. Более подробно об этом можно почитать в http://outcoldman.ru/ru/blog/show/127 Я предлагаю незначительное усовершенствование скриптов и генерацию архивов по дням недели с циклической их перезаписью. Скрипт тоже не полностью мой, а скомпонован из различных примеров, найденных в интернете, но, надеюсь, именно представленный вариант будет полезен не только мне.

1 стартмани

15.06.2010    39592    milkers    15    

АИТП. Управляем множественными версиями платформы на серверах, под управлением ОС Linux

Администрирование данных 1С v8 Абонемент ($m)

В статье рассмотрен демонстрационный пример использования конфигурации АИТП, для автоматизации управления множественными версиями платформы 1С:Предприятие на серверах, под управлением ОС Linux.

1 стартмани

16.06.2019    7541    blackhole321    9    

АИТП. Управляем информационными базами

Администрирование данных 1С v8 Абонемент ($m)

В статье, на демонстрационном примере, рассматривается использование конфигурации АИТП для автоматизации управления информационными базами 1С:Предприятие.

1 стартмани

29.05.2019    4983    blackhole321    0    

Собственный алгоритм нумерации документов определенного вида

Практика программирования Обработка документов Разработка v8 БП3.0 Россия Абонемент ($m)

Создание собственного, отличного от платформенного алгоритма нумерации документов определенного вида.

1 стартмани

11.04.2019    3707    xan333    12    

Соответствие типов данных 1С:Предприятие 8.x в MS SQL 2008 Промо

Практика программирования Администрирование данных 1С Загрузка и выгрузка в Excel v8 1cv8.cf Абонемент ($m)

Соответствие типов данных 1С:Предприятие 8.x и MS SQL 2008

1 стартмани

13.01.2013    22523    YPermitin    8    

Сторнирование документов отсутствия по невыясненной причине после переноса данных. Замена на больничный лист. ЗУП 3.1.8

Обработка документов Бухгалтерский учет Зарплата Учет рабочего времени Зарплата Учет рабочего времени v8 v8::СПР ЗУП3.x Россия БУ Абонемент ($m)

Наши кадры в ЗУП 2.5 на время отсутствия документов о больничном вводят документ "Невыходы в организациях". Спокойно рассчитывают, а когда документы о больничном листе приносят - сторнируют невыход. В целом ничего криминального, и практика частая в различных организациях, но есть нюансы, при переходе на ЗУП 3.1.

1 стартмани

22.03.2019    5823    Mogilnikova    0    

Easy print своими руками

Администрирование данных 1С v8 ERP2 Россия Абонемент ($m)

Статья описывает альтернативные способы печати из терминальной сессии на локальный принтер.

1 стартмани

05.03.2019    2829    kolegov    8    

Баг или фича? Неожиданное поведение платформы

Практика программирования Тестирование и исправление Разработка v8 1cv8.cf Абонемент ($m)

Рассмотрим несколько случаев неожиданного поведения платформы 1С, а также что с этим можно cделать.

18.02.2019    23664    YPermitin    89    

1С и Windows Script Host (WSH) и Windows Management Instrumentation (WMI). ОТ ТЕОРИИ К ПРАКТИКЕ. Часть II Промо

Универсальные обработки Администрирование данных 1С v8 1cv8.cf Абонемент ($m)

Описание возможностей Windows Script Host и Windows Management Instrumentation. Подборка "скриптовых" функций и процедур.

16.12.2012    32616    StepByStep    7    

Как отправить ошибки из журнала регистрации на почту?

Журнал регистрации v8 УПП1 Абонемент ($m)

Процедуры отправки ошибок из журнала регистрации на почту. Журнал регистрации выгружается в файл Excel, далее прикрепляется к письму. Для отправки писем создано регламентное задание.

1 стартмани

06.02.2019    9174    wowik    0    

HTML в новой версии 8.3.14 на примере 3-х JavaScript библиотек: AmCharts, HighCharts, DHTMLX

Универсальные обработки Практика программирования Разработка v8 1cv8.cf Абонемент ($m)

Тестируем возможности HTML в новой версии 8.3.14 платформы на примере 3-х JavaScript библиотек: AmCharts, HighCharts, DHTMLX.

1 стартмани

29.01.2019    29580    Synoecium    46    

PostgreSQL для 1С 8.3: ускоряем резервное копирование и восстановление для отдельной базы очень большого размера

Производительность и оптимизация (HighLoad) Тестирование и исправление v8 1cv8.cf Россия Абонемент ($m)

В этой статье разберем оптимизацию работы с моментальным снимком отдельной базы 1С в кластере PostgreSQL средствами pg_dump.exe, pg_restore.exe, psql.exe в среде Windows Server 2008,2012,2016. А также разберем проблемные ситуации и неожиданные ограничения при работе 1С в связке с PostgreSQL. Для Linux все аналогично.

1 стартмани

03.12.2018    29627    vsasav    69    

Имплементация системы мониторинга кластеров 1С (и лицензий)

Администрирование данных 1С v8 Абонемент ($m)

В этой статье мы научимся хранить данные о сеансах консоли кластеров 1С в СУБД, вынимать и агрегировать информацию о лицензиях.

1 стартмани

02.12.2018    11359    MrWonder    16    

Какой SQL Server лучше для сервера 1С

Администрирование данных 1С v8 Абонемент ($m)

Нагрузочное тестирование TPC 1C Гилева, различных версий MSSQL и Windows server.

1 стартмани

03.11.2018    26964    demon_sl    146    

Go. Разбор лога технологического журнала. Достойная альтернатива perl'у

Сервисные утилиты Инструментарий разработчика v8 1cv8.cf Абонемент ($m)

Началось все с того, что я познакомился с перловыми скриптами для парса ТЖ которые размещены на kb.1c.ru (например в этой статье https://kb.1c.ru/articleView.jsp?id=113). По началу мне дико понравилось то, что перл разбирал гигабайты логов за считанные минуты, но позитив мой угасал обратно пропорционально с тем, насколько глубже я погружался в "кроличью нору" ....

1 стартмани

24.10.2018    20638    lazarenko    39    

Мониторинг журнала регистрации при помощи Powershell

Сервисные утилиты Журнал регистрации v8 Абонемент ($m)

Работа с журналом регистрации в формате SQLite внешними средствами на примере мониторинга изменений в конфигурации базы данных.

1 стартмани

12.07.2018    13090    user768334    7    

Журнал регистрации 1С (sql lite) в web app

Журнал регистрации v8 1cv8.cf Абонемент ($m)

Данная публикация рассматривает построение компонентного решения работы журнала регистрации в стороннем приложении(web app). Встала задача миграции sql lite жр во внешнюю базу. Данное решение было создано: 1. для хранения жр за весь период 2. для ускорения работы с жр 3. для ускорения сервера предприятия, так как именно он (а точнее рагент) пытается записать данные в жр sql lite(фактически файл на диске), после увеличения размера файла более 10 гб, поступали жалобы по вопросу быстродействия 1с (и не только ради этого) Данная публикация может быть полезной администраторам, программистам, оптимизаторам.

1 стартмани

09.07.2018    9740    dmarenin    8    

"Шоколадная" установка 1С

Администрирование данных 1С v8 Россия Абонемент ($m)

Статья о том, как быстро установить и настроить платформу 1С через одну команду: choco install 1c.

1 стартмани

27.06.2018    15222    Scorpion4eg    41    

Tool1CD: отрежем донорскую почку

Сервисные утилиты Разработка внешних компонент v8 Розница Абонемент ($m)

Ваша база мертва? Что ж, кое-что в ней ещё теплится.

1 стартмани

15.05.2018    19011    baton_pk    13    

Исполняемый .bat файл для резервного копирования 1С

Архивирование (backup) v8 1cv8.cf Абонемент ($m)

Простейшее решение для выгрузки .dt, доступное любому пользователю 1С.

1 стартмани

14.05.2018    26597    SergPetr    32    

Создание подключаемой обработки табличной части с диалогом запроса параметров заполнения (управляемые формы)

Обработка документов Обработка справочников Практика программирования v8::УФ 1cv8.cf Абонемент ($m)

Пошаговый пример покажет, как сделать обработку табличной части для документа, предварительно открывающую диалоговое окно, где пользователь может указать требуемые характеристики (параметры), по которым произойдет обработка.

1 стартмани

03.05.2018    56973    Mirage78    19    

Использование регулярных выражений (RegExp) в Linux

Сервисные утилиты Администрирование данных 1С Внешние источники данных v8 Абонемент ($m)

Описывается способ использования регулярных выражений (RegExp) в Linux с использованием тех же компонентов, что и в Windows (COM-объекты VBScript.RegExp).

1 стартмани

20.04.2018    8829    vsbronnikov    12    

Настройка регламентных заданий с использованием bat-файлов или vbs-скриптов через механизм Task Scheduler Windows

Администрирование данных 1С v8 Абонемент ($m)

Развернутое описание всех нюансов настройки регламентных заданий без редактирования конфигурации через внешние обработки 1С с использованием bat-файлов или скриптами через механизм Task Scheduler Windows.

1 стартмани

17.04.2018    11672    plebedinskiy    7    

Лицензия не получена: Ошибка программного лицензирования Error=-2147217394 (0x8004100E)

Администрирование данных 1С Информационная безопасность v8 Абонемент ($m)

Решение проблемы пропавшей лицензии и ошибки при ее восстановлении - "Лицензия не получена: Ошибка программного лицензирования Error=-2147217394 (0x8004100E)".

1 стартмани

06.04.2018    12608    a_titeev    4    

Скрипт для установки платформы 1С

Администрирование данных 1С v8 Абонемент ($m)

Еще один баян по установке 1с8 на клиентских машинках без использования групповых политик безопасности.

1 стартмани

07.03.2018    9268    alex0402    7    

Мониторинг изменений рабочих конфигураций. Часть 1. Сохранение конфигураций из базы SQL без конфигуратора

Сервисные утилиты v8 1cv8.cf Абонемент ($m)

Выгружаем исходники из SQL напрямую скриптом, собираем CF и контролируем реальные изменения в рабочих базах из браузера.

1 стартмани

28.02.2018    19598    user768334    25    

Автоматическое оповещение пользователей при проведении документа Поступление товаров, с возможностью дублировать сообщения другому сотруднику

Практика программирования Обработка документов Документооборот и делопроизводство Документооборот и делопроизводство v8 v8::ОУ УТ11 Россия Абонемент ($m)

Данная разработка автоматически оповещает пользователя о поступлении товара по заказу клиента. Схема работы : Заказ клиента > Заказ поставщику > Поступление товаров. Оповещается пользователь, который создавал заказ клиента (менеджер). Оповещение выводится на экран и ждет подтверждения о прочтении. После подтверждения - фиксируется время прочтения оповещения. Есть возможность просматривать все сообщения по пользователю за любой период. Есть возможность дублировать сообщение другим пользователям. Например, если менеджер в отпуске, и его заменяет другой менеджер, и оповещения будут отправляться второму (третьему и т.д.).

1 стартмани

26.02.2018    13382    Natali307192013    8    

Обновление конфигураций на БСП, у которых в расширениях есть собственные объекты с данными

Практика программирования Тестирование и исправление v8 v8::УФ 1cv8.cf Абонемент ($m)

Показан способ обновления конфигураций, основанных на БСП, в тех случаях, когда в расширениях имеются собственные объекты данных (Справочники, Документы, Регистры сведений, Планы обмена).

1 стартмани

12.02.2018    22325    t.v.s.    41    

Практика доступа в базу 1С через протокол oData. Чтение данных

Сервисные утилиты Практика программирования Администрирование данных 1С v8 1cv8.cf Абонемент ($m)

Для чего нужен доступ в базу 1С через REST-интерфейс по протокол oData? Как его организовать? Как не будучи гуру в JavaScript и .NET получить быстрый визуальный доступ к данным базы 1С? Попробую дать ответ на эти вопросы и прокомментирую некоторые нюансы, с которыми я столкнулся.

1 стартмани

11.12.2017    106188    Dementor    57