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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.08.2009, 14:17   #1  
Alexx7 is offline
Alexx7
Сам.AX
Аватар для Alexx7
Самостоятельные клиенты AX
1C
 
305 / 28 (1) +++
Регистрация: 22.07.2009
Расчеты с персоналом. Ограничение доступа к календарям
Приветствую господа!
Помогите разобраться с вопросом ограничения доступа к списку календарей.
В целом задача стоит так: Есть несколько человек, которые отвечают каждый за свой отдел (подразделение). Они самостоятельно формируют календари и создают табеля по календарям. Задача сототит в том, чтобы дать им доступ только к своим календарям.
Проборвл через Безопасность на уровне записей. Строил запрос Календари - 1:n - Сотрудник - Код подразделения = <подразделение пользователя>. Показывает только его календари (вернее календари из сотрудников его подраздеоения). Это не подходит, потому что если потребуется завести новый календарь, он там отражаться не будет.
Посоветуйте как быть.
Спасибо.
Старый 05.08.2009, 15:20   #2  
plumbum is offline
plumbum
Участник
Соотечественники
 
182 / 86 (3) ++++
Регистрация: 07.12.2007
Адрес: Vienna, AT
Задача состоит в том, чтоб каждый ответственный за отдел видел только созданные им календари, или чтоб еще "ответственный над ответственными" например видел все календари.

Мне какется без модификации не обойтись.

Если первый вариант - можно на таблице WorkCalendarTable добавить поле в настройках CreatedBy и по нему фильтровать на форме и в лукапе. Форму причем можно фильтровать с помощью стандартного фильтра.

Если второй вариант - ИМХО надо создавать таблицу прав для календарей.
__________________
http://www.axdevposts.blogspot.com
Пришел, уведел.... отойди, дай другому увидеть!
Старый 05.08.2009, 15:35   #3  
Alexx7 is offline
Alexx7
Сам.AX
Аватар для Alexx7
Самостоятельные клиенты AX
1C
 
305 / 28 (1) +++
Регистрация: 22.07.2009
Цитата:
Сообщение от plumbum Посмотреть сообщение
Задача состоит в том, чтоб каждый ответственный за отдел видел только созданные им календари, или чтоб еще "ответственный над ответственными" например видел все календари.
Да. Ответственный над ответственными будет видеть все календари.
Спасибо за уточнение.
Старый 05.08.2009, 15:39   #4  
Alexx7 is offline
Alexx7
Сам.AX
Аватар для Alexx7
Самостоятельные клиенты AX
1C
 
305 / 28 (1) +++
Регистрация: 22.07.2009
Цитата:
Сообщение от plumbum Посмотреть сообщение
Если первый вариант - можно на таблице WorkCalendarTable добавить поле в настройках CreatedBy и по нему фильтровать на форме и в лукапе. Форму причем можно фильтровать с помощью стандартного фильтра.
Тогда календарь будет видеть только тот кто его создал, а, допустим, его заместитель его уже не увидит.
Старый 05.08.2009, 15:40   #5  
Alexx7 is offline
Alexx7
Сам.AX
Аватар для Alexx7
Самостоятельные клиенты AX
1C
 
305 / 28 (1) +++
Регистрация: 22.07.2009
plumbum,
А про второй вариант можете подробнее немного?
Старый 05.08.2009, 16:12   #6  
plumbum is offline
plumbum
Участник
Соотечественники
 
182 / 86 (3) ++++
Регистрация: 07.12.2007
Адрес: Vienna, AT
Можно привязать права доступа к пользователю и ко всем
Приведу пример еще и для случая с общими для всех календарями

Надо создать таблицу "Права доступа к календарям" (например) такого вида:

Table EmplCalendarPermissionTable

X++:
Fields: TableAll       calendarCode       - All,  .   
           CalendarId  calendarRelation   -   All
           TableAll       emplCode            - All,    
           EmplId        emplRelation         -    All
**Строки со значениями TableAll::Table в обоих полях этого типа имеют при фильтрации более высоки приоритет, чем TableAll::All (смотрите метод таблицы InventPosting.item)

Далее создать relation к таблицам EmplTable и WorkCalendarTable

X++:
     EmplCalendarPermissionTable.EmplCode     == TableAll::Table 
&& EmplCalendarPermissionTable.EmplRelation == EmplTable.EmplId

      EmplCalendarPermissionTable.CalendarCode     == TableAll::Table 
 && EmplCalendarPermissionTable.CalendarRelation == WorkCalendarTable.CalendarId
Далее необходимо фильтровать форму....

Посмотрите следующие таблицы:

InventPosting
PriceDisctTable
CustVendExternalItem
(форма с таким же названием как раз показывает как фильтровать)

