Il report Suggerisci pagamento fornitore DTA (3010546) e il report Raccolta suggerimenti LSV (3010831) suggeriscono righe errate nella versione svizzera di Microsoft Dynamics NAV

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

Questo articolo si applica a Microsoft Dynamics NAV per i paesi e le impostazioni locali della lingua seguenti.

  • Francese (Svizzera) (fr-ch)
  • Tedesco (Svizzera) (gr-ch)
  • Italiano (Svizzera) (it-ch)

Sintomi

Si supponga di registrare una fattura di acquisto o una fattura di vendita nella versione svizzera di Microsoft Dynamics NAV. Quando si esegue il report Suggerisci pagamento fornitore DTA (3010546) nel giornale di registrazione pagamenti o nel report Suggerisci raccolta INV.LSV (3010831) nell'elenco giornale di registrazione INV.LSV utilizzando una data di registrazione anteriore alla data di registrazione della fattura, vengono suggerite righe non corrette. Di conseguenza, la data di registrazione non è corretta nei movimenti contabili clienti dettagliati o nei movimenti di registrazione fornitore dettagliati dopo la registrazione delle righe. A volte non è nemmeno possibile pubblicare le righe e ricevere un messaggio di errore coerente.
Questo problema si verifica nei prodotti seguenti:

  • Versione svizzera di Microsoft Dynamics NAV 2009 Service Pack 1 (SP1)
  • La versione svizzera di Microsoft Dynamics NAV 2009
  • La versione svizzera di Microsoft Dynamics NAV 5.0 Service Pack 1 (SP1)
  • La versione svizzera di Microsoft Dynamics NAV 5.0

      

Causa

