© 2004 Сергей Попов
После многочисленных вопросов, типа :
- "Посмотрел программу "Список пользователей 1С" и решил сделать все тоже самое, но с помощью самой 1С и столкнулся с тем, что ..."
- "... Как всё таки происходит определение подключен до сих пор пользователь из файла links.tmp, или нет ???"
- "...каким образом определяется активность из этого файла, ведь при выходе пользователя информация в нем не меняется?"
Я решил выложить здесь исходные тексты программы GetUsers1C (Считывание списка активных Пользователей для указанной Базы Данных 1С). Тексты можно использовать по своему усмотрению (но только freeware).
Сразу хочу предупредить, что идея - не моя. Как-то однажды на "территории 1С" промелькнуло сообщение (не помню автора), где была высказана эта идея.
Да. И еще. Текст программы GetUsers1C размещен здесь в том виде, как он есть (версия 105 от 24.12.2003). В настоящий момент моя деятельность уже НЕ связана с 1С. Т.е., просьба вопросов по исходникам не задавать. Описания все равно не будет ...
24.12.2003
Программа
GetUsers1C.exe
Windows-95/98/2000/XP (версия 1.05 от 24.12.2003)
Считывание списка активных Пользователей для указанной Базы Данных 1С (аналог монитора пользователей 1С)
Версия 1.00
1) Список Баз Данных 1С считывается из системного реестра копьютера.
2) Список активных Пользователей для данной версии программы определяется след. образом.
2.1 Для указанной Б.Д. на винч. локального компа копируется файл Links.tmp (из подкаталога SYSLOG)
2.2 Из этого файла (на локальном компе) создается список Пользователей
2.3 Активность Пользователя определяется по информации в файле Links.tmp из каталога SYSLOG (для указанной Б.Д.)
3) Файл Links.tmp копируется в папку запуска программы. Если программа запустилась с CD, файл Links.tmp копируется в папку
C:\TMP\ (если папки нет - программа попытается ее создать)
Версия 1.02
Дополнительно к версии 1.00
1) Теперь программа умеет считывать список Баз Даннх 1С не только из реестра, но и из текстового файла (по нажатию соотв. кнопки).
Формат файла : 1 строка - 1 база данных
Формат строки :
ИмяБазыДанных Разделитель ПутьКБазеДанных
ИмяБазыДанных - не имеет значения
Разделитель - цепочка символов |=> ПутьКБазеДанных - также, как указано в реестре
2) Программа понимает параметры, передаваемые в командной строке при запуске. Параметры :
/I: - следующая
за параметром строка интерпретируется в двух возможных вариантах :
-
как имя текст.файла, где хранится список баз данных 1С (формат см.
выше)
- как путь доступа к конкретной базе данных 1С
/R: - следующее за
параметром Число - номер строки (в списке Баз Данных),
куда установить курсор
(для этой базы будет считываться список пользователей).
По умолчанию =
1.
Имеет смысл только, если в качестве парметра для команды I был
передан список с Базами Данных
/O: - следующая за параметром строка
интерпретируется, как имя выходного текст.файла, куда будет направлен
список считанных Пользователей базы данных, указанной в паметрах /I: и
/R:
/С: - команды (пока что понимает только одну команду) :
Close - после
выполнения вышеуказанных действий, закрыть программу.
Примеры :
1) Прочитать список Баз данных из файла : C:\ListDB1.txt и установить курсор на строку N 2. Список Пользователей вывести в файл C:\ListUsers.txt. Закрыть программу.
/I:C:\ListDB1.txt / R:2 /O:C:\ListUsers.txt /C:Close
2) Прочитать список Пользователей для Базы Данных : \\server1\1c\1cv77\kpx.sql\. Список пользователей вывести в файл "C:\321\List Users for this bases.txt". Закрыть программу.
/I:\\server1\1c\1cv77\kpx.sql\ /O:"C:\321\List Users for this bases.txt" /C:Close
Версия 1.03 от 17.12.2003
Дополнительно к версии 1.02
1) Программа умеет оповещать, когда список активных Пользователей пуст или содержит не менее указанного кол-ва Пользователей или есть комп. с заданным именем.
2) Теперь программа умеет, также, послать сообщение тем пользователям, кто в текущий момент сидит в 1С. Сообщения отсылаются указанному Пользователю или всем в списке (команда /M:).
/M: - послать сообщение тем, кто в списке.
Формат команды M
: /M:Комп:ТекстСообщения
где
Комп - сетевое имя компьютера (если * - то всем в списке)
ТекстСообщения - текст сообщения. Это может быть сообщением или именем текстового файла, где содержится сообщение
(по умолчанию, не более 255 симв)
Пример :
Прочитать список Баз данных из файла : D:\ListDB1.txt. Найти в списке Пользователей компьтер с именем USER-1. Если такой комп. есть - послать ему сообщение, текст которого находится в текстовом файле D:\Mess.txt. Закрыть программу.
/I:D:\ListDB1.txt /M:USER-1:D:\Mess.txt /C:Close
Версия 1.04
Дополнительно к версии 1.03
Теперь для рассылки сообщений есть возможность вести альтернативный список компьютеров. Это специально для тех компов, которые подключены через терминал и в списке активных пользователей "сидят" на одном компе.
ВНИМАНИЕ! На действие команды /М: это не влияет
Версия 1.05
Дополнительно к версии 1.04
Теперь спец. сообщение (при АвтоОпросе) может выводиться не только на экран, но и рассылаться в сеть по спец.списку компьютеров.
***********************
(c) Sergey Popov, Usinsk, Komi, 2003
http://sapopov.kominet.ru
e-mail: sapopov@mail.ru
Сначала небольшой кусочек кода, как это делается :
...
Var
NUser : integer;
//Номер Пользователя
FFileHandle : THandle;
cFN : array[0..255] of Char;
...
NUser:=1;
//Номер Пользователя
//NameLinskTMP-полное имя файла Links.tmp
//(в подкаталоге SYSLOG)
StrPCopy(cFN,NameLinskTMP);
FFileHandle:=CreateFile(cFN,
GENERIC_READ or
GENERIC_WRITE,
FILE_SHARE_READ OR
FILE_SHARE_WRITE,
0,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
if not (LockFile(FFileHandle, $1E8481+NUser, 0, 1, 0)) then
begin
ShowMessage(IntToStr(NUser)+' Пользователь
активен');
end
else begin
UnLockFile(FFileHandle, $1E8481+NUser, 0, 1,
0);
ShowMessage(IntToStr(NUser)+' Пользователь НЕактивен');
end;
CloseHandle(FFileHandle);
Исходники программы GetUsers1C, Delphi-5 (скачать, 130 кб). Тексты можно использовать по своему усмотрению (но только freeware).
Copyright© 2004 Сергей Попов
Другие примеры работы в Delphi с 1С...