Message d’erreur de « une dimension utilisée dans une ligne de feuille article [numéro ligne] a provoqué une erreur » lors de la validation de plusieurs lignes de dimension dans une feuille de reclassement magasin dans Microsoft Dynamics NAV 2009 Service Pack 1


Cet article s’applique à Microsoft Dynamics NAV pour tous les pays et tous les paramètres régionaux de langue.

Symptômes


Lorsque vous validez plusieurs lignes qui possède les dimensions spécifiées dans une feuille de reclassement magasin dans Microsoft Dynamics NAV 2009 Service Pack 1 (SP1), vous recevez un message d’erreur semblable au suivant :
Une dimension utilisée dans une ligne feuille article, numéro de ligne a provoqué une erreur. Sélectionnez un Code de valeur de Dimension de la zone de Code Dimension pour le nom de l’élémentde l’élément.

Cause


Ce problème se produit car la fonction CreateItemJnlLine utilise le numéro de ligne à partir de la ligne de feuille reclassement un entrepôt, lorsque vous créez les dimensions pour une autre ligne de feuille reclassement entrepôt. Le numéro de ligne n’est pas mis à jour jusqu'à la fin de la fonction. Les cotes faisant référence à l’ancien numéro de ligne, les dimensions ne peuvent pas trouver ultérieurement.

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, modifiez le code dans la fonction CreateItemJnlLine dans l’emplacement ajustement. F.-enregistrer le lot codeunit (7304) comme suit :

Code existant
WhseItemTrkgLine.SETCURRENTKEY(  "Source ID","Source Type","Source Subtype","Source Batch Name",
"Source Prod. Order Line","Source Ref. No.","Location Code");
WhseItemTrkgLine.SETRANGE("Source Type",DATABASE::"Warehouse Journal Line");
WhseItemTrkgLine.SETRANGE("Source ID",WhseJnlLine2."Journal Batch Name");
WhseItemTrkgLine.SETRANGE("Source Batch Name",WhseJnlLine2."Journal Template Name");
WhseItemTrkgLine.SETRANGE("Source Ref. No.",WhseJnlLine2."Line No.");
WhseItemTrkgLine.SETRANGE("Location Code",WhseJnlLine2."Location Code");
IF WhseItemTrkgLine.FINDSET THEN BEGIN
ItemJnlLine.INIT;
ItemJnlLine.VALIDATE("Entry Type",ItemJnlLine."Entry Type"::Transfer);
WITH WhseJnlLine2 DO BEGIN
REPEAT
IF ((WhseItemTrkgLine."New Serial No." <> WhseItemTrkgLine."Serial No.") OR
(WhseItemTrkgLine."New Lot No." <> WhseItemTrkgLine."Lot No.") OR
(WhseItemTrkgLine."New Expiration Date" <> WhseItemTrkgLine."Expiration Date")) THEN BEGIN
CreateReservEntry.CreateReservEntryFor(
DATABASE::"Item Journal Line",
ItemJnlLine."Entry Type",
'',
'',
0,
"Line No.",
WhseItemTrkgLine."Qty. per Unit of Measure",
ABS(WhseItemTrkgLine."Qty. to Handle (Base)"),
WhseItemTrkgLine."Serial No.",
WhseItemTrkgLine."Lot No.");
CreateReservEntry.SetNewSerialLotNo(WhseItemTrkgLine."New Serial No.",WhseItemTrkgLine."New Lot No.");
CreateReservEntry.SetDates(WhseItemTrkgLine."Warranty Date",WhseItemTrkgLine."Expiration Date");
CreateReservEntry.SetNewExpirationDate(WhseItemTrkgLine."New Expiration Date");
CreateReservEntry.CreateEntry(
"Item No.",
"Variant Code",
"Location Code",
Description,
0D,
0D,
0,
ReservEntry."Reservation Status"::Prospect);
QtyToHandleBase += ABS(WhseItemTrkgLine."Qty. to Handle (Base)");
END;
UNTIL WhseItemTrkgLine.NEXT = 0;
IF QtyToHandleBase <> 0 THEN BEGIN
ItemJnlLine."Document No." := "Whse. Document No.";
ItemJnlLine.VALIDATE("Posting Date", "Registering Date");
ItemJnlLine.VALIDATE("Item No.", "Item No.");
ItemJnlLine.VALIDATE("Variant Code","Variant Code");
ItemJnlLine.VALIDATE("Location Code","Location Code");
ItemJnlLine.VALIDATE("Unit of Measure Code", "Unit of Measure Code");
ItemJnlLine.VALIDATE("Quantity (Base)", QtyToHandleBase);
ItemJnlLine.Description := Description;
ItemJnlLine."Source Type" := ItemJnlLine."Source Type"::Item;
ItemJnlLine."Source No." := "Item No.";
ItemJnlLine."Source Code" := "Source Code";
ItemJnlLine."Reason Code" := "Reason Code";