Questo problema si verifica perché manca un assegno nel report Suggerisci pagamento fornitore DTA (3010546) e nel report Suggerisci raccolta inV.LSV (3010831). La verifica viene introdotta per evitare di generare una riga di pagamento con una data di registrazione precedente rispetto alla data di registrazione della fattura.

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 si è gravemente colpiti da questo problema, è consigliabile attendere il prossimo Service Pack di Microsoft Dynamics NAV 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 una nuova variabile globale nel report Suggerisci pagamento fornitore DTA (3010546) e quindi specificare la variabile nel modo seguente:

    • Nome: VendorLedgEntryTemp@1150058
    • DataType: record
    • Sottotipo: Movimento Contabile Fornitore
    • Temporaneo:
  2. Aggiungere una nuova costante di testo nel report Suggerisci pagamento fornitore DTA (3010546) e quindi specificare la costante nel modo seguente:

    • Nome: Text50000@1150064
    • Valore costante: ENU=Ci sono uno o più movimenti per i quali non sono stati effettuati suggerimenti di pagamento perché le date di registrazione dei movimenti sono successive alla data di registrazione nella finestra di richiesta fornitore suggerisci fornitore Pagamenti batch. Si vogliono visualizzare le voci?
  3. Aggiungere il codice seguente nel trigger OnPreReport nel report Suggerisci pagamento fornitore DTA (3010546):

    VendorLedgEntryTemp.DELETEALL;
    
  4. Aggiungere il codice seguente nel trigger OnPostReport nel report Suggerisci pagamento fornitore DTA (3010546):

    COMMIT;
    IF NOT VendorLedgEntryTemp.ISEMPTY THEN
      IF CONFIRM(Text50000) THEN
        FORM.RUNMODAL(0,VendorLedgEntryTemp);
    
  5. Modificare il codice nel trigger Fornitore - OnPostDataItem nel report Suggerisci pagamento fornitore DTA (3010546) come segue:
    Codice esistente

    d.CLOSE;
    IF NoOfLinesInserted > 0 THEN BEGIN
      WriteBalAccountLine(ToGlLine);
      MESSAGE(Text011,NoOfLinesInserted,GlSetup."LCY Code",TotalAmtLCY);
      IF NoOfVendorsWithCM > 0 THEN
        MESSAGE(Text013 + Text014 + Text017,NoOfVendorsWithCM,VendWithCmTxt)
    END ELSE
      MESSAGE(Text018,FromDueDate,ToDueDate);
    

    Codice sostitutivo

    d.CLOSE;
    IF VendorLedgEntryTemp.ISEMPTY THEN BEGIN
      IF NoOfLinesInserted > 0 THEN BEGIN
        WriteBalAccountLine(ToGlLine);
        MESSAGE(Text011,NoOfLinesInserted,GlSetup."LCY Code",TotalAmtLCY);
        IF NoOfVendorsWithCM > 0 THEN
          MESSAGE(Text013 + Text014 + Text017,NoOfVendorsWithCM,VendWithCmTxt)
      END ELSE
        MESSAGE(Text018,FromDueDate,ToDueDate);
    END;
    
  6. Modificare il codice nella funzione WritePmtSuggestLines nel report Suggerisci pagamento fornitore DTA (3010546) come segue:
    Codice esistente 1

    // CH2316.begin
     VendorLedgerEntryNo := VendEntry."Entry No.";
    // CH2316.end
    WITH ToGlLine DO BEGIN
      INIT;
    ...
    

    Codice di sostituzione 1

    IF VendEntry."Posting Date" <= PostDate THEN BEGIN // CH0001
      // CH2316.begin
      VendorLedgerEntryNo := VendEntry."Entry No.";
      // CH2316.end
      WITH ToGlLine DO BEGIN
        INIT;
    ...
    

    Codice esistente 2

    ...
    VendorLedgerEntry2.GET(VendorLedgerEntryNo);
    VendorLedgerEntry2."On Hold" := 'DTA';
    VendorLedgerEntry2."Accepted Payment Tolerance" := 0;
    VendorLedgerEntry2.MODIFY;
    // CH2316.END
    

    Codice di sostituzione 2

    ...
      VendorLedgerEntry2.GET(VendorLedgerEntryNo);
      VendorLedgerEntry2."On Hold" := 'DTA';
      VendorLedgerEntry2."Accepted Payment Tolerance" := 0;
      VendorLedgerEntry2.MODIFY;
    // CH2316.END
    END ELSE BEGIN
      VendorLedgEntryTemp := VendEntry;
      VendorLedgEntryTemp.INSERT;
    END;
    
  7. Aggiungere una nuova variabile globale nel report Raccolta suggerimenti LSV (3010831) e quindi specificare la variabile nel modo seguente:

    • Nome: TempCustLedgEntry@1150042
    • DataType: record
    • Sottotipo: Movimento contabile cliente
    • Temporaneo:
  8. Aggiungere una nuova costante di testo nel report Raccolta suggerimenti LSV (3010831) e quindi specificare la costante nel modo seguente:

    • Nome: Text50000@1150064
    • Valore costante: ENU=Ci sono una o più voci per le quali non sono stati fatti suggerimenti per la raccolta perché le date di registrazione dei movimenti sono successive alla data di raccolta nella finestra di richiesta di processo batch Suggerimenti raccolta LSV. Si vogliono visualizzare le voci?
  9. Modificare il codice del trigger OnPreReport nel report Raccolta suggerimenti LSV (3010831) come segue:
    Codice esistente

    IF LsvJournal."LSV Bank Code" = '' THEN
      ERROR(Text020);
    

    Codice sostitutivo

    IF LsvJournal."LSV Bank Code" = '' THEN
      ERROR(Text020);
    TempCustLedgEntry.DELETEALL;
    
  10. Aggiungere il codice seguente nel trigger OnPostReport nel report Raccolta suggerimenti LSV (3010831):

    COMMIT;
    IF NOT TempCustLedgEntry.ISEMPTY THEN
      IF CONFIRM(Text50000) THEN
        FORM.RUNMODAL(0,TempCustLedgEntry);
    
  11. Modificare il codice nel trigger Customer - OnPostDataItem nel report Di suggerisci raccolta LSV (3010831) come segue:
    Codice esistente

    d.CLOSE;
    IF NoOfLinesInserted > 0 THEN BEGIN
      MESSAGE(Text007,NoOfLinesInserted,LsvSetup."LSV Currency Code",TotalAmt);
      IF LsvJournal."LSV Journal Description" = '' THEN BEGIN
        LsvJournal."LSV Journal Description" :=
          FORMAT(STRSUBSTNO(Text021,LsvSetup."LSV Currency Code",FromDueDate,ToDueDate,Customer.GETFILTERS)
            ,-MAXSTRLEN(LsvJournal."LSV Journal Description"));
      END;
      LsvJournal."Credit Date" := CollectionDate;
      LsvJournal.MODIFY;
      // CH2813.BEGIN
      IF NoOfCustWithCreditMemo > 0 THEN
        IF NOT CONFIRM(Text009 + Text010 + Text012 + Text013,TRUE,NoOfCustWithCreditMemo,CustCreditMemoTxt) THEN
          ERROR(Text014);
      // CH2813.END
    END ELSE
      MESSAGE(Text015,FromDueDate,ToDueDate);
    

    Codice sostitutivo

    d.CLOSE;
    IF TempCustLedgEntry.ISEMPTY THEN BEGIN // CH0001
      IF NoOfLinesInserted > 0 THEN BEGIN
        MESSAGE(Text007,NoOfLinesInserted,LsvSetup."LSV Currency Code",TotalAmt);
        IF LsvJournal."LSV Journal Description" = '' THEN BEGIN
          LsvJournal."LSV Journal Description" :=
            FORMAT(STRSUBSTNO(Text021,LsvSetup."LSV Currency Code",FromDueDate,ToDueDate,Customer.GETFILTERS)
              ,-MAXSTRLEN(LsvJournal."LSV Journal Description"));
        END;
        LsvJournal."Credit Date" := CollectionDate;
        LsvJournal.MODIFY;
        // CH2813.BEGIN
        IF NoOfCustWithCreditMemo > 0 THEN
          IF NOT CONFIRM(Text009 + Text010 + Text012 + Text013,TRUE,NoOfCustWithCreditMemo,CustCreditMemoTxt) THEN
            ERROR(Text014);
        // CH2813.END
      END ELSE
        MESSAGE(Text015,FromDueDate,ToDueDate);
    END;
    
  12. Modificare il codice nella funzione WritePmtSuggestLines nel report Raccolta suggerimenti LSV (3010831) nel modo seguente:
    Codice esistente 1

    // Collection amt: Cust. Entry amount - Cash disc. possible
    WITH ToLSVJourLine DO BEGIN
      // Ensure, that the Entry is only once in the LSV Journal Line
      LSVJourLineCheck.SETCURRENTKEY("Applies-to Doc. No.");
      LSVJourLineCheck.SETRANGE("Applies-to Doc. No.",ActCustLedgEntry."Document No.");
    ...
    

    Codice di sostituzione 1

    // Collection amt: Cust. Entry amount - Cash disc. possible
    WITH ToLSVJourLine DO BEGIN
      IF CustLedgEntry."Posting Date" <= CollectionDate THEN BEGIN
        // Ensure, that the Entry is only once in the LSV Journal Line
        LSVJourLineCheck.SETCURRENTKEY("Applies-to Doc. No.");
        LSVJourLineCheck.SETRANGE("Applies-to Doc. No.",ActCustLedgEntry."Document No.");
    ...
    

    Codice esistente 2

    ...
      TotalAmt := TotalAmt + "Collection Amount";
      d.UPDATE(3,TotalAmt);
      // CH2813.BEGIN
      EntriesPerCust := EntriesPerCust + 1;
      // CH2813.END
    END;
    

    Codice di sostituzione 2

    ...
        TotalAmt := TotalAmt + "Collection Amount";
        d.UPDATE(3,TotalAmt);
        // CH2813.BEGIN
        EntriesPerCust := EntriesPerCust + 1;
        // CH2813.END
    
    //Add the follong lines.
      END ELSE BEGIN
        TempCustLedgEntry := CustLedgEntry;
        TempCustLedgEntry.INSERT;
      END;
    //End of the lines.
    
    END;
    

            
          

Prerequisiti

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

  • Versione svizzera di Microsoft Dynamics NAV 2009 Service Pack 1 (SP1)
  • La versione svizzera di Microsoft Dynamics NAV 2009
  • La versione svizzera di Microsoft Dynamics NAV 5.0 Service Pack 1 (SP1)
  • La versione svizzera di Microsoft Dynamics NAV 5.0

              

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".

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 .