Автоматизация процесса подключения баз «1С» с помощью сценария регистрации пользователей в сети::Журнал СА 3.2005
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Подписка
Архив номеров
Где купить
Наука и технологии
Авторам
Рекламодателям
Контакты
   

  Опросы
  Статьи

Событие  

В банке рассола ждет сисадмина с полей фрактал-кукумбер

Читайте впечатления о слете ДСА 2024, рассказанные волонтером и участником слета

 Читать далее...

Организация бесперебойной работы  

Бесперебойная работа ИТ-инфраструктуры в режиме 24/7 Как обеспечить ее в нынешних условиях?

Год назад ИТ-компания «Крок» провела исследование «Ключевые тренды сервисного рынка 2023». Результаты

 Читать далее...

Книжная полка  

Читайте и познавайте мир технологий!

Издательство «БХВ» продолжает радовать выпуском интересных и полезных, к тому же прекрасно

 Читать далее...

СУБД PostgreSQL  

СУБД Postgres Pro

Сертификация по новым требованиям ФСТЭК и роль администратора без доступа к данным

 Читать далее...

Критическая инфраструктура  

КИИ для оператора связи. Готовы ли компании к повышению уровня кибербезопасности?

Похоже, что провайдеры и операторы связи начали забывать о требованиях законодательства

 Читать далее...

Архитектура ПО  

Архитектурные метрики. Качество архитектуры и способность системы к эволюционированию

Обычно соответствие программного продукта требованиям мы проверяем через скоуп вполне себе понятных

 Читать далее...

Как хорошо вы это знаете  

Что вам известно о разработках компании ARinteg?

Компания ARinteg (ООО «АРинтег») – системный интегратор на российском рынке ИБ –

 Читать далее...

Графические редакторы  

Рисование абстрактных гор в стиле Paper Cut

Векторный графический редактор Inkscape – яркий представитель той прослойки open source, с

 Читать далее...

День сисадмина  

Учите матчасть! Или как стать системным администратором

Лето – время не только отпусков, но и хорошая возможность определиться с профессией

 Читать далее...

День сисадмина  

Живой айтишник – это всегда движение. Остановка смерти подобна

Наши авторы рассказывают о своем опыте и дают советы начинающим системным администраторам.

 Читать далее...

Виртуализация  

Рынок решений для виртуализации

По данным «Обзора российского рынка инфраструктурного ПО и перспектив его развития», сделанного

 Читать далее...

Книжная полка  

Как стать креативным и востребованным

Издательский дом «Питер» предлагает новинки компьютерной литературы, а также книги по бизнесу

 Читать далее...

Книжная полка  

От создания сайтов до разработки и реализации API

В издательстве «БХВ» недавно вышли книги, которые будут интересны системным администраторам, создателям

 Читать далее...

Разбор полетов  

Ошибок опыт трудный

Как часто мы легко повторяем, что не надо бояться совершать ошибки, мол,

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 6143
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 6856
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

12.03.2018г.
Просмотров: 4139
Комментарии: 0
Глубокое обучение с точки зрения практика

 Читать далее...

12.03.2018г.
Просмотров: 2978
Комментарии: 0
Изучаем pandas

 Читать далее...

12.03.2018г.
Просмотров: 3781
Комментарии: 0
Программирование на языке Rust (Цветное издание)

 Читать далее...

19.12.2017г.
Просмотров: 3789
Комментарии: 0
Глубокое обучение

 Читать далее...

19.12.2017г.
Просмотров: 6283
Комментарии: 0
Анализ социальных медиа на Python

 Читать далее...

19.12.2017г.
Просмотров: 3134
Комментарии: 0
Основы блокчейна

 Читать далее...

19.12.2017г.
Просмотров: 3434
Комментарии: 0
Java 9. Полный обзор нововведений

 Читать далее...

16.02.2017г.
Просмотров: 7246
Комментарии: 0
Опоздавших не бывает, или книга о стеке

 Читать далее...

17.05.2016г.
Просмотров: 10616
Комментарии: 0
Теория вычислений для программистов

 Читать далее...

30.03.2015г.
Просмотров: 12336
Комментарии: 0
От математики к обобщенному программированию

 Читать далее...

18.02.2014г.
Просмотров: 13969
Комментарии: 0
Рецензия на книгу «Читаем Тьюринга»

 Читать далее...

13.02.2014г.
Просмотров: 9100
Комментарии: 0
Читайте, размышляйте, действуйте

 Читать далее...

12.02.2014г.
Просмотров: 7053
Комментарии: 0
Рисуем наши мысли

 Читать далее...

10.02.2014г.
Просмотров: 5362
Комментарии: 3
Страна в цифрах

 Читать далее...

18.12.2013г.
Просмотров: 4594
Комментарии: 0
Большие данные меняют нашу жизнь

 Читать далее...

18.12.2013г.
Просмотров: 3402
Комментарии: 0
Компьютерные технологии – корень зла для точки роста

 Читать далее...

04.12.2013г.
Просмотров: 3128
Комментарии: 0
Паутина в облаках

 Читать далее...

03.12.2013г.
Просмотров: 3378
Комментарии: 0
Рецензия на книгу «MongoDB в действии»

 Читать далее...

02.12.2013г.
Просмотров: 2999
Комментарии: 0
Не думай о минутах свысока

 Читать далее...

Друзья сайта  

 Автоматизация процесса подключения баз «1С» с помощью сценария регистрации пользователей в сети

Архив номеров / 2005 / Выпуск №3 (28) / Автоматизация процесса подключения баз «1С» с помощью сценария регистрации пользователей в сети

Рубрика: Базы данных /  Изучаем «1С»

ИВАН КОРОБКО

Автоматизация процесса подключения баз «1С»
с помощью сценария регистрации пользователей в сети

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

Основная идея

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

  • Название группы состоит из 2 частей – префикса, который у всех групп одинаковый, и собственно названия группы. Оно совпадает с названием каталога, в котором физически находится подключаемая база «1С».

Рисунок 1

Рисунок 1

Во время входа в сеть от имени пользователя запускается сценарий регистрации пользователей в сети, который во время своей работы составляет два списка баз. Один из них – список подключаемых баз. Он формируется на основе данных из Active Directory. Второй список формируется на основе данных из реестра – список подключенных баз. Затем, изменяя ветвь реестра HKCU (HKEY_CURRENT_USER), осуществляется сопоставление созданных списков: подключаются недостающие базы и отключаются лишние.

Сценарий регистрации пользователей в сети

