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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.08.2005, 09:18   #1  
chi is offline
chi
Участник
 
80 / 13 (1) ++
Регистрация: 21.01.2004
? Что за поле LedgerBalancesTrans.LedgerBalancesVariant?
Собственно, сабж. Даже лэйбла к нему нет (и к его расширенному типу).
Старый 17.08.2005, 09:39   #2  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
Класс LedgerVoucherBalancesList

переменная variant потом может инициализироватьи обновлять LedgerBalancesVariant

PHP код:
void new(LedgerBalancesMap _ledgerBalancesMap)
{
    
Xsession    session = new xsession();
;
    
LedgerBalances _ledgerBalancesMap;

    
variant session.sessionId() mod 20;

    
balanceList = new RecordSortedList(LedgerBalances.TableId);

Старый 17.08.2005, 09:41   #3  
chi is offline
chi
Участник
 
80 / 13 (1) ++
Регистрация: 21.01.2004
А для чего это поле нужно в таблице?
Старый 17.08.2005, 09:51   #4  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
ИМХО: судя по результатам поиска в АОТ-е это поле используется при поиске (как параметр для поиска) и сортировке.
Старый 17.08.2005, 10:46   #5  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,909 / 5730 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Это поле добавлено в версии 3.0 для уменьшения взаимных блокировок.

Грубо говоря - идея следующая:
В старой Axapta (2.5/2.1) обороты по счетам и аналитикам накапливались в таблицах ledgerBalances и ledgerBalancesDim в разрезе счетов и периодов и в разрезе счетов, периодов и аналитик соответственно. Классы разноски в ledgerTrans после записи в саму ledgerTrans обновляли обороты в этих таблицах. Соответственно - если я начинал разносить журнал из 5000 строк, система обновляла одну из строк в ledgerBalances (скажем - по счету 60.01) и эта строка блокировалась до конца транзакции. При этом все остальные транзакции, которые пытались выполнить проводку на счет 60.01, ожидали ее окончания. Ну а поскольку разноска журнала из 5000 строк может занимать эдак часик, а то и два, все это приводило к высокому уровню блокировок, и большому количеству перекуров среди пользователей.

В версии 3.0 эти таблицы заменили на таблицы ledgerBalancesTrans и ledgerBalancesDimTrans. При этом - обороты по счету могут записываться в любую из 20 строк которые этому счету соответствуют. То есть - при обновлении ledgerTrans система более или менее случаным (в зависимости от номера сессии) образом выбирает одну из этих строк и пишет туда сумму оборотов. Благодаря этому - вероятность взаимных блокировок уменьшается в 20 раз. В то же время - если классам LedgerBalanceDim* или подобным необходимо посчитать обороты за период, то в общем-то, не возникает большой разницы между чтением одной строки из таблицы и чтением 20 строк из той же таблицы (Серверное железо-то теперь очень даже мощное). Так что тут проблем с производительностью не возникает.
За это сообщение автора поблагодарили: mazzy (5), konopello (1), alex55 (1).
Старый 13.06.2007, 16:47   #6  
gaenar is offline
gaenar
Участник
 
151 / 63 (3) ++++
Регистрация: 26.03.2005
Возвращаюсь к вопросу о LedgerBalancesDimTrans.

А объясните, как может быть, что в LT только одна проводка на 800К, а в LedgerBalancesDimTrans две на ту же сумму и отличаются они только этим полем LedgerBalancesVariant? Из-за этого в отчёт попадают задвоенные обороты и выходит, что этой агрегированной таблицей пользоваться не стоит.
__________________
Умные тоже наступают на грабли, но только для того, чтобы поднять их с земли не нагибаясь.
Старый 14.06.2007, 10:09   #7  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от gaenar Посмотреть сообщение
Возвращаюсь к вопросу о LedgerBalancesDimTrans.

А объясните, как может быть, что в LT только одна проводка на 800К, а в LedgerBalancesDimTrans две на ту же сумму и отличаются они только этим полем LedgerBalancesVariant? Из-за этого в отчёт попадают задвоенные обороты и выходит, что этой агрегированной таблицей пользоваться не стоит.
1. У пользователей нет штатной возможности повлиять на промежуточные итоги (LedgerBalancesDimTrans)
2. Несоответствие итогов и проводок может создать только программист или администратор
2.1. Программист может вместо методов Insert, Update, Delete вызвать методы doInsert, doUpdate, doDelete. При вызове do-методов ядро не выполняет предопределенные процедуры. Следовательно при вызове do-методов на таблице проводок не изменятся итоги
2.2. администратор может выполнить какие-либо операции над таблицей проводок средствами СУБД.

Если программист и администратор вручную вмешиваются в базу, то они должны вручную обеспечить целостность базы. В данном случае пересчитать итоги.

Бухгалтерские итоги пересчитываются Главное меню \ Главная книга \ Периодические операции \ Пересчет данных периодов
__________________
полезное на axForum, github, vk, coub.
Старый 14.06.2007, 11:54   #8  
gaenar is offline
gaenar
Участник
 
151 / 63 (3) ++++
Регистрация: 26.03.2005
Да, после пересчёта всё хорошо. Спасибо.
Попрошу добавить в пакет на ночь.
Забывают пересчитывать вручную после смены аналитики средствами программиста.

By the way...
не могу понять, зачем в русской локализации код, отвечающий за добавление LedgerBalancesDimTrans и LedgerBalancesTrans вынесен из LedgerVoucherTransObject.postGroup() и занесён в "пост-проверку" в LedgerVoucher.post() ( в тело цикла for (more = ledgerTransList.first(ledgerTrans) ). Причём в зависимости от параметра Correspondense_RU. Видимо, из-за того, что метод splitTrans не возвращает созданный корреспондирующий LedgerTrans, и положить его в LedgerBalancesXXX сразу нет возможности.
__________________
Умные тоже наступают на грабли, но только для того, чтобы поднять их с земли не нагибаясь.

Последний раз редактировалось gaenar; 14.06.2007 в 13:45.
Теги
ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
сопоставление оплат клиента, переносов сальдо-поле накладная в общем журнале? Aquarius DAX: Функционал 3 28.01.2009 12:51
Поле "Оплатить до" в строке общего журнала longson DAX: Функционал 7 29.03.2008 14:38
вычисляемое поле ZhanR DAX: Программирование 8 28.09.2006 10:25
поле LedgerBalancesVariant simply2double DAX: Программирование 2 08.12.2005 18:23
Создание feature key на поле формы tov DAX: Администрирование 11 30.06.2003 15:49
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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