Iniciar Sesión

Ver la Versión Completa : [Sintaxis] Lectura del ultimo registro


jmeza
31 de enero de 2018, 04:25
Hola a todos, si alguien me pude ayudar con el siguiente problema
Powercobolv9
Estoy programando un form que la clave inicial es un numero de Pic 9(5)
Este número es correlativo, como puede hacer la lectura para saber cual es el ultimo número del registro guardado.
Al ultimo registro yo le sumo 1 para un nuevo registro y que lo muestre en el Cmtext1
Saludos

Gatomalo
31 de enero de 2018, 14:18
OPEN INPUT TABLA.
MOVE 1 TO TIPO-T.
READ TABLA INVALID KEY STOP "NO EXITE NRO TABLA".

ADD 1 TO NRO-T.
CLOSE TABLA.
MOVE NRO-T TO POW-NUMERIC OF CMTEXT1.


Cada vez que grabes adicionas 1 y regrabas.

Gusaiello
31 de enero de 2018, 15:30
Otra posibilidad es :

MOVE HIGH-VALUE TO CLAVE.
START ARCHIVO KEY NOT > CLAVE.
READ ARCHIVO PREVIOUS
AT END MOVE 0 TO CLAVE
END-READ.
ADD 1 TO CLAVE.

La primera vez que se ejecuta el programa inicializa en 0 el campo CLAVE.
Y en lo sucesivo te devuelve el último ingresado, y a ese le suma 1.
En este caso, no es necesario guardar ningún dato adicional, con esta búsqueda alcanza.

Kuk
31 de enero de 2018, 20:40
jmeza,

READ ARCHIVO LAST

jmeza
5 de febrero de 2018, 03:13
OK probara con las alternativas enviados

Saludos

---------- Post añadido : 02:13 ---------- Post anterior : 20:24 ----------

El Código cobol que utilice para lectura del ultimo Registro y que me funciono ok es el que está a continuación (LEE-ORDE).

Pero tengo pendiente por resolver 2 problemas que no he logrado solucionar.

1.- Hay forma que el nuevo registro se muestre el número que corresponde al siguiente en cmtext11 al abril el formulario (este es el primer campo del formulario), solo se está mostrando después de pasar al siguiente campo. (como un UPDATE en Rmcobol).

2.- Cuando trato de editar un registro ya existente para modificar, imprimir etc. no funciona no muestra los datos del registro que solicite, solo muestra el nuevo número que selecciono LEE-ORDE.

Pero si deshabilito el código programado del LEE-ORDE, inicio el programa en PROCESO
Si muestra el registro que yo solicite sin problema.

Alguien más entendido en el tema me podría ayudar como solucionar estos problemas.

PROCEDURE DIVISION.
LEE-ORDE.
OPEN INPUT REGORDEN.
MOVE HIGH-VALUE TO ORD-CLAV1.
START REGORDEN KEY NOT > ORD-CLAV1
READ REGORDEN PREVIOUS AT END MOVE 0 TO ORD-CLAV1
END-READ.
ADD 1 TO ORD-NUMORDE.
MOVE ORD-NUMORDE TO POW-NUMERIC OF CMTEXT11.
CLOSE REGORDEN.

PROCESO.
OPEN INPUT REGORDEN MAEPROV REGREM05 REGTABLA.
MOVE POW-NUMERIC OF CMTEXT11 TO ORD-NUMORDE.
READ REGORDEN INVALID KEY GO FIN.
CALL "LIMPIAR".
MOVE ORD-NUMORDE TO POW-NUMERIC OF CMTEXT11.
MOVE ORD-FECORDE TO POW-TEXT OF CMTEXT12.
IF ORD-MONEDA = 1 MOVE "PESOS" TO POW-TEXT OF CmStatic27.
IF ORD-MONEDA = 2 MOVE "DOLAR" TO POW-TEXT OF CmStatic27.
IF ORD-MONEDA = 3 MOVE "EURO" TO POW-TEXT OF CmStatic27.

MOVE ORD-TCAMBIO TO POW-NUMERIC OF CMTEXT13.
MOVE ORD-RUTPV TO POW-NUMERIC OF CMTEXT14.
MOVE ORD-RUTPV TO CODPV.
READ MAEPROV INVALID KEY MOVE "NO EXISTE" TO NOM-PV.
MOVE NOM-PV TO POW-TEXT OF CmStatic13.
CLOSE REGORDEN MAEPROV REGREM05 REGTABLA.
invoke cmtext12 "setfocus".
EXIT PROGRAM.

FIN.
CALL "LIMPIAR1".
CLOSE REGORDEN MAEPROV REGREM05 REGTABLA.
INVOKE CMTEXT12 "SETFOCUS".