Movimientos de almacén no se actualizan con todas las líneas de un diario de seguimiento cuando se registra un artículo en el diario de trabajo a un bin en Microsoft Dynamics NAV 2009

Se aplica a: Dynamics NAV 2009

En este artículo se aplica a Microsoft Dynamics NAV para todos los países y todas las configuraciones regionales.

Síntomas


Suponga que tiene un diario que tiene más de un elemento de seguimiento de las líneas de un elemento en Microsoft Dynamics NAV 2009. Al registrar el elemento en el diario de trabajo a una ubicación, sólo se actualizan los movimientos de almacén con la última línea que se ha especificado de seguimiento. Por lo tanto, hay un desequilibrio del elemento entre el almacén y el diario de productos.
Este problema se produce en los siguientes productos:
  • Microsoft Dynamics NAV 2009 R2
  • Microsoft Dynamics NAV 2009 Service Pack 1 (SP1)

Solución


Información de la revisión

Ahora hay una revisión compatible de Microsoft. Sin embargo, sólo se diseñó para corregir el problema que se describe en este artículo. Aplíquela sólo a sistemas que experimenten este problema específico. Esta revisión puede ser sometida a comprobaciones adicionales. Por lo tanto, si no se ve muy afectado por este problema, recomendamos que espere al próximo service pack de Microsoft Dynamics NAV o de la próxima versión de Microsoft Dynamics NAV que contenga esta revisión.

Nota: En casos especiales, los costos derivados normalmente de las llamadas pueden cancelarse si un profesional de soporte técnico de Microsoft Dynamics y productos relacionados de soporte determina que una actualización específica resolverá el problema. Los costos habituales de soporte se aplicarán a las preguntas de soporte técnico adicionales y problemas que no guarden relación con la actualización en cuestión.


Información sobre la instalación

Microsoft proporciona ejemplos de programación únicamente con fines ilustrativos, sin ninguna garantía expresa o implícita. Esto incluye, pero no se limita, a las garantías implícitas de comerciabilidad o idoneidad para un propósito particular. Este artículo asume que está familiarizado con el lenguaje de programación que se muestra y con las herramientas que se utilizan para crear y depurar procedimientos. Los ingenieros de soporte técnico de Microsoft pueden explicarle la funcionalidad de un determinado procedimiento, pero no modificarán estos ejemplos para ofrecer mayor funcionalidad ni crearán procedimientos que cumplan sus requisitos específicos.

Nota: Antes de instalar este hotfix, compruebe que todos los usuarios del cliente Microsoft Navision han salido del sistema. Esto incluye a los usuarios del cliente Microsoft Navision Application Services (NAS). Debe ser el único usuario del cliente conectado cuando implemente este hotfix.

Para implementar esta revisión, debe tener una licencia de desarrollador.

Recomendamos que la cuenta de usuario en la ventana Conexiones Windows o en la ventana Conexiones base de datos se asigne el identificador de rol "SUPER". Si la cuenta de usuario no se puede asignar el identificador de rol "SUPER", debe comprobar que la cuenta de usuario tiene los permisos siguientes:
  • El permiso de modificación para el objeto que se va a cambiar.
  • El permiso de ejecución para el objeto System Object ID 5210 y System Object ID 9015 del objeto.


Nota: No es necesario tener derechos para los almacenes de datos a menos que deba realizar reparaciones de datos.

Cambios de código

