Адрес этой странички:
http://d1cv8.narod.ru/top_003/d1cv8_20070829_001/d1cv8_20070829_001.htm Дата: 29.08.2007 Интернет-приложение к книге "Delphi и 1С:Предприятие.Программирование информационного обмена" |
Глава 3. Подключение к
1С.
Создание Delphi-компонента, реализующего
функционал подключения к 1Cv7.
Расширение функционала (продолжение).
Список активных Пользователей базы данных 1Cv7.
В главе 3 книги (стр. 19-25) был рассмотрен пример подключения
из внешнего приложения к
системе 1Cv7 в режиме OLE Automation.
В
статье от 27.08.2007 был рассмотрен процесс создания Delphi-компонента
(TConnectTo1Cv7
), реализующего соответствующий функционал.
В
предыдущей статье мы модифицировали компонент, расширив его функционал
(добавили метод, позволяющий считывать список зарегистрированных баз данных
1Cv7).
Теперь попробуем еще расширить функционал компонента
TConnectTo1Cv7 , создав свойства и методы, позволяющие
прочитать список активных Пользователей системы 1Cv7 (подробно
об этом см. глава 13, стр. 558-565 книги).
Здесь мы рассмотрим только "практику" ...
Запустим Delphi и откроем пакет sp1Cv7_OLE.dpk.
По двойному щелчку мышкой на строке
ConnectTo1Cv7.pas
откроем модуль компонента
TConnectTo1Cv7 .
Сделаем следующие изменения (красный цвет) в соотв.разделах объявления класса компонента :
type
TConnectTo1Cv7 =
class(TComponent)
private
{ Prvate declarations }
...
...
//имя каталога для
временных файлов
//(каталог
должен существовать)
fDirTMP : string;
protected
{ Protected declarations }
...
...
//метод, "отвечающий"
за изменение значения fDirTMP
procedure mSetDirTMP(Value : string);
publiс
{ Public declarations }
...
...
//Метод, считывающий список активных Пользователей базы данных системы 1Cv7
function Load_ListActiveUsers_1Cv7(ListUsers : TStrings; YesCopyToDirTMP
: boolean) : integer;
published
{ Published declarations }
...
...
//имя каталога
для временных файлов
property DirNameTMP: string read fDirTMP write mSetDirTMP;
end;
Изменения в конструкторе класса :
constructor
TConnectTo1Cv7.Create(AOwner: TComponent);
//Конструктор
компонента
begin
//Сначала (перед любыми нашими "действиями") вызываем "дух предков" :)
inherited Create(AOwner);
fDirTMP:=Trim(fDirTMP);
...
...
end;
Определим новый метод :
procedure TConnectTo1Cv7.mSetDirTMP(Value
: string);
//Установить значение
свойства DirNameTMP
begin
fDirTMP:=Trim(Value);
if length(fDirTMP)>0 then begin
if
fDirTMP[length(fDirTMP)]<>'\' then fDirTMP:=fDirTMP+'\';
end;
end;
В модуле sp_Lib_Delphi определим новую функцию (детальные разъяснения - см. глава 13 книги) :
Более подробно об этой функции (а также о вспомогательных функциях) можно прочитать в книге на стр. 558-565 (глава-13).
Для компонента TConnectTo1Cv7 определим соотв.новый метод :
function TConnectTo1Cv7.Load_ListActiveUsers_1Cv7(ListUsers
: TStrings; YesCopyToDirTMP : boolean) : integer;
//Метод, считывающий
список активных Пользователей базы данных системы 1Cv7
Var
Dir : string;
fn_Links_tmp : string;
begin
Result:=0;
//Имя
каталога базы данных, для которой определяется
//список
активных Пользователей
Dir:=fDirName;
if length(Dir)>0 then begin
if
Dir[length(Dir)]<>'\' then Dir:=Dir+'\';
//вычисляем полное имя файла links.tmp
fn_Links_tmp:=Dir+SubDir_SYSLOG+NameLinskTMP;
//Вызываем соотв. процедуру из модуля sp_Lib_Delphi
Get_List_ActiveUsers_from_1C(fDirTMP,
fn_Links_tmp,
ListUsers,
YesCopyToDirTMP);
Result:=Exctract_UserName_from_ListActiveUsers(ListUsers);
end;
end;
Протестируем новую версию компонента.
Создадим новый Delphi-проект (рис.1).
Рис.1 Форма проекта и компонент
TConnectTo1Cv7
на форме
Создадим обработчики событий (нажатие) для каждой кнопки :
Создадим обработчик события : OnClick для ListBox1 (выбор базы данных 1Cv7 из списка) :
procedure
TForm1.ListBox1Click(Sender: TObject);
//Выбрать базу данных
1Cv7 из списка доступных
begin
if ListBox1.ItemIndex>=0 then begin
ConnectTo1Cv71.DirNameDB:=sp_GetWordFromString('=',ListBox1.Items[ListBox1.ItemIndex],2);
ShowMessage('DirNameDB='+ConnectTo1Cv71.DirNameDB);
end;
end;
Теперь скомпилируем наш проект (для тестирования компонента) и
запустим на выполнение.
Результат тестирования представлен на рис. 2 .. 5.
Сначала получим список доступных баз данных (кнопка "Список
Б.Д.")
и выберем какую-либо из них :
Рис.2 Выбор базы данных 1Cv7 из списка доступных
(список получен по нажатию на кнопку "Список Б.Д.")
Теперь создадим соединение с выбранной базой данных (по кнопке "Connect to 1Cv7") :
Рис.3 Соединение с выбранной базой данных
1Cv7
(по нажатию на кнопку "Connect to 1Cv7")
Получим список активных Пользователей (т.е., это мы сами, как
минимум)
по кнопке "Список Пользов." :
Рис.4 Список
активных Пользователей для выбранной базы данных 1Cv7
(по нажатию на кнопку "Список Пользов.")
Теперь закроем соединение (по кнопке "Disconnect")
и опять
получим список активных Пользователей (он будет пуст, если нет других соединений
с 1Cv7) :
Рис.5 Список активных Пользователей - пуст
(при отсутствии других соединений с 1Cv7)
Естественно, что у каждого Пользователя (на его компьютере) результат может отличаться от того, что на рис. 2 ... 5
Следует отметить, что здесь приведена лишь "практика".
"Подробности" - см. соотв.главу книги.
Исходные тексты новой версии компонента можно скачать
здесь (24 кб).
Исходные тексты "тестировщика" компонента можно скачать
здесь (20 кб)
Продолжение - расширение функционала компонента (видимость окна программы 1Cv7).