{ ------------------------------------------------------------------ PROGRAMA : INPRMT056 OBJETIVO : Modificar, Eliminar registros de los Movimientos de Materia Prima PROGRAMADOR : Ing. Juan Soto(Johnny) FECHA REALIZACION : Septiembre 4, 1992. MODIFICADO POR : Ing. Juan Soto(Johnny) FECHA : Diciembre 15, 1992 DESCRIPCION : Enlace con el sistema de compras ------------------------------------------------------------------ } GLOBALS "inprgb000.4gl" FUNCTION inprmt056() #WHENEVER ERROR CONTINUE CLEAR SCREEN OPTIONS FORM LINE 4, ERROR LINE 23, COMMENT LINE 21 OPEN FORM infmmt056 FROM "infmmt056" DISPLAY FORM infmmt056 DISPLAY "inprmt056" AT 3,3 ATTRIBUTE (BOLD) DISPLAY "Actualizacion Movimientos De Materia Prima" AT 3,19 ATTRIBUTE (BOLD) MENU "OPCIONES" COMMAND "Consultar-modificar" " Realiza Busqueda Cancela Operacion" LET INT_FLAG = FALSE CALL inpcmf056() COMMAND "Salir" "Retorna Menu Anterior" EXIT MENU END MENU END FUNCTION FUNCTION inpcmf056() DEFINE usu_crea CHAR(9) DEFINE fecha_crea DATETIME YEAR TO MINUTE DEFINE porciento,total_cantidad_ant,total_cantidad,ordenada,recibida, cantidad1,cant_e,devuelto,r_cantidad1,devuelto1,r_cantidad, cantidad_1_ant DECIMAL(12,2) DEFINE codigo_ant ARRAY[100] OF CHAR(7) DEFINE devuelta,cerrada,actualiza CHAR(1) #WHENEVER ERROR CONTINUE LET int_flag = false LET existe = null ## Aqui se prepara para la captura del criterio de seleccion CLEAR FORM CONSTRUCT criterio ON a.cod_mov,a.num_doc FROM cod_mov,num_doc IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF LET SELEC = " SELECT UNIQUE a.cod_mov,a.num_doc,a.fecha,a.conduce_no, ", " a.fact_no,a.tipo,a.orden_compra,a.cod_sp,a.cod_sp_sec, ", " a.depto_de,a.depto_a,a.bodega ", "FROM intb00006 a,intb00005 b ", "WHERE ", criterio clipped, "and a.cod_mov = b.cod_mov ", " and a.status_t is null and a.cod_mov != 99 ", " ORDER BY 1,2 " PREPARE busca FROM selec CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF DECLARE datos SCROLL CURSOR FOR busca OPEN datos FETCH FIRST datos INTO movimientos.* IF status >= 0 THEN IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF ELSE CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF END IF SELECT status_mov,descrip_mov INTO transacc.status_mov,datos_gen.descrip_mov FROM intb00005 WHERE cod_mov = movimientos.cod_mov CALL buscame() DISPLAY BY NAME datos_gen.descrip_mov DISPLAY BY NAME datos_gen.nom_sp DISPLAY BY NAME movimientos.* MENU "OPCIONES " COMMAND "Siguiente" "Presenta en pantalla el proximo registro encontrado" FETCH NEXT datos INTO movimientos.* IF STATUS = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF SELECT descrip_mov INTO datos_gen.descrip_mov FROM intb00005 WHERE cod_mov = movimientos.cod_mov CALL buscame() DISPLAY BY NAME datos_gen.nom_sp,datos_gen.descrip_mov DISPLAY BY NAME movimientos.* COMMAND "Anterior" "Presenta en pantalla el registro anterior encontrado" FETCH PREVIOUS datos INTO movimientos.* IF STATUS = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF SELECT descrip_mov INTO datos_gen.descrip_mov FROM intb00005 WHERE cod_mov = movimientos.cod_mov CALL buscame() DISPLAY BY NAME datos_gen.nom_sp,datos_gen.descrip_mov DISPLAY BY NAME movimientos.* COMMAND "Primero" "Presenta en pantalla el primer registro encontrado" FETCH FIRST datos INTO movimientos.* CALL buscame() SELECT descrip_mov INTO datos_gen.descrip_mov FROM intb00005 WHERE cod_mov = movimientos.cod_mov DISPLAY BY NAME datos_gen.nom_sp,datos_gen.descrip_mov DISPLAY BY NAME movimientos.* LET numero_msg = 5 CALL msg(numero_msg) COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado" FETCH LAST datos INTO movimientos.* CALL buscame() SELECT descrip_mov INTO datos_gen.descrip_mov FROM intb00005 WHERE cod_mov = movimientos.cod_mov DISPLAY BY NAME datos_gen.nom_sp,datos_gen.descrip_mov DISPLAY BY NAME movimientos.* LET numero_msg = 4 CALL msg(numero_msg) COMMAND "Escoger" " Actualiza Registro Cancela Operacion" LET cerrada = "N" LET total_cantidad = 0 LET total_cantidad_ant = 0 { LET p_fechas = movimientos.fecha CALL prd() IF bandera = 1 THEN LET bandera = 0 RETURN END IF } SELECT a.us_crea,MIN(a.fech_crea) INTO usu_crea,fecha_crea FROM intb00006 a WHERE a.cod_mov = movimientos.cod_mov AND a.num_doc = movimientos.num_doc GROUP BY 1 INPUT BY NAME movimientos.* WITHOUT DEFAULTS BEFORE FIELD cod_mov LET cod_mov_ant = movimientos.cod_mov AFTER FIELD cod_mov IF movimientos.cod_mov IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_mov END IF IF movimientos.cod_mov = 25 or movimientos.cod_mov = 52 THEN LET numero_msg = -1301 CALL msg(numero_msg) NEXT FIELD cod_mov END IF IF movimientos.cod_mov is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_mov END IF SELECT a.descrip_mov INTO otros_mov.descrip_mov FROM intb00005 a where a.cod_mov = movimientos.cod_mov IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_mov END IF DISPLAY BY NAME otros_mov.descrip_mov NEXT FIELD fecha AFTER FIELD tipo IF movimientos.cod_mov != 36 THEN NEXT FIELD bodega END IF AFTER FIELD bodega IF movimientos.bodega is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD bodega ELSE SELECT * FROM intb00009 WHERE cod_bodega = movimientos.bodega IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD bodega END IF END IF AFTER FIELD fecha LET p_fechas = movimientos.fecha CALL prd() IF bandera = 1 THEN LET bandera = 0 #NEXT FIELD fecha END IF IF movimientos.cod_mov = 36 THEN NEXT FIELD depto_a END IF IF movimientos.cod_mov = 48 THEN NEXT FIELD depto_de END IF IF movimientos.cod_mov = 38 THEN NEXT FIELD bodega END IF AFTER FIELD fact_no IF movimientos.conduce_no is null and movimientos.fact_no is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD conduce_no END IF IF movimientos.conduce_no is not null and movimientos.fact_no is not null THEN LET numero_msg = 29 CALL msg(numero_msg) NEXT FIELD conduce_no END IF IF movimientos.cod_mov = 34 OR movimientos.cod_mov = 35 THEN NEXT FIELD bodega END IF BEFORE FIELD depto_de IF movimientos.cod_mov != 48 THEN NEXT FIELD depto_a END IF AFTER FIELD depto_de IF movimientos.depto_de IS null then LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD depto_de ELSE SELECT nom_dpto INTO datos.nom_dpto FROM adtb00001 WHERE departamento = movimientos.depto_de and status_t is null IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD depto_de END IF END IF DISPLAY BY NAME datos.nom_dpto AFTER FIELD depto_a SELECT nom_dpto INTO datos.nom_dpto1 FROM adtb00001 WHERE departamento = movimientos.depto_a and status_t is null IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD depto_a END IF DISPLAY BY NAME datos.nom_dpto1 END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF DECLARE buscate CURSOR FOR SELECT b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_sec,c.cantidad_1,c.cantidad_2, b.unidad_med,b.descrip_esp FROM intb00006 c,intb00001 b WHERE c.num_doc = movimientos.num_doc and c.cod_mov = cod_mov_ant and c.cod_n = b.cod_n and c.cod_grupo = b.cod_grupo and c.cod_tipo = b.cod_tipo and c.cod_sec = b.cod_sec AND c.status_t is null LET idx = 1 FOREACH buscate INTO movi[idx].* IF movi[idx].cantidad_2 < 0 THEN LET movi[idx].cantidad_2 = movi[idx].cantidad_2 * -1 END IF LET idx = idx + 1 END FOREACH CALL set_count(idx -1) INPUT ARRAY movi WITHOUT DEFAULTS FROM s_movi1.* ON KEY(CONTROL-B) LET p_act = arr_curr() LET scr_l = scr_line() SELECT existencia INTO chequea.existe FROM intb00002 WHERE cod_n = movi[p_act].cod_n and cod_grupo = movi[p_act].cod_grupo and cod_tipo = movi[p_act].cod_tipo and cod_sec = movi[p_act].cod_sec IF transacc.status_mov = "1" THEN IF movi[p_act].cantidad_2 > chequea.existe THEN LET numero_msg = 6 CALL msg(numero_msg) NEXT FIELD cod_n END IF END IF UPDATE intb00006 set us_mod = user, fech_mod = current, status_t = "E" WHERE cod_n = movi[p_act].cod_n and cod_grupo = movi[p_act].cod_grupo and cod_tipo = movi[p_act].cod_tipo and cod_sec = movi[p_act].cod_sec and num_doc = movimientos.num_doc and cod_mov = movimientos.cod_mov SELECT sum(cantidad_2) INTO chequea.existe FROM intb00006 WHERE cod_n = movi[p_act].cod_n and cod_grupo = movi[p_act].cod_grupo and cod_tipo = movi[p_act].cod_tipo and cod_sec = movi[p_act].cod_sec and status_t is null UPDATE intb00002 set existencia = chequea.existe WHERE cod_n = movi[p_act].cod_n and cod_grupo = movi[p_act].cod_grupo and cod_tipo = movi[p_act].cod_tipo and cod_sec = movi[p_act].cod_sec CALL limpia() LET numero_msg = 39 CALL msg(numero_msg) NEXT FIELD cod_n BEFORE FIELD cantidad_2 IF movimientos.cod_mov != 38 THEN IF numero_msg != 30 THEN LET movi_ant[p_act].cant_ant = movi[p_act].cantidad_2 END IF END IF BEFORE ROW LET p_Act = arr_curr() LET codigo_ant[p_act] = movi[p_act].cod_n using "&", movi[p_act].cod_grupo using "&", movi[p_act].cod_tipo using "&&", movi[p_act].cod_sec using "&&&" LET movi_ant[p_act].cant_ant = movi[p_Act].cantidad_2 # Chequeo si es un reporte de entrada para mandar la secuencia del porgrama a # La Cantidad Recibida IF movimientos.cod_mov = 34 or movimientos.cod_mov = 35 THEN NEXT FIELD cantidad_2 END IF # Chequeo si es una devolucion para mandar la secuencia del porgrama a # La Cantidad devuelta IF movimientos.cod_mov = 38 THEN NEXT FIELD cantidad_2 END IF AFTER FIELD cod_n LET scr_l = scr_line() LET p_Act = arr_curr() LET ya = "N" CALL repetir() IF existe = "S" THEN NEXT FIELD cod_grupo LET existe = "N" END IF AFTER FIELD cod_grupo IF movi[p_act].cod_grupo is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_n END IF LET ya = "N" CALL repetir() IF existe = "S" THEN NEXT FIELD cod_tipo LET existe = "N" END IF AFTER FIELD cod_tipo IF movi[p_act].cod_tipo is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_n END IF LET ya = "N" CALL repetir() IF existe = "S" THEN NEXT FIELD cod_sec LET existe = "N" END IF AFTER FIELD cod_sec IF movi[p_act].cod_sec is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_n END IF IF movi[p_act].cod_n is null AND movi[p_act].cod_grupo is null AND movi[p_act].cod_tipo is null AND movi[p_act].cod_sec is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_n ELSE LET ya = "N" CALL repetir() IF existe = "S" THEN LET existe = "N" NEXT FIELD cod_n END IF SELECT a.descrip_esp ,a.unidad_med INTO articulos.descrip_esp ,articulos.unidad_med FROM intb00001 a WHERE a.cod_n = movi[p_act].cod_n and a.cod_grupo = movi[p_act].cod_grupo and a.cod_tipo = movi[p_act].cod_tipo and a.cod_sec = movi[p_act].cod_sec and a.status_t is null IF status >= 0 THEN IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_n ELSE SELECT status_t INTO articulos.status_t FROM intb00006 WHERE cod_n = movi[p_act].cod_n AND cod_grupo = movi[p_act].cod_grupo AND cod_tipo = movi[p_act].cod_tipo AND cod_sec = movi[p_act].cod_sec and num_doc = movimientos.num_doc and cod_mov = movimientos.cod_mov and status_t = "E" IF status != notfound THEN LET numero_msg = 36 CALL msg(numero_msg) NEXT FIELD cod_n END IF END IF ELSE CALL integridad() IF bandera = 1 THEN CLEAR FORM RETURN END IF END IF LET movi[p_act].descrip_esp = articulos.descrip_esp LET movi[p_act].unidad_med = articulos.unidad_med DISPLAY movi[p_act].descrip_esp TO s_movi1[scr_l].descrip_esp ATTRIBUTE (BOLD) DISPLAY movi[p_act].unidad_med TO s_movi1[scr_l].unidad_med ATTRIBUTE (BOLD) END IF BEFORE FIELD cantidad_1 IF movimientos.cod_mov = 38 THEN NEXT FIELD cantidad_2 END IF AFTER FIELD cantidad_2 IF movi[p_act].cantidad_2 < 0 THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cantidad_2 END IF # Chequea la existencia cuando el movimiento es de salida para # que por medio a la modificacion no ponga la existencia en negativa IF transacc.status_mov = "2" THEN SELECT SUM(cantidad_2) INTO chequea.existe FROM intb00006 WHERE cod_n = movi[p_act].cod_n AND cod_grupo = movi[p_act].cod_grupo AND cod_tipo = movi[p_act].cod_tipo AND cod_sec = movi[p_act].cod_sec and status_t is null IF movi_ant[p_act].cant_ant is null THEN LET movi_ant[p_act].cant_ant = 0 END IF LET cantidad1 = (chequea.existe + movi_ant[p_act].cant_ant) IF movi[p_act].cantidad_2 > cantidad1 THEN LET numero_msg = 30 CALL msg(numero_msg) LET numero_msg = 30 NEXT FIELD cantidad_2 END IF IF cantidad1 <= chequea.pto THEN LET numero_msg = 31 CALL msg(numero_msg) END IF END IF # Verifica que la cantidad recibida mas las que se han recibida de # la orden no exceda de un 10% de la cantidad total de la orden IF movi[p_act].cantidad_2 IS NOT NULL THEN IF transacc.status_mov = "1" THEN SELECT sum(cantidad_2) INTO recibida FROM intb00006 WHERE orden_compra = movimientos.orden_compra and tipo = movimientos.tipo and cod_n = movi[p_act].cod_n and cod_grupo = movi[p_act].cod_grupo and cod_tipo = movi[p_act].cod_tipo and cod_sec = movi[p_act].cod_sec and status_t is null SELECT cantidad INTO ordenada FROM cotb00015 WHERE num_oc = movimientos.orden_compra and tipo = movimientos.tipo and cod_n = movi[p_act].cod_n and cod_grupo = movi[p_act].cod_grupo and cod_tipo = movi[p_act].cod_tipo and cod_sec = movi[p_act].cod_sec and status_t is null IF recibida is null THEN LET recibida = 0 END IF IF ordenada is null THEN LET ordenada = 0 END IF LET porciento = ordenada * 0.10 LET recibida = recibida - movi_ant[p_act].cant_ant + movi[p_act].cantidad_2 LET r_cantidad = ordenada + porciento IF recibida > r_cantidad THEN LET numero_msg = 28 CALL msg(numero_msg) NEXT FIELD cantidad_2 END IF END IF END IF IF movi[p_act].cantidad_2 < 0 THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cantidad_2 END IF IF movimientos.cod_mov = 38 THEN IF movi[p_act].cantidad_2 is not null THEN SELECT SUM(cantidad_2) INTO chequea.existe FROM intb00006 WHERE cod_n = movi[p_act].cod_n AND cod_grupo = movi[p_act].cod_grupo AND cod_tipo = movi[p_act].cod_tipo AND cod_sec = movi[p_act].cod_sec and status_t is null CALL integridad() if bandera = 1 THEN CLEAR SCREEN RETURN end if IF movi[p_act].cantidad_2 > chequea.existe THEN LET numero_msg = 30 CALL msg(numero_msg) NEXT FIELD cod_n END IF LET cantidad1 = chequea.existe - movi[p_act].cantidad_2 IF cantidad1 <= chequea.pto THEN LET numero_msg = 31 CALL msg(numero_msg) LET cant = 0 END IF # Verifica que la cantidad recibida mas las que se han recibida de # la orden no exceda de un 10% de la cantidad total de la orden SELECT sum(cantidad_2) INTO devuelto FROM intb00006 WHERE orden_compra = movimientos.orden_compra and tipo = movimientos.tipo and cod_n = movi[p_act].cod_n and cod_grupo = movi[p_act].cod_grupo and cod_tipo = movi[p_act].cod_tipo and cod_sec = movi[p_act].cod_sec and status_t is null IF devuelto is null THEN LET numero_msg = 73 CALL msg(numero_msg) NEXT FIELD cantidad_2 END IF LET devuelto = devuelto + movi_ant[p_act].cant_ant IF movi[p_act].cantidad_2 > devuelto THEN LET numero_msg = 33 CALL msg(numero_msg) NEXT FIELD cantidad_2 END IF END IF IF transacc.status_mov != "1" THEN IF movi[p_act].cantidad_2 > cantidad1 THEN LET numero_msg = 30 CALL msg(numero_msg) LET numero_msg = 30 NEXT FIELD cantidad_2 END IF END IF IF cantidad1 <= chequea.pto THEN LET numero_msg = 31 CALL msg(numero_msg) END IF END IF BEFORE FIELD cantidad_1 IF movimientos.cod_mov != 34 AND movimientos.cod_mov != 35 AND movimientos.cod_mov != 38 AND movimientos.cod_mov != 36 AND movimientos.cod_mov != 48 THEN NEXT FIELD cantidad_2 END IF AFTER INPUT #### Verifica si el usuario presiono la tecla IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF {IF movi[p_act].cod_n is null THEN CALL limpia() END IF IF movi[p_act].cod_grupo is null THEN CALL limpia() END IF IF movi[p_act].cod_tipo is null THEN CALL limpia() END IF IF movi[p_act].cod_sec is null THEN CALL limpia() END IF} IF movi3[p_act].codigo = codigo_ant[p_act] THEN FOR idx = 1 to arr_count() # Suma La cantidad total del arreglo para este documento para saber si # la orden se cierra con esta cantidad o no IF movi[idx].cantidad_2 is not null THEN LET total_cantidad = total_cantidad + movi[idx].cantidad_2 LET total_cantidad_ant = total_cantidad_ant + movi_ant[idx].cant_ant END IF LET movi_ant[idx].cod_n = movi[idx].cod_n LET movi_ant[idx].cod_grupo = movi[idx].cod_grupo LET movi_ant[idx].cod_tipo = movi[idx].cod_tipo LET movi_ant[idx].cod_sec = movi[idx].cod_sec END FOR END IF IF movi[p_act].cantidad_2 is not null THEN SELECT SUM(cantidad_2) INTO chequea.existe FROM intb00006 WHERE cod_n = movi[p_act].cod_n AND cod_grupo = movi[p_act].cod_grupo AND cod_tipo = movi[p_act].cod_tipo AND cod_sec = movi[p_act].cod_sec and status_t is null CALL integridad() IF bandera = 1 THEN CLEAR SCREEN RETURN END IF IF movi[p_act].cantidad_2 > chequea.existe THEN LET numero_msg = 30 CALL msg(numero_msg) NEXT FIELD cod_n END IF END IF EXIT INPUT END INPUT # Actualizacion de la orden de compra cuando se devuelve mateial IF movimientos.cod_mov = 38 THEN UPDATE cotb00014 set cierre = "N" WHERE num_oc = movimientos.orden_compra and tipo = movimientos.tipo END IF IF movimientos.cod_mov = 34 or movimientos.cod_mov = 35 THEN SELECT sum(cantidad_2) INTO recibida FROM intb00006 WHERE orden_compra = movimientos.orden_compra and tipo = movimientos.tipo SELECT sum(cantidad) INTO ordenada FROM cotb00015 WHERE num_oc = movimientos.orden_compra and tipo = movimientos.tipo IF recibida is null THEN LET recibida = 0 END IF IF ordenada is null THEN LET ordenada = 0 END IF LET porciento = ordenada * 0.10 LET recibida = recibida - total_cantidad_ant + total_cantidad LET r_cantidad = ordenada - porciento LET r_cantidad1 = ordenada + porciento IF recibida >= r_cantidad and recibida <= r_cantidad1 THEN LET cerrada = "S" END IF IF cerrada = "S" THEN UPDATE cotb00014 set cierre = cerrada WHERE num_oc = movimientos.orden_compra and tipo = movimientos.tipo END IF END IF FOR idx = 1 TO arr_count() LET movi3[idx].codigo = movi[idx].cod_n using "&", movi[idx].cod_grupo using "&", movi[idx].cod_tipo using "&&", movi[idx].cod_sec using "&&&" CLIPPED LET actualiza = "S" IF movi[idx].cod_n is not null or movi[idx].cod_grupo is not null or movi[idx].cod_tipo is not null or movi[idx].cod_sec is not null THEN IF transacc.status_mov = "2" THEN LET movi[idx].cantidad_2 = movi[idx].cantidad_2 * -1 END IF SELECT * FROM intb00006 WHERE cod_n = movi[idx].cod_n and cod_grupo = movi[idx].cod_grupo and cod_tipo = movi[idx].cod_tipo and cod_sec = movi[idx].cod_sec and num_doc = movimientos.num_doc and cod_mov = cod_mov_ant and status_t is null IF STATUS = NOTFOUND THEN INSERT INTO intb00006 (cod_mov,num_doc,fecha,conduce_no,fact_no, tipo,orden_compra,cod_sp,cod_sp_sec,depto_de,depto_a, bodega,cod_n,cod_grupo,cod_tipo,cod_sec, cantidad_1,cantidad_2,us_mod,fech_mod) VALUES (movimientos.*,movi[idx].cod_n,movi[idx].cod_grupo, movi[idx].cod_tipo,movi[idx].cod_sec,movi[idx].cantidad_1, movi[idx].cantidad_2,user,current) CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF LET actualiza = "N" END IF UPDATE intb00006 SET cod_mov = movimientos.cod_mov, fecha = movimientos.fecha, conduce_no = movimientos.conduce_no, fact_no = movimientos.fact_no, tipo = movimientos.tipo, orden_compra = movimientos.orden_compra, depto_de = movimientos.depto_de, depto_a = movimientos.depto_a, cantidad_1 = movi[idx].cantidad_1, cantidad_2 = movi[idx].cantidad_2, us_mod = USER, fech_mod = CURRENT WHERE cod_n = movi[idx].cod_n AND cod_grupo = movi[idx].cod_grupo AND cod_tipo = movi[idx].cod_tipo AND cod_sec = movi[idx].cod_sec and num_doc = movimientos.num_doc and cod_mov = cod_mov_ant and bodega = movimientos.bodega IF movi[idx].cantidad_2 < 0 THEN LET movi[idx].cantidad_2 = movi[idx].cantidad_2 * -1 END IF IF movi3[idx].codigo = codigo_ant[idx] THEN IF transacc.status_mov = "1" THEN UPDATE intb00002 SET existencia = (existencia - movi_ant[idx].cant_ant) + movi[idx].cantidad_2 WHERE cod_n = movi[idx].cod_n AND cod_grupo = movi[idx].cod_grupo AND cod_tipo = movi[idx].cod_tipo AND cod_sec = movi[idx].cod_sec and bodega = movimientos.bodega ELSE UPDATE intb00002 SET existencia = (existencia + movi_ant[idx].cant_ant) - movi[idx].cantidad_2 WHERE cod_n = movi[idx].cod_n AND cod_grupo = movi[idx].cod_grupo AND cod_tipo = movi[idx].cod_tipo AND cod_sec = movi[idx].cod_sec and bodega = movimientos.bodega END IF END IF IF movi3[idx].codigo != codigo_ant[idx] THEN IF transacc.status_mov = "1" THEN UPDATE intb00002 SET existencia = existencia - movi_ant[idx].cant_ant WHERE cod_n = movi_ant[idx].cod_n AND cod_grupo = movi_ant[idx].cod_grupo AND cod_tipo = movi_ant[idx].cod_tipo AND cod_sec = movi_ant[idx].cod_sec and bodega = movimientos.bodega UPDATE intb00002 SET existencia = existencia + movi[idx].cantidad_2 WHERE cod_n = movi[idx].cod_n AND cod_grupo = movi[idx].cod_grupo AND cod_tipo = movi[idx].cod_tipo AND cod_sec = movi[idx].cod_sec and bodega = movimientos.bodega ELSE UPDATE intb00002 SET existencia = existencia + movi_ant[idx].cant_ant WHERE cod_n = movi_ant[idx].cod_n AND cod_grupo = movi_ant[idx].cod_grupo AND cod_tipo = movi_ant[idx].cod_tipo AND cod_sec = movi_ant[idx].cod_sec and bodega = movimientos.bodega UPDATE intb00002 SET existencia = existencia - movi[idx].cantidad_2 WHERE cod_n = movi[idx].cod_n AND cod_grupo = movi[idx].cod_grupo AND cod_tipo = movi[idx].cod_tipo AND cod_sec = movi[idx].cod_sec and bodega = movimientos.bodega END IF END IF END IF END FOR DISPLAY " " UPDATE intb00006 SET (us_crea,fech_crea) = (usu_crea,fecha_crea) WHERE @cod_mov = movimientos.cod_mov AND @num_doc = movimientos.num_doc LET numero_msg = 13 CALL msg(numero_msg) COMMAND "Retornar" "Retorna al menu anterior" EXIT MENU END MENU END FUNCTION FUNCTION buscame() IF movimientos.cod_sp is not null THEN SELECT nom_sp INTO datos_gen.nom_sp FROM cotb00001 WHERE cod_sp = movimientos.cod_sp and cod_sp_sec = movimientos.cod_sp_sec END IF END FUNCTION FUNCTION repetir() LET ant_art.cod_n = movi[p_act].cod_n LET ant_art.cod_grupo = movi[p_act].cod_grupo LET ant_art.cod_tipo = movi[p_act].cod_tipo LET ant_art.cod_sec = movi[p_act].cod_sec FOR idx = 1 TO arr_count() IF idx != p_act THEN IF movi[idx].cod_n = ant_art.cod_n AND movi[idx].cod_grupo = ant_art.cod_grupo AND movi[idx].cod_tipo = ant_art.cod_tipo AND movi[idx].cod_sec = ant_art.cod_sec THEN LET numero_msg = 21 CALL msg(numero_msg) LET existe = "S" LET ya = "S" ELSE IF ya = "N" THEN LET existe = "N" END IF END IF END IF END FOR END FUNCTION