28.02.2007, 11:47 | #1 |
Участник
|
Report 798 Date Compress Item Ledger Компрессия Книги Товаров NAVW13.60
Необходимо было осуществить модификацию данного отчёта с целью учёта им наличия самостоятельно добавленных полей в таблицы 32 и 5802. В ходе тестирования выявил, что сжатия не происходит в случае, если отмечено сохранение поля Источник Но. (Source No.). В ходе выяснения причин натолкнулся на следующий фрагмент кода в функции CompressValueEntries <div class='CALtop'>C/AL</div><div class='CAL'> IF NOT ValueEntry."Expected Cost" THEN BEGIN IF ValueEntry."Gen. Bus. Posting Group" <> "Gen. Bus. Posting Group" THEN EXIT(FALSE); IF ValueEntry."Gen. Prod. Posting Group" <> "Gen. Prod. Posting Group" THEN EXIT(FALSE); IF ValueEntry."Inventory Posting Group" <> "Inventory Posting Group" THEN EXIT(FALSE); IF RetainNo(FIELDNO("Document No.")) AND (ValueEntry."Document No." <> "Document No.") THEN EXIT(FALSE); IF RetainNo(FIELDNO("Source Type")) AND (ValueEntry."Source Type" <> "Source Type") THEN EXIT(FALSE); IF RetainNo(FIELDNO("Source No.")) AND (ValueEntry."Source No." = "Source No.") THEN EXIT(FALSE); IF RetainNo(FIELDNO("Source Posting Group")) AND (ValueEntry."Source Posting Group" = "Source Posting Group") THEN EXIT(FALSE); IF RetainNo(FIELDNO("Salespers./Purch. Code")) AND (ValueEntry."Salespers./Purch. Code" = "Salespers./Purch. Code") THEN EXIT(FALSE); IF ValueEntry."Entry Type" = "Entry Type"::Rounding THEN EXIT(TRUE);</div> Т.е. если установлено сохренение поля Document No., проверяется на неравенство, а для Source No. на равенство. Как я понимаю, всвязи с тем, что часто сравнивается значинеия одних и тех же записей таблицы 5802 (об этом чуть ниже), происходит выход из функции со значением FALSE и в результате этого компрессия запущуная на тестовой базе удалила 280035 записей и создало ровно столько же. Если проследить код назад, то видно, что поля ValueEntry сравниваются с полями ValueEntry2. В функцию передаётся параметром ItemLedgEntryNo номер операции по таблице 32 и таким кодом устанавливается фильтр на ValueEntry <div class='CALtop'>C/AL</div><div class='CAL'> ValueEntry.RESET; ValueEntry.SETCURRENTKEY("Item Ledger Entry No."); ValueEntry.SETRANGE("Item Ledger Entry No.",ItemLedgEntryNo); ValueEntry.FIND('-'); </div> Сама функция вызывается в триггере OnAfterGetRecord() единственного датаитема отчёта по 32 таблице таким кодом <div class='CALtop'>C/AL</div><div class='CAL'>CompressValueEntries("Entry No.",TRUE)</div>, а переменная ValueEntry2 есть гобальная и задаётся чуть выше вызова функции CompressValueEntries кодом <div class='CALtop'>C/AL</div><div class='CAL'> ValueEntry2.RESET; ValueEntry2.SETCURRENTKEY("Item Ledger Entry No."); ValueEntry2.SETRANGE("Item Ledger Entry No.",ItemLedgEntry2."Entry No."); ValueEntry2.FIND('-'); </div>, где ещё чуть выше <div class='CALtop'>C/AL</div><div class='CAL'> ItemLedgEntry2 := "Item Ledger Entry"; </div> ("Item Ledger Entry" есть датаитем). После того как я в функции CompressValueEntries заменил сомнительные = на <> стало сжиматься при сохранении номера источника. Это глюк стандартного функционала или я врубился лишь поверхностно и не понимаю сути той задумки, которую они хотели осуществить? |
|
28.02.2007, 13:07 | #2 |
Участник
|
В NAV4.0SP1 стоит знак "<>".
|
|
28.02.2007, 13:42 | #3 |
Участник
|
спсб значит похоже что это глюк
|
|