Machetes Varios

apuntes varios erp cwa logic ( ahora SoftLand Logic ) – sql y veremos que otra cosa

Tiebreakers en Revalúo


Ejemplo de un típico error al hacer una consulta con Group By, sin tener en cuenta la relación entre los campos. La Solución es aplicar la técnica de Tiebreakers

error-en-grabacion-revaluo.JPG

Detalle del mail reportando el problema a “Rafa”:

Versión 2.3.6.9

Descripción: Cuando un bien registra más de un registro en la STRMVK, puede obtenerse error en el revaluo ( … campos RVRMVI_DEPOSI,RVRMVI_SECTOR no existen en la tabla base )

Origen del problema: en la consulta que lleva los datos a la grilla se toma

MAX(STRMVK_DEPOSI),

MAX(STRMVK_SECTOR)

FROM

STRMVK

, lo cual es erróneo porque no tiene en cuenta que el sector está asociado a un depósito dado.

grilla-revaluo.JPG

 

La Solución: aplicando de Tiebreakers ( Sql Mag ID: 452358 ) , habría que agregar la siguiente en el WHERE :

AND STRMVK_DEPOSI + STRMVK_SECTOR =

( SELECT TOP 1 T.STRMVK_DEPOSI+ T.STRMVK_SECTOR

FROM STRMVK T

WHERE T.STRMVK_NOTROS = STRMVK.STRMVK_NOTROS

ORDER BY T.STRMVK_DEPOSI, T.STRMVK_SECTOR)

Por si no se entiende:

/* registros existentes en strmvk */

select strmvk_deposi,strmvk_sector from strmvk

where strmvk_notros = ‘ 3407’

strmvk_deposi strmvk_sector

————— —————

CENTRAL VALVIGNUE

GENERICO GENERICO

/* consulta erronea – Deposito CENTRAL no tiene Sector GENERICO */

select

max(strmvk_deposi) DEPOSI,

max(strmvk_sector) SECTOR

from strmvk

where strmvk_notros = ‘ 3407’

DEPOSI SECTOR

————— —————

GENERICO VALVIGNUE

/* Consulta Correcta -Usando Tiebreakers */

SELECT

STRMVK_DEPOSI,

STRMVK_SECTOR

FROM STRMVK

WHERE STRMVK_DEPOSI + STRMVK_SECTOR =

( SELECT TOP 1 T.STRMVK_DEPOSI+ T.STRMVK_SECTOR

FROM STRMVK T

WHERE T.STRMVK_NOTROS = STRMVK.STRMVK_NOTROS

ORDER BY T.STRMVK_DEPOSI, T.STRMVK_SECTOR)

AND STRMVK_NOTROS = ‘ 3407’

STRMVK_DEPOSI STRMVK_SECTOR

————— —————

CENTRAL VALVIGNUE

La consulta corregida:

Select RVMBIE_TIPPRO TIPPRO,

RVMBIE_ARTCOD ARTCOD,

Max(STRMVI_MODFOR) MODFOR,

Max(STRMVI_CODFOR) CODFOR,

Max(STRMVI_NROFOR) NROFOR,

Max(STRMVI_NROITM) NROITM,

RVMBIE_NSERIE NSERIE,

RVMBIE_NDESPA NDESPA,

RVMBIE_ENVASE ENVASE,

RVMBIE_NOTROS NOTROS,

STRMVH_TIPMOV TIPMOV,

Max(STRMVK_DEPOSI) DEPOSI,

Max(STRMVK_SECTOR) SECTOR,

Max(STRMVI_FCHMOV) FCHMOV,

Max(STRMVI_CANTID) CANTID,

(SELECT Sum(ST1.STRMVI_CANTID)

FROM STRMVI ST1 WHERE ST1.STRMVI_TIPPRO = RVMBIE_TIPPRO

AND ST1.STRMVI_ARTORI = RVMBIE_ARTCOD AND ST1.STRMVI_NOTROS = RVMBIE_NOTROS) SUM_CANTID ,

Max(RVMBIE_CODCPT) CODCPT, Max(RVMBIE_VALFIN) VALFIN,

Max(RVMBIE_VALFIC) VALFIC, Max(RVMBIE_VALFII) VALFII,

Max(RVMBIE_VALFIS) VALFIS, Max(RVMBIE_CUEBAJ) CUEBAJ,

Max(RVMBIE_PRINCI) PRINCI, Max(RVMBIE_ANOTEC) ANOTEC,

Max(RVMBIE_ANOCON) ANOCON, Max(RVMBIE_ANOIMP) ANOIMP,

Max(RVMBIE_MESTEC) MESTEC, Max(RVMBIE_MESCON) MESCON,

Max(RVMBIE_MESIMP) MESIMP, Max(RVMBIE_ORIGEN) ORIGEN,

Max(RVMBIE_ORIGEI) ORIGEI, Max(RVMBIE_ORIGEC) ORIGEC,

Max(RVMBIE_ORISEC) ORISEC, Max(RVMBIE_MODUCG) MODUCG,

Max(RVMBIE_CODICG) CODICG, Max(RVCCOI.RVCCOI_CUENTD) CUENTD,

Max(RVCCOI.RVCCOI_CUENTH) CUENTH, Max(A1.RVCCOI_CUENTD) CUENTDC,

Max(A1.RVCCOI_CUENTH) CUENTHC, Max(A2.RVCCOI_CUENTD) CUENTDI,

Max(A2.RVCCOI_CUENTH) CUENTHI, Max(STRMVH_DIMOBL) DIMOBL,

Max(STRMVH_DIMORI) DIMORI, Max(STRMVH_SUBCUE) SUBCUE,

Max(STRMVH_SUBORI) SUBORI, Max(RVMBIE_CODCOF) CODCOF,

Max(RVMBIE_CODCOI) CODCOI, Max(RVMBIE_CODCOC) CODCOC,

Max(RVMBIE_FCHMAR) FCHMAR, Max(RVMBIE_FCHMAI) FCHMAI,

Max(RVMBIE_FCHMAC) FCHMAC, Max(STTTPH_DESCRP) DS_TIPPRO,

Max(STMPDH_DESCRP) DS_ARTCOD, Max(GRCFOR_DESCRP) DS_CODFOR,

Max(N1.GRTCOF_DESCRP) DS_CODCOF, Max(N2.GRTCOF_DESCRP) DS_CODCOI,

Max(N3.GRTCOF_DESCRP) DS_CODCOC, Max(STTDEH_DESCRP) DS_DEPOSI,

Max(STTDEI_DESCRP) DS_SECTOR

From {oj {oj {oj {oj {oj {oj {oj {oj {oj {oj {oj {oj RVMBIE Left Outer Join STRMVI On

RVMBIE_TIPPRO = STRMVI_TIPPRO AND RVMBIE_ARTCOD = STRMVI_ARTORI

AND RVMBIE_NSERIE = STRMVI_NSERIE AND RVMBIE_ENVASE = STRMVI_ENVASE

AND RVMBIE_NDESPA = STRMVI_NDESPA AND RVMBIE_NOTROS = STRMVI_NOTROS

AND STRMVI_FCHMOV <= {d ‘2006-12-31’}} Left Outer Join STRMVK

On RVMBIE_TIPPRO = STRMVK_TIPPRO AND RVMBIE_ARTCOD = STRMVK_ARTCOD

AND RVMBIE_NOTROS = STRMVK_NOTROS AND STRMVK_STOCKS <> 0

Left Outer Join STTDEH On STRMVK_DEPOSI = STTDEH_DEPOSI

Left Outer Join STTDEI On STRMVK_DEPOSI = STTDEI_DEPOSI

And STRMVK_SECTOR = STTDEI_SECTOR}

Left Outer Join STRMVH On STRMVH_MODFOR = STRMVI_MODFOR

And STRMVH_CODFOR = STRMVI_CODFOR And STRMVH_NROFOR = STRMVI_NROFOR

And STRMVH_SUCURS = STRMVI_SUCURS} Left Outer Join RVCCOI

On RVMBIE_CODCPT = RVCCOI_CODCPT And STRMVH_TIPMOV = RVCCOI_TIPOPR

And RVCCOI_MODULO = ‘RV’} Left Outer Join RVCCOI A1

On RVMBIE_CODCPT = A1.RVCCOI_CODCPT And A1.RVCCOI_TIPOPR = ‘C’

And A1.RVCCOI_MODULO = ‘RV’} Left Outer Join RVCCOI A2

On RVMBIE_CODCPT = A2.RVCCOI_CODCPT And A2.RVCCOI_TIPOPR = ‘I’

And A2.RVCCOI_MODULO = ‘RV’} Left Outer Join STTTPH On RVMBIE_TIPPRO = STTTPH_TIPPRO}

Left Outer Join STMPDH On RVMBIE_TIPPRO = STMPDH_TIPPRO And RVMBIE_ARTCOD = STMPDH_ARTCOD}

Left Outer Join GRCFOR On RVMBIE_MODFOR = GRCFOR_MODFOR And RVMBIE_CODFOR = GRCFOR_CODFOR}

Left Outer Join GRTCOF N1 On RVMBIE_CODCOF = N1.GRTCOF_CODCOF}

Left Outer Join GRTCOF N2 On RVMBIE_CODCOI = N2.GRTCOF_CODCOF}

Left Outer Join GRTCOF N3 On RVMBIE_CODCOC = N3.GRTCOF_CODCOF}

Where RVMBIE_FCHMAC <= {d ‘2006-12-31’}

AND ISNULL(RVMBIE_STANDB, ‘N’) = ‘N’ AND ISNULL(RVMBIE_DEBAJA, ‘N’) = ‘N’

AND RVMBIE_AMCADO = ‘N’ AND STRMVI_FECALT = (SELECT MAX(STRMVI_FECALT)

FROM STRMVI N1 WHERE RVMBIE_TIPPRO = N1.STRMVI_TIPPRO

AND RVMBIE_ARTCOD = N1.STRMVI_ARTORI AND RVMBIE_NSERIE = N1.STRMVI_NSERIE

AND RVMBIE_ENVASE = N1.STRMVI_ENVASE AND RVMBIE_NDESPA = N1.STRMVI_NDESPA

AND RVMBIE_NOTROS = N1.STRMVI_NOTROS AND N1.STRMVI_FCHMOV <= {d ‘2006-12-31’})

AND STRMVK_DEPOSI + STRMVK_SECTOR =

( SELECT TOP 1 T.STRMVK_DEPOSI+ T.STRMVK_SECTOR

FROM STRMVK T

WHERE T.STRMVK_NOTROS = STRMVK.STRMVK_NOTROS

ORDER BY T.STRMVK_DEPOSI, T.STRMVK_SECTOR)

Group By RVMBIE_TIPPRO, RVMBIE_ARTCOD, RVMBIE_NSERIE, RVMBIE_NDESPA, RVMBIE_ENVASE,

RVMBIE_NOTROS, STRMVH_TIPMOV ORDER BY PRINCI DESC

 

 

febrero 7, 2007 - Posted by | 1.3 CWA Errores, 1.6 RV - Revalúo ( Bienes de Uso ), Cwa Logic, Transact SQL

Aún no hay comentarios.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: