- Mueve todo el contenido de PROYECTOS/indir y varias funciones compartidas de PROYECTOS/otrodir hacia PROYECTO, siguiendo instruccion de Johnny (PROYECTOS se va a eliminar). - inprmt002: agrega campo Desglose faltante, corrige typo "eLiminar". - inprmt005: agrega formulario y 3 campos faltantes (Consumo, Requiere Autorizacion, Requisiciones), corrige typo "eLiminar". - inprmt013: agrega formulario, titulo, corrige typo "eLiminar". - inprmt046: agrega formulario y varias funciones/dependencias faltantes (cincodmov, clasf_bloque, medidas, defecto, buscaEmp, consultaTransportista, busca_departamento); corrige nombres de campo desalineados con el codigo (depto_a, bodega) y los convierte a ComboBox donde el codigo lo requiere. - Corrige dependencia faltante de FORMULARIOS_IN a la libreria Database (bloqueaba todo el modulo de MATERIA PRIMA).
326 lines
11 KiB
Plaintext
326 lines
11 KiB
Plaintext
{
|
|
------------------------------------------------------------------------------
|
|
PROGRAMA : INPRRP029
|
|
OBJETIVO : LISTAR LAS COMPRAS Y LAS EXISTENCIAS DE LA
|
|
ITEMS QUE SE LIQUIDAN
|
|
PROGRAMADOR : Juan F. Soto
|
|
FECHA : Septiembre 29, 1994
|
|
-----------------------------------------------------------------------------
|
|
}
|
|
|
|
GLOBALS "inprgb000.4gl"
|
|
|
|
#DEFINE criterio,selec CHAR(300)
|
|
#DEFINE idx,numero_msg SMALLINT
|
|
#DEFINE articulos RECORD LIKE intb00001.*
|
|
DEFINE compras RECORD LIKE cttb00013.*
|
|
|
|
DEFINE costo,cost_ult,cost_pen,cost_ant LIKE intb00013.costo_st
|
|
|
|
DEFINE ultima,penultima,antepenultima,existencia DECIMAL(12,2)
|
|
DEFINE fecha DATE
|
|
|
|
#END GLOBALS
|
|
MAIN
|
|
DEFER INTERRUPT
|
|
CALL reporte()
|
|
END MAIN
|
|
|
|
FUNCTION reporte()
|
|
OPTIONS
|
|
ERROR LINE 24,
|
|
FORM LINE 8
|
|
|
|
CALL pantalla()
|
|
DISPLAY "inprrp029" AT 3,2
|
|
DISPLAY "INVENTARIO FISICO DE ITEMS VALORADOS AL REAL" AT 6,10
|
|
|
|
OPEN FORM infmrp029 FROM "infmrp029"
|
|
DISPLAY FORM infmrp029
|
|
|
|
# Entrada de fecha de corte Y Cancelacion de la operacion
|
|
INPUT BY NAME compras.fecha
|
|
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = false
|
|
RETURN
|
|
END IF
|
|
CONSTRUCT BY NAME criterio ON cod_n
|
|
LET selec =
|
|
"SELECT * FROM intb00001 ",
|
|
"WHERE ",
|
|
criterio clipped,
|
|
" ORDER BY 1,2,3,4"
|
|
|
|
PREPARE comando FROM selec
|
|
DECLARE busca CURSOR FOR comando
|
|
|
|
START REPORT inventario TO "jh"
|
|
|
|
FOREACH busca INTO articulos.*
|
|
|
|
# Busqueda de la Existencia
|
|
SELECT SUM(cantidad_2) INTO existencia
|
|
FROM intb00006
|
|
WHERE cod_n = articulos.cod_n AND
|
|
cod_grupo = articulos.cod_grupo AND
|
|
cod_tipo = articulos.cod_tipo AND
|
|
cod_sec = articulos.cod_sec AND
|
|
fecha <= compras.fecha AND
|
|
status_t is not null
|
|
|
|
# Busqueda del costo standard
|
|
SELECT costo_st INTO costo
|
|
FROM intb00013
|
|
WHERE cod_n = articulos.cod_n AND
|
|
cod_grupo = articulos.cod_grupo AND
|
|
cod_tipo = articulos.cod_tipo AND
|
|
cod_sec = articulos.cod_sec AND
|
|
mes_fin = 12 and
|
|
ano = year(compras.fecha) and
|
|
status_t is not null
|
|
|
|
# Busqueda de las 3 ultimas compras
|
|
|
|
# Ultima Compra
|
|
SELECT cantidad,costo_lq,MAX(fecha)
|
|
INTO ultima,cost_ult,fecha
|
|
FROM cttb00013
|
|
WHERE cod_n = articulos.cod_n AND
|
|
cod_grupo = articulos.cod_grupo AND
|
|
cod_tipo = articulos.cod_tipo AND
|
|
cod_sec = articulos.cod_sec AND
|
|
ano = year(compras.fecha) AND
|
|
status_t is null
|
|
|
|
IF ultima is null THEN
|
|
LET ultima = 0
|
|
LET cost_ult = 0
|
|
END IF
|
|
|
|
# Penultima Compra
|
|
SELECT cantidad,costo_lq,MAX(fecha)
|
|
INTO penultima,cost_pen,fecha
|
|
FROM cttb00013
|
|
WHERE cod_n = articulos.cod_n AND
|
|
cod_grupo = articulos.cod_grupo AND
|
|
cod_tipo = articulos.cod_tipo AND
|
|
cod_sec = articulos.cod_sec AND
|
|
ano = year(compras.fecha) AND
|
|
fecha < fecha AND
|
|
status_t is null
|
|
|
|
IF penultima is null THEN
|
|
LET penultima = 0
|
|
LET cost_pen = 0
|
|
END IF
|
|
|
|
# Antepenultima Compra
|
|
SELECT cantidad,costo_lq,MAX(fecha)
|
|
INTO antepenultima,cost_ant,fecha
|
|
FROM cttb00013
|
|
WHERE cod_n = articulos.cod_n AND
|
|
cod_grupo = articulos.cod_grupo AND
|
|
cod_tipo = articulos.cod_tipo AND
|
|
cod_sec = articulos.cod_sec AND
|
|
ano = year(compras.fecha) AND
|
|
fecha < fecha AND
|
|
status_t is null
|
|
|
|
IF antepenultima is null THEN
|
|
LET antepenultima = 0
|
|
LET cost_ant = 0
|
|
END IF
|
|
|
|
OUTPUT TO REPORT inventario()
|
|
END FOREACH
|
|
FINISH REPORT inventario
|
|
END FUNCTION
|
|
|
|
REPORT inventario()
|
|
DEFINE valor_inv,valor_ult,valor_pen,valor_ant,valoracion_real DECIMAL(12,2),
|
|
costo_promedio,cantidad1,cantidad2,cantidad3,valor1,valor2,valor3,
|
|
variacion,valoracion_total,variacion_total
|
|
DECIMAL(12,2)
|
|
|
|
DEFINE comprime_on,comprime_of CHAR(3)
|
|
OUTPUT
|
|
LEFT MARGIN 0
|
|
|
|
FORMAT
|
|
|
|
PAGE HEADER
|
|
PRINT comprime_on
|
|
PRINT "Fecha: ", today using "dd-mm-yyyy", 72 spaces,
|
|
p_companias.nombre CLIPPED, 68 spaces,
|
|
"Pag. ", pageno using "###&"
|
|
|
|
PRINT "Hora : ", time , 72 spaces,
|
|
"Sistema Control de Materiales", 64 spaces, "list_vreal"
|
|
|
|
PRINT 68 spaces, "INVENTARIO FISICO DE MATERIALES VALORADOS ",
|
|
"AL PRECIO REAL, AL ",fecha using "dd-mmm-yyyy"
|
|
SKIP 1 line
|
|
|
|
PRINT "----------------------------------------------------",
|
|
"----------------------------------------------------",
|
|
"----------------------------------------------------",
|
|
"----------------------------------------------------",
|
|
"-------------"
|
|
|
|
PRINT 45 spaces, "| INVENTARIO PRECIO STANDARD ",
|
|
1 spaces, "| <ULTIMA ENTRADA> ",
|
|
1 spaces, "| <PENULTIMA ENTRADA> ",
|
|
1 spaces, "| <ANTEPENULTIMA ENTRADA> ",
|
|
1 spaces, "|| |"
|
|
|
|
PRINT 45 spaces, "|---------------------------------",
|
|
1 spaces, "|---------------------------------",
|
|
1 spaces, "|---------------------------------",
|
|
1 spaces, "|--------------------------------",
|
|
1 spaces, "|| VALORACION | COSTO | |"
|
|
|
|
PRINT " Codigo",
|
|
3 spaces, "Descripcion",
|
|
20 spaces, "Und",
|
|
1 spaces, "| CANTIDAD PRECIO VALOR ",
|
|
1 spaces, "| CANTIDAD PRECIO VALOR ",
|
|
1 spaces, "| CANTIDAD PRECIO VALOR ",
|
|
1 spaces, "| CANTIDAD PRECIO VALOR ",
|
|
1 spaces, "||",
|
|
1 spaces, " AL REAL | PROM | VARIACION|"
|
|
|
|
|
|
PRINT "----------------------------------------------------",
|
|
"----------------------------------------------------",
|
|
"----------------------------------------------------",
|
|
"----------------------------------------------------",
|
|
"-------------"
|
|
|
|
|
|
ON EVERY ROW
|
|
LET valor_inv =
|
|
existencia * costo
|
|
|
|
LET valor_ult =
|
|
ultima * cost_ult
|
|
|
|
LET valor_pen =
|
|
penultima * cost_pen
|
|
|
|
LET valor_ant =
|
|
antepenultima * cost_ant
|
|
|
|
IF existencia > ultima THEN
|
|
LET valoracion_real = valoracion_real + valor_ult
|
|
LET cantidad1 =
|
|
existencia - ultima
|
|
IF cantidad1 < penultima THEN
|
|
LET valor1 = cantidad1 * cost_pen
|
|
ELSE
|
|
LET valoracion_real = valoracion_real + valor_pen
|
|
LET cantidad2 = cantidad1 - penultima
|
|
IF cantidad2 < antepenultima THEN
|
|
LET valor2 = cantidad2 * cost_ant
|
|
ELSE
|
|
LET valoracion_real =
|
|
valoracion_real + valor_ant
|
|
END IF
|
|
END IF
|
|
END IF
|
|
|
|
IF existencia < ultima OR
|
|
existencia = ultima THEN
|
|
|
|
LET valoracion_real =
|
|
existencia * cost_ult
|
|
ELSE
|
|
LET valoracion_real =
|
|
valoracion_real + valor1 + valor2 + valor3
|
|
END IF
|
|
|
|
LET valoracion_total = valoracion_total + valoracion_real
|
|
|
|
IF valoracion_real != 0
|
|
THEN
|
|
LET costo_promedio =
|
|
valoracion_real / existencia
|
|
ELSE
|
|
LET costo_promedio = 0
|
|
END IF
|
|
|
|
LET variacion = valor_inv - valoracion_real
|
|
LET variacion_total = variacion_total + variacion
|
|
|
|
PRINT 1 spaces, articulos.cod_n using "&",
|
|
articulos.cod_grupo using "&",
|
|
articulos.cod_tipo using "&&",
|
|
articulos.cod_sec using "&&&",
|
|
2 spaces, articulos.descrip_esp,
|
|
2 spaces, articulos.unidad_med,
|
|
1 spaces, "|",
|
|
existencia using "-------&.&&",
|
|
1 spaces, costo using "###&.&&&&",
|
|
1 spaces, valor_inv using "-------&.&&",
|
|
1 spaces, "|",
|
|
ultima using "-------&.&&",
|
|
1 spaces, cost_ult using "###&.&&&&",
|
|
1 spaces, valor_ult using "-------&.&&",
|
|
1 spaces, "|",
|
|
penultima using "-------&.&&",
|
|
1 spaces, cost_pen using "###&.&&&&",
|
|
1 spaces, valor_pen using "-------&.&&",
|
|
1 spaces, "|",
|
|
antepenultima using "-------&.&&",
|
|
1 spaces, cost_ant using "###&.&&&&",
|
|
1 spaces, valor_ant using "-------&.&&",
|
|
"||",
|
|
valoracion_real using "-------&.&&",
|
|
1 spaces, "|",
|
|
costo_promedio using "###&.&&&&",
|
|
1 spaces, "|",
|
|
variacion using "-------&.&&"
|
|
END REPORT
|
|
|
|
{
|
|
FUNCTION pantalla()
|
|
DEFINE fecha CHAR(8),
|
|
hora char(5)
|
|
LET fecha = today USING "dd/mm/yy"
|
|
LET hora = time
|
|
DISPLAY p_companias.nombre CLIPPED AT 4,17 ATTRIBUTE (REVERSE,YELLOW)
|
|
DISPLAY fecha AT 4,70 ATTRIBUTE (YELLOW)
|
|
DISPLAY "Sistema de Compras" AT 5,31
|
|
DISPLAY hora AT 6,73 ATTRIBUTE(YELLOW)
|
|
|
|
CALL fgl_drawbox(5,79,3,1)
|
|
CALL fgl_drawbox(1,79,22,1)
|
|
END FUNCTION
|
|
}
|
|
{
|
|
Esta funcion se utiliza para desplegar mensajes de errores en todos
|
|
los sistemas.
|
|
Esta funcion busca el mensaje deseado en la tabla "msgtable" y lo
|
|
despliega en la linea de mensajes
|
|
|
|
|
|
FUNCTION msg(numero_msg)
|
|
DEFINE numero_msg SMALLINT
|
|
DEFINE descripcion CHAR (60)
|
|
SELECT desc_msg INTO descripcion FROM msgtable
|
|
WHERE cod_msg = numero_msg
|
|
|
|
IF status = NOTFOUND THEN
|
|
LET numero_msg = 22
|
|
SELECT desc_msg INTO descripcion FROM msgtable
|
|
WHERE cod_msg = numero_msg
|
|
ERROR descripcion ATTRIBUTE(BOLD)
|
|
ELSE
|
|
ERROR descripcion ATTRIBUTE(BOLD)
|
|
LET numero_msg = 0
|
|
END IF
|
|
END FUNCTION
|
|
}
|