Problemas contador plsql
Publicado por Rosa (1 intervención) el 13/08/2020 17:57:04
Buenas, me podrían dar una mano, tengo la siguiente situacion en el Forms del plsql.
La idea es la siguiente, al momento de cargar el detalle de una factura se abre una pantalla auxiliar, ahí el cajero lee con el lector N veces los códigos de barra, cuando le da aceptar debería cargarle en el detalle de la factura solo una linea por articulo y en la cantidad contar las veces que se paso por el lector y cargar.
Como podría hacerlo sin guardar en ninguna tabla auxiliar. Intente con el siguiente código pero el problemas es que le doy un valor inicial a la variable y al momento de que cambia el valor de mi variable ya me quedo null.
La idea es la siguiente, al momento de cargar el detalle de una factura se abre una pantalla auxiliar, ahí el cajero lee con el lector N veces los códigos de barra, cuando le da aceptar debería cargarle en el detalle de la factura solo una linea por articulo y en la cantidad contar las veces que se paso por el lector y cargar.
Como podría hacerlo sin guardar en ninguna tabla auxiliar. Intente con el siguiente código pero el problemas es que le doy un valor inicial a la variable y al momento de que cambia el valor de mi variable ya me quedo null.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
DECLARE
VBARTCARGADO VARCHAR2(50);
VBNRO_REG NUMBER(15); --cantidad de resgitros
VBNRO_REG_LEIDO NUMBER(15); -- nro registro leido 1-2-3 etc
EXISTE VARCHAR2(1);
VCONTADOR NUMBER(8) := 0;
BEGIN
break;
FIRST_RECORD;
VBNRO_REG := GET_BLOCK_PROPERTY('ST_BARRAS', CURRENT_RECORD);
VBARTCARGADO := :ST_BARRAS.COD_BARRA;
--FIRST_RECORD;
LOOP
VBNRO_REG_LEIDO := GET_BLOCK_PROPERTY('ST_BARRAS', CURRENT_RECORD); -- nro registro leido, se posiciona en las lineas 1-2-3 etc
IF :ST_BARRAS.COD_BARRA = VBARTCARGADO THEN -- compara si son iguales, cuenta
VCONTADOR := VCONTADOR + 1;
END IF;
-- Si no son iguales no se como hacer
--SI LLEGA AL ULTIMO REGISTRO SALE, SINO SIGUE EL LOOP
IF :SYSTEM.LAST_RECORD = 'TRUE' THEN
EXIT;
ELSE
NEXT_RECORD;
END IF;
/*
-- Abre bloque,
GO_BLOCK('B_DETALLE');
IF :B_DETALLE.COD_BARRA = VBARTCARGADO AND
VBNRO_REG <> VBNRO_REG_LEIDO THEN
CREATE_RECORD;
END IF;
:B_DETALLE.COD_BARRA := :ST_BARRAS.COD_BARRA;
NEXT_RECORD;
*/
END LOOP;
GO_BLOCK('B_DETALLE');
:B_DETALLE.COD_BARRA := :ST_BARRAS.COD_BARRA;
:B_DETALLE.CANTIDAD := VCONTADOR;
NEXT_RECORD; -- RECORRE TODAS LAS COLUMNAS DEL DETALLE
--FIRST_RECORD; -- VUELVE AL PRIMER REGISTRO PARA NO DEJAR LINEA VACIA
--null;
END;
Valora esta pregunta


0