Files
2026-09-22 20:38:51 -04:00

767 lines
23 KiB
Plaintext

{
----------------------------------------------------------------------------
PROGRAMA : IRPRMT006
OBJETIVO : Programa Captura Documento Movimiento:REPORTE ENTRADA
de Inventario de Repuestos.
PROGRAMADOR : Juan Fco. Soto (Johnny)
FECHA REALIZACION : Febrero 1, 1993.
MODIFICADO POR : Juan Fco. Soto
FECHA : Septiembre 8, 1993.
----------------------------------------------------------------------------
}
GLOBALS
"irprgb000.4gl"
DEFINE total_cantidad,porciento,r_cantidad,ordenada,recibida ,
existe_act,r_cantidad1 DECIMAL(12,2)
DEFINE p_maquina SMALLINT
DEFINE errores,cerrada CHAR(1)
DEFINE opc1 CHAR(1)
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CALL ARG_VAL(3) RETURNING impresor
CONNECT to "decomarmol" USER usuarios USING clave
SELECT a.* INTO p_companias.* FROM companias a
CALL irprmt006()
END MAIN
FUNCTION irprmt006()
DEFINE fecha CHAR(8)
CLEAR SCREEN
OPTIONS
ERROR LINE 24,
FORM LINE 4,
COMMENT LINE 22,
PROMPT LINE 23
LET fecha = today USING "dd/mm/yyyy"
OPEN FORM irfmmt006 FROM "irfmmt006"
DISPLAY FORM irfmmt006
MENU
ON ACTION nuevo
CALL inpcad006()
ON ACTION buscar
CALL irprmf006()
ON ACTION salir
EXIT MENU
END MENU
END FUNCTION
FUNCTION inpcad006()
LET int_flag = FALSE
INITIALIZE datos_gen.* TO NULL
LET datos_gen.fecha = today using "dd/mm/yyyy"
LABEL otra_vez:
LABEL vuelve:
IF (OPC = "S" OR OPC = "s") OR opc is null THEN
INITIALIZE datos_gen.* TO NULL
END IF
LET datos_gen.cod_mov = cod_mov_ant
LET datos_gen.fecha = today using "dd/mm/yyyy"
INPUT BY NAME datos_gen.cod_mov THRU datos_gen.descrip_mov WITHOUT DEFAULTS
BEFORE FIELD num_doc
LET datos_gen.fecha = today using "dd/mm/yyyy"
DISPLAY BY NAME datos_gen.fecha
AFTER FIELD sec_a
SELECT a.nom_dpto INTO nombre_d
FROM adtb00001 a
WHERE a.departamento = datos_gen.sec_a
IF STATUS = NOTFOUND THEN
LET numero_msg = 12
CALL msg(numero_msg)
NEXT FIELD num_doc
END IF
AFTER FIELD fecha
IF datos_gen.fecha is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha
END IF
IF datos_gen.fecha > TODAY THEN
LET numero_msg = 189
CALL msg(numero_msg)
NEXT FIELD fecha
END IF
LET p_fechas = datos_gen.fecha using "ddmmyyyy"
CALL prd(p_fechas,usuarios) RETURNING bandera
IF bandera = 1 THEN
LET bandera = 0
NEXT FIELD fecha
END IF
AFTER FIELD cod_mov
IF datos_gen.cod_mov IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_mov
END IF
LET cod_mov_ant = datos_gen.cod_mov
# Control codigos para este programa
SELECT unique a.cod_mov FROM irtb00018 a
WHERE a.cod_mov = datos_gen.cod_mov and a.usuario = SUSER_SNAME()
IF status = notfound THEN
LET numero_msg = 139
CALL msg(numero_msg)
#NEXT FIELD cod_mov
END IF
SELECT MAX(num_salida) INTO p_ultimo FROM irtb00014
WHERE cod_mov = datos_gen.cod_mov
IF p_ultimo is null THEN
LET p_ultimo = 0
END IF
LET datos_gen.num_doc = p_ultimo + 1
SELECT UNIQUE a.num_doc FROM irtb00006 a
WHERE a.num_doc = p_ultimo AND a.cod_mov = datos_gen.cod_mov
IF status != notfound THEN
SELECT MAX(a.num_doc) INTO p_ultimo FROM irtb00006 a
WHERE a.cod_mov = datos_gen.cod_mov
IF p_ultimo is null THEN
LET p_ultimo = 0
END IF
LET datos_gen.num_doc = p_ultimo + 1
END IF
DISPLAY BY NAME datos_gen.num_doc
IF datos_gen.cod_mov IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_mov
END IF
SELECT a.descrip_mov INTO datos_gen.descrip_mov FROM irtb00005 a
WHERE a.cod_mov = datos_gen.cod_mov and a.status_t is null
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_mov
END IF
DISPLAY BY NAME datos_gen.descrip_mov
AFTER FIELD orden_compra
SELECT a.cod_sp,a.cod_sp_sec,cierre
INTO datos_gen.cod_sp,datos_gen.cod_sp_sec,cerrada
FROM cotb00014 a
WHERE a.num_oc = datos_gen.orden_compra AND a.tipo = datos_gen.tipo AND
a.status_t is null
IF status >= 0 THEN
IF cerrada = "S" THEN
LET numero_msg = 74
CALL msg(numero_msg)
NEXT FIELD tipo
END IF
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD tipo
END IF
END IF
SELECT UNIQUE nom_sp INTO datos_gen.nom_sp FROM cotb00001 WHERE
cod_sp = datos_gen.cod_sp and
cod_sp_sec = datos_gen.cod_sp_sec and
status_t is null
IF status >= 0 THEN
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD tipo
END IF
END IF
DISPLAY BY NAME datos_gen.cod_sp,datos_gen.cod_sp_sec,datos_gen.nom_sp
NEXT FIELD conduce_no
AFTER FIELD fact_no
# Verifica que el numero de la factura no se repita con el mismo numero de
# documento.
IF datos_gen.conduce_no is null AND datos_gen.fact_no is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD conduce_no
END IF
IF datos_gen.conduce_no is not null AND datos_gen.fact_no is not null THEN
LET numero_msg = 29
CALL msg(numero_msg)
NEXT FIELD conduce_no
END IF
IF datos_gen.fact_no IS NOT NULL THEN
SELECT UNIQUE num_doc FROM irtb00006
WHERE num_doc=datos_gen.num_doc and orden_compra=datos_gen.orden_compra and
fact_no = datos_gen.fact_no and cod_mov = datos_gen.cod_mov and
status_t is null
IF status >= 0 THEN
IF STATUS != NOTFOUND THEN
LET numero_msg = 12
CALL msg(numero_msg)
NEXT FIELD num_doc
END IF
END IF
END IF
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
CALL movi.clear()
SLEEP 2
RETURN
END IF
SELECT UNIQUE a.num_doc FROM irtb00006 a
WHERE a.num_doc=datos_gen.num_doc and a.orden_compra=datos_gen.orden_compra and
a.fact_no = datos_gen.fact_no and a.cod_mov = datos_gen.cod_mov and
a.status_t is null
IF status >= 0 THEN
IF STATUS != NOTFOUND THEN
LET numero_msg = 12
CALL msg(numero_msg)
NEXT FIELD num_doc
END IF
END IF
IF datos_gen.conduce_no is null AND datos_gen.fact_no is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD conduce_no
END IF
IF datos_gen.fecha IS NULL THEN
CALL msg(16)
NEXT FIELD fecha
END IF
EXIT INPUT
END INPUT
INITIALIZE ant_art.* TO NULL
IF opc = "S" or opc = "s" OR opc IS NULL THEN
FOR idx = 1 to arr_count()
LET movi[idx].cod_n = null
LET movi[idx].cod_grupo = null
LET movi[idx].cod_tipo = null
LET movi[idx].cod_sec = null
LET movi[idx].cantidad_2 = null
LET movi[idx].cantidad_1 = null
LET movi[idx].maquina = null
END FOR
END IF
DECLARE busca CURSOR FOR
SELECT a.cod_n,
a.cod_grupo,
a.cod_tipo,
a.cod_sec,
b.descrip_esp,
b.unidad_med,
SUM(a.cantidad)
FROM cotb00015 a,irtb00002 b
WHERE a.num_oc = datos_gen.orden_compra and
a.tipo = datos_gen.tipo and a.status_t is null and
a.cod_n = b.cod_n and
a.cod_n = b.cod_n and
a.cod_grupo = b.cod_grupo and
a.cod_tipo = b.cod_tipo and
a.cod_sec = b.cod_sec AND
b.status_t IS NULL
GROUP BY a.cod_n,
a.cod_grupo,
a.cod_tipo,
a.cod_sec,
b.descrip_esp,
b.unidad_med
LET errores = "N"
LET idx = 1
FOREACH busca INTO movi[idx].*
IF (movi[idx].cod_n < 4 OR movi[idx].cod_n > 9) THEN
LET numero_msg = 83
CALL msg(numero_msg)
LET errores = "S"
EXIT FOREACH
END IF
LET existe_act = 0
IF movi[idx].cod_n = 4 THEN
SELECT SUM(a.cantidad_2) INTO existe_act FROM ihtb00006 a
WHERE a.orden_compra=datos_gen.orden_compra and a.tipo=datos_gen.tipo
AND a.status_t is null AND a.cod_n=movi[idx].cod_n and
a.cod_grupo=movi[idx].cod_grupo and a.cod_tipo=movi[idx].cod_tipo
AND a.cod_sec = movi[idx].cod_sec
ELSE
SELECT SUM(a.cantidad_2) INTO existe_act FROM irtb00006 a
WHERE a.orden_compra=datos_gen.orden_compra and a.tipo=datos_gen.tipo
AND a.status_t is null AND a.cod_n=movi[idx].cod_n and
a.cod_grupo=movi[idx].cod_grupo and a.cod_tipo=movi[idx].cod_tipo
AND a.cod_sec = movi[idx].cod_sec
END IF
IF existe_act IS NULL THEN
LET existe_act = 0
END IF
LET movi[idx].cantidad_2 = movi[idx].cantidad_2 - existe_act
LET movi[idx].maquina = null
LET idx = idx + 1
END FOREACH
# CAPTURA ARREGLO DE LOS CODIGOS DE MATERIA PRIMA
IF errores = "S" THEN
LET idx = idx + 1
END IF
CALL set_count(idx-1)
INPUT ARRAY movi WITHOUT DEFAULTS FROM s_movi1.*
BEFORE ROW
LET p_act = arr_curr()
LET scr_l = scr_line()
BEFORE FIELD cod_n
NEXT FIELD cantidad_2
BEFORE FIELD cod_sec
NEXT FIELD cantidad_2
AFTER FIELD maquina
IF movi[p_act].maquina is not null THEN
SELECT a.nombre INTO maquinaria.nombre
FROM irtb00009 a,irtb00008 b
WHERE a.codigo = movi[p_act].maquina and a.codigo = b.cod_maq and
b.cod_n = movi[p_act].cod_n and
b.cod_grupo = movi[p_act].cod_grupo and
b.cod_tipo = movi[p_act].cod_tipo and
b.cod_sec = movi[p_act].cod_sec and
b.status_t is null
IF status = notfound THEN
LET numero_msg = 115
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
END IF
DISPLAY BY NAME maquinaria.nombre
AFTER FIELD cantidad_2
IF errores = "S" THEN
RETURN
END IF
LET ordenada = 0
LET recibida = 0
IF movi[p_act].cantidad_2 IS NOT NULL THEN
IF movi[p_act].cod_n = 4 THEN
SELECT unique * FROM irtb00002
WHERE cod_n = movi[p_act].cod_n and
cod_grupo = movi[p_act].cod_grupo and
cod_tipo = movi[p_act].cod_tipo and
cod_sec = movi[p_act].cod_sec and
status_t is null
IF STATUS = NOTFOUND THEN
LET numero_msg = 35
CALL msg(numero_msg)
NEXT FIELD cantidad_2
END IF
SELECT sum(a.cantidad_2) INTO recibida FROM ihtb00006 a
WHERE a.orden_compra = datos_gen.orden_compra and
a.tipo = datos_gen.tipo and
a.cod_n = movi[p_act].cod_n and
a.cod_grupo = movi[p_act].cod_grupo and
a.cod_tipo = movi[p_act].cod_tipo and
a.cod_sec = movi[p_act].cod_sec and
a.status_t is null
SELECT sum(a.cantidad) INTO ordenada FROM cotb00015 a
WHERE a.num_oc = datos_gen.orden_compra and
a.tipo = datos_gen.tipo and
a.cod_n = movi[p_act].cod_n and
a.cod_grupo = movi[p_act].cod_grupo and
a.cod_tipo = movi[p_act].cod_tipo and
a.cod_sec = movi[p_act].cod_sec
ELSE
SELECT unique * FROM irtb00002
WHERE cod_n = movi[p_act].cod_n and
cod_grupo = movi[p_act].cod_grupo and
cod_tipo = movi[p_act].cod_tipo and
cod_sec = movi[p_act].cod_sec and
status_t is null
IF STATUS = NOTFOUND THEN
LET numero_msg = 35
CALL msg(numero_msg)
NEXT FIELD cantidad_2
END IF
SELECT sum(a.cantidad_2) INTO recibida FROM irtb00006 a
WHERE a.orden_compra = datos_gen.orden_compra and
a.tipo = datos_gen.tipo and
a.cod_n = movi[p_act].cod_n and
a.cod_grupo = movi[p_act].cod_grupo and
a.cod_tipo = movi[p_act].cod_tipo and
a.cod_sec = movi[p_act].cod_sec and
a.status_t is null
SELECT sum(a.cantidad) INTO ordenada FROM cotb00015 a
WHERE a.num_oc = datos_gen.orden_compra and
a.tipo = datos_gen.tipo and
a.cod_n = movi[p_act].cod_n and
a.cod_grupo = movi[p_act].cod_grupo and
a.cod_tipo = movi[p_act].cod_tipo and
a.cod_sec = movi[p_act].cod_sec
END IF
IF recibida is null THEN
LET recibida = 0
END IF
IF ordenada is null THEN
LET ordenada = 0
END IF
LET porciento = ordenada * 0.10
LET recibida = recibida + movi[p_act].cantidad_2
LET r_cantidad = ordenada + porciento
IF recibida > r_cantidad THEN
LET numero_msg = 28
CALL msg(numero_msg)
NEXT FIELD cantidad_2
END IF
END IF
END INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
CALL movi.clear()
SLEEP 2
RETURN
END IF
PROMPT "Toda la Informacion Esta Correcta? (S/N)" FOR CHAR opc
LET opc = UPSHIFT(opc)
IF OPC = "S" THEN
PROMPT "Imprimo documento ahora? (S/N)" FOR CHAR opc1
LET opc1 = upshift(opc1)
IF opc1 = "S" THEN
CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of,
doble_on,doble_off,comp_on,comp_off,
doce,normal,archivo,copia
START REPORT rep_ent TO archivo
END IF
FOR idx = 1 TO arr_count()
IF movi[idx].cod_n is not null and movi[idx].cod_grupo is not null and
movi[idx].cod_tipo is not null and movi[idx].cod_sec is not null THEN
IF movi[idx].cantidad_2 is not null THEN
IF movi[idx].cod_n = 4 THEN
INSERT INTO irtb00006(num_doc,fecha,fact_no,conduce_no,tipo,orden_compra,
cod_sp,cod_sp_Sec,cod_mov,maquina,cod_n,cod_grupo,
cod_tipo,cod_Sec,cantidad_1,cantidad_2,sec_a,us_Crea,fech_Crea,bodega)
VALUES
(datos_gen.num_doc,datos_gen.fecha,datos_gen.fact_no,
datos_gen.conduce_no,datos_gen.tipo,datos_gen.orden_compra,
datos_gen.cod_sp,datos_gen.cod_sp_sec,datos_gen.cod_mov,
movi[idx].maquina,movi[idx].cod_n, movi[idx].cod_grupo,
movi[idx].cod_tipo,movi[idx].cod_sec,movi[idx].cantidad_1,
movi[idx].cantidad_2,datos_gen.sec_a, SUSER_SNAME(),GETDATE(),'1')
ELSE
INSERT INTO irtb00006(num_doc,fecha,fact_no,conduce_no,tipo,orden_compra,
cod_sp,cod_sp_Sec,cod_mov,maquina,cod_n,cod_grupo,
cod_tipo,cod_Sec,cantidad_1,cantidad_2,us_Crea,fech_Crea,bodega) VALUES
(datos_gen.num_doc,datos_gen.fecha,datos_gen.fact_no,
datos_gen.conduce_no,datos_gen.tipo,datos_gen.orden_compra,
datos_gen.cod_sp,datos_gen.cod_sp_sec,datos_gen.cod_mov,
movi[idx].maquina,movi[idx].cod_n, movi[idx].cod_grupo,
movi[idx].cod_tipo,movi[idx].cod_sec,movi[idx].cantidad_1,
movi[idx].cantidad_2,SUSER_SNAME(),GETDATE(),'1')
END IF
END IF
IF opc1 = "S" THEN
IF movi[idx].cantidad_2 is not null THEN
OUTPUT TO REPORT rep_ent(datos_gen.*,movi[idx].*)
END IF
END IF
END IF
END FOR
CALL movi.clear()
IF opc1 = "S" THEN
DISPLAY " " AT 1,1
FINISH REPORT rep_ent
RUN imprime
END IF
SELECT * FROM irtb00014
WHERE @cod_mov = datos_gen.cod_mov
IF status = notfound THEN
INSERT INTO irtb00014 VALUES
(datos_gen.num_doc,datos_gen.cod_mov,null,SUSER_SNAME(),GETDATE(),null,null)
END IF
UPDATE irtb00014 set num_salida = datos_gen.num_doc
WHERE cod_mov = datos_gen.cod_mov
SELECT * FROM irtb00014
WHERE cod_mov = datos_gen.cod_mov
IF status = notfound THEN
INSERT INTO irtb00014 VALUES
(datos_gen.num_doc,datos_gen.cod_mov,SUSER_SNAME(),GETDATE())
END IF
UPDATE irtb00014 set num_salida = datos_gen.num_doc
WHERE cod_mov = datos_gen.cod_mov
UPDATE cotb00014 set cierre = cerrada
WHERE num_oc = datos_gen.orden_compra and
tipo = datos_gen.tipo
LET numero_msg = 1
CALL msg(numero_msg)
CLEAR FORM
ELSE
GOTO otra_vez
END IF
GOTO vuelve
END FUNCTION
FUNCTION limpia()
CALL movi.clear()
END FUNCTION
REPORT rep_ent(x,z)
DEFINE x RECORD
cod_mov LIKE irtb00006.cod_mov,
num_doc LIKE irtb00006.num_doc,
tipo CHAR(2),
orden_compra LIKE irtb00006.orden_compra,
cod_sp LIKE irtb00006.cod_sp,
cod_sp_sec LIKE irtb00006.cod_sp_sec,
conduce_no LIKE irtb00006.conduce_no,
fact_no LIKE irtb00006.fact_no,
fecha date,
sec_a LIKE irtb00006.sec_a,
nom_sp LIKE cotb00001.nom_sp,
descrip_mov CHAR(30)
END RECORD
DEFINE z RECORD
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
descrip_esp LIKE intb00001.descrip_esp,
unidad_med LIKE intb00001.unidad_med,
cantidad_1 LIKE iptb00006.cantidad_1,
cantidad_2 LIKE iptb00006.cantidad_2,
maquina SMALLINT
END RECORD
DEFINE l SMALLINT
DEFINE negras_of,negras_on,doble_on,doble_of CHAR(2)
DEFINE unidades INTEGER
DEFINE p_nombre,p_descrip CHAR(30)
DEFINE p_unidad CHAR(4)
OUTPUT
TOP MARGIN 0
BOTTOM MARGIN 0
LEFT MARGIN 0
FORMAT
BEFORE GROUP OF x.num_doc
LET negras_on = ASCII 27, ASCII 69
LET negras_of = ASCII 27, ASCII 70
LET doble_on = ASCII 14
LET doble_of = ASCII 20
PRINT COLUMN 1,negras_on,doble_on,
COLUMN 1,p_companias.nombre CLIPPED,negras_of
PRINT COLUMN 58, "REPORTE DE ENTRADA"
PRINT COLUMN 58, "No.",doble_on,x.num_doc using "&&&&&&"
LET l = (80 - LENGTH(x.descrip_mov))/2
PRINT COLUMN l, "REPUESTOS"
PRINT COLUMN l, negras_on,x.descrip_mov,negras_of
SKIP 1 LINE
PRINT COLUMN 1, "Fecha : ",x.fecha using "dd/mm/yyyy",
COLUMN 53, "Orden de Compra: ",x.tipo,"-",
x.orden_compra using "&&&&&&"
PRINT COLUMN 1, "Departamento: ",x.sec_a USING "<<<<"," ",nombre_d
PRINT COLUMN 1, "Proveedor : ",x.cod_sp using "&&","-",
x.cod_sp_sec using "&&&&"," ",
x.nom_sp
PRINT COLUMN 1, "Conduce : ",x.conduce_no clipped
PRINT COLUMN 1, "Factura : ",x.fact_no clipped
PRINT COLUMN 1,
"==========================================================================="
PRINT COLUMN 1,"CODIGO",
COLUMN 16, "CANTIDAD",
COLUMN 30, "UNIDAD",
COLUMN 45, "D E S C R I P C I O N"
PRINT COLUMN 1,
"==========================================================================="
SKIP 1 LINE
ON EVERY ROW
IF z.maquina is not null THEN
SELECT unique a.nombre INTO p_nombre
FROM irtb00009 a
WHERE a.codigo = z.maquina
END IF
PRINT COLUMN 1, z.cod_n using "&","-",
COLUMN 3, z.cod_grupo using "&","-",
COLUMN 5, z.cod_tipo using "&&","-",
COLUMN 8, z.cod_sec using "&&&",
COLUMN 16, z.cantidad_2 using "##,###",
COLUMN 30, z.unidad_med,5 spaces,z.descrip_esp
IF z.maquina is not null THEN
PRINT COLUMN 30, z.maquina using "&&#",
" (",p_nombre clipped,")"
END IF
PAGE TRAILER
PRINT COLUMN 1,"OBSERVACION :"
PRINT
PRINT COLUMN 1,
"--------------------------------------------------------------------------"
PRINT
PRINT COLUMN 1,
"--------------------------------------------------------------------------"
SKIP 2 LINE
PRINT COLUMN 3, "----------------------",
COLUMN 30, "----------------------",
COLUMN 60, "--------------------"
PRINT COLUMN 3, "Entregado Por",
COLUMN 30, "Recibido Por",
COLUMN 60, "Aprobado Por"
SKIP 4 LINES
END REPORT
FUNCTION irprmf006()
CONSTRUCT criterio ON a.num_doc,a.cod_mov FROM num_doc,cod_mov
LET selec =
"SELECT DISTINCT a.cod_mov,a.num_doc,a.tipo,a.orden_compra,a.cod_sp,a.cod_sp_Sec,a.conduce_no,",
"a.fact_no,a.fecha,a.sec_a,b.nom_sp,c.descrip_mov ",
"FROM irtb00006 a,cotb00001 b,irtb00005 c ",
"WHERE a.cod_sp = b.cod_sp and a.cod_sp_Sec = b.cod_sp_sec and a.cod_mov = c.cod_mov and a.status_t IS NULL AND ",
criterio CLIPPED
PREPARE comando FROM selec
DECLARE busca_entrada SCROLL CURSOR FOR comando
OPEN busca_entrada
FETCH FIRST busca_entrada INTO datos_gen.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
RETURN
END IF
DISPLAY BY NAME datos_gen.*
MENU "NAVEGA"
COMMAND "Siguiente"
FETCH NEXT busca_entrada INTO datos_gen.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 4
CALL msg(numero_msg)
END IF
DISPLAY BY NAME datos_gen.*
COMMAND "Anterior"
FETCH PREVIOUS busca_entrada INTO datos_gen.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
DISPLAY BY NAME datos_gen.*
COMMAND "Ultimo"
FETCH LAST busca_entrada INTO datos_gen.*
DISPLAY BY NAME datos_gen.*
COMMAND "Rimprimir"
CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of,
doble_on,doble_off,comp_on,comp_off,
doce,normal,archivo,copia
START REPORT rep_ent TO archivo
DECLARE busca_material CURSOR FOR
SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,b.unidad_med,a.cantidad_1,a.cantidad_2,a.maquina
FROM irtb00006 a,irtb00002 b
WHERE a.num_doc = datos_Gen.num_doc AND a.cod_mov = datos_gen.cod_mov AND
a.cod_n = b.cod_n AND
a.cod_grupo = b.cod_grupo AND
a.cod_tipo = b.cod_tipo AND
a.cod_sec = b.cod_sec
LET idx = 1
FOREACH busca_material INTO movi[idx].*
OUTPUT TO REPORT rep_ent(datos_gen.*,movi[idx].*)
LET idx = idx + 1
END FOREACH
CALL set_count(idx-1)
DISPLAY ARRAY movi TO s_movi1.*
FINISH REPORT rep_ent
RUN imprime
COMMAND KEY ("T") "reTornar"
EXIT MENU
END MENU
END FUNCTION