Удачи!
__________________
http://www.axdevposts.blogspot.com
Пришел, уведел.... отойди, дай другому увидеть!

Последний раз редактировалось plumbum; 05.08.2009 в 16:15.
За это сообщение автора поблагодарили: Alexx7 (1).
Старый 06.08.2009, 08:42   #7  
Alexx7 is offline
Alexx7
Сам.AX
Аватар для Alexx7
Самостоятельные клиенты AX
1C
 
305 / 28 (1) +++
Регистрация: 22.07.2009
А что можно придумать, чтобы не переопределять потом LookUp() в других формах?
Старый 06.08.2009, 10:16   #8  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от Alexx7 Посмотреть сообщение
А что можно придумать, чтобы не переопределять потом LookUp() в других формах?
Написать свою форму лукапа и повесить её на EDT CalendarId - FormHelp.
Примеров таких в АОТ много, например на складских аналитиках - сделайте что-то похожее.
__________________
Zhirenkov Vitaly
Старый 06.08.2009, 10:21   #9  
Alexx7 is offline
Alexx7
Сам.AX
Аватар для Alexx7
Самостоятельные клиенты AX
1C
 
305 / 28 (1) +++
Регистрация: 22.07.2009
to ZVV
Можете немного подробнее?
Старый 06.08.2009, 10:44   #10  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от Alexx7 Посмотреть сообщение
to ZVV
Можете немного подробнее?
Возьмите тип например InventSerialId.
У него в EDT указана форма лукапа: InventSerialIdLookup.

Берите эту форму как пример и делайте свою такую же, только у вас будет в 2 раза проще, т.к. в этих формах выбора складских аналитик там обрабатывается связка с номенклатурой и закладка "В наличии". Вам всё это не надо, вам просто свою основную кверю написать в этой форме...
Но зато поразбираетесь - интересно.

После этого указываете свою новую форму у EDT CalendarId.
И вуаля - все лукапы по умолчанию к этому типу данных будут использовать эту новую форму.
__________________
Zhirenkov Vitaly
Старый 06.08.2009, 10:57   #11  
Alexx7 is offline
Alexx7
Сам.AX
Аватар для Alexx7
Самостоятельные клиенты AX
1C
 
305 / 28 (1) +++
Регистрация: 22.07.2009
Я не даун, но вопрос тупой.
А что такое ETD?
Старый 06.08.2009, 10:59   #12  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от Alexx7 Посмотреть сообщение
Я не даун, но вопрос тупой.
А что такое ETD?
Что такое ETD - сорри, не знаю.

А EDT - Extended Data Type, т.е. тип данных.

AOT -> Data Dictionary -> Extended Data Types
__________________
Zhirenkov Vitaly
Старый 06.08.2009, 11:02   #13  
konopello is offline
konopello
SAP
SAP
 
628 / 76 (4) ++++
Регистрация: 08.11.2005
Адрес: Минск
Я как то делал похожею задачу, сделал ее следующим образам, читал орг. структуру предприятия, определял пользователя который вошел, потом сотрудника, потом всех подчененных его и показывал ему только те данные за которые отвечает он или его сотрудники, а да и еще для ускорения доступа к иерархии пришлось сформировать пакетное задание которое хранило иерархию пользователей в виде дерева, но наверное это слишком сложно и специализировано, Вам лучше подойдет вариант который предложил plumbum.
Старый 06.08.2009, 11:28   #14  
Alexx7 is offline
Alexx7
Сам.AX
Аватар для Alexx7
Самостоятельные клиенты AX
1C
 
305 / 28 (1) +++
Регистрация: 22.07.2009
Цитата:
Сообщение от ZVV Посмотреть сообщение
Что такое ETD - сорри, не знаю.

А EDT - Extended Data Type, т.е. тип данных.

AOT -> Data Dictionary -> Extended Data Types
Запарился совсем. Теряюсь пока в терминах и сокращениях. Новичек Я.
Старый 10.08.2009, 09:00   #15  
Alexx7 is offline
Alexx7
Сам.AX
Аватар для Alexx7
Самостоятельные клиенты AX
1C
 
305 / 28 (1) +++
Регистрация: 22.07.2009
Цитата:
Сообщение от ZVV Посмотреть сообщение
Написать свою форму лукапа и повесить её на EDT CalendarId - FormHelp.
Примеров таких в АОТ много, например на складских аналитиках - сделайте что-то похожее.
Не работает такой вариант. Что не так делаю?
1. Создал форму RPayCalendarLookUp
2. EDT - CalendarID - FormHelp поставил RPayCalendarLookUp
сохранил.

Не вылазит моя форма.
Старый 10.08.2009, 11:34   #16  
plumbum is offline
plumbum
Участник
Соотечественники
 
182 / 86 (3) ++++
Регистрация: 07.12.2007
Адрес: Vienna, AT
Посмотрите EDT ConfigId, там все описано как должно быть
__________________
http://www.axdevposts.blogspot.com
Пришел, уведел.... отойди, дай другому увидеть!
Старый 10.08.2009, 11:54   #17  
Alexx7 is offline
Alexx7
Сам.AX
Аватар для Alexx7
Самостоятельные клиенты AX
1C
 
305 / 28 (1) +++
Регистрация: 22.07.2009
Ага. Разобрался.
Не туда подставлял просто . Надо было в EDT - RPayCalendarId.
Теперь проблема в другом. Никаких фильтров на своей форме (RPayCalendarLookUp
) не делал, а при выборе показывает пустую форму (хотя записи там есть, если открывть её из AOT).
Где посмотреть. Подскажите.
Спасибо.
Старый 10.08.2009, 12:59   #18  
plumbum is offline
plumbum
Участник
Соотечественники
 
182 / 86 (3) ++++
Регистрация: 07.12.2007
Адрес: Vienna, AT
1. Посмотрите на вашем типе (EDT) Relations
2. Посмотрите Relations на таблице, которая есть датасоурсом формы-лукапа
__________________
http://www.axdevposts.blogspot.com
Пришел, уведел.... отойди, дай другому увидеть!

Последний раз редактировалось plumbum; 10.08.2009 в 13:04.
Старый 10.08.2009, 13:47   #19  
Alexx7 is offline
Alexx7
Сам.AX
Аватар для Alexx7
Самостоятельные клиенты AX
1C
 
305 / 28 (1) +++
Регистрация: 22.07.2009
Вобщем сделал. Но всё равно подругому получилось. Пришлось лукапы в форме переопределять. Вот как сдесь http://erpkb.com/Axapta/lookup
В итоге вот такой код.
X++:
    str 5                   usrId;
    sysCompanyUserInfo      emplCompany;// Таблица пользователей
    emplTable               emplTbl;// Сотрудники
    str 15                  deportCode;// Подразделения
    rpayCalendDeport        calendarDep;
    str                     strRange;
    SysTableLookup          sysTableLookup       = SysTableLookup::newParameters(tableNum(RPayCalendarTable), this);
    Query                   query                = new Query();
    QueryBuildDatasource    queryBuildDatasource = query.addDataSource(tableNum(RPayCalendarTable));
    ;
    //super();
    sysTableLookup.addLookupfield(fieldNum(RPayCalendarTable, calendarId));
    sysTableLookup.addLookupfield(fieldNum(RPayCalendarTable, name));

    // Кусман кода из FormInit'a RPayCalendarTable

    usrId = curUserId();

    while select emplCompany
        where emplCompany.UserId == curUserId()
        {

        select emplTbl
            where emplTbl.EmplId == emplCompany.EmplId;
            deportCode = emplTbl.PayHRMOrganizationId_RU;

        }
        while select calendarDep
            where calendarDep.PayHRMOrganizationId_RU == deportCode

        {
            strRange = strRange+','+calendarDep.RpayCalendatId;
        }

    queryBuildDatasource.addRange(fieldNum(RPayCalendarTable, calendarId)).value(strRange);

    sysTableLookup.parmQuery(query);

    sysTableLookup.performFormLookup();
Если можно оптимизировать подскажите буду благодарен.
Старый 10.08.2009, 16:39   #20  
plumbum is offline
plumbum
Участник
Соотечественники
 
182 / 86 (3) ++++
Регистрация: 07.12.2007
Адрес: Vienna, AT
Ваша идея ясна, но все таки вы вроде не учли варианта, когда какому-то пользователю доступны все календари (TableAll::All)

Запихните обязательно этот код в статический метод таблицы и сделайте чтоб он на сервере выполнялся.

Я бы все таки попробывал сджойнить 2 таблицы Exists join, вместо перебора
__________________
http://www.axdevposts.blogspot.com
Пришел, уведел.... отойди, дай другому увидеть!
Теги
законченный пример, календарь, расчеты с персоналом

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Расчеты с персоналом: Структура, Штатное расписание rus_stas DAX: Функционал 6 21.12.2010 21:41
Тендер на внедрение модуля "Управление персоналом" и "Расчеты с персоналом" Oxsana DAX: Прочие вопросы 5 02.05.2006 19:47
Расчеты с персоналом: Внебюджетные фонды rus_stas DAX: Функционал 8 22.03.2006 13:48
Управление и расчеты с персоналом nicko DAX: Функционал 2 19.02.2004 15:25
Персонал и Расчеты с персоналом Gustow DAX: Программирование 1 28.01.2003 23:53

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 18:19.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.