Oracle - Problemas contador plsql

 
Vista:
Imágen de perfil de Rosa
Val: 2
Ha aumentado su posición en 11 puestos en Oracle (en relación al último mes)
Gráfica de Oracle

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.

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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder