Message d’erreur « la table tampon de ligne facture acompte est vide » lorsque vous essayez de modifier la valeur dans le champ « % acompte » sur une commande vente dans la version européenne Europe de l’est de Microsoft Dynamics NAV 2009


Cet article s’applique à Microsoft Dynamics NAV pour le paramètres régionaux de langue Europe orientale (EE).

Symptômes


Envisagez le scénario suivant dans la version européenne Europe de l’est de Microsoft Dynamics NAV 2009 Service Pack 1 (SP1) et de Microsoft Dynamics NAV 2009 R2 :
  • Vous avez une commande qui utilise un acompte.
  • Vous créez une lettre de l’avance. Ensuite, vous validez et la lettre de l’avance de la facture.
  • Vous ouvrez à nouveau la commande et essayez ensuite de modifier la valeur dans le champ % acompte de l’en-tête.
Dans ce cas de figure, le message d’erreur suivant s’affiche :
La table de tampon de ligne facture acompte est vide.

Ce problème se produit après avoir appliqué les correctifs dans les Kbits/s suivantes : KB2543219, KB2546451, KB2546490 et KB2546498.
Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
2543219 vous ne peut pas traiter les acomptes trop-perçus comme prévu dans la version européenne Europe de l’est de Microsoft Dynamics NAV 2009 R2
Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
2546451 « il n’y a aucun client. Message d’erreur écriture dans le filtre » lorsque vous essayez de valider la quantité restante de la commande client dans la version européenne Europe de l’est de Microsoft Dynamics NAV 2009
Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
2546490 « Cust. Message d’erreur n° écriture entrée « [nombre] » existe déjà » lorsque vous essayez de valider une commande client qui utilise un acompte de la lettre de l’avance dans la version européenne Europe de l’est de Microsoft Dynamics NAV 2009
Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
2546498 l’acompte validé reste ouverte après la validation de la facture d’achat final dans la version européenne Europe de l’est de Microsoft Dynamics NAV 2009

Résolution


Informations sur le correctif

Un correctif pris en charge est désormais disponible auprès de Microsoft. Toutefois, il est conçu uniquement pour corriger le problème décrit dans cet article. Il s’applique uniquement aux systèmes rencontrant ce problème spécifique. Ce correctif peut subir des tests supplémentaires. Par conséquent, si vous n’êtes pas sérieusement concerné par ce problème, nous vous recommandons d’attendre le prochain service pack Microsoft Dynamics NAV 2009 ou la prochaine version de Microsoft Dynamics NAV qui comprendra ce correctif.

Remarque Dans certains cas, les frais généralement encourus pour la prise en charge des appels peuvent être annulés si un technicien du Support technique pour Microsoft Dynamics et les produits associés détermine qu’une mise à jour spécifique peut résoudre votre problème. Les coûts habituels du support technique s’appliqueront aux autres questions et problèmes qui ne relèvent pas de la mise à jour spécifique en question.



Informations sur l’installation

Microsoft fournit des exemples de programmation à titre d'illustration uniquement, sans garantie expresse ou implicite. Ceci inclut, mais n'est pas limité à, les garanties implicites de qualité marchande ou d'adéquation à un usage particulier. Cet article suppose que vous êtes familiarisé avec le langage de programmation présenté et les outils utilisés pour créer et déboguer des procédures. Les ingénieurs du support technique Microsoft peuvent vous expliquer les fonctionnalités d'une procédure particulière, mais ils ne modifieront pas ces exemples pour fournir des fonctionnalités supplémentaires ou créer des procédures répondant à vos besoins spécifiques.

Remarque Avant d’installer ce correctif, vérifiez que tous les utilisateurs du client Microsoft Navision sont enregistrés sur le système. Cela inclut les utilisateurs du client Microsoft Navision Application Services (NAS). Vous devez être le seul utilisateur client connecté lors de l’implémentation de ce correctif.

Pour appliquer ce correctif, vous devez posséder une licence développeur.

