319 lines
10 KiB
Plaintext
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
|
|
|