![]() |
![]() |
|
Теоретический вопрос: проблемы некорректного выхода в 1C 7.7 ₽ |
☑ | ||||||
---|---|---|---|---|---|---|---|---|
0
Granata005
14.12.07
✎
11:14
|
Интересует решение проблем некорретного выхода из 1С 7.7. (из терминалов и с простых компьютеров).
. Лично я наблюдал два вида проблем возникающих в этом случае: 1. Файлы \\server\1CDatabase\1Cv7.LCK; 1Cv7.$ui файлы \\server\Юзер1,2,...,99\1Cv7.LCK Файлы \\server\1CDatabase\1Cv7.LCK остаются заблокированным - вход в 1С не возможен (у всех или у конкретного юзера - в зависимости от расположения лок-файла)... . Приходится заходить в остнастку администрирования "Управление компьютером" - "Открытые файлы" и прибивать их... 2. Блокировка на SQL (не уверен что она связана только с некорректным выходом) В базе остаётся блокировка процесса "Select NETCHGCN from _1SUSERS(NOLOCK)", т.е. при входе 1С-ка вроде бы как пытается получить кол-во действий пользователей, которые привели к изменению в базе данных, при этом хоть кол-во и равно 0 (а в базе никого нет) - дальнейшие запросы не идут... . Приходится опять же заходить в Enterprise Manager и Kill Process. . . Это всё конечно хорошо, я разобрался как это без проблем быстро делать ручками, но как-то надо некрасиво каждый раз лезть на сервак ради этого... должны быть же какие-то средства для избавления от этих проблем. Так например на одном из форумов я читал что для терминальщиков нужно настроить "Reconnect if disconnect...", тогда клиент потеряв коннект, будет при следующем коннекте "ловить" предыдущую сессию. Или например пропатчивание на проверку блокировки 1Cv7.LCK. . . Как вы решаете проблемы некорректного выхода? |
|||||||
1
nop
14.12.07
✎
11:21
|
Ручками. |
|||||||
2
Йожык
14.12.07
✎
11:36
|
(0) увидел шо выходят некоректно, сразу по башке им, по башке :)
|
|||||||
3
Granata005
14.12.07
✎
11:45
|
Давайте не просто голосовать, но и пообсуждаем :)
. Насколько вообще реально вычислить что пользователя выкинуло? Так, вход регистритуется в лок-файлах и SYSLOG\links.tmp, существует ли какое-то событие по которому чётко можно определить что пользователь всё ещё работает в базе, и его не выкинуло... например поддерживается сетевое подключение к SQL. Так, если будет чёткий признак того что пользователь находится в базе можно будет написать софтинку для сервера для периодической проверки РЕАЛЬНОЙ активности пользователя, и автоматизировать отрубление локов... |
|||||||
4
Йожык
14.12.07
✎
11:55
|
Если я не ошибаюсь на скуле есть табличка с подключениями, не помню как называеться, но что-то вроде sysproceses, а на дбф нужно лочить файл links.tmp
|
|||||||
5
Granata005
14.12.07
✎
11:57
|
Таблица _1SCONNECT - Сессии (соединения)
Краткое описание: таблица предназначена для хранения уникального идентификатора сессии первого присоединившегося к базе данных пользователя в режиме предприятия (поэтому в таблице всегда только одна запись). Судя по всему, именно по наличию записи в этой таблицы и происходит верификация процедур при первом запуске в SQL. Название поля Описание CONNECTUUID GUID (уникальный идентификатор) первого сеанса, соединившегося с 1С в режиме предприятия. Тип - Строка(36). . . Я ещё не пробовал проверять её содержимое при корректном/некорректном выходах... |
|||||||
6
Granata005
14.12.07
✎
11:58
|
Хотя предложенная вами таблица master БД, наверное будет более точна....
|
|||||||
7
Йожык
14.12.07
✎
12:02
|
и вот еще Как монитор определяет пользователей
имхо: лучше решать такие проблемы административно, т.к. наиболее частые случаи, тож имхо, возникают из-за некоректных действий юзера |
|||||||
8
Granata005
14.12.07
✎
12:05
|
(7) - это я читал :)
(5)я имел ввиду: :) Таблица _1SUSERS - Соединения Краткое описание: таблица предназначена для хранения информации о подключенных пользователях. В таблице всегда одна строка. Именно по наличию строки в этой таблице 1С судит об аварийном завершении программы и предлагает переиндексировать ИБ в случае dbf-версии. Название поля Описание USRSCNT Количество подключенных пользователей к 1С в режиме 1С предприятия. NETCHGCN Счетчик действий пользователей, которые привели к изменению в базе данных (записи в таблицы). Счетчик учитывает количество записей в таблицы (т.е. в случае проведения документа с несколькими движениями учитывается каждое движение). . . Хотя думаю её использование все равно не поможет... т.к. изменение данных таблицы происходит только при корректном выходе (насколько я понимаю) |
|||||||
9
Granata005
14.12.07
✎
12:50
|
(7) а если я в отпуск хочу? )))))
|
|||||||
10
Granata005
15.12.07
✎
13:03
|
Чё так и будем ручками тыкать или напишем софтинку? :)
я на Делфи,С++,VB могу взяться :) |
|||||||
11
Йожык
15.12.07
✎
13:16
|
(10) дык пиши... в зависимости от того какая база, у мня знакомый написал прогу, видит кто сидит в скульной базе, отсылает им сообщения, и потом киляет их... данные из таблички сиспроцессес... что не понятно? тем более если такие познания языков, давно бы уже написал :)
|
|||||||
12
Granata005
15.12.07
✎
14:34
|
Дык просто времени нет сейчас :D
Да и в 1С ещё не мастер :) вот и решил для начала пробить почву... т.е. провести предварительную оценку предметной области и создать план... |
|||||||
13
Фокусник
15.12.07
✎
20:18
|
(0) в терминале (dbf) решил проблему так: запуск 1С через батник идет, в котором предварительно грохаются lck, а ночью киляем оставшиеся процессы скриптом и пакетным файлом делаем индексацию. За несколько лет уже забыли что такое утренняя переиндексация
|
|||||||
14
Туц
16.12.07
✎
15:13
|
(13) Это не всегда годится. За ночь может не успеть.
Ручками. |
|||||||
15
sidalexsandr
16.12.07
✎
15:35
|
Если тебя небудет они накрайняк могут все выходить из 1с и перегружать сервак.
Потом заходить переиндексировать базу и работать. |
|||||||
16
Granata005
17.12.07
✎
13:02
|
Решил начать с блокировки на SQL процесса "Select NETCHGCN from _1SUSERS(NOLOCK)"
Но встал на проблемах различных версий SQL. Так для получения текста последней комманды можно использовать fn_get_sql http://technet.microsoft.com/ru-ru/library/ms189451.aspx http://sqljunkies.com/WebLog/acalvett/archive/2006/03/27/19780.aspx и простой код: DECLARE @Handle varbinary(64); SELECT @Handle = sql_handle FROM master.dbo.sysprocesses SELECT * FROM ::fn_get_sql(@Handle); GO ничего не выдаёт на одних версиях, а на других уже отсутствует fn_get_sql.... |
|||||||
17
shaggyboy
17.12.07
✎
13:10
|
ну ты монстер.
|
|||||||
18
Granata005
17.12.07
✎
14:14
|
Не с того я начал... начать нужно с идентификации терминального юзера...
|
|||||||
19
Granata005
17.12.07
✎
14:20
|
И не нужно прикалываться :)
не тупица я - вот: http://forum.ishodniki.ru/index.php?action=profile;u=7732 p.s. не хвалюсь... |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |