Адрес этой странички :
http://doc-prg.narod.ru/art_00014/art_00014.htm
Дата обновления : 15.10.2007
© 15.10.2007 Сергей Попов
Здесь следует отметить, что приведенная ниже статья носит чисто
иллюстративный характер и не претендует на бОльшее.
Для серьезной и углубленной проработки специальных вопросов информационного
обмена крайне рекомендуется использовать фирменное техническое описание системы
1Cv8.
1Cv8 + Delphi-5.
OLE (COM).
Формирование списка зарегистрированных
и активных Пользователей.
Статью в виде файла (485 кб) можно скачать здесь: art_00014.zip
В 1Cv8 (в отличие от 1Cv7) предусмотрена
возможность формирования (при
программировании) списков
зарегистрированных и активных
Пользователей открытой информационной
базы.
Для этого могут быть использованы объект
ПользователиИнформационнойБазы
и метод
ПолучитьСоединенияИнформационнойБазы
глобального контекста системы.
Подробно о них можно почитать в спец. литературе по системе 1Cv8.
Здесь мы попробуем использовать эти возможности на практике.
Создадим Delphi-проект (Get_ListUser_RegAct_1Cv8.dpr).
Форма проекта представлена на рис. 1.
Рис 1. Форма Delphi-проекта Get_ListUser_RegAct_1Cv8.dpr
В данном примере для соединения с 1Cv8 (COM-соединение) будем использовать соотв. Delphi-компонент :
TConnectTo1Cv8
Подробно о создании этого компонента
можно прочитать здесь
и здесь.
Исходные тексты компонента можно скачать здесь
(43 кб).
В принципе, в данном случае можно обойтись и
без этого компонента, используя наработки
из предыдущих
статей ...
Создадим обработчик события: нажатие на кнопку: "Запуск 1С (COM-соединение)" :
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
Label_YesConnect.Visible:=false;
ConnectTo1Cv81.Active:=false;
//Полный путь к файлам базы данных
ConnectTo1Cv81.FilePath:=Trim(Edit_DirDB.Text);
//Имя Пользователя
ConnectTo1Cv81.UserName:=Trim(Edit_User.Text);
//Пароль Пользоватедя
ConnectTo1Cv81.Password:=Trim(Edit_PSW.Text);
//Открыть COM-соединения
ConnectTo1Cv81.Active:=true;
if ConnectTo1Cv81.Active then begin
Label_YesConnect.Visible:=true;
end;
end;
Создадим обработчик события: нажатие на
кнопку "Список зарегистр.
Пользователей" :
Все пояснения - в тексте обработчика.
Проверим, как это работает.
Скомпилируем наш проект и запустим его на
выполнение.
Установим COM-соединение с программой 1С:Предприятие
(по кнопке "Запуск 1С (COM-соединение)").
Сформируем список зарегистрированных
Пользователей открытой информационной
базы (по кнопке "Список
зарегистр. Пользователей") :
Рис 2. Список зарегистрированных
Пользователей
открытой информационной базы.
Для сравнения, на рис.3 представлен этот же список, как он визуализирован в Конфигураторе 1С:Предприятие.
Рис 3. Список зарегистрированных
Пользователей
открытой информационной базы
(как это представлено в Конфигураторе).
Теперь попробуем получить список ролей
для каждого Пользователя.
Прежде всего, откроем Конфигуратор 1С:Предприятие
и доработаем нашу конфигурацию homelib_07.zip
.
Добавим в общий модуль (spLib_OLE)
конфигурации следующую функцию :
Назначение этой функции - конвертировать Коллекции
в Массивы (чтобы
особо не заморачиваться при переборе
элементов коллекции в контексте Delphi).
Теперь внесем изменения в обработчик события: нажатие на кнопку "Список зарегистр. Пользователей" :
...
...
...
//Выводим строку
Memo1.Lines.Add(Sx);
//----------------------------------------------------
//Формирование списка ролей для очередного
Пользоватедя
if CheckBox1.Checked then begin
//Читаем коллекцию ролей Пользователя
vList_Roles := vUser.Роли;
if YesLinkToVariant(vList_Roles) then begin
//Конвертируем коллекцию в массив
vList_Roles_m := ConnectTo1Cv81.ole1Cv8.Конвертировать_Коллекцию_в_Массив_OLE(vList_Roles);
//---------------------------------------
//Обрабатываем
массив ролей Пользователя
Count2 := vList_Roles_m.Количество();
if Count2>0 then begin
j := -1;
while j<(Count2-1) do
begin
j := j + 1;
//Читаем очередную роль
vRole:=vList_Roles_m.Получить(j);
//Визуализируем свойство "Имя" Роли
Memo1.Lines.Add(' > Роль='+Trim(vRole.Имя));
end;
end;
//---------------------------------------
end;
end;
//----------------------------------------------------
...
...
...
Полный текст обработчика представлен ниже :
На рис.4 представлен результат тестирования проекта.
Рис 4. Список зарегистрированных
Пользователей и их Ролей
в открытой информационной базе.
Теперь попробуем прочитать список
Активных Пользователей открытой
информационной базы.
Для этого создадим обработчик события:
нажатие на кнопку "Список
активных Пользователей".
Все пояснения - в тексте обработчика.
Тексты вспомогательных (не существенных)
функций здесь не приводятся.
Кто пожелает - может посмотреть в исходных
текстах примера
(26 кб).
На рис.5 представлен результат
тестирования нашего проекта.
Как видно, среди Активных
Соединений (Пользователей)
присутствует только наш проект ...
Рис 5. Список активных Пользователей в
открытой информационной базе.
Теперь запустим программу и Конфигуратор
1С:Предприятие от имени разных
Пользователей.
Все активные соединения будут отражены в
контексте нашего проекта (рис.6).
Рис 6. Список активных Пользователей в
открытой информационной базе.
Для сравнения, на рис.7 представлен этот же список, как он визуализирован в программе 1С:Предприятие.
Рис 7. Список активных Пользователей в
открытой информационной базе,
как это представлено в
программе 1С:Предприятие.
Исходные тексты этого примера
(26 кб) можно скачать здесь :
get_listuser_regact_1cv8.zip
Исходные тексты Delphi-компонента TConnectTo1Cv8
можно скачать здесь
(43 кб).
Учебную конфигурацию можно скачать здесь
(41 кб).
Дополнительно по этой теме можно
найти информацию в специальной литературе
по системе 1Cv8.
Например, в книге :
1С:Предприятие 8.0 Простые примеры разработки. А.П. Габец, Д.И. Гончаров, М., Издательство ООО "1С-Паблишинг".
© 15.10.2007 Сергей Попов