Forms Builder

Tengo un problema con una aplicación que estoy haciendo sobre una tienda con Form Builder. Yo tengo un formulario con dos bloque Pedido y linea de Pedido, el bloque lineadepedido lo he representado de froma tabular con varios registros. ¿El problema es que al insertar varios registros de linea solo me inserta en la tabal el ultimo como puedo insertarlos todos? ¿?

1 respuesta

Respuesta
1
Primero que nada aclarame si el bloque detalle que es donde quieres hacer la inserción de varios registros es un bloque asociado a una tabla o no, si no es de una tabla dime como es que insertas, si es de una tabla no deberías de tener problemas
El bloque detalle es linea de pedido y el maestro pedido. Y si es en el bloque detalle donde quiero hacer la inserción de varios registros. Estos dos bloques no están asociados a ninguna tabla. El código que utilizo para insertar es:
Declare
prov number;
nped number;
-- FIN number;
BEGIN
--Comprobamos que se ha indicado el numero de pedido
if nvl(length(:pedidonuevo.pedido#),0)=0 then
bell;
message(' Error indique el numero de pedido ');
raise form_trigger_failure;
end if;
-- Comprobamos que que se ha indicado el proveedor y dicho proveedor existe
if nvl(length(:pedidonuevo.proveedor),0)=0 then
bell;
message(' Error indique el codigo del proveedor ');
raise form_trigger_failure;
end if;
select prov# into prov from Proveedor where Proveedor.prov#=:Pedidonuevo.Proveedor;
--Al seguir sabemos q si existe el proveedor
--Comprobamos que se ha indicado la linea de pedido
if nvl(length(:lineadepedidonuevo.linea),0)=0 then
bell;
message(' Error indique el numero de linea de pedido ');
raise form_trigger_failure;
end if;
--Comprobamos que el codigo del producto
if nvl(length(:lineadepedidonuevo.producto),0)=0 then
bell;
message(' Error indique el codigo del producto ');
raise form_trigger_failure;
end if;
--Comprobamos que el nombre del producto
if nvl(length(:lineadepedidonuevo.nom_producto),0)=0 then
bell;
message(' Error indique el nombre del producto ');
raise form_trigger_failure;
end if;
--Comprobamos que se ha indicado la cantidad
if nvl(length(:lineadepedidonuevo.cantidad),0)=0 then
bell;
message(' Error indique la cantidad ');
raise form_trigger_failure;
end if;
--Comprobamos que la cantidad es mayor que 0
if :lineadepedidonuevo.cantidad<=0 then
bell;
message(' Error la cantidad tiene que ser mayor que 0 ');
raise form_trigger_failure;
end if;
--Si todo ha ido bien hacemos los insert correspondientes
insert into Pedido values(:Pedidonuevo.pedido#,:Pedidonuevo.proveedor, :Pedidonuevo.fecha, :Pedidonuevo.Empleado);
insert into LineadePedido values(:LineadePedidonuevo.linea,:Pedidonuevo.pedido#,:LineadePedidonuevo.producto, :LineadePedidonuevo.nom_producto,:LineadePedidonuevo.cantidad);
--last_record;
--end loop;
bell;
message(' Pedido nuevo grabado ');
commit;
EXCEPTION
WHEN NO_DATA_FOUND THEN
bell;
message(' Error DATOS NO EXISTENTES ');
WHEN DUP_VAL_ON_INDEX THEN
BELL;
MESSAGE('ERROR NO SE PUEDE GRABAR CLAVE DUPLICADA ');
END;
Gracias
Espero aun te sirva ...
Mira cuando accedes a los valores de los items (:block. Item) Forms
toma el valor del registro en el que estas posicinado es por esto que
te guarda solamente el ultimo. Haz una prueba antes de guardar regresate
al registro anterior y guarda y veras como no guarda el ultimo sino el anterior.
Ahora para resolver tu bronca lo que debes hacer es un pequeño ciclo más o menos así,
este ciclo debe ir después de insertar el registro maestro:
Begin
first_record;
-- obvio para irnos al primero registro
loop -- comeinza el ciclo
exit when :block.item1 is null -- esto para saber si es el ultimo puede ser otra condicion depende de como lo manejes
-- aqui deberia de ir todas las validaciones q tienes de los registro detalle
insert into tabla values
(:block.item1, :block.item2 ...) -- insertamos en la tabla
netx_record; -- pasamos al siguiente registro
end loop;
End;
Más o menos así.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas