Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Paul Житель острова Крит
Зарегистрирован: 12.03.2005 Сообщения: 161
|
Добавлено: Чт Апр 10, 2008 5:31 am Заголовок сообщения: |
|
|
Юров Ю.С. писал(а): | Вот на этот момент (Workarea_OnLoad) и подменять в базе данных. |
А если два человека одновременно входят в Акцент? |
|
Вернуться к началу |
|
|
Geo.K
Зарегистрирован: 28.11.2007 Сообщения: 66
|
Добавлено: Чт Апр 10, 2008 7:51 am Заголовок сообщения: |
|
|
Юров Ю.С. писал(а): | Вот на этот момент (Workarea_OnLoad) и подменять в базе данных. А хранить в UserParams - диалогом раздачи периодов владеет только главбух или его доверенные лица. |
Хранить в UserParams - это почти очевидно. Я имею ввиду то, что неизвестно (пока), когда считывается защищенный период - до события Workarea_OnLoad или после. Если после, то теоретически можно и в базе подменить. Я так понял, это значит переписать значения в SYS_PARAMS. А если на предприятии штук 20 Акцентов и все они входят в него примерно с 8:30 до 8:40? Большая вероятность того, что пойдет бардак. Поэтому нужно переписать хранимку, которая по логину будет возвращать правильный защищенный период (единожды при входе в Акцент). |
|
Вернуться к началу |
|
|
olimp Site Admin
Зарегистрирован: 10.03.2005 Сообщения: 2661
|
Добавлено: Чт Апр 10, 2008 8:13 am Заголовок сообщения: |
|
|
На уровне SQL самое правильное решение :
1. Добавить таблицу с юзерами и разрешенными периодами
2. Написать триггер, который будет проверять соответствие разрешенного периода и периода сохраняемого документа
3. Написать диалог, который будет устанавливать защищенный период для каждого юзера
4. Убрать стандартную проверку.
На уровне DAO решения проблемы нет. |
|
Вернуться к началу |
|
|
Paul Житель острова Крит
Зарегистрирован: 12.03.2005 Сообщения: 161
|
Добавлено: Чт Апр 10, 2008 9:46 am Заголовок сообщения: |
|
|
Никто не подскажет, можно ли как-то на TSQL получить все группы, в которые входит пользователь? |
|
Вернуться к началу |
|
|
Юров Ю.С.
Зарегистрирован: 11.03.2005 Сообщения: 383 Откуда: Павлоград
|
Добавлено: Чт Апр 10, 2008 9:50 am Заголовок сообщения: |
|
|
olimp писал(а): | На уровне SQL самое правильное решение :
|
И не захочешь делать...
Есть очень большое подозрение, что данные о периоде из SYS_PARAMS читаются только при старте программы и при выполнении команды RefreshPeriod. А чё туда ещё лазить запросами?
Я накропал своё видение решения вопроса http://www.nansi.com.ua/content/blogsection/8/72/
В работе не проверял, всё основано только на этом допущении.
Я тоже не сторонник того, чтобы каждый пользователь работал в своём периоде. |
|
Вернуться к началу |
|
|
olimp Site Admin
Зарегистрирован: 10.03.2005 Сообщения: 2661
|
Добавлено: Чт Апр 10, 2008 9:55 am Заголовок сообщения: |
|
|
Юров Ю.С. писал(а): | olimp писал(а): | На уровне SQL самое правильное решение :
|
И не захочешь делать...
|
Разница в том, что мой метод не основывается на предположениях
И работать будет железобетонно правильно. |
|
Вернуться к началу |
|
|
Юров Ю.С.
Зарегистрирован: 11.03.2005 Сообщения: 383 Откуда: Павлоград
|
Добавлено: Чт Апр 10, 2008 10:22 am Заголовок сообщения: |
|
|
Paul писал(а): | Никто не подскажет, можно ли как-то на TSQL получить все группы, в которые входит пользователь? |
Код: | exec ap_user_getgroups2 'Дина'
nm isAdmin
_Users 0
_бух 0 |
|
|
Вернуться к началу |
|
|
Юров Ю.С.
Зарегистрирован: 11.03.2005 Сообщения: 383 Откуда: Павлоград
|
Добавлено: Чт Апр 10, 2008 10:26 am Заголовок сообщения: |
|
|
olimp писал(а): | Разница в том, что мой метод не основывается на предположениях
И работать будет железобетонно правильно. |
А мой будет работать в DAO
Если вобще будет
Может кто-то захочет проверить?
PS
Оба на! Чё-то меня занесло.
Этот метод Шевчук предложил на предыдущей странице - два года назад.
Извиняюсь за невнимательность - авторское право священно...
Последний раз редактировалось: Юров Ю.С. (Пт Апр 11, 2008 8:13 pm), всего редактировалось 1 раз |
|
Вернуться к началу |
|
|
Paul Житель острова Крит
Зарегистрирован: 12.03.2005 Сообщения: 161
|
Добавлено: Чт Апр 10, 2008 11:43 am Заголовок сообщения: |
|
|
Спасибо Юров Ю.С.
Получилось все сделать в общем виде.
Я протестирую на клиенте, если будет интересно - вышлю.
Смысл решения - переписаны процедуры:
ap_sysperiod_load и ap_sys_load
Добавлена таблица:
_pSYS_PARAMS с дополнительным полем GROUP_NAME.
Для тех групп, в которые фигурируют в GROUP_NAME, берется отдельный рабочий период. |
|
Вернуться к началу |
|
|
Юров Ю.С.
Зарегистрирован: 11.03.2005 Сообщения: 383 Откуда: Павлоград
|
Добавлено: Чт Апр 10, 2008 1:09 pm Заголовок сообщения: |
|
|
Paul писал(а): | Смысл решения - переписаны процедуры:
ap_sysperiod_load и ap_sys_load
Добавлена таблица:
_pSYS_PARAMS с дополнительным полем GROUP_NAME. |
Тоже вариант. Но переписывать системные процедуры как-то не есть хорошо (по определению).
Хотя... Если парсить текст этой процедуры диалогом и хранить данные о периодах пользователей прямо в ней... Наверно ещё большее зло, но наверняка не собьётся при обновлении релиза Акцента. Шутка.
Geo.K писал(а): |
Я так понял, это значит переписать значения в SYS_PARAMS. А если на предприятии штук 20 Акцентов и все они входят в него примерно с 8:30 до 8:40? Большая вероятность того, что пойдет бардак. |
Да, я предлагаю такой подход. Есть команда RefreshPeriod, её нужно включить в процедуру, выполняющуюся в Workarea_OnLoad - в это время данные о правах загружены, но интерфейс ещё не появился.
Чтобы Акцент прочитал именно подложенные ему данные, предлагалось в конце процедуры проверить соответствие установившегося процедурой периода заданному, и если надо, повторять процедуру до полного просветления. Но проверить разрешённый период оказалось очень непросто Для такой проверки раньше я сам читал данные из SYS_PARAMS
В ДАО можно заключить в транзакцию запись подставного значения, workarea.RefreshPeriod и восстановление стандартного значения.
В SQL разные области определения транзакций от Акцента и workarea.ADOConnection. Остаётся только флаг в UserParams добавить - кто эти данные записал, тот и будет читать. |
|
Вернуться к началу |
|
|
fly
Зарегистрирован: 31.05.2005 Сообщения: 108
|
Добавлено: Чт Апр 10, 2008 2:18 pm Заголовок сообщения: |
|
|
Юров Ю.С. писал(а): |
Я тоже не сторонник того, чтобы каждый пользователь работал в своём периоде. |
Тут вопрос не для пользователей, а именно для групп. Для бухгалтерии период должен постоянно закрываться, после закрытия отчетного периода.
Но сколько у вас подключено различных настроек к базе, столько может быть и периодов. Если не больше...
У меня минимум 3 различных участка учета, которые только косвенно зависят друг от друга. И документы, за которые отвечают работники каждого участка, у каждого свои.
Я решал этот вопрос немного по-другому. Но решение olimp'a мне нравится с ходу. А ваше нужно покрутить. Хотя все они не без изъянов. С понравившимся прийдется постоянно следить за скриптами обновления БД |
|
Вернуться к началу |
|
|
olimp Site Admin
Зарегистрирован: 10.03.2005 Сообщения: 2661
|
Добавлено: Чт Апр 10, 2008 2:27 pm Заголовок сообщения: |
|
|
fly писал(а): | С понравившимся прийдется постоянно следить за скриптами обновления БД |
Накатывай свои скрипты измененных стандартных процедур после установки обновления.
К тому же 7-ка уже практически не обновляется. |
|
Вернуться к началу |
|
|
Юров Ю.С.
Зарегистрирован: 11.03.2005 Сообщения: 383 Откуда: Павлоград
|
Добавлено: Чт Апр 10, 2008 3:10 pm Заголовок сообщения: |
|
|
fly писал(а): | Но решение olimp'a мне нравится с ходу. |
Если разобраться, в нём есть одна загвоздка
olimp писал(а): | 2. Написать триггер, который будет проверять соответствие разрешенного периода и периода сохраняемого документа |
Как сделать триггер на запрет сохранения документов?
http://www.accent6.com/forum/viewtopic.php?t=681&highlight=trigger - тогда мне на этот вопрос никто не ответил.
Может Olimp знает? |
|
Вернуться к началу |
|
|
olimp Site Admin
Зарегистрирован: 10.03.2005 Сообщения: 2661
|
Добавлено: Чт Апр 10, 2008 7:27 pm Заголовок сообщения: |
|
|
Юров Ю.С. писал(а): | fly писал(а): | Но решение olimp'a мне нравится с ходу. |
Если разобраться, в нём есть одна загвоздка
olimp писал(а): | 2. Написать триггер, который будет проверять соответствие разрешенного периода и периода сохраняемого документа |
Как сделать триггер на запрет сохранения документов?
http://www.accent6.com/forum/viewtopic.php?t=681&highlight=trigger - тогда мне на этот вопрос никто не ответил.
Может Olimp знает? |
А кто отменял триггеры для INSERT или UPDATE ? |
|
Вернуться к началу |
|
|
Юров Ю.С.
Зарегистрирован: 11.03.2005 Сообщения: 383 Откуда: Павлоград
|
Добавлено: Чт Апр 10, 2008 7:55 pm Заголовок сообщения: |
|
|
olimp писал(а): | А кто отменял триггеры для INSERT или UPDATE ? |
А у меня здесь какой? http://www.accent6.com/forum/viewtopic.php?t=681&highlight=trigger
Откатить сохраняемый документ триггером, если его дата не в периоде, скорее всего получится легко. Мой вопрос несколько выходит за пределы темы, я его снимаю. |
|
Вернуться к началу |
|
|
|