¿Dónde están esos datos?

Stéphane Bélanger | 5 de mayo de 2021

¿Dónde están esos datos?

INTRODUCCIÓN

Hace algún tiempo, recibí el encargo de analizar la necesidad de eliminar un almacén que se había creado durante una implantación. El cliente ya no quería utilizar el almacén definido. Pero, por desgracia, como se había utilizado para algunas transacciones de prueba, no se podía eliminar (debido a la integridad referencial obvia) a pesar de que estaba "vacío" hasta donde podía ver el usuario.

De entrada, se puede ver que esta petición es mucho más compleja de lo que el cliente había solicitado. En este caso, no sólo tenemos que eliminar este almacén, sino que para hacerlo, también debemos hacer lo siguiente:

  • Eliminar algunos de los hijos del almacén (por ejemplo, ubicaciones de almacén) que ya no son necesarios;
  • Actualizar algunas de las tablas que utilizan el almacén como clave externa (algunas filas transaccionales) para sustituir el ID del almacén por otro ID de almacén para simular el hecho de que el ID del almacén nunca fue "transaccionado";
  • Agregue algunas tablas estadísticas utilizando el almacén como parte de la clave primaria para simular que el ID de almacén nunca se utilizó en dichos cálculos estadísticos (como Cantidad total disponible por artículo/almacén). Ahora bien, esto podría necesitar una solución diferente para tablas diferentes, pero al menos permitiría que el ID de almacén desapareciera sin causar daños (por ejemplo, un Qty On Hand sobrante debe añadirse a otro almacén).

Además, puede observar que este proceso requiere que seleccionemos otro almacén que se convertirá en el objetivo o beneficiario de nuestras actualizaciones cuando sea necesario. En este caso, el almacén SiteID a eliminar era el 36 y su destino el 4.

Ahora bien, aunque la estructura de la base de datos le resulte familiar, no es tarea fácil encontrar todas las referencias al valor del almacén, aunque conozca (o crea conocer) todas las tablas. Por lo tanto, para ahorrar tiempo buscando las filas, decidí crear una consulta SQL dinámica que me ayudara a encontrar cualquier campo con un patrón de nombre determinado(SiteID es el valor del campo interno del almacén) y con un valor dado (36). Ahora bien, este script no es puramente un script de Acumatica, per se. Esto se debe a la nomenclatura natural y estandarizada de tablas/campos de Acumatica; se hace posible utilizar el tipo de script.

En primer lugar, tenemos que encontrar todas las tablas que tengan un SiteID. Obviamente, en algunos casos, el campo podría llamarse OriginSiteID o DestSiteID, pero se entiende la idea.

Buscar el campo en todas las tablas

GIST: https://gist.github.com/ste-bel/d37daa37915b6ec35f6bbb84e9bb5965

Aquí hay una captura de pantalla de los resultados (parciales) después de ejecutar el script anterior:

¿Dónde están esos datos?

A continuación, quería construir una consulta dinámica que buscara todas las filas de todas las tablas que he encontrado en el resultado anterior. Utilizando esta consulta, quería generar scripts de actualización y eliminación para cada tabla y campo.

Declarar una tabla virtual y algunas variables

GIST: https://gist.github.com/ste-bel/b2e13aab2e6a5fe3fd0169e2dfb2c70d

Construir la consulta dinámica y generar scripts

GIST: https://gist.github.com/ste-bel/5c6609b2a6dee84b491b2b86d471e4c3

Por último, observe el resultado de los valores encontrados y los scripts de actualización/eliminación generados:

GIST: https://gist.github.com/ste-bel/2d4b5f3f6cf434d7fe1ad172d408c233

¿Dónde están esos datos?

RESUMEN

Obviamente, no se trata de una solución rápida para lo que parece ser un problema sencillo. Sin embargo, creo que es una gran herramienta para consultores, ingenieros de soporte y desarrolladores para buscar datos problemáticos/sobrantes. También lo hemos utilizado con éxito con ScreenID, BOMID, InventoryID, CustomerID para solucionar todo tipo de problemas. Además, se puede utilizar para recodificar claves primarias utilizadas por claves externas que eran estrictamente cadenas sin una clave entera subyacente (como ShipVia, TermsID).  

A lo largo de los años me ha salvado la vida en varias ocasiones. Espero que a usted también le resulte útil y le ahorre a usted y a sus colegas mucho tiempo y esfuerzo en el futuro.

¡Feliz codificación!

Autor del blog

La carrera de Stéphane, que abarca más de 25 años, comenzó como desarrollador de ERP en un lenguaje 4GL llamado Miracle. Al cabo de unos años, le enviaron a Filadelfia para trabajar con Weyerhaeuser con un contrato de 10 días que duró 4 años, donde ayudó a rediseñar los módulos de Transporte y EDI. Creó, entre otras, casi una docena de nuevas transacciones EDI. A continuación, se adentró en el desierto de las personalizaciones y el middleware Java en busca de su ERP Graal. En 2016, fue contratado por el estudio de videojuegos Behaviour Interactive, donde seleccionó, implementó e integró un ERP con otras aplicaciones en la nube. ¿Qué ERP? Acumatica por supuesto. En 2018, decidió volver a sus raíces como desarrollador de ERP y empezó a trabajar para partners Gold de Acumatica de primer nivel para compartir sus conocimientos, su pasión y sus ideas. Ha sido feliz desde entonces.

Reciba las actualizaciones del blog en su bandeja de entrada.