PDA

Ver la Versión Completa : error al crear base de datos desde ddl


jzginez
29-09-2008, 20:02:01
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:



/*******************************************************************************

The next statement causes the following error:



Invalid token.

invalid request BLR at offset 480.

Procedure V_DETALLEPRODUCTO is not selectable (it does not contain a SUSPEND statement).

*******************************************************************************/

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

/* Procedure Text */

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

;



/*******************************************************************************

The next statement causes the following error:



Invalid token.

invalid request BLR at offset 2244.

Procedure V_COBROS is not selectable (it does not contain a SUSPEND statement).

*******************************************************************************/

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

;



/*******************************************************************************

The next statement causes the following error:



Invalid token.

invalid request BLR at offset 280.

Procedure V_VENTAS is not selectable (it does not contain a SUSPEND statement).

*******************************************************************************/

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:


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

duilioisola
30-09-2008, 12:20:12
El problema es que los procedimientos que utilizas no contienen la instrucción SUSPEND, para devolver datos.

Mira el script que genera IBExpert. Creo que encontraras que primero crea los procedimientos vacíos y luego hace un ALTER PROCEDURE para meterles el código.


CREATE PROCEDURE PROC1 (variables) RETURNS (variables)
as
begin
/* DUMMY */
end

[...]

ALTER PROCEDURE PROC1 (variables) RETURNS (variables)
as
begin
CODIGO
CODIGO
CODIGO
CODIGO
CODIGO
CODIGO
end


Los procedimientos que no tienen el SUSPEND son:
V_DETALLEPRODUCTO, V_COBROS y V_VENTAS.

Supongo que en el script, en donde crea el procedimiento deberás agregar el SUSPEND


CREATE PROCEDURE V_DETALLEPRODUCTO (variables) RETURNS (variables)
as
begin
/* DUMMY */
SUSPEND;
end


Procedure V_DETALLEPRODUCTO is not selectable (it does not contain a SUSPEND statement).
Procedure V_COBROS is not selectable (it does not contain a SUSPEND statement).
Procedure V_VENTAS is not selectable (it does not contain a SUSPEND statement).

jzginez
30-09-2008, 14:55:55
Gracias duilioisola por tu respuesta pero como cometí el error de escribir 2 veces el mismo código en mi mensaje anterior y no el código de los procedimientos que supuestamente tienen el error para que se viera que si esta escrita la sentencia SUSPEND y según yo están escritas de forma correcta.

CREATE PROCEDURE V_VENTAS

returns (

id integer,

fecha date,

id_cliente integer,

apenom varchar(123),

id_documento integer,

desc_documento varchar(20),

numdocumento integer,

id_formapagos integer,

contado char(1),

numpagos integer,

diasplazo integer,

id_impuesto integer,

desc_impuesto varchar(10),

porceimpu decimal(18,2),

porpedido char(1),

id_ordencompra integer,

id_usuario varchar(10),

nombre varchar(90),

calendariopago char(1),

cancelada char(1),

devuelta char(1),

subtotal decimal(15,2),

impuesto decimal(15,2),

total decimal(15,2),

abonos decimal(15,2),

saldo decimal(15,2),

fecha_envio date,

fletera varchar(60),

chofer varchar(130),

vehiculo varchar(50),

placas varchar(10),

id_subcategorias integer,

desc_subcategoria varchar(30),

id_categoria integer,

desc_categoria varchar(30))

as

BEGIN

FOR

SELECT T_VENTAS.ID, T_VENTAS.FECHA, T_VENTAS.ID_CLIENTE, T_CLIENTES.APENOM, T_VENTAS.ID_DOCUMENTO,
T_DOCUMENTOS.DESCRIPCION, T_VENTAS.NUMDOCUMENTO, T_VENTAS.ID_FORMAPAGOS, T_VENTAS.CONTADO,
T_VENTAS.NUMPAGOS, T_VENTAS.DIASPLAZO, T_VENTAS.ID_IMPUESTO, T_IMPUESTOS.DESCRIPCION, T_VENTAS.PORCEIMPU,
T_VENTAS.PORPEDIDO, T_VENTAS.ID_ORDENCOMPRA, T_VENTAS.ID_USUARIO, T_USUARIOS.NOMBRE,
T_VENTAS.CALENDARIOPAGO, T_VENTAS.CANCELADA, t_ventas.fecha_envio, t_ventas.fletera, t_ventas.chofer,
t_ventas.vehiculo, t_ventas.placas

