Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-04-2010
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.681
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Es que en cada uno de las 3 formas... no nos has dado toda la información.

De todas formas lo de emplear "Consumo", "Residencial", etc. es una muy mala idea porque influyen varios factores que pueden hacer que no funcione, si pones "consumo", por ejemplo, ya no funcionará, tampoco funcionará dependiendo del tipo de dato usado en crear el campo, que tampoco nos has puesto la estructura de la tabla.
Por ejemplo, si usas un campo de cadena fija, digamos que un char(20) y almacenas el valor "Consumo" que tiene 7 caracteres, realmente no se está almacenando "Consumo" sino "Consumo ", así que cuando vas a hacer el filtro por ese campo, nunca te funcionará. Si usas varchar(20) no habrá problema porque él sólo quita los espacios... o no, depende de la versión de firebird/interbase que uses, porque en las versiones antiguas, la firebird 1.0 todavía no tenía solucionado el fallo de que los varchar se guardaban también con los espacios.
Estos son simples ejemplos de por lo qu einsistimos mucho que necesitamos mucha más información, lo más completa posible, para poder ayudar.
Responder Con Cita
  #2  
Antiguo 27-04-2010
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 22
sierraja Va por buen camino
Wow, cada vez uno aprende mas:

En la captura de datos se valida la entrada de los mismo, es decir, cuando defines el tipo de factura se validan: "Consumo" y/o "Servicios" Cualquiera de los dos, el usuario no lo escribe, solo lo selecciona.

En lo que respecta a tipo de tarifa, igualemente valido que sea: "Residencial" o "Especial" o "Comercial" o "Industrial A" y "Industrial B". Igualmente como el anterior, el usuario no lo escribe, y solo lo selecciona.

De esta manera estan almacenados en la base de datos.

El tipo de datos en la base de datos para los dos campos es Varchar(10) y varchar (30) respectivamente.

El sistema consiste en un sistema de facturacion del servicio de agua potable y tiene tres years funcionando, pero cada dia se le han agregado cosas nuevas. Desde el year pasado se le agrego los impuestos cuyo desgloce consiste en base imponible y cantidad excenta, eso es lo que estamos tratando de arreglar.

Este es una peque#a explicacion de lo que hace el sistema. he realizado varias pruebas que no han resultado y solo he tenido ese problema con ella, he realizado varias pruebas con los ultimos cuatro meses y no he tenido exito. Tambien he realizado chequeos de otras transacciones de consulta que se activen fantasmalmente y no he encontrado nada. He filtrado la data con pocos registro y tampoco he tenido exito. Hast el momento se tiene 380000 registro en la tabla de facturacion que estamos manejando.

Si quieren mas informacion hasta les puedo enviar la misma base de datos, para que realicen sus prueba.
Responder Con Cita
  #3  
Antiguo 27-04-2010
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.681
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Cita:
Empezado por sierraja Ver Mensaje
[..]Si quieren mas informacion hasta les puedo enviar la misma base de datos, para que realicen sus prueba.
No creo que sea necesario

Centrémonos en un método determinado, ¿te parece bien el procedimiento almacenado?, creo que es la mejor opción.

Pon aquí el código completo del mismo y haremos una prueba desde el ibexpert.
Además pon aquí el código completo de la estructura de la tabla, ok?
Responder Con Cita
  #4  
Antiguo 27-04-2010
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 22
sierraja Va por buen camino
EL SP, me parece buenisimo:


Código SQL [-]
SET TERM ^ ;
CREATE PROCEDURE "UPDATE" (
X_TIPO_TARIFA VARCHAR(30),
X_TIPO_FACTURA VARCHAR(10),
X_MES INTEGER,
X_YEAR INTEGER)
AS
begin
update facturacion
set base_imponible = cloaca
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;
update facturacion
set excento = consumo_agua
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 "UPDATE";
GRANT EXECUTE ON PROCEDURE "UPDATE" TO SYSDBA;





========================
Código:
/******************************************************************************/
/****            Generated by IBExpert 26/04/2010 07:19:48 p.m.            ****/
/******************************************************************************/
SET SQL DIALECT 3;
SET NAMES NONE;
 
/******************************************************************************/
/****                                Tables                                ****/
/******************************************************************************/
 
