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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.03.2012, 11:54   #1  
Peppi is offline
Peppi
Участник
 
31 / 11 (1) +
Регистрация: 22.10.2008
Замена фин.аналитик
Всем здравствуйте,
У нас возникла необходимость программно подменять фин.аналитики (перебираем все таблицы, где тип данных Dimension и подменяем аналитики согласно новым правилам).

Но есть подозрение, что нужно запустить какие-нибудь процедуры пересчета общих таблиц, типа как InventSum в логистике. Есть ли такие ?
Старый 11.03.2012, 12:19   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
У вас старое значение строго меняется на другое новое, до этого нигде не встречавшееся? Тогда это просто переименование первичного ключа. Никаких дополнительных действий не потребуется (ведь значения изменятся везде и в общих таблицах тоже).
Если же у вас происходит объединение нескольких значений в одно или наоборот, то в общем случая я вообще не уверен, что задним числом возможно такое реализовать без отката закрытых периодов.
Старый 11.03.2012, 12:24   #3  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
В принципе, есть, конечно, только вот, если Вы уж делаете процедуру замены значений аналитик, то автоматом "зацепите" и эти "суммарные" таблицы (бух.сальдо, например). Однако для этих суммарных таблиц надо будет не значение аналитик заменять, а просто сложить соответствующие строки (или создать новую).

Я это к тому, что при грамотном написании подобной процедуры никаких пересчетов запускать не требуется. Сам процедура должна создать/изменить соответствующие строки таблиц.

Да и, собственно, у всех этих "суммарных" таблиц, как правило, есть уникальный индекс, включающий в себя поле Dimension. Т.е. Вы просто не сможете создать "дубли" в подобных таблицах. Кстати, это является одним из признаков подобных суммарных таблиц.
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 11.03.2012, 13:40   #4  
Peppi is offline
Peppi
Участник
 
31 / 11 (1) +
Регистрация: 22.10.2008
Спасибо за ответ.
Переименовывать первичный ключ не получится, так как там есть и объединение аналитик и перенос из одной в другую - поэтому приходится перебором всех таблиц.

"Сам процедура должна создать/изменить соответствующие строки таблиц."
Подскажите, пожалуйста, какие таблиц стоит проверить?

Я попробовала проделать процедуру на тестовом приложении просто по всем таблицам, содержащим анаитику - ошибок неуникального ключа не было, значит ли это, что все в порядке? :-)
Старый 11.03.2012, 15:56   #5  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от Peppi Посмотреть сообщение
"Сам процедура должна создать/изменить соответствующие строки таблиц."
Подскажите, пожалуйста, какие таблиц стоит проверить?
Зависит от версии Axapta. В разных версиях разные таблицы. Собственно, основная - это сальдо по бух.проводкам в разрезе фин.аналитик LedgerBalancesDim или нечто похожее

Цитата:
Сообщение от Peppi Посмотреть сообщение
Я попробовала проделать процедуру на тестовом приложении просто по всем таблицам, содержащим анаитику - ошибок неуникального ключа не было, значит ли это, что все в порядке? :-)
Нет. Не значит.

Вам надо смотреть на индексы со свойством AllowDuplicate = No в которые включены поля Dimension. Если подобный индекс указан как Primary-индекс таблицы, то это первое "подозрение" на то, что это и есть одна из "суммирующих" таблиц.

============================================

И еще один момент.

Дело в том, что кроме собственно поля Dimension фин.аналитики могут быть представлены парой полей: DimensionCode + Num. Причем не только в таблице Dimensions.

Как правило, в подобных случаях формализовать (запрограммировать) переименование фин.аналитик - невозможно. Эти справочники придется менять вручную. Например, таблица LedgerControlDimension

PS: Надеюсь, Вы анализировали не только EDT с именем Dimension, но и все EDT созданные на его основе? В стандарте таких нет, но мало ли, что сделано конкретно у Вас.
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 11.03.2012, 18:11   #6  
Alexius is offline
Alexius
Участник
Аватар для Alexius
 
461 / 248 (9) ++++++
Регистрация: 13.12.2001
Цитата:
Сообщение от Peppi Посмотреть сообщение
Но есть подозрение, что нужно запустить какие-нибудь процедуры пересчета общих таблиц, типа как InventSum в логистике. Есть ли такие ?
АХ 2009
ГК / Периодические операции / Закрытие года / Открывающие проводки
ГК / Периодические операции / Пересчет сальдо по периодам
Старый 12.03.2012, 10:43   #7  
Peppi is offline
Peppi
Участник
 
31 / 11 (1) +
Регистрация: 22.10.2008
Всем спасибо большое за ответы
Старый 16.03.2012, 11:21   #8  
AX3 is offline
AX3
Участник
 
15 / 10 (1) +
Регистрация: 04.03.2009
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Зависит от версии Axapta. В разных версиях разные таблицы. Собственно, основная - это сальдо по бух.проводкам в разрезе фин.аналитик LedgerBalancesDim или нечто похожее
Владимир, если говорить про v3, то могли бы уточнить в каких еще таблицах нужно проверить/изменить аналитику?
Старый 19.03.2012, 08:05   #10  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Цитата:
Сообщение от rDenis2 Посмотреть сообщение
Полная лажа по ссылке...
  • поиск полей в таблице по имени - есть куча таблиц с полями, имеющих EDT Dimension, но имеющими наименование, отличное от Dimension. Обновления в таких таблицах не будет.
  • обновление только в тек. компании - таблица Dimension может входить в виртуальную компанию, обновится только в текущей, во всех остальных физических компаниях, входящих в виртуальную, никакого обновления.

Правильный алгоритм:
  1. Определение списка компаний для обновления
  2. Поиск по АОТ таблиц с полями, имеющими нужные EDT (если вдруг у Dimension есть наследники)
  3. Цикл по компаниям по п.1 с обновлением значений полей у найденных по п.2 таблиц
__________________
Мы летаем, кружимся, нагоняем ужасы ...
Старый 19.03.2012, 16:30   #11  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Еще раз обращаю внимание на тот факт, что кроме собственно поля Dimension фин.аналитики могут быть представлены парой полей: DimensionCode + Num. И это возможно не только в таблице Dimensions. Соответственно, надо искать еще и EDT наследники от этих EDT.

Кроме того, возможна "кривая" кастомизация, когда надо просто знать, что вот это поле содержит значение фин.аналитики.
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 19.03.2012, 16:53   #12  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от AX3 Посмотреть сообщение
Владимир, если говорить про v3, то могли бы уточнить в каких еще таблицах нужно проверить/изменить аналитику?
В общем случае, определение списка таких таблиц задача не тривиальная. Значительную часть таблиц можно "поймать" примерно следующим циклом

X++:
    // Сканирую список таблиц, имеющих ЯВНУЮ ссылку на таблицу Dimensions
    while select TableName from xRefTableRelation
        group by TableName
            where xRefTableRelation.RelatedTableName == "Dimensions"
    {
        tableId     = tableName2Id(xRefTableRelation.TableName);
        dictTable   = new DictTable(tableId);

(...)
    }
Т.е. ловим по явным ссылкам. Но, повторюсь, это будут далеко не все таблицы со ссылкой на фин.аналитику.

Ну, и про таблицы с полями на базе DimensionCode + Num не стоит забывать. Это таблицы вроде

InventJournalReportTable_RU
LedgerControlDimension
LedgerRRGDimensionInterval_RU

Кроме того, следует иметь в виду, что не у всех таблиц можно просто заменить одно значение на другое. Возможно, потребуется сложение/удаление строк. Возможно, автоматизировать процесс замены в некоторых таблицах вообще нельзя.

А есть еще таблицы очень большого размера без индекса по фин.аналитикам. Например, InventSettlement. Для таких таблиц модификацию лучше выполнять прямыми SQL-запросами. В противном случае, время выполнения катастрофически увелививается.

Другими словами, часть таблиц Вы сможете найти и обновить автоматически, но часть придется исать и обновлять вручную.
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
За это сообщение автора поблагодарили: AX3 (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Фин аналитик в проводках по курсовым для поставщиков maxkov DAX: Функционал 6 15.02.2012 12:34
Кол-во фин. аналитик. Лицензия Poleax DAX: Прочие вопросы 2 12.11.2010 15:26
Не хватает фин. аналитик при пересчете и закрытии склада Geo DAX: Функционал 7 23.10.2010 00:24
Скл.аналитика сайт, перенос и фин.аналитик Bega DAX: Функционал 32 03.06.2010 18:06
Аксапта 4.0 - иерархия фин. аналитик. slava09 DAX: Функционал 12 04.07.2006 10:04

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

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

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