FROM T_VENTAS

INNER JOIN T_CLIENTES ON (T_VENTAS.ID_CLIENTE = T_CLIENTES.ID)

INNER JOIN T_DOCUMENTOS ON (T_VENTAS.ID_DOCUMENTO = T_DOCUMENTOS.ID)

INNER JOIN T_IMPUESTOS ON (T_VENTAS.ID_IMPUESTO = T_IMPUESTOS.ID)

INNER JOIN T_USUARIOS ON (T_VENTAS.ID_USUARIO = T_USUARIOS.ID)

INTO :ID,

:FECHA,

:ID_CLIENTE,

:APENOM,

:ID_DOCUMENTO,

:_DESC_DOCUMENTO,

:NUMDOCUMENTO,

:ID_FORMAPAGOS,

:CONTADO,

:NUMPAGOS,

:_DIASPLAZO,

:ID_IMPUESTO,

:_DESC_IMPUESTO,

:_PORCEIMPU,

:_PORPEDIDO,

:ID_ORDENCOMPRA,

:ID_USUARIO,

:NOMBRE,

:CALENDARIOPAGO,

:CANCELADA,

:fecha_envio,

:fletera,

:chofer,

:vehiculo,

:_Placas

DO

BEGIN

Select sum(v_detalleventas.totalventa) from v_detalleventas where v_detalleventas.id_venta = :id into :SUBTOTAL;

if (subtotal is null) then subtotal = 0;

Impuesto = Subtotal * PORCEIMPU / 100;

Total = subtotal + impuesto;

Select sum(v_cobros.abonos) from v_cobros where v_cobros.id_venta = :ID into :ABONOS;

if (abonos is null) then abonos = 0;

Saldo = Total - Abonos;

SELECT Max(T_SUBCATEGORIAS.ID)

FROM T_DETALLEVENTAS

INNER JOIN T_DETALLEPRODUCTO ON (T_DETALLEVENTAS.ID_PRODUCTO = T_DETALLEPRODUCTO.ID)

INNER JOIN T_PRODUCTOSALMACEN ON (T_DETALLEPRODUCTO.ID_PRODUCTO = T_PRODUCTOSALMACEN.ID)

INNER JOIN T_PRODUCTOS ON (T_PRODUCTOSALMACEN.ID_PRODUCTO = T_PRODUCTOS.ID)

INNER JOIN T_SUBCATEGORIAS ON (T_PRODUCTOS.ID_SUBCATEGORIA = T_SUBCATEGORIAS.ID)

WHERE ((T_DETALLEVENTAS.ID_VENTA = :ID)) into :ID_SUBCATEGORIAS;

Select t_subcategorias.descripcion, t_subcategorias.id_categoria from t_subcategorias where
t_subcategorias.id = :ID_SUBCATEGORIAS into :_DESC_SUBCATEGORIA, :ID_CATEGORIA;
Select t_categorias.descripcion from t_categorias where t_categorias.id = :ID_CATEGORIA
into :_DESC_CATEGORIA;

Select Min(t_detalleventas.devuelta) from t_detalleventas where t_detalleventas.id_venta = :id
into :_Devuelta;

SUSPEND;

END

END

/***********************************************************/

CREATE PROCEDURE V_DETALLEPRODUCTO

