{ FUNCTION: medidas.4gl DESARROLLADO POR: ING. JUAN SOTO FECHA : 16, NOVIEMBRE 2023 } FUNCTION medidas(pcod_n,pcod_grupo,pcod_tipo,pcod_sec,descripcion,medida,titulo_bodega,tmpnumero,pcod_mov,status_m) DEFINE pcod_n,pcod_grupo,pcod_tipo,pcod_sec,tmpnumero,pcod_mov,idx,sidx INT, descripcion,medida,titulo_bodega,status_m STRING, total_medida DEC(12,5) DEFINE arrmedida DYNAMIC ARRAY OF RECORD codigo_bloque CHAR(25), ancho1 DEC(12,5), largo1 DEC(12,5), espesor1 DEC(12,5), medida1 DEC(12,5), ancho2 DEC(12,5), largo2 DEC(12,5), espesor2 DEC(12,5), medida2 DEC(12,5), cantidad DEC(12,5), cod_cat INT, cod_n,cod_grupo,cod_tipo,cod_sec int END RECORD OPEN WINDOW prfmwd012 AT 5,3 WITH FORM "infmwd012" ATTRIBUTE (BORDER) DISPLAY BY NAME descripcion,medida,pcod_n,pcod_grupo,pcod_tipo,pcod_sec,titulo_bodega SELECT UNIQUE a.documento FROM intb00018 a WHERE a.documento = tmpnumero AND a.cod_mov = pcod_mov AND a.cod_n = Pcod_n and a.cod_grupo = Pcod_grupo and a.cod_tipo = Pcod_tipo and a.cod_sec = Pcod_sec IF STATUS != NOTFOUND THEN DECLARE busca_m CURSOR FOR SELECT a.codigo_bloque,a.ancho1,a.largo1,a.espesor1,a.medida1, a.ancho2,a.largo2,a.espesor2,a.medida2,a.cantidad FROM intb00018 a WHERE a.documento = tmpnumero AND a.cod_mov = pcod_mov AND a.cod_n = Pcod_n and a.cod_grupo = Pcod_grupo and a.cod_tipo = Pcod_tipo and a.cod_sec = Pcod_sec LET idx = 1 FOREACH busca_m INTO arrmedida[idx].* IF arrmedida[idx].cantidad < 0 THEN LET arrmedida[idx].cantidad = arrmedida[idx].cantidad * -1 END IF LET arrmedida[idx].cod_n = pcod_n LET arrmedida[idx].cod_grupo = pcod_grupo LET arrmedida[idx].cod_tipo = pcod_tipo LET arrmedida[idx].cod_sec = pcod_sec LET idx = idx +1 END FOREACH ELSE SELECT MAX(numero) INTO tmpnumero FROM cttb00016 IF tmpnumero IS NULL THEN LET tmpnumero = 9999999 END IF LET tmpnumero = tmpnumero + 1 INSERT INTO cttb00016 values (SUSER_NAME(),tmpnumero,GETDATE()) CALL arrmedida.clear() END IF INPUT ARRAY arrmedida WITHOUT DEFAULTS FROM sdespiece.* BEFORE ROW LET idx = arr_curr() LET sidx = scr_line() AFTER FIELD codigo_bloque IF status_m = 2 THEN IF arrmedida[idx].codigo_bloque IS NOT NULL THEN SELECT DISTINCT a.codigo_bloque FROM intb00018 a WHERE a.codigo_bloque = arrmedida[idx].codigo_bloque IF STATUS = NOTFOUND THEN CALL msg(3) NEXT FIELD codigo_bloque END IF END IF END IF AFTER FIELD cantidad IF arrmedida[idx].espesor1 = 0 THEN LET arrmedida[idx].medida1 = arrmedida[idx].ancho1 * arrmedida[idx].largo1 END IF IF arrmedida[idx].espesor1 <> 0 THEN LET arrmedida[idx].medida1 = arrmedida[idx].ancho1 * arrmedida[idx].largo1 * arrmedida[idx].espesor1 END IF IF arrmedida[idx].espesor2 = 0 THEN LET arrmedida[idx].medida2 = arrmedida[idx].ancho2 * arrmedida[idx].largo2 END IF IF arrmedida[idx].espesor2 <> 0 THEN LET arrmedida[idx].medida2 = arrmedida[idx].ancho2 * arrmedida[idx].largo2 * arrmedida[idx].espesor2 END IF DISPLAY arrmedida[idx].medida1 TO sdespiece[sidx].medida1 DISPLAY arrmedida[idx].medida2 TO sdespiece[sidx].medida2 AFTER INPUT IF int_flag THEN CALL msg(2) LET int_flag = false EXIT INPUT END IF LET total_medida = 0 IF arrmedida.getLength() > 0 THEN FOR sidx = 1 TO arrmedida.getLength() IF arrmedida[sidx].medida1 IS NOT NULL THEN LET arrmedida[sidx].cod_n = pcod_n LET arrmedida[sidx].cod_grupo = pcod_grupo LET arrmedida[sidx].cod_tipo = pcod_tipo LET arrmedida[sidx].cod_sec = pcod_sec LET total_medida = arrmedida[sidx].medida1 + total_medida END IF END FOR END IF END INPUT CLOSE WINDOW prfmwd012 RETURN arrmedida,total_medida END FUNCTION