GLOBALS "ipprgb000.4gl" DEFINE xnum_doc_tmp INT, tmp_cantidad,tmp_cantidad1 DECIMAL(12,5), producto CHAR(30), xcodn,xcodgrupo,xcodtipo,xcodsec INT DEFINE movi4 DYNAMIC ARRAY OF RECORD id_seccion INT, d_seccion VARCHAR(50), id_tramo INT, d_tramo VARCHAR(50), cantidad DECIMAL(12,5), cantidad_o DECIMAL(12,5) END RECORD DEFINE movi5 DYNAMIC ARRAY OF RECORD id_seccion1 INT, d_seccion1 VARCHAR(50), id_tramo1 INT, d_tramo1 VARCHAR(50), cantidad1,cantidad2 DECIMAL(12,5), de_seccion,de_tramo int END RECORD FUNCTION insertaUbicacionDH(moviD,num_doc_tmp) DEFINE moviD RECORD cod_n,cod_Grupo,cod_tipo,cod_sec INT, descripcion,observacion STRING, book varchar(50) ,tipos varchar(50) ,lado_1 decimal(12,5) ,lado_2 decimal(12,5) ,lado_3 decimal(12,5) ,id_bodega, id_seccion1 INT ,d_seccion1 VARCHAR(50) ,id_tramo1 INT ,d_tramo1 VARCHAR(50), id_producto VARCHAR(25), tipo_material VARCHAR(30) ,cantidad1,cantidad2,factor_conv DECIMAL(12,5), cod_mov INT, control_transferencia_ubicaciones VARCHAR(2), cod_mov_transferencia INT END RECORD, num_doc_tmp,se_seccion,se_tramo INT DEFINE movi10 DYNAMIC ARRAY OF RECORD cod_n,cod_Grupo,cod_tipo,cod_sec INT, descripcion,observacion STRING, book varchar(50) ,tipos varchar(50) ,lado_1 decimal(12,5) ,lado_2 decimal(12,5) ,lado_3 decimal(12,5) ,id_bodega, id_seccion1 INT ,d_seccion1 VARCHAR(50) ,id_tramo1 INT ,d_tramo1 VARCHAR(50), id_producto VARCHAR(25), tipo_material VARCHAR(30), cantidad1,cantidad2,factor_conv DECIMAL(12,5), cod_mov INT, de_seccion,de_tramo int END RECORD DEFINE p_arr,p_arr2,scr_l2 INT, total_c1,total_c2,se_cantidad1,se_cantidad2 DEC(12,5) OPEN WINDOW w1 WITH FORM "ipfmmt046" DIALOG ATTRIBUTE(UNBUFFERED) INPUT BY NAME descripcion BEFORE INPUT LET producto = moviD.cod_n USING "<<<&", "-",moviD.cod_grupo USING "<<<<&", "-",moviD.cod_tipo USING "<<<<&", "-",moviD.cod_sec USING "<<<<&" LET xcodn = moviD.cod_n LET xcodgrupo = moviD.cod_grupo LET xcodtipo = moviD.cod_tipo LET xcodsec = moviD.cod_sec LET descripcion = moviD.descripcion CLIPPED,"-(",producto CLIPPED,")" LET tmp_cantidad = 0 LET tmp_Cantidad1 = 0 CALL movi5.clear() CALL movi4.clear() LET xnum_Doc_tmp = num_doc_tmp CALL cseccionesDH(moviD.*) RETURNING movi4 END INPUT DISPLAY ARRAY movi4 TO recordd.* BEFORE ROW LET scr_l = scr_line() ON SELECTION CHANGE LET p_arr = arr_curr() LET se_seccion =movi4[p_arr].id_seccion LET se_tramo =movi4[p_arr].id_tramo LET se_cantidad1 = movi4[p_arr].cantidad LET se_cantidad2 = movi4[p_arr].cantidad_o CALL ctramosDH(moviD.id_bodega, p_arr,movi4[p_arr].id_seccion,movi4[p_arr].id_tramo,se_seccion,se_tramo,moviD.cod_mov) END DISPLAY INPUT ARRAY movi5 FROM recordh.* ATTRIBUTE(WITHOUT DEFAULTS) BEFORE ROW LET p_arr2 = arr_curr() LET scr_l2 = scr_line() LET moviD.descripcion = moviD.descripcion CLIPPED AFTER FIELD cantidad1 IF movi5[p_arr2].id_seccion1 IS NOT NULL THEN IF movi5[p_arr2].cantidad1 >0 THEN LET movi5[p_arr2].cantidad2 = movi5[p_arr2].cantidad1*movid.factor_conv IF movi5[p_arr2].cantidad2 > se_cantidad2 THEN CALL msg(1004) NEXT FIELD cantidad1 END IF END IF END IF AFTER ROW LET tmp_cantidad1 =0 FOR idx = 1 TO movi5.getLength() IF movi5[idx].cantidad1 >0 THEN LET tmp_cantidad1 = tmp_cantidad1 +movi5[idx].cantidad2 CALL insertTemporal(moviD.cod_n,moviD.cod_grupo,moviD.cod_tipo,moviD.cod_sec,moviD.cod_mov, moviD.id_bodega,movi5[idx].cantidad1,movi5[idx].cantidad2, movi5[idx].id_seccion1, movi5[idx].id_tramo1, se_seccion,se_tramo,'0',xnum_Doc_tmp) IF tmp_cantidad1 > se_cantidad2 THEN ROLLBACK WORK CALL msg(1004) NEXT FIELD cantidad1 ELSE COMMIT WORK END IF END IF END FOR END INPUT ON ACTION ubicar SELECT ISNULL(SUM(a.cantidad_1),0),ISNULL(SUM(a.cantidad_2),0) INTO total_c1,total_c2 FROM tmpubicacionTramos a WHERE (a.num_doc = xnum_doc_tmp AND a.bodega = moviD.id_bodega AND a.cod_mov = moviD.cod_mov) AND (a.cod_n = moviD.cod_n AND a.cod_grupo = moviD.cod_Grupo AND a.cod_tipo = moviD.cod_tipo AND a.cod_Sec = moviD.cod_sec) AND a.us_crea = suser_sname() EXIT DIALOG ON ACTION CANCEL LET int_flag = TRUE EXIT DIALOG CLOSE WINDOW w1 END DIALOG CLOSE WINDOW w1 FOR idx =1 TO movi5.getLength() LET movi10[idx].cod_n = moviD.cod_n LET movi10[idx].cod_grupo = moviD.cod_grupo LET movi10[idx].cod_tipo = moviD.cod_tipo LET movi10[idx].cod_sec = moviD.cod_sec LET movi10[idx].id_bodega = moviD.id_bodega LET movi10[idx].cod_mov = moviD.cod_mov LET movi10[idx].id_seccion1 = movi5[idx].id_seccion1 LET movi10[idx].id_tramo1 = movi5[idx].id_tramo1 LET movi10[idx].de_seccion = movi5[idx].de_seccion LET movi10[idx].de_tramo = movi5[idx].de_tramo LET movi10[idx].cantidad1 = movi5[idx].cantidad1 LET movi10[idx].cantidad2 = movi5[idx].cantidad2 END FOR RETURN total_c1,total_c2,movi10 END FUNCTION FUNCTION cseccionesDH(moviD) DEFINE moviD RECORD cod_n,cod_Grupo,cod_tipo,cod_sec int, descripcion,observacion STRING, book varchar(50) ,tipos varchar(50) ,lado_1 decimal(12,5) ,lado_2 decimal(12,5) ,lado_3 decimal(12,5) ,id_bodega, id_seccion1 INT ,d_seccion1 VARCHAR(50) ,id_tramo1 INT ,d_tramo1 VARCHAR(50), id_producto VARCHAR(25), tipo_material VARCHAR(30) ,cantidad1,cantidad2,factor_conv DECIMAL(12,5), cod_mov INT, control_transferencia_ubicaciones VARCHAR(2), cod_mov_transferencia INT END RECORD, idz INT LET idz = 1 DECLARE bseccionesDH CURSOR FOR select b.cod_seccion, b.descripcion,c.cod_tramo, c.descripcion, sum(a.cantidad), sum(a.cantidad2) from iptb00050 a inner join intb00010 b ON (a.bodega = b.cod_bodega and a.cod_seccion = b.cod_seccion) inner join intb00043 c ON (a.bodega = c.cod_bodega AND b.cod_seccion = c.cod_seccion and a.cod_tramo = c.cod_tramo) where a.bodega = moviD.id_bodega and a.cod_n = moviD.cod_n and a.cod_grupo = moviD.cod_grupo AND a.cod_tipo = moviD.cod_tipo and a.cod_sec = moviD.cod_sec group by b.cod_seccion, b.descripcion, c.cod_tramo, c.descripcion ORDER BY b.cod_seccion,c.cod_tramo FOREACH bseccionesDH INTO movi4[idz].* LET idz = idz +1 END FOREACH RETURN movi4 END FUNCTION --**********************************************-- --**********************************************-- FUNCTION ctramosDH(bodega, indice,seccion,tramo,de_seccion,de_tramo,xcod_mov) DEFINE bodega,indice,seccion,tramo,de_seccion,de_tramo,xcod_mov INT, idz INT LET idz = 1 DECLARE btramosDHtmp CURSOR FOR select b.cod_seccion, b.descripcion,c.cod_tramo, c.descripcion, isnull(sum(a.cantidad_1),0),isnull(SUM(a.cantidad_2),0) from intb00010 b inner join intb00043 c ON b.cod_bodega = bodega and b.cod_bodega = c.cod_bodega AND b.cod_seccion = c.cod_seccion left outer join tmpubicacionTramos a ON (a.bodega=b.cod_bodega AND a.de_seccion = seccion AND a.de_tramo = tramo) and (a.num_doc = xnum_doc_tmp AND a.bodega = bodega AND a.cod_mov = xcod_mov) AND (a.seccion = b.cod_seccion and a.tramo = c.cod_tramo) AND (a.cod_n = xcodn AND a.cod_grupo = xcodgrupo AND a.cod_tipo = xcodtipo AND a.cod_sec = xcodtipo) group by b.cod_seccion, b.descripcion, c.cod_tramo, c.descripcion ORDER BY b.cod_seccion,c.cod_tramo FOREACH btramosDHtmp INTO movi5[idz].* LET movi5[idz].de_seccion = seccion LET movi5[idz].de_tramo = tramo LET idz = idz +1 END FOREACH END FUNCTION