Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #41  
Antiguo 27-04-2010
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
Es tan sencillo esta instruccion que no se cree, pero tengo varios meses y cuando digo varios meses, es en serio, (son varios meses ) he realizado bastantes pruebas buscando una justificacion para esto y no la encuentro, pero debe ser algun contenido que no entra en el filtro, tal y cual como lo dice el amigo Casimiro. Solo me falta eliminar dicho registro y volverlo a crear (no se si teine sentido o no ). Tambien aclaro que la inclusion de los nuevos meses ya viene con los datos de base imponible y excento con su justo valor.
Responder Con Cita
  #42  
Antiguo 27-04-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.108
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Veamos, amigo, esto es fácil, ejecuta este select:

Código:
select count(*)
from facturacion
where tipo_tarifa= "Residencial"
and tipo_factura= "Consumo"
and extract(month from fecha)= 1   
and extract(year from fecha)= 2010
¿Cuntos registros dice que devuelve?.


Pues toda esa cantidad de registros son los que se modificarán si ejecutas el procedimiento almacenado con los mismos valores:

Código:
execute procedure COMOSELLAME("Residencial","Consumo",1,2010)
Si en el select te dijo que '0' (cero), quiere decir que el select no trae nada con esos parámetros, así que tendrás que probar quitando parámetros, ejemplo, para empezar, quita el año:

Código:
select count(*)
from facturacion
where tipo_tarifa= "Residencial"
and tipo_factura= "Consumo"
and extract(month from fecha)= 1
Si te dice que 0 (cero), entonces quita el mes:

Código:
select count(*)
from facturacion
where tipo_tarifa= "Residencial"
and tipo_factura= "Consumo"
Si te dice que 0 (cero), entonces quita tipo_factura:

Código:
select count(*)
from facturacion
where tipo_tarifa= "Residencial"
Si te dice que 0 (cero), entonces quita tipo_tarifa:

Código:
select count(*)
from facturacion
Si te dice que 0 (cero), entonces es que !!!no tienes ningún registro!!!

Haz estas pruebas y nos cuentas, pero tal y como te lo he puesto, ok?
Responder Con Cita
  #43  
Antiguo 27-04-2010
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
Ok si va...
Responder Con Cita
  #44  
Antiguo 27-04-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.108
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¡Qué bien!, entonces ¿cual era el problema?.
Responder Con Cita
  #45  
Antiguo 28-04-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Cita:
Empezado por sierraja Ver Mensaje
Ok de hecho una de mis pruebas fue asi de sencilla y lo hizo muy bien, pero el problema consiste en que antes del year 2009 no se tenia impuesto en esas facturas y por lo tanto se deberia colocar.
El truco está en meter las condiciones del WHERE (como la del año 2009), una a una, así llegas a saber sin la menor duda cual es la cláusula que ocasiona el conflicto, y con ello es muchísimo más fácil de solucionar.

Aunque Casimiro tiene toda la razón en que va a ser mucho más rápido detectar el conflicto dentro de la cláusula WHERE utilizando sentencias SELECT y no UPDATES.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #46  
Antiguo 28-04-2010
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
Buen dia a todos, efectivamente a medida que vamos cerrando las condiciones del WHERE vamos determinando cual de los filtros tiene el problema (estoy utilizando select en vez de update). En las diferentes pruebas me he dado cuenta que los registros con tarifas "Especial" salen en el select pero no se actualizan en el update, la prueba estuvo centrada en el year 2009 mes diciembre y tarifa "Especial". Tambien les informo, que por casualidad el registro que siempre verificaba es el de tarifa "Especial" y es el que no entra en el filtro. Ahora bien, el contenido del registro cumple con lsa condiciones del filtro, pero no hace caso al mismo. Inclusive lo he eliminado y vuelto a crear pero persiste.
Responder Con Cita
  #47  
Antiguo 28-04-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.108
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Vas a tener que pasarnos la base de datos
Responder Con Cita
  #48  
Antiguo 29-04-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
¿ Como está de triggers esa tabla ?, ¿ seguro que no tienes un trigger que le vuelve a poner su valor actual ?.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #49  
Antiguo 30-04-2010
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
Wink

Buenos dias,

Revise los triggers y no encontre nada que me diera indicios de lo que comenta guillotmarc, pero de todas maneras le hice un seguimiento a cada evento relacionado. Luego de realizar las pruebas con condiciones del where, hizo la actualizacion pero solamente filtrando la data unicamente con tarifas, mes y year a la vez y ejecutando el proceso directamente desde ib-expert:

Lo ejecute varias veces para las demas tarifas y los demas meses:


Código SQL [-]
execute procedure act_impuesto_1("Residencial","Consumo",9,2009)
execute procedure act_impuesto_1("Residencial","Consumo",1,2010)
execute procedure act_impuesto_1("Residencial","Consumo",2,2010)
execute procedure act_impuesto_1("Especial","Consumo",9,2009)
execute procedure act_impuesto_1("Especiall","Consumo",1,2010)
execute procedure act_impuesto_1("Especial","Consumo",2,2010)


El procedimiento ejecutado es:

