Il report Valutazione inventario indica che una quantità dell'articolo è zero, mentre l'importo del valore dell'articolo non è zero in modo errato in Microsoft Dynamics NAV

Si applica a
Dynamics NAV 2009 Dynamics NAV 2009 Service Pack 1 Microsoft Dynamics NAV 5.0 Service Pack 1

Questo articolo si applica a Microsoft Dynamics NAV per tutte le impostazioni locali della lingua.

Sintomi

Quando si esegue il report Valutazione dell'inventario in Microsoft Dynamics NAV, si nota che una quantità dell'articolo è zero mentre l'importo del valore dell'articolo non è zero nel risultato. L'importo dell'articolo dovrebbe essere uguale a zero. Questo problema si verifica nei prodotti seguenti:

  • Microsoft Dynamics NAV 2009 Service Pack 1 (SP1)
  • Microsoft Dynamics NAV 2009
  • Microsoft Dynamics NAV 5.0 Service Pack 1

Risoluzione

Informazioni sull'aggiornamento rapido

È ora disponibile un hotfix supportato da Microsoft. Tuttavia, è destinato solo a correggere il problema descritto in questo articolo. Applicala solo ai sistemi che stanno riscontrando questo problema specifico. Questo hotfix potrebbe ricevere ulteriori test. Pertanto, se non sei gravemente interessato da questo problema, ti consigliamo di attendere il prossimo Service Pack di Microsoft Dynamics NAV 2009 o la prossima versione di Microsoft Dynamics NAV che contiene questo hotfix.

Nota In casi speciali, gli addebiti normalmente sostenuti per le chiamate al supporto tecnico possono essere annullati se un professionista del supporto tecnico per Microsoft Dynamics e i prodotti correlati determinano che un aggiornamento specifico risolverà il problema. I soliti costi del supporto verranno applicati a domande e problemi di supporto aggiuntivi che non sono idonei per l'aggiornamento specifico in questione.

            
          

Informazioni sull'installazione

Microsoft fornisce esempi di programmazione a titolo puramente illustrativo, senza alcuna garanzia espressa o implicita. Ciò include, a titolo esemplificativo e non esaustivo, le garanzie implicite di commerciabilità o idoneità a uno scopo particolare. Questo articolo presuppone che si abbia familiarità con il linguaggio di programmazione oggetto della dimostrazione e con gli strumenti utilizzati per la creazione e il debug delle procedure. I tecnici del supporto Tecnico Microsoft possono spiegare le funzionalità di una particolare procedura, ma non modificarli per fornire funzionalità aggiuntive o creare procedure in base a specifici requisiti.

Nota Prima di installare questo hotfix, verificare che tutti gli utenti client di Microsoft Navision siano disconnessi dal sistema. Sono inclusi gli utenti client di Microsoft Navision Application Services (NAS). Dovresti essere l'unico utente client connesso quando implementi questo hotfix.

Per implementare questo hotfix, è necessario disporre di una licenza per sviluppatori.

È consigliabile assegnare l'ID ruolo "SUPER" all'account utente nella finestra Accessi di Windows o nella finestra Accessi database. Se all'account utente non è possibile assegnare l'ID ruolo "SUPER", è necessario verificare che l'account utente disponga delle autorizzazioni seguenti:

  • Autorizzazione modifica per l'oggetto che si desidera modificare.
  • Autorizzazione Execute per l'oggetto System Object ID 5210 e per l'oggetto System Object ID 9015.

                
Nota: non è necessario disporre dei diritti per gli archivi dati a meno che non sia necessario eseguire il ripristino dei dati.

Modifiche al codice

