Добавлено: Вс Янв 06, 2008 9:22 am Заголовок сообщения: Защищенный период
Появилась острая необходимость в установке запрета на редактирование документов для определеных пользователей.
В Акценте предусмотрена возможность установки такого периода. Только одна беда он работает для всех пользователей.
Ситуация такая. Все пользователи должны работатать например только в январе или даже текущим днем. Бухгалтер же может зайти в другой период и отредактировать или даже создать какой то документ. Если он для себя снимет защиту, то после перезагрузки Акцента у другого пользователя он (другой пользователь) получает доступ к тому периоду что установил бухгалтер.
Кто и как с этим боролся. Не хочется изобретать очередной велосипед. В идеале хочется устанавливать защищенный период для каждого пользователя свой.
У меня есть такая же необходимость. Лезть в хранимки, которые достают разрешенный период страшновато.
Главное - не понятно достаточно ли исправить хранимку, которая достает этот период из базы, для того, чтобы он доставался иначе. Если достаточно, то можно относительно легко их переделать и сделать диалог установки периодов, разным пользователям.
Второй выход - написать триггера на DOCUMENTS, JOURNAL, JRN_MISC, JRN_PARAMS выглядит громоздко и не стандартно.
У меня есть такая же необходимость. Лезть в хранимки, которые достают разрешенный период страшновато.
Главное - не понятно достаточно ли исправить хранимку, которая достает этот период из базы, для того, чтобы он доставался иначе. Если достаточно, то можно относительно легко их переделать и сделать диалог установки периодов, разным пользователям.
Второй выход - написать триггера на DOCUMENTS, JOURNAL, JRN_MISC, JRN_PARAMS выглядит громоздко и не стандартно.
И какой тогда смысл защищенного периода, когда каждый может делать что хочет ? Открывайте декабрь, а проблемы потом в протоколе будете ловить.
Добавлено: Вт Янв 08, 2008 11:15 am Заголовок сообщения: Re: Защищенный период
RUMIN писал(а):
Появилась острая необходимость в установке запрета на редактирование документов для определеных пользователей.
В Акценте предусмотрена возможность установки такого периода. Только одна беда он работает для всех пользователей.
Ситуация такая. Все пользователи должны работатать например только в январе или даже текущим днем. Бухгалтер же может зайти в другой период и отредактировать или даже создать какой то документ. Если он для себя снимет защиту, то после перезагрузки Акцента у другого пользователя он (другой пользователь) получает доступ к тому периоду что установил бухгалтер.
Кто и как с этим боролся. Не хочется изобретать очередной велосипед. В идеале хочется устанавливать защищенный период для каждого пользователя свой.
Есть такое понятие как "состояние"
ну а если вы хотите запретить пользователю выбирать период, так необходимо у разработчиков просить событие на изменение периода и самим его контролировать (я не помню такого события, может оно и есть)
У меня есть такая же необходимость. Лезть в хранимки, которые достают разрешенный период страшновато.
Главное - не понятно достаточно ли исправить хранимку, которая достает этот период из базы, для того, чтобы он доставался иначе. Если достаточно, то можно относительно легко их переделать и сделать диалог установки периодов, разным пользователям.
Второй выход - написать триггера на DOCUMENTS, JOURNAL, JRN_MISC, JRN_PARAMS выглядит громоздко и не стандартно.
В догонку. Если делать более одного разрешенного периода, то контроль за ним уйдет с сервера на клиента.
Задачу можно решить так:
1. Запомнить даты начала и окончания разрешенного периода.
2. Записать запросом в таблицу SYS_PARAMS даты начала и окончания разрешенного периода для данного пользователя.
3. Вызвать Workarea.RefreshPeriod.
4. Записать запросом в таблицу SYS_PARAMS запомненные даты начала и окончания разрешенного периода.
И какой тогда смысл защищенного периода, когда каждый может делать что хочет ? Открывайте декабрь, а проблемы потом в протоколе будете ловить.
Смысл простой, есть оператор, он должен работать в узком диапазоне, вчера, сегодня.
Есть бухгалтер, который сводит месяца и работает в диапазоне предыдущий месяц, текущий месяц. Иногда, не дай бог, и более ранний срок. Хотелось бы, чтобы пока бухгалтер правит предыдущий квартал, оператор там не хулиганил. Лог в данном случае помошник слабый, он поможет найти виноватого, но не исправить проблему.
olimp писал(а):
В догонку. Если делать более одного разрешенного периода, то контроль за ним уйдет с сервера на клиента.
Не вижу никакой связи между причиной и предполагаемым следствием. Даже триггером можно сделать разные периоды для разных пользователей.
Добавлено: Пн Янв 14, 2008 11:39 am Заголовок сообщения:
Paul писал(а):
Смысл простой, есть оператор, он должен работать в узком диапазоне, вчера, сегодня.
Есть бухгалтер, который сводит месяца и работает в диапазоне предыдущий месяц, текущий месяц. Иногда, не дай бог, и более ранний срок.
Напиши триггер, добавь диалог для работы с группами.
Даже триггером можно сделать разные периоды для разных пользователей.
А можно поподробнее, как сделать триггером запрет изменения документа?
Мне приходится в триггере вызывать критическую ошибку и рвать соединение, иначе виснет пользователь. Одно утешатет, что в логе сервера по 50000 видно, кто пытался влезть куда не положено.
Добавлено: Ср Апр 09, 2008 9:44 am Заголовок сообщения:
Извините, только заметил вопрос. У меня есть пример запрета правки корреспондентов для всех пользователей кроме одного:
CREATE TRIGGER [dbo].[LockAg] ON [dbo].[AGENTS]
AFTER INSERT, UPDATE
AS
If Exists(SELECT AG_ID FROM inserted where AG_ID = 1) and (@usr = N'Admin')
BEGIN
raiserror (' Править свойства фирмы может только Admin', 16, 1)
rollback transaction
END
Аналогично можно блокировать таблицы DOCUMENTS, DOC_PARAMS, JOURNAL, JRN_PARAMS в зависимости от имени пользователя либо вхождения пользователя в определенную группу Isnull(IS_MEMBER ('_Кладовщики'), 0) = 1
raiserror - в данном случае выводит сообщение в Акцент
Добавлено: Ср Апр 09, 2008 10:58 am Заголовок сообщения:
Paul писал(а):
Кто-нибудь решил проблему отдельных защищенных периодов для разных пользователей в общем виде?
Да тут по моему все просто
1) Создаем диалог правки разрешений периодов для пользователей
2) В UserParam заносим дату начала и окончания периода
3) Во все формочки перед открытием вставляем функцию проверки возможности правки
У меня есть пример запрета правки корреспондентов для всех пользователей кроме одного
Паш, для журнала RAISERROR + rollback transaction не получается.
Вернее так - удаление документа спокойно откатывает, а после отката изменения идут неисправимые глюки.
Я этим занимался достаточно упорно, но допускаю, что существует какой-то вариант.
Там получается, что транзакция начинается методами API, а мы пытаемся завершить её TSQL-ными методами.
Что-то связанное с пресловутой sp_unprepare.
3) Во все формочки перед открытием вставляем функцию проверки возможности правки
А вручную через журнал? А модуль какой-нибудь запустить, который скопом создает/удаляет операции?
Как по мне, так нужно переделать хранимки, возвращающие защищенный период. Паша, насколько я знаю, начал что-то подобное делать - можно идею довести до конца, только в более общем виде.
Как по мне, так нужно переделать хранимки, возвращающие защищенный период.
А в чём проблемы с защищённым периодом?
Разве он не кешируется на локальном компьютере?
Какие-то хранимки его читают прямо из базы данных?
По-моему период читается один раз - при загрузке Workarea, когда логин уже известен. А если не изменять на локальном компьютере, он таким для этого пользователя и останется, как при запуске Акцента. Вот на этот момент (Workarea_OnLoad) и подменять в базе данных. А хранить в UserParams - диалогом раздачи периодов владеет только главбух или его доверенные лица.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах