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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.09.2010, 13:00   #1  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
наше обсуждение превращается в теологическое.
в том смысле, что делаем выводы на основании своих представлений, а не на основании практических экспериментов.
__________________
полезное на axForum, github, vk, coub.
Старый 28.09.2010, 13:46   #2  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,914 / 5737 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Цитата:
Сообщение от mazzy Посмотреть сообщение
наше обсуждение превращается в теологическое.
в том смысле, что делаем выводы на основании своих представлений, а не на основании практических экспериментов.
Ну я вот тут практический эксперимент поставил: В живой и активно работающей БД версии 2009 вытащил кэш запросов. Не буду биться об заклад за какое время там запросы, но судя по полю с датой и временем последнего исполнения - самые старые запросы в кэше от позавчера. Так что рискну предположить что выборка репрезентативная. Так вот - ни одного update по ledgerBalancesDimTrans не присутствует. Есть море (порядка 8000) запросов типа:
INSERT INTO LEDGERBALANCESDIMTRANS (ACCOUNTNUM,PERIODCODE,TRANSDATE,DIMENSION,DIMENSION2_,DIMENSION3_,DIMENSION4_,SYSTEMGENERATEDULTIMO,DEBITMST,CREDITMST,DEBITOPRMST,CREDITOPRMST,DEBITTAXMST,CREDITTAXMST,DEBITMSTSECOND,CREDITMSTSECOND,DEBITOPRMSTSECOND,CREDITOPRMSTSECOND,DEBITTAXMSTSECOND,CREDITTAXMSTSECOND,QTY,DATAAREAID,RECVERSION,RECID)SELECT F1,F2,F3,F4,F5,F6,F7,F8,F9,F10,F11,F12,F13,F14,F15,F16,F17,F18,F19,F20,F21,DATAAREAID,RECVERSION,RECID+5676742945 FROM [#ax_tmp_kdis547_330_0]
Есть аналогичное количество запросов вида:
SELECT A.LEDGERACCOUNTNUM AS f1,A.PERIODCODE AS f2,A.TRANSDATE AS f3,A.DIMENSION AS f4,A.DIMENSION2_ AS f5,A.DIMENSION3_ AS f6,A.DIMENSION4_ AS f7,A.SYSTEMGENERATEDULTIMO AS f8,A.DEBITMSTSUMMED AS f9,A.CREDITMSTSUMMED AS f10,A.DEBITOPRMSTSUMMED AS f11,A.CREDITOPRMSTSUMMED AS f12,A.DEBITTAXMSTSUMMED AS f13,A.CREDITTAXMSTSUMMED AS f14,A.DEBITMSTSECONDSUMMED AS f15,A.CREDITMSTSECONDSUMMED AS f16,A.DEBITOPRMSTSECONDSUMMED AS f17,A.CREDITOPRMSTSECONDSUMMED AS f18,A.DEBITTAXMSTSECONDSUMMED AS f19,A.CREDITTAXMSTSECONDSUMMED AS f20,A.QUANTITYSUMMED AS f21,N'era' AS DATAAREAID,1 AS RECVERSION,IDENTITY(bigint,1,1) AS RECID INTO [#ax_tmp_kdis547_330_0] FROM LEDGERBALANCESDIMTRANSDELTASUM A WHERE ((DATAAREAID=N'era') AND (USERTTSID=5708989947))

То есть - система в полном соответствии с теорией обработала оператор insert_recordset из ledgerBalancesTransDelta.transferTempDeltaRecsToLedger*. Сначала выбрала просуммированные данные из view построенного поверх ledgerBalancesTranDelta во временную таблицу. Потом данные из временной таблицы ВСТАВИЛА в таблицу балансов...
Старый 28.09.2010, 14:19   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от fed Посмотреть сообщение
Тут mazzy (если я его правильно понимаю) пытается доказать что в Аксапте insert в ledgerBalancesDimTrans магическим образом заменяется на update и несколько одинаковых записей превращаются в одну.
Цитата:
Сообщение от fed Посмотреть сообщение
Ну я вот тут практический эксперимент поставил...
Ок. Беру паузу. Практический эксперимент попробую сделать ночером.
__________________
полезное на axForum, github, vk, coub.
Старый 28.09.2010, 14:19   #4  
AlexSD is offline
AlexSD
Microsoft Dynamics
Сотрудники Microsoft Dynamics
 
257 / 302 (11) ++++++
Регистрация: 14.10.2003
Цитата:
Сообщение от mazzy Посмотреть сообщение
наше обсуждение превращается в теологическое.
в том смысле, что делаем выводы на основании своих представлений, а не на основании практических экспериментов.
Попробывал - не получилось.
Создал в ax2009 таблицу с двумя полями: текстовое Id, числовое Amount с FieldUpdate = Relative. Уникальный индекс по полю Id.
Джобом пытаюсь добавлять, обновлять запись разными способами - никак не получается воспроизвести ситуацию, что бы поле Amount обновлялось с учетом предыдущего значения. Каждый раз значение поля переписывается.

Может, я что-то не так делаю?
Старый 28.09.2010, 14:29   #5  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от AlexSD Посмотреть сообщение
Попробывал - не получилось.
опаньки. понял. тем более, надо попробовать. вдруг, это я неправ.
__________________
полезное на axForum, github, vk, coub.
Старый 28.09.2010, 14:52   #6  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,914 / 5737 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Цитата:
Сообщение от AlexSD Посмотреть сообщение
Попробывал - не получилось.
Создал в ax2009 таблицу с двумя полями: текстовое Id, числовое Amount с FieldUpdate = Relative. Уникальный индекс по полю Id.
Джобом пытаюсь добавлять, обновлять запись разными способами - никак не получается воспроизвести ситуацию, что бы поле Amount обновлялось с учетом предыдущего значения. Каждый раз значение поля переписывается.

Может, я что-то не так делаю?
Кстати мне очень непонятно как fieldUpdate==relative будет работать в версиях начиная с 3.0, в которой ввели обязательность select forupdate перед update. Получается что если у тебя пессимистичный контроль для таблицы стоит, то никто кроме тебя эту запись и не сможет изменить. Если оптимистический - то у тебя при апдейте (если эту запись кто-то обновил) должен exception::updateConflict подняться. Получается что этим механизмом можно пользоваться только если skipTTSCheck(true) у таблицы врубить и табличку апдейтить после обычного select (без forupdate/pessimisticLock/optimisticLock).
Можно конечно предположить что mazzy прав и система магически умеет заменять вставки на обновления, но как-то это никак не вяжется с содержанием хэлпов всех версий...
Старый 28.09.2010, 14:58   #7  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от fed Посмотреть сообщение
Кстати мне очень непонятно как fieldUpdate==relative будет работать в версиях начиная с 3.0...
хм... быстро обозрел

в ax2009 действительно сильно заморочено. И надо разбираться.
в ax3.0 был метод класса LedgerVoucherBalancesList.write()

X++:
private void write()
{
    LedgerBalancesMap  ledgerBalancesLocal = ledgerBalances.data();
    ;
    ttsbegin;

    this.forUpdate(ledgerBalancesLocal);

    if (!ledgerBalancesLocal)
    {
        ledgerBalancesLocal.LedgerAccount   = ledgerBalances.LedgerAccount;
        ledgerBalancesLocal.TransDate       = ledgerBalances.TransDate;
        ledgerBalancesLocal.PeriodCode      = ledgerBalances.PeriodCode;
        ledgerBalancesLocal.LedgerSystemGeneratedUltimo = ledgerBalances.LedgerSystemGeneratedUltimo;
        ledgerBalancesLocal.LedgerBalancesVariant = variant;
    }

    ledgerBalancesLocal.DebitMST        += ledgerBalances.DebitMST;
    ledgerBalancesLocal.CreditMST       += ledgerBalances.CreditMST;
    ledgerBalancesLocal.DebitOPRMST     += ledgerBalances.DebitOPRMST;
    ledgerBalancesLocal.CreditOPRMST    += ledgerBalances.CreditOPRMST;
    ledgerBalancesLocal.DebitTaxMST     += ledgerBalances.DebitTaxMST;
    ledgerBalancesLocal.CreditTaxMST    += ledgerBalances.CreditTaxMST;

    ledgerBalancesLocal.DebitMSTSecond      += ledgerBalances.DebitMSTSecond;
    ledgerBalancesLocal.CreditMSTSecond     += ledgerBalances.CreditMSTSecond;
    ledgerBalancesLocal.DebitOPRMSTSecond   += ledgerBalances.DebitOPRMSTSecond;
    ledgerBalancesLocal.CreditOPRMSTSecond  += ledgerBalances.CreditOPRMSTSecond;
    ledgerBalancesLocal.DebitTaxMSTSecond   += ledgerBalances.DebitTaxMSTSecond;
    ledgerBalancesLocal.CreditTaxMSTSecond  += ledgerBalances.CreditTaxMSTSecond;

    LedgerBalancesLocal.LedgerQty += ledgerBalances.LedgerQty;

    ledgerBalancesLocal.write();

    ttscommit;
}
Увидев его я сильно засомневался в свойстве Relative.
Интересно. Ночером.
__________________
полезное на axForum, github, vk, coub.
Старый 29.09.2010, 01:33   #8  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от mazzy Посмотреть сообщение
Ок. Беру паузу. Практический эксперимент попробую сделать ночером.
отмотал назад по версиям... пока до 2.5...
нашел конкорд, но не помню пароля.
посмотрел что было раньше.

Цитата:
Сообщение от mazzy Посмотреть сообщение
Не, Денис, ты ошибаешься.
Здесь тебе стоит пересмотреть свои взгляды.

Просто у денежных полей в таблицах LedgerBalancesTrans и LedgerBalancesDimTrans
установлено свойство FieldUpdate = Relative.
http://msdn.microsoft.com/en-us/library/aa577032.aspx

Это значит, что программисту не надо писать Update, не нужно маятся с вилкой (find?update:insert).
Программисту достаточно давать команду Insert.
Система сама сложит, если найдет уже существующую запись.
Это свойство пришло еще из Конкорда.
похоже это мне нужно пересматривать взгляды.

Цитата:
Сообщение от AlexSD Посмотреть сообщение
Попробывал - не получилось.
Создал в ax2009 таблицу с двумя полями: текстовое Id, числовое Amount с FieldUpdate = Relative. Уникальный индекс по полю Id.
Джобом пытаюсь добавлять, обновлять запись разными способами - никак не получается воспроизвести ситуацию, что бы поле Amount обновлялось с учетом предыдущего значения. Каждый раз значение поля переписывается.

Может, я что-то не так делаю?
да. у меня такая же ситуация.
в 2.5, 3.0, 4.0, 2009
пока считаю, что это я что-то серьезно напутал.

мало того, в ax2.5 суммовые поля в таблицах LedgerBalances не являются Relative!

оказывается механизм переписывался. и существенно.
надо будет покопаться потщательнее.
пусть пока перекрестные ссылки построятся.
Миниатюры
Нажмите на изображение для увеличения
Название: ax25-update.PNG
Просмотров: 606
Размер:	77.3 Кб
ID:	6204  
Изображения
 
__________________
полезное на axForum, github, vk, coub.
За это сообщение автора поблагодарили: Logger (1).
Теги
ledgerbalance, ledgerbalancesdimtrans, ledgerbalancestrans, главная книга, итоги, сальдо, crm2011

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
fed: History of inventory locking in DAX Blog bot DAX Blogs 0 28.09.2009 16:05
Microsoft DAX Dev Center Headlines: New Ledger Posting White Paper Released Blog bot DAX Blogs 0 23.11.2008 12:05
axStart: Change data on a data source on a Form Blog bot DAX Blogs 0 04.09.2008 15:05
Microsoft Dynamics CRM Team Blog: Data Migration Manager Tips and Tricks Blog bot Dynamics CRM: Blogs 0 02.09.2008 22:05
Пустые названия системных таблиц в report data range (DAX 4.0) Qaz Qwerty DAX: Функционал 3 06.08.2008 00:05
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

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

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

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