Files
MBS/PROYECTO/indir/inprmt029.4gl
T
jpeguero efdf8953dd Reorganiza MATERIA PRIMA a PROYECTO y avanza inprmt002/005/013/046
- 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).
2026-08-26 13:31:09 -04:00

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
}