{ PROGRAMA : INPRCS006 OBJETIVO : Programa Consulta Balances Materia Prima. PROGRAMADOR : Juan Fco. Soto (Johnny) FECHA REALIZACION : Agosto 18,1992. } GLOBALS "inprgb000.4gl" DEFINE xbodega SMALLINT MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CALL ARG_VAL(3) RETURNING impresor #let usuarios = "jsoto" #let clave = "lmmjvsd2009" CONNECT to "smarmotech" USER usuarios USING clave SELECT * INTO p_companias.* FROM companias CALL inprcs006() END MAIN FUNCTION inprcs006() DEFINE fecha1 char(8) DEFINE hora1 char(5) DEFINE balance_in DECIMAL(12,2), query1,mensaje_ini STRING LET fecha1 = today using "dd/mm/yy" 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 OPEN FORM infmcs006 FROM "infmcs006" DISPLAY FORM infmcs006 call ui.Interface.loadStyles("formularios") DIALOG ATTRIBUTE(UNBUFFERED) INPUT BY NAME datos_cons.* BEFORE INPUT INITIALIZE datos_gen.* TO NULL LET balance = 0 CALL bodegas('1') 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_sec SELECT descrip_esp,unidad_med INTO datos_cons.descrip_esp,articulos.unidad_med FROM intb00001 WHERE cod_n = datos_cons.cod_n and cod_grupo = datos_cons.cod_grupo and cod_tipo = datos_cons.cod_tipo and cod_sec = datos_cons.cod_sec and status_t is null IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) CLEAR FORM NEXT FIELD cod_n END IF DISPLAY BY NAME datos_cons.descrip_esp,articulos.unidad_med AFTER FIELD fech_fi IF datos_cons.fech_fi IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fech_in END IF IF datos_cons.fech_in IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fech_in END IF IF datos_cons.fech_in > datos_cons.fech_fi THEN LET numero_msg = 86 CALL msg(numero_msg) NEXT FIELD fech_in END IF END INPUT CONSTRUCT criterio ON p.bodega FROM bodega BEFORE CONSTRUCT CALL bodegas('1') ON ACTION buscar ATTRIBUTE(TEXT="Ejecuta Busqueda",IMAGE="find") IF datos_cons.fech_fi IS NULL THEN CALL msg(16) NEXT FIELD fecha_in END IF LET query1 = "SELECT ISNULL(SUM(p.cantidad_2),0) FROM intb00006 p WHERE ", criterio clipped," and p.cod_n = ? and p.cod_grupo = ? and p.cod_tipo = ? and p.cod_sec = ? AND p.fecha < ? and p.status_t is null " PREPARE balanceini FROM query1 EXECUTE balanceini USING datos_cons.cod_n,datos_cons.cod_grupo,datos_cons.cod_tipo,datos_cons.cod_sec, datos_cons.fech_in INTO balance LET balance_in = balance LET mensaje_ini = "Blance Inicial: ",balance_in using "---,---,---.##" DISPLAY BY NAME mensaje_ini LET query1 = "SELECT p.num_doc,convert(char(10),p.fecha,103),sum(p.cantidad_2),p.cod_mov,b.descripcion + '('+cast(p.bodega as char(2))+')',p.bodega ", " FROM intb00006 p,intb00009 b ", " WHERE ", criterio CLIPPED," AND p.cod_n = ? and p.cod_grupo = ? and ", " p.cod_tipo = ? and p.cod_sec = ? and ", " p.bodega = b.cod_bodega and ", " p.status_t is null and p.fecha between ? and ? ", " GROUP BY p.num_doc,p.fecha,p.cod_mov,b.descripcion,p.bodega ", " ORDER BY p.fecha " PREPARE comando FROM query1 DECLARE jhonn_1 CURSOR FOR comando CALL csmov1.clear() 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 CALL csmov2.clear() LET idx = 1 LET csmov2[1].parent_id = NULL FOREACH jhonn_1 INTO csmov.*,xbodega CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF LET balance = balance + csmov.cantidad_2 LET csmov2[idx].fecha_2 = csmov.fecha_1 LET csmov2[idx].balance = balance USING "---,---,---.##" LET csmov2[idx].num_doc = "(",csmov.cod_mov using "&&",")"," ", csmov.num_doc USING "&&&&&&" LET csmov2[idx].bodega1 = csmov.bodega1 IF csmov.cantidad_2 < 0 THEN LET csmov2[idx].entrada = null LET csmov2[idx].salida = csmov.cantidad_2 USING "---,---,---.##" ELSE LET csmov2[idx].salida = null LET csmov2[idx].entrada = csmov.cantidad_2 USING "###,###,###.##" END IF LET csmov2[idx].chield_id = idx USING "<<<" # DISPLAY csmov2[idx].num_doc," ",csmov2[idx].fecha_2," ",csmov2[idx].entrada," p ",csmov2[idx].parent_id," c ",csmov2[idx].chield_id CALL llenahijos(idx,datos_cons.cod_n,datos_cons.cod_grupo,datos_cons.cod_tipo,datos_cons.cod_sec,csmov.num_doc,csmov.cod_mov,xbodega) LET idx = idx + 1 LET csmov2[idx].parent_id = null END FOREACH { LET csmov2[1].parent_id = NULL LET csmov2[1].chield_id = 1 LET csmov2[1].num_doc = '2020' LET csmov2[1].fecha_2 = '28/11/2023' LET csmov2[1].entrada = '1' LET csmov2[2].parent_id = '1' LET csmov2[2].chield_id = '1.1' LET csmov2[2].num_doc = '1.20' LET csmov2[2].fecha_2 = '2.20' LET csmov2[2].salida = '2' LET csmov2[3].parent_id = null LET csmov2[3].chield_id = '2' LET csmov2[3].num_doc = '4040' LET csmov2[3].fecha_2 = '29/11/2023' LET csmov2[3].salida = '3' LET csmov2[4].parent_id = 2 LET csmov2[4].chield_id = '2.1' LET csmov2[4].num_doc = '1.24' LET csmov2[4].fecha_2 = '2.24' LET csmov2[4].salida = '4' } # FOR idx = 1 TO csmov2.getLength() # DISPLAY csmov2[idx].num_doc," ",csmov2[idx].fecha_2," ",csmov2[idx].entrada," p ",csmov2[idx].parent_id," c ",csmov2[idx].chield_id # END FOR END CONSTRUCT DISPLAY ARRAY csmov2 TO s_csmov.* END DISPLAY ON ACTION CANCEL LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE EXIT PROGRAM END DIALOG END FUNCTION FUNCTION llenahijos(i1,pcodn,pcodgrupo,pcodtipo,pcodsec,pnumdoc,pcodmov,pbodega) DEFINE i1,i2,i3,pcodn,pcodgrupo,pcodtipo,pcodsec,pnumdoc,pbodega,pcodmov INT, xcodigo_bloque VARCHAR(30), xancho1,xlargo1,xespesor1,xancho2,xlargo2,xespesor2,xmedida1,xmedida2 DEC(12,5) DECLARE busca_desglose CURSOR FOR SELECT a.codigo_bloque,a.ancho1,a.largo1,a.espesor1,SUM(a.medida1) INTO xcodigo_bloque,xancho1,xlargo1,xespesor1,xmedida1 FROM intb00018 a WHERE a.cod_n = pcodn and a.cod_grupo = pcodgrupo and a.cod_tipo = pcodtipo and a.cod_Sec = pcodSec and a.documento =pnumdoc and a.cod_mov = pcodmov AND a.bodega = pbodega GROUP BY a.codigo_bloque,a.ancho1,a.largo1,a.espesor1 #DISPLAY "datos1: ",pcodn,pcodgrupo,pcodtipo,pcodsec," d ",pnumdoc," m ",pcodmov,"b ",pbodega LET i2 = i1 +1 LET i3 =1 #LET csmov2[i2].chield_id = i1 USING "<<<" FOREACH busca_desglose LET csmov2[i2].parent_id = i1 USING "<<<" LET csmov2[i2].num_doc = xcodigo_bloque CLIPPED LET CSMOV2[I2].fecha_2 = xancho1 USING "<<.<<<<<"," X " LET CSMOV2[I2].entrada = xlargo1 USING "<<.<<<<<"," X " LET csmov2[i2].salida = xespesor1 USING "<<.<<<<<" LET csmov2[i2].balance = xmedida1 USING "<<.<<<<<" LET csmov2[i2].chield_id = i1 USING "<<<",".",i3 USING "<<<" # DISPLAY csmov2[i2].num_doc," ",csmov2[i2].fecha_2," ",csmov2[i2].entrada," p ",csmov2[i2].parent_id," c ",csmov2[i2].chield_id LET i2 = i2 + 1 LET i3 = i3 +1 END FOREACH LET idx = i2 -1 END FUNCTION