returns (

id integer,

id_productoalmacen integer,

id_productogeneral integer,

clave varchar(20),

desc_producto varchar(60),

desc_factura blob sub_type 1 segment size 80,

codigobarras varchar(13),

detallar varchar(1),

cantidad decimal(15,2),

vendido char(1),

adicional1 varchar(30),

adicional2 varchar(30),

adicional3 varchar(30),

adicional4 varchar(30),

adicional5 varchar(30),

adicional6 varchar(30),

adicional7 varchar(30),

adicional8 varchar(30),

adicional9 varchar(15),

adicional10 varchar(30),

adicional11 varchar(30),

id_impuesto integer,

desc_impuesto varchar(10),

id_unimed integer,

desc_unimed varchar(5),

costouni decimal(18,2),

descuento decimal(18,2),

costodescuento decimal(15,2),

costo1 decimal(18,2),

costo2 decimal(18,2),

costo3 decimal(18,2),

costosubtotal decimal(15,2),

costoimpuesto decimal(15,2),

costototal decimal(15,2),

id_compra integer,

fechaentrada date,

id_venta integer,

fechaventa date,

etiqueta char(1),

minimomenudeo integer,

id_unimedmenudeo integer,

desc_unimedmenudeo varchar(5),

id_tpmenudeo integer,

utilidadmenudeo decimal(18,2),

preciomenudeo decimal(15,2),

ventamedmayoreo char(1),

id_unimedmedmayoreo integer,

desc_unimedmedmayoreo varchar(5),

minimomedmayoreo integer,

id_tpmedmayoreo integer,

utilidadmedmayoreo decimal(18,2),

preciomedmayoreo decimal(15,2),

ventamayoreo char(1),

id_unimedmayoreo integer,

desc_unimedmayoreo varchar(5),

minimomayoreo integer,

id_tpmayoreo integer,

utilidadmayoreo decimal(18,2),

preciomayoreo decimal(15,2),

id_impuestov integer,

desc_impuventa varchar(10),

impuestomenudeo decimal(15,2),

impuestomedmayoreo decimal(15,2),

impuestomayoreo decimal(15,2),

totalmenudeo decimal(15,2),

totalmedmayoreo decimal(15,2),

totalmayoreo decimal(15,2),

enconsigna char(1),

id_cliente_consigna integer,

cliente varchar(123),

fechaconsigna date,

id_almacen integer,

desc_almacen varchar(20),

envalesalida char(1),

id_vale integer,

pventa char(1),

ubicacion varchar(10),

id_subcategoria integer,

desc_subcategoria varchar(30),

id_categoria integer,

desc_categoria varchar(30),

id_familia integer,

desc_familia varchar(30),

descuentomaximo decimal(15,2))

as

declare variable impucompra decimal(15,2);

declare variable impuventa decimal(15,2);

declare variable campo_ad varchar(30);

BEGIN

FOR

SELECT T_DETALLEPRODUCTO.ID, T_DETALLEPRODUCTO.ID_PRODUCTO, T_DETALLEPRODUCTO.VENDIDO,
T_DETALLEPRODUCTO.ADICIONAL1, T_DETALLEPRODUCTO.ADICIONAL2, T_DETALLEPRODUCTO.ADICIONAL3,
T_DETALLEPRODUCTO.ADICIONAL4, T_DETALLEPRODUCTO.ADICIONAL5, T_DETALLEPRODUCTO.ADICIONAL6,
T_DETALLEPRODUCTO.ADICIONAL7, T_DETALLEPRODUCTO.ADICIONAL8, T_DETALLEPRODUCTO.ADICIONAL9,
T_DETALLEPRODUCTO.ADICIONAL10, T_DETALLEPRODUCTO.ADICIONAL11, T_DETALLEPRODUCTO.ID_IMPUESTO,
T_DETALLEPRODUCTO.ID_UNIMED, T_DETALLEPRODUCTO.COSTOUNI, T_DETALLEPRODUCTO.DESCUENTO,
T_DETALLEPRODUCTO.COSTO1, T_DETALLEPRODUCTO.COSTO2, T_DETALLEPRODUCTO.COSTO3,
T_DETALLEPRODUCTO.ID_COMPRA, T_DETALLEPRODUCTO.FECHAENTRADA, T_DETALLEPRODUCTO.ID_VENTA,
T_DETALLEPRODUCTO.FECHAVENTA, T_DETALLEPRODUCTO.ETIQUETA, T_DETALLEPRODUCTO.MINIMOMENUDEO,
T_DETALLEPRODUCTO.ID_UNIMEDMENUDEO, T_DETALLEPRODUCTO.ID_TPMENUDEO,
T_DETALLEPRODUCTO.UTILIDADMENUDEO,
T_DETALLEPRODUCTO.VENTAMEDMAYOREO, T_DETALLEPRODUCTO.ID_UNIMEDMEDMAYOREO,
T_DETALLEPRODUCTO.MINIMOMEDMAYOREO,
T_DETALLEPRODUCTO.ID_TPMEDMAYOREO, T_DETALLEPRODUCTO.UTILIDADMEDMAYOREO,
T_DETALLEPRODUCTO.VENTAMAYOREO,
T_DETALLEPRODUCTO.ID_UNIMEDMAYOREO, T_DETALLEPRODUCTO.MINIMOMAYOREO,
T_DETALLEPRODUCTO.ID_TPMAYOREO,
T_DETALLEPRODUCTO.UTILIDADMAYOREO, T_DETALLEPRODUCTO.ID_IMPUESTOV, T_DETALLEPRODUCTO.ENCONSIGNA,
T_DETALLEPRODUCTO.ID_CLIENTE_CONSIGNA, T_DETALLEPRODUCTO.FECHACONSIGNA,
t_detalleproducto.envalesalida, t_detalleproducto.id_vale

FROM T_DETALLEPRODUCTO

INTO :ID, :ID_PRODUCTOALMACEN, :VENDIDO, :ADICIONAL1, :ADICIONAL2, :ADICIONAL3, :ADICIONAL4,

:ADICIONAL5, :ADICIONAL6, :ADICIONAL7, :ADICIONAL8, :ADICIONAL9, :ADICIONAL10, :ADICIONAL11,

:ID_IMPUESTO, :ID_UNIMED, :COSTOUNI, :_DESCUENTO, :COSTO1, :COSTO2, :COSTO3, :ID_COMPRA, :FECHAENTRADA,

:ID_VENTA, :FECHAVENTA, :ETIQUETA, :MINIMOMENUDEO, :ID_UNIMEDMENUDEO, :ID_TPMENUDEO, :UTILIDADMENUDEO,

:VENTAMEDMAYOREO, :ID_UNIMEDMEDMAYOREO, :MINIMOMEDMAYOREO, :ID_TPMEDMAYOREO, :UTILIDADMEDMAYOREO,

:VENTAMAYOREO, :ID_UNIMEDMAYOREO, :MINIMOMAYOREO, :ID_TPMAYOREO, :UTILIDADMAYOREO, :ID_IMPUESTOV, :ENCONSIGNA,

:ID_CLIENTE_CONSIGNA, :FECHACONSIGNA, :envalesalida, :id_vale

DO

BEGIN

Select t_productosalmacen.id_producto, t_productosalmacen.cantidad, t_productosalmacen.id_almacen from
t_productosalmacen where t_productosalmacen.id = :ID_PRODUCTOALMACEN
into :ID_PRODUCTOGENERAL, :CANTIDAD, :id_almacen;

Select t_productos.clave, t_productos.descripcion, t_productos.descripcion_fact, t_productos.detallar,
t_productos.pventa, t_productos.codigobarras, t_productos.ubicacion, t_productos.id_subcategoria
from t_productos where t_productos.id = :ID_PRODUCTOGENERAL
into :CLAVE, :_DESC_PRODUCTO, :_DESC_FACTURA, :_DETALLAR, :_Pventa, :codigobarras, :ubicacion, :id_subcategoria;
if (Detallar = 'S') then Cantidad = 1;

select t_impuestos.descripcion, t_impuestos.monto from t_impuestos where t_impuestos.id = :ID_IMPUESTO
into :_DESC_IMPUESTO, :IMPUCOMPRA;

select t_unidadmedida.abreviatura from t_unidadmedida where t_unidadmedida.id = :ID_UNIMED
into :_DESC_UNIMED;

Costodescuento= costouni - descuento;

CostoSubtotal= costodescuento+costo1+costo2+costo3;

CostoImpuesto= costosubtotal * impucompra / 100;

CostoTotal = CostoSubtotal + CostoImpuesto;

