|
![]() |
#1 |
Участник
|
|
|
![]() |
#2 |
Moderator
|
Цитата:
X++: delete_from inventSettlement index hint ItemDateIdx where inventSettlement.ItemId == _inventTable.ItemId && inventSettlement.Cancelled == NoYes::Yes && inventSettlement.SettleModel != InventSettleModel::PhysicalValue && inventSettlement.TransDate < transDateDel; А если говорить по делу, то та функциональность которая нужна топикстартеру присутствует в этом самом классе inventCostCleanup. Разница только в том, что он проводки по ГК не удаляет, а сторнирует. (О чем уже было сказано Raven Melancholic). Если написать свой класс, который удаляет отмененные записи в inventSettlement, проводки по ГК (с аккуратным пересчетом балансов в ledgerBalanceDim / LedgerBalanceDimTrans) и сопутствующую запись в inventClosing, то можно добиться полного удаления следов закрытия/пересчета склада. Я конечно знаю, что это методологически неверно, но во время запуска системы мне приходилось для устранения последствий собственных ошибок такие классы писать. Последний раз редактировалось fed; 17.05.2010 в 13:22. |
|
![]() |
#3 |
Участник
|
Цитата:
Причем понятно откуда она взялась - просто не тестируют с отмененными закрытиями. |
|
![]() |
#4 |
Участник
|
|
|
![]() |
#5 |
Модератор
|
Ну это как посмотреть. Если регулярно проводить ТО системы, включающее удаление отмененных сопоставлений в прошлых периодах, то селективность и соответственно польза от такого индекса радостно стремится к нулю. Так что если вы N-цать лет экспериментировали с закрытием склада и не чистили InventSettlement, то соотношение "хороших" и "плохих" сопоставлений и количество данных будут такие, что оптимизатору будет дешевле запустить один table scan чем миллионы раз метаться от записей в индексе к страницам с данными. В этом случае очистка частями по дате сопоставления (TransDate) вам в помощь, благо поле проиндексировано неоднократно
__________________
-ТСЯ или -ТЬСЯ ? |
|
|
За это сообщение автора поблагодарили: mazzy (2), Zabr (1). |
![]() |
#6 |
Участник
|
|
|
![]() |
#7 |
Модератор
|
Если отмененных сопоставлений много (миллионы), независимо от того насколько быстро они найдутся (по индексу или нет), их еще потребуется удалить, так что все равно это довольно затратная по вводу-выводу операция и ее так или иначе придется бить на части (и тут индекс по дате сопоставления будет полезен)
__________________
-ТСЯ или -ТЬСЯ ? |
|
![]() |
#8 |
Участник
|
|
|
![]() |
#9 |
Модератор
|
Я бы почистил, профилактики ради и экономии места для - производительности особой это не прибавит. Если планируете запускать такую очистку регулярно и используете SQL Server 2008, можете создать filtered index (WHERE CANCELLED = 1) - получится симпатично, эффективно и не громоздко
__________________
-ТСЯ или -ТЬСЯ ? |
|
![]() |
#10 |
Administrator
|
Цитата:
Только надо учесть, что имена индексов уникальны в БД (MS SQL Server) и полную копию таблицы с индексами создать не получится, если не переименовать помимо таблицы еще и индексы. Я создавал копию таблицы без индексов - туда все переливал, после чего синхронизировал табличку (после удаления исходной таблицы)
__________________
Возможно сделать все. Вопрос времени |
|
Теги |
пересчет себестоимости, удаление |
|
![]() |
||||
Тема | Ответов | |||
Автоматическое удаление AX 4.0 | 3 | |||
Ax 3. Запускаю на сервере удаление файла. Не удаляет. | 17 | |||
Корректное удаление проводки | 7 | |||
Удаление проекта | 0 |
|