При аварийном выходе из 1С 8.0 на сервере 1С остается висеть соединение с захватом объектов, которые были открыты на момент вылета. При повторном подключении юзера он не может открыть документы, которые только что редактировал! Требутся вмешательство администратора, чтобы через утилиту Серверы 1С отсоединить пользователя. 1С говорит, что через 6-8минут зависшие соединения удаляются автоматически. Однако у нас висят по нескольку часов. Ерунда получается. Надо выделять человека, который будет скидывать зависших пользователей. В системе работает около 20 пользователей в реальном режиме времени и ждать никто не намерен. Какой может быть выход? Проблема стоит очень остро, вплоть до сворачивания проекта!

===============================

1С версия 8.0.7.36, ключ многопользовательский на 50 мест, конфигурация разрабатывалась практически с нуля. Сервера 1С и SQL разнесены на разные компьютеры. По ошибкам статистику не вели, но были разные, в основном связанные с блокировками.
Попутно возник вопрос: можно ли выполнить замер производительности на сервере, когда работает много пользователей или производительность может измеряться только для той конфигурации, в которой запущена?
Пользователи активно создают "заявки клиентов", затем их группируют в документы "загрузочные ведомости" по машинам и формируют "накладные".
Причем хотят видеть есть по заявке ТТН или нет, проведена она или нет и т.п.
Плюс к этому добавили регистр сведений в который пишем какие действия с документами выполняет пользователь (запись, проведение, создание и т.д.). Часто при записи регистра возникали ошибки. Может что-то не так в функции?

Код 1c:
Функция глЗафиксироватьАвтораИзменения(прСсылка,прДействие) Экспорт
    //блокируем записи регистра
 
    лкПериод = ТекущаяДата();
    Запрос = Новый Запрос("ВЫБРАТЬ                          |    ИзмененияДокументовСрезПоследних.Документ                  |ИЗ
      |    РегистрСведений.ИзмененияДокументов.СрезПоследних(&Период, Документ = &Документ) КАК ИзмененияДокументовСрезПоследних
      |ДЛЯ ИЗМЕНЕНИЯ
      |    РегистрСведений.ИзмененияДокументов.СрезПоследних");
 
    Запрос.УстановитьПараметр("Период",  лкПериод);                
    Запрос.УстановитьПараметр("Документ",прСсылка);                      
    Результат = Запрос.Выполнить();
 
    Попытка
    МенеджерЗаписи = РегистрыСведений.ИзмененияДокументов.СоздатьМенеджерЗаписи();
    МенеджерЗаписи.Период   = лкПериод;
    МенеджерЗаписи.Документ = прСсылка;
    МенеджерЗаписи.Действие = прДействие;
    МенеджерЗаписи.Автор    = глПользователь;
    МенеджерЗаписи.Записать();
Исключение
    Сообщить("Не удалось записать автора документа: " + ОписаниеОшибки(), СтатусСообщения.Важное);
    Возврат(Ложь);
КонецПопытки;
Возврат(Истина);
КонецФункции // глЗафиксироватьАвтораИзменения(прОбъект)

============================================

SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS ON
GO

/****** Object: Stored Procedure dbo._sp_FreeDB Script Date: 25.12.00 17:42:14 ******/
if exists (select * from sysobjects where id = object_id(N'[dbo].[_sp_FreeDB]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)

drop procedure [dbo].[_sp_FreeDB]

GO

CREATE PROCEDURE _sp_FreeDB

@Name sysname=NULL,
@Dir1C varchar(128)=NULL
AS


if (@Name is NULL)
print('_sp_FreeDB
@Name sysname,
@Dir1C varchar(128)=NULL')

declare @spid int,
@host varchar(20),
@user varchar(20),
@app varchar(20),
@cmd varchar(128),
@strdata varchar(100)


declare Cur_Proc cursor local fast_forward for
Select SPID,HOSTNAME,LOGINAME,PROGRAM_NAME from master.dbo.sysprocesses where upper(db_name(dbid))=upper(@Name)


open Cur_Proc
fetch from Cur_Proc into @spid,@host,@user,@app
while @@FETCH_STATUS=0
begin
Select @cmd='kill '+rtrim(convert(varchar(5),@spid))
Select @strdata='kill '+ltrim(str(@spid))+' '+rtrim(@host)+' '+rtrim(@user)+' '+rtrim(@app)
print @strdata
execute (@cmd)

fetch from Cur_Proc into @spid ,@host,@user,@app

end
close Cur_Proc
deallocate Cur_Proc


if (@Dir1C is not NULL)
begin
exec master.dbo.xp_cmdshell 'net session /delete /y'

Select @cmd='del '+@Dir1C+'\*.lck'
exec master.dbo.xp_cmdshell @cmd
Select @cmd='del '+@Dir1C+'\*.$lk'
exec master.dbo.xp_cmdshell @cmd
Select @cmd='del '+@Dir1C+'\*.$ui'
exec master.dbo.xp_cmdshell @cmd
end

return






















GO

SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS ON
GO