Nota: Siempre pruebe correcciones de código en un entorno controlado antes de aplicar las revisiones a los equipos de producción.
Para resolver este problema, siga estos pasos: crear las siguientes variables locales:
  1. Agregar una nueva variable global en la tabla de líneas del diario (210) y, a continuación, especificar la variable como sigue:
    • Nombre: WMSManagement
    • Tipo de datos: Codeunit
    • Subtipo: administración de WMS (7302)
  2. Eliminar el código siguiente en la propiedad TableRelation del Código de ubicación del campo en la tabla de líneas del diario (210) (5403):
    Bin.Code WHERE (Location Code=FIELD(Location Code));
  3. Cambiar el código del disparador OnValidate para código de ubicación del campo (5403) en la tabla de líneas del diario (210) como sigue:
    Código existente
    ...// Delete the following lines.
    TESTFIELD("Location Code");
    CheckItemAvailable;
    // End of the lines.
    ...
    Código de sustitución
    ...// Add the following lines.
    TESTFIELD("Location Code");
    IF "Bin Code" <> '' THEN BEGIN
    GetLocation("Location Code");
    Location.TESTFIELD("Bin Mandatory");
    END;
    TESTFIELD(Type,Type::Item);
    CheckItemAvailable;
    WMSManagement.FindBinContent("Location Code","Bin Code","No.","Variant Code",'')
    // End of the lines.
    ...
  4. Agregar una nueva variable local en el Código de ubicación - OnLookup triggerin la tabla de líneas del diario (210) y, a continuación, especificar la variable como sigue:
    • Nombre: BinCode
    • Tipo de datos: código de
    • Longitud: 20
  5. Agregue el código siguiente en el Código de ubicación - OnLookup desencadenador en la tabla de líneas del diario (210):
    TESTFIELD("Location Code");TESTFIELD(Type,Type::Item);
    BinCode := WMSManagement.BinContentLookUp("Location Code","No.","Variant Code",'',"Bin Code");
    IF BinCode <> '' THEN
    VALIDATE("Bin Code",BinCode);
  6. Cambie el valor de la propiedad OptionString del campo Documento de origen (25) en la tabla línea diario almacén (7311) a la siguiente:
    OptionString=, S. pedido, factura de S., S. abono, devolución S., P. orden, P. factura, Nota crédito, P.venta, dev. Transferencia, dev. Transferencia, Prod. Consumo, elemento conf., fís. Conf., secciones diario reclasif. Conf., Diario consumo., conf., diario de l. MAT., Serv pedido de salida, trabajo diario.
  7. Cambie el valor de la propiedad OptionString del Documento de referencia de campo (60) en la tabla línea diario almacén (7311) a la siguiente:
    OptionString= , registra la remisión, registrado P. Inv., publicada fac. coment., registrado P. Nota de crédito, Remisión registrado, publicada S., Fact. Fac. envío, publicado S. vta., abono registrado T. recepción, envío T., elemento diario, prod., ubicación, picking, movimiento, diario L.M., el diario de trabajo
  8. Cambie el valor de la propiedad OptionString del campo documento de origen (25) en la tabla de movimientos de almacén (7312) a la siguiente:
    OptionString=, S. pedido, factura de S., S. abono, devolución S., P. orden, P. factura, Nota crédito, P.venta, dev. Transferencia, dev. Transferencia, Prod. Consumo, elemento conf., fís. Conf., secciones diario reclasif. Conf., Diario consumo., conf., diario de l. MAT., serv. pedido de salida, trabajo diario.
  9. Cambie el valor de la propiedad OptionString del campo documento de referencia (60) en la tabla de movimientos de almacén (7312) a la siguiente:
    OptionString= , registra la remisión, registrado P. Inv., publicada fac. coment., registrado P. Nota de crédito, Remisión registrado, publicada S., Fact. Fac. envío, publicado S. vta., abono registrado T. recepción, envío T., elemento diario, prod., ubicación, picking, movimiento, diario L.M., el diario de trabajo
  10. Cambie la propiedad Visible del control de código de ubicación (60) en el formulario Diario de trabajo (201) como sigue:
    Código existente
    Visible = Yes
    Código de sustitución
    Visible = No
  11. Agregue el campo de Código de ubicación entre el campo de Código de la ubicación y el campo Código de tipo de trabajo en el formulario Diario de trabajo (201) y, a continuación, especifique el campo como sigue:
    ...{ 61 ;Label ;0 ;0 ;0 ;0 ;ParentControl=60;
    InColumnHeading=Yes }

    // Add the following lines.
    { 102 ;TextBox ;35507;1650 ;1700 ;440 ;ParentControl=1;
    InColumn=Yes;
    SourceExpr="Bin Code" }
    { 103 ;Label ;0 ;0 ;0 ;0 ;ParentControl=102;
    InColumnHeading=Yes }
    // End of the lines.

    { 48 ;TextBox ;11430;2530 ;1650 ;440 ;ParentControl=1;
    ...
  12. Agregar una nueva variable global en el trabajo diario.-línea Post codeunit (1012) y, a continuación, especificar la variable como sigue:
    • Nombre: ubicación
    • Tipo de datos: registro
    • Subtipo: ubicación (14)
  13. Crear una nueva función GetLocation en el trabajo diario.-línea Post codeunit (1012) como sigue:
    LOCAL PROCEDURE GetLocation@25(LocationCode@1000 : Code[10]);
  14. Agregue el código siguiente en la función GetLocation en el trabajo diario.-línea Post codeunit (1012):
    IF LocationCode = '' THENCLEAR(Location)
    ELSE
    IF Location.Code <> LocationCode THEN
    Location.GET(LocationCode);
  15. Cree una nueva función de PostWhseJnlLine en el trabajo diario.-línea Post codeunit (1012) como sigue:
    LOCAL PROCEDURE PostWhseJnlLine@24(ItemJnlLine@1000 : Record 83;OriginalQuantity@1001 : Decimal;OriginalQuantityBase@1002 : Decimal;VAR TempTrackingSpecification@1003 : TEMPORARY Record 336);
  16. Crear las siguientes variables locales en la función PostWhseJnlLine en el trabajo diario.-línea Post codeunit (1012):
    1. Agregue una variable local en la función PostWhseJnlLine en el trabajo diario.-línea Post codeunit (1012) y, a continuación, especificar la variable como sigue:
      • Nombre: WarehouseJournalLine
      • Tipo de datos: registro
      • Subtipo: línea diario almacén (7311)
    2. Agregue una variable local en la función PostWhseJnlLine en el trabajo diario.-línea Post codeunit (1012) y, a continuación, especificar la variable como sigue:
      • Nombre: TempWarehouseJournalLine
      • Tipo de datos: registro temporal
      • Subtipo: línea diario almacén (7311)
    3. Agregue una variable local en la función PostWhseJnlLine en el trabajo diario.-línea Post codeunit (1012) y, a continuación, especificar la variable como sigue:
      • Nombre: ItemTrackingManagement
      • Tipo de datos: Codeunit
      • Subtipo: administración de seguimiento de productos (6500)
    4. Agregue una variable local en la función PostWhseJnlLine en el trabajo diario.-línea Post codeunit (1012) y, a continuación, especificar la variable como sigue:
      • Nombre: WMSManagement
      • Tipo de datos: Codeunit
      • Subtipo: administración de WMS (7302)
    5. Agregue una variable local en la función PostWhseJnlLine en el trabajo diario.-línea Post codeunit (1012) y, a continuación, especificar la variable como sigue:
      • Nombre: WhseJnlRegisterLine
      • Tipo de datos: Codeunit
      • Subtipo: recep. Diario-Registrar línea (7301)
  17. Agregue el código siguiente en la función PostWhseJnlLine en el trabajo diario.-línea Post codeunit (1012) como sigue:
    WITH ItemJnlLine DO BEGINIF "Entry Type" IN ["Entry Type"::Consumption,"Entry Type"::Output] THEN
    EXIT;
    Quantity := OriginalQuantity;
    "Quantity (Base)" := OriginalQuantityBase;
    GetLocation("Location Code");
    IF Location."Bin Mandatory" THEN
    IF WMSManagement.CreateWhseJnlLine(ItemJnlLine,0,WarehouseJournalLine,FALSE,FALSE) THEN BEGIN
    TempTrackingSpecification.MODIFYALL("Source Type",DATABASE::"Job Journal Line");
    ItemTrackingManagement.SplitWhseJnlLine(WarehouseJournalLine,TempWarehouseJournalLine,TempTrackingSpecification,FALSE);
    IF TempWarehouseJournalLine.FIND('-') THEN
    REPEAT
    WMSManagement.CheckWhseJnlLine(TempWarehouseJournalLine,1,0,FALSE);
    WhseJnlRegisterLine.RUN(TempWarehouseJournalLine);
    UNTIL TempWarehouseJournalLine.NEXT = 0;
    END;
    END;
  18. Agregar una nueva variable local en la función de código en el trabajo diario.-línea Post codeunit (1012) y, a continuación, especificar la variable como sigue:
    • Nombre: TempTrackingSpecification
    • Tipo de datos: registro temporal
    • Subtipo: especificación de seguimiento (336)
  19. Agregar una nueva variable local en la función de código en el trabajo diario.-línea Post codeunit (1012) y, a continuación, especificar la variable como sigue:
    • Nombre: ItemJnlLine2
    • Tipo de datos: registro
    • Subtipo: línea del diario (83)
  20. Cambie el código de la función en el trabajo diario. -línea Post codeunit (1012) como sigue:
    Código existente 1
    ...ItemJnlLine.INIT;
    ItemJnlLine."Item No." := JobJnlLine2."No.";
    ...

    Código nuevo 1
    ...ItemJnlLine.INIT;

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

    ItemJnlLine."Item No." := JobJnlLine2."No.";
    ...
    Código existente 2
    ...ItemLedgEntry.LOCKTABLE;
    ItemJnlPostLine.RunWithCheck(ItemJnlLine,TempJnlLineDim);
    END;
    ...
    Código nuevo 2
    ...ItemLedgEntry.LOCKTABLE;

    // Add the following line.
    ItemJnlLine2 := ItemJnlLine;

    ItemJnlPostLine.RunWithCheck(ItemJnlLine,TempJnlLineDim);

    // Add the following lines.
    ItemJnlPostLine.CollectTrackingSpecification(TempTrackingSpecification);
    PostWhseJnlLine(ItemJnlLine2,ItemJnlLine2.Quantity,ItemJnlLine2."Quantity (Base)",TempTrackingSpecification);
    // End of the lines.
    ...
  21. Cambie el valor de la propiedad OptionString del parámetro documento de referencia en la función GetSourceDocument en la ventana Líns. Módulo de administración (5775) a la siguiente:
    OptionString=, S. pedido, factura de S., S. abono, devolución S., P. orden, P. factura, Nota crédito, P.venta, dev. Transferencia, dev. Transferencia, Prod. Consumo, elemento conf., fís. Conf., secciones diario reclasif. Conf., Diario consumo., conf., diario de l. MAT., serv. pedido de salida, trabajo diario.
  22. Cambie el código de la función GetSourceDocument en la ventana Líns. Módulo de administración (5775) como sigue:
    Código existente
    ...EXIT;
    END;
    END;
    ERROR(Text000);
    ...
    Código de sustitución
    ...EXIT;
    END;

    // Add the following lines.
    DATABASE::"Job Journal Line":
    BEGIN
    SourceDocument := SourceDocument::"Job Jnl.";
    EXIT;
    END;
    // End of the lines.

    END;
    ERROR(Text000);
    ...
  23. Cambie el código en la función CreateWhseJnlLine en el módulo de administración de WMS (7302) como sigue:
    Código existente
    ...WhseJnlLine."Source Line No." := "Line No.";
    END;
    WhseJnlLine."Source Code" := "Source Code";
    WhseJnlLine."Reason Code" := "Reason Code";
    WhseJnlLine."Registering No. Series" := "Posting No. Series";
    WhseJnlLine."Whse. Document Type" := WhseJnlLine."Whse. Document Type"::" ";

    // Delete the following line.
    WhseJnlLine."Reference Document" := WhseJnlLine."Reference Document"::"Item Journal";

    WhseJnlLine."Reference No." := "Document No.";
    ...
    Código de sustitución
    ...WhseJnlLine."Source Line No." := "Line No.";

    // Add the following lines.
    END ELSE
    IF "Job No." <> '' THEN BEGIN
    WhseJnlLine."Source Type" := DATABASE::"Job Journal Line";
    WhseJnlLine."Source Subtype" := ItemJnlTemplateType;
    WhseMgt.GetSourceDocument(WhseJnlLine."Source Document",WhseJnlLine."Source Type",WhseJnlLine."Source Subtype");
    WhseJnlLine."Source No." := "Document No.";
    WhseJnlLine."Source Line No." := "Line No.";
    // End of the lines.
    END;WhseJnlLine."Source Code" := "Source Code";
    WhseJnlLine."Reason Code" := "Reason Code";
    WhseJnlLine."Registering No. Series" := "Posting No. Series";
    WhseJnlLine."Whse. Document Type" := WhseJnlLine."Whse. Document Type"::" ";

    // Add the following lines.
    IF "Job No." = '' THEN
    WhseJnlLine."Reference Document" := WhseJnlLine."Reference Document"::"Item Journal"
    ELSE
    WhseJnlLine."Reference Document" := WhseJnlLine."Reference Document"::"Job Journal";
    // End of the lines.

    WhseJnlLine."Reference No." := "Document No.";
    ...ine."Source Code" := "Source Code";
    WhseJnlLine."Reason Code" := "Reason Code";
    WhseJnlLine."Registering No. Series" := "Posting No. Series";
    WhseJnlLine."Whse. Document Type" := WhseJnlLine."Whse. Document Type"::" ";

    // Add the following lines.
    IF "Job No." = '' THEN
    WhseJnlLine."Reference Document" := WhseJnlLine."Reference Document"::"Item Journal"
    ELSE
    WhseJnlLine."Reference Document" := WhseJnlLine."Reference Document"::"Job Journal";
    // End of the lines.

    WhseJnlLine."Reference No." := "Document No.";
    ...

Requisitos previos

Debe tener uno de los siguientes productos instalados para aplicar esta revisión:
  • Microsoft Dynamics NAV 2009 R2
  • Microsoft Dynamics NAV 2009 Service Pack 1 (SP1)

Información de eliminación

No se puede quitar este hotfix.

Estado


Microsoft ha confirmado que se trata de un problema de los productos de Microsoft que se enumeran en la sección "Aplicable a".
Nota: Es un artículo "Publicación rápida" creado directamente desde dentro de la organización de soporte técnico de Microsoft. La información contenida en este documento se proporciona como está en respuesta a nuevos problemas. Como consecuencia de la velocidad en la puesta a disposición, los materiales pueden incluir errores tipográficos y podrán revisarse en cualquier momento sin previo aviso. Para obtener información adicional, consulte Condiciones de uso.