Hola amigos estoy usando firebird 2 e IBExpert, tengo una base de datos funcionando correctamente (por lo
menos para lo que la requiero

, puede tener muchas correcciones), para instalar mi aplicación en una
nueva maquina extrage de la base de datos el código ddl con la opcion extraer metadatos, al ejecutar este
código el IBExpert me da 3 errores iguales en diferentes procedimientos:
Código SQL
[-]
ALTER PROCEDURE P_GRUPOPRECIOS (
CLIENTE INTEGER,
PRODUCTO INTEGER)
RETURNS (
ID_UNIMED INTEGER,
ABREVIATURA VARCHAR(10),
PRECIO NUMERIC(15,2),
IMPUESTO NUMERIC(15,2),
TOTAL NUMERIC(15,2),
LIMITE INTEGER)
AS
declare variable temp char(1) character set iso8859_1;
begin
For select t_preciosespeciales.precio from t_preciosespeciales where t_preciosespeciales.id_cliente
= :cliente and t_preciosespeciales.id_producto = :_producto into :_precio do
Begin
Select t_impuestos.monto from t_impuestos where t_impuestos.id = (select
t_detalleproducto.id_impuestov from t_detalleproducto where t_detalleproducto.id = :_producto)
into :impuesto;
impuesto = precio * impuesto / 100;
total = precio + impuesto;
limite = 1;
id_unimed = 0;
abreviatura = 'ESP';
suspend;
End
for select v_detalleproducto.id_unimedmenudeo, v_detalleproducto.preciomenudeo,
v_detalleproducto.impuestomenudeo, v_detalleproducto.totalmenudeo, v_detalleproducto.ventamedmayoreo,
v_detalleproducto.minimomenudeo from v_detalleproducto where v_detalleproducto.id = :_producto
into :id_unimed, :_precio, :impuesto, :total, :temp, :limite do
begin
Select t_unidadmedida.abreviatura from t_unidadmedida where t_unidadmedida.id = :id_unimed
into :abreviatura;
suspend;
End
if (temp = 'S') then
for select v_detalleproducto.id_unimedmedmayoreo, v_detalleproducto.preciomedmayoreo,
v_detalleproducto.impuestomedmayoreo, v_detalleproducto.totalmedmayoreo, v_detalleproducto.ventamayoreo,
v_detalleproducto.minimomedmayoreo from v_detalleproducto where v_detalleproducto.id = :_producto
into :id_unimed, :_precio, :impuesto, :total, :temp, :limite do
begin
Select t_unidadmedida.abreviatura from t_unidadmedida where t_unidadmedida.id = :id_unimed
into :abreviatura;
suspend;
End
if (temp = 'S') then
for select v_detalleproducto.id_unimedmayoreo, v_detalleproducto.preciomayoreo,
v_detalleproducto.impuestomayoreo, v_detalleproducto.totalmayoreo, v_detalleproducto.minimomayoreo from
v_detalleproducto where v_detalleproducto.id = :_producto
into :id_unimed, :_precio, :impuesto, :total, :limite do
begin
Select t_unidadmedida.abreviatura from t_unidadmedida where t_unidadmedida.id = :id_unimed
into :abreviatura;
suspend;
End
end
;
ALTER PROCEDURE V_CLIENTES
RETURNS (
ID INTEGER,
FECHA DATE,
ID_DESCUENTO INTEGER,
DESC_DESCUENTO VARCHAR(30),
MONTO DECIMAL(18,2),
ID_CLASIFICACION INTEGER,
DESC_CLASIFICACION VARCHAR(30),
VENDER CHAR(1),
CREDITO CHAR(1),
PERSONAFISICA CHAR(1),
SIGLAS VARCHAR(40),
APENOM VARCHAR(123),
NOMFACT VARCHAR(150),
FECNACIMIENTO DATE,
RFC VARCHAR(15),
CURP VARCHAR(19),
NACIONAL CHAR(1),
DIRECCION VARCHAR(60),
COLONIA VARCHAR(50),
ID_MUNICIPIO INTEGER,
MUNICIPIO VARCHAR(40),
ID_ESTADO INTEGER,
EDO VARCHAR(5),
LOCALIDAD VARCHAR(50),
CP VARCHAR(5),
REFERENCIA VARCHAR(50),
OTRA VARCHAR(50),
MISMADIRECCION CHAR(1),
E_NACIONAL CHAR(1),
E_DIRECCION VARCHAR(60),
E_COLONIA VARCHAR(50),
E_ID_MUNICIPIO INTEGER,
E_MUNICIPIO VARCHAR(40),
E_ID_ESTADO INTEGER,
E_EDO VARCHAR(5),
E_LOCALIDAD VARCHAR(50),
E_CP VARCHAR(5),
E_OTRA VARCHAR(50),
E_REFERENCIA VARCHAR(50),
REPRESENTANTE VARCHAR(93),
PUESTO VARCHAR(30),
LADA VARCHAR(3),
TELEFONO_1 VARCHAR(20),
TELEFONO_2 VARCHAR(20),
TELEFONO_3 VARCHAR(20),
FAX VARCHAR(20),
EXTENSION INTEGER,
EMAIL VARCHAR(30),
HTTP VARCHAR(30),
COMENTARIOS BLOB SUB_TYPE 1 SEGMENT SIZE 80,
COI VARCHAR(15),
ID_USUARIO VARCHAR(10),
NOMBRE VARCHAR(90),
NUMEROPROVEE INTEGER,
COBROS DECIMAL(15,2),
ABONOS DECIMAL(15,2),
SALDO DECIMAL(15,2))
AS
BEGIN
FOR
SELECT T_CLIENTES.ID, T_CLIENTES.FECHA, T_CLIENTES.ID_DESCUENTO, T_DESCUENTOS.DESCRIPCION,
T_DESCUENTOS.MONTO, T_CLIENTES.ID_CLASIFICACION, T_CLASIFICACIONES.DESCRIPCION,
T_CLASIFICACIONES.VENDER, T_CLASIFICACIONES.CREDITO, T_CLIENTES.PERSONAFISICA,
T_CLIENTES.SIGLAS, T_CLIENTES.APENOM, t_clientes.nomfact, T_CLIENTES.FECNACIMIENTO,
T_CLIENTES.RFC, T_CLIENTES.CURP, T_CLIENTES.NACIONAL, T_CLIENTES.DIRECCION, T_CLIENTES.COLONIA,
T_CLIENTES.ID_MUNICIPIO, T_MUNICIPIOS.MUNICIPIO, T_MUNICIPIOS.ID_ESTADO, T_ESTADOS.ABREVIATURA edo,
T_CLIENTES.LOCALIDAD, T_CLIENTES.CP, T_CLIENTES.REFERENCIA, T_CLIENTES.OTRA, T_CLIENTES.MISMADIRECCION,
T_CLIENTES.E_NACIONAL, T_CLIENTES.E_DIRECCION, T_CLIENTES.E_COLONIA, T_CLIENTES.E_ID_MUNICIPIO,
T_MUNICIPIOS1.MUNICIPIO e_MUNICIPIO, T_MUNICIPIOS1.ID_ESTADO e_ID_ESTADO, T_ESTADOS1.ABREVIATURA e_edo,
T_CLIENTES.E_LOCALIDAD, T_CLIENTES.E_CP, T_CLIENTES.E_OTRA, T_CLIENTES.E_REFERENCIA,
T_CLIENTES.REPRESENTANTE, T_CLIENTES.PUESTO, T_CLIENTES.LADA, T_CLIENTES.TELEFONO_1, T_CLIENTES.TELEFONO_2,
T_CLIENTES.TELEFONO_3, T_CLIENTES.FAX, T_CLIENTES.EXTENSION, T_CLIENTES.EMAIL, T_CLIENTES.HTTP,
T_CLIENTES.COMENTARIOS, T_CLIENTES.COI, T_CLIENTES.ID_USUARIO, T_USUARIOS.NOMBRE, T_CLIENTES.NUMEROPROVEE
FROM T_CLIENTES
left JOIN T_DESCUENTOS ON (T_CLIENTES.ID_DESCUENTO = T_DESCUENTOS.ID)
left outer JOIN T_CLASIFICACIONES ON (T_CLIENTES.ID_CLASIFICACION = T_CLASIFICACIONES.ID)
left outer JOIN T_MUNICIPIOS ON (T_CLIENTES.ID_MUNICIPIO = T_MUNICIPIOS.ID)
left outer JOIN T_ESTADOS ON (T_MUNICIPIOS.ID_ESTADO = T_ESTADOS.ID)
left outer JOIN T_MUNICIPIOS T_MUNICIPIOS1 ON (T_CLIENTES.E_ID_MUNICIPIO = T_MUNICIPIOS1.ID)
left outer JOIN T_ESTADOS T_ESTADOS1 ON (T_MUNICIPIOS1.ID_ESTADO = T_ESTADOS1.ID)
left outer JOIN T_USUARIOS ON (T_CLIENTES.ID_USUARIO = T_USUARIOS.ID)
INTO :ID, :FECHA, :ID_DESCUENTO, :_DESC_DESCUENTO, :MONTO, :ID_CLASIFICACION, :_DESC_CLASIFICACION, :VENDER, :CREDITO,
:_pERSONAFISICA, :SIGLAS, :APENOM, :nomfact, :FECNACIMIENTO, :RFC, :CURP, :NACIONAL, :_DIRECCION, :COLONIA, :ID_MUNICIPIO, :MUNICIPIO, :ID_ESTADO,
:EDO, :LOCALIDAD, :CP, :REFERENCIA, :OTRA, :MISMADIRECCION, :E_NACIONAL, :E_DIRECCION, :E_COLONIA, :E_ID_MUNICIPIO, :E_MUNICIPIO,
:E_ID_ESTADO, :E_EDO, :E_LOCALIDAD, :E_CP, :E_OTRA, :E_REFERENCIA, :REPRESENTANTE, :_pUESTO, :LADA, :TELEFONO_1, :TELEFONO_2, :TELEFONO_3, :FAX,
:EXTENSION, :EMAIL, :HTTP, :COMENTARIOS, :COI, :ID_USUARIO, :NOMBRE, :NUMEROPROVEE DO
BEGIN
select sum(v_cobros.mensualidad), sum(v_cobros.abonos) from v_cobros where v_cobros.id_cliente = :id
into :COBROS, :ABONOS;
if (cobros is null) then cobros = 0;
if (abonos is null) then abonos = 0;
saldo = cobros - abonos;
SUSPEND;
END
END
;
ALTER PROCEDURE V_HISTORICOVENTAS
RETURNS (
ID_PRODUCTO INTEGER,
ID INTEGER,
FECHA DATE,
APENOM VARCHAR(123),
DESC_DOCUMENTO VARCHAR(20),
NUMDOCUMENTO INTEGER,
CANTIDAD INTEGER,
PRECIOVENTA NUMERIC(18,4),
TOTALVENTA NUMERIC(18,4))
AS
BEGIN
FOR
SELECT
t_productosalmacen.id_producto,
V_VENTAS.ID,
V_VENTAS.FECHA,
V_VENTAS.apenom,
V_VENTAS.desc_documento,
V_VENTAS.NUMDOCUMENTO,
V_DETALLEVENTAS.cantidad,
V_DETALLEVENTAS.precioventa,
V_DETALLEVENTAS.totalventa
FROM t_PRODUCTOSALMACEN
INNER JOIN t_DETALLEPRODUCTO ON (t_PRODUCTOSALMACEN.ID = t_DETALLEPRODUCTO.ID_PRODUCTO)
INNER JOIN V_DETALLEVENTAS ON (t_DETALLEPRODUCTO.ID = V_DETALLEVENTAS.id_detalleproducto)
INNER JOIN V_VENTAS ON (V_DETALLEVENTAS.ID_VENTA = V_VENTAS.ID)
WHERE
(
(V_VENTAS.CANCELADA = 'N')
and
(V_VENTAS.DEVUELTA = 'N')
)
INTO :ID_PRODUCTO,
:ID,
:FECHA,
:APENOM,
:_DESC_DOCUMENTO,
:NUMDOCUMENTO,
:CANTIDAD,
:_pRECIOVENTA,
:TOTALVENTA
DO
BEGIN
SUSPEND;
END
END
;
y no me crea estos procedimiento, lo que me llama la atención es que el mensaje de error hace referencia a otros procedimientos los cuales son:
Código SQL
[-]
PERDÓN ESTE CÓDIGO ESTABA MAL LO REPETI EN MI SIGUIENTE MENSAJE
pero estos 3 procedimientos funcionan bien, por lo cual dedusco que el error esta en mi forma de estruccturar los procedimiento, alguien me puede ayudar y decir que estoy haciendo mal.
Gracias