|
0
yur4egg
14.11.13
✎
12:29
|
1С 7.7 + SQL + Windows Server 2003
Задача: пользователи часто звонят, прося выбросить их повисшие сеансы, хочется сделать возвможность им самим выбрасывать самих себя.
План решения:
1. Сделать батник, который запускается с ярлыка на компе юзера. Он создает текстовый файл с именем локального компа и сохраняет его где-то в сетевой папке общего доступа.
2. Этот файл служит сигналом для другой программы, которая крутится на сервере, и по нахождению этого файла выбрасывает сеанс клиента с этим именем компа. Затем подчищает текстовый файл.
Проблема в том,что нигде в интернете не смог найти способ, как по имени компа определить ID сеанса или наоборот. Диспетчер задач - единственная прога, которая показывает эту информацию, но она не сохраняет свою таблицу в текст. Утилиты и команды вроде quinsta или query user показывают ID сеанса, но не показывают имя компа. В 1С-ке можно через WScript.Shell можно определить имя пользователя и имя компа, но нельзя определить ID. А выбрасывать сеанс нужно именно по ID. Потому как выбросить по имени не получится, ибо есть одновременно несколько юзеров под одной учеткой на сервере. А выбросить по имени компа я опять же нигде не нашел, как?
|
|
|
4
ADirks
14.11.13
✎
14:16
|
Можно прямым запросом:
при старте
ЗапросСКЛ.УстановитьТекстовыйПараметр("Пользователь", элПользователь);
ЗапросСКЛ.Выполнить("Set NoCount ON
|UPDATE $Справочник.Пользователи
|Set $Справочник.Пользователи.SPID = 0
|WHERE
| $Справочник.Пользователи.SPID = @@SPID
|
|
|UPDATE $Справочник.Пользователи
|Set $Справочник.Пользователи.SPID = @@SPID
|WHERE
| ID = :Пользователь
|");
при завершении
ЗапросСКЛ.УстановитьТекстовыйПараметр("Пользователь", элПользователь);
ЗапросСКЛ.Выполнить("Set NoCount ON
|UPDATE $Справочник.Пользователи
|Set $Справочник.Пользователи.SPID = 0
|WHERE
| ID = :Пользователь
|");
Ну и кроме SPID можно имя клиентского компа ещё писать, и всё что душа пожелает
|
|
|
5
ADirks
14.11.13
✎
14:33
|
кстати, потом этот SPID используется для изощрённого поражения пользователей в правах
| LEFT JOIN $Справочник.СвойстваКонтрагентов СВК ON СВК.ID = "+ОснСв
|WHERE
| IsNull((SELECT $П1.фОграничитьДоступныхКонтрагентов FROM $Справочник.Пользователи П1 WHERE $П1.SPID = @@SPID), 0) = 0
| OR $СВК.ЗначениеСвойства IN (
| SELECT
| $Свойства.Свойство
| FROM
| $Справочник.РазрешенныеКонтрагенты_Свойства Свойства
| WHERE
| Свойства.ParentExt = (SELECT П2.ID FROM $Справочник.Пользователи П2 WHERE $П2.SPID = @@SPID)
| AND Свойства.IsMark = 0
| )
это хвост вьюшки по контрагентам. Выглядит ужасно, но на удивление тормозит вполне приемлемо. Используется в том числе и в журналах документов.
|
|