Il est recommandé que le compte d’utilisateur dans la fenêtre Logins Windows ou dans la fenêtre Logins base de données est affecté à l’ID de rôle « SUPER ». Si le compte d’utilisateur ne peut pas être affecté à l’ID de rôle « SUPER », vous devez vérifier que le compte d’utilisateur dispose des autorisations suivantes :
  • L’autorisation de modification pour l’objet que vous allez modifier.
  • L’autorisation d’exécution pour l’objet ID objet système 5210 et pour l’objet ID objet système 9015 .


Remarque Vous n’êtes pas obligé de disposer des droits pour les banques de données excepté si vous devez réparer des données.

Modifications du code

Remarque Toujours tester le code des correctifs dans un environnement contrôlé, avant d'appliquer les correctifs à vos ordinateurs de production.
Pour résoudre ce problème, procédez comme suit :
  1. Modifiez le code dans la fonction UpdateVATOnLines dans le codeunit Ventes-Valider acomptes (442) comme suit :
    Code existant
    ...     ROUND(NewAmountIncludingVAT,Currency."Amount Rounding Precision");
    "Prepmt. VAT Base Amt." := NewVATBaseAmount;

    // Delete the following lines.
    IF SalesHeader."Prices Including VAT" THEN
    "Prepmt. Line Amount" := "Prepmt. Amt. Incl. VAT"
    ELSE
    "Prepmt. Line Amount" :=
    ROUND(
    "Prepmt. Amt. Incl. VAT" / (1 + "VAT %" / 100),
    Currency."Amount Rounding Precision");
    // End of the deleted lines.

    IF (VATAmountLine."Line Amount" - VATAmountLine."Invoice Discount Amount") = 0 THEN
    VATDifference := 0
    ELSE
    ...
    Code de remplacement
    ...   ROUND(NewAmountIncludingVAT,Currency."Amount Rounding Precision");
    "Prepmt. VAT Base Amt." := NewVATBaseAmount;

    IF (VATAmountLine."Line Amount" - VATAmountLine."Invoice Discount Amount") = 0 THEN
    VATDifference := 0
    ELSE
    ...
  2. Modifiez le code dans la fonction UpdateVATOnLines dans le codeunit Les acomptes achat-Post (444) comme suit :
    Code existant
    ...     ROUND(NewAmountIncludingVAT,Currency."Amount Rounding Precision");
    "Prepmt. VAT Base Amt." := NewVATBaseAmount;

    // Delete the following lines.
    IF PurchHeader."Prices Including VAT" THEN
    "Prepmt. Line Amount" := "Prepmt. Amt. Incl. VAT"
    ELSE
    "Prepmt. Line Amount" :=
    ROUND(
    "Prepmt. Amt. Incl. VAT" / (1 + "VAT %" / 100),
    Currency."Amount Rounding Precision");
    // End of the deleted lines.

    IF (VATAmountLine."Line Amount" - VATAmountLine."Invoice Discount Amount") = 0 THEN
    VATDifference := 0
    ELSE
    ...
    Code de remplacement
    ...   ROUND(NewAmountIncludingVAT,Currency."Amount Rounding Precision");
    "Prepmt. VAT Base Amt." := NewVATBaseAmount;

    IF (VATAmountLine."Line Amount" - VATAmountLine."Invoice Discount Amount") = 0 THEN
    VATDifference := 0
    ELSE
    ...
  3. Modifiez le code dans la fonction PostInvoiceCorrection dans le codeunit Ventes-Valider avance (26585) comme suit :
    Supprimer la variable globale suivante :
    • Nom : SumAmountToApply
    • Type de données : décimal

    Ajoutez la variable globale suivante :
    • Nom : TempLineRelation
    • Enregistrement de DataType:TEMPORARY (26592)
    :
    Code existant
    ... GLSetup.GET;
    SalesSetup.GET;
    LinkedAdvanceEntry.DELETEALL;

    SalesLine.RESET;
    SalesLine.SETRANGE("Document Type",SalesHeader."Document Type");
    ...
    Code de remplacement
    ...  GLSetup.GET;
    SalesSetup.GET;
    LinkedAdvanceEntry.DELETEALL;

    // Add the following line.
    TempLineRelation.DELETEALL;

    SalesLine.RESET;
    SalesLine.SETRANGE("Document Type",SalesHeader."Document Type");
    ...
  4. Modifiez le code dans la fonction PostInvLineCorrection dans le codeunit Ventes-Valider avance (26585) comme suit :
    Code existant
    ... LineRelation."Deducted Amount" := LineRelation."Deducted Amount" + AmountToDeduct;
    LineRelation.MODIFY;

    // Delete the following line.
    CalcLinkedPmtAmountToApply(LetterLine,AmountToDeduct,LinkedAdvanceEntry);
    IF LetterLine."VAT Amount" <> 0 THEN // NO VAT handling
    PostVATCorrection(
    LetterLine,SalesInvHeader,AmountToDeduct,DocNoForVATCorr,VATAmount,GenJnlPostLine,TempJnlLineDim);
    ...
    Code de remplacement
    ... LineRelation."Deducted Amount" := LineRelation."Deducted Amount" + AmountToDeduct;
    LineRelation.MODIFY;

    // Add the following lines.
    CalcLinkedPmtAmountToApply(
    LetterLine,
    AmountToDeduct,
    LinkedAdvanceEntry,
    RetrieveSumAmountToApply(LineRelation,AmountToDeduct));
    //End of the added lines.

    IF LetterLine."VAT Amount" <> 0 THEN // NO VAT handling
    PostVATCorrection(
    LetterLine,SalesInvHeader,AmountToDeduct,DocNoForVATCorr,VATAmount,GenJnlPostLine,TempJnlLineDim);
    ...
  5. Modifiez le code dans la fonction CalcLinkedPmtAmountToApply dans le codeunit Ventes-Valider avance (26585) comme suit :
    Ajoutez le paramètre suivant :
    • Nom : SumAmountToApply
    • Type de données : décimal

    Code existant
    ... // Delete the following line .      
    SumAmountToApply := SumAmountToApply + TotalAmountToApply;

    IF TotalAmountToApply = 0 THEN
    EXIT;
    SetCurrencyPrecision(LetterLine."Currency Code");
    ...
    Code de remplacement
    ... IF TotalAmountToApply = 0 THEN
    EXIT;
    SetCurrencyPrecision(LetterLine."Currency Code");
    ...
  6. Modifiez le code dans la fonction UpdateOrderLine dans le codeunit Ventes-Valider avance (26585) comme suit :
    Code existant 1
    ...   LineRelation.SETRANGE(Type,LineRelation.Type::Sale);
    LineRelation.SETRANGE("Order No.",SalesLine."Document No.");
    LineRelation.SETRANGE("Order Line No.",SalesLine."Line No.");
    // Delete the following line
    LineRelation.CALCSUMS("Invoiced Amount","Deducted Amount");

    SalesLine."Prepmt. Amount Inv. Incl. VAT" := LineRelation."Invoiced Amount";
    IF PricesInclVAT THEN BEGIN
    ...
    Code de substitution 1
    ... LineRelation.SETRANGE(Type,LineRelation.Type::Sale);
    LineRelation.SETRANGE("Order No.",SalesLine."Document No.");
    LineRelation.SETRANGE("Order Line No.",SalesLine."Line No.");
    // Add the following line
    LineRelation.CALCSUMS("Invoiced Amount","Deducted Amount",Amount,"Requested Amount");

    SalesLine."Prepmt. Amount Inv. Incl. VAT" := LineRelation."Invoiced Amount";
    IF PricesInclVAT THEN BEGIN
    ...
    Code existant 2
    ...        SalesLine."Prepayment VAT %" / (100 + SalesLine."Prepayment VAT %"),
    Currency."Amount Rounding Precision");
    END ELSE BEGIN
    // Delete the following lines.
    SalesLine."Prepmt. Amt. Inv." :=
    ROUND(LineRelation."Invoiced Amount" / (1 + SalesLine."Prepayment VAT %" / 100),
    Currency."Amount Rounding Precision");
    // End of the deleted lines.
    SalesLine."Prepmt. VAT Amount Inv." :=
    SalesLine."Prepmt. Amount Inv. Incl. VAT" - SalesLine."Prepmt. Amt. Inv.";
    END;
    ...
    Code de substitution 2
    ...        SalesLine."Prepayment VAT %" / (100 + SalesLine."Prepayment VAT %"),
    Currency."Amount Rounding Precision");
    END ELSE BEGIN
    // Add the following lines.
    IF LineRelation."Invoiced Amount" = LineRelation.Amount THEN
    SalesLine."Prepmt. Amt. Inv." := LineRelation."Requested Amount"
    ELSE
    SalesLine."Prepmt. Amt. Inv." :=
    ROUND(LineRelation."Invoiced Amount" / (1 + SalesLine."Prepayment VAT %" / 100),
    Currency."Amount Rounding Precision");
    //End of the added lines.
    SalesLine."Prepmt. VAT Amount Inv." :=
    SalesLine."Prepmt. Amount Inv. Incl. VAT" - SalesLine."Prepmt. Amt. Inv.";
    END;
    ...
  7. Modifiez le code dans la fonction UpdateLineRelations dans le codeunit Ventes-Valider avance (26585) comme suit :
    Code existant
    ...   LineRelation.SETRANGE("Letter No.",LetterLine."Letter No.");
    LineRelation.SETRANGE("Letter Line No.",LetterLine."Line No.");
    LineRelation.CALCSUMS("Invoiced Amount","Deducted Amount");
    ...
    Code de remplacement
    ...// Add the following line
    LineRelation.SETRANGE(Type,LineRelation.Type::Sale);

    LineRelation.SETRANGE("Letter No.",LetterLine."Letter No.");
    LineRelation.SETRANGE("Letter Line No.",LetterLine."Line No.");
    LineRelation.CALCSUMS("Invoiced Amount","Deducted Amount");
    ...
  8. Créez la procédure RetrieveSumAmountToApply dans le codeunit Ventes-Valider avance (26585) comme suit :
    LOCAL PROCEDURE RetrieveSumAmountToApply@1470050(LineRelation@1470000 : Record 26592;AmountToDeduct@1470001 : Decimal) : Decimal;  BEGIN
    WITH TempLineRelation DO BEGIN
    RESET;
    SETRANGE("Order No.",LineRelation."Order No.");
    SETRANGE("Letter No.",LineRelation."Letter No.");
    IF NOT FINDFIRST THEN BEGIN
    INIT;
    "Order No." := LineRelation."Order No.";
    "Letter No." := LineRelation."Letter No.";
    Amount := AmountToDeduct;
    INSERT;
    END ELSE BEGIN
    Amount := Amount + AmountToDeduct;
    MODIFY;
    END;
    EXIT(Amount);
    END;
    END;

  9. Modifiez le code dans la fonction PostInvoiceCorrection dans le codeunit Post-achat avance (26586) comme suit :
    Supprimer la variable globale suivante :
    • Nom : SumAmountToApply
    • Type de données : décimal

    Ajoutez la variable globale suivante :
    • Nom : TempLineRelation
    • Type de données : Enregistrement temporaire (26592)

    Code existant
    ... GLSetup.GET;
    PurchSetup.GET;
    LinkedAdvanceEntry.DELETEALL;

    PurchLine.RESET;
    PurchLine.SETRANGE("Document Type",PurchHeader."Document Type");
    ...
    Code de remplacement
    ...  GLSetup.GET;
    PurchSetup.GET;
    LinkedAdvanceEntry.DELETEALL;
    // Add the following line
    TempLineRelation.DELETEALL;

    PurchLine.RESET;
    PurchLine.SETRANGE("Document Type",PurchHeader."Document Type");
    ...
  10. Modifiez le code dans la fonction PostInvLineCorrection dans le codeunit Post-achat avance (26586) comme suit :
    Code existant
    ...   LineRelation."Deducted Amount" := LineRelation."Deducted Amount" + AmountToDeduct;
    LineRelation.MODIFY;
    // Delete the following line.
    CalcLinkedPmtAmountToApply(LetterLine,AmountToDeduct,LinkedAdvanceEntry);
    IF LetterLine."VAT Amount" <> 0 THEN // NO VAT handling
    PostVATCorrection(
    LetterLine,PurchInvHeader,AmountToDeduct,DocNoForVATCorr,VATAmount,GenJnlPostLine,TempJnlLineDim);
    ...
    Code de remplacement
    ... LineRelation."Deducted Amount" := LineRelation."Deducted Amount" + AmountToDeduct;
    LineRelation.MODIFY;
    // Add the following lines.
    CalcLinkedPmtAmountToApply(
    LetterLine,
    AmountToDeduct,
    LinkedAdvanceEntry,
    RetrieveSumAmountToApply(LineRelation,AmountToDeduct));
    //End of the added lines.
    IF LetterLine."VAT Amount" <> 0 THEN // NO VAT handling
    PostVATCorrection(
    LetterLine,PurchInvHeader,AmountToDeduct,DocNoForVATCorr,VATAmount,GenJnlPostLine,TempJnlLineDim);
    ...
  11. Modifiez le code dans la fonction CalcLinkedPmtAmountToApply dans le codeunit Post-achat avance (26586) comme suit :
    Ajoutez le paramètre suivant à la fonction :
    • Nom : SumAmountToApply
    • Type de données : décimal

    Code existant
    ...   IF TotalAmountToApply = 0 THEN
    EXIT;
    // Delete the following lines.
    SumAmountToApply := SumAmountToApply + TotalAmountToApply;
    // End of the deleted lines.

    SetCurrencyPrecision(LetterLine."Currency Code");
    Link.SETRANGE("Entry Type",Link."Entry Type"::"Link To Letter");
    ...
    Code de remplacement
    ... IF TotalAmountToApply = 0 THEN
    EXIT;

    SetCurrencyPrecision(LetterLine."Currency Code");
    Link.SETRANGE("Entry Type",Link."Entry Type"::"Link To Letter");
    ...
  12. Modifiez le code dans la fonction UpdateOrderLine dans le codeunit Post-achat avance (26586) comme suit :
    Code existant 1
    ...   LineRelation.SETRANGE(Type,LineRelation.Type::Purchase);
    LineRelation.SETRANGE("Order No.",PurchLine."Document No.");
    LineRelation.SETRANGE("Order Line No.",PurchLine."Line No.");
    // Delete the following line.
    LineRelation.CALCSUMS("Invoiced Amount","Deducted Amount");

    PurchLine."Prepmt. Amount Inv. Incl. VAT" := LineRelation."Invoiced Amount";
    IF PricesInclVAT THEN BEGIN
    ...
    Code de substitution 1
    ...  LineRelation.SETRANGE(Type,LineRelation.Type::Purchase);
    LineRelation.SETRANGE("Order No.",PurchLine."Document No.");
    LineRelation.SETRANGE("Order Line No.",PurchLine."Line No.");
    // Add the following line.
    LineRelation.CALCSUMS("Invoiced Amount","Deducted Amount",Amount,"Requested Amount");

    PurchLine."Prepmt. Amount Inv. Incl. VAT" := LineRelation."Invoiced Amount";
    IF PricesInclVAT THEN BEGIN
    ...

    Code existant 2
    ...         PurchLine."Prepayment VAT %" / (100 + PurchLine."Prepayment VAT %"),
    Currency."Amount Rounding Precision");
    END ELSE BEGIN
    // Delete the following lines.
    PurchLine."Prepmt. Amt. Inv." :=
    ROUND(LineRelation."Invoiced Amount" / (1 + PurchLine."Prepayment VAT %" / 100),
    Currency."Amount Rounding Precision");
    // End of the deleted lines.
    PurchLine."Prepmt. VAT Amount Inv." :=
    PurchLine."Prepmt. Amount Inv. Incl. VAT" - PurchLine."Prepmt. Amt. Inv.";
    END;
    ...
    Code de substitution 2
    ...       PurchLine."Prepayment VAT %" / (100 + PurchLine."Prepayment VAT %"),
    Currency."Amount Rounding Precision");
    END ELSE BEGIN
    // Add the following lines.
    IF LineRelation."Invoiced Amount" = LineRelation.Amount THEN
    PurchLine."Prepmt. Amt. Inv." := LineRelation."Requested Amount"
    ELSE
    PurchLine."Prepmt. Amt. Inv." :=
    ROUND(LineRelation."Invoiced Amount" / (1 + PurchLine."Prepayment VAT %" / 100),
    Currency."Amount Rounding Precision");
    // End of the added lines.
    PurchLine."Prepmt. VAT Amount Inv." :=
    PurchLine."Prepmt. Amount Inv. Incl. VAT" - PurchLine."Prepmt. Amt. Inv.";
    END;
    ...
  13. Modifiez le code dans la fonction UpdateLineRelations dans le codeunit Post-achat avance (26586) comme suit :
    Code existant
    ...  LineRelation.SETRANGE("Letter No.",LetterLine."Letter No.");
    LineRelation.SETRANGE("Letter Line No.",LetterLine."Line No.");
    LineRelation.CALCSUMS("Invoiced Amount","Deducted Amount");
    ...
    Code de remplacement
    ...// Add the following line.
    LineRelation.SETRANGE(Type,LineRelation.Type::Purchase);
    // End of the added line.

    LineRelation.SETRANGE("Letter No.",LetterLine."Letter No.");
    LineRelation.SETRANGE("Letter Line No.",LetterLine."Line No.");
    LineRelation.CALCSUMS("Invoiced Amount","Deducted Amount");
    ...
  14. Créez la procédure RetrieveSumAmountToApply dans le codeunit Post-achat avance (26586) comme suit :
     LOCAL PROCEDURE RetrieveSumAmountToApply@1470048(LineRelation@1470000 : Record 26592;AmountToDeduct@1470001 : Decimal) : Decimal;  BEGIN
    WITH TempLineRelation DO BEGIN
    RESET;
    SETRANGE("Order No.",LineRelation."Order No.");
    SETRANGE("Letter No.",LineRelation."Letter No.");
    IF NOT FINDFIRST THEN BEGIN
    INIT;
    "Order No." := LineRelation."Order No.";
    "Letter No." := LineRelation."Letter No.";
    Amount := AmountToDeduct;
    INSERT;
    END ELSE BEGIN
    Amount := Amount + AmountToDeduct;
    MODIFY;
    END;
    EXIT(Amount);
    END;
    END;

Conditions préalables

Vous devez disposer d’un des produits suivants est installé pour appliquer ce correctif :
  • La version européenne Europe de l’est de Microsoft Dynamics NAV 2009 Service Pack 1
  • La version européenne Europe de l’est de Microsoft Dynamics NAV 2009 R2
Remarque  Pour appliquer ce correctif, vous devez appliquer les correctifs dans la base de connaissances suivant : KB2543219, KB2546451, KB2546490 et KB2546498.

Informations sur la suppression

Vous ne pouvez pas supprimer ce correctif.

État


Microsoft a confirmé l'existence de ce problème dans les produits Microsoft répertoriés dans la section « S'applique à ».

Références


VSTF DynamicsNAV SE : 261669
Remarque Il s’agit d’un article de « Dernière minute » créé directement à partir de l’organisation de support technique de Microsoft. Les informations contenues dans ce document sont fournies en l'état, en réponse à des problèmes nouveaux. En raison de la rapidité de leur mise à disposition, les documents peuvent contenir des erreurs typographiques et peuvent être révisés à tout moment sans préavis. Consultez les Conditions d’utilisation pour d’autres considérations.