Files
MBS/PROYECTO/indir/inprrp040.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

565 lines
17 KiB
Plaintext

{
============================================================================
PROGRAMA : INPRRP040
SISTEMA : Sistema de inventario de materiales ( LEY 69)
OBJETIVO : Registrar los Movimiento de las fianzas resumido
AUTOR : Juan F. Soto
Fecha : Diciembre 20, 1996.
=============================================================================
}
GLOBALS "inprgb000.4gl"
#### Registro para busqueda de informacion a imprimir
DEFINE movfi RECORD
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
descrip_esp CHAR(30),
unidad_med CHAR(15),
fecha DATE,
num_fianza INTEGER,
tipo_doc CHAR(1),
cantidad_f DECIMAL(12,2),
cantidad_c DECIMAL(12,2),
codigo CHAR(11),
factura INTEGER,
fecha_e DATE,
cantidad_e DECIMAL(12,2),
balance DECIMAL(12,2),
letrero CHAR(10)
END RECORD,
intb27 RECORD LIKE intb00027.*,
pase CHAR(1)
DEFINE fianza3 RECORD
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
descrip_esp CHAR(30),
unidad_med CHAR(30)
END RECORD
DEFINE fianza1 RECORD
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
fecha DATE,
num_fianza INTEGER,
tipo_doc CHAR(1),
cantidad_f DECIMAL(12,2),
cantidad_c DECIMAL(12,2)
END RECORD
DEFINE fianza2 RECORD
factura INTEGER,
fecha_e DATE,
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
cantidad_e DECIMAL(12,2)
END RECORD
DEFINE fecha1,fecha2,fecha8 DATE ### Variables de los valores del rango
DEFINE idx20,idx_1 INTEGER
DEFINE salir2,salir,salir1 CHAR(1)
DEFINE selec4,selec5 CHAR(1000)
DEFINE cantidad_b DECIMAL(12,2),
primera CHAR(1)
####### Funcion que hace la busqueda de informacion a imprimir
FUNCTION inprrp040()
DEFINE intb28 RECORD LIKE intb00028.*
DEFINE idx1,idx2 SMALLINT
DEFINE fecha_c DATE
DEFINE fact1 INTEGER
LET int_flag = false
OPTIONS
FORM LINE 8
OPEN FORM infmrp040 FROM "infmrp040"
DISPLAY FORM infmrp040
CALL pantalla()
DISPLAY "inprrp040" AT 4,3 ATTRIBUTE(YELLOW)
DISPLAY "Resumen Movimientos Fianzas" AT 6,27 ATTRIBUTE(YELLOW)
LET tipo_papel = 2
CALL msgrp000(tipo_papel)
##### Aceptando los valores para busqueda en un rango de fecha
INPUT BY NAME fecha1,fecha2
AFTER FIELD fecha1
IF fecha1 IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha1
END IF
BEFORE FIELD fecha2
LET fecha2 = today
DISPLAY BY NAME fecha2
AFTER FIELD fecha2
IF fecha2 IS NULL THEN
LET fecha2 = today
END IF
DISPLAY BY NAME fecha2
IF fecha1 > fecha2 THEN
LET numero_msg = 51
CALL msg(numero_msg)
NEXT FIELD fecha2
END IF
END INPUT
######## En caso de que presione DELETE cancela la operacion
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
CONSTRUCT BY NAME criterio ON a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec
############ Selecionando la informacion a imprimir
# BORRA TODAS LAS TRANSACCIONES DE LA TABLA TEMPORAL
DELETE FROM intb00028
LET selec =
"SELECT UNIQUE a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,",
"b.unidad_med ,a.tipo_doc ",
"FROM intb00022 b,intb00020 a ",
"WHERE (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 ",
"a.status_t IS NULL AND ",
"(a.fecha BETWEEN ? AND ?) AND ",criterio CLIPPED,
" ORDER BY 7,1,2,3,4 "
DISPLAY "<< Buscando Materiales ... Espere por Favor. >>" AT 19,14
ATTRIBUTE(BOLD)
PREPARE comando FROM selec
DECLARE busca CURSOR FOR comando
OPEN busca USING fecha1,fecha2
DECLARE busca1 SCROLL CURSOR FOR
SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.fecha,a.num_fianza,a.tipo_doc,
SUM(a.cantidad),SUM(a.cantidad_c)
FROM intb00020 a
WHERE a.status_t IS NULL AND (a.fecha BETWEEN fecha1 AND fecha2 )
GROUP BY 6,1,2,3,4,5,7 ORDER BY 7,1,2,3,4,5
DISPLAY "<< Buscando las fianzas ... Espere por Favor. >>" AT 19,14
ATTRIBUTE(BOLD)
OPEN busca1
DECLARE busca2 SCROLL CURSOR FOR
SELECT b.factura,b.fecha,c.cod_n,c.cod_grupo,c.cod_tipo,c.cod_sec,
SUM((b.cantidad*c.cantidad)/1000)
FROM intb00021 b,intb00016 c
WHERE (b.cod_n = c.cod_n_p AND b.cod_grupo = c.cod_grupo_p) AND
(b.status_t IS NULL) AND (b.fecha BETWEEN fecha1 AND fecha2) AND
c.status_t IS NULL
GROUP BY 1,2,3,4,5,6 ORDER BY 3,4,5,6,2,1
DISPLAY "<< Buscando Exportaciones... Favor Esperar >>" AT 19,14
ATTRIBUTE(BOLD)
OPEN busca2
START REPORT fianza40 TO "C:\\archivo"
DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>" AT 19,14
ATTRIBUTE(REVERSE)
###### Loop que envia la informacion a la funcion de reporte
INITIALIZE movfi.* TO NULL
# BUSQUEDA DE LOS MATERIALES A IMPRIMIR
LET salir = "N"
WHILE salir != "S"
FETCH busca INTO fianza3.*
IF STATUS = NOTFOUND THEN
LET salir = "S"
EXIT WHILE
END IF
#### En caso que presione DELETE o SUPR cancela la impresion
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
LET movfi.codigo = fianza3.cod_n USING "&"," ",fianza3.cod_grupo USING "&",
" ",fianza3.cod_tipo USING "&&&","-",
fianza3.cod_sec USING "&&&"
LET movfi.cod_n = fianza3.cod_n
LET movfi.cod_grupo = fianza3.cod_grupo
LET movfi.cod_tipo = fianza3.cod_tipo
LET movfi.cod_sec = fianza3.cod_sec
LET movfi.descrip_esp = fianza3.descrip_esp
LET movfi.unidad_med = fianza3.unidad_med
LET movfi.balance = 0
LET movfi.letrero = NULL
LET movfi.fecha = 1
LET fecha8 = NULL
LET fact1 = 0
# BUSQUEDA DE LAS FIANZAS
LET fecha_c = 1
LET salir1 = "N"
LET idx1 = 1
WHILE salir1 != "S"
FETCH ABSOLUTE idx1 busca1 INTO fianza1.*
IF STATUS = NOTFOUND THEN
LET salir1 = "S"
LET idx1 = 1
EXIT WHILE
END IF
LET idx1 = idx1 + 1
IF fianza1.cod_n = movfi.cod_n AND
fianza1.cod_grupo = movfi.cod_grupo AND
fianza1.cod_tipo = movfi.cod_tipo AND
fianza1.cod_sec = movfi.cod_sec THEN
LET movfi.fecha = fianza1.fecha
LET movfi.num_fianza = fianza1.num_fianza
LET movfi.tipo_doc = fianza1.tipo_doc
LET movfi.cantidad_f = fianza1.cantidad_f
LET movfi.cantidad_c = fianza1.cantidad_c
LET movfi.factura = NULL
LET movfi.fecha_e = NULL
LET movfi.cantidad_e = 0
LET pase = "N"
IF movfi.balance < 0 THEN
IF fianza1.fecha > fecha8 THEN
LET movfi.letrero = "C/IMPUESTO"
LET movfi.balance = fianza1.cantidad_c
LET pase = "S"
END IF
END IF
IF pase = "N" THEN
LET movfi.balance = movfi.balance+fianza1.cantidad_c
LET movfi.letrero = NULL
END IF
{
IF movfi.balance <= 0 THEN
LET movfi.letrero = "CERRADA"
ELSE
LET movfi.letrero = NULL
END IF
}
LET idx = 0
IF movfi.balance > 0 THEN
# BUSCA LAS EXPORTACIONES
LET idx2 = 1
LET salir2 = "N"
WHILE salir2 != "S"
FETCH ABSOLUTE idx2 busca2 INTO fianza2.*
IF STATUS = NOTFOUND THEN
LET salir2 = "S"
LET idx2 = 1
EXIT WHILE
END IF
LET idx2 = idx2 + 1
IF movfi.cod_n = fianza2.cod_n AND
movfi.cod_grupo = fianza2.cod_grupo AND
movfi.cod_tipo = fianza2.cod_tipo AND
movfi.cod_sec = fianza2.cod_sec AND
fianza2.fecha_e >= movfi.fecha AND
((fianza2.fecha_e-movfi.fecha)<3670000) AND
movfi.balance > 0 AND
fianza2.fecha_e >= fecha_c THEN
LET movfi.factura = fianza2.factura
LET movfi.fecha_e = fianza2.fecha_e
LET movfi.cantidad_e = fianza2.cantidad_e #* cantidad_b
LET fecha8 = fianza2.fecha_e
IF fecha_c <> movfi.fecha_e THEN
LET fact1 = 0
END IF
IF movfi.factura > fact1 THEN
LET movfi.balance = movfi.balance-fianza2.cantidad_e
{
IF movfi.balance <= 0 THEN
LET movfi.letrero = "CERRADA"
ELSE
LET movfi.letrero = NULL
END IF
}
#INSERTA LAS INFORMACIONES PARA LUEGO LISTARLAS
SELECT a.* INTO intb27.*
FROM intb00027 a
WHERE a.num_fianza = movfi.num_fianza
INSERT INTO intb00028 VALUES
(movfi.cod_n,movfi.cod_grupo,movfi.cod_tipo,
movfi.cod_sec,movfi.descrip_esp,movfi.unidad_med,
movfi.fecha,movfi.num_fianza,intb27.num_form,
intb27.no_pla_liq,movfi.fecha_e,movfi.factura,
movfi.cantidad_c,movfi.cantidad_e,movfi.balance,
movfi.letrero,movfi.tipo_doc)
LET idx = idx + 1
LET fact1 = movfi.factura
LET fecha_c = movfi.fecha_e
LET movfi.letrero = NULL
END IF
IF movfi.balance <= 0 THEN
LET salir2 = "S"
EXIT WHILE
END IF
END IF
END WHILE
END IF
IF idx = 0 THEN
LET movfi.factura = null
LET movfi.cantidad_e = 0
LET movfi.fecha_e = null
LET fecha8 = 0
#INSERTA LAS INFORMACIONES PARA LUEGO LISTARLAS
SELECT a.* INTO intb27.*
FROM intb00027 a
WHERE a.num_fianza = movfi.num_fianza
INSERT INTO intb00028 VALUES
(movfi.cod_n,movfi.cod_grupo,movfi.cod_tipo,
movfi.cod_sec,movfi.descrip_esp,movfi.unidad_med,
movfi.fecha,
movfi.num_fianza,intb27.num_form,
intb27.no_pla_liq,movfi.fecha_e,movfi.factura,movfi.cantidad_c,
movfi.cantidad_e,movfi.balance,movfi.letrero,movfi.tipo_doc)
LET movfi.letrero = NULL
END IF
END IF
END WHILE
LET fecha8 = 0
END WHILE
UPDATE intb00028 SET fecha_f = fecha
WHERE fecha_f IS NULL
DECLARE busca_t CURSOR FOR
SELECT a.rowid,a.* FROM intb00028 a
ORDER BY a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.fecha_f
FOREACH busca_t INTO idx,intb28.*
IF intb28.letrero = "C/IMPUESTO" THEN
UPDATE intb00028 SET letrero = "C/IMPUESTO"
WHERE rowid = idx +1
UPDATE intb00028 SET letrero = NULL
WHERE rowid = idx
END IF
END FOREACH
FOREACH busca_t INTO idx,intb28.*
LET movfi.cod_n = intb28.cod_n
LET movfi.cod_grupo = intb28.cod_grupo
LET movfi.cod_tipo = intb28.cod_tipo
LET movfi.cod_sec = intb28.cod_sec
LET movfi.descrip_esp = intb28.descrip_esp
LET movfi.unidad_med = intb28.unidad_med
LET movfi.fecha = intb28.fecha
LET movfi.num_fianza = intb28.num_fianza
LET movfi.tipo_doc = intb28.tipo_doc
LET movfi.cantidad_c = intb28.cantidad_i
LET movfi.codigo = intb28.cod_n using "&",intb28.cod_grupo using "&",
intb28.cod_tipo using "&&",intb28.cod_sec using "&&&"
LET movfi.fecha_e = intb28.fecha_f
LET movfi.factura = intb28.factura
LET movfi.cantidad_e = intb28.cantidad_e
LET movfi.balance = intb28.balance
LET movfi.letrero = intb28.letrero
IF movfi.cantidad_e IS NOT NULL THEN
OUTPUT TO REPORT fianza40(movfi.*,fecha1,fecha2)
END IF
END FOREACH
FINISH REPORT fianza40
RUN "type C:\\archivo > %USPRINT%" END FUNCTION
#### Funcion que genera el reporte
REPORT fianza40(x,fecha3,fecha4)
##### Variables con las informaciones a imprimir
DEFINE x RECORD
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
descrip_esp CHAR(30),
unidad_med CHAR(15),
fecha DATE,
num_fianza INTEGER,
tipo_doc CHAR(1),
cantidad_f DECIMAL(12,2),
cantidad_c DECIMAL(12,2),
codigo CHAR(11),
factura INTEGER,
fecha_e DATE,
cantidad_e DECIMAL(12,2),
balance DECIMAL(12,2),
letrero CHAR(10)
END RECORD,
cantidad_b DECIMAL(12,2),
balance,balance1 DECIMAL(12,2),
letrero CHAR(15),
i SMALLINT,
balance_ini,total_import DECIMAL(12,2)
DEFINE fact2 INTEGER
DEFINE fech DATE
DEFINE cantidad1 DECIMAL(12,2)
DEFINE codd CHAR(10)
DEFINE fecha3,fecha4,fecha5 DATE
DEFINE idx,idx1,no_fianza,fac_num INTEGER
DEFINE fact,fact1 CHAR(1)
DEFINE descrip,p_descrip CHAR(30)
DEFINE doble_on CHAR(2)
DEFINE doble_off CHAR(2)
DEFINE negrillas_on CHAR(6)
DEFINE negrillas_off CHAR(6)
DEFINE comp_on CHAR(3)
DEFINE comp_off CHAR(2)
DEFINE doce CHAR(2)
DEFINE normal CHAR(2)
DEFINE normall CHAR(3)
DEFINE comp CHAR(3)
DEFINE hora CHAR(5)
DEFINE tipo CHAR(2)
DEFINE imp_cli CHAR(1)
OUTPUT
TOP MARGIN 0
LEFT MARGIN 0
BOTTOM MARGIN 2
##### Sorteando la salida de la informacion.
###### Diseno de la salida de la informacion
FORMAT
PAGE HEADER
LET doble_on = ASCII 14
LET doble_off = ASCII 20
LET negrillas_on = ASCII 27, ASCII 69
LET negrillas_off = ASCII 27, ASCII 70
LET comp_on = ASCII 15
LET comp_off = ASCII 18
LET doce = ASCII 27, ASCII 77
LET normall = ASCII 27, ASCII 80
LET hora = time
LET lj = (142 - LENGTH(p_companias.nombre CLIPPED))/2
PRINT COLUMN 1, comp_on
PRINT COLUMN 1, "inprrp040",
COLUMN lj, p_companias.nombre CLIPPED,
COLUMN 135, "Pag. ",pageno USING "###"
PRINT COLUMN 58, " Sistema de Inventario de Materiales (Ley-69) ",
COLUMN 135, today using "dd/mm/yyyy"
PRINT COLUMN 69, "Movimientos de la Fianza",
COLUMN 138, hora
PRINT COLUMN 69, "Del ",fecha3 USING "dd/mm/yyyy",
" Al ",fecha4 using "dd/mm/yyyy"
PRINT COLUMN 1,
"--------------------------------------------------",
"--------------------------------------------------",
"--------------------------------------------"
, negrillas_on
PRINT COLUMN 48,"Formulario",
COLUMN 65,"Planilla",
COLUMN 75,"Fecha",
COLUMN 85,"Numero",
COLUMN 98, "Cantidad",
COLUMN 115, "Cantidad",
COLUMN 127,"Balance"
PRINT COLUMN 1,"Material",
COLUMN 48,"3111",
COLUMN 65,"Liqui.",
COLUMN 75,"Factura",
COLUMN 85, "Factura",
COLUMN 98,"Importada",
COLUMN 115,"Exportada",
COLUMN 127,"Material",negrillas_off
PRINT COLUMN 1,
"--------------------------------------------------",
"--------------------------------------------------" ,
"--------------------------------------------"
BEFORE GROUP OF x.codigo
LET fact2 = 0
PRINT negrillas_on
PRINT COLUMN 1, x.cod_n USING "&"," ",x.cod_grupo USING "&"," ",
x.cod_tipo USING "&&&","-",x.cod_sec USING "&&&"," ",
x.descrip_esp CLIPPED,
COLUMN 44, x.unidad_med CLIPPED,
negrillas_off
BEFORE GROUP OF x.num_fianza
IF total_import IS NULL THEN
LET total_import = 0
END IF
SELECT a.* INTO intb27.*
FROM intb00027 a
WHERE a.num_fianza = x.num_fianza
LET total_import = total_import + x.cantidad_c
PRINT COLUMN 10, "No. Fianza: ",x.num_fianza USING "########",
COLUMN 31, "Fecha: ",x.fecha USING "dd/mm/yyyy",
COLUMN 48, intb27.num_form using "########",
COLUMN 65, intb27.no_pla_liq CLIPPED,
COLUMN 93, x.cantidad_c USING "###,###,##&.&&"
ON EVERY ROW
##### Proceso para balancear las cantidades de las fianzas contra las
##### cantidades de la factura y asi poder cancelar las fianzas.
PRINT COLUMN 75, x.fecha_e USING "dd/mm/yyyy",
COLUMN 85, x.factura USING "&&&&&&&&",
COLUMN 108, x.cantidad_e USING "###,###,###.##",
COLUMN 122, x.balance USING "----,---,--#.##",
" ",x.letrero
AFTER GROUP OF x.codigo
SKIP 1 LINE
ON LAST ROW
LET balance = 0
PRINT COLUMN 1,normal,negrillas_off,comp_off
END REPORT