![]() |
#1 |
Участник
|
Удаление InventSettlemens
Вопрос глупый, но все же
![]() если отменить все пересчеты себестоимости, удалить проводки по этип операциям (в ГК), и удалить все записи в InventSettlements, а затем пересчитать себестоимость, что будет? |
|
![]() |
#2 |
Member
|
Записи в InventSettlement относятся не только к закрытию склада и корректировкам. Например, к корректировке себестоимости, разноске накладных расходов.
В общем, плохо будет. Посмотрите функцию суммирования сопоставлений. Или она очисткой сопоставлений называется.
__________________
С уважением, glibs® |
|
|
За это сообщение автора поблагодарили: aidsua (2). |
![]() |
#3 |
----------------
|
Удалить можно те, что с Canceled = 1
|
|
|
За это сообщение автора поблагодарили: mazzy (2). |
![]() |
#4 |
Участник
|
е
Цитата:
сли отменить все пересчеты себестоимости
Цитата:
удалить все записи в InventSettlements
Цитата:
удалить проводки по этип операциям (в ГК)
Цитата:
удалить все записи в InventSettlements
PS: в общем, если вы не скрыли какие-то неочевидные особенности, то задачу вполне можно решить стандартными средствами. (если же сказали не все, то нужно думать, как решить задачу) |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
![]() |
#5 |
Участник
|
|
|
![]() |
#6 |
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. |
|
![]() |
#7 |
Участник
|
Цитата:
Причем понятно откуда она взялась - просто не тестируют с отмененными закрытиями. |
|
![]() |
#8 |
Участник
|
|
|
![]() |
#9 |
Модератор
|
Ну это как посмотреть. Если регулярно проводить ТО системы, включающее удаление отмененных сопоставлений в прошлых периодах, то селективность и соответственно польза от такого индекса радостно стремится к нулю. Так что если вы N-цать лет экспериментировали с закрытием склада и не чистили InventSettlement, то соотношение "хороших" и "плохих" сопоставлений и количество данных будут такие, что оптимизатору будет дешевле запустить один table scan чем миллионы раз метаться от записей в индексе к страницам с данными. В этом случае очистка частями по дате сопоставления (TransDate) вам в помощь, благо поле проиндексировано неоднократно
__________________
-ТСЯ или -ТЬСЯ ? |
|
|
За это сообщение автора поблагодарили: mazzy (2), Zabr (1). |
![]() |
#10 |
Участник
|
|
|
![]() |
#11 |
Модератор
|
Если отмененных сопоставлений много (миллионы), независимо от того насколько быстро они найдутся (по индексу или нет), их еще потребуется удалить, так что все равно это довольно затратная по вводу-выводу операция и ее так или иначе придется бить на части (и тут индекс по дате сопоставления будет полезен)
__________________
-ТСЯ или -ТЬСЯ ? |
|
![]() |
#12 |
Administrator
|
Цитата:
Только надо учесть, что имена индексов уникальны в БД (MS SQL Server) и полную копию таблицы с индексами создать не получится, если не переименовать помимо таблицы еще и индексы. Я создавал копию таблицы без индексов - туда все переливал, после чего синхронизировал табличку (после удаления исходной таблицы)
__________________
Возможно сделать все. Вопрос времени |
|
![]() |
#13 |
Участник
|
|
|
![]() |
#14 |
Модератор
|
Я бы почистил, профилактики ради и экономии места для - производительности особой это не прибавит. Если планируете запускать такую очистку регулярно и используете SQL Server 2008, можете создать filtered index (WHERE CANCELLED = 1) - получится симпатично, эффективно и не громоздко
__________________
-ТСЯ или -ТЬСЯ ? |
|
![]() |
#15 |
Участник
|
Почистил. Заняло 7 часов. Удалилось 10,1 млн сопоставлений, добавилось 6,5 млн, итого уменьшение на 3,6 млн. записей. Посмотрел на таблицу в Sql management studio .. и очень сильно удивился занимаемому объему в базе: ОН ВЫРОС! Число записей - да, сократилось. Но занимаемое место в базе: было 14 Гб данные + 14 Гб индексы, стало 13 Гб данные + 20 Гб индексы. Почему вдруг настолько сильно (на 50%) выросло место занимаемое индексами, если число записей сократилось?
Vadik, есть версии ? |
|
![]() |
#16 |
Модератор
|
Цитата:
![]()
__________________
-ТСЯ или -ТЬСЯ ? |
|
Теги |
пересчет себестоимости, удаление |
|
![]() |
||||
Тема | Ответов | |||
Автоматическое удаление AX 4.0 | 3 | |||
Ax 3. Запускаю на сервере удаление файла. Не удаляет. | 17 | |||
Корректное удаление проводки | 7 | |||
Удаление проекта | 0 |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|