CASO DE USO II: Modificación de Procedimiento Almacenado del informe Estados de OT (Store Procedure: CZSP_CREP_PP008_Predeterminada)
Requerimiento:
Se requiere personalizar la salida del reporte de CAPATAZ, Planeamiento y Control de Producción, Informes, PP008 ESTADOS DE OT, para que muestre el valor de la función de N_DESPACHO que tiene asignada cada artículo de las Órdenes de Trabajo. Este campo, lógicamente, no se encuentra en la consulta original del reporte.
Solución Propuesta:
a) Personalizar el Procedimiento Almacenado SQL del reporte PP008 ESTADOS DE OT de CAPATAZ denominado CZSP_CREP_PP008_Predeterminada, agregando el campo N_DESPACHO del artículo de la Orden de Trabajo.
Implementación:
a.1) Desde el menú principal de CAPATAZ, herramientas, ingresaremos al Editor SQL.

a.2) Dentro del Editor SQL, seleccionaremos el Procedimiento Almacenado a modificar. En este caso, CZSP_CREP_PP008_Predeterminada y presionaremos el botón 5 Modificar.

Referencias de la imagen anterior:
- Procedimiento CZSP_CREP_PP008_Predeterminada seleccionada para modificar.
- Panel que muestra el código SQL del procedimiento.
- Panel que muestra la lista de parámetros del procedimiento.
- Botón para copiar el componente SQL seleccionado.
- Botón para modificar el componente SQL seleccionado, dentro del panel de código SQL.
- Botón para exportar el script SQL de creación del componente SQL seleccionado (lo guarda en un archivo con el nombre del componente SQL, en la carpeta DOCUMENTOS).
- Botón Guardar, para guardar los cambios del componente.
a.3) Exportaremos el script original, para modificarlo en una consola SQL.


El código SQL particular de cada personalización, puede ser editado dentro del panel de CAPATAZ o con ayuda de una consola SqL, como el Administrador Sql (SQL Server Managment).
a.4) Editaremos el código SQL del procedimiento, para agregarle el campo n_despacho. Mostramos a continuación el código definitivo. Se resaltan las líneas personalizadas (38;48;64;72).
DROP PROCEDURE CZSP_CREP_PP008_PREDETERMINADA
GO
CREATE PROCEDURE CZSP_CREP_PP008_PREDETERMINADA (
@des_of AS VARCHAR(016) = '',
@has_of AS VARCHAR(016) = 'zzzzzzzzzzzzzzzz',
@des_art AS VARCHAR(015) = '',
@has_art AS VARCHAR(015) = 'zzzzzzzzzzzzzzz',
@des_comprob_orig AS VARCHAR(016) = '',
@has_comprob_orig AS VARCHAR(016) = 'zzzzzzzzzzzzzzzz',
@des_prod_ori AS VARCHAR(015) = '',
@has_prod_ori AS VARCHAR(015) = 'zzzzzzzzzzzzzzz',
@esta AS CHAR(1) = 'A',
@estg AS CHAR(1) = 'G',
@estf AS CHAR(1) = 'F',
@estc AS CHAR(1) = 'C',
@esti AS CHAR(1) = 'I',
@externa AS BIT = 1,
@interna AS BIT = 1,
@pt AS CHAR(2) = 'PT',
@sc AS CHAR(2) = 'SC',
@in AS CHAR(2) = 'IN',
@ai AS CHAR(2) = 'AR',
@vi AS CHAR(3) = 'SCV',
@orden AS INT = 1
)
AS
BEGIN
SET NOCOUNT ON
SELECT CZAP10.t_comp, CZAP10.n_of, CZAP11.tipo_orig, CZAP11.nro_orig, CZAP10.cod_articu, CZSTA11.descripcio, CZSTA11.desc_adic, CZSTA11.sinonimo, CZSTA11.cod_barra,
CZSTA11.unidad_med, CZAP10.cant, CZAP10.fecha_gen, CZAP10.fecha_prg, CZAP10.fecha_entr, CZAP10.fecha_lan, CZAP10.fecha_cie, CZAP10.estado,
CASE WHEN CZAP10.externa = 1 THEN 'EXT' ELSE 'INT' END AS Tipo, CZAP10.observacio,
CZAP10.copias, CZAP10.cod_deposi, CZSTA22.nombre_suc as nom_deposi, CZAP10.leyenda_1, CZAP10.leyenda_2, CZAP10.leyenda_3, CZAP10.leyenda_4, CZAP10.leyenda_5,
CZAP10.contabiliz, CZAP10.usu_gen, CZAP10.id_db,
SUBSTRING(CZSTA11.coment,1,250) AS coment1, SUBSTRING(CZSTA11.coment,251,500) AS coment2,
SUBSTRING(CZSTA11.coment,501,750) AS coment3, SUBSTRING(CZSTA11.coment,751,1000) AS coment4,
CZAP10.n_partida, CZSTA08.n_despacho,CZSTA08.fecha_vto, CZCATART.cat, CZAP11.cod_art_pr, CAST(CASE WHEN MAR.cuenta IS NULL THEN 0 ELSE 1 END AS BIT) AS multiarticulo, CZAP10.porc_avanc,
CZAS31.FNDESPACHO
INTO #TEMP
FROM CZAP10
INNER JOIN CZSTA11 ON CZAP10.cod_articu = CZSTA11.cod_articu
INNER JOIN CZAP11 ON CZAP10.t_comp = CZAP11.t_comp AND CZAP10.n_of = CZAP11.n_of
INNER JOIN CZSTA22 ON CZAP10.cod_deposi = CZSTA22.cod_sucurs
INNER JOIN CZCATART ON CZAP10.cod_articu = CZCATART.cod_articu
LEFT JOIN CZSTA08 ON CZAP10.n_partida = CZSTA08.n_partida
LEFT JOIN (SELECT T_OT_HIJA as t_comp, N_OT_HIJA as n_of, COUNT(*) AS cuenta FROM CZAP49 GROUP BY T_OT_HIJA, N_OT_HIJA) MAR
ON CZAP10.t_comp = MAR.t_comp AND CZAP10.n_of = MAR.n_of
LEFT JOIN CZAS31 ON CZAP10.cod_articu = CZAS31.cod_articu
WHERE CZAP10.t_comp+CZAP10.n_of BETWEEN @des_of AND @has_of
AND CZAP11.cod_art_pr BETWEEN @des_prod_ori AND @has_prod_ori
AND CZAP11.tipo_orig+CZAP11.nro_orig BETWEEN @des_comprob_orig AND @has_comprob_orig
AND CZAP10.cod_articu BETWEEN @des_art AND @has_art
AND CZAP10.ESTADO IN(@estg, @esti, @estf, @estc)
AND (NOT CZAP10.externa = @interna OR CZAP10.externa = @externa)
AND CZCATART.cat IN (@pt, @sc, @in, @ai, @vi) AND CZAP10.TIPO = 'OT'
UNION
SELECT CZAP10.t_comp, CZAP10.n_of, 'N/A' AS tipo_orig, '' AS nro_orig, CZAP10.cod_articu, CZSTA11.descripcio, CZSTA11.desc_adic, CZSTA11.sinonimo, CZSTA11.cod_barra,
CZSTA11.unidad_med, CZAP10.cant, CZAP10.fecha_gen, CZAP10.fecha_prg, CZAP10.fecha_entr, CZAP10.fecha_lan, CZAP10.fecha_cie, CZAP10.estado,
CASE WHEN CZAP10.externa = 1 THEN 'EXT' ELSE 'INT' END AS Tipo, CZAP10.observacio,
CZAP10.copias, CZAP10.cod_deposi, CZSTA22.nombre_suc as nom_deposi, CZAP10.leyenda_1, CZAP10.leyenda_2, CZAP10.leyenda_3, CZAP10.leyenda_4, CZAP10.leyenda_5, CZAP10.contabiliz, CZAP10.usu_gen, CZAP10.id_db,
SUBSTRING(CZSTA11.coment,1,250) AS coment1, SUBSTRING(CZSTA11.coment,251,500) AS coment2,
SUBSTRING(CZSTA11.coment,501,750) AS coment3, SUBSTRING(CZSTA11.coment,751,1000) AS coment4,
CZAP10.n_partida, CZSTA08.n_despacho,CZSTA08.fecha_vto, CZCATART.cat, '' AS cod_art_pr, CAST(CASE WHEN MAR.cuenta IS NULL THEN 0 ELSE 1 END AS BIT) AS multiarticulo, CZAP10.porc_avanc,
CZAS31.FNDESPACHO
FROM CZAP10
INNER JOIN CZSTA11 ON CZAP10.cod_articu = CZSTA11.cod_articu
INNER JOIN CZSTA22 ON CZAP10.cod_deposi = CZSTA22.cod_sucurs
INNER JOIN CZCATART ON CZAP10.cod_articu = CZCATART.cod_articu
LEFT JOIN CZSTA08 ON CZAP10.n_partida = CZSTA08.n_partida
LEFT JOIN (SELECT T_OT_HIJA as t_comp, N_OT_HIJA as n_of, COUNT(*) AS cuenta FROM CZAP49 GROUP BY T_OT_HIJA, N_OT_HIJA) MAR
ON CZAP10.t_comp = MAR.t_comp AND CZAP10.n_of = MAR.n_of
LEFT JOIN CZAS31 ON CZAP10.cod_articu = CZAS31.cod_articu
WHERE CZAP10.t_comp+CZAP10.n_of BETWEEN @des_of AND @has_of
AND CZAP10.cod_articu BETWEEN @des_art AND @has_art
AND CZAP10.ESTADO IN(@esta)
AND (NOT CZAP10.externa = @interna OR CZAP10.externa = @externa)
AND CZCATART.cat IN (@pt, @sc, @in, @ai, @vi) AND CZAP10.TIPO = 'OT'
IF @orden = 1
BEGIN
SELECT * FROM #TEMP ORDER BY t_comp, n_of
END
IF @orden = 2
BEGIN
SELECT * FROM #TEMP ORDER BY tipo_orig, nro_orig, t_comp, n_of
END
IF @orden = 3
BEGIN
SELECT * FROM #TEMP ORDER BY fecha_gen
END
IF @orden = 4
BEGIN
SELECT * FROM #TEMP ORDER BY cod_articu
END
IF @orden = 5
BEGIN
SELECT * FROM #TEMP ORDER BY estado
END
IF @orden = 6
BEGIN
SELECT * FROM #TEMP ORDER BY Tipo
END
END
a.5) Ejecutar el script personalizado, desde una consola SQL en la base de datos de la empresa, para que quede definido con la personalización deseada.
- Comentario 1: con este procedimiento, el componente personalizado, NO se conservará ante cambios de versión.
- Comentario 2: para que esta personalización sobreviva a cambios de versión y reintegraciones de empresa, una alternativa puede ser colocar el código sql de definición del componente (fondo verde) al final del componente POS_INTEGRA.SQL, accesible desde el EDITOR SQL de CAPATAZ.
Referencias de la imagen anterior
- Código POS_INTEGRA.SQL, seleccionarlo para editar el código.
- Botón Modificar, permite editar el código en el panel de código.
- Panel de código SQL, para ver o modificar el componente.
- Botón Guardar, para guardar el código modificado.
De esta forma, luego de reintegrar la empresa o ante reintegraciones realizadas por un cambio de versión de CAPATAZ, se ejecutará este código POS_INTEGRA.SQL, redefiniendo los componentes personalizados deseados. En nuestro ejemplo, el componente CZSP_CREP_PP008_Predeterminada que corresponde a la consulta del informe PP008 ESTADOS DE OT.
Fin del CASO DE USO II.
Conclusiones
Seguramente, con los ejemplos mostrados en estas notas, los lectores por extrapolación podrán imaginar otras posibilidades de personalización, para cubrir los requerimientos claves de cada negocio.
Los usuarios no técnicos, pueden apoyarse en sus consultores CAPATAZ, o su proveedor CAPATAZ, para consultar acerca de la posibilidad de modificación de los componentes de CAPATAZ existentes.
En forma extensiva, es posible personalizar cualquier componente SQL provisto por CAPATAZ.
Finalmente, es posible también, con pequeños cambios en los procedimientos planteados, crear nuevos componentes SQL consumibles luego desde CAPATAZ, mediante las posibilidades de personalización.
En otras notas, seguiremos mostrando estas características adicionales, existentes desde hace varios años en CAPATAZ Software.
No duden en consultarnos, no dejen de seguir las notas de blog.
Ver nota anterior:
Personalizaciones: Componentes SQL (parte 1 de 2) por Daniel Villarreal
Daniel Villarreal
Latest posts by Daniel Villarreal (see all)
- Gestión de Proyectos en CAPATAZ 2018 - 10 octubre, 2018
- Mantenimiento preventivo para rodados - 22 septiembre, 2018
- Personalizaciones: Botón Aceptar de Formularios - 28 febrero, 2018


[…] Fin del CASO DE USO I. Próxima entrega: CASO DE USO II y conclusiones. […]
Excelente Daniel, muy bueno para lidiar con esos detalles que nos solicitan los distintos clientes; de esas pequeñas cosas que nos hacen falta agregar, propias de cada una de las empresas donde implementamos Capataz.
Voy a comenzar a utilizarlo.