d9e5a92d

Глава 9 Использование Active Directory Service Interfaces

Понятие

Технология Active Directory Service Interfaces (ADSI) предоставляет объектную модель, которая обеспечивает единообразный, не зависящий от конкретного сетевого протокола, доступ из программ или сценариев WSH к функциям различных каталогов (Active Directory для Windows 2000/Windows Server 2003, Windows Directory Service для Windows NT 4.0, NDS для Novell NetWare 4.x/5.x).

Объекты ADSI включены в операционные системы Windows XP/2000/2003, а также могут быть установлены в более ранних версиях, для чего их нужно загрузить с сервера компании Microsoft.

Для пользователей локальных или глобальных сетей важно уметь находить и использовать объекты разных типов (зарегистрированные пользователи, доступные сетевые принтеры и очереди печати и т. д.), которых в крупной сети может быть огромное количество. Администраторы сети должны поддерживать эти объекты в работоспособном состоянии. Под службой каталога (Directory Service) понимается та часть распределенной компьютерной системы (компьютерной сети), которая предоставляет средства для поиска и использования имеющихся сетевых ресурсов. Другими словами, служба каталога — это единое образование, объединяющее данные об объектах сети и совокупность служб, осуществляющих манипуляцию этими данными.

В гетерогенной (неоднородной) компьютерной сети могут одновременно функционировать несколько различных служб каталогов, например, NetWare Bindery для Novell Netware 3.x, NDS для Novell NetWare 4.x/5.x, Windows Directory Service для Windows NT 4.0 или Active Directory для Windows 2000. Естественно, для прямого доступа к разным службам каталогов приходится использовать различные инструментальные средства, что усложняет процесс администрирования сети в целом.

Для решения этой проблемы фирмой Microsoft была разработана технология Active Directory Service Interfaces (ADSI), которая предоставляет набор объектов ActiveX, обеспечивающих единообразный, не зависящий от конкретного сетевого протокола, доступ к функциям различных каталогов. Немаловажным фактом является то, что объекты ADSI включены в операционные системы Windows ХР/2000. Также они могут быть установлены в более ранних версиях операционной системы, для чего их нужно скачать с сервера Microsoft.

Служба Active Directory состоит из четырех основных частей:



П Служба DNS (Domain Name Service);

О WinNl 'Provider Service;

? NWCOMPA T ProviderService;

П Протокол LDAP (Lightweight Directory Access Protocol).

Традиционная в сетях TCP/IP служба DNS используется, в частности, для поиска контроллеров домена, а благодаря протоколу LDAP клиенты могут по имени находить в каталоге Active Directory нужные объекты и получать доступ к их атрибутам. С помощью службы WinNT Provider производится доступ к доменам сети в операционных системах Windows NT, а посредством службы NWCOMPAT — в Novell NetWare 3.x.

В данной главе будет рассмотрена только служба WinNT Provider, как самая простая и наиболее используемая.

Применяя объекты ADSI и службы WinNT Provider можно, например:

О получить список имеющихся в локальной сети доменов;

? получить список имеющихся в домене рабочих станций;

П получить список всех групп, определенных в домене или на компьютере; П добавить и удалить пользователя домена или компьютера;

П определить всех пользователей заданной группы или все группы, в которые входит определенный пользователь;

П просмотреть атрибуты пользователя и изменить его пароль.

Далее будут рассмотрены практические примеры работы с ADSI.

Формирование дерева объектов WinNT Provider

Все объекты службы WinNT Provider представляются в виде дерева, структура которого определена в табл. 9.1.

Таблица 9.1. Иерархия классов WinNT Provider
Имя класса Описание
Namespace Самый верхний уровень пространства имен.

Пример:

Obj = ПолучитьСОМОбъект("WinNT://")
Domain Домен Windows NT.

Пример:

Obj = ПолучитьСОМОбъект("WinNT://MyDomain")

User

Учетная запись пользователя.

Пример:

Obj=ПолучитьСОМОбъект("WinNT://MyDomain/User")

Группа учетных записей, управляющая правами доступа. Пример:

0^=ПолучитьС0М0бъект ("WinNT: //MyDomain/Group")

Пользователи группы Прочие группы

Group

UserGroupCollection

GroupCollection

Computer

Windows NT-сервер или рабочая станция.

Пример:

Obз=ПолучитьСОМОбъект("WinNT://МуServeг")

Очередь задач принтера.

Пример:

Obj=ПолучитьСОМОбъект("WinNT://MyServer/aPrinter")

Коллекция задач принтера

Очередь задач программы-планировщика принтера

PrintJ ob

PrintJobsCollection PrintQueue

Service

FileService

FileShare

Resource

Session

User

Group

Запущенные сервисы Сервис доступа к файлам Общедоступные файлы Ресурсы сервиса

Активные файловые подключения Локальные пользователи.

Пример:

Obj = Получить СОМОбъект ("WinNT://MyServer/User")

Локальные группы.

Пример:

Obj = • ПолучитьСОМОбъект("WinNT://MyServer/Group")

Коллекция локальных групп Схема WinNT-контейнера Схема определения классов Схема определения свойств Синтаксис свойств

Таблица 9.1 (окончание)
Имя класса Описание
UserCollection Коллекция локальных пользователей группы
Grouped lection

Schema

Class

Property

Syntax
В качестве имени домена необходимо указывать имя NETBIOS, т. к. WinNT Provider не поддерживает работу с DNS-именами.

Для создания определенного объекта необходимо подсоединиться к целевому контейнеру используя функцию Получитьсомобъект. Для точной идентификации класса создаваемого объекта можно указать его имя через запятую (листинг 9.1).

// Создание объекта очереди задач принтера на компьютере "Comp"

Queue = ПолучитьСОМОбъект("WinNT:// Domain/Comp/aPrinter,printQueue");

// Создание объекта пользователя "МА?"

User = ПолучитьСОМОбъект("WinNT:// Domain/МА?,user");

// Создание объекта компьютера "Сотр"

Computer = ПолучитьСОМОбъект("WinNT://Comp");
Для формирования дерева объектов WinNT Provider используется рекурсивная процедура ВывестиУровеньПространства, показанная в листинге 9.2.

....................................................................................

Листинг 9.2. Формирование дерева объектов WinNT Provider

// Вызов процедуры и инициализация рекурсии

ВывестиУровеньПространства ("WinNT: ", ТабличноеПолеПространствоШен. Строки)

// Рекурсивная процедура вывода очередного уровня иерархии

Процедура ВывестиУровеньПространства(Имя, ТП)

// Связываемся с корневым объектом Namespace

NameSpace = ПолучитьСОМОбъект(Имя);

11 Перебираем элементы коллекции Попытка

Для каждого Domain Из NameSpace Цикл СтрокаТП = ТП,Добавить О;

СтрокаТП.КолонкаИмя = Domain. Name;

// Ограничиваем иерархию 4-ю уровнями Если СтрокаТП.Уровень () < 4 Тогда

ВывестиУровеньПространства (Имя + ? (Имя="Иіп№Г: "/") +

Domain.Name, СтрокаТП.Строки);

КонецЕсли;

КонецЦикла;

Исключение

КонецПопытки;

КонецПроцедуры // ВывестиУровеньПространства()

В данном примере для простоты вся выборка объектов определенного уровня взята В программные скобки Попытка...Исключение...КонецПопытки. Это сделано для того, чтобы процедура не отработала с критической ошибкой, при отсутствии объектов в коллекции.

Вся иерархия объектов выводится в дерево значений, которое расположено на форме обработки С именем ТабличноеПолеПространствоИмен.

Приведенный в листинге 9.2 пример покажет дерево объектов локальной сети в соответствии с иерархией, приведенной в табл. 9.1.

Вывод списка всех доменов локальной сети

Для вывода всех доменов локальной сети необходимо выполнить следующую простую последовательность действий.

1. Используя функцию получитьсомобъект, подсоединимся к целевому контейнеру "WinNT:", который будет содержать коллекцию доменов.

2. С помощью конструкции для каждого...Из...Цикл...КонецЦикла перебираем полученную коллекцию.

Пример вывода списка доменов показан в листинге 9.3.

Листинг 9.3. Вывод списка всех доменов локальной сети

// Вывод списка всех доменов локальной сети Домены = ПолучитьСОМОбъект("WinNT:");

Для каждого Домен Из Домены Цикл Сообщить(Домен.Name);

КонецЦикла;

Вывод списка пользователей группы

Для вывода списка пользователей группы необходимо выполнить следующую простую последовательность действий.

1. Используя функцию пелучитьсоксбъект, подсоединиться к целевому Контейнеру "WinNT: //<ШяКомпьютера>/<ИмяГруппы>, Group", который будет содержать коллекцию пользователей. С помощью дополнения Group указывается, что создается элемент группы.

2. С помощью конструкции Для каждого...из...Цикл...конецЦикла перебираем полученную коллекцию.

Пример вывода списка пользователей группы "Пользователи" приведен в листинге 9.4.

Ш—г:........ ----——ШВШШШШ—

Листинг 9.4. Вывод списка пользователей группы

// Связываемся с компьютером

Obj = ПолучитьСОМОбъект("WinNT://" + ИмяКомпьютера +

"/Пользователи,group");

Сообщить("Список пользователей компьютера " + ИмяКомпьютера);

// Выборка всех пользователей из коллекции Для каждого Пользователь Из Obj.Members О Цикл Сообщить(Пользователь.Name);

КонецЦикла;

Создание и удаление пользователей

Для создания нового пользователя необходимо выполнить следующую последовательность действий.

1. Используя функцию получитьсомобъект, подсоединиться к целевому КОНТеЙНеру "WinNT://<ИмяКомпьютера> ".

2. Используя метод create из ADSI, создадим новый объект user в локальном кэше свойств. Метод create содержит два параметра: имя класса создаваемого объекта и имя объекта.

3. Используя свойство Description, можно задать текстовое описание пользователя.

4. С помощью метода setPassword можно задать пароль пользователя.

5. С помощью метода Set in?о из ADS1 новый объект записывается в каталог. Пример создания нового пользователя приведен в листинге 9.5.

; Листинг 9.5. Создание нового пользователя

// Связываемся с компьютером

Computer = ПолучитьСОМОбъект("WinNT://" + ИмяКомпьютера};

// Создаем объект класса User

User = Computer.Create("user", ИмяПользователя);

// Добавляем описание созданного пользователя

User.Description = Описание;

// Задаем пароль пользователя

User.SetPassword(ПарольПользователя);

// Сохраняем информацию на компьютере

User.Setlnfo();

Для удаления локального пользователя достаточно соединиться с компьютером и вызвать метод Delete, указав имя класса удаляемого объекта и имя самого объекта (листинг 9.6).

Н

HI

Листинг 9.6. Удаление пользователя

// Связываемся с компьютером

Computer = ПолучитьСОМОбъект("WinNT://" + ИмяКомпьютера);

// Удаление пользователя

Tmp = Computer.Delete("user", ИмяПользователя);

Создание и удаление групп пользователей

Создание и удаление групп пользователей происходит аналогичным образом, что и создание и удаление пользователей. Исключением является то, что в первом параметре метода Create указывается имя класса "Group" (листинг 9.7).

--------------------_г

..........................

Листинг 9.7. Создание новой группы пользователей

// Связываемся с компьютером

Computer = ПолагатьСОМОбъект("WinNT://" + ИмяКомпьютера);

// Создаем объект класса Group

User = Computer.Create("group", ИмяГруппы);

/ /Добавляем описание созданной группы User.Description = Описание;

// Сохраняем информацию на компьютере

User.Setlnfо();

Удаление группы происходит аналогично удалению пользователя — при помощи Метода Delete.

Манипулирование с учетными записями

С помощью службы WinNT Provider можно управлять учетными записями: создавать, изменять пароль, отключать учетные записи. Примеры создания и удаления были показаны в программных кодах, приведенных в листингах 9.5 и 9.6.

В листинге 9.8 приведен пример инициализации выдачи запроса на смену пароля, который должен появиться при следующем подключении пользователя.

Листинг 9.8. Смена пароля пользователя при следующем подключении

// Получаем объект пользователя

User = ПолнитьСОМОбъект ("WinNT://" + ИмяКомпьютера + "/" + ИмяПользователя + ",user");

// Указываем, что пользователь должен сменить пароль // при следующем подключении

User.Put("PasswordExpired", 1);

// Сохраняем информацию на компьютере

User.Setlnfo();

Предупреждение ("При следующем подключении пользователя " +

ИмяПользователя + " к компьютеру " + ИмяКомпьютера +

" будет запрошен ввод нового пароля.”) ,•

В данном примере в свойство пользователя PasswordExpired записывается значение 1, указывающее на то, что при подключении пользователя к компьютеру появится запрос на смену пароля. Метод setlnfo производит сохранение информации на компьютере.

С помощью свойства пользователя Account Disabled можно отключить или включить учетную запись, записав в него соответственно значение истина

ИЛИ Ложь.

В листинге 9.9 приведен пример отключения учетной записи.

............... ............... Г--.-'-""”"

Листинг 9.9. Отключение учетной // Получаем объект пользователя

User = ПолучитьСОМОбъе :кт("WinNT://" + ИмяКомпьютера + +

ИмяПользователя);

// Отключить учетную запись

User.AccountDisabled = Истина;

// Сохраняем информацию на компьютере

User.SetlnfoO ;

// Проверка отключения учетной записи

Сообщить("Проверка отключения учетной записи " + ИмяПользователя + " +

User.AccountDisabled);

С помощью свойства AccountExpirationDate можно ограничить срок действия учетной записи. В листинге 9.10 приведен пример, в котором учетная запись действительна до 5 июня 2007 ГОДИ.

I Листинг 9.10, Установить дату истечения действия учетной записи

// Получаем объект пользователя

User = ПолучитьСОМОбъект ("WinNT://" + ИмяКомпьютера + +

ИмяПользователя);

// Установить дату истечения действия учетной записи

User. AccountExpirationDate = "05/06/2007";

// Сохраняем информацию на компьютере

User.SetlnfoO;

^ Примечание_

При разборе данного примера обратите внимание на формат даты, передаваемой В СВОЙСТВО AccountExpirationDate.

Вывод информации о компьютере и пользователе

Как видно из табл. 9.1, служба WinNT Provider позволяет работать с множеством объектов, определенных в сети. Каждый из объектов имеет свой уникальный набор свойств, которые приведены в табл. 9.2.

^ Примечание_

Назначение данных свойств расписываться не будет.

Таблица 9.2. Свойства классов WinNTProvider
Имя класса Поддерживаемые свойства
Computer
Domain

FileService

FileShare

FPNWFileService

Division

Owner

OperatingSystem OperatingSystemVersion

Processor

ProcessorCount

MinPasswordLength

MinPasswordAge

MaxPasswordAge

MaxBadPasswordsAllowed

PasswordHistoryLength

AutoUnlocklnterval

LockoutObservationlnterval

HostComputer

DisplayName

Version

ServiceType

StartType

Path

ErrorControl

LoadOrderGroup

Description

MaxUserCount

ServiceAccountName

Dependencies

CurrentUserCount

Description

HostComputer

Path

MaxUserCount

HostComputer

DisplayName

Version

ServiceType

StartType

Path

ErrorControl

LoadOrderGroup

Таблица 9.2 (продолжение)
Имя класса Поддерживаемые свойства
FPNWFileService ServiceAccountName
Dependencies

Description

MaxUserCount

FPNWFileShare CurrentUserCount

HostComputer

Path

MaxUserCount

FPNWResource User

Path

LockCount

FPNWSession

Group

Namespace

PrintJob

PrintQueue

User

Computer

ConnectTime

Description

objectSid

Все перечисленные в таблице свойства

HostPrintQueue

User

TimeSubmitted

TotalPages

Size

Description

Priority

StartTime

UntilTime

Notify

TimeElapsed

PagesPrinted

Position

Action

ObjectGUID

PrinterPath

PrinterName

Model

Datatype

PrintProcessor

PrintDevices

Таблица 9.2 (продолжение)
Имя класса Поддерживаемые свойства
Pri.ntQueue Description

HostComputer Location

StartTime

UntilTime

DefaultJobPriority

JobCount

Priority

Attributes

BannerPage

ObjectGuid

Action
Resource

Service

Session

User

User

Path

LockCount

HostComputer

LoadOrderGroup

ServiceAccountName

Dependencies

StartType

ServiceType

DisplayName'

Path

ErrorControl

Computer

ConnectTime

IdleTime

User

AccountExpirationDate AutoUnlocklnterval BadPasswordAttempts

Description

FullName

HomeDirDrive

HomeDirectory

UserFlags

LockoutObservationlnterval

LoginHours

Таблица 9.2 (окончание)

Имя класса Поддерживаемые свойства

User LastLcgin

LastLogoff

LoginScript

LoginWorkstations

MinPasswordAge

MinPasswordLength

MaxBadPasswordsAllowed

MaxLogins

MaxPasswordAge

MaxStorage

ObjectSid

Parameters

PasswordAge

PasswordExpirationDate

PasswordExpired

PasswordHistoryLength

PrimaryGroupID

Profile

Важно отметить, что перечисленные в табл. 9.2 свойства не всегда будут доступны. Наличие тех или иных свойств зависит от версии операционной системы и версии установленной компоненты ADSI.

В листинге 9.1 I приведен пример вывода свойств компьютера (установленная операционная система, имя процессора и т. п.).

Листинг 9.11. Вывод информации о компьютере

¦НМНННННИНМММІННННІМПнНМИМЯІІННННЯШі

// Получаем объект компьютера

Computer = ПолучитьСОМОбъект("WinNT://" + ИмяКомпьютера);

// Выводим свойства компьютера

Сообщить("Division = " + Computer.Division);

Сообщить("Owner = " + Computer.Owner);

Сообщить("OperatingSystem = " + Computer.OperatingSystem);

Сообщить("OperatingSystemVersion = " + Computer.OperatingSystemVersion); Сообщить("Processor = " + Computer.Processor);

Сообщить("ProcessorCount = " + Computer.ProcessorCount);

Создав объект user, можно выводить свойства пользователя (имя пользователя, описание, время подключения, имя рабочей папки и т. п.). Пример вывода свойств пользователя приведен в листинге 9.12.

Листинг 9.12. Вывод информации о пользователе

... .................. ... :. .....................................П..—..л— ......................

// Получаем объект пользователя

User = ПолучитьСОМОбъект("WinNT://" + ИмяКомгіьютера + +

ИмяПользователя);

// Выводим свойства пользователя

Сообщить("FullName = " + User.FullName);

Сообщить("AccountExpirationDate = " + User.AccountExpirationDate); Сообщить("AutoUnlocklnterval = " + User.AutoUnlocklnterval);

Сообщить("BadPasswordAttempts = " + User.BadPasswordAttempts); Сообщить("Description = " + User.Description);

Сообщить("HomeDirDrive = " + User.HomeDirDrive);

Сообщить("HomeDirectory = " + User.HomeDirectory);

Сообщить("UserFlags = + Cser , UserFlags) ;

Сообщить("LockoutObservationlnterval = " +

User.LockoutObservationlnterval);

Сообщить("LoginHours = " + User.LoginHours);

Сообщить("LastLogin = " + User.LastLogin);

Сообщить ("LoginScri.pt = + User, LoginScr ipt) ;

Сообщить("MinPasswordAge = " +User.MinPasswordAge);

Сообщить("MinPasswordLength = " + User.MinPasswordLength);

Сообщить("MaxBadPasswordsAllowed = " + User.MaxBadPasswordsAllowed); Сообщить("MaxPasswordAge = " + User.MaxPasswordAge);

Сообщить("MaxStorage = " + User.MaxStorage);

Сообщить("ObjectSid = " + User.ObjectSid);

Сообщить("Parameters = " + User.Parameters);

Сообщить("PasswordAge = " + User.PasswordAge);

Сообщить("PasswordExpirationDate = " + User.PasswordExpirationDate); Сообщить("PasswordExpired = " + User.PasswordExpired);

Сообщить("PasswordHistoryLength = " + User.PasswordHistoryLength); Сообщить("PrimaryGroupID = " + User.PrimaryGroupID);

Сообщить("Profile = " + User.Profile);

Аналогичным образом можно выводить свойства и других объектов сети, создавая экземпляры этих объектов так, как это было показано в листинге 9.1.

Помимо перечисленных свойств каждый пользователь имеет уникальный идентификатор SID (user security identifier), который можно получить с помощью метода Get, в параметрах которого передать название свойства — objectsiD. Данный метод возвращает значение типа COMSafeArray, которое посредством метода выгрузить можно конвертировать в обычный массив. Далее, С ПОМОЩЬЮ конструкции Для каждого...из...Цикл...КонецЦикла МОЖНО обойти все элементы массива и собрать полный идентификатор.

Пример получения идентификатора пользователя приведен в листинге 9.13.

р-...........--------------г7

і Листинг 9.13. Вывод SID пользователя (user security identifier)

V 4 ДіІА________________ l-------..... ...—.I. ..—._____________

// Получаем объект пользователя

User - ПолучитьСОМОбъект("WinNT://" + ИмяКомпьютерэ + +

ИмяПользователя);

// Получаем SID (user security identifier)

Sid = User.Get("objectSID"); // получили тип COMSafeArray

Масс = Новый Массив !; ;

// Выгружаем COMSafeArray в массив Масс = Sid.Выгрузить();

ЗіаСтрока =

// Складываем все строки массива Для каждого Значение из Масс Цикл SidCTpOKa = SidCTpoKa + Значение +

КонецЦикла;

Сообщить("SID пользователя + ИмяПользователя + + SidCTpoKa)









-

'































Приложение

Описание

прилагаемого компакт-диска

В прилагаемом к книге CD-ROM содержатся исходные тексты программ всех примеров, которые в ней рассмотрены. Помимо примеров на диске содержится Offline-версия интернет-проекта ERP Group (), основателем которого является автор книги.

Структура компакт-диска представлена в табл. П. 1.

Таблица П. 1. Содержимое компакт-диска

Каталог\Файл Описание

Chapter 01\

ActiveBarCode.epf

ActiveBarCode.ert

Примеры, рассмотренные в главе 1.

Формирование штрихкода средствами ActiveBarcode для "1C:Предприятие 8.0"

Формирование штрихкода средствами ActiveBarcode для "1С:Предприятие 7.7"

HTML Editor.epf

Пример создания визуального редактора HTML-страниц для "1 (^Предприятие 8.0"

Примеры работы с объектом internetExplorer

для "1C:Предприятие 8.0"

Примеры работы с объектом InternetExplorer для "1С:Предприятие 7.7"

I nternetExplorer. epf

InternetExplorer.ert

Определение IP-адреса локального и удаленного компьютера для "1С:Предприятие 8.0"

Примеры использования помощников MS Agent для

"1С:Предприятие 8.0

Примеры использования помощников MS Agent для

"1С:Предприятие 7.7"

Примеры интерактивного взаимодействия с MS Agent для "1C: Предприятие 8.0"

IP.epf

MSAgent.epf

MSAgent.ert

MSAgentBalloonDialog.epf

Таблица П. 1 (продолжение)
КаталоіЛФайл Описание
Chapter01\ Примеры, рассмотренные в главе 1.

MSAgentBalloonDialog.ert Примеры интерактивного взаимодействия с MS

Agent для "1C:Предприятие 7.7"
Примеры работы с регулярными выражениями для "1 С:Предприятие 8.0"

RegExp.epf

WindowsMediaPlayer.epf Chapter 02\

ComputerSystemlnformatio

n.epf

WMI.epf

WMI.ert

WMICIassViewer.epf WmiServices. classes WmiServices.ert Chapter 03\

Пример использования проигрывателя Windows Media Player для "1С:Предприятие 8.0"

Примеры, рассмотренные в главе 2.

Вывод подробной информации об аппаратном и программном составе локального компьютера для "1C: Предприятие 8.0"

Примеры использования объектов WMI для ”1С:Предприятие 8.0"

Примеры использования объектов WMI для "1 С:Предприятие 7.7"

Инструмент просмотра всех классов WMI, их свойств и значений для "1С:Предприятие 8.0"

Файл со списком WMI-классов, который используется для загрузки классов в обработке WmiServices.ert

Инструмент просмотра всех классов WMI, их свойств и значений для "1С:Предприятие 7.7"

Примеры, рассмотренные в главе 3.

FileSystemObject.epf

Пример работы с файловой системой для "1С:Предприятие 8.0"

Пример запуска произвольного ?В-скрипта (VBS) для "1С:Предприятие8.0"

Пример чтения тегов До ?!) МРЗ-файлов для "1С:Предприятие 8.0

Примеры использования объектов wsh для "1С:Предприятие 8.0"

MSScriptControl.epf

ReadMP3Tags.epf

WSH.epf

Chapter 04\ Photoshop.epf

VSApplication.vbs

Примеры, рассмотренные в главе 4.

Примеры использования Adobe Photoshop в качестве OLE-сервера для версии "1С:Предприятие 8.0"

Пример использования OLE-соединения к БД "1C:Предприятие 8.0" из VBS

Таблица П. 1 (продолжение)
Каталог\Файл Описание
Chapter 04\ Примеры, рассмотренные в главе 4.
V8ApplicationCOMConnect Пример использования СОМ-соединения для

or.epf "1С:Предприятие 8.0"

V8COMConnector.vbs Пример использования СОМ-соединения к БД

"1 С:Предприятие 8.0" из VBS

WordCheckSpelling.epf Пример реализации проверки орфографии текстов

с помощью MSWord для "1С:Предприятие 8.0"

WordExcel.epf Примеры использования MS Word и Excel в качестве

OLE-сервера для "1 С:Предприятие 8.0"

WordMacros.epf Динамическое создание и выполнение макросов MS

Word для "1С:Предприятие 8.0"

Chapter 05\

ADO Demo.epf

ADO Demo.ert

ExcelADO.epf

HexDumper.epf

ProjectADO.epf

example, mpp

Chapter 06\

Примеры, рассмотренные в главе 5.

Пример подключения к произвольной БД средствами ADO для "1 С:Предприятие 8.0"

Пример подключения к произвольной БД средствами ADO для "1C:Предприятие 7.7"

Пример подключения к книге MS Excel средствами ADO для "1С:Предприятие 8.0"

Пример реализации шестнадцатеричного редактора средствами ADO для "ІС. Предприятие 8.0"

Пример подключения к проекту MS Project средствами ADO для "1 С:Предприятие 8.0"

Пример файла проекта, используемого в обработке ProjectADO.epf

Примеры обработок, рассмотренные в главе 6.

SQL-DMO Demo.ert Пример подключения MS SQL Server средствами

SQL-DMO/vin "1С:Предприятие7.7"

Chapter 07\ Примеры обработок, рассмотренные в главе 7,

ControlPanel.epf Примеры запуска команд управления Windows, ис

пользующие шпсІІІ32для "1C:Предприятие 8.0"

Chapter 08\ Примеры обработок, рассмотренные в главе 8.

Пример работы с FTP с помощью объекта

ЕТРСоединениедля "1 С:Предприятие 8.0"

Пример работы с FTP с помощью команды ftp для

"1 С’.Предприятие 7.7"

Таблица П. 1 (окончание)

КаталогЛФайл

Описание

Chapter 08\ Mail.epf

Mail.ert

RomPop3.ert

RomSmtp.ert

Chapter 09\ ADSI.epf

AddOn\

ActiveBarcode

ADSI

COMServices

COMViewer

IE60

MDAC

MSAgent

ROM-Mail

Wmi

Wmp

Wsh

XMLCore

ERPG.ru\

Примеры обработок, рассмотренные в главе 8.

Примеры работы с электронной почтой для "ІС.Предприятие 8.0"

Примеры работы с электронной почтой для "1 С: Предприятие 7.7"

Пример работы с протоколом POP3 для "1 ^Предприятие 7.7"

Пример работы с протоколом SMTP для "1 С:Предприятие 7.7"

Примеры обработок, рассмотренные в главе 9.

Примеры использования Active Directory Service Interfaces "1С:Предприятие 8.0"

Дополнительные файлы и необходи

мые для запуска некоторых примеров.

Установочный комплект ActiveBarcode 3.50

Microsoft Active Directory Service Interfaces version 2.5 (ADSI)

СОМ-объект (с исходными кодами на VB), предназначенный для работы с СОМ-обьектами в системе "1 С:Предприятие 7.7"

OLE/COM Object Viewer

Internet Explorer 6.0 — русская и английская версии

Microsoft Data Access Components 2.8

Установочный комплект Microsoft Agent 2.0, включая персонажи и SDK

Внешняя компонента ROM-Mail

Windows Management Instrumentation (WMI) Core 1.5 (Windows 95/98)

Distributed Component Object Model (DCOM) for Windows 95/98 1.3

Установочный комплект Windows Media Player 9.0 Windows Script 5.6 включая SDK MS XML Core 4.0

Offline-версия Web-проекта "ERP Group" Андрея Михайлова ()

Предметный указатель



OLE 2 130



OLE-объект 129



SQL-DMO 227

н



м

MAPI 282 Microsoft Agen 26

Win32_ComputerSystem 78 Windows Script Host 97 WinNT Provider 314 WMI-моникер 63

Д

Действия с ярлыками 115 Добавления сетевого принтера 88 Доступ:

к данным Microsoft Project 214 к метаданным 143

3

Закрытие:

документа MS Excel 165 презентации 177

A

Алгоритм:

отправки сообщений 288 получения писем 286

В

Вывод:

всех доменов локальной сети 317

специальных папок 113 списка пользователей группы 318

Выполнение запроса к данным OLE-базы 141

Вычисление выражений 134

Класс:

CIM_DataFile 85 StdRegProv 91 Win32_Account 78 Win32_DesktopMonitor 77 Win32_Group 78 80 Win32_LocalTime 82 Win32_LogicalDisk 63 67 Win32_NetworkAdapter 94 Win32_NetworkAdapter Configuration 93 Win32_NTEventLogFile 83 Win32_Printer 87 Win32_Process 72 Win32_Product 69 Win32_ScheduledJob 89 Win32_Service 71 Win32_Share 87 Win32_StartupCommand 77 Win32JTimeZone 82 Win32 WindowsProduct

Activation 77

Win32 0peratingSystem 75 WMI 61

Команда: mailto 281 ping 94

Компонента V7Plus.dll 286 Компонентная объектная модель 13

Компоненты универсального механизма доступа к данным 185

Контейнер приложения OLE 129 Копирование и вставка данных в документ Word 151 Копирование файлов и папок 104

м

Метод: Activate 147 Add 147
AnimationNames 30 Buttons.Add 44 CheckSpelling 161 Close 147

Connect 137, 230 .

InputBalloon 41 MoveTo 3 MsgBalloon 38, 39 NewObject 138, 139, 141 Open 147

Option Buttons. Add 44 Play 30 Printout 148 ShowFormBalloon 44 Speak 31 StartService 74 Stop 31 StopAll 31 SlopService 74 Terminate 74 Think 31 Uninstall 71 Перейти 46 Методы:

класса Win32_Product 70 объекта Command 194 объекта RegExp 54 объекта WshNetwork 119 объекта Документ 46 Механизм обработки строк 52 Модель СОМ 13 Модификация реестра 117

О

Обработка штрих кодов 22 Обращение к листам рабочей книги документа Excel 166 Объект:

Application 164 Balloon 35 Command 186, 192
Connection 186 Drive 100 Error 186 Field 187 File 100

FileSystemObject 100 Folder 100 FormBalloon 41 MAPIMessage 283 MAPISession 283 Record 187 RecordSet 186, 198 RegExp 54 Stream 187 SWbemLocator 64 Winsock 20 Word. Application 147 Объектная модель:

ADOX 202 WMI 59

Объекты WSH 97 Окно сообщений 126 Определение:

даты и времени 82 ІР-адреса 21, 94 временной зоны 82 домена 78

имени пользователя 80 локальных групп 80 разрешения экрана 77 списка программ автозагрузки 77 Отключение:

сетевого соединения 93 учетной записи 320 Отправка письма через SMTP-сервер 293

п

Перемещение файлов и папок 105

Печать документа PowerPoint 178 Поиск файлов 86
Показ слайдов 179 Получение сведений: о папках и файлах 102 об определенном диске 100 Получение списка: пользователей 81 установленных сервисов 73 всех доступных дисков 108 установленного программного обеспечения 70

Проверка существования диска каталога или файла 104 Программа ftp 303 Просмотр:

всех заданий планировщика 90 записей журнала событий 85 количества записей журнала событий 84 учетных записей 78

Р

Работа:

с Microsoft Word 146 с датой и временем 82 с журналами событий 83 с заданиями планировщика 89 с операционной системой 75 с сетевыми ресурсами 119 с файлами 85 с сетью 93

Регулярные выражения 52

С

Свойства:

MS Agent 33 класса Win32_

ComputerSystem 78 класса Win32_Product 69 компонента ActiveBarcode 22 объекта Command 193 объекта DBFile 235 (окончание рубрики см. на стр. 336)
Свойства (окончание): объекта LogFile 235 объекта Winsock 20 объекта WshNetwork 119 объектов WinNT Provider 321 ButtonsCaptions 39 Document 16 Font 45

OptionPressed 44 Style 151 Tables 159 UserName 80 приложения OLE 129 таблиц 153

Создание и удаление групп пользователей 319

Создание:

задания 90

копии журнала событий 84 нового параметра реестра 93 нового пользователя 318 нового оазпелр 9° обиокта 15

объекта приложения Adobe Photoshop 181 папок 105

текстовых файлов 106 ярлыков 114

ярлыков для URL-адресов і IЬ абзацев в документах MS Word 149

Создание и открытие документов MS Word 147

Сохранение презентации 177

Спецификации таблиц базы данных 230

т

Технология:

ActiveX 14 ADSI 313 WMI 60 СОМ 13

Транслирование сторонней информации 17

У

Удаление:

программного продукта 71 файлов и папок 105 Управление: анимацией 180 доступом к папкам 87 учетными записями 320 Установка: принтера 89 приоритета процесса 73

Ф

Функции управления программами 122

ч

Чтение:

значений ключей реестра 92

писем с РОРЗ, сервера 290

1C:

ПРЕДПРИЯТИЕ

7.7/8.0

СИСТЕМНОЕ ПРОГРАММИРОВАНИЕ ИСПОЛЬЗУЙ возможности системы НА ВСЕ юо

МИХАЙЛОВ АНДРЕЙ ВИТАЛЬЕВИЧ

Автор имеет большой опыт коммерческой разработки информационных систем на базе платформы ”1С:Предприятие” версий 7.7 и 8.0, в том числе спроектированных и успешно внедренных "с нуля*. Несколько его разработок получили сертификат "1С:Совместимо! Система программ 1С:Предприя-тие". Принимал участие в разработке конфигураций "1 С:Управление производственным предприятием" на платформе ”1С:Предприятие 8.0", "1C-Papyc:CRM Управление продажами", "Астрософт. Деловое досье: Учет оборудования" и многих других. Имеет ряд сертификатов фирмы "1C", в том числе самые

разнообразные сертификаты по версии 8.0.

В настоящее время - вице-президент компании "Технологии успеха", которая занимается разработкой и внедрением информационных систем на базе платформы "1С:Предприятие 8.0".

Книга не является традиционным учебником по программированию в системе "1С:Предприятие". Основное внимание в ней уделено практическому использованию неявных, скрытых, но не менее важных, возможностей этой платформы, а также операционной системы и разнообразныхСОМ-объектов.

Книга представляет собой практическое руководство, предназначенное для программистов, разработчиков и администраторов системы "1С:Предприятие"при работе с технологиями ActiveX, COM, WMI и WSH, при интеграции с базами данных через интерфейсы ADO и SQL-DMO, при работе с Интернетом, электронной почтой и FTP, взаимосвязи с внешними приложениями и многим другим.

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

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

Материал сопровождается большим количеством наглядных примеров. Книга ориентирована на программистов, разработчиков и администраторов различного уровня.

КАТЕГОРИЯ:

ПРОГРАММИРОВАНИЕ/1 С: ПРЕДПРИЯТИЕ

ISBN 5-94157-536-Х

785941 575367

Компакт-диск содержит все исходные тексты примеров, приведенных в книге, а также СОМ-объекты.

БХВ-ПЕТЕРБУРГ 190005, Измайловский пр., 29 E-mail: Internet: www bhv.ru Тел.:(812)251-4244 Факс:(812)251-1295



і Листинг 1.8. Вывод табличного документа для версии 7.7

янн—ниннниннннінниннннннннннннинннннннннняяннни^нннннннннннннннні

Таблица.ИсходнаяТаблица("Таблица");

Таблица.ВывестиСекцию("ШтрихКод");

Таблица.Показать("Штрихкод");

В данном примере предполагается, что:



Элемент ActiveBarCode в табличном документе находится в секции ШтрихКод.

2. Переменные номер, Тип и Показывать, введенные в свойствах элемента, объявляются и заполняются в коде до вывода таблицы (например, из диалога или справочника).



// Вывод модального вопроса

Ответ = Balloon.MsgBalloon("Вы действительно хотите закрыть обработку?",



"Внимание вопрос!". Characters);

Если Ответ = 6 Тогда

Сообщить("Вы выбрали ответ ""Да....');

Иначе

Сообщить("Вы выбрали ответ ""Нет""");

КонецЕсли;



linkTag = / (4lt;(a|\/a) ( [\s\Sj*?)&gt;)/gi | scriptTag =/ (&lt; (script!\/script) ([\s\S]*?)&gt;)/gi I code = code.replace(htmlTag,""cfont color=#FF0000>$l</font>"")

| code =code.replace(tableTag,""cfont color=#008080>$l</font>"")



Процедура Переключить Режим (Документ, ПредыдущийРежим, НовыйРежим)

Если НовыйРежим = "Текст" Тогда sExpression = "

I document.body.inne rText = document.body.inne rHTML;

|document.body.innerHTML = colourCode(document.body.innerHTML);

I function colourCode (code)

l{

l htmlTag = /(&lt; ([\s\S]*?)&gt;)/gi

tableTag = /(Sit;(table ItbodyIth|tr|td|\/tableI\/tbodyI\/thI\ /tr|\/td)([\s\S]*?)&gt;)/gi

| commentTag =/(&lt;!—([\s\S]*?)&gt;)/gi l i^geTag = / (&lt;img([\s\S] *?) &gt;) /gi



Листинг 2.5. Пример кода СОМ-объекта на языке Visual Basic

ИИИИІНИИИИИИИИИИІі- -уяИВВЯЯВНВНННВ^-.._—_________ ______—.-.-.:^ЯВЯНННВЯН

'Функция возвращает элемент коллекции ObjSet по номеру Number Public Function SnumerateCoIIection(ОЬ]Set, Number)

Dim Current As Integer Current = 0 .

For Each Obj In Obj Set

If Current = Number Then

Set EnumerateCollection = Obj Exit Function End If

Current = Current + 1

Next

End Function .

'Функция возвращает количество элементов коллекции Obj.Set Public Function GetCountCollection(ObjSet)

Dim Current As Integer Current = 0

For Each Obj In ObjSet

Current = Current + 1

Next

GetCountCollection = Current End Function

'Функция возвращает COM.....оОъект по моникеру или имени файла

Public Function GetCOMObject(Str)

Set GetCOMObject = GetObject(Str)

End Function



Данный пример является частью кода COM-объекта, созданного в среде Visual Basic. После компиляции мы получим библиотеку COMServices.dll, которая представляет СОМ-объект — COMServices. COM.



Зак. 722



Листинг 3.15. Вывод специальных папок в версии 8.0

// Функция возвращает путь к системной папке, указанной в параметре <Имя> Функция ПолучитьСистемнуюПапку(Имя)

Попытка

Ctrl = Новый СОМОбъект("MSScriptControl.ScriptControl");

// Указываем язык скрипта (VBS)

Ctrl .Language = "vbscript:" ;

// Добавляем код на VBS Ctr1.AddCode("



Function SpecialFolders (Name)

I Set Shell = CreateObject ('"'Wscript. Shell"”)

ISpecialFolders = Shell.SpecialFolders(Name) .



Зак. 722



| ЛистингСЮ. Варианты подключения к OLE-серверу .................................



— filuuu: --------•Х..І........—.—¦ ..............----------J

’ Подключение к БД файлового варианта Set FileDb = CreateObject("v8.Application")

FileDb.Connect("File=C:\Progra~l\lcv8\Db\Trade; Usr=MeaHOB; Pwd=super")

' Подключение к БД клиент-серверного варианта Set ServerDb = CreateObject("v8.Application")

ServerDb.Connect("Srvr=ServerlC; Ref=Trade; иБг=Иванов; Pwd=super")

Рассмотрим параметры подключения к базе данных в файловом варианте. О File — указывает на каталог базы данных.



г--;--———......——----

IЛ истинг4.37. Создание диаграммыс помощью мастера



_’_

// Создание диаграммы

Ch. Chart. Chartwizard (Excel. WorkBooks [1] .Worksheets [2] .Flange ["A1:C5"], -4100);

// Оформление диаграммы



Листинг 4.39. Выгрузка метаданных в MS Excelwrn версии 8.0

htillSSlih ¦ ¦ ....................XXiffiX...............................______________________________________1.................J

Попытка

Excel = Новый СОМОбъект("Excel.Application");

Исключение



Листинг 4.42. Запуск MS PowerPoint и открытие презентаций

// Создание объекта приложения PowerPoint

Арр = Новый СОМОбъект("PowerPoint.Application");

// Установка видимости окна приложения Арр,visible = Истина;

// Открытие презентации

Арр. Presentations.Open {"С:\Фундамент.ppt");

// Уничтожение объекта приложения

Арр.Quit();

Отметим также, что в случае PowerPoint, в отличие от Word и Excel, объект Application не имеет метода Activate для того, чтобы сделать актив-



----- •"•т-т.-г:--------т —------------—-——— —

Листинг 4.48. Запуск выполнения операции по имени

// Создание объекта приложения Photoshop

Photoshop = Новый СОМОбъект ("Photoshop.Application") ;

// Открытие картинки

PhotoDoc = Photoshop.Open("С:\picture.jpg">

// Запуск операции (Action) по имени Photoshop.PlayAction("Quadrant Colors");

// Сохранение картинки

PhotoDoc.SaveTo("С:\NewPicture.psd") // Закрытие документа PhotoDoc.Close() ;

// Уничтожение объекта приложения Photoshop.Quit();

Существенный недостаток данного примера состоит в том, что метод SaveTo не сохраняет автоматически документ, а открывает стандартный диалог сохранения файла. Для полной автоматизации всех действий над документом рекомендуется все операции (Action) заканчивать сохранением файла или установить отдельную операцию, которая будет сохранять документ в файл со всеми произведенными изменениями.

Помимо выполнения операции, с указанием ее имени, можно выполнить все определенные в Adobe Photoshop операции, перебрав коллекцию Actions объекта Photoshop (листинг 4.49).



20 8-байтовое целое со знаком

128 Двоичное значение

11 Булево значение

8 Символьная строка, заканчивающаяся символом Null (в кодировке Unicode)

129 Строковое значение



Денежная сумма (8-байтовое целое со знаком,

кратное 10 000)

1 Дата



133 Дата (в формате "ггггммчч")

134 Время (в формате "ччммсс")

135 Точная дата и время (в формате "гггг_мм_ чч_чч_мм_сс" плюс тысячные доли секунды)

14 Десятичное число с фиксированными разме

рами целой и дробной частей



5 Значение с плавающей точкой двойной точно

сти



0 Значение не определено



32-битовый код ошибки

72 Полностью уникальный идентификатор (GUID)

9 Указатель на интерфейс IDispatch OLE-объекта

3 4-байтовое целое со знаком

13 Указатель на интерфейс lUnknown OLE-объекта

205 Длинное двоичное значение (только для объек

та Parameter)

Длинное строковое значение, заканчивающееся символом Null (только для объекта Parameter)



// Описание переменных подключения ИмяФайла = "C:\demo.mdb";

СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ИмяФайла;

// Создадим экземпляр объекта ADOX Catalog Catalog = Новый СОМОбъект ("ADOX. Catalog") ;

// Создадим новый MDB-файл Catalog.Create(СтрокаПодключения);

В приведенном выше примере создается новая база данных заданного типа в заранее заданном каталоге. Затем можно добавить в эту базу данные таблиц и поля. Чтобы сделать это, необходимо:



Создать новый экземпляр объекта Table и добавить его в коллекцию Tables объекта Catalog.

2. Создать новый экземпляр объекта Column и добавить его в коллекцию Columns объекта Table.



Листинг8.2. Инициализация сеанса связи МАЙ;. ::

А., 1..... .......... л; і.о_,_щт.и .....г. А-..:.... ...і

// Элемент управления Session

SessionCtrl = СоздатьОбъект("MSMAPI.MAPISession") ;

// Элемент управления Messages



Содержание раздела