Для создания сценария рекомендуется использовать KIXTart (http://kixtart.org), поскольку он является наиболее подходящим для решения поставленной задачи.

Сценарий регистрации условно можно разделить на несколько логических частей:

  • подключение сетевого диска;
  • формирование списка баз, которые должны быть подключены;
  • формирование списка баз, которые подключены в настоящее время;
  • сопоставление сформированных списков, запись данных в реестр рабочей станции.

Подключение сетевых дисков

Доступ к базам, расположенным на сервере, рекомендуется осуществлять с помощью подключения сетевого диска. Для этого необходимо знать два параметра: букву, к которой будет монтироваться ресурс, и UNC-путь к нему.

Все задаваемые вручную параметры принято выносить в конфигурационный файл. KIXTart обладает встроенной поддержкой INI-файлов, которые удобно использовать в качестве конфигурационных файлов. INI-файл представляет собой текстовый файл, имеющий следующую структуру:

[разделM]

параметр1M=значение1M

параметр2M =значение2M

……………………….

параметрNM=значениеNM

Создадим конфигурационный файл config.ini со следующим содержимым:

[1C]

1C_Letter=R

1C_Path=Server1C_Bases$

Чтение конфигурационного файла осуществляется с помощью функции ReadProfileString():

value=ReadProfileString ("file_name", "section", "key")

где value – возвращаемое значение параметра key раздела section файла file_name. Подключение сетевого диска выглядит следующим образом:

$FName=”config.ini”

$Section=”1C”

$1C_Letter_VaL = ReadProfileString($FName, $Section, “1C_Letter”)      ;чтение параметра 1C_Letter

$1C_Path_Val = ReadProfileString($FName, $Section, “1C_Path”)   ; чтение параметра 1C_Path

Use $1C_Letter_Val + ":" /delete /persistent ; отключение сетевого диска

Use $1C_Letter_Val + ":" $1c_Path_Val ; подключение сетевого диска

Формирование списка подключаемых баз

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

[1C]

1C_Prefix=”1C$_”

В результате формируется массив. Его элементами являются название базы и полный путь к каталогу, которые разделены специальным символом. Его также рекомендуется описать в конфигурационном файле:

[1C]

1C_Symbol=”#”

Такая структура элемента массива продиктована выполнением нескольких условий:

  • Управление осуществляется только сетевыми базами. Список подключенных локальных баз не корректируется.
  • Некорректные названия сетевых баз будут исправлены.

Поскольку сценарий загрузки запускается от имени поль-зователя, который осуществляет вход в сеть, то нет необходимости осуществлять поиск необходимых групп среди всех групп домена с помощью ADODB. Рационально воспользоваться встроенной функцией в KIXTart EnumGroup(), которая возвращает список групп, в которые входит текущий пользователь, и из этого списка отобрать группы, имеющие оговоренный префикс:

$meta = ReadProfileString($FName, $Section, “1C_Symbol”)

$p=0

DO

$group=EnumGoup($p)

    If Instr($group, $meta)<>0

      ? $group

      End if

UNTIL Len($group)=0

Значение переменной $group строится в соответствии со следующим шаблоном: DomainGroup_Name, поэтому для формирования пути к каталогу необходимо вычленить составляющую Group_Name. Листинг, формирующий полный путь к каталогу, содержащего базу 1C, следующий:

$1C_Letter_VaL = ReadProfileString($FName, $Section, “1C_Letter”)

$1C_Group=Right($group, Len(group)-InstrRev($group,””)-Len($meta))

$1C_Base=$1C_Letter_VaL+”:”+$1C_Group      ; вид переменной R:Folder_with_Base

Второй частью элемента формирующегося массива является описание группы. Чтение этого свойства можно реализовать как с помощью провайдера WinNT, так и LDAP. Приведем оба варианта. Для доступа к объекту AD необходимо либо указать имя домена в явном виде, либо создать сценарий для определения текущего домена. По понятным причинам, указывать имя домена в явном виде некорректно, поэтому создадим сценарий для определения длинного (используется провайдером LDAP) и короткого (используется провайдером WinNT) имен доменов:

Set rootDSE_ = GetObject("LDAP://RootDSE")

d_def=rootDSE_.Get("defaultNamingContext")

long_Ldap_name = "LDAP://" + d_def

short_WinNT_name= mid(d_def, instr(d_def,"=")+1,instr(d_def,",")-instr(d_def,"=")-1)

Wscript.Echo long_Ldap_name ; имеет вид «DC=domain, DC=ru»

Wscript.Echo short_ WinNT_name ; имеет вид «Domain»

Для провайдера WinNT описание группы определяется следующим образом:

$1C_Group_Descr=GetObject(“WinNT://”+short_WinNT_name+”/”+$1C_Group).Description

Для провайдера LDAP описание группы определяется так:

$strADSQuery = "SELECT description FROM  'LDAP://" + $long_Ldap_name + "' WHERE Name = "' + $1C_Group + "' and objectClass='group'"

$objADOConn = createObject("ADODB.Connection")

$objADOConn.Provider = "ADsDSOObject"

$objADoConn.Open ("Active Directory Provider")

$objADOCommand = CreateObject("ADODB.Command")

$objADOCommand.ActiveConnection = $objADOConn

$objADOCommand.CommandText = $strADSQuery

$objQueryResultSet = $objADOCommand.Execute

$1C_Group_Descr =$objQueryResultSet.Fields("description")

Оба варианта имеют право на жизнь, и скорость их работы примерно одинакова, однако рекомендуется использовать второй вариант, несмотря на то что он выглядит громоздким. Дело в том, что провайдер WinNT был разработан для Windows NT, а LDAP – для Windows 2000. В ближайшем будущем, компания Microsoft, наверное, откажется от поддержки провайдера WinNT.

Таким образом, сценарий, формирующий массив, элементы которого включают в себя путь и название базы, выглядит следующим образом:

$meta = ReadProfileString($FName, $Section, “1C_Symbol”)

$1C_Letter_VaL = ReadProfileString($FName, $Section, “1C_Letter”)

Set rootDSE_ = GetObject("LDAP://RootDSE")

d_def=rootDSE_.Get("defaultNamingContext")

long_Ldap_name = "LDAP://" + d_def

$p=0

$q=0

Dim $1C_Must[]

DO

$group=EnumGoup($p)

    If Instr($group, $meta)<>0

$1C_Group=Right($group,Len(group)-InstrRev($group,”\”)-Len($meta))

;вид переменной R:\Folder_with_Base

$1C_Base=$1C_Letter_VaL+”:\”+$1C_Group

$strADSQuery = "SELECT description FROM  'LDAP://" + $long_Ldap_name + "' WHERE Name = "' + $1C_Group + "' and objectClass='group'"

$objADOConn = createObject("ADODB.Connection")

$objADOConn.Provider = "ADsDSOObject"

$objADoConn.Open ("Active Directory Provider")

$objADOCommand = CreateObject("ADODB.Command")

$objADOCommand.ActiveConnection = $objADOConn

$objADOCommand.CommandText = $strADSQuery

$objQueryResultSet = $objADOCommand.Execute

$1C_Group_Descr =$objQueryResultSet.Fields("description")

; переопределение размера динамического массива

Redim Preserve $1C_Must[$q]

$1C_Must[$q]= UCase($1C_Base)+$meta+$1C_Group_Descr

      $q=$q+1

      End if

      $p=$p+1

UNTIL Len($group)=0

Формирование списка подключенных баз

Список баз определяется чтением параметров и значений из соответствующей ветви реестра в массив, структура элементов которого аналогична элементам массива $1C_ Must[$q]. Ветвь реестра, из которой будет читаться информация, рекомендуется описать в конфигурационном файле (см. рис. 1):

[1C]

; по умолчанию ветвь HKCU

1C_Registry=Software\1c\1cv7\7.7\Titles

Чтение списка параметров из раздела Titles, названия которых являются путями к каталогам, в которых находятся базы «1С», осуществляется с помощью функции EnumValue() (см. рис. 1), а значений параметров, являющихся названиями баз, считываемые из поля Description групп безопасности, – с помощью функции ReadValue():

$1C_Registry_Val = ReadProfileString($FName, $Section, “1C_Registry”)

dim $1c_connected[]

$m=0

$n=0

    DO

           $1c_Title=EnumValue($1C_Registry_Val, $m)

           $1c_Name=ReadValue($1C_Registry_Val, $1c_Title)

                 if Lcase(Left($1c_Title,1))=Lcase($1C_Letter_VaL)

      ReDim Preserve $1C_Connected[$n]

                        $1C_Connected[$n]=Ucase($1c_Title)+$meta +$1c_Name

                        $n=$n+1

                 endif

           $m = $m + 1

    UNTIL Len($1c_Title) =0

Таким образом, имеется два массива – уже подключенных баз и баз, которые должны быть подключены. Структура элементов обоих массивов одинакова. Элемент массива включает в себя локальный путь к базе и ее название. Эти параметры разделены уникальным символом.

Сопоставление сформированных списков баз

Сопоставление списков осуществляется в два этапа: на первом из них происходит удаление лишних баз. Напомним, что управление реализовано только для сетевых баз. Локальные базы сценарий загрузки «не трогает». Сопоставление списков осуществляется с помощью функции AScan(), которая ищет совпадающие элементы в массивах. Удаление лишних баз осуществляется стиранием лишнего параметра в реестре с помощью функции DelValue(). На втором этапе добавляются отсутствующие базы с помощью той же самой функции AScan(). Используя её, в качестве параметров указывается и в первом и во втором случае одни и те же массивы. Только в первом случае анализируемым массивом является $1c_Must[], а во втором – 1c_Connected[]:

; удаление лишних баз

    for $dfg=0 to ubound($1c_Сonnected)

    $flag_p=0

    $flag_p=AScan($1c_Must, $1c_Connected[$dfg])

           if $flag_p=-1

                 $group=$1c_Connected[$dfg]

      DelValue ($1c_path, ї

           Left($Group,Instrrev($Group,$meta)-1))

           endif

    next

; подключение недостающих баз

    for $dfg=0 to ubound($1c_must)

    $flag_p=0

    $flag_p=Ascan($1c_connected,$1c_must[$dfg])

           if $flag_p=-1

           $group=$1c_must[$dfg]

WriteValue ($1c_Path, Left($group, ї

    Instrrev($group,$meta)-1), Right($group,Len($group)-Instrrev($group, $meta) - Len($meta)+1),"REG_SZ")

           endif

    next

Установка пользователя «1С» по умолчанию

Осуществив вход в сеть, пользователь, запускающий «1С» ожидает увидеть, что при авторизации входа в базу «1С» из списка ему будет предложено по умолчанию его имя. Для того чтобы это реализовать, необходимо, чтобы имя пользователя в сети и «1С» либо совпадали, либо были взаимосвязаны при помощи какого-либо правила. Для удобства работы пользователей рекомендуется сделать имена пользователей в сети и в «1С» идентичными. Имя пользователя по умолчанию в каждой базе отдельно в разделе HKCUSoft-ware1c1cv77.7BASE_NAME|startup значением параметра UserName. Поскольку значение этого параметра совпадает с именем пользователя в сети, то рекомендуется воспользоваться одним из встроенных макросов в KIXTart – @userid, с помощью которого определяется имя текущего пользователя.

Листинг этой функции выглядит следующим образом:

WriteValue ($1c_base+""+Right($group,Len($group) - Instrrev($group, $meta)-Len($meta)+1)+"StartUp", "UserName", @userid, "REG_SZ")

Листинг рекомендуется включить в процедуру сопоставления списка баз в раздел добавления баз, сразу после функции записи нового значения базы в разделе Titles.

В том случае если указанное имя пользователя не найдено (см. рис. 2) в списке пользователей «1С», то сама программа уничтожит созданную запись пользователя по умолчанию, и пользователь увидит пустое поле. С помощью раскрывающегося списка он должен будет выбрать имя пользователя, под которым он будет работать с базой «1С».

Рисунок 2

Рисунок 2

Заключение

Результатом работы созданного сценария является формирование списка баз «1С», с которыми пользователь имеет право работать. При выборе базы «1С», имя пользователя по умолчанию определяется автоматически. Таким образом, при переходе бухгалтера с одной рабочей станции на другую или смены его должностных обязанностей, затраты на администрирование значительно сокращаются: управление подключением баз осуществляется в автоматическом режиме. Новый инструмент может быть подключен к сценарию регистрации пользователей в сети в качестве функции. В приложении (на сайте журнала http://samag.ru в разделе «Исходный код») приведены примеры листинга конфигурационного файла config.ini и непосредственно сценарий.


Комментарии отсутствуют

Добавить комментарий

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

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-45
E-mail: sa@samag.ru