проблема «слипшихся» проводок

Автор Сообщение
Удалён
Гость

Добавлено: 16.05.2005 09:53 Заголовок сообщения: проблема "слипшихся" проводок
Кто как решает проблему появления в журнале одной компании проводок из разных компаний?
Кроме scaclear по всем компаниям и пользователям есть ли другой способ?
Juri
Заслуженный форумщик

Зарегистрирован: 18.10.2004
Сообщения: 99
Откуда: Tallinn Estonia

Добавлено: 16.05.2005 09:59 Заголовок сообщения:
А насколько часто это происходит?
aav
Администратор
Администратор

Зарегистрирован: 14.09.2004
Сообщения: 1081
Откуда: Санкт-Петербург

Добавлено: 16.05.2005 10:22 Заголовок сообщения: Re: проблема "слипшихся" проводок
Я знаю, что такое может происходить, если «вычищается» работающий пользователь, а на его место входит другой. Так как у них (в 5.1 по крайней мере) занят один номер сессии (кажется, в 5.1 это называется номером терминала), то используются временные файлы с одним и тем же идентификатором, что в итоге и приводит к подобного рода печальным результатам. В данном контексте один из способов борьбы состоит в профилактике, т.е. запрете (возможно, чисто административными НЕ техническими действиями) «выбрасывания» кого-либо для входа в систему на его место. Знаю, некоторые пользователи приспосабливаются так делать, когда их не пускают в Скалу из-за превышения разрешенного количества одновременно работающих пользователей.
Удалён
Гость

Добавлено: 16.05.2005 14:04 Заголовок сообщения:
Происходит это нечасто, но способ исправления очень неуклюжий — приходится выводить из скалы всех работающих без их желания, что приводит к порванным проводкам, если кто-то в этот момент заводит проводку в журнал.

Дело в том, что пересекаются проводки даже людей, которые одновременно работают в данный момент и обе их сессии активны.

А как пользователь может осознанно залогинится в чужую сессию?

aav
Администратор
Администратор

Зарегистрирован: 14.09.2004
Сообщения: 1081
Откуда: Санкт-Петербург

Добавлено: 16.05.2005 15:11 Заголовок сообщения: Как попасть в чужую сессию в 5.1?

Александр Плешаков писал(а):
А как пользователь может осознанно залогинится в чужую сессию?


Осознанно, наверное, не может, если только он не умеет лазать по таблицам, чего, скорее всего, не наблюдается. А вот, если каким-либо образом «сказать» Скале, что пользователь очишен, то его номер терминала (в 5.1) при входе (в частности в другую компанию) дается другому пользователю. Он начинает работать, а тот, кого очистили тоже продолжает некоторое время работать и… Я не могу ничего сказать по поводу того, как это происходит у Вас, но наблюдал следующие сценарии:
1. Пользователь работает в компании 01, ему надо зайти в другую компанию, не выходя из 01-й. Он пытается войти, превышено максимальное количество пользователей. У него несколько возможностей: почистить себя в 01 компании, почистить кого-то в тестовой компании, договориться, чтобы кто-то вышел. Чаще используется последний вариант, но иногда и один из двух первых.
2. Кто-то особо продвинутый пытается войти в Скалу, его не пускают, он лезет в системную таблицу и ставит нолик вместо единички у какого-то пользователя. После этого заходит и что-то делает. Однажды я видел, как из-за этого перехлестнулись аналитические проводки аж в модуле «Управление Запасами», где такого в принципе никогда не наблюдалось. Sad
В любом случае это только возможные догадки, которые могут Вам либо помочь, либо не помочь…

Juri
Заслуженный форумщик

Зарегистрирован: 18.10.2004
Сообщения: 99
Откуда: Tallinn Estonia

Добавлено: 16.05.2005 16:22 Заголовок сообщения:
У нас такие истории случались в 5.1, в 2.2 не наблюдаются. Связаны были, по большей части, с «волевым» очищением работающего юзера. Еще случалось после форс-мажорных вылетов Scala. Один случай был совсем восхитительный, почти у всех пользователей в финансовых модулях появились части проводок друг друга из разных компаний, причем никакой scaclear не помогал, просто песня… Пришлось полностью остановить работу. Потом выяснилось, что в системе две одинаковые таблицы с инфо о пользователями (то ли SY03, то ли SY13 — уже не помню, 5.1 нигде не осталось), но с разными owner’ами. Как и почему так случилось, отдельная история Razz , но было… Про профилактику согласен с aav, надо различными способами запретить любой лишний доступ к функциям администрирования пользователей и к соответствующим таблицам.
Удалён
Гость

Добавлено: 16.05.2005 16:39 Заголовок сообщения:
Так пользователи и не имеют доступа к таблицам.
Это глюк самой скалы.
Jugulator
Главный форумщик

Зарегистрирован: 08.10.2004
Сообщения: 428

Добавлено: 16.05.2005 17:26 Заголовок сообщения: SQL: примеры просмотра информации о терминалах (demo)
/* Scala 5.1 SR13, MS SQL 2000 SP4 */
declare @sy03 table (i int PRIMARY KEY, inuse int)
declare @i int
declare @sy03len int
declare @sy03chr char(1)
declare @sy03str varchar(255)
declare @tab_name char(8)
declare @sy13 table (compcode char(2), usercode char(8), i int)
DECLARE @sqlstr nvarchar(1000)

SET NOCOUNT ON
SET QUOTED_IDENTIFIER OFF

SELECT
TOTAL_TERMINALS_IN_USE = len(replace(SY03003,char(0x58),SPACE(0))),
TOTAL_TERMINALS_IN_LIC = len(SY03003),
TOTAL_USERS_USING_MODULES =
CONVERT(INT,SY03004) +
CONVERT(INT,SY03005) +
CONVERT(INT,SY03006) +
CONVERT(INT,SY03007) +
CONVERT(INT,SY03008) +
CONVERT(INT,SY03009) +
CONVERT(INT,SY03010) +
CONVERT(INT,SY03011) +
CONVERT(INT,SY03012) +
CONVERT(INT,SY03013) +
CONVERT(INT,SY03014) +
CONVERT(INT,SY03015) +
CONVERT(INT,SY03016) +
CONVERT(INT,SY03017) +
CONVERT(INT,SY03018) +
CONVERT(INT,SY03019) +
CONVERT(INT,SY03020) +
CONVERT(INT,SY03021)
FROM SY030000

SELECT @sy03len = len(SY03003) from SY030000
PRINT @sy03len
SET @i = 0

WHILE @i <= @sy03len
BEGIN
SELECT @sy03chr = substring(SY03003, @i + 1, 1) from SY030000
PRINT @sy03chr
INSERT INTO @sy03 (i, inuse) VALUES (@i, ascii(@sy03chr) % 88 / 79) —select ascii(‘X’), ascii(‘O’)
SET @i = @i + 1
END

select * from @sy03 order by i

DECLARE sy13_cursor CURSOR FAST_FORWARD FOR
select so.[name] as tab_name from sysobjects so
where so.xtype = ‘U’ and len(rtrim(so.name)) = 8 and left(so.[name],4) = ‘SY13’
and substring(so.[name],5,2) in (select SY15001 from SY150000)
order by so.name

OPEN sy13_cursor

FETCH NEXT FROM sy13_cursor INTO @tab_name

WHILE @@FETCH_STATUS = 0
BEGIN
SET @sqlstr = ‘SELECT »’ + substring(@tab_name,5,2)
+ »’ AS SY13000, SY13001, CONVERT(INT,SY13024) AS SY13024 INTO ##sy13 FROM ‘
+ @tab_name + ‘ WHERE SY13024 <> »-1»’

PRINT @sqlstr
EXEC(@sqlstr)

INSERT INTO @sy13 (compcode, usercode, i) SELECT SY13000, SY13001, SY13024 FROM ##sy13
DROP TABLE ##sy13

FETCH NEXT FROM sy13_cursor INTO @tab_name
END

CLOSE sy13_cursor
DEALLOCATE sy13_cursor

SELECT a.compcode, a.usercode, a.i, b.inuse FROM @sy13 a INNER JOIN @sy03 b on a.i = b.i ORDER BY a.i

SET NOCOUNT OFF
SET QUOTED_IDENTIFIER ON
GO

Удалён
Гость

Добавлено: 16.05.2005 17:33 Заголовок сообщения:
Как этот скрипт поможет решить проблему?
Jugulator
Главный форумщик

Зарегистрирован: 08.10.2004
Сообщения: 428

Добавлено: 16.05.2005 17:47 Заголовок сообщения:
На основе этого скрипта можно сделать запросы, показывающие логические ошибки при работе с терминалами в Скале, например, если два разных пользователя используют один и тот же номер терминала, если терминал назначен пользователю в SY13, а в SY03 терминал числится доступным и т.п. Можно дописать и анализ использования модулей (лицензии), если взять поле SY13027 и сравнить с общим количеством пользователей в модуле в SY03 и т.д. Этот скрипт — просто демонстрашка, но имея подобный код, можно алерты какие-нибудь повесить, когда ситуация заведомо ошибочная. Меня эти вопросы уже не интересуют, поскольку 2.2, а во времена 5.1 подобные запросы использовал, и «двойников» видел, потом принимал меры — выгонял конкретно их, чистил. Либо, если по какой-то причине в SY03 оставалась запись, что терминал занят, хотя пользователь уже вышел, то корректировал SY03, чтобы освободить лицензию. Скрипт — не догма, а руководство к действию.
REBUS
Заслуженный форумщик

Зарегистрирован: 07.12.2005
Сообщения: 87
Откуда: Астана

Добавлено: 02.02.2012 08:30 Заголовок сообщения:
Для чего нужны поля SY03004 — SY03021?
Они должны быть с нулем, если все пользователи вышли из Scala 5.1?
_________________
Rebus
Jugulator
Главный форумщик

Зарегистрирован: 08.10.2004
Сообщения: 428

Добавлено: 02.02.2012 09:11 Заголовок сообщения:

REBUS писал(а):
Для чего нужны поля SY03004 — SY03021?
Они должны быть с нулем, если все пользователи вышли из Scala 5.1?


В полях SY03004-SY03021 должно быть общее количество работающих в соответсвующих модулях пользователей. Скорее всего, это по порядку, как в поле SY13027 (текущий рабочий модуль пользователя в таблице SY13<CC>00):

    0 — SY (Системные Утилиты)
    1 — GL (Главная Книга)
    2 — SL (Книга Продаж)
    4 — PL (Книга Закупок)
    7 — SC (Управление Запасами)
    8 — OR (Заказы на Продажу)
    9 — PC (Заказы на Закупку)
    10 — ST (Статистика)
    11 — PA (Зарплата)

Следуя этой логике, в поле SY03014 может быть общее количество пользователей, использующих модуль Зарплата. Проверить это предположение не могу, работающей системы у меня сейчас нет.

REBUS
Заслуженный форумщик

Зарегистрирован: 07.12.2005
Сообщения: 87
Откуда: Астана

Добавлено: 02.03.2012 05:51 Заголовок сообщения:
Jugulator,
спасибо за разъяснение.
_________________
Rebus