{ ------------------------------------------------------------------------------ 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