972 lines
33 KiB
Plaintext
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
|
|
|