AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Функционал
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.07.2006, 15:23   #1  
блондинка is offline
блондинка
Участник
 
27 / 10 (1) +
Регистрация: 21.06.2005
Адрес: СПб
Как блокировать одновременный доступ к Заказу?
Товарищи по Axapta, подскажите, пожалуйста, никто не сталкивался с такой задачей:

Необходимо не допускать одновременной работы 2х и более пользователей в одной шапке(строках) Заказа/Закупки.
Работаем на 2х звенке, Axapta 3.0.
Старый 18.07.2006, 15:37   #2  
lagr221374
Гость
 
n/a
Цитата:
Сообщение от блондинка
Товарищи по Axapta, подскажите, пожалуйста, никто не сталкивался с такой задачей:

Необходимо не допускать одновременной работы 2х и более пользователей в одной шапке(строках) Заказа/Закупки.
Работаем на 2х звенке, Axapta 3.0.
Глупый наверное вопрос, но зачем?
Старый 18.07.2006, 16:00   #3  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
lagr221374, на ник посмотрите.

А вообще речь идет о поиске стандартной функциональности или о том, как выполнить доработку?

Первого нет, а второе можно почерпнуть в журналах ГК и складских журналах.
__________________
С уважением,
glibs®
Старый 18.07.2006, 16:04   #4  
lagr221374
Гость
 
n/a
Цитата:
Сообщение от glibs
lagr221374, на ник посмотрите.

А вообще речь идет о поиске стандартной функциональности или о том, как выполнить доработку?

Первого нет, а второе можно почерпнуть в журналах ГК и складских журналах.
Ну почему нет первого? Можно создать одного user-а и только ему дать права для работы с заказами. Все остальные в сад...
Другой вопрос что для работы это не удобно...но такова жизнь

Последний раз редактировалось lagr221374; 18.07.2006 в 16:06.
Старый 18.07.2006, 16:33   #5  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от lagr221374
Можно создать одного user-а и только ему дать права для работы с заказами.
Радикально.
Вообще говоря, лучше настроить RLS на поле Ответственный продавец.
При создании это поле заполнять в обязательном порядке.
__________________
полезное на axForum, github, vk, coub.
Старый 18.07.2006, 17:39   #6  
блондинка is offline
блондинка
Участник
 
27 / 10 (1) +
Регистрация: 21.06.2005
Адрес: СПб
Большое спасибо за активное участие!

Жизненная ситуация такая:

Выделить отдельного "ответственного" за Заказ административно невозможно, да и не требуется. Желание только не мешать друг другу одновременной работой.

Програмно, по аналогии с журналами, ставим и снимаем блокировки.
Но, очень уж тяжело получилось - слишком много ситуаций пришлось предусмотреть, когда этот блок ставим, а когда снимаем, и все равно надо постоянно обновлять форму, чтобы снимались блокировки.
Старый 18.07.2006, 17:53   #7  
lagr221374
Гость
 
n/a
Цитата:
Сообщение от блондинка
Большое спасибо за активное участие!

Жизненная ситуация такая:

Выделить отдельного "ответственного" за Заказ административно невозможно, да и не требуется. Желание только не мешать друг другу одновременной работой.

Програмно, по аналогии с журналами, ставим и снимаем блокировки.
Но, очень уж тяжело получилось - слишком много ситуаций пришлось предусмотреть, когда этот блок ставим, а когда снимаем, и все равно надо постоянно обновлять форму, чтобы снимались блокировки.
А почему нельзя без особых ситуаций? Пользователь хочет редактировать ставит галку "Хачу редактровать". Соответственно кто раньше галку поставил тому и тапки остальные отдыхают: по-моему это технически не очень сложно.
Снял галку все вздохнули свободно.
Старый 18.07.2006, 17:57   #8  
блондинка is offline
блондинка
Участник
 
27 / 10 (1) +
Регистрация: 21.06.2005
Адрес: СПб
Согласна. Но у нас очень требовательный пользователь. Он не хочет помнить сам о необходимости ставить, и главное, снимать эту галку. А главное, руководитель не хочет слышать, что кто-то забыл снять галку...
Старый 18.07.2006, 18:03   #9  
блондинка is offline
блондинка
Участник
 
27 / 10 (1) +
Регистрация: 21.06.2005
Адрес: СПб
Я тоже считаю, что оптимальным было бы разделить ответственность за Заказы между пользователями. Буду стараться убедить в этом руководство. Главная трудность состоит в том, что в 1С это ТАК РАБОТАЛО.
Старый 18.07.2006, 18:42   #10  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от блондинка
Главная трудность состоит в том, что в 1С это ТАК РАБОТАЛО.
Нет. В 1С это работало ПО ДРУГОМУ.
В 1С пока пользователь не нажмет на кнопку Записать или Провести данных в базе просто нет.
После создания, несколько пользователей и в 1С вполне могут работать с одним документом - изменения запишет только первый. Второй получит сообщение о том, что заказ изменен и все его изменения будут потеряны.

Проэмулируйте эту кнопку - Записать.
При создании заказ блокируйте, при нажатии на кнопку разблокируйте.
Редактируйте заказ только в том случае если пользователь нажал на кнопку Открыть.
Обратите внимание на совет glibs Как блокировать одновременный доступ к Заказу?
Его совет содержит только суть.
На самом деле в Аксапте есть аналог безо всякого программирования.
Заказ должен создаваться в статусе "Журнал".
Журнал - черновик, который не влияет на итоги.
Когда пользователь полностью создаст заказ - он переводит его в состояние Заказ.
В этот момент происходит резервирование всех строк и создаются складские проводки.
Если вы хотите избавиться от коллизий при редактировании разными пользователями одного и того же заказа - вам нужно проэмулировать кнопку Открыть и разрешать редактирование только открытых заказов.

Только зачем повторять функционал другой программы - не очень понимаю.
Если идти до конца по Аксаптовской логике, то разрешайте редактирование только тех заказов, которые имеют статус Журнал. В этом случае, пользователи чтобы отредактировать, должны сменить статус (в этот момент снимутся резервы), отредактировать и вернуть статус (в этот момент произойдет перерезервирование)
__________________
полезное на axForum, github, vk, coub.
Старый 18.07.2006, 18:45   #11  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от блондинка
Согласна. Но у нас очень требовательный пользователь. Он не хочет помнить сам о необходимости ставить, и главное, снимать эту галку.

Просто Вы разговариваете с пользователем на разных языках.
Пользователь не замечает, что он наживает на галку и снимает ее, поскольку это происходит автоматически.
А вы не знаете о том, что пользователь нажимает на кнопку Записать (или Провести)
__________________
полезное на axForum, github, vk, coub.
Старый 19.07.2006, 11:12   #12  
Lokis is offline
Lokis
Участник
 
8 / 10 (1) +
Регистрация: 14.06.2005
Можно попробовать реализовать с.о.
1. Создаете табличку (salesTableLock), в которой поля: SalesId, UnitId (1, 2:Заказы\Закупки), createdBy, createdDate, createdTime
2. На примере Заказов: Перегружаете в форме salesTable метод active, в котором:
2.1 Делаете проверку на наличие в SalesTableLock записи с salesId == SalesId из текущего курсора, и, если находите, то на форме д.б. метод editsales (я в 2.5 работаю). Вызываете его с параметром false. Посмотрите методы datasource формы AlowEdit, AllowCreate, AllowDelete... Можете выдавать сообщение пользователю.
2.2 Удаляете все записи из табличке salesTableLock, у которых createdBy == curUserId() и, сот-но, модуль == 1:заказы
2.2 Вставляете запись в salesTableLock, salesId из текущего курсора, UnitId = 1

Это навскидку, изврат конечно. Наверняка есть подводные камни. Например пользователь может перезагрузить комп, и тогда запись зависнет в таблице. Тогда нужно определять пакет, который будет чистить "подвисшие" записи, а идентифицировать их, ну, скажем по времени захвата. Сколько времени Заказ может быть захвачен? Решать вам.
Да, и лочить запись нужно так же в момент создания.
3. В форме SalesCreateOrder в конце метода initvalue. В противном случае, пока пользователь создает новую запись, другой вошедший в форму "Заказы" может ее заблокировать.
Старый 19.07.2006, 14:21   #13  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Если речь идет об автоматическом снятии "зависшей" блокировки, то лучше посмотреть соответствующий механизм, который реализован в непрерывных номерных сериях (там используется идентификатор сессии и еще что-то (не помню уже)).

Это теоретически. Реально я бы ничего из вышеперечисленного делать не рекомендовал (слишком много кодирования из-за ерунды какой-то).
__________________
С уважением,
glibs®
Старый 19.07.2006, 16:25   #14  
ziva is offline
ziva
Иван Захаров
Злыдни
Лучший по профессии AXAWARD 2013
 
65 / 106 (4) +++++
Регистрация: 25.03.2005
Цитата:
Сообщение от glibs
Если речь идет об автоматическом снятии "зависшей" блокировки, то лучше посмотреть соответствующий механизм, который реализован в непрерывных номерных сериях (там используется идентификатор сессии и еще что-то (не помню уже)).
...
Куда проще смотреть все таки в складские журналы. Там и есть как блокировка от входа в журнал (изменения), так и автоматическая разблокировка в том случае если сессия померла.

блондинка,
Журналы то это одно - там отдельная форма строк, открытие которой можно заблокировать. А вот форма заказов совсем другая. Представьте себе что имеем 10 заказов. Один пользователь на 1м. Второй на 10м. И начинают они "бежать" (с помощью стрелочек на клавиатуре) по гриду - первый - вниз, второй - вверх.
Что происходит в районе примерно 5го по счету заказа если они одновременно на нем "остановились"?
Вы вообще думали о той бизнес-логике которая должна при этом отрабатывать? Для каждого пользователя:
1. Перечитать запись из БД.
2. Проверить флаг
а. Блокирован - блокируем заказ от изменения текущим пользователем (строки + все кнопки)
б. Не блокирован - обновляем в транзакции флаг в заказе. Перечитываем запись в датасорс. Можем осуществлять работу с заказом.
3. Ушли с этого заказа - обновить запись в БД., разбликировать строки и кнопки ... и далее на п.1
Короче, бред....

А кроме обычной формы заказов есть форма "Строки открытых заказов" (или как она там называется... Аксапты под рукой нет). Там такую же хрень реализовывать?
Теги
ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
документооборот и доступ к файлам ivas DAX: Программирование 34 18.05.2012 11:00
Периодически пропадает доступ к Системе у удаленных пользователей andy_555 DAX: Администрирование 4 04.03.2009 15:02
Как дать доступ к Аксапте внешним пользователям? mazzy DAX: Администрирование 43 29.08.2008 15:46
Запущен терминальный доступ к демонстрационному порталу АХ4 Vadim Korepin DAX: Функционал 34 31.01.2007 15:59
Одновременный доступ к заказу 2х пользователей Pegiy DAX: Функционал 5 06.09.2004 16:03
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 04:02.