Files

284 lines
8.5 KiB
Plaintext

{
------------------------------------------------------------------------------
PROGRAMA : IPPRCS006
OBJETIVO : Programa Consulta Balances - Producto Terminado.
PROGRAMADOR : JUAN FCO SOTO
FECHA REALIZACION : AGOSTO 1997
DIRECTOR PROYECTO : JOSE ALFREDO PAULINO ALEJO
------------------------------------------------------------------------------
}
GLOBALS
"ipprgb000.4gl"
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CONNECT TO "smarmotech" USER usuarios USING clave
SELECT * INTO p_companias.* FROM companias
CALL ipprcs006()
END MAIN
FUNCTION ipprcs006()
DEFINE csmov1 DYNAMIC ARRAY OF RECORD
descrip_mov1 VARCHAR(100),
num_doc CHAR(11),
num_oc INT,
num_compra INT,
fecha_2 LIKE iptb00006.fecha,
cantidad float,
entrada float,
salida float,
bodega1 CHAR(50),
balance float
END RECORD
DEFINE fecha1 char(8)
DEFINE hora1 char(5)
LET fecha1 = today using "dd/mm/yyy"
LET hora1 = time
LET int_flag = false
LET bandera = 0
#WHENEVER ERROR CONTINUE
CLEAR SCREEN
OPTIONS
ERROR LINE 24,
FORM LINE 4,
COMMENT LINE 22,
PROMPT LINE 23
DISPLAY fecha1 AT 1,70 ATTRIBUTE (BLUE)
DISPLAY hora1 AT 2,73 ATTRIBUTE (BLUE)
OPEN FORM ipfmcs006 FROM "ipfmcs006"
DISPLAY FORM ipfmcs006
INITIALIZE datos_gen.* TO NULL
CALL csmov1.clear()
LABEL volver:
INPUT BY NAME historico,datos_cons.cod_n,datos_cons.cod_grupo,datos_Cons.cod_tipo,
datos_cons.cod_sec,datos_cons.fech_in,datos_cons.fech_fi
BEFORE INPUT
CALL csmov1.clear()
BEFORE FIELD fech_in
LET datos_cons.fech_in = today using "dd/mm/yyyy"
DISPLAY BY NAME datos_cons.fech_in
BEFORE FIELD fech_fi
LET datos_cons.fech_fi = today using "dd/mm/yyyy"
DISPLAY BY NAME datos_cons.fech_fi
AFTER FIELD cod_grupo
IF datos_cons.cod_grupo IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_grupo
END IF
AFTER FIELD cod_tipo
IF datos_cons.cod_tipo IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_tipo
END IF
AFTER FIELD cod_sec
IF datos_cons.cod_n is not null and
datos_cons.cod_grupo is not null and
datos_cons.cod_tipo is not null and
datos_cons.cod_sec is not null THEN
IF historico = 'N' THEN
LET selec =
" SELECT descrip_esp,unidad_med ",
" FROM iptb00002 ",
" WHERE cod_n = ? and ",
" cod_grupo = ? and ",
" cod_tipo = ? and ",
" cod_sec = ? and ",
" status_t is null "
ELSE
LET selec =
" SELECT descrip_esp,unidad_med ",
" FROM historicomtech.dbo.iptb00002 ",
" WHERE cod_n = ? and ",
" cod_grupo = ? and ",
" cod_tipo = ? and ",
" cod_sec = ? and ",
" status_t is null "
END IF
PREPARE cmdbusca FROM selec
EXECUTE cmdbusca INTO descripcion,articulos.unidad_med
USING datos_cons.cod_n,datos_cons.cod_grupo,
datos_cons.cod_tipo,datos_cons.cod_sec
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
CLEAR FORM
NEXT FIELD cod_n
END IF
LET descripcion = descripcion CLIPPED," "
DISPLAY BY NAME descripcion,articulos.unidad_med
END IF
AFTER FIELD fech_in
IF datos_cons.fech_in IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fech_in
END IF
AFTER FIELD fech_fi
IF datos_cons.fech_fi IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fech_fi
END IF
IF datos_cons.fech_in > datos_cons.fech_fi THEN
LET numero_msg = 36
CALL msg(numero_msg)
NEXT FIELD fech_in
END IF
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
CLEAR SCREEN
RETURN
END IF
EXIT INPUT
END INPUT
CONSTRUCT criterio ON a.bodega FROM bodega
BEFORE CONSTRUCT
LET k1 = '1'
CALL bodegas(k1)
AFTER CONSTRUCT
EXIT CONSTRUCT
END CONSTRUCT
LET balance = 0
DISPLAY "Buscando Informacion... Espere Por Favor" AT 24,2 ATTRIBUTE (BLUE)
IF historico = 'N' THEN
LET selec =
"SELECT SUM(a.cantidad_2) FROM iptb00006 a ",
" WHERE a.cod_n =? and a.cod_grupo = ? AND ",
" a.cod_tipo = ? and a.cod_sec = ? and ",criterio CLIPPED,
" and a.fecha < ? and a.status_t is null "
ELSE
LET selec =
"SELECT SUM(a.cantidad_2) FROM historicomtech.dbo.iptb00006 a ",
" WHERE a.cod_n =? and a.cod_grupo = ? AND ",
" a.cod_tipo = ? and a.cod_sec = ? and ",criterio CLIPPED,
" AND a.fecha < ? and a.status_t is null "
END IF
PREPARE cmdbalance FROM selec
EXECUTE cmdbalance INTO balance
USING datos_cons.cod_n,datos_cons.cod_grupo,
datos_cons.cod_tipo,datos_cons.cod_sec,
datos_cons.fech_in
IF balance IS NULL THEN
LET balance = 0
END IF
DISPLAY balance TO balance_ini
IF historico = 'N' THEN
LET selec =
"SELECT '('+cast(c.cod_mov as char(2))+')'+RTRIM(c.descrip_mov), a.num_doc,a.num_oc,a.orden_compra,a.fecha,",
"SUM(a.cantidad_2),'0','0','('+cast(b.cod_bodega as char(1))+')'+RTRIM(b.descripcion) FROM iptb00006 a,intb00009 b,iptb00005 c ",
"WHERE a.cod_n = ? and a.cod_grupo=? and ",
" a.cod_tipo =? and a.cod_sec=? and ",
" a.status_t is null and a.fecha between ? and ? and ",
" a.cod_mov = c.cod_mov and ",
" a.bodega = b.cod_bodega and ",criterio CLIPPED,
" GROUP BY a.num_doc,a.fecha,a.orden_compra,a.num_oc,c.cod_mov,c.descrip_mov,b.cod_bodega,b.descripcion ",
" ORDER BY a.fecha,a.num_doc "
ELSE
LET selec =
"SELECT '('+cast(c.cod_mov as char(2))+')'+RTRIM(c.descrip_mov), a.num_doc,a.num_oc,a.orden_compra,a.fecha,",
"SUM(a.cantidad_2),'0','0','('+cast(b.cod_bodega as char(1))+')'+RTRIM(b.descripcion) FROM historicomtech.dbo.iptb00006 a,historicomtech.dbo.intb00009 b,iptb00005 c ",
"WHERE a.cod_n = ? and a.cod_grupo=? and ",
" a.cod_tipo =? and a.cod_sec=? and ",
" a.status_t is null and a.fecha between ? and ? and ",
" a.cod_mov = c.cod_mov and ",
" a.bodega = b.cod_bodega and ",criterio CLIPPED,
" GROUP BY a.num_doc,a.fecha,a.orden_compra,c.cod_mov,c.descrip_mov,b.cod_bodega,b.descripcion ",
" ORDER BY a.fecha,a.num_doc "
END IF
PREPARE cmdtrx FROM selec
DECLARE jhonn_1 CURSOR FOR cmdtrx
OPEN jhonn_1 USING datos_cons.cod_n,datos_cons.cod_grupo,
datos_cons.cod_tipo,datos_cons.cod_sec,
datos_cons.fech_in, datos_cons.fech_fi
LET idx = 1
FOREACH jhonn_1 INTO csmov1[idx].*
IF STATUS = NOTFOUND THEN
EXIT FOREACH
RETURN
END IF
LET balance = balance + csmov1[idx].cantidad
# LET csmov1[idx].num_oc = csmov.num_oc
# LET csmov1[idx].num_compra = csmov.num_compra
# LET csmov1[idx].fecha_2 = csmov.fecha_1
# LET csmov1[idx].balance = balance USING "-,---,---.###"
# LET csmov1[idx].num_doc = "(",csmov.cod_mov using "&&",")"," ",
# csmov.num_doc USING "&&&&&&"
# LET csmov1[idx].bodega1 = csmov.bodega
IF csmov1[idx].cantidad < 0 THEN
LET csmov1[idx].entrada = null
LET csmov1[idx].salida = csmov1[idx].cantidad
ELSE
LET csmov1[idx].salida = null
LET csmov1[idx].entrada = csmov1[idx].cantidad
END IF
LET csmov1[idx].balance = balance
LET idx = idx + 1
END FOREACH
LET balance = 0
CALL set_count(idx - 1)
DISPLAY ARRAY csmov1 TO s_csmov.*
CALL csmov1.clear()
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
CLEAR SCREEN
RETURN
END IF
CLEAR FORM
DISPLAY " " AT 13,6
DISPLAY " " AT 13,60
GOTO volver
END FUNCTION