Select t_unidadmedida.abreviatura from t_unidadmedida where t_unidadmedida.id = :ID_UNIMEDMENUDEO into :_DESC_UNIMEDMENUDEO;

if (id_tpmenudeo = 0)

then preciomenudeo = utilidadmenudeo;

Else PrecioMenudeo = (COSTOTOTAL / (100 - UTILIDADMENUDEO)) * 100;

Select t_unidadmedida.abreviatura from t_unidadmedida where t_unidadmedida.id = :ID_UNIMEDMEDMAYOREO into :_DESC_UNIMEDMEDMAYOREO;

if (VENTAMEDMAYOREO = 'S')

then if (id_tpmedmayoreo = 0)

then preciomedmayoreo = utilidadmedmayoreo;

Else PrecioMedmayoreo = (COSTOTOTAL / (100 - UTILIDADmedmayoreo)) * 100;

else PrecioMedMayoreo = 0;

Select t_unidadmedida.abreviatura from t_unidadmedida where t_unidadmedida.id = :ID_UNIMEDMAYOREO into :_DESC_UNIMEDMAYOREO;

if (VENTAMAYOREO = 'S')

then if (id_tpmayoreo = 0)

then preciomayoreo = utilidadmayoreo;

Else Preciomayoreo = (COSTOTOTAL / (100 - UTILIDADmayoreo)) * 100;

Else PrecioMayoreo = 0;

select t_impuestos.descripcion, t_impuestos.monto from t_impuestos where t_impuestos.id = :ID_IMPUESTOV into :_DESC_IMPUVENTA, :IMPUVENTA;

ImpuestoMenudeo = PrecioMenudeo * impuventa / 100;

totalmenudeo = preciomenudeo + ImpuestoMenudeo;

ImpuestoMedmayoreo = Preciomedmayoreo * impuventa / 100;

totalmedmayoreo = preciomedmayoreo + ImpuestoMedMayoreo;

ImpuestoMayoreo = PrecioMayoreo * impuventa / 100;

totalMayoreo = precioMayoreo + ImpuestoMayoreo;

if (enconsigna = 'S')

then Select t_clientes.apenom from t_clientes where t_clientes.id = :ID_CLIENTE_CONSIGNA into :CLIENTE;

Else Begin

id_cliente_consigna = null;

Cliente = null;

FechaConsigna = null;

End

select t_almacen.descripcion from t_almacen where t_almacen.id = :id_almacen into :_Desc_almacen;

Select t_subcategorias.descripcion, t_subcategorias.id_categoria, t_subcategorias.descuentomaximo from
t_subcategorias where t_subcategorias.id = :id_subcategoria
into :_Desc_subcategoria, :id_categoria, :_Descuentomaximo;

Select t_categorias.descripcion, t_categorias.id_familia from t_categorias where t_categorias.id
= :id_subcategoria into :_Desc_categoria, :id_familia;

Select t_familias.descripcion from t_familias where t_familias.id = :id_familia into :_Desc_familia;

if (detallar = 'S')

then Begin

Select t_adicionales.adicional1 from t_Adicionales where t_adicionales.id_producto
= :id_productogeneral into :campo_ad;

if (not(campo_ad is null)) then desc_factura = desc_factura||' '||campo_ad||' '||adicional1;

Select t_adicionales.adicional2 from t_Adicionales where t_adicionales.id_producto = :id_productogeneral into :campo_ad;

if (not(campo_ad is null)) then desc_factura = desc_factura||' '||campo_ad||' '||adicional2;

Select t_adicionales.adicional3 from t_Adicionales where t_adicionales.id_producto = :id_productogeneral into :campo_ad;

if (not(campo_ad is null)) then desc_factura = desc_factura||' '||campo_ad||' '||adicional3;

Select t_adicionales.adicional4 from t_Adicionales where t_adicionales.id_producto = :id_productogeneral into :campo_ad;

if (not(campo_ad is null)) then desc_factura = desc_factura||' '||campo_ad||' '||adicional4;

Select t_adicionales.adicional5 from t_Adicionales where t_adicionales.id_producto = :id_productogeneral into :campo_ad;

if (not(campo_ad is null)) then desc_factura = desc_factura||' '||campo_ad||' '||adicional5;

Select t_adicionales.adicional6 from t_Adicionales where t_adicionales.id_producto = :id_productogeneral into :campo_ad;

if (not(campo_ad is null)) then desc_factura = desc_factura||' '||campo_ad||' '||adicional6;

Select t_adicionales.adicional7 from t_Adicionales where t_adicionales.id_producto = :id_productogeneral into :campo_ad;

if (not(campo_ad is null)) then desc_factura = desc_factura||' '||campo_ad||' '||adicional7;

Select t_adicionales.adicional8 from t_Adicionales where t_adicionales.id_producto = :id_productogeneral into :campo_ad;

if (not(campo_ad is null)) then desc_factura = desc_factura||' '||campo_ad||' '||adicional8;

Select t_adicionales.adicional9 from t_Adicionales where t_adicionales.id_producto = :id_productogeneral into :campo_ad;

if (not(campo_ad is null)) then desc_factura = desc_factura||' '||campo_ad||' '||adicional9;

Select t_adicionales.adicional10 from t_Adicionales where t_adicionales.id_producto = :id_productogeneral into :campo_ad;

if (not(campo_ad is null)) then desc_factura = desc_factura||' '||campo_ad||' '||adicional10;

Select t_adicionales.adicional11 from t_Adicionales where t_adicionales.id_producto = :id_productogeneral into :campo_ad;

if (not(campo_ad is null)) then desc_factura = desc_factura||' '||campo_ad||' '||adicional11;

End

SUSPEND;

END

END

/*****************************************************/

CREATE PROCEDURE V_COBROS

returns (

id integer,

id_venta integer,

id_notacargo integer,

num_cobro varchar(10),

cobro integer,

cobros integer,

enganche char(1),

capital decimal(18,2),

pagofijo decimal(18,2),

interes decimal(18,2),

impuesto decimal(18,2),

totalinteres decimal(18,2),

total decimal(18,2),

mensualidad decimal(18,2),

abonos decimal(15,2),

saldo decimal(15,2),

fecha date,

motivo varchar(20),

numero_mov integer,

id_cliente integer,

cliente varchar(123))

as

BEGIN

FOR

SELECT T_COBROS.ID, T_COBROS.ID_VENTA, T_COBROS.ID_NOTACARGO, T_COBROS.COBRO, T_COBROS.COBROS,
T_COBROS.ENGANCHE, T_COBROS.CAPITAL, T_COBROS.PAGOFIJO, T_COBROS.INTERES, T_COBROS.IMPUESTO,
T_COBROS.TOTALINTERES, T_COBROS.TOTAL, T_COBROS.MENSUALIDAD, T_COBROS.FECHA
FROM T_COBROS

INTO :ID, :ID_VENTA, :ID_NOTACARGO, :COBRO, :COBROS, :ENGANCHE, :CAPITAL, :_PAGOFIJO, :INTERES, :IMPUESTO,
:TOTALINTERES, :TOTAL, :MENSUALIDAD, :FECHA DO

BEGIN

num_cobro = :COBRO||'/'||:COBROS;

if (not(id_venta is null))

then Begin

motivo = 'Venta';

numero_mov = id_venta;

Select t_ventas.id_cliente from t_ventas where t_ventas.id = :ID_VENTA into :ID_CLIENTE;

End

if (not(ID_NOTACARGO is null))

then Begin

motivo = 'Nota de cargo';

Numero_mov = ID_NotaCargo;

Select t_notascargoclientes.id_cliente from t_notascargoclientes where t_notascargoclientes.id = :ID_NOTACARGO into :ID_CLIENTE;

End

Select t_clientes.apenom from t_clientes where t_clientes.id = :ID_CLIENTE into :CLIENTE;

select sum(t_abonoscobros.monto) from t_abonoscobros where t_abonoscobros.id_cobro = :ID into :ABONOS;

if (abonos is null) then abonos = 0;

Saldo = mensualidad - abonos;

SUSPEND;

END

END

/********************************************/