AXForum  
Go Back   AXForum > Microsoft Dynamics AX > DAX: Функционал
All
Forgotten Your Password?
Register Forum Rules FAQ Members List Today's Posts Search

 
 
Thread Tools Search this Thread Display Modes
Old 27.09.2012, 17:39   #1  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Join Date: 09.07.2002
Location: Parndorf, AT
Quote:
Originally Posted by Starling View Post
Мне кажется, у меня есть решение. Покритикуйте.
  1. На входе указывается период, за который мы хотим транслировать. Система перебирает в цикле все проводки ГК (причем кредитовую и дебетовую часть отдельно) вне зависимости от того были они транслированы или нет.
  2. Уже после того как проводка была выбрана система проверяет, была ли эта проводка уже транслирована.
  3. В результате, если мы находимся в конце периода и нам реально нужно транслировать 1000 проводок ГК, система будет перебирать все 50 000, которые были в течение периода.
  4. Что я хочу:
    • Добавить в LedgerTrans чек-бокс.
    • После окончания трансляции выбрать из таблицы RTSLTransLog RecId всех записей LedgerTrans, которые были транслированы в рамках текущей сессии. И обновить для них это поле
    • При отмене сессии трансляции по такому же принципу новое поле де актировать.
    • В запрос по выбору проводок добавить критерий по новому полю. В результате будем выбирать только то, что не транслировалось, т.е. 1000.
    • Мне кажется, что при ежедневной трансляции такой подход должен значительно ускорить производительность. Если же транслировать сразу месяц, то эффекта не будет ни какого. Но нам это и не нужно.
Да, 10 лет назад я не очень много понимал в производительности. Странно, что за 10 лет никто не усовершенствовал код. Есть некоторые идеи, в любом случае надо оптимизировать \Classes\RTSLLedgerTranslation\processRules:

1) Добавить в Query TransLog и делать выборку с джойном. Будет ничем не медленее вашей идеи с полем.

2) Сейчас идет выборка "от правип - к проводке", идет запрос от меньшей таблицы - к большей. Надо вывернуть наизнанку и делать выборку "от проводок - к правилам", закешировав предварительно правила, а также кэшируя результат по ключу "SourceAccountNum", причем делать обработку звездочек * не с помощью запроса, а оператором like.
This post has been rated by: Starling (2).
Old 27.09.2012, 19:04   #2  
Starling is offline
Starling
Участник
Дети Юза
 
530 / 76 (4) ++++
Join Date: 20.10.2005
Location: Kiev
Quote:
Originally Posted by EVGL View Post
1) Добавить в Query TransLog и делать выборку с джойном. Будет ничем не медленее вашей идеи с полем.
Можно наверно и так.
Но, если я сейчас правильно помню код, то таблица TransLog заполняется в процессе трансляции. Получается что таблица, которая входит в запрос, «инсертится» в процессе выполнения этого запроса.
Когда-то у меня были проблемы с такой реализацией.
Спасибо – будем пробовать.
О результатах постараюсь отписаться.
Old 16.10.2012, 12:05   #3  
Starling is offline
Starling
Участник
Дети Юза
 
530 / 76 (4) ++++
Join Date: 20.10.2005
Location: Kiev
Ошибка корреспонденции
Ошибку корреспонденции походе удалось исправить, модифицировав код метода importTransactions класса rtslLedgerTranslation.
X++:
protected void importTransactions()
{
....

    while select tmpLedgerTrans         // The order defines bond sequence
        order by Voucher,
                 TransDate,
                 //BUG003, 10/10/2012 -->
                 //add - исправление ошибки корреспонденции
                 BondBatch desc,
                 BondBatchTrans desc,    // 2-2, 1-1, 0-0, 0, 0, 0
                 //BUG003 <--
                 TransType,
                 OperationsTax,
                 AccountType,           // Usial-Usial, Usial-Disbalance, ...-TransDiff
                 Txt
                 //BUG003 10/10/2012 -->
                 //comment - исправление ошибки корреспонденции
                 //BondBatch desc,
                 //BondBatchTrans desc    // 2-2, 1-1, 0-0, 0, 0, 0
                 //BUG003 <--
...
На такой вариант удалось выйти почти случайно, просто по косвенным признакам я пришел к выводу, что если количество проводок большое и пара ДТ - КТ приходит не последовательно в движок корреспонденции, то он затрудняется их обработать.

После внесения описанных выше изменений ошибка перестала проявляться.

Last edited by Starling; 16.10.2012 at 12:09.
Old 16.10.2012, 12:08   #4  
Starling is offline
Starling
Участник
Дети Юза
 
530 / 76 (4) ++++
Join Date: 20.10.2005
Location: Kiev
Скорость трансляции
Попробовали оба варианта:
1. Новое поля – признак того, что проводка уже транслирована.
2. Not exists join по таблице TransLog.
При первом вариант один день за 7 минут, при втором за 1 час. Но для первого пришлось еще и индекс на LedgerTrans добавить – это пока смущает.
Tags
консолидация, трансляция

 

Similar Threads
Thread Thread Starter Forum Replies Last Post
Трансляция. Слетает корреспонденция. ena_ax DAX: Функционал 0 28.10.2008 07:38
Трансляция 4.0 и 3.0: есть ли разница Arahnid DAX: Функционал 1 19.08.2007 12:26
Трансляция и двухвалютный склад EVGL DAX: Функционал 22 28.12.2005 17:28
Трансляция (ошибка целостности) VAA DAX: Программирование 2 19.07.2005 14:44
Трансляция в Аксапте vaavr DAX: Функционал 5 25.11.2003 12:02

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Рейтинг@Mail.ru
All times are GMT +3. The time now is 21:28.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.