//Delete the following line.
ItemJnlLine."Line No." := "Line No.";

END;
END;
END;
Code de remplacement
WhseItemTrkgLine.SETCURRENTKEY(  "Source ID","Source Type","Source Subtype","Source Batch Name",
"Source Prod. Order Line","Source Ref. No.","Location Code");
WhseItemTrkgLine.SETRANGE("Source Type",DATABASE::"Warehouse Journal Line");
WhseItemTrkgLine.SETRANGE("Source ID",WhseJnlLine2."Journal Batch Name");
WhseItemTrkgLine.SETRANGE("Source Batch Name",WhseJnlLine2."Journal Template Name");
WhseItemTrkgLine.SETRANGE("Source Ref. No.",WhseJnlLine2."Line No.");
WhseItemTrkgLine.SETRANGE("Location Code",WhseJnlLine2."Location Code");
IF WhseItemTrkgLine.FINDSET THEN BEGIN
ItemJnlLine.INIT;

//Add the following line.
ItemJnlLine."Line No." := WhseJnlLine2."Line No.";

ItemJnlLine.VALIDATE("Entry Type",ItemJnlLine."Entry Type"::Transfer);
WITH WhseJnlLine2 DO BEGIN
REPEAT
IF ((WhseItemTrkgLine."New Serial No." <> WhseItemTrkgLine."Serial No.") OR
(WhseItemTrkgLine."New Lot No." <> WhseItemTrkgLine."Lot No.") OR
(WhseItemTrkgLine."New Expiration Date" <> WhseItemTrkgLine."Expiration Date")) THEN BEGIN
CreateReservEntry.CreateReservEntryFor(
DATABASE::"Item Journal Line",
ItemJnlLine."Entry Type",
'',
'',
0,
"Line No.",
WhseItemTrkgLine."Qty. per Unit of Measure",
ABS(WhseItemTrkgLine."Qty. to Handle (Base)"),
WhseItemTrkgLine."Serial No.",
WhseItemTrkgLine."Lot No.");
CreateReservEntry.SetNewSerialLotNo(WhseItemTrkgLine."New Serial No.",WhseItemTrkgLine."New Lot No.");
CreateReservEntry.SetDates(WhseItemTrkgLine."Warranty Date",WhseItemTrkgLine."Expiration Date");
CreateReservEntry.SetNewExpirationDate(WhseItemTrkgLine."New Expiration Date");
CreateReservEntry.CreateEntry(
"Item No.",
"Variant Code",
"Location Code",
Description,
0D,
0D,
0,
ReservEntry."Reservation Status"::Prospect);
QtyToHandleBase += ABS(WhseItemTrkgLine."Qty. to Handle (Base)");
END;
UNTIL WhseItemTrkgLine.NEXT = 0;
IF QtyToHandleBase <> 0 THEN BEGIN
ItemJnlLine."Document No." := "Whse. Document No.";
ItemJnlLine.VALIDATE("Posting Date", "Registering Date");
ItemJnlLine.VALIDATE("Item No.", "Item No.");
ItemJnlLine.VALIDATE("Variant Code","Variant Code");
ItemJnlLine.VALIDATE("Location Code","Location Code");
ItemJnlLine.VALIDATE("Unit of Measure Code", "Unit of Measure Code");
ItemJnlLine.VALIDATE("Quantity (Base)", QtyToHandleBase);
ItemJnlLine.Description := Description;
ItemJnlLine."Source Type" := ItemJnlLine."Source Type"::Item;
ItemJnlLine."Source No." := "Item No.";
ItemJnlLine."Source Code" := "Source Code";
ItemJnlLine."Reason Code" := "Reason Code";
END;
END;
END;


Conditions préalables

Vous devez disposer de Microsoft Dynamics NAV 2009 Service Pack 1 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.