CREATE TABLE FACTURACION (
    ID_SUSCRIPTOR           VARCHAR(30),
    STATUS_FACTURA          VARCHAR(15),
    RUTA                    INTEGER,
    NUMERO_FACTURA          INTEGER,
    NUMERO_FACTURA_A        VARCHAR(30),
    NUMERO_FACTURA_IMPRESA  INTEGER,
    CODIGO_SUSCRIPTOR       INTEGER,
    CODIGO_SUSCRIPTOR_A     VARCHAR(30),
    LECTURA_ANTERIOR        INTEGER,
    LECTURA_ACTUAL          INTEGER,
    CONSUMO                 NUMERIC(15,2),
    FECHA_INICIO            DATE,
    FECHA_INICIO_A          VARCHAR(20),
    FECHA_FIN               DATE,
    FECHA_FIN_A             VARCHAR(20),
    FECHA_FACTURACION       DATE,
    FECHA_FACTURACION_A     VARCHAR(20),
    FECHA_VENCIMIENTO       DATE,
    FECHA_VENCIMIENTO_A     VARCHAR(20),
    MONTO_TARIFA            NUMERIC(15,2),
    MONTO_TARIFA_EXCESO     NUMERIC(15,2),
    ALICUOTA_IVA            NUMERIC(15,2),
    CARGO_FIJO              NUMERIC(15,2),
    CARGO_VARIABLE          NUMERIC(15,2),
    CARGO_EXCESO_CONSUMO    NUMERIC(15,2),
    CONSUMO_AGUA            NUMERIC(15,2),
    CLOACA                  NUMERIC(15,2),
    PORCENTAJE_CLOACA       NUMERIC(15,2),
    MONTO_CONCEPTO          NUMERIC(15,2),
    MONTO_FACTURADO         NUMERIC(15,2),
    MONTO_IVA               NUMERIC(15,2),
    DEUDA_ANTERIOR          NUMERIC(15,2),
    TIPO_TARIFA             VARCHAR(30),
    ESTADO                  VARCHAR(20),
    AVISO_CORTE             VARCHAR(2),
    FECHA_PAGO_FACTURA      DATE,
    FECHA_PAGO_FACTURA_A    VARCHAR(20),
    FORMA_PAGO              VARCHAR(20),
    PORCENTAJE_DESCUENTO    NUMERIC(15,2),
    MONTO_DESCUENTO         NUMERIC(15,2),
    DESCUENTO_AUTORIZADO    VARCHAR(30),
    NUMERO_CHEQUE           VARCHAR(30),
    CUENTA_CHEQUE           VARCHAR(30),
    NOMBRE_BANCO            VARCHAR(30),
    USUARIO                 VARCHAR(10),
    FECHA                   DATE,
    FECHA_A                 VARCHAR(10),
    PRECIO_UNITARIO         NUMERIC(15,2),
    SUB_TOTAL               NUMERIC(15,2),
    CONTADOR                INTEGER,
    LITERAL_EXCENTO         VARCHAR(10),
    MONTO_PAGADO            NUMERIC(15,2),
    VUELTO                  NUMERIC(15,2),
    NUMERO_TARJETA          VARCHAR(30),
    TIPO_TARJETA_CREDITO    VARCHAR(30),
    NOMBRE_BANCO_TARJETA    VARCHAR(30),
    TIPO_FACTURA            VARCHAR(10),
    RECIBO                  VARCHAR(2),
    PRECIO                  NUMERIC(15,2),
    BASE_IMPONIBLE          NUMERIC(15,2),
    FACTURAR_LOTE           VARCHAR(10),
    CODIGO_STATE_ACCOUNT    VARCHAR(10),
    EXCENTO                 NUMERIC(15,2),
    STATUS_TARIFA           VARCHAR(20),
    CAMPO1                  VARCHAR(50),
    CAMPO2                  VARCHAR(100),
    STATUS_2                VARCHAR(30),
    STATUS_3                VARCHAR(30),
    STATUS                  VARCHAR(30),
    CODIGO_LECTURA          INTEGER,
    PENDIENTES              INTEGER
);
 
 
/******************************************************************************/
/****                               Indices                                ****/
/******************************************************************************/
CREATE INDEX FACTURACION_CODIGO_CLIENTE ON FACTURACION (CODIGO_SUSCRIPTOR);
CREATE INDEX FACTURACION_IDX1 ON FACTURACION (DEUDA_ANTERIOR);
 
/* Fields descriptions */
DESCRIBE FIELD STATUS_FACTURA TABLE FACTURACION
'Si indica "Si" es que esta facturado';
DESCRIBE FIELD FECHA_INICIO TABLE FACTURACION
'  fecha inicio de periodo a facturar';
DESCRIBE FIELD FECHA_FIN TABLE FACTURACION
' fecha fin de periodo a facturar';
DESCRIBE FIELD CARGO_FIJO TABLE FACTURACION
' cargo fijo para la tarifa comercial';
DESCRIBE FIELD CARGO_VARIABLE TABLE FACTURACION
'cargo variable tarifa comercial';
DESCRIBE FIELD CARGO_EXCESO_CONSUMO TABLE FACTURACION
' cargo consumo tarifa comercial';
DESCRIBE FIELD CONSUMO_AGUA TABLE FACTURACION
' consumo mas tarifa mensual';
DESCRIBE FIELD MONTO_CONCEPTO TABLE FACTURACION
' monto por concepto debito o credito de la facturacion mensual';
DESCRIBE FIELD MONTO_FACTURADO TABLE FACTURACION
'  monto facturado es la suma de agua,cloaca, exceso, cargo fijo, debido o credito';
DESCRIBE FIELD ESTADO TABLE FACTURACION
'status operacional= 1 activo, 2 cortado, 3 suspendido';
DESCRIBE FIELD AVISO_CORTE TABLE FACTURACION
'Verdadero si y falso no';
 
/******************************************************************************/
/****                              Privileges                              ****/
/******************************************************************************/
Responder Con Cita
  #5  
Antiguo 27-04-2010
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 22
sierraja Va por buen camino
perdon siempre se me salta este error:


Código SQL [-]
SET TERM ^ ;
CREATE PROCEDURE "UPDATE" (
    X_TIPO_TARIFA VARCHAR(30),
    X_TIPO_FACTURA VARCHAR(10),
    X_MES INTEGER,
    X_YEAR INTEGER)
AS
begin
  update facturacion
  set base_imponible = cloaca
  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;
  update facturacion
  set excento = consumo_agua
  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 "UPDATE";
GRANT EXECUTE ON PROCEDURE "UPDATE" TO SYSDBA;

Este es el procedimiento. Lo acabo de crear.
Responder Con Cita
  #6  
Antiguo 27-04-2010
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.681
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
¿La tabla no tiene clave primaria?
Responder Con Cita
  #7  
Antiguo 27-04-2010
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 22
sierraja Va por buen camino
Hasta ahora no!, pero si ha de tenerla seria el codigo_suscriptor+fecha. La tabla contiene una factura mensual por cada suscriptor, es decir, un mismo codigo_suscriptor va a tener doce registros por year y no su pueden repetir un mismo suscriptor tenga dos registros en el mismo mes. No se si me entiendes.
Responder Con Cita
  #8  
Antiguo 27-04-2010
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.681
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Pues sí, es necesario que tenga su clave primaria.

Bueno, mira he creado la tabla a la que le he añadido una clave primaria:

Código:
CREATE TABLE FACTURACION(   
  ID Integer NOT NULL,  <--  tú le pones la clave que te venga mejor
  ID_SUSCRIPTOR Varchar(30),
  STATUS_FACTURA Varchar(15),
  RUTA Integer,   
  NUMERO_FACTURA Integer,   
  NUMERO_FACTURA_A Varchar(30),   
  NUMERO_FACTURA_IMPRESA Integer,   
  etc...   
  ...
Luego he creado el procedimiento almacenado (para simplificar he dejado la primera parte):

Código:
CREATE PROCEDURE ACTUALIZAR (
  X_TIPO_TARIFA Varchar(30),     
  X_TIPO_FACTURA Varchar(10),     
  X_MES Integer,     
  X_YEAR Integer ) 
AS begin   
  update facturacion   
  set base_imponible = cloaca   
  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;    

  etc...     
  /* por cierto, el "suspend" aquí no sirve para nada */  
end
Y seguidamente lo he ejecutado desde el ibexpert... mentira, estoy usando el flamerobin, pero es lo mismo:

Código:
execute procedure ACTUALIZAR("Residencial","Consumo",1,2010)
Lo he nombrado ACTUALIZAR porque UPDATE puede malinterpretarse con la sentencia "UPDATE".

Y el resultado es, como se supone, correcto:

Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 13:26:37.


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