09.04.2008, 12:46 | #21 |
Участник
|
|
|
09.04.2008, 13:16 | #22 |
Участник
|
Цитата:
Ну правильно в одной нужно запретить в другой разрешить. Цитата:
Давайте попытаюсь сказать иначе: 1) Нужно запретить в зависимости от компании смену системной даты пользователем вручную через сервис - системная дата или через двойной щелчёк по дате в статусе окна Axapta (запрещать смену даты в коде стандартных и других модулей не нужно). 2) Сбрасывать системную дату по серверу при переходе из компании в которой разрешено менять системную дату в компанию в которой запрещено менять системную дату. Кроме того вариант с закрытием периода не подходит по двум причинам: 1) Дописаный функционал не имеет контроля этих периодов 2) Запрет изменения системной даты нужен в пределах дня, тоесть в случае использования закрытия периодов нужно будет закрывать каждый день период длительностью в один день. Кроме того некоторые умельцы умудряются вносить данные наперёд. Последний раз редактировалось Beast-L; 09.04.2008 в 13:29. |
|
09.04.2008, 13:45 | #23 |
Участник
|
А нельзя на validateWrite определенных таблиц повесить проверку на дату и если дата введенная пользователем отличатеся от today() то просто выдавать ошибку и активировать эту проверку только для определенных компаний.
|
|
09.04.2008, 13:50 | #24 |
Участник
|
Теоретически можно но это займёт очень много времени и ещё больше на вылавливание глюков после этого.
|
|
09.04.2008, 13:56 | #25 |
Member
|
Цитата:
Сообщение от Beast-L
...
2) Сбрасывать системную дату по серверу при переходе из компании в которой разрешено менять системную дату в компанию в которой запрещено менять системную дату. ... Можно запрограммировать в форме выбора компании. Но это кривое решение. Правильнее было бы зашить проверку в ваш функционал, и вообще не завязываться при разработке решения на системную дату, раз она так для него важна. Вы тупо режете целый ряд возможностей, который давал пользователям стандартный функционал ради своей криво написанной доработки.
__________________
С уважением, glibs® |
|
09.04.2008, 13:59 | #26 |
Участник
|
Ну хорошо давайте предположим что нет никакого доработаного функционала. Как в этом случае решить такую задачу?
|
|
09.04.2008, 14:09 | #27 |
Member
|
petr вам уже написал. Только today() должно вызываться на АОСе.
__________________
С уважением, glibs® |
|
09.04.2008, 14:18 | #28 |
Участник
|
Ещё какие нибудь варианты есть?
|
|
09.04.2008, 14:44 | #29 |
Участник
|
Цитата:
Сообщение от mazzy
Ну, дык допишите ваш функционал еще чуть-чуть.
Пусть он проверяет периоды. На таблице периодов есть необходимые методы для проверки. По сути, Ваше желание сводится к тому, чтобы иметь дополнительную таблицу для хранения текущей системной даты в каждой компании (или сдвига в днях от текущей даты). Ведь чтобы реализовать автоматическое переключение даты при переходе в другую компанию надо знать на какую дату переключаться. Вот и оцените, какие трудозатраты будут выше: допиливание ранее сделанного функционала или создание нового функционала. |
|
09.04.2008, 14:50 | #30 |
Участник
|
Цитата:
Сообщение от Владимир Максимов
Вам по любому придется "допиливать" функционал.
По сути, Ваше желание сводится к тому, чтобы иметь дополнительную таблицу для хранения текущей системной даты в каждой компании (или сдвига в днях от текущей даты). Ведь чтобы реализовать автоматическое переключение даты при переходе в другую компанию надо знать на какую дату переключаться. Вот и оцените, какие трудозатраты будут выше: допиливание ранее сделанного функционала или создание нового функционала. Ведь основная цель - не дать пользователю внести данные задним числом в той компании где ему это делать не позволено. |
|
09.04.2008, 14:54 | #31 |
Участник
|
Сколько у вас таких пользователей? Если их меньше 20 то создайте двух разных юзеров для двух разных компаний, одному разрешите менять дату другому нет, вот и вся проблема! Так будет намного правильней, и логичней, чем «городить огород» на период внедрения. Не вижу не каких проблем в том, что бы когда пользователь собрался вводить исторические данные, он взял бы и зашел под другим именем.
__________________
PS. Сложно приехать в Москву, но ещё сложнее уехать отсюда. |
|
09.04.2008, 15:05 | #32 |
Участник
|
Цитата:
Сообщение от 3oppo
Сколько у вас таких пользователей? Если их меньше 20 то создайте двух разных юзеров для двух разных компаний, одному разрешите менять дату другому нет, вот и вся проблема! Так будет намного правильней, и логичней, чем «городить огород» на период внедрения. Не вижу не каких проблем в том, что бы когда пользователь собрался вводить исторические данные, он взял бы и зашел под другим именем.
|
|
09.04.2008, 15:21 | #33 |
Модератор
|
А теперь обратите внимание, что в 5ке (Microsoft Dynamics AX 2009) будет кардинально переделана работа с временем и датами. Дата и время - только из 1 точки: сервера базы данных, т.к. к нему цепляется множество АОСов, которые могут находиться в разных часовых поясах. Время - по UMT, а уже на клиенте будет отбражено в соответствии с часовым поясом и настройками клиенты.
Подумайте, если будете со временем мигрировать на 5+. С Уважением, Георгий |
|
09.04.2008, 15:43 | #34 |
Участник
|
Цитата:
Сообщение от George Nordic
А теперь обратите внимание, что в 5ке (Microsoft Dynamics AX 2009) будет кардинально переделана работа с временем и датами. Дата и время - только из 1 точки: сервера базы данных, т.к. к нему цепляется множество АОСов, которые могут находиться в разных часовых поясах. Время - по UMT, а уже на клиенте будет отбражено в соответствии с часовым поясом и настройками клиенты.
Подумайте, если будете со временем мигрировать на 5+. С Уважением, Георгий |
|
22.04.2008, 18:06 | #35 |
Участник
|
Кому всётаки интересно решение:
\Classes\Application\setDefaultCompany X++: ...................................................................... } #define.WarnFlag(0x08) if (dialog && new Session().clientKind() != ClientType::COMObject) { if (thisCompany != _selectableDataArea) { if (!cache.get(classstr(info), identifierstr(Autologoff), false)) { select userInfo where userInfo.id == curUserId(); if (userInfo && userInfo.generalInfo & #warnFlag) warning(strFmt("@SYS53441", _selectableDataArea)); } } } if(SecurityKeySet::getMenuItemAccess(menuitemdisplaystr(SystemDate), MenuItemType::Display) <= AccessType::View) { if(getServerDate() != systemdateget()) { warning(strfmt("Дата изменена с %1 на %2", systemdateget(), getServerDate())); systemdateset(getServerDate()); } } inventDim::findOrCreateBlank(); ........................................ X++: void init() { ; if(SecurityKeySet::getMenuItemAccess(menuitemdisplaystr(SystemDate), MenuItemType::Display) == AccessType::NoAccess) { throw error("Нет прав для этой операции"); } super(); machineDate.dateValue(today()); machineTime.value(timenow()); systemDateOrig = systemdateget(); newDate.dateValue(systemDateOrig); if(SecurityKeySet::getMenuItemAccess(menuitemdisplaystr(SystemDate), MenuItemType::Display) == AccessType::View) { NewDate.allowEdit(false); } } Последний раз редактировалось Beast-L; 22.04.2008 в 18:16. |
|