Files
MBS/PROYECTO/codir/coprcs008.4gl
T

319 lines
10 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : COPRCS008
OBJETIVO : Consulta Ordenes Por Suplidor
PROGRAMADOR : Juan Fco. Soto.
FECHA REALIZACION : AGOSTO 1997
DIRECTOR PROYECTO : JOSE ALFREDO PAULINO
-------------------------------------------------------------------------------
}
GLOBALS "coprgb000.4gl"
MAIN
DEFER INTERRUPT
CALL coprcs008()
END MAIN
FUNCTION coprcs008()
DEFINE h SMALLINT
DEFINE busca_supli RECORD
num_oc integer,
tipo char(2),
fecha date,
cod_sp smallint,
cod_sp_sec smallint,
nombre char(45),
base LIKE intb00002.base,
monto decimal(12,2)
END RECORD
DEFINE desp_supli ARRAY[500] OF RECORD
num_oc1 integer,
tipo1 char(2),
fecha1 date,
codigo_s char(7),
nombre1 char(45),
monto1 CHAR(15)
END RECORD
DEFINE total_g_e1 CHAR(15)
DEFINE nombre_s RECORD
nom_sp LIKE cotb00001.nom_sp
END RECORD
DEFINE encontrado integer
DEFINE total_d1,total_g1 DECIMAL(12,2)
DEFINE sale,pendiente,primera char(1)
DEFINE codigo_sp CHAR(7)
#WHENEVER ERROR CONTINUE
CLEAR SCREEN
OPTIONS
FORM LINE 8,
ERROR LINE 23,
COMMENT LINE 21
OPEN FORM cofmcs008 FROM "cofmcs008"
DISPLAY FORM cofmcs008
LABEL volver:
CONSTRUCT criterio ON b.cod_sp,b.cod_sp_sec FROM cod_sp,cod_sp_sec
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
INPUT BY NAME pendiente,rango.* ATTRIBUTE (YELLOW)
BEFORE FIELD fech_in
SELECT MIN(fech_oc) INTO rango.fech_in FROM cotb00014
WHERE status_t is null
DISPLAY BY NAME rango.fech_in ATTRIBUTE (BOLD)
BEFORE FIELD fech_fi
LET rango.fech_fi = today
DISPLAY BY NAME rango.fech_fi ATTRIBUTE (BOLD)
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
IF rango.fech_in IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fech_in
END IF
IF rango.fech_in IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fech_fi
END IF
EXIT INPUT
END INPUT
## Se seleccionan los campos que el usuario debe ver en la pantalla
IF pendiente = "P" THEN
LET selec =
"SELECT a.num_oc,a.tipo,a.fech_oc,b.cod_sp,b.cod_sp_sec,b.nom_sp, ",
"d.base,sum(c.precio * c.cantidad) ",
" FROM cotb00014 a, cotb00001 b,cotb00015 c,OUTER intb00002 d ",
" WHERE ",
"a.num_oc = c.num_oc AND ",
"a.tipo = c.tipo AND ",
"a.cod_sp = b.cod_sp AND ",
"a.cod_sp_sec = b.cod_sp_sec AND ",
"a.fech_oc between ? and ? AND ",
"a.status_t is null AND ",
"c.cod_n = d.cod_n AND ",
"c.cod_grupo = d.cod_grupo AND ",
"c.cod_tipo = d.cod_tipo AND ",
"c.cod_sec = d.cod_sec AND ",
"a.cierre = 'N' AND ",
criterio clipped,
" GROUP BY a.num_oc,a.tipo,a.fech_oc,b.cod_sp,b.cod_sp_sec,b.nom_sp,",
" d.base ",
" ORDER BY b.cod_sp,b.cod_sp_sec "
END IF
IF pendiente = "C" THEN
LET selec =
"SELECT a.num_oc,a.tipo,a.fech_oc,b.cod_sp,b.cod_sp_sec,b.nom_sp, ",
" d.base,sum(c.precio * c.cantidad) ",
" FROM cotb00014 a, cotb00001 b,cotb00015 c,OUTER intb00002 d ",
" WHERE ",
"a.num_oc = c.num_oc AND ",
"a.tipo = c.tipo AND ",
"a.cod_sp = b.cod_sp AND ",
"a.cod_sp_sec = b.cod_sp_sec AND ",
"c.cod_n = d.cod_n AND ",
"c.cod_grupo = d.cod_grupo AND ",
"c.cod_tipo = d.cod_tipo AND ",
"c.cod_sec = d.cod_sec AND ",
"a.fech_oc between ? and ? AND ",
"a.status_t is null AND ",
"a.cierre = 'S' AND ",
criterio clipped,
" GROUP BY a.num_oc,a.tipo,a.fech_oc,b.cod_sp,b.cod_sp_sec,b.nom_sp,",
" d.base ",
" ORDER BY b.cod_sp,b.cod_sp_sec "
END IF
IF pendiente = "T" THEN
LET selec =
"SELECT a.num_oc,a.tipo,a.fech_oc,b.cod_sp,b.cod_sp_sec,b.nom_sp, ",
"d.base,sum(c.precio * c.cantidad),max(c.precio),max(a.fech_crea) ",
" FROM cotb00014 a, cotb00001 b,cotb00015 c,OUTER intb00002 d ",
" WHERE ",
"a.num_oc = c.num_oc AND ",
"a.tipo = c.tipo AND ",
"c.cod_n = d.cod_n AND ",
"c.cod_grupo = d.cod_grupo AND ",
"c.cod_tipo = d.cod_tipo AND ",
"c.cod_sec = d.cod_sec AND ",
"a.cod_sp = b.cod_sp AND ",
"a.cod_sp_sec = b.cod_sp_sec AND ",
"a.fech_oc between ? and ? AND ",
"a.status_t is null AND ",
criterio clipped,
" GROUP BY a.num_oc,a.tipo,a.fech_oc,b.cod_sp,b.cod_sp_sec,b.nom_sp,",
" d.base ",
" ORDER BY b.cod_sp,b.cod_sp_sec "
END IF
DISPLAY "Buscando Informacion... Espere Por Favor" AT 21,1 ATTRIBUTE(YELLOW)
PREPARE busca FROM selec
DECLARE accion CURSOR FOR busca
OPEN accion using rango.fech_in,rango.fech_fi
IF idx > 1 THEN
FOR h = 1 to idx
LET desp_supli[idx].num_oc1 = null
LET desp_supli[idx].tipo1 = null
LET desp_supli[idx].fecha1 = null
LET desp_supli[idx].codigo_s = null
LET desp_supli[idx].nombre1 = null
LET desp_supli[idx].monto1 = null
END FOR
END IF
LET idx = 1
LET primera = "S"
LET total_g1 = 0
LET total_d1 = 0
LET sale = null
WHILE STATUS != NOTFOUND
FETCH accion INTO busca_supli.*
IF busca_supli.base is not null THEN
IF busca_supli.base != 0 THEN
LET busca_supli.monto = busca_supli.monto / busca_supli.base
END IF
END IF
LET codigo_sp = busca_supli.cod_sp using "&&","-",
busca_supli.cod_sp_sec using "&&&&"
IF status = notfound AND sale is null THEN
LET desp_supli[idx].num_oc1 = null
LET desp_supli[idx].tipo1 = null
LET desp_supli[idx].fecha1 = null
LET desp_supli[idx].codigo_s = null
LET idx = idx + 1
LET desp_supli[idx].num_oc1 = null
LET desp_supli[idx].tipo1 = null
LET desp_supli[idx].fecha1 = null
LET desp_supli[idx].codigo_s = null
LET desp_supli[idx].nombre1 = "Total Ordenes ====> "
LET desp_supli[idx].monto1 = total_d1 using "###,###,###.##"
LET total_g1 = total_g1 + total_d1
LET sale = "S"
END IF
IF primera = "S" THEN
LET desp_supli[idx].codigo_s = busca_supli.cod_sp using "&&","-",
busca_supli.cod_sp_sec using "&&&&"
LET primera = "N"
END IF
IF desp_supli[idx].codigo_s = codigo_sp THEN
IF busca_supli.monto > 0 THEN
LET desp_supli[idx].codigo_s = busca_supli.cod_sp using "&&","-",
busca_supli.cod_sp_sec using "&&&&"
LET desp_supli[idx].num_oc1 = busca_supli.num_oc
LET desp_supli[idx].tipo1 = busca_supli.tipo
LET desp_supli[idx].fecha1 = busca_supli.fecha using "dd/mm/yy"
LET desp_supli[idx].nombre1 = busca_supli.nombre
LET desp_supli[idx].monto1 = busca_supli.monto using "###,###,###.##"
LET total_d1 = total_d1 + busca_supli.monto
LET idx = idx + 1
END IF
END IF
IF desp_supli[idx].codigo_s != codigo_sp THEN
LET desp_supli[idx].num_oc1 = null
LET desp_supli[idx].tipo1 = null
LET desp_supli[idx].fecha1 = null
LET desp_supli[idx].codigo_s = null
LET idx = idx + 1
LET desp_supli[idx].num_oc1 = null
LET desp_supli[idx].tipo1 = null
LET desp_supli[idx].fecha1 = null
LET desp_supli[idx].codigo_s = null
LET desp_supli[idx].nombre1 = "Total Ordenes ====> "
LET desp_supli[idx].monto1 = total_d1 using "###,###,###.##"
IF total_d1 is null THEN
LET total_d1 = 0
END IF
LET total_g1 = total_g1 + total_d1
LET total_d1 = 0
LET primera = "S"
{ LET idx = idx + 1
LET desp_supli[idx].num_oc1 = null
LET desp_supli[idx].tipo1 = null
LET desp_supli[idx].fecha1 = null
LET desp_supli[idx].codigo_s = null
LET desp_supli[idx].nombre1 = null}
IF busca_supli.monto > 0 THEN
LET idx = idx + 1
LET desp_supli[idx].num_oc1 = null
LET desp_supli[idx].tipo1 = null
LET desp_supli[idx].fecha1 = null
LET desp_supli[idx].codigo_s = null
LET desp_supli[idx].codigo_s = busca_supli.cod_sp using "&&","-",
busca_supli.cod_sp_sec using "&&&&"
LET desp_supli[idx].nombre1 = busca_supli.nombre
LET desp_supli[idx].num_oc1 = busca_supli.num_oc
LET desp_supli[idx].tipo1 = busca_supli.tipo
LET desp_supli[idx].fecha1 = busca_supli.fecha using "dd/mm/yy"
LET desp_supli[idx].monto1 = busca_supli.monto using "###,###,###.##"
LET total_d1 = total_d1 + busca_supli.monto
END IF
END IF
# LET idx = idx + 1
IF sale = "S" THEN
EXIT WHILE
END IF
LET desp_supli[idx].codigo_s = codigo_sp
END WHILE
DISPLAY " " AT 21,1
LET total_g_e1 = total_g1 using "###,###,###.##"
DISPLAY BY NAME total_g_e1
CALL set_count (idx-1)
DISPLAY BY NAME nombre_s.nom_sp
DISPLAY ARRAY desp_supli TO orden.*
## Verifica si el usuario presiono la tecla <Delete>
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
ELSE
CLEAR FORM
GOTO volver
END IF
END FUNCTION