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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.05.2010, 00:53   #1  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,342 / 3563 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
и еще вдогонку. Штатная проверка пустых аналитик действует сразу на все таблицы по всем аналитикам. Поэтому ее неудобно устанавливать. Я сделал аналог штатной проверки - для этого мне пришлось добавить всего одно поле DenyEmptyDimension в таблицу DimensionSetRuleTable (плюс вывести галку в нижний грид формы правил набора аналитик) и написать буквально 5 строчек кода в \Classes\DimensionSetValidation\checkDimension:
X++:
public boolean checkDimension(Common        _caller,
                              fieldId       _dimensionFieldId,
                              boolean       _checkWriteValidation,
                              boolean       _silent = false)
{
........
                if (validateDimension != emptyDimension)
                {
                    if (_silent)
                    {
                        isValid = isValid && this.isValidCombination(setId, hierarchyId, validateDimension, prefixDimension);
                    }
                    else
                    {
                        isValid = isValid && this.checkCombination(setId, hierarchyId, validateDimension, prefixDimension);
                    }
                }
                //Проверка на пустую аналитику -->
                else
                {
                    if (_checkWriteValidation && dimensionSetRuleSearch.dimensionSetRuleTable().DenyEmptyDimension)
                    {
                        isValid = checkFailed("@SYS79468");
                    }
                }
                // Проверка на пустую аналитику  <--
........
}
Добавление таким образом галки позволило мне применить правило к целому набору (но не всему массиву) на уровне конкретной таблицы (а не всех таблиц)
__________________
Возможно сделать все. Вопрос времени

Последний раз редактировалось sukhanchik; 29.05.2010 в 00:59.
За это сообщение автора поблагодарили: gl00mie (3).
Старый 29.05.2010, 18:21   #2  
d&m is offline
d&m
MCT
Аватар для d&m
MCP
Manzana Group
MCBMSS
 
459 / 186 (7) ++++++
Регистрация: 11.09.2007
Записей в блоге: 6
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
(кстати - для корсчета никто аналитики и не думал делать почему-то) -
ну причины, по которым нет аналитик для корр счета, как раз ясна. Чтобы были разные аналитики по счету и корр счету - надо делать полупроводки. Но вернемся к теме

Цитата:
Проверка соответствия иерархии аналитики осуществляется сразу для двух полей (см метод LedgerJournalTrans.checkDimensions()). В проверке честно поставлено условие, что если конфигурационный ключ иерархии аналитик включен - то проверку выполнять. НО! Никто не позаботился о том, что если ключ внутрихолдингового учета выключен - то проверку по внутрихолдинговым аналитикам делать не надо - т.к. их нет!
В связи с этим я изменил у себя код метода checkDimensions():
нет, по-моему, внутрихолдинговые аналитики тут ни при чем. Аксапта требует указать именно обычные аналитики - внутрихолдинговые у меня пустые, ошибок из-за них не возникает.

Цитата:
Сообщение от sukhanchik Посмотреть сообщение
и еще вдогонку. Штатная проверка пустых аналитик действует сразу на все таблицы по всем аналитикам. Поэтому ее неудобно устанавливать. Я сделал аналог штатной проверки - для этого мне пришлось добавить всего одно поле DenyEmptyDimension в таблицу DimensionSetRuleTable (плюс вывести галку в нижний грид формы правил набора аналитик) и написать буквально 5 строчек кода в \Classes\DimensionSetValidation\checkDimension:

Добавление таким образом галки позволило мне применить правило к целому набору (но не всему массиву) на уровне конкретной таблицы (а не всех таблиц)
да, за это спасибо.
но хочется как раз, чтобы аналитики не были обязательны. Т.е. хочу заполняю, хочу не заполняю. Как в закупке - могу спокойно разнеси закупку с пустыми фин аналитиками.
__________________
Sometimes there is a moment as you are awakening - when you become aware of the real world around you, - but you are still dreaming. - You may think you can fly but you do better not try.
Старый 29.05.2010, 20:59   #3  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,342 / 3563 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от d&m Посмотреть сообщение
ну причины, по которым нет аналитик для корр счета, как раз ясна. Чтобы были разные аналитики по счету и корр счету - надо делать полупроводки.
Тогда нужно отключать корреспонденцию. Т.е. либо корреспонденция есть и есть аналитика корсчета, либо корреспонденции нет и тогда делаем многострочные проводки.
Цитата:
Сообщение от d&m Посмотреть сообщение
нет, по-моему, внутрихолдинговые аналитики тут ни при чем. Аксапта требует указать именно обычные аналитики - внутрихолдинговые у меня пустые, ошибок из-за них не возникает.
А... постараюсь повнимательнее глянуть
__________________
Возможно сделать все. Вопрос времени
Старый 29.05.2010, 21:54   #4  
d&m is offline
d&m
MCT
Аватар для d&m
MCP
Manzana Group
MCBMSS
 
459 / 186 (7) ++++++
Регистрация: 11.09.2007
Записей в блоге: 6
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Тогда нужно отключать корреспонденцию. Т.е. либо корреспонденция есть и есть аналитика корсчета, либо корреспонденции нет и тогда
вовсе нет - полупроводки отлично работают при включенной корреспонденции.
__________________
Sometimes there is a moment as you are awakening - when you become aware of the real world around you, - but you are still dreaming. - You may think you can fly but you do better not try.
Старый 29.05.2010, 22:43   #5  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,342 / 3563 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от d&m Посмотреть сообщение
вовсе нет - полупроводки отлично работают при включенной корреспонденции.
Гм... тут дело-то не столько в технической реализации. Суть аналитик состоит в том, чтобы пометить некоторым образом операции, причем не одну-две - а как правило много (т.е. если к примеру, мы помечаем аналитиками "Подразделение", "Центр затрат", и т.д. операции - то количество операций, где аналитика счета (весь массив целиком) будет в точности совпадать с аналитикой корсчета (тоже весь массив целиком) будет гораздо меньше нежели количество отличающихся операций.

Поэтому для вводящего человека будет проще делать все однообразно - т.е. все полупроводками или все с корсчетами. Т.е. фактически корреспонденция будет отключена, хотя и галка будет стоять.

Я согласен с Вами, что из моей фразы вытекает, что для создания полупроводок нужно снимать флажок, а это не так (спасибо за замечание - сам действительно не проверял). Но тем не менее, считаю, что если при включенном функционале его не использовать - то фактически можно считать, что функционал отключен.
__________________
Возможно сделать все. Вопрос времени
Старый 28.07.2010, 16:06   #6  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
Post
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
и еще вдогонку. Штатная проверка пустых аналитик действует сразу на все таблицы по всем аналитикам. Поэтому ее неудобно устанавливать. Я сделал аналог штатной проверки - для этого мне пришлось добавить всего одно поле DenyEmptyDimension в таблицу DimensionSetRuleTable (плюс вывести галку в нижний грид формы правил набора аналитик) и написать буквально 5 строчек кода в \Classes\DimensionSetValidation\checkDimension:
X++:
public boolean checkDimension(Common        _caller,
                              fieldId       _dimensionFieldId,
                              boolean       _checkWriteValidation,
                              boolean       _silent = false)
{
........
                if (validateDimension != emptyDimension)
                {
                    if (_silent)
                    {
                        isValid = isValid && this.isValidCombination(setId, hierarchyId, validateDimension, prefixDimension);
                    }
                    else
                    {
                        isValid = isValid && this.checkCombination(setId, hierarchyId, validateDimension, prefixDimension);
                    }
                }
                //Проверка на пустую аналитику -->
                else
                {
                    if (_checkWriteValidation && dimensionSetRuleSearch.dimensionSetRuleTable().DenyEmptyDimension)
                    {
                        isValid = checkFailed("@SYS79468");
                    }
                }
                // Проверка на пустую аналитику  <--
........
}
Добавление таким образом галки позволило мне применить правило к целому набору (но не всему массиву) на уровне конкретной таблицы (а не всех таблиц)
Рассматривая данный код в Ax 2009 Rollup 5 было выявлено.
метод вызывается с параметром _checkEmptyDimension
X++:
public boolean checkDimension(Common        _caller,
                              fieldId       _dimensionFieldId,
                              boolean       _checkWriteValidation,
                              boolean       _silent = false,
                              boolean       _checkEmptyDimension = false,
                              boolean       _isPrefix = false)
только теперь принудительно включена проверка на пустые аналитики (#define.ValidateEmptyDimensions(true)), т.е.
X++:
public boolean checkDimensions(boolean _checkWriteValidation)
{
    #LedgerJournalFaults
    #define.ValidateEmptyDimensions(true)

    boolean             ok = true;
    DimensionSetCaller  dimensionSetCaller;
    ;

    if (isConfigurationkeyEnabled(configurationkeynum(DimensionSetHierarchy)))
    {
        dimensionSetCaller = DimensionSetCaller::construct(this, fieldnum(LedgerJournalTrans, Dimension));
        ok = appl.dimensionSetValidation(false, dimensionSetCaller.getCompanyId()).checkDimension(this,
                                                                fieldnum(LedgerJournalTrans, Dimension),
                                                                _checkWriteValidation,
                                                                false,
                                                                #ValidateEmptyDimensions) && ok;

        if (ok)
        {
            // InterCoDimension field should only be set when the two accounts
            // are different or there is an offset account.
В методе \Classes\DimensionSetValidation\checkDimension отрабатывает ELSE
X++:
            // don't check empty dimensions unless expressely told to
            if (validateDimension != emptyDimension || _checkEmptyDimension)
            {
                if (_silent)
                {
                    isValid = this.isValidCombination(setId, hierarchyId, validateDimension, prefixDimension, _isPrefix) && isValid;
                }
                else
                {
                    isValid = this.checkCombination(_caller, _dimensionFieldId, setId, hierarchyId, validateDimension, dimensionSetRule.RefLedgerAccount, prefixDimension, _isPrefix) && isValid;
                }
            }
Проблема по вопросу Заблокировать финансовую аналитику? в \Classes\DimensionSetValidation\checkCombination строка 36

Стек вызова.
Код:
[s]    \Classes\DimensionSetValidation\checkCombination                                                       36
[s]    \Classes\DimensionSetValidation\checkDimension                                                        123
[s]    \Data Dictionary\Tables\LedgerJournalTrans\Methods\checkDimensions                                     13
[s]    \Classes\LedgerJournalCheckPost\checkJournal                                                          212
[s]    \Classes\LedgerJournalCheckPost\run                                                                    72
[c]    \Classes\LedgerJournalCheck\main                                                                       41
[c]    \Classes\FormFunctionButtonControl\Clicked
__________________

This posting is provided "AS IS" with no warranties, and confers no rights.
За это сообщение автора поблагодарили: sukhanchik (2).
Старый 28.07.2010, 16:12   #7  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
Параметр для проверки пустых аналитик "Главная книга / Настройка / Параметры - "Отклонять пустые аналитики". (LedgerParameters.DenyBlankDimensions ) Не используется в \Classes\DimensionSetValidation
__________________

This posting is provided "AS IS" with no warranties, and confers no rights.
Старый 29.04.2010, 10:47   #8  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Можно также закрыть ее для разноски, что тоже не устраивает.
А почему не устраивает? При помощи наборов аналитик можно настроить запрет не только на разноску, но и на сохранение, то есть возможность выбора останется, а сохранения уже не получится.
Или нужно чтобы её вообще не видели? Тогда - RLS.
Старый 29.04.2010, 10:52   #9  
Bober is offline
Bober
Участник
 
311 / 104 (4) +++++
Регистрация: 29.05.2007
Для настройки RLS нужно знать исчерпывающий список мест, где аналитику не нужно видеть. Вопрос же был поставлен так: ни в заказе, ни в закупке, ни где либо еще. Ключевое слово - "ни где либо еще". То есть заранее неизвестно, либо надо полный-преполный список составлять по всей Аксапте. Лучше же иметь возможность просто отключить, и всё.
За это сообщение автора поблагодарили: Rezervforall (1).
Теги
иерархия, финансовая аналитика

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Можно ли отключить и включить аналитику? miklenew DAX: Функционал 24 30.01.2008 14:00
Игра "Поймай аналитику" Hamster DAX: Функционал 6 12.10.2004 17:53
Почему договору нельзя сквозную аналитику присвоить? George V. Tavrizoff DAX: Функционал 3 27.02.2004 11:05
Как грамотно связать ГК и Складскую аналитику? /для отчета/ Anais DAX: Программирование 17 19.02.2004 17:42
Как создать новую складскую аналитику? Михаил Андреев DAX: Программирование 2 18.08.2003 22:43

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

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

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