Modificar la fecha o la descripción de la contratación en Navision o Business Central

Introducción/Explicación/Descargo de responsabilidad: Hay muy buenas razones por las que en Navision y Business Central, así como en la mayoría de los programas de contabilidad, como Datev, Diamand y HS, las entradas no se pueden modificar posteriormente. La más importante es, por ejemplo, la GoB, los principios de contabilidad generalmente aceptados. Estos también están establecidos por ley. Esta solución para la corrección posterior de una fecha de contabilización se refiere, por ejemplo, al artículo 146, apartado 4, del AO y al artículo 239, apartado 3. Según estas disposiciones, al modificar los registros, debe poder determinarse el contenido original del registro. Si es necesario realizar modificaciones, debe garantizarse su identificación, de modo que quede claro que se ha modificado el registro original.
Esta función para Navision o Business Central garantiza -dentro de ciertos límites- que
- No se modifiquen los diarios contables, es decir, que desde el diario contable Navision Fibu y el diario de artículos se pueda seguir leyendo cuándo se creó el asiento original.
- La propia transacción ("fecha de contabilización modificada") se introduzca en la nota de factura.

§El artículo 146 (1) AO y el artículo 239 (2) HGB exigen el principio de una contabilidad ordenada y puntual. Según ambos apartados, los registros deben ser completos, correctos, puntuales y ordenados. Y aquí es exactamente donde entra en juego mi función de corrección para Navision o Business Central. Por supuesto, no sirve para mover transacciones de un lado a otro a voluntad. Esto ya está prohibido por la seguridad incorporada de que la nueva fecha de contabilización debe encontrarse dentro del intervalo de contabilización permitido, de modo que no se puede, por ejemplo, retrotraer una factura a un período contable ya comunicado por UVA. Se utiliza para contabilizar retroactivamente en la fecha correcta una factura que se contabilizó accidentalmente en una fecha incorrecta.

Para estar seguro, debería discutir este procedimiento con su auditor antes de integrar esta función en su Navision / Business Central.

Si también desea cambiar la descripción de la reserva, sólo tiene que ampliar la unidad de código para ello. O dirígete a mí.

Esta función de Navision / Business Central se ha creado de esta forma sin cambios a partir de una solicitud concreta de un cliente de un Navision 2009r2 (un Navision 4.03 lógico), por lo que es algo individual, por ejemplo, con la fecha de contabilización en las líneas de la factura de venta. Pero tal como está aquí, también es colo 🙂 .

OBJETO Unidad de código 50003 Modificar fecha de contabilización
{
  OBJETO-PROPIEDADES
  {
    Fecha=02.04.22;
    Hora=07:51:44;
    Modificado=Sí;
    Lista de versiones=;
  }
  PROPIEDADES
  {
    Permisos=TableData 17=m,
                TableData 21=m,
                TableData 32=m,
                TableData 112=m,
                TableData 113=m,
                TableData 169=m,
                TableData 203=m,
                TableData 254=m,
                TableData 379=m,
                TableData 5802=m;
    OnRun=BEGIN
          END;

  }
  CÓDIGO
  {
    VAR
      GLentry@1119455019 : Registro 17;
      GLentry2@1119455018 : Registro 17;
      VATentry@1119455017 : Registro 254;
      VATentry2@1119455016 : Registro 254;
      CustLedgEntry@1119455015 : Registro 21;
      CustLedgEntry2@1119455014 : Registro 21;
      DetCustLedgEntry@1119455013 : Registro 379;
      DetCustLedgEntry2@1119455012 : Registro 379;
      ItemLedgEntry@1119455011 : Registro 32;
      ItemLedgEntry2@1119455010 : Registro 32;
      ValueEntry@1119455009 : Registro 5802;
      ValueEntry2@1119455008 : Registro 5802;
      ResLedgEntry@1119455007 : Registro 203;
      ResLedgEntry2@1119455006 : Registro 203;
      JobLedgEntry@1119455005 : Registro 169;
      JobLedgEntry2@1119455004 : Registro 169;
      GenJrnCheckLine@1119455000 : Unidad de código 11;
      Window@1119455020 : Diálogo;
      NewPostingDate@1119455021 : Fecha;

    PROCEDURE GetNewPostDate@1119455002(pInitPostingDate@1119455000 : Fecha) : Date;
    BEGIN
      Window.OPEN('Nueva fecha de contabilización: #1#########');
      Window.INPUT(1,pInitPostingDate);
      Window.CLOSE;
      EXIT(pInitPostingDate);
    FIN;

    PROCEDURE ChangeInvoicePostingDate@1119455000(pSalesInvHeader@1119455000 : Registro 112);
    VAR
      LíneaFacturaVenta@1119455001 : Registro 113;
      PaymentTerms@1119455002 : Registro 3;
      SalesCommentLines@1119455003 : Registro 44;
    BEGIN
      NewPostingDate := GetNewPostDate(pSalesInvHeader. "Posting Date");
      IF NewPostingDate = pSalesInvHeader. "Posting Date" THEN
        EXIT;
      IF GenJrnCheckLine.DateNotAllowed(NewPostingDate) THEN;

      SalesCommentLines. "Document Type" := SalesCommentLines. "Document Type":: "Posted Invoice";
      SalesCommentLines. "No." := pSalesInvHeader. "Nº";
      LíneasDeComentarioDeVenta "NºLínea" := 1 := 1; //La parte superior del comentario
      LíneasVentaComentario.Fecha := HOY;
      SalesCommentLines.Comment := STRSUBSTNO('¡Fecha de reserva cambiada! %1 -> %2„,pSalesInvHeader. 'Posting Date",NewPostingDate);
      WHILE NOT SalesCommentLines.INSERT(TRUE) DO
        SalesCommentLines. "Line No." += 1;

      WITH pSalesInvHeader DO BEGIN
        IF "Document Date" = "Posting Date" THEN
          "Fecha de documento" := NuevaFecha de contabilización;
        "Fecha de contabilización" := NewPostingDate;
        IF ("Payment Terms Code"  "') AND ('Document Date" = "Posting Date") THEN BEGIN
          PaymentTerms.GET("Código de condiciones de pago");
          "Fecha de vencimiento" := CALCDATE(CondicionesPago. "Cálculo Fecha Vencimiento", "Fecha Documento");
          Fecha de descuento" := CALCDATE(PaymentTerms. Descuento" := CALCDATE(CondicionesPago. "Cálculo Fecha Descuento", "Fecha Documento");
        END;
      FIN;


      CON GLentry DO BEGIN
        SETCURRENTKEY("Nº documento");
        SETRANGE("Nº documento",pSalesInvHeader. "Nº");
        SETRANGE("Fecha de contabilización",pSalesInvHeader. "Fecha de contabilización");
        IF FINDSET THEN REPEAT
          GLentry2 := GLentry;
          GLentry2. "Fecha de contabilización" := NewPostingDate;
          GLentry2.MODIFY;
        HASTA NEXT = 0;
      END;

      WITH VATentry DO BEGIN
        SETCURRENTKEY("Nº documento");
        SETRANGE("Nº documento",pSalesInvHeader. "Nº");
        SETRANGE("Fecha de contabilización",pSalesInvHeader. "Fecha de contabilización");
        IF FINDSET THEN REPEAT
          VATentry2 := VATentry;
          VATentry2. "Fecha de contabilización" := NewPostingDate;
          VATentry2.MODIFY;
        HASTA SIGUIENTE = 0;
      END;

      WITH CustLedgEntry DO BEGIN
        SETCURRENTKEY("Nº Documento");
        SETRANGE("Nº documento",pSalesInvHeader. "Nº");
        SETRANGE("Fecha de contabilización",pSalesInvHeader. "Fecha de contabilización");
        IF FINDSET THEN REPEAT
          CustLedgEntry2 := CustLedgEntry;
          CustLedgEntry2. "Posting Date" := NewPostingDate;
          CustLedgEntry2. "Fecha Documento" := pSalesInvHeader. "Fecha Documento";
          CustLedgEntry2. "Fecha de vencimiento" := pSalesInvHeader. "Fecha de vencimiento";
          CustLedgEntry2. "Pmt. Descuento" := pCabeceraVentas. Discount Date";
          CustLedgEntry2.MODIFY;
        HASTA QUE NEXT = 0;
      FIN;

      WITH DetCustLedgEntry DO BEGIN
        SETCURRENTKEY("Nº Documento");
        SETRANGE("Nº documento",pSalesInvHeader. "Nº");
        SETRANGE("Fecha de contabilización",pSalesInvHeader. "Fecha de contabilización");
        IF FINDSET THEN REPEAT
          DetCustLedgEntry2 := DetCustLedgEntry;
          DetCustLedgEntry2. "Posting Date" := NewPostingDate;
          DetCustLedgEntry2.MODIFY;
        HASTA NEXT = 0;
      FIN;

      WITH ItemLedgEntry DO BEGIN
        SETCURRENTKEY("Nº Documento");
        SETRANGE("Nº documento",pSalesInvHeader. "Nº");
        SETRANGE("Fecha de contabilización",pSalesInvHeader. "Fecha de contabilización");
        IF FINDSET THEN REPEAT
          ItemLedgEntry2 := ItemLedgEntry;
          ItemLedgEntry2. "Posting Date" := NewPostingDate;
          ItemLedgEntry2.MODIFY;
        HASTA NEXT = 0;
      FIN;

      WITH ValueEntry DO BEGIN
        SETCURRENTKEY("Nº Documento");
        SETRANGE("Nº documento",pSalesInvHeader. "Nº");
        SETRANGE("Fecha de contabilización",pSalesInvHeader. "Fecha de contabilización");
        IF FINDSET THEN REPEAT
          ValorEntrada2 := ValorEntrada;
          ValueEntry2. "Fecha de contabilización" := NewPostingDate;
          ValueEntry2.MODIFY;
        HASTA SIGUIENTE = 0;
      FIN;

      WITH ResLedgEntry DO BEGIN
        SETCURRENTKEY("Nº Documento");
        SETRANGE("Nº documento",pSalesInvHeader. "Nº");
        SETRANGE("Fecha de contabilización",pSalesInvHeader. "Fecha de contabilización");
        IF FINDSET THEN REPEAT
          ResLedgEntry2 := ResLedgEntry;
          ResLedgEntry2. "Fecha de contabilización" := NewPostingDate;
          ResLedgEntry2.MODIFY;
        HASTA NEXT = 0;
      FIN;

      WITH JobLedgEntry DO BEGIN
        SETCURRENTKEY("Nº Documento");
        SETRANGE("Nº documento",pSalesInvHeader. "Nº");
        SETRANGE("Fecha de contabilización",pSalesInvHeader. "Fecha de contabilización");
        IF FINDSET THEN REPEAT
          JobLedgEntry2 := JobLedgEntry;
          JobLedgEntry2. "Posting Date" := NewPostingDate;
          JobLedgEntry2.MODIFY;
        HASTA NEXT = 0;
      FIN;

      pSalesInvHeader.MODIFY;
      SalesInvoiceLine.SETRANGE("Nº documento",pSalesInvHeader. "Nº");
      SalesInvoiceLine.MODIFYALL("Fecha de contabilización",pSalesInvHeader. "Fecha de contabilización");
    FIN;

    BEGIN
    {
    }
    FIN.
  }
}

Además, la unidad de código independiente garantiza que sólo pueda delegar toda la función en empleados que trabajen de forma responsable ("Derechos de acceso")