Código SQL [-]
SET TERM ^ ;
CREATE PROCEDURE ACT_IMPUESTO_1 (
    X_TIPO_TARIFA VARCHAR(30),
    X_TIPO_FACTURA VARCHAR(10),
    X_MES INTEGER,
    X_YEAR INTEGER)
AS
begin
  update facturacion
  set base_imponible = cloaca, excento=0
  where tipo_tarifa=:x_tipo_tarifa and tipo_factura=:x_tipo_factura and extract(month from fecha)=:x_mes and extract(year from fecha)=:x_year;
  suspend;
end^
SET TERM ; ^
GRANT SELECT,UPDATE ON FACTURACION TO PROCEDURE ACT_IMPUESTO_1;
GRANT EXECUTE ON PROCEDURE ACT_IMPUESTO_1 TO SYSDBA;

Y para el resto de las tarifas se aplico lo siguiente:


[sql]execute procedure act_impuesto_2("Comercial","Consumo",9,2009)
execute procedure act_impuesto_2("Comercial","Consumo",1,2010)
execute procedure act_impuesto_2("Comercial","Consumo",2,2010)
execute procedure act_impuesto_2("Industrial A","Consumo",9,2009)
execute procedure act_impuesto_2("Industrial A","Consumo",1,2010)
execute procedure act_impuesto_2("Industrial A","Consumo",2,2010)
/SQL El procedimiento ejecutado es:
Código SQL [-]
SET TERM ^ ;
CREATE PROCEDURE ACT_IMPUESTO_2 (
    X_TIPO_TARIFA VARCHAR(30),
    X_TIPO_FACTURA VARCHAR(10),
    X_MES INTEGER,
    X_YEAR INTEGER)
AS
begin
  update facturacion
  set base_imponible = cargo_fijo + cargo_exceso_consumo + cargo_variable + cloaca, excento=0
  where tipo_tarifa=:x_tipo_tarifa and tipo_factura=:x_tipo_factura and extract(month from fecha)=:x_mes and extract(year from fecha)=:x_year;
  suspend;
end^
SET TERM ; ^
GRANT SELECT,UPDATE ON FACTURACION TO PROCEDURE ACT_IMPUESTO_2;
GRANT EXECUTE ON PROCEDURE ACT_IMPUESTO_2 TO SYSDBA;





Hasta llegar con todas las tarifas y en los ultimos tres meses. De esta manera fue que pude actualziar. Se ve ilogico, pero trate de hacer un solo SP pero no realizaba nada pero de todas maneras expogo el SP:


Código SQL [-]
SET TERM ^ ;
CREATE PROCEDURE ACT_IMPUESTO (
    X_TIPO_TARIFA VARCHAR(30),
    X_TIPO_FACTURA VARCHAR(10),
    X_MES INTEGER,
    X_YEAR INTEGER)
AS
begin
  if (x_tipo_tarifa='Residencial') then
    update facturacion
    set base_imponible = cloaca, excento=0
    where tipo_factura=:x_tipo_factura and extract(month from fecha)=:x_mes and extract(year from fecha)=:x_year;
  if (x_tipo_tarifa='Especial') then
    update facturacion
    set base_imponible = cloaca, excento=0
    where tipo_factura=:x_tipo_factura and extract(month from fecha)=:x_mes and extract(year from fecha)=:x_year;
  if (x_tipo_tarifa='Comercial') then
    update facturacion
    set base_imponible = cargo_fijo + cargo_exceso_consumo + cargo_variable + cloaca, excento=0
    where tipo_factura=:x_tipo_factura and extract(month from fecha)=:x_mes and extract(year from fecha)=:x_year;
  if (x_tipo_tarifa='Industrial A') then
    update facturacion
    set base_imponible = cargo_fijo + cargo_exceso_consumo + cargo_variable + cloaca, excento=0
    where tipo_factura=:x_tipo_factura and extract(month from fecha)=:x_mes and extract(year from fecha)=:x_year;
  if (x_tipo_tarifa='Industrial B') then
    update facturacion
    set base_imponible = cargo_fijo + cargo_exceso_consumo + cargo_variable + cloaca, excento=0
    where tipo_factura=:x_tipo_factura and extract(month from fecha)=:x_mes and extract(year from fecha)=:x_year;
end^
SET TERM ; ^
GRANT SELECT,UPDATE ON FACTURACION TO PROCEDURE ACT_IMPUESTO;
GRANT EXECUTE ON PROCEDURE ACT_IMPUESTO TO SYSDBA;



Este procedimiento no funcionada. Pero como dije antes realizaba prueba modificando el filtro del where y por separado funcionaba y fue de esta manera que pude resolver la situacion. En el futuro no vamos a tener este problema, ya que al crear el registro vamos a tener en cuenta todos los campos y no va a ser necesario actualizarlos luego.

De todas maneras seria bueno las observaciones para con los SP para en un futuro no volver a caer en estos detalles.

Caballeros muchas gracias por su colaboracion y por el aporte de sus valiosisimos conocimientos. Muchas gracias
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Correccion de Sintaxis sierraja Firebird e Interbase 9 28-10-2008 23:34:14
Correccion ortografica Iskariote0087 Varios 4 23-02-2008 10:42:09
Una pequeña corrección Faust Varios 1 07-07-2006 07:10:39


La franja horaria es GMT +2. Ahora son las 16:19:03.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi