Адрес этой странички: 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). 

 


(c) Сергей Попов, респ.Коми, г.Усинск, 2007  Письмецо написать ...


Hosted by uCoz