Solución problema de secuencias con MySql

  • 1
  • Idea
  • Actualizado Hace 9 meses
p { margin-bottom: 0.25cm; line-height: 120%; }

Solución problema de secuencias con MySql 5.5

Saludos, amigos de la comunidad.

Se me presento el siguiente problema con la generación de secuencias de NCF con empresas que manejan varias sucursales. (Vista la norma 06-2018, Respuestas oficiales de este foro y formato de la factura ya publicado por la DGII).

El problema consiste en que la norma 06-2018 modifica la estructura del NCF y asigna una secuencia única, aun se trate de 2 o mas sucursales. Las sucursales las conecto Vía Internet y alojo los datos en un servidor ubicado físicamente en estados unidos y con replica en local. Debido a que este país no goza de la misma velocidad de Internet que Estados Unidos (por ejemplo) mi servidor MySql experimenta un DELAY (Retrazo) y duplica los números secuenciales de vez en cuando, es decir, le asigna el mismo NCF a dos o mas facturas que lo requieren simultáneamente.

Antes de la referida norma resolvía el problema fácilmente con el siguiente código.

-- Busco la secuencia actual

SELECT numero FROM tabla_aicf where tipo='01' AND aicf='3' AND sucursal='2' FOR UPDATE

ncf= recordset!numero (esta linea puede variar según el lenguaje de programación)

-- Aumento la secuencia en 1 y actualizo

UPDATE tabla_aicf set numero= (ncf+1) where tipo='01' AND aicf='3' AND sucursal='2'

En una red de alta velocidad estas lineas funcionan perfectamente o en un a LAN, pero en este país no funciona vía Internet con una conexión estandar.

Nota: Debido a que la caja 3 es la única que accede a este registro funciona bien en LAN.


Solución definitiva para MySQL.

1- Debes crear la siguiente función en tu servidor Remoto (en mi caso Estados Unidos)


DELIMITER $$

CREATE DEFINER=`usuariomysql`@`%.%.%.%` FUNCTION `sec_ncf`() RETURNS bigint(20)

BEGIN

DECLARE ncf bigint;

SELECT numero INTO ncf FROM tabla_aicf WHERE tipo='01' FOR UPDATE;

UPDATE tabla_aicf set numero=(ncf+1) WHERE tipo='01';

RETURN ncf;

END$$

DELIMITER ;


2- Obtienes la secuencia así: SELECT sec_ncf();

Debido a que el SELECT y el UPDATE ocurren directamente en el servidor remoto las secuencias funcionan a la perfección.

Para cualquier consulta pueden escribirme a: info@akanesoft.com

a su orden, Lic. Alessandri E. Guzman Abad, Contador public y desarrollador de software.

Foto de  alessandri

alessandri

  • 1 mensaje
  • 0 Me gusta de la respuesta

Publicado Hace 9 meses

  • 1
Foto de  VVPM

VVPM, Employee

  • 649 mensajes
  • 69 Me gusta de la respuesta
Respuesta oficial
Le recomendamos realizar su consulta a través del correo impresorasfiscales@dgii.gov.do del Departamento de Soluciones Fiscales, a fin de que de dicha área le ofrezcan la asistencia requerida.