313 lines
11 KiB
Plaintext
313 lines
11 KiB
Plaintext
{
|
|
-------------------------------------------------------------------------------
|
|
PROGRAMA : IRPRRP003
|
|
OBJETIVO : REPORTE DE MOVIMIENTOS APARTIR DE UN RANGO DE FECHA.
|
|
EL REPORTE SE PUEDE LISTAR TANTO PARA UN CODIGO COMO
|
|
PARA UN RANGO DE CODIGO O TODOS LOS CODIGOS
|
|
PROGRAMADOR : Ing. Juan Fco. Soto
|
|
FECHA REALIZACION : Marzo 1, 1993.
|
|
-------------------------------------------------------------------------------
|
|
}
|
|
GLOBALS "irprgb000.4gl"
|
|
|
|
MAIN
|
|
DEFER INTERRUPT
|
|
CALL STARTLOG("irprrp03.log")
|
|
CALL ARG_VAL(1) RETURNING usuarios
|
|
CALL ARG_VAL(2) RETURNING clave
|
|
CALL ARG_VAL(3) RETURNING impresor
|
|
|
|
CONNECT to "smarmotech" USER usuarios USING clave
|
|
SELECT a.* INTO p_companias.* FROM companias a
|
|
|
|
CALL irprrp03()
|
|
END MAIN
|
|
|
|
FUNCTION irprrp03()
|
|
|
|
# Estas variables son tando de control de indice de busqueda como de control de
|
|
# cambio de codigo y termino de loops
|
|
DEFINE idx_b SMALLINT
|
|
DEFINE cambio,salir,salir1 CHAR(1)
|
|
|
|
# Variable que contiene los movimientos del rango para cada codigo
|
|
DEFINE transacc RECORD
|
|
cod_n LIKE irtb00006.cod_n,
|
|
cod_grupo LIKE irtb00006.cod_grupo,
|
|
cod_tipo LIKE irtb00006.cod_tipo,
|
|
cod_sec LIKE irtb00006.cod_sec,
|
|
descrip_esp LIKE intb00001.descrip_esp,
|
|
unidad_med LIKE intb00001.unidad_med,
|
|
num_doc LIKE irtb00006.num_doc,
|
|
fecha CHAR(10),
|
|
cantidad_2 LIKE irtb00006.cantidad_2,
|
|
cod_mov LIKE irtb00006.cod_mov,
|
|
descrip_mov LIKE irtb00005.descrip_mov,
|
|
codigo CHAR(7),
|
|
balance_in DECIMAL(12,2)
|
|
END RECORD
|
|
|
|
# Variable control de validacion de cambio de codigo
|
|
DEFINE codigo_ant RECORD
|
|
cod_n SMALLINT,
|
|
cod_grupo SMALLINT,
|
|
cod_tipo SMALLINT,
|
|
cod_sec SMALLINT
|
|
END RECORD
|
|
|
|
# Variable para los balances iniciales de todos los codigos
|
|
DEFINE balances RECORD
|
|
cod_n SMALLINT,
|
|
cod_grupo SMALLINT,
|
|
cod_tipo SMALLINT,
|
|
cod_sec SMALLINT,
|
|
balance LIKE irtb00006.cantidad_2
|
|
END RECORD
|
|
|
|
# Variable para el select de los balances iniciales
|
|
DEFINE select_balan CHAR(1000)
|
|
|
|
# WHENEVER ERROR CONTINUE
|
|
|
|
OPTIONS
|
|
FORM LINE 9,
|
|
ERROR LINE 23,
|
|
COMMENT LINE 21
|
|
|
|
OPEN FORM irfmrp03 FROM "irfmrp003"
|
|
DISPLAY FORM irfmrp03
|
|
|
|
# Rutina para mensaje de papel en la pantalla
|
|
LET tipo_papel = 1
|
|
CALL msgrp000(tipo_papel)
|
|
LET int_flag = false
|
|
# Captura de rango de fecha
|
|
INPUT BY NAME datos_cons.fech_in,datos_cons.fech_fi
|
|
|
|
# Control interrupcion del programa
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = false
|
|
CLEAR SCREEN
|
|
RETURN
|
|
END IF
|
|
|
|
# Control para imprimir los movimientos pertenecientes a un codigo o
|
|
# movimientos para varios codigos
|
|
CONSTRUCT criterio ON a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec
|
|
FROM cod_n,cod_grupo,cod_tipo,cod_sec
|
|
|
|
# Concatenacion para la configuracion del select de busqueda de los balances
|
|
# Iniciales
|
|
|
|
LET selec =
|
|
"SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,b.unidad_med, ",
|
|
" a.num_doc,CONVERT(CHAR(10),a.fecha,103),a.cantidad_2,a.cod_mov,c.descrip_mov,'1' ",
|
|
"FROM irtb00006 a, irtb00002 b, irtb00005 c ",
|
|
"WHERE ",criterio clipped," AND 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 c.cod_mov=a.cod_mov ",
|
|
"AND b.status_t is NULL AND CONVERT(CHAR(10),a.fecha,103) between '", datos_cons.fech_in USING 'dd/mm/yyyy', "' and '",datos_cons.fech_fi USING 'dd/mm/yyyy', "' AND a.status_t IS NULL ",
|
|
"ORDER BY a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.fecha"
|
|
|
|
# Abrir el archivo del spool para la impresion
|
|
|
|
DISPLAY "<< Estoy Buscando los Movimientos >>"
|
|
AT 17,14 ATTRIBUTE (REVERSE,BOLD)
|
|
DISPLAY selec
|
|
PREPARE busca FROM selec
|
|
DECLARE accion CURSOR FOR busca
|
|
OPEN accion
|
|
|
|
LET selec1 =
|
|
"SELECT COUNT(*) FROM irtb00006 a, irtb00002 b, irtb00005 c ",
|
|
"WHERE ",criterio clipped," AND 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 c.cod_mov=a.cod_mov ",
|
|
"AND b.status_t is NULL AND a.fecha between '", datos_cons.fech_in USING 'mm/dd/yyyy', "' and '",datos_cons.fech_fi USING 'mm/dd/yyyy', "' AND a.status_t IS NULL "
|
|
|
|
PREPARE comando1 FROM selec1
|
|
DECLARE busca1 CURSOR FOR comando1
|
|
OPEN busca1
|
|
|
|
FETCH busca1 INTO regi
|
|
LET p_param = "S"
|
|
{ CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of,
|
|
doble_on,doble_off,comp_on,comp_off,
|
|
doce,normal,archivo,copia
|
|
|
|
}
|
|
CALL seleccionarsalida() RETURNING r_output
|
|
|
|
CALL configureoutput(r_output) RETURNING HANDLER
|
|
START REPORT reporte3 TO XML HANDLER handler
|
|
|
|
DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>"
|
|
AT 17,14 ATTRIBUTE (REVERSE,BOLD)
|
|
|
|
# Loop para la busqueda de los movimientos de los codigos especificados
|
|
|
|
FOREACH accion INTO transacc.*
|
|
|
|
CALL termometro(regi,p_param)
|
|
LET p_param = "N"
|
|
LET transacc.codigo = transacc.cod_n USING "&",
|
|
transacc.cod_grupo USING "&",
|
|
transacc.cod_tipo USING "&&",
|
|
transacc.cod_sec USING "&&&"
|
|
|
|
LET transacc.balance_in = 0
|
|
|
|
IF transacc.balance_in IS NULL THEN
|
|
LET transacc.balance_in = 0
|
|
END IF
|
|
DISPLAY "ESTOY ENVIANDO "
|
|
OUTPUT TO REPORT reporte3(transacc.*)
|
|
END FOREACH
|
|
|
|
FINISH REPORT reporte3
|
|
|
|
#RUN imprime
|
|
END FUNCTION
|
|
|
|
# Rutina generadora del reporte
|
|
REPORT reporte3(x)
|
|
|
|
# Record para validacion de los valores de la funcion matriz
|
|
DEFINE x RECORD
|
|
cod_n LIKE irtb00006.cod_n,
|
|
cod_grupo LIKE irtb00006.cod_grupo,
|
|
cod_tipo LIKE irtb00006.cod_tipo,
|
|
cod_sec LIKE irtb00006.cod_sec,
|
|
descrip_esp LIKE intb00001.descrip_esp,
|
|
unidad_med LIKE intb00001.unidad_med,
|
|
num_doc LIKE irtb00006.num_doc,
|
|
fecha CHAR(10),
|
|
cantidad_2 LIKE irtb00006.cantidad_2,
|
|
cod_mov LIKE irtb00006.cod_mov,
|
|
descrip_mov LIKE irtb00005.descrip_mov,
|
|
codigo CHAR(7),
|
|
balance_in DECIMAL(12,2)
|
|
END RECORD
|
|
|
|
# Variables para control de nombre y caracteres ASCII
|
|
DEFINE doble_on CHAR(2),
|
|
doble_off CHAR(2),
|
|
negrillas_on CHAR(2),
|
|
negrillas_off CHAR(2),
|
|
comprimido_on CHAR(2),
|
|
comprimido_off,doce CHAR(3),
|
|
|
|
hora CHAR(5),
|
|
# Calculo para el reporte
|
|
canti DECIMAL(12,2),
|
|
entrada,salida DECIMAL(12,2)
|
|
OUTPUT
|
|
LEFT MARGIN 0
|
|
ORDER BY x.codigo
|
|
|
|
FORMAT
|
|
PAGE HEADER
|
|
|
|
# Validacion de los caracteres ASCII
|
|
{ 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 comprimido_on = ASCII 15
|
|
LET comprimido_off = ASCII 18
|
|
LET doce = ASCII 27, ASCII 77}
|
|
LET hora = time
|
|
|
|
# Impresion del encabezado de la compania y demas letreros
|
|
PRINT COLUMN 1, ASCII 27,ASCII 80
|
|
PRINT COLUMN 1, "irprrp003",
|
|
COLUMN 17, p_companias.nombre,
|
|
COLUMN 75, "Pag. ",pageno using "###"
|
|
PRINT COLUMN 17, " Sistema de Inventario de Repuestos ",
|
|
COLUMN 75, today using "dd/mm/yyyy"
|
|
PRINT COLUMN 17, " Movimientos de Repuestos ",
|
|
COLUMN 78, hora
|
|
SKIP 2 LINES
|
|
#--------------------------------------------------------------------------
|
|
|
|
# Encabezados de detalles
|
|
PRINT COLUMN 1, "Desde ",datos_cons.fech_in using "dd/mm/yyyy",
|
|
COLUMN 18, "Hasta ",datos_cons.fech_fi using "dd/mm/yyyy"
|
|
|
|
PRINT doce,comprimido_on
|
|
PRINT COLUMN 1, "--------------------------------------------------",
|
|
"--------------------------------------------------",
|
|
"--------------------------------------------------",
|
|
"---------------"
|
|
|
|
PRINT COLUMN 124, "C a n t i d a d"
|
|
|
|
PRINT COLUMN 1, "Codigo ",
|
|
COLUMN 15, "Descripcion",
|
|
COLUMN 45, "Unidad",
|
|
COLUMN 52, "Documento",
|
|
COLUMN 63, "fecha",
|
|
COLUMN 74, "Movimiento",
|
|
COLUMN 121, "Entrada",
|
|
COLUMN 136, "Salida",
|
|
COLUMN 159, "Balance"
|
|
|
|
PRINT COLUMN 1, "--------------------------------------------------",
|
|
"--------------------------------------------------",
|
|
"--------------------------------------------------",
|
|
"---------------"
|
|
|
|
# Control para la impresion del codigo del repuesto una sola vez
|
|
BEFORE GROUP OF x.codigo
|
|
SKIP 1 LINE
|
|
LET x.balance_in = 0
|
|
LET canti = 0
|
|
SELECT SUM(a.cantidad_2) INTO x.balance_in FROM irtb00006 a
|
|
WHERE a.status_t IS NULL AND a.cod_n = x.cod_n AND
|
|
a.cod_grupo = x.cod_grupo AND a.cod_tipo = x.cod_tipo AND
|
|
a.cod_sec = x.cod_sec AND a.fecha < datos_cons.fech_in
|
|
|
|
IF x.balance_in is null THEN
|
|
LET x.balance_in = 0
|
|
END IF
|
|
PRINT COLUMN 1, x.cod_n USING "&","-",
|
|
COLUMN 3, x.cod_grupo USING "&","-",
|
|
COLUMN 5, x.cod_tipo USING "&&","-",
|
|
COLUMN 8, x.cod_sec USING "&&&",
|
|
COLUMN 15, x.descrip_esp,
|
|
COLUMN 45, x.unidad_med,
|
|
COLUMN 132, "Inicial ---> ",
|
|
x.balance_in using "---,---,---.##"
|
|
LET canti = x.balance_in
|
|
|
|
# Impresion de los movimientos con sus respctivas descripcion y
|
|
# cantidades afectadas
|
|
ON EVERY ROW
|
|
|
|
# Control para impresion del balance inicial una sola vez
|
|
# IF primera = "S" THEN
|
|
#----------------------------------------------------------------------------
|
|
|
|
LET canti = canti + x.cantidad_2
|
|
|
|
IF x.cantidad_2 > 0 THEN
|
|
LET salida = null
|
|
LET entrada = x.cantidad_2
|
|
ELSE
|
|
LET entrada = null
|
|
LET salida = x.cantidad_2
|
|
END IF
|
|
|
|
PRINT COLUMN 53, x.num_doc USING "&&&&&&",
|
|
COLUMN 63, x.fecha ,
|
|
COLUMN 74, x.descrip_mov,
|
|
COLUMN 111, entrada USING "---,---,---.##",
|
|
COLUMN 127, salida USING "---,---,---.##",
|
|
COLUMN 152, canti using "---,---,---.##"
|
|
|
|
ON LAST ROW
|
|
PRINT comprimido_off
|
|
|
|
END REPORT
|
|
|