29.07.2006, 21:05 | #21 |
Member
|
Цитата:
Сообщение от Хочулия
...
А можно ли из InventSum удалить пустые строки ... Цитата:
Сообщение от Хочулия
...
или чем аукнется тоже? ...
__________________
С уважением, glibs® |
|
|
За это сообщение автора поблагодарили: Logger (1). |
27.05.2014, 18:01 | #22 |
Участник
|
Цитата:
А вы не могли бы подробнее раскрыть тему ? Покопал классы InventSumDate InventSumDateDim InventSumDatePhysical InventSumDatePhysicalDim InventSumDateValue InventSumDateValueReport InventSumDateValueReportDim не нашел нигде зависимости от наличия закрытых Inventsum. Исключение - метод \Classes\InventSumDateValueReportDim\newParameters X++: server static InventSumDateValueReportDim newParameters( TransDate _perDate, ItemId _itemId, InventDim _inventDimCriteria, InventDimParm _inventDimParm ) { InventSumDateValueReportDim inventSumDateValueReportDim = new InventSumDateValueReportDim(); InventDimParm inventDimParmGroupBy; Query query; QueryRun queryRun; InventDim inventDim; ; inventSumDateValueReportDim.parmItemId(_itemId); inventSumDateValueReportDim.parmPerDate(_perDate); inventSumDateValueReportDim.parmInventDim(_inventDimCriteria); inventSumDateValueReportDim.parmInventDimParm(_inventDimParm); if (InventTable::find(_itemId).ItemDimCostPrice == NoYes::Yes) { inventDimParmGroupBy = _inventDimParm.data(); inventDimParmGroupBy.setActiveItemDim(InventTable::find(_itemId).DimGroupId); inventSumDateValueReportDim.parmInventDimParm(inventDimParmGroupBy); query = InventSum::newQuery(null,_itemId,_inventDimCriteria,_inventDimParm,inventDimParmGroupBy); query.dataSourceTable(tablenum(InventSum)).findRange(fieldnum(InventSum,Closed)).value(''); queryRun = new QueryRun(query); while (queryRun.next()) { inventDim = queryRun.get(tablenum(InventDim)); inventSumDateValueReportDim.parmInventDim(inventDim); inventSumDateValueReportDim.init(); } inventSumDateValueReportDim.parmInventDimParm(_inventDimParm); } else { inventSumDateValueReportDim.init(); } return inventSumDateValueReportDim; } X++: while (queryRun.next()) { inventDim = queryRun.get(tablenum(InventDim)); inventSumDateValueReportDim.parmInventDim(inventDim); inventSumDateValueReportDim.init(); } |
|
27.05.2014, 21:37 | #23 |
Участник
|
а пересчет InventSum разве не решит проблему?
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
28.05.2014, 09:46 | #24 |
Участник
|
|
|
28.05.2014, 10:30 | #25 |
Участник
|
Может быть Вам имеет смысл сделать партиционирование таблицы на уровне SQL и положить Закрытые записи на другой диск, а на быстром диске оставить только открытые?
__________________
Айрат Вильданов. skype: vildanov.a |
|
|
За это сообщение автора поблагодарили: Logger (1). |
28.05.2014, 11:02 | #26 |
Участник
|
Цитата:
Но мне кажется что хирургия это более надежный метод. Но более стремный. А вы явные противопоказания к удалению закрытых записей знаете ? |
|
17.09.2014, 02:04 | #27 |
Участник
|
Полная проверка INVENTSUM
Задача проверки INVENTSUM возникает довольно часто.
Постарался решить эту проблему в общем случае. Написал статью http://yaroslavbat.blogspot.com/2014...apta-2009.html Хотел здесь новую тему создать (отклики собрать, если кто попробует), но прав нет Отзывы буду приветствовать |
|
17.09.2014, 08:35 | #28 |
NavAx
|
Цитата:
Сообщение от Kasper
Задача проверки INVENTSUM возникает довольно часто.
Постарался решить эту проблему в общем случае. Написал статью http://yaroslavbat.blogspot.com/2014...apta-2009.html Хотел здесь новую тему создать (отклики собрать, если кто попробует), но прав нет Отзывы буду приветствовать |
|
17.09.2014, 12:46 | #29 |
Участник
|
В 2009 не проверял. А акс3 наша которая работала 6 лет запускал проверку. Все сошлось с интвентрансом до последней циферки.
Цитата:
Постарался решить эту проблему в общем случае. Написал статью
http://yaroslavbat.blogspot.com/2014...apta-2009.html Хотел здесь новую тему создать (отклики собрать, если кто попробует), но прав нет Отзывы буду приветствовать |
|
18.09.2014, 11:42 | #30 |
Участник
|
Цитата:
Напишите, ушло ли что ни-будь и сколько, а ещё лучше, прикрепите сюда логи, там посмотрим... |
|
18.09.2014, 11:57 | #31 |
Участник
|
Цитата:
Сообщение от Kasper
Уважаемый Logger, попробуйте запустить мой скрипт, но НЕ делая commit -- пока только посмотрим логи. Я не могу вам квалифицированно ответить на вопрос, нужно ли держать closed записи, но может после запуска скрипта часть из 65 мультов сама уйдёт ? Не по причине, что они closed, а потому что они необоснованные (не базируются на INVENTTRANS)
Напишите, ушло ли что ни-будь и сколько, а ещё лучше, прикрепите сюда логи, там посмотрим... По живой рабочей с кучей пользователей стремновато это делать. Еще заметил что в скрипте есть строки вида X++: using T1 b on a.DATAAREAID = b.DATAAREAID and a.ITEMID = b.ITEMID and a.INVENTDIMID = b.INVENTDIMID Или просто забыли добавить SUSTR(NLS_LOWER(a.DATAAREAID),1,4) и SUSTR(NLS_LOWER(a.ITEMID),1,20) ? |
|
18.09.2014, 12:13 | #32 |
Участник
|
Стоп !
Все Аксапты, которые я видел за последний год, работали в режиме CASE INCENSITIVE. Я вот поленился мануал почитать по установке SQL для Аксы, но считал что SQL для Аксы должен ставиться всегда регистронезависимым. Исходя из этого я и не делал приведение к регистру. У Вас не так ? На боевом приложении делать не надо Последний раз редактировалось Kasper; 18.09.2014 в 12:15. |
|
18.09.2014, 13:02 | #33 |
Участник
|
Цитата:
Вот, смотрю Axapta 2009 Installation Guide. Там написано: During installation, you must choose a collation method that meets the following requirements: Includes a sort order that is case-insensitive, accent-sensitive, kana-sensitive, and width-insensitive. Поэтому у меня всё верно. Разве у Вас Акса работает в регистрозависимом режиме ? Мы говорим об Аксе 2009 ? |
|
18.09.2014, 13:30 | #34 |
Участник
|
Я почему-то решил что у вас оракл.
Видимо из-за баннеров Вот и спросил. Скрипт просматривал только по диагонали. Чем вас не устроил InventSumReCalcItem о котором raz написал ? |
|
21.09.2014, 21:56 | #35 |
Участник
|
Доработал пост в блоге, учёл все комментарии.
Годится ? По правде говоря, я об этом классе не знал. Класс выполняет ту-же работу. Но скрипт, перед тем, как что-то сделать -- предоставляет лог. Скрипт можно использовать для экспресс-диагностики Квалифицированный ответ можно получить только от вендора, но можно порассуждать. Допустим есть чистая настроенная база. Пока ещё ни одной складской проводки. В складской картотеке есть одна номенклатура -- "Ведро" И вот вы купили одно ведро и сразу же его продали. Нажимаем кнопку "Запасы". Видим - Ведро, количество - 0. А если закрытую строку из InventSum удалить, то в форме "Запасы" будет пусто. Так не должно быть. Так ? |
|
22.09.2014, 06:51 | #36 |
Участник
|
|
|
22.09.2014, 07:59 | #37 |
Участник
|
А разве закрытой строка становится не после сопоставления закрытием склада? По-моему алгоритм закрытия как-то использует информацию из InventSum? Или я ошибаюсь? И точно ли не понадобятся такие закрытые строки в InventSum в случае открытия (отмены закрытия) склада?
|
|
22.09.2014, 10:10 | #38 |
Участник
|
|
|
22.09.2014, 10:57 | #39 |
Участник
|
Цитата:
есть такой код : X++: this.closedQty = this.isAllQtyFieldsZero(); this.closed = this.isAllValueFieldsZero() && this.closedQty; А в методах тупо идет сравнение количественных и суммовых полей с нулем. На закрытие склад ей пофигу. Просто как правило суммовые поля выравниваются после закрытия что приводит к их обнулению и взведению галки closed. Но такое может быть и без закрытия склада. Закрытие склада, насколько я помню не использует InventSum. Табличка InventSum упоминается в методах \Classes\InventCostClosingCancel_WorkInvent\checkAndDeleteVirtualTransfer \Classes\InventCostClosingCancel_WorkInvent\deleteVirtualTransfers но не для выборки из базы или фильтрации, а как накопительная переменная в памяти. По идее, они просто создадутся вновь если Аксапте потребуется остаток сделать отличным от нуля. Но я сам не проверял. |
|
22.09.2014, 11:01 | #40 |
Участник
|
Я бы еще подправил метод
\Classes\InventSumDateEngine\selectInventOnHand вот это место X++: insert_recordset inventSumDateTrans (ItemId, PostedQty, ReceivedQty, DeductedQty, PickedQty, RegisteredQty, PostedValue, #InventDimFields, ParmId, TransType) select ItemId, sum(PostedQty), sum(Received), sum(Deducted), sum(Picked), sum(Registered), sum(PostedValue) from inventSum group by ItemId where inventSum.Closed == NoYes::Yes join #InventDimFields, parmId /*scalar*/, inventSumDateType /*scalar*/ from inventDim group by #InventDimFields where inventDim.InventDimId == inventSum.InventDimId exists join inventTrans where inventTrans.ItemId == inventSum.ItemId && inventTrans.InventDimId == inventSum.InventDimId && inventTrans.DateStatus >= perDate; Насколько я помню используется только в одном отчете по остаткам. |
|