El sistema no refleja el importe de IVA ajustado manualmente después de publicar un diario general en la versión eslovaca o la versión checa de Microsoft Dynamics NAV 5.0 Service Pack 1

Se aplica a
Microsoft Dynamics NAV 5.0

Este artículo se aplica a Microsoft Dynamics NAV para los siguientes países y configuraciones regionales de idioma.

  • Eslovaco (sk)
  • Checo (cz)

Síntomas

Suponga que crea una nueva línea en un diario general en la versión eslovaca o en la versión checa de Microsoft Dynamics NAV 5.0 Service Pack 1 (SP1). Después de ajustar manualmente el importe del IVA y registrar el diario general, el sistema recalculará el importe del impuesto sobre el valor añadido (IVA) en la contabilización del diario y reemplazará el importe ajustado del IVA utilizando el valor calculado.

Resolución

Información de revisiones

Una revisión compatible ya está disponible en Microsoft. Sin embargo, solo está pensado para corregir el problema que se describe en este artículo. Aplicarlo solo a los sistemas que experimentan este problema específico. Esta revisión puede recibir pruebas adicionales. Por lo tanto, si no se ve afectado gravemente por este problema, le recomendamos que espere al siguiente Service Pack de Microsoft Dynamics NAV 5.0 o a la siguiente versión de Microsoft Dynamics NAV que contenga esta revisión.

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

          

Información de instalación

Microsoft proporciona ejemplos de programación solo para ilustración, sin garantía expresa o implícita. Esto incluye, entre otras, las garantías implícitas de comerciabilidad o idoneidad para un propósito determinado. En este artículo se supone que está familiarizado con el lenguaje de programación que se muestra y con las herramientas que se usan 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 adaptados a sus necesidades específicas.

Nota Antes de instalar esta revisión, verifique que todos los usuarios cliente de Microsoft Navision hayan cerrado sesión en el sistema. Esto incluye a los usuarios cliente de Microsoft Navision Application Services (NAS). Usted debe ser el único usuario del cliente que ha iniciado sesión al implementar esta revisión.

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

Le recomendamos que la cuenta de usuario en la ventana Inicios de sesión de Windows o en la ventana Inicios de sesión de base de datos tenga asignado el id. de rol "SUPER". Si no se puede asignar a la cuenta de usuario el id. de rol "SUPER", debe comprobar que la cuenta de usuario tiene los permisos siguientes:

  • El permiso Modificar para el objeto que va a cambiar.
  • El permiso Execute para el objeto System Object ID 5210 y para el objeto System Object ID 9015.

                
Nota No es necesario tener derechos sobre los almacenes de datos a menos que tenga que realizar una reparación de datos.

Cambios de código

Nota Pruebe siempre las correcciones de código en un entorno controlado antes de aplicar las correcciones a los equipos de producción.
Para resolver este problema, siga estos pasos:

  1. Cambie el código en el valor de IVA - Desencadenador OnValidate en la generación. Tabla Línea del Diario (81) como se indica a continuación:
    Código existente

    ...
    "VAT Difference" :=
    "VAT Amount" -
    ROUND(
    
    // Delete the following lines. 
    Amount * "VAT %" / (100 + "VAT %"),
    Currency."Amount Rounding Precision",Currency.VATRoundingDirection);
    // End of the lines.
    
    GLSetup.GET;
    GLSetup.GetRoundingParamentersLCY(Currency,RoundingPrecisionLCY,RoundingDirectionLCY);
    ...
    

    Código de reemplazo

    ...
    "VAT Difference" :=
    "VAT Amount" -
    ROUND(
    
    // Add the following lines. 
    Amount - ROUND(Amount / (1 + "VAT %" / 100),
    Currency."Amount Rounding Precision",Currency.VATRoundingDirection));
    //End of the lines. 
    
    GLSetup.GET;
    GLSetup.GetRoundingParamentersLCY(Currency,RoundingPrecisionLCY,RoundingDirectionLCY);
    ...
    
  2. Cambie el código en el % de IVA - Desencadenador OnValidate en la generación. Tabla Línea del Diario (81) como se indica a continuación:
    Código existente

    ...
    CASE "VAT Calculation Type" OF
    "VAT Calculation Type"::"Normal VAT",
    "VAT Calculation Type"::"Reverse Charge VAT":
    
    // Delete the following lines.
    BEGIN
    GLSetup.GET;
    IF GLSetup."Round VAT Coeff." THEN BEGIN
    GLSetup.GetRoundingParamenters(Currency,RoundingPrecision,RoundingDirection);
    "VAT Amount" :=
    ROUND(
    Amount * ROUND("VAT %" / (100 + "VAT %"),GLSetup."VAT Coeff. Rounding Precision"),
    RoundingPrecision,
    RoundingDirection);
    "VAT Base Amount" := Amount - "VAT Amount";
    END ELSE BEGIN
    "VAT Base Amount" :=
    ROUND(Amount / (1 + "VAT %" / 100),Currency."Amount Rounding Precision");
    "VAT Amount" :=
    ROUND(Amount - "VAT Base Amount",Currency."Amount Rounding Precision",Currency.VATRoundingDirection);
    END;
    END;
    // End of the lines.
    
    "VAT Calculation Type"::"Full VAT":
    BEGIN
    IF ("Prepayment Type" = "Prepayment Type"::Advance) AND NOT "System-Created Entry" AND
    ...
    

    Código de reemplazo

    ...
    CASE "VAT Calculation Type" OF
    "VAT Calculation Type"::"Normal VAT",
    "VAT Calculation Type"::"Reverse Charge VAT":
    
    // Add the following line. 
    CalcVATAmount(Amount,"VAT Amount","VAT Base Amount","VAT %"); 
    
    "VAT Calculation Type"::"Full VAT":
    BEGIN
    IF ("Prepayment Type" = "Prepayment Type"::Advance) AND NOT "System-Created Entry" AND
    ...
    
  3. Cambie el código en el % de IVA Bal. - Desencadenador OnValidate en la generación. Tabla Línea del Diario (81) como se indica a continuación:
    Código existente

    ...
    CASE "Bal. VAT Calculation Type" OF
    "Bal. VAT Calculation Type"::"Normal VAT",
    "Bal. VAT Calculation Type"::"Reverse Charge VAT":
    
    // Delete the following lines. 
    BEGIN
    GLSetup.GET;
    IF GLSetup."Round VAT Coeff." THEN BEGIN
    GLSetup.GetRoundingParamenters(Currency,RoundingPrecision,RoundingDirection);
    "Bal. VAT Amount" :=
    ROUND(
    -Amount * ROUND("Bal. VAT %" / (100 + "Bal. VAT %"),GLSetup."VAT Coeff. Rounding Precision"),
    RoundingPrecision,
    RoundingDirection);
    "Bal. VAT Base Amount" := -Amount - "Bal. VAT Amount";
    END ELSE BEGIN
    "Bal. VAT Base Amount" :=
    ROUND(-Amount / (1 + "Bal. VAT %" / 100),Currency."Amount Rounding Precision");
    "Bal. VAT Amount" :=
    ROUND(-Amount - "Bal. VAT Base Amount",Currency."Amount Rounding Precision",Currency.VATRoundingDirection);
    END;
    END;
    // End of the lines. 
    
    "Bal. VAT Calculation Type"::"Full VAT":
    "Bal. VAT Amount" := -Amount;
    "Bal. VAT Calculation Type"::"Sales Tax":
    ...
    

    Código de reemplazo

    ...
    CASE "Bal. VAT Calculation Type" OF
    "Bal. VAT Calculation Type"::"Normal VAT",
    "Bal. VAT Calculation Type"::"Reverse Charge VAT":
    // Add the following line 
    CalcVATAmount(-Amount,"Bal. VAT Amount","Bal. VAT Base Amount","Bal. VAT %"); 
    "Bal. VAT Calculation Type"::"Full VAT":
    "Bal. VAT Amount" := -Amount;
    "Bal. VAT Calculation Type"::"Sales Tax":
    ...
    
  4. Cree una nueva función local CalcVATAmount en la generación. Tabla Línea del Diario (81) como se indica a continuación:

    LOCAL PROCEDURE CalcVATAmount@1220000(Amount@1220000 : Decimal;VAR VATAmount@1220001 : Decimal;VAR VATBase@1220002 : Decimal;VATPercent@1220003 : Decimal);
    VAR
    RoundingPrecision@1220004 : Decimal;
    RoundingDirection@1220005 : Text[1];
    BEGIN
    GLSetup.GET;
    IF GLSetup."Round VAT Coeff." THEN BEGIN
    GLSetup.GetRoundingParamenters(Currency,RoundingPrecision,RoundingDirection);
    VATAmount :=
    ROUND(
    Amount * ROUND(VATPercent / (100 + VATPercent),GLSetup."VAT Coeff. Rounding Precision"),
    RoundingPrecision,
    RoundingDirection); 
    VATBase := Amount - VATAmount;
    END ELSE BEGIN
    VATBase :=
    ROUND(
    Amount / (1 + VATPercent / 100),
    Currency."Amount Rounding Precision",
    Currency.VATRoundingDirection);
    VATAmount := Amount - VATBase;
    END;
    END;
    
  5. Cambie el código de la función InitVat en la generación. Jnl.-Unidades de código de línea de poste (12). Para hacerlo, siga estos pasos.

    1. Elimine las siguientes variables locales:

      • CalculatedVATAmtLCY : Decimal
      • RedondeoPrecisiónLCY : Decimal
      • RoundingDirectionLCY : Texto[1]
    2. Agregue una nueva variable y, a continuación, especifique la variable de la siguiente manera:

      • Nombre: VATAmtLCY
      • Tipo de datos:Decimal
    3. Cambie el código de la siguiente manera:
      Código existente

      ...
      GenJnlLine."VAT Amount LCY (Non Deduct.)";
      GLEntry."VAT Amount" := "Amount (LCY)" - GLEntry.Amount;
      
      // Delete the following lines. 
      GLSetup.GET;
      GLSetup.GetRoundingParamentersLCY(Currency,RoundingPrecisionLCY,RoundingDirectionLCY);
      IF GLSetup."Round VAT Coeff." THEN
      CalculatedVATAmtLCY :=
      ROUND(
      "Amount (LCY)" * ROUND("VAT %" / (100 + "VAT %"),GLSetup."VAT Coeff. Rounding Precision"),
      RoundingPrecisionLCY,
      RoundingDirectionLCY)
      ELSE
      CalculatedVATAmtLCY :=
      ROUND(
      "Amount (LCY)" - ROUND("Amount (LCY)" / (1 + "VAT %" / 100),RoundingPrecisionLCY),
      RoundingPrecisionLCY,
      RoundingDirectionLCY);
      IF ("VAT Amount (LCY)" <> CalculatedVATAmtLCY) AND
      ("Currency Code" <> '')
      THEN BEGIN 
      // End of the lines. 
      
      GLEntry.Amount := "VAT Base Amount (LCY)";
      GLEntry."VAT Amount" := "VAT Amount (LCY)"; 
      END;
      ...
      

      Código de reemplazo

      ...
      GenJnlLine."VAT Amount LCY (Non Deduct.)";
      GLEntry."VAT Amount" := "Amount (LCY)" - GLEntry.Amount;
      
      // Add the following lines. 
      VATAmtLCY := CalculatedVATAmountLCY;
      IF ("VAT Amount (LCY)" <> VATAmtLCY) AND ("Currency Code" <> '') THEN BEGIN 
      //End of the lines. 
      
      GLEntry.Amount := "VAT Base Amount (LCY)";
      GLEntry."VAT Amount" := "VAT Amount (LCY)";
      
      // Add the following lines.
      END ELSE
      IF GLSetup."Round VAT Coeff." THEN BEGIN
      GLEntry."VAT Amount" := VATAmtLCY - "VAT Amount LCY (Non Deduct.)";
      GLEntry.Amount := "Amount (LCY)" - GLEntry."VAT Amount";
      //End of the lines. 
      
      END; 
      ...
      
  6. Cambie el código en la función InsertVAT en la generación. Jnl.-Unidades de código de línea de poste (12). Para hacerlo, siga estos pasos.

    1. Elimine las siguientes variables locales:

      • CalculatedVATAmtLCY : Decimal
      • RedondeoPrecisiónLCY : Decimal
      • RoundingDirectionLCY : Texto[1]
    2. Cambie el código de la siguiente manera:
      Código existente

      ...
      "Posting Date","Currency Code","VAT Difference",
      CurrExchRate.ExchangeRate("Posting Date","Currency Code")));
      
      // Delete the following lines. 
      GLSetup.GET;
      GLSetup.GetRoundingParamentersLCY(Currency,RoundingPrecisionLCY,RoundingDirectionLCY);
      IF GLSetup."Round VAT Coeff." THEN
      CalculatedVATAmtLCY :=
      ROUND(
      "Amount (LCY)" * ROUND("VAT %" / (100 + "VAT %"),GLSetup."VAT Coeff. Rounding Precision"),
      RoundingPrecisionLCY,
      RoundingDirectionLCY)
      ELSE
      CalculatedVATAmtLCY :=
      ROUND(
      "Amount (LCY)" - ROUND("Amount (LCY)" / (1 + "VAT %" / 100),RoundingPrecisionLCY),
      RoundingPrecisionLCY,
      RoundingDirectionLCY);
      IF ("VAT Amount (LCY)" <> CalculatedVATAmtLCY) AND
      ("Currency Code" <> '')
      THEN
      VATDifferenceLCY := "VAT Amount (LCY)" - CalculatedVATAmtLCY; 
      // End of the lines. 
      
      IF "VAT Calculation Type" = "VAT Calculation Type"::"Sales Tax" THEN BEGIN
      IF TaxJurisdiction.Code <> TaxDetail."Tax Jurisdiction Code" THEN
      ...
      

      Código de reemplazo

      ...
      "Posting Date","Currency Code","VAT Difference",
      CurrExchRate.ExchangeRate("Posting Date","Currency Code")));
      
      // Add the following lines. 
      IF "VAT Amount (LCY)" <> CalculatedVATAmountLCY THEN
      VATDifferenceLCY := "VAT Amount (LCY)" - CalculatedVATAmountLCY; 
      //End of the lines. 
      
      IF "VAT Calculation Type" = "VAT Calculation Type"::"Sales Tax" THEN BEGIN
      IF TaxJurisdiction.Code <> TaxDetail."Tax Jurisdiction Code" THEN
      ...
      
  7. Cree una nueva función local CalculatedVATAmountLCY en la generación. Jnl.-Unidades de código de línea de poste (12) de la siguiente manera:

    LOCAL PROCEDURE CalculatedVATAmountLCY@1220009() : Decimal;
    VAR
    CalculatedVATAmtLCY@1220002 : Decimal;
    RoundingPrecisionLCY@1220001 : Decimal;
    RoundingDirectionLCY@1220000 : Text[1];
    BEGIN
    WITH GenJnlLine DO BEGIN
    IF "Currency Code" = '' THEN
    EXIT("VAT Amount (LCY)");
    GLSetup.GET;
    GLSetup.GetRoundingParamentersLCY(Currency,RoundingPrecisionLCY,RoundingDirectionLCY);
    IF GLSetup."Round VAT Coeff." THEN
    CalculatedVATAmtLCY :=
    ROUND(
    "Amount (LCY)" * ROUND("VAT %" / (100 + "VAT %"),GLSetup."VAT Coeff. Rounding Precision"),
    RoundingPrecisionLCY,
    RoundingDirectionLCY)
    ELSE
    CalculatedVATAmtLCY :=
    ROUND(
    "Amount (LCY)" - ROUND("Amount (LCY)" / (1 + "VAT %" / 100),RoundingPrecisionLCY),
    RoundingPrecisionLCY,
    RoundingDirectionLCY);
    EXIT(CalculatedVATAmtLCY);
    END;
    END;
    

Requisitos previos

Debe tener uno de los siguientes productos instalados para aplicar esta revisión:

  • La versión eslovaca de Microsoft Dynamics NAV 5.0 Service Pack 1
  • La versión checa de Microsoft Dynamics NAV 5.0 Service Pack 1

Además, debe tener instalado el 2527241 de revisiones para aplicar esta revisión.
Para obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:

2527241 El importe de IVA registrado en la entrada de IVA es incorrecto al usar la funcionalidad "Redondear el IVA Coeff" en la versión checa de Microsoft Dynamics NAV 5.0 SP1 con feature pack 1 instalado

Información sobre la eliminación

No puede quitar esta revisión.

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 Esto es un artículo "PUBLICACIÓN RÁPIDA" creado directamente desde la organización de soporte técnico de Microsoft. La información contenida se proporciona tal cual en respuesta a nuevos problemas. Como resultado de la rapidez en la publicación, es posible que los materiales incluyan errores tipográficos. Además, se pueden revisar en cualquier momento sin previo aviso. Consulte los Términos de uso para otras consideraciones.