Nota Verifica sempre le correzioni del codice in un ambiente controllato prima di applicare le correzioni ai computer di produzione.
Per risolvere il problema, attenersi alla procedura seguente:

  1. Aggiungere le seguenti variabili locali nella funzione IsAvgCostException nella tabella (5802):

    • ItemLedgEntry@1002: Record 32
    • xItemLedgEntry@1003: Record 32
    • TempItemLedgEntry@1004: RECORD TEMPORANEO 32
  2. Modificare il codice nella funzione IsAvgCostException nella tabella (5802) nel modo seguente:
    Codice esistente

    ...
    IF ItemApplnEntry.AppliedInbndEntryExists("Item Ledger Entry No.",TRUE) THEN
      EXIT(TRUE);
    
    EXIT(FALSE);      
    ...
    

    Codice sostitutivo

    ...
      IF ItemApplnEntry.AppliedInbndEntryExists("Item Ledger Entry No.",TRUE) THEN
      EXIT(TRUE);
    
    // Add the following lines.
    IF "Item Ledger Entry Type" = "Item Ledger Entry Type"::Consumption THEN
      IF ItemApplnEntry.AppliedFromEntryExists("Item Ledger Entry No.") THEN
        REPEAT
          ItemLedgEntry.GET(ItemApplnEntry."Outbound Item Entry No.");
          IF ItemLedgEntry."Entry No." <> xItemLedgEntry."Entry No." THEN BEGIN
            xItemLedgEntry := ItemLedgEntry;
            ItemApplnEntry.GetVisitedEntries(ItemLedgEntry,TempItemLedgEntry);
            TempItemLedgEntry.SETCURRENTKEY("Item No.",Positive,"Location Code","Variant Code");
            TempItemLedgEntry.SETRANGE("Item No.","Item No.");
            TempItemLedgEntry.SETRANGE(Positive,TRUE);
            TempItemLedgEntry.SETRANGE("Location Code","Location Code");
            TempItemLedgEntry.SETRANGE("Variant Code","Variant Code");
            IF NOT TempItemLedgEntry.ISEMPTY THEN
              EXIT(TRUE);
          END;
        UNTIL ItemApplnEntry.NEXT = 0;
    // End of the added lines.
    
    EXIT(FALSE);
    ...
    
  3. Aggiungere le seguenti variabili locali nella funzione AvgValueEntriesToAdjustExist in codeunit (5895):

    • CurrIsException@1009: booleano
    • NextIsException@1010: booleano
  4. Modificare il codice nella funzione AvgValueEntriesToAdjustExist in codeunit (5895) come segue:
    Codice esistente

    ...
           IF "Valued By Average Cost" AND NOT Adjustment AND ("Valued Quantity" < 0) THEN BEGIN
            OutbndValueEntry := ValueEntry;
            OutbndValueEntry.INSERT;
            FindNextRange := FALSE;
          END; 
    
    // Delete the following lines.
          IF IsAvgCostException THEN BEGIN  
            AvgCostExceptionBuf.Number := "Entry No.";  
            AvgCostExceptionBuf.INSERT;  
          END;  
    // End of the deleted lines.
    
          IF ("Entry Type" = "Entry Type"::Revaluation) OR
    ...
    

    Codice sostitutivo

    ...
           IF "Valued By Average Cost" AND NOT Adjustment AND ("Valued Quantity" <0) THEN BEGIN
            OutbndValueEntry := ValueEntry;
            OutbndValueEntry.INSERT;
            FindNextRange := FALSE;
          END;
    
    // Add the following lines.
          IF NOT Adjustment THEN BEGIN
            CurrIsException := NextIsException;
            NextIsException := IsAvgCostException;
            IF NextIsException OR CurrIsException THEN BEGIN
              AvgCostExceptionBuf.Number := "Entry No.";
              AvgCostExceptionBuf.INSERT;
            END;
          END;
    // End of the added lines.
    
          IF ("Entry Type" = "Entry Type"::Revaluation) OR
    ...
    
  5. Modificare il codice nella codeunit di rettifica inventario (5895) come segue:
    Codice esistente

    ...
          CODE
         ...
         LOCAL PROCEDURE AvgValueEntriesToAdjustExist@79(VAR OutbndValueEntry@1003 : Record 5802;VAR ExcludedValueEntry@1000 : Record 5802;VAR AvgCostAdjmtEntryPoint@1001 : Record 5804) : Boolean;
         ...
             IF FindNextRange THEN BEGIN
               AvgCostAdjmtEntryPoint."Valuation Date" := GetNextDate(AvgCostAdjmtEntryPoint."Valuation Date");
               AvgValueEntriesToAdjustExist(OutbndValueEntry,ExcludedValueEntry,AvgCostAdjmtEntryPoint);
             END;
         ...
         LOCAL PROCEDURE IsExcludeEntryFromAvgCostCalc@36(ValueEntry@1000 : Record 5802;OutbndValueEntry@1001 : Record 5802;VAR ItemLedgEntryInChain@1003 : Record 32) : Boolean;
         ...
             IF NOT "Valued By Average Cost" THEN
               EXIT(FALSE);
             ItemLedgEntry.GET("Item Ledger Entry No.");
             IF ItemLedgEntry.Positive THEN
               EXIT(FALSE);
    
    // Delete the following line.
            EXIT(TRUE); 
    // End of the deleted line. 
    ...
    

    Codice sostitutivo

    ...
      CODE
         ...
         LOCAL PROCEDURE AvgValueEntriesToAdjustExist@79(VAR OutbndValueEntry@1003 : Record 5802;VAR ExcludedValueEntry@1000 : Record 5802;VAR AvgCostAdjmtEntryPoint@1001 : Record 5804) : Boolean;
         ...
             IF FindNextRange THEN BEGIN
               AvgCostAdjmtEntryPoint."Valuation Date" := GetNextDate(AvgCostAdjmtEntryPoint."Valuation Date");
               AvgValueEntriesToAdjustExist(OutbndValueEntry,ExcludedValueEntry,AvgCostAdjmtEntryPoint);
             END;
    
     // Add the following line.
            OutbndValueEntry.SETCURRENTKEY("Item Ledger Entry No."); 
    // End of the added line.
    
         ...
         LOCAL PROCEDURE IsExcludeEntryFromAvgCostCalc@36(ValueEntry@1000 : Record 5802;OutbndValueEntry@1001 : Record 5802;VAR ItemLedgEntryInChain@1003 : Record 32) : Boolean;
         ...
             IF NOT "Valued By Average Cost" THEN
               EXIT(FALSE);
             ItemLedgEntry.GET("Item Ledger Entry No.");
             IF ItemLedgEntry.Positive THEN
               EXIT(FALSE);
    
    // Add the following line.
            EXIT("Item Ledger Entry No." > OutbndValueEntry."Item Ledger Entry No."); 
    // End of the added line.
    ...
    

Prerequisiti

Per applicare questo hotfix, è necessario che sia installato uno dei prodotti seguenti:

  • Microsoft Dynamics NAV 2009 Service Pack 1 (SP1)
  • Microsoft Dynamics NAV 2009
  • Microsoft Dynamics NAV 5.0 Service Pack 1 (SP1)

                
              

Informazioni sulla rimozione

Non è possibile rimuovere questo hotfix.

Stato

Microsoft ha confermato che si tratta di un problema relativo ai prodotti elencati nella sezione "Si applica a".

Riferimenti

Bug VSTF: 235179

Nota Questo è un articolo "FAST PUBLISH" creato direttamente dall'organizzazione di supporto Microsoft. Le informazioni contenute nel presente documento vengono fornite così come sono in risposta ai problemi emergenti. A causa della velocità di reso disponibile, i materiali possono includere errori tipografici e possono essere modificati in qualsiasi momento senza preavviso. Per altre considerazioni, vedere Condizioni per l'utilizzo .