Vous ne pouvez traiter des trop-perçus acompte comme prévu dans la version européenne Europe de l’est de Microsoft Dynamics NAV 2009 R2


Cet article s’applique à Microsoft Dynamics NAV pour la région Europe orientale (EE).

Symptômes


Impossible de traiter le paiement anticipé trop-perçus comme prévu dans la version européenne Europe de l’est de Microsoft Dynamics NAV 2009 R2. Lorsque vous traitez une lettre trop d’avance pour un client, vous ne pouvez pas valider les restitutions comme acompte. Par conséquent, vous ne peut pas retourner de money pour le client.

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 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 le s’applique-doc No. - OnLookup déclencheur dans la table Line de Journal général (81) comme suit :
    Code existant 1
    ...IF CustLedgEntry.FIND('-') THEN;
    CustLedgEntry.SETRANGE(Positive);
    END;
    ApplyCustEntries.SetGenJnlLine(Rec,GenJnlLine.FIELDNO("Applies-to Doc. No."));
    ApplyCustEntries.SETTABLEVIEW(CustLedgEntry);
    ApplyCustEntries.SETRECORD(CustLedgEntry);
    ...
    Code de substitution 1
    ...IF CustLedgEntry.FIND('-') THEN;
    CustLedgEntry.SETRANGE(Positive);
    END;

    // Add the following lines.
    IF "Prepayment Type" = "Prepayment Type"::Advance THEN
    CustLedgEntry.SETRANGE("Prepayment Type","Prepayment Type"::Advance)
    ELSE
    CustLedgEntry.SETFILTER("Prepayment Type",'<>%1',GenJnlLine."Prepayment Type"::Advance);
    //End of the lines.

    ApplyCustEntries.SetGenJnlLine(Rec,GenJnlLine.FIELDNO("Applies-to Doc. No."));
    ApplyCustEntries.SETTABLEVIEW(CustLedgEntry);
    ApplyCustEntries.SETRECORD(CustLedgEntry);
    ...
    Code existant 2
    ...IF VendLedgEntry.FIND('-') THEN;
    VendLedgEntry.SETRANGE(Positive);
    END;
    ApplyVendEntries.SetGenJnlLine(Rec,GenJnlLine.FIELDNO("Applies-to Doc. No."));
    ApplyVendEntries.SETTABLEVIEW(VendLedgEntry);
    ApplyVendEntries.SETRECORD(VendLedgEntry);
    ...
    Code de substitution 2
    ...IF VendLedgEntry.FIND('-') THEN;
    VendLedgEntry.SETRANGE(Positive);
    END;

    // Add the following lines.
    IF "Prepayment Type" = "Prepayment Type"::Advance THEN
    VendLedgEntry.SETRANGE("Prepayment Type","Prepayment Type"::Advance)
    ELSE
    VendLedgEntry.SETFILTER("Prepayment Type",'<>%1',GenJnlLine."Prepayment Type"::Advance);
    //End of the lines.

    ApplyVendEntries.SetGenJnlLine(Rec,GenJnlLine.FIELDNO("Applies-to Doc. No."));
    ApplyVendEntries.SETTABLEVIEW(VendLedgEntry);
    ApplyVendEntries.SETRECORD(VendLedgEntry);
    ...
  2. Modifiez le code dans la fonction UpdatePrepmtType dans la table Line de Journal général (81) comme suit :
    Code existant
    ...GLSetup.GET;
    GLSetup.TESTFIELD("Prepayment Type");
    "Prepayment Type" := GLSetup."Prepayment Type";
    END ELSE
    "Prepayment Type" := "Prepayment Type"::" ";
    ...
    Code de remplacement
    ...GLSetup.GET;
    GLSetup.TESTFIELD("Prepayment Type");
    "Prepayment Type" := GLSetup."Prepayment Type";

    // Add the following lines.
    IF NOT ("Document Type" IN ["Document Type"::Refund,"Document Type"::Payment]) THEN
    FIELDERROR(Prepayment);
    //End of the lines.

    END ELSE
    "Prepayment Type" := "Prepayment Type"::" ";
    ...
  3. Modifiez la définition du champ Type écriture de la table de liaison de l’avance (26590) comme suit :
    Définition existante
    ...
    OptionString=Montant Initial, le lien vers la lettre
    ...
    Définition de remplacement
    ...
    OptionString=Montant Initial, le lien lettre, Application
    ...
  4. Supprimer la définition de SourceTableView dans le formulaire Lettrer écritures client (232).
  5. Modifiez le code dans la fonction SetApplyingCustLedgEntry dans le formulaire Lettrer écritures client (232) comme suit :
    Code existant
    ... CalcApplnAmount;
    END;
    END;
    ...
    Code de remplacement
    ...CalcApplnAmount;
    END;
    END;

    // Add the following line.
    SetAdvanceFilter;
    ...
  6. Modifiez le code dans la fonction FindApplyingEntry dans le formulaire Lettrer écritures client (232) comme suit :
    Code existant
    ...ApplyingAmount := CustLedgEntry."Remaining Amount";
    ApplnDate := CustLedgEntry."Posting Date";
    ApplnCurrencyCode := CustLedgEntry."Currency Code";
    END;
    CalcApplnAmount;
    ...
    Code de remplacement
    ...ApplyingAmount := CustLedgEntry."Remaining Amount";
    ApplnDate := CustLedgEntry."Posting Date";
    ApplnCurrencyCode := CustLedgEntry."Currency Code";

    // Add the following line.
    SetAdvanceFilter;

    END;
    CalcApplnAmount;
    ...
  7. Créez une nouvelle fonction dans le formulaire Lettrer écritures client (232) comme suit :
    LOCAL PROCEDURE SetAdvanceFilter@1470011();BEGIN
    IF ApplyingCustLedgEntry."Prepayment Type" = ApplyingCustLedgEntry."Prepayment Type"::Advance THEN
    SETRANGE("Prepayment Type","Prepayment Type"::Advance)
    ELSE
    SETFILTER("Prepayment Type",'<>%1',"Prepayment Type"::Advance);
    END;
  8. Supprimer la définition de SourceTableView dans le formulaire Lettrer écritures fournisseur (233).
  9. Modifiez le code dans la fonction SetApplyingVendLedgEntry dans le formulaire Lettrer écritures fournisseur (233) comme suit :
    Code existant
    ... CalcApplnAmount;
    END;
    END;
    ...
    Code de remplacement
    ...CalcApplnAmount;
    END;
    END;

    // Add the following line.
    SetAdvanceFilter;
    ...
  10. Modifiez le code dans la fonction FindApplyingEntry dans le formulaire Lettrer écritures fournisseur (233) comme suit :
    Code existant
    ...ApplyingAmount := VendLedgEntry."Remaining Amount";
    ApplnDate := VendLedgEntry."Posting Date";
    ApplnCurrencyCode := VendLedgEntry."Currency Code";
    END;
    CalcApplnAmount;
    ...
    Code de remplacement
    ...ApplyingAmount := VendLedgEntry."Remaining Amount";
    ApplnDate := VendLedgEntry."Posting Date";
    ApplnCurrencyCode := VendLedgEntry."Currency Code";

    // Add the following line.
    SetAdvanceFilter;
    END;
    CalcApplnAmount;
    ...
  11. Créez une nouvelle fonction dans le formulaire Lettrer écritures fournisseur (233) comme suit :
    LOCAL PROCEDURE SetAdvanceFilter@1470011();BEGIN
    IF ApplyingVendLedgEntry."Prepayment Type" = ApplyingVendLedgEntry."Prepayment Type"::Advance THEN
    SETRANGE("Prepayment Type","Prepayment Type"::Advance)
    ELSE
    SETFILTER("Prepayment Type",'<>%1',"Prepayment Type"::Advance);
    END;
  12. Supprimer la variable globale suivante dans la feuille compta.-Valider ligne codeunit (12) :
    • Nom: Text26500
    • TextConst: ' ENU = ventes %1 %2 ne peut pas être appliqué manuellement.'
  13. Modifiez le code dans la fonction ApplyCustLedgEntry dans la feuille compta.-Valider ligne codeunit (12) comme suit :
    Code existant 1
    ...THEN
    EXIT;

    // Delete the following lines.
    IF NOT GenJnlLine."System-Created Entry" AND (GenJnlLine."Applies-to ID" <> '') AND
    (NewCVLedgEntryBuf."Prepayment Type" = NewCVLedgEntryBuf."Prepayment Type"::Advance)
    THEN
    ERROR(Text26500,NewCVLedgEntryBuf."Document Type",NewCVLedgEntryBuf."Document No.");
    // End of the lines.

    PmtTolAmtToBeApplied := 0;
    NewRemainingAmtBeforeAppln := NewCVLedgEntryBuf."Remaining Amount";
    NewCVLedgEntryBuf2 := NewCVLedgEntryBuf;
    ...
    Code de substitution 1
    ...THEN
    EXIT;

    PmtTolAmtToBeApplied := 0;
    NewRemainingAmtBeforeAppln := NewCVLedgEntryBuf."Remaining Amount";
    NewCVLedgEntryBuf2 := NewCVLedgEntryBuf;
    ...
    Code existant 2
    ...OldCustLedgEntry.FINDFIRST;
    OldCustLedgEntry.TESTFIELD(Positive,NOT NewCVLedgEntryBuf.Positive);
    IF NOT GenJnlLine."System-Created Entry" THEN BEGIN

    // Delete the following lines.
    IF NewCVLedgEntryBuf."Prepayment Type" = NewCVLedgEntryBuf."Prepayment Type"::Advance THEN
    ERROR(Text26500,NewCVLedgEntryBuf."Document Type",NewCVLedgEntryBuf."Document No.");
    IF OldCustLedgEntry."Prepayment Type" = OldCustLedgEntry."Prepayment Type"::Advance THEN
    ERROR(Text26500,OldCustLedgEntry."Document Type",OldCustLedgEntry."Document No.");
    // End of the lines.

    END;
    IF OldCustLedgEntry."Posting Date" > ApplyingDate THEN
    ApplyingDate := OldCustLedgEntry."Posting Date";
    ...
    Code de substitution 2
    ...OldCustLedgEntry.FINDFIRST;
    OldCustLedgEntry.TESTFIELD(Positive,NOT NewCVLedgEntryBuf.Positive);
    IF NOT GenJnlLine."System-Created Entry" THEN BEGIN

    // Add the following lines.
    IF GenJnlLine."Prepayment Type" = GenJnlLine."Prepayment Type"::Advance THEN
    OldCustLedgEntry.TESTFIELD("Prepayment Type",OldCustLedgEntry."Prepayment Type"::Advance);
    IF OldCustLedgEntry."Prepayment Type" = OldCustLedgEntry."Prepayment Type"::Advance THEN
    GenJnlLine.TESTFIELD("Prepayment Type",GenJnlLine."Prepayment Type"::Advance);
    //End of the lines.

    END;
    IF OldCustLedgEntry."Posting Date" > ApplyingDate THEN
    ApplyingDate := OldCustLedgEntry."Posting Date";
    ...
    Code existant 3
    ...OldCustLedgEntry.SETRANGE("Currency Code",NewCVLedgEntryBuf."Currency Code");
    IF OldCustLedgEntry.FINDSET(FALSE,FALSE) THEN
    REPEAT

    // Delete the following lines.
    IF (OldCustLedgEntry."Prepayment Type" <> OldCustLedgEntry."Prepayment Type"::Advance) OR
    (OldCustLedgEntry."Applies-to ID" <> '')
    THEN
    // End of the lines.

    IF GenJnlApply.CheckAgainstApplnCurrency(
    NewCVLedgEntryBuf."Currency Code",
    OldCustLedgEntry."Currency Code",
    ...
    Code de substitution 3
    ...OldCustLedgEntry.SETRANGE("Currency Code",NewCVLedgEntryBuf."Currency Code");
    IF OldCustLedgEntry.FINDSET(FALSE,FALSE) THEN
    REPEAT

    // Add the following lines.
    IF NOT GenJnlLine."System-Created Entry" THEN BEGIN
    IF GenJnlLine."Prepayment Type" = GenJnlLine."Prepayment Type"::Advance THEN
    OldCustLedgEntry.TESTFIELD("Prepayment Type",OldCustLedgEntry."Prepayment Type"::Advance);
    IF OldCustLedgEntry."Prepayment Type" = OldCustLedgEntry."Prepayment Type"::Advance THEN
    GenJnlLine.TESTFIELD("Prepayment Type",GenJnlLine."Prepayment Type"::Advance);
    END;
    //End of the lines.

    IF GenJnlApply.CheckAgainstApplnCurrency(
    NewCVLedgEntryBuf."Currency Code",
    OldCustLedgEntry."Currency Code",
    ...
  14. Ajouter une nouvelle variable locale de la fonction CalcApplication dans la feuille compta.-Valider ligne codeunit (12), puis spécifiez la variable comme suit :
    • Nom: OldDtldCVLedgEntryBuf
    • Type de données: enregistrement
    • Sous-type: détaillées tampon écriture CF. Tampon écriture (383)
  15. Modifiez le code dans la fonction CalcApplication dans la feuille compta.-Valider ligne codeunit (12) comme suit :
    Code existant 1
    ...OldCVLedgEntryBuf."Open For Advance Letter" := FALSE;
    END ELSE
    AllApplied := FALSE;

    InitNewCVLedgEntry(DtldCVLedgEntryBuf,GenJnlLine);
    InitOldCVLedgEntry(DtldCVLedgEntryBuf,NewCVLedgEntryBuf);
    ...
    Code de substitution 1
    ...OldCVLedgEntryBuf."Open For Advance Letter" := FALSE;
    END ELSE
    AllApplied := FALSE;

    // Add the following line.
    OldDtldCVLedgEntryBuf := DtldCVLedgEntryBuf;

    InitNewCVLedgEntry(DtldCVLedgEntryBuf,GenJnlLine);
    InitOldCVLedgEntry(DtldCVLedgEntryBuf,NewCVLedgEntryBuf);
    ...
    Code existant 2
    ...NewCVLedgEntryBuf.Prepayment AND (NewCVLedgEntryBuf."Prepayment Type" = NewCVLedgEntryBuf."Prepayment Type"::Advance);
    InsertDtldCVLedgEntry(DtldCVLedgEntryBuf,NewCVLedgEntryBuf,FALSE);

    // Delete the following line.
    NewCVLedgEntryBuf.Open := NewCVLedgEntryBuf."Remaining Amount" <> 0;

    IF NOT NewCVLedgEntryBuf.Open AND NOT AllApplied THEN BEGIN
    NewCVLedgEntryBuf."Closed by Entry No." := OldCVLedgEntryBuf."Entry No.";
    NewCVLedgEntryBuf."Closed at Date" := GenJnlLine."Posting Date";
    ...
    Code de substitution 2
    ...NewCVLedgEntryBuf.Prepayment AND (NewCVLedgEntryBuf."Prepayment Type" = NewCVLedgEntryBuf."Prepayment Type"::Advance);
    InsertDtldCVLedgEntry(DtldCVLedgEntryBuf,NewCVLedgEntryBuf,FALSE);

    // Add the following lines.
    IF DtldCVLedgEntryBuf.Advance AND
    OldDtldCVLedgEntryBuf.Advance AND
    (NOT GenJnlLine."System-Created Entry" OR
    (GenJnlLine."System-Created Entry" AND
    (GenJnlLine."Applies-to Doc. No." = '')))
    THEN
    IF (NewCVLedgEntryBuf."Document Type" IN [DtldCVLedgEntryBuf."Document Type"::Refund,
    DtldCVLedgEntryBuf."Document Type"::Payment]) AND
    (OldCVLedgEntryBuf."Document Type" IN [DtldCVLedgEntryBuf."Document Type"::Refund,
    DtldCVLedgEntryBuf."Document Type"::Payment])
    THEN
    IF (DtldCVLedgEntryBuf."Document Type" = DtldCVLedgEntryBuf."Document Type"::Payment) THEN
    SalesPostAdvances.InsertTempApplnAdvanceLink(DtldCVLedgEntryBuf."Entry No.")
    ELSE
    SalesPostAdvances.InsertTempApplnAdvanceLink(OldDtldCVLedgEntryBuf."Entry No.");

    NewCVLedgEntryBuf.Open := NewCVLedgEntryBuf."Remaining Amount" <> 0;
    NewCVLedgEntryBuf."Open For Advance Letter" := NewCVLedgEntryBuf.Open;
    //End of the lines.

    IF NOT NewCVLedgEntryBuf.Open AND NOT AllApplied THEN BEGIN
    NewCVLedgEntryBuf."Closed by Entry No." := OldCVLedgEntryBuf."Entry No.";
    NewCVLedgEntryBuf."Closed at Date" := GenJnlLine."Posting Date";
    ...
    Code existant 3
    ...NewCVLedgEntryBuf."Closed by Amount (LCY)" := AppliedAmountLCY;
    NewCVLedgEntryBuf."Closed by Currency Code" := OldCVLedgEntryBuf."Currency Code";
    NewCVLedgEntryBuf."Closed by Currency Amount" := OldAppliedAmount;

    // Delete the following line.
    NewCVLedgEntryBuf."Open For Advance Letter" := FALSE;
    END;
    ...
    Code de substitution 3
    ...NewCVLedgEntryBuf."Closed by Amount (LCY)" := AppliedAmountLCY;
    NewCVLedgEntryBuf."Closed by Currency Code" := OldCVLedgEntryBuf."Currency Code";
    NewCVLedgEntryBuf."Closed by Currency Amount" := OldAppliedAmount;
    END;
    ...
  16. Modifiez le code dans la fonction PostDtldCustLedgEntries dans la feuille compta.-Valider ligne codeunit (12) comme suit :
    Code existant
    ...InitGLEntry(GLAccNo,DtldCVLedgEntryBuf."Amount (LCY)",0,FALSE,TRUE);
    InsertGLEntry(TRUE);
    END;
    END;
    DtldCVLedgEntryBuf."Entry Type"::"Unrealized Loss":
    BEGIN
    ...
    Code de remplacement
    ...InitGLEntry(GLAccNo,DtldCVLedgEntryBuf."Amount (LCY)",0,FALSE,TRUE);
    InsertGLEntry(TRUE);
    END;

    // Add the following line.
    SalesPostAdvances.InsertApplnAdvanceLink(DtldCVLedgEntryBuf);

    END;
    DtldCVLedgEntryBuf."Entry Type"::"Unrealized Loss":
    BEGIN
    ...
  17. Modifiez le code dans la fonction ApplyVendLedgEntry dans la feuille compta.-Valider ligne codeunit (12) comme suit :
    Code existant 1
    ...THEN
    EXIT;

    // Delete the following lines.
    IF NOT GenJnlLine."System-Created Entry" AND (GenJnlLine."Applies-to ID" <> '') AND
    (NewCVLedgEntryBuf."Prepayment Type" = NewCVLedgEntryBuf."Prepayment Type"::Advance)
    THEN
    ERROR(Text26500,NewCVLedgEntryBuf."Document Type",NewCVLedgEntryBuf."Document No.");
    // End of the lines.

    PmtTolAmtToBeApplied := 0;
    NewRemainingAmtBeforeAppln := NewCVLedgEntryBuf."Remaining Amount";
    NewCVLedgEntryBuf2 := NewCVLedgEntryBuf;
    ...
    Code de substitution 1
    ...THEN
    EXIT;

    PmtTolAmtToBeApplied := 0;
    NewRemainingAmtBeforeAppln := NewCVLedgEntryBuf."Remaining Amount";
    NewCVLedgEntryBuf2 := NewCVLedgEntryBuf;
    ...
    Code existant 2
    ...OldVendLedgEntry.FINDFIRST;
    OldVendLedgEntry.TESTFIELD(Positive,NOT NewCVLedgEntryBuf.Positive);
    IF NOT GenJnlLine."System-Created Entry" THEN BEGIN

    // Delete the following lines.
    IF NewCVLedgEntryBuf."Prepayment Type" = NewCVLedgEntryBuf."Prepayment Type"::Advance THEN
    ERROR(Text26500,NewCVLedgEntryBuf."Document Type",NewCVLedgEntryBuf."Document No.");
    IF OldVendLedgEntry."Prepayment Type" = OldVendLedgEntry."Prepayment Type"::Advance THEN
    ERROR(Text26500,OldVendLedgEntry."Document Type",OldVendLedgEntry."Document No.");
    // End of the lines.

    END;
    IF OldVendLedgEntry."Posting Date" > ApplyingDate THEN
    ApplyingDate := OldVendLedgEntry."Posting Date";
    ...
    Code de substitution 2
    ...OldVendLedgEntry.FINDFIRST;
    OldVendLedgEntry.TESTFIELD(Positive,NOT NewCVLedgEntryBuf.Positive);
    IF NOT GenJnlLine."System-Created Entry" THEN BEGIN

    // Add the following lines.
    IF GenJnlLine."Prepayment Type" = GenJnlLine."Prepayment Type"::Advance THEN
    OldVendLedgEntry.TESTFIELD("Prepayment Type",OldVendLedgEntry."Prepayment Type"::Advance);
    IF OldVendLedgEntry."Prepayment Type" = OldVendLedgEntry."Prepayment Type"::Advance THEN
    GenJnlLine.TESTFIELD("Prepayment Type",GenJnlLine."Prepayment Type"::Advance);
    // End of the lines.

    END;
    IF OldVendLedgEntry."Posting Date" > ApplyingDate THEN
    ApplyingDate := OldVendLedgEntry."Posting Date";
    ...
    Code existant 3
    ...OldVendLedgEntry.SETRANGE("Currency Code",NewCVLedgEntryBuf."Currency Code");
    IF OldVendLedgEntry.FINDSET(FALSE,FALSE) THEN
    REPEAT

    // Delete the following lines.
    IF (OldVendLedgEntry."Prepayment Type" <> OldVendLedgEntry."Prepayment Type"::Advance) OR
    (OldVendLedgEntry."Applies-to ID" <> '')
    THEN
    // End of the lines.

    IF GenJnlApply.CheckAgainstApplnCurrency(
    NewCVLedgEntryBuf."Currency Code",
    OldVendLedgEntry."Currency Code",
    ...
    Code de substitution 3
    ...OldVendLedgEntry.SETRANGE("Currency Code",NewCVLedgEntryBuf."Currency Code");
    IF OldVendLedgEntry.FINDSET(FALSE,FALSE) THEN
    REPEAT

    // Add the following lines.
    IF NOT GenJnlLine."System-Created Entry" THEN BEGIN
    IF GenJnlLine."Prepayment Type" = GenJnlLine."Prepayment Type"::Advance THEN
    OldVendLedgEntry.TESTFIELD("Prepayment Type",OldVendLedgEntry."Prepayment Type"::Advance);
    IF OldVendLedgEntry."Prepayment Type" = OldVendLedgEntry."Prepayment Type"::Advance THEN
    GenJnlLine.TESTFIELD("Prepayment Type",GenJnlLine."Prepayment Type"::Advance);
    END;
    //End of the lines.

    IF GenJnlApply.CheckAgainstApplnCurrency(
    NewCVLedgEntryBuf."Currency Code",
    OldVendLedgEntry."Currency Code",
    ...
  18. Modifiez le code dans la fonction PostDtldVendLedgEntries dans la feuille compta.-Valider ligne codeunit (12) comme suit :
    Code existant
    ...InitGLEntry(GLAccNo,DtldCVLedgEntryBuf."Amount (LCY)",0,FALSE,TRUE);
    InsertGLEntry(TRUE);
    END;
    END;
    DtldCVLedgEntryBuf."Entry Type"::"Unrealized Loss":
    BEGIN
    ...
    Code de remplacement
    ...InitGLEntry(GLAccNo,DtldCVLedgEntryBuf."Amount (LCY)",0,FALSE,TRUE);
    InsertGLEntry(TRUE);
    END;

    // Add the following line.
    SalesPostAdvances.InsertApplnAdvanceLink(DtldCVLedgEntryBuf);

    END;
    DtldCVLedgEntryBuf."Entry Type"::"Unrealized Loss":
    BEGIN
    ...
  19. Modifiez le code dans le déclencheur OnRun dans la feuille compta.-appliquer le codeunit (225) comme suit :
    Code existant 1
    ...CustLedgEntry.SETCURRENTKEY("Customer No.",Open,Positive);
    CustLedgEntry.SETRANGE("Customer No.",AccNo);
    CustLedgEntry.SETRANGE(Open,TRUE);
    IF "Cash Order Type" <> "Cash Order Type"::" " THEN
    CustLedgEntry.SETRANGE("Currency Code","Currency Code");
    IF "Applies-to ID" = '' THEN
    ...
    Code de substitution 1
    ...CustLedgEntry.SETCURRENTKEY("Customer No.",Open,Positive);
    CustLedgEntry.SETRANGE("Customer No.",AccNo);
    CustLedgEntry.SETRANGE(Open,TRUE);

    // Add the following lines.
    IF GenJnlLine."Prepayment Type" = GenJnlLine."Prepayment Type"::Advance THEN
    CustLedgEntry.SETRANGE("Prepayment Type",GenJnlLine."Prepayment Type"::Advance)
    ELSE
    CustLedgEntry.SETFILTER("Prepayment Type",'<>%1',GenJnlLine."Prepayment Type"::Advance);
    //End of the lines.

    IF "Cash Order Type" <> "Cash Order Type"::" " THEN
    CustLedgEntry.SETRANGE("Currency Code","Currency Code");
    IF "Applies-to ID" = '' THEN
    ...
    Code existant 2
    ...VendLedgEntry.SETCURRENTKEY("Vendor No.",Open,Positive);
    VendLedgEntry.SETRANGE("Vendor No.",AccNo);
    VendLedgEntry.SETRANGE(Open,TRUE);
    IF "Cash Order Type" <> "Cash Order Type"::" " THEN
    VendLedgEntry.SETRANGE("Currency Code","Currency Code");
    IF "Applies-to ID" = '' THEN
    ...
    Code de substitution 2
    ...VendLedgEntry.SETCURRENTKEY("Vendor No.",Open,Positive);
    VendLedgEntry.SETRANGE("Vendor No.",AccNo);
    VendLedgEntry.SETRANGE(Open,TRUE);

    // Add the following lines.
    IF GenJnlLine."Prepayment Type" = GenJnlLine."Prepayment Type"::Advance THEN
    VendLedgEntry.SETRANGE("Prepayment Type",GenJnlLine."Prepayment Type"::Advance)
    ELSE
    VendLedgEntry.SETFILTER("Prepayment Type",'<>%1',GenJnlLine."Prepayment Type"::Advance);
    //End of the lines.

    IF "Cash Order Type" <> "Cash Order Type"::" " THEN
    VendLedgEntry.SETRANGE("Currency Code","Currency Code");
    IF "Applies-to ID" = '' THEN
    ...
  20. Modifiez le code dans la fonction PostUnApplyCustomer dans le codeunit CustEntry-appliquer des écritures validées (226) comme suit :
    Code existant
    ...DtldCustLedgEntry.LOCKTABLE;
    CustLedgEntry.LOCKTABLE;
    CustLedgEntry.GET(DtldCustLedgEntry2."Cust. Ledger Entry No.");
    CheckPostingDate(PostingDate,'',0);
    IF PostingDate < DtldCustLedgEntry2."Posting Date" THEN
    ERROR(Text003,
    ...
    Code de remplacement
    ...DtldCustLedgEntry.LOCKTABLE;
    CustLedgEntry.LOCKTABLE;
    CustLedgEntry.GET(DtldCustLedgEntry2."Cust. Ledger Entry No.");

    // Add the following line.
    CustLedgEntry.TESTFIELD(Prepayment,FALSE);

    CheckPostingDate(PostingDate,'',0);
    IF PostingDate < DtldCustLedgEntry2."Posting Date" THEN
    ERROR(Text003,
    ...
  21. Modifiez le code dans la fonction PostUnApplyVendor dans le codeunit VendEntry-appliquer des écritures validées (227) comme suit :
    Code existant
    ...DtldVendLedgEntry.LOCKTABLE;
    VendLedgEntry.LOCKTABLE;
    VendLedgEntry.GET(DtldVendLedgEntry2."Vendor Ledger Entry No.");
    CheckPostingDate(PostingDate,'',0);
    IF PostingDate < DtldVendLedgEntry2."Posting Date" THEN
    ERROR(Text003,
    ...
    Code de remplacement
    ...DtldVendLedgEntry.LOCKTABLE;
    VendLedgEntry.LOCKTABLE;
    VendLedgEntry.GET(DtldVendLedgEntry2."Vendor Ledger Entry No.");

    // Add the following line.
    VendLedgEntry.TESTFIELD(Prepayment,FALSE);

    CheckPostingDate(PostingDate,'',0);
    IF PostingDate < DtldVendLedgEntry2."Posting Date" THEN
    ERROR(Text003,
    ...
  22. Modifiez le code dans la fonction de Code dans la feuille compta.-valider le codeunit (231) comme suit :
    Code existant
    ...EXIT;

    TempJnlBatchName := "Journal Batch Name";

    GenJnlPostBatch.RUN(GenJnlLine);
    ...
    Code de remplacement
    ...EXIT;

    TempJnlBatchName := "Journal Batch Name";

    // Add the following lines.
    IF Prepayment THEN
    IF NOT ("Document Type" IN ["Document Type"::Payment,"Document Type"::Refund]) THEN
    FIELDERROR("Document Type");
    //End of the lines.

    GenJnlPostBatch.RUN(GenJnlLine);
    ...
  23. Ajouter une nouvelle variable globale dans le codeunit Ventes-Valider avance (26585) et spécifiez la variable comme suit :
    • Nom: TempAdvanceLink
    • Type de données: enregistrement temporaire
    • Sous-type: lien d’avance (26590)
  24. Ajoutez une nouvelle fonction locale dans le codeunit Ventes-Valider avance (26585) comme suit :
    PROCEDURE InsertTempApplnAdvanceLink@1470048(DtldEntryBufEntryNo@1470002 : Integer);BEGIN
    TempAdvanceLink.INIT;
    TempAdvanceLink."Entry No." := DtldEntryBufEntryNo;
    TempAdvanceLink.INSERT;
    END;
  25. Ajoutez une nouvelle fonction locale dans le codeunit Ventes-Valider avance (26585) comme suit :
    PROCEDURE InsertApplnAdvanceLink@140049(DtldCVLedgEntryBuf@1102601000 : Record 383);VAR
    AdvanceLink@1470001 : Record 26590;
    BEGIN
    WITH AdvanceLink DO BEGIN
    IF TempAdvanceLink.GET(DtldCVLedgEntryBuf."Entry No.") THEN BEGIN
    IF FINDLAST THEN
    NextLinkEntryNo := AdvanceLink."Entry No." + 1
    ELSE
    NextLinkEntryNo := 1;
    INIT;
    "Entry No." := NextLinkEntryNo;
    "Entry Type" := "Entry Type"::Application;
    "Document No." := DtldCVLedgEntryBuf."Document No.";
    "CV Ledger Entry No." := DtldCVLedgEntryBuf."Cust. Ledger Entry No.";
    Amount := DtldCVLedgEntryBuf.Amount;
    "Amount (LCY)" := DtldCVLedgEntryBuf."Amount (LCY)";
    INSERT;
    TempAdvanceLink.DELETE;
    END;
    END;
    END;

Conditions préalables

Vous devez avoir la version européenne Europe de l’est de Microsoft Dynamics NAV 2009 R2 installé pour appliquer ce correctif.

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 à ».
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.