|
![]() |
#1 |
Moderator
|
Я кстати сначала (когда разбирался) решил что они сделают группировку не по ваучерам, а по транзакциям. Типа записали все обновления в ходе транзации в ledgerBalanceTransDelta, а потом в конце вызвали обработчик и все в одну запись в балансах столкнули. Но они почему-то решили делать per-voucher. Вероятно, mifi прав, и в буржуинских условиях один журнал в 90% случаев содержит один ваучер, и экономия бы слишком мелкая получилась бы.
|
|
![]() |
#2 |
Участник
|
Цитата:
при помощи этого поля попытались уменьшить вероятность блокировок. раньше, чтобы найти промежуточную сумму, нужно было сделать find. теперь - нужно сделать sum() с разными Variant. Но фундаментальный механизм работы с промежуточными финансовыми итогами не изменился. 1. программист говорит - вставь запись (ключевые-поля, изменения-сумм) 2. поскольку у сумм установлено свойство relative 2.1. система ищет существующую запись с этими ключевыми полями 2.2. если находит, то выполняет update полей со свойством relative (со всеми полагающимися блокировками) 2.3. если не находит, то выполняет insert разница между старыми и новыми версиями только в случайном параметре Variant. Этот параметр уменьшает вероятность попадания на шаг 2.2. Но ни в коем случае не исключает этот шаг. Цитата:
Но эта операция - очень тяжелая. Она блокирует все и надолго. Она скорее призвана исправить ситуации, нежели является регламентной. Промежуточные итоги могут содержать неактуальные значения в двух случаях: 1. программист использовал doUpdate, doInsert, doDelete вместо нормальных Update, Insert, Delete на таблице LedgerTrans 2. программист изменял записи в LedgerTrans прямыми запросами в SQL. Если выполняется нормальная и штатная работа с LedgerTrans, то система всегда держит промежуточные итоги актуальными. Цитата:
![]() write - это тоже наследие конкорда. ты попробуй ![]() Цитата:
попробуй. создай свою табличку и изнасилуй ее ![]() Цитата:
при таком подходе получается, что у системы никогда балансы неактуальны. не думаю, что на такое пошли бы. не знаю. |
|
![]() |
#3 |
Участник
|
Цитата:
В таком случае и получиться ситуация которую бы хотел Glibs, на один день и комбинацию аналитик будет одна запись в ledgerBalances(Dim)Trans. В принципе меня именно его пост и подтолкнул присоединиться с этому обсуждению. P.S. Кстати разработчики много чего оптимизировали в пятерке, может быть эта операция теперь и не такая тяжелая Последний раз редактировалось petr; 28.09.2010 в 13:16. Причина: Добавление |
|
![]() |
#4 |
Участник
|
Цитата:
Сообщение от mazzy
![]() ...
Да. Я понял что имеется в виду. Но эта операция - очень тяжелая. Она блокирует все и надолго. Она скорее призвана исправить ситуации, нежели является регламентной. Промежуточные итоги могут содержать неактуальные значения в двух случаях: 1. программист использовал doUpdate, doInsert, doDelete вместо нормальных Update, Insert, Delete на таблице LedgerTrans 2. программист изменял записи в LedgerTrans прямыми запросами в SQL. Если выполняется нормальная и штатная работа с LedgerTrans, то система всегда держит промежуточные итоги актуальными. И, насколько я понял предположение petr, регламентный запуск процедуры нужен не для исправления ошибок, а для группировки записей. Собственно, проверено экспериментально: если было несколько записей на одну дату / счет в LedgerBalancesTrans, то после выполнения пересчета периода остается одна строка.
__________________
Ivanhoe as is.. Последний раз редактировалось Ivanhoe; 28.09.2010 в 13:31. Причина: в Проверке целостности эта процедура есть |
|
Теги |
ledgerbalance, ledgerbalancesdimtrans, ledgerbalancestrans, главная книга, итоги, сальдо, crm2011 |
|
|