Re:Re:Posible Bug y solución en Importador de Extracto

Inicio Foros Foro principal Desarrolladores Posible Bug y solución en Importador de Extracto Re:Re:Posible Bug y solución en Importador de Extracto

#34193
Javier AderJavier Ader
Participante

Bueno, exactamente no se por donde viene, pero a simple vista esa clase parece tener muchos bugs a nivel de sql; en particular por el tema de precedencia de operadores AND y OR; por ej, en muchos lugares se ve algo como

SELECT o UPDTE….

WHERE algunas codiciones separas por AND
AND
i.I_IsImported<>‘Y’ OR i.I_IsImported is NULL
AND AD_Client_ID= xxxx

[code]
en donde el ultimo and es agregado por una expresión append( clientCheck ) , y la idea es solo tocar los registros de importacion o de la tabla en las que se impotan los registros que pertenezcan a al mismo cliente (para que importanciones de distintas companias no se mezcle).
Bueno, en todas esas sentecias hay un error ya que la condicion
i.I_IsImported<>‘Y’ OE i.I_IsImported is NULL debe ir entre parensis [ esto es exactamente decir que para multiplicar 2 por 3 + 1 uno tiene que escribri 2 * (3 + 1); si uno escibre sin parentesis, e.d 2 * 3 + 1, se evalua como (2 * 3) + 1).
Por ej el codigo anterior tiene la misma evaluacion que
[code]

SELECT o UPDTE….

WHERE
(algunas codiciones separas por AND
AND
i.I_IsImported<>‘Y’)
OR
(i.I_IsImported is NULL
AND AD_Client_ID= xxxx )

[code]
Lo cual obivmente no es la intención de la sentencia.
No se si este error es el que te está generando problemas, depues miro un poco más. Si queres podes probar cambiando todas los
i.I_IsImported<>‘Y’ OR i.I_IsImported is NULL
por
(i.I_IsImported<>‘Y’ OR i.I_IsImported is NULL)
En cualuqier caso, eso de setear con ‘E’ algo que es boolena (e.d, puede tomar solo Y o N), me parece muy raro (si lo que se quiere es setear un error, se deberia usar la columan de mensaje de error en la tabla temporal).

PD : Tambien es probable que haya un error cuando se setea el error de mensaje en expresiones como I_ErrorMsg=I_ErrorMsg||’ERR=Invalid Org
ya eso concatena los errores solo I_ErrorMsg no es null (y es justamente seteado a NULL al principio de prepareImportatation, en la linea 139).
Esto se soluciona en vez de seteandolo a null, seteandolo a ”,
e.d en la linea 139 cambias [b]I_ErrorMsg = NULL[/b] por [b]I_ErrorMsg = ”[/b].
Los errores seteados ahí son los que vana aparecer en Mensajes de Error al Importar dentro de Importar Extracto bancario (es probable que tengas que abrir y cerrar la ventana, me parece que no hace un refresh automático de todas las lineas…creo…)[code]

SELECT o UPDTE….

WHERE algunas codiciones separas por AND
AND
i.I_IsImported<>‘Y’ OR i.I_IsImported is NULL
AND AD_Client_ID= xxxx

en donde el ultimo and es agregado por una expresión append( clientCheck ) , y la idea es solo tocar los registros de importacion o de la tabla en las que se impotan los registros que pertenezcan a al mismo cliente (para que importanciones de distintas companias no se mezcle).
Bueno, en todas esas sentecias hay un error ya que la condicion
i.I_IsImported<>‘Y’ OE i.I_IsImported is NULL debe ir entre parensis [ esto es exactamente decir que para multiplicar 2 por 3 + 1 uno tiene que escribri 2 * (3 + 1); si uno escibre sin parentesis, e.d 2 * 3 + 1, se evalua como (2 * 3) + 1).
Por ej el codigo anterior tiene la misma evaluacion que
[code]

SELECT o UPDTE….

WHERE
(algunas codiciones separas por AND
AND
i.I_IsImported<>‘Y’)
OR
(i.I_IsImported is NULL
AND AD_Client_ID= xxxx )

[code]
Lo cual obivmente no es la intención de la sentencia.
No se si este error es el que te está generando problemas, depues miro un poco más. Si queres podes probar cambiando todas los
i.I_IsImported<>‘Y’ OR i.I_IsImported is NULL
por
(i.I_IsImported<>‘Y’ OR i.I_IsImported is NULL)
En cualuqier caso, eso de setear con ‘E’ algo que es boolena (e.d, puede tomar solo Y o N), me parece muy raro (si lo que se quiere es setear un error, se deberia usar la columan de mensaje de error en la tabla temporal).

PD : Tambien es probable que haya un error cuando se setea el error de mensaje en expresiones como I_ErrorMsg=I_ErrorMsg||’ERR=Invalid Org
ya eso concatena los errores solo I_ErrorMsg no es null (y es justamente seteado a NULL al principio de prepareImportatation, en la linea 139).
Esto se soluciona en vez de seteandolo a null, seteandolo a ”,
e.d en la linea 139 cambias [b]I_ErrorMsg = NULL[/b] por [b]I_ErrorMsg = ”[/b].
Los errores seteados ahí son los que vana aparecer en Mensajes de Error al Importar dentro de Importar Extracto bancario (es probable que tengas que abrir y cerrar la ventana, me parece que no hace un refresh automático de todas las lineas…creo…)[code]
en donde el ultimo and es agregado por una expresión append( clientCheck ) , y la idea es solo tocar los registros de importacion o de la tabla en las que se impotan los registros que pertenezcan a al mismo cliente (para que importanciones de distintas companias no se mezcle).
Bueno, en todas esas sentecias hay un error ya que la condicion
i.I_IsImported<>‘Y’ OE i.I_IsImported is NULL debe ir entre parensis [ esto es exactamente decir que para multiplicar 2 por 3 + 1 uno tiene que escribri 2 * (3 + 1); si uno escibre sin parentesis, e.d 2 * 3 + 1, se evalua como (2 * 3) + 1).
Por ej el codigo anterior tiene la misma evaluacion que

SELECT o UPDTE….

WHERE
(algunas codiciones separas por AND
AND
i.I_IsImported<>‘Y’)
OR
(i.I_IsImported is NULL
AND AD_Client_ID= xxxx )

[code]
Lo cual obivmente no es la intención de la sentencia.
No se si este error es el que te está generando problemas, depues miro un poco más. Si queres podes probar cambiando todas los
i.I_IsImported<>‘Y’ OR i.I_IsImported is NULL
por
(i.I_IsImported<>‘Y’ OR i.I_IsImported is NULL)
En cualuqier caso, eso de setear con ‘E’ algo que es boolena (e.d, puede tomar solo Y o N), me parece muy raro (si lo que se quiere es setear un error, se deberia usar la columan de mensaje de error en la tabla temporal).

PD : Tambien es probable que haya un error cuando se setea el error de mensaje en expresiones como I_ErrorMsg=I_ErrorMsg||’ERR=Invalid Org
ya eso concatena los errores solo I_ErrorMsg no es null (y es justamente seteado a NULL al principio de prepareImportatation, en la linea 139).
Esto se soluciona en vez de seteandolo a null, seteandolo a ”,
e.d en la linea 139 cambias [b]I_ErrorMsg = NULL[/b] por [b]I_ErrorMsg = ”[/b].
Los errores seteados ahí son los que vana aparecer en Mensajes de Error al Importar dentro de Importar Extracto bancario (es probable que tengas que abrir y cerrar la ventana, me parece que no hace un refresh automático de todas las lineas…creo…)[code]

SELECT o UPDTE….

WHERE
(algunas codiciones separas por AND
AND
i.I_IsImported<>‘Y’)
OR
(i.I_IsImported is NULL
AND AD_Client_ID= xxxx )

Lo cual obivmente no es la intención de la sentencia.
No se si este error es el que te está generando problemas, depues miro un poco más. Si queres podes probar cambiando todas los
i.I_IsImported<>‘Y’ OR i.I_IsImported is NULL
por
(i.I_IsImported<>‘Y’ OR i.I_IsImported is NULL)
En cualuqier caso, eso de setear con ‘E’ algo que es boolena (e.d, puede tomar solo Y o N), me parece muy raro (si lo que se quiere es setear un error, se deberia usar la columan de mensaje de error en la tabla temporal).

PD : Tambien es probable que haya un error cuando se setea el error de mensaje en expresiones como I_ErrorMsg=I_ErrorMsg||’ERR=Invalid Org
ya eso concatena los errores solo I_ErrorMsg no es null (y es justamente seteado a NULL al principio de prepareImportatation, en la linea 139).
Esto se soluciona en vez de seteandolo a null, seteandolo a ”,
e.d en la linea 139 cambias [b]I_ErrorMsg = NULL[/b] por [b]I_ErrorMsg = ”[/b].
Los errores seteados ahí son los que vana aparecer en Mensajes de Error al Importar dentro de Importar Extracto bancario (es probable que tengas que abrir y cerrar la ventana, me parece que no hace un refresh automático de todas las lineas…creo…)[code]
Lo cual obivmente no es la intención de la sentencia.
No se si este error es el que te está generando problemas, depues miro un poco más. Si queres podes probar cambiando todas los
i.I_IsImported<>‘Y’ OR i.I_IsImported is NULL
por
(i.I_IsImported<>‘Y’ OR i.I_IsImported is NULL)
En cualuqier caso, eso de setear con ‘E’ algo que es boolena (e.d, puede tomar solo Y o N), me parece muy raro (si lo que se quiere es setear un error, se deberia usar la columan de mensaje de error en la tabla temporal).

PD : Tambien es probable que haya un error cuando se setea el error de mensaje en expresiones como I_ErrorMsg=I_ErrorMsg||’ERR=Invalid Org
ya eso concatena los errores solo I_ErrorMsg no es null (y es justamente seteado a NULL al principio de prepareImportatation, en la linea 139).
Esto se soluciona en vez de seteandolo a null, seteandolo a ”,
e.d en la linea 139 cambias I_ErrorMsg = NULL por I_ErrorMsg = ”.
Los errores seteados ahí son los que vana aparecer en Mensajes de Error al Importar dentro de Importar Extracto bancario (es probable que tengas que abrir y cerrar la ventana, me parece que no hace un refresh automático de todas las lineas…creo…)