Files
jpeguero efdf8953dd Reorganiza MATERIA PRIMA a PROYECTO y avanza inprmt002/005/013/046
- Mueve todo el contenido de PROYECTOS/indir y varias funciones
  compartidas de PROYECTOS/otrodir hacia PROYECTO, siguiendo
  instruccion de Johnny (PROYECTOS se va a eliminar).
- inprmt002: agrega campo Desglose faltante, corrige typo "eLiminar".
- inprmt005: agrega formulario y 3 campos faltantes (Consumo,
  Requiere Autorizacion, Requisiciones), corrige typo "eLiminar".
- inprmt013: agrega formulario, titulo, corrige typo "eLiminar".
- inprmt046: agrega formulario y varias funciones/dependencias
  faltantes (cincodmov, clasf_bloque, medidas, defecto,
  buscaEmp, consultaTransportista, busca_departamento);
  corrige nombres de campo desalineados con el codigo
  (depto_a, bodega) y los convierte a ComboBox donde el
  codigo lo requiere.
- Corrige dependencia faltante de FORMULARIOS_IN a la libreria
  Database (bloqueaba todo el modulo de MATERIA PRIMA).
2026-08-26 13:31:09 -04:00

972 lines
33 KiB
Plaintext

{
------------------------------------------------------------------
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"
"<Esc> Realiza Busqueda <Ctrl-C> 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"
"<Esc> Actualiza Registro <Ctrl-C> 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 <Ctrl-C>
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