Files
MBS/PROYECTO/indir/inprmt066.4gl
T
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

189 lines
5.3 KiB
Plaintext

{
--------------------------------------------------------------------------
PROGRAMA : INPRMT066
OBJETIVO : Programa Para Anular en Forma Logica Movimientos de
Inventario de Materia Prima.
PROGRAMADOR : Tadeo A. Ferreras F.
--------------------------------------------------------------------------
}
GLOBALS
"inprgb000.4gl"
DEFINE anular RECORD
cod_mov SMALLINT,
num_doc INTEGER,
bodega SMALLINT,
fecha CHAR(10),
cod_sp SMALLINT,
cod_sp_sec SMALLINT
END RECORD
DEFINE descrip_mov CHAR(30)
DEFINE opc1 CHAR(1)
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CALL ARG_VAL(3) RETURNING impresor
CONNECT to "smarmotech" USER usuarios USING clave
SELECT * INTO p_companias.* FROM companias
CALL inprmt066()
END MAIN
FUNCTION inprmt066()
DEFINE fecha CHAR(8)
DEFINE hora CHAR(5),
pnumdoc INT,
pcodmov SMALLINT,
cherror STRING
CLEAR SCREEN
OPTIONS
ERROR LINE 24,
FORM LINE 4,
COMMENT LINE 22,
PROMPT LINE 23
OPEN WINDOW anular AT 8,4 WITH FORM "infmwd005" ATTRIBUTE (BORDER,FORM LINE
FIRST + 1,PROMPT LINE LAST)
INPUT BY NAME anular.bodega, anular.cod_mov,anular.num_doc
BEFORE INPUT
CALL bodegas('1')
AFTER FIELD cod_mov
IF anular.cod_mov is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_mov
END IF
SELECT a.descrip_mov INTO descrip_mov FROM intb00005 a
WHERE a.cod_mov = anular.cod_mov AND a.status_t IS NULL
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_mov
END IF
DISPLAY BY NAME descrip_mov
AFTER FIELD num_doc
IF anular.num_doc is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD num_doc
END IF
SELECT UNIQUE a.num_doc FROM intb00006 a
WHERE a.cod_mov = anular.cod_mov AND a.num_doc = anular.num_doc AND
a.bodega = anular.bodega AND
a.status_t IS NULL
IF status = notfound THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_mov
END IF
SELECT CONVERT(CHAR(10),MAX(a.fecha),103),MAX(a.cod_sp),MAX(a.cod_sp_sec)
INTO anular.fecha,anular.cod_sp,anular.cod_sp_sec
FROM intb00006 a
WHERE a.cod_mov = anular.cod_mov AND a.num_doc = anular.num_doc AND
a.bodega = anular.bodega and
a.status_t IS NULL
IF STATUS = NOTFOUND THEN
CALL msg(3)
NEXT FIELD num_doc
END IF
DISPLAY BY NAME anular.fecha,anular.cod_sp,anular.cod_sp_sec
LET p_fechas = anular.fecha
LET pnumdoc = anular.num_doc
LET pcodmov = anular.cod_mov
CALL prd(p_fechas,usuarios) RETURNING bandera
IF bandera = 1 THEN
EXIT INPUT
END IF
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
EXIT INPUT
END IF
END INPUT
IF int_flag THEN
LET int_flag = FALSE
ELSE
PROMPT "Quiere Proceder Anulacion de Este Dcto. (S/N)? " FOR CHAR opc1
LET opc1 = upshift(opc1)
IF opc1 = "S" THEN
SELECT a.status_mov INTO status_m FROM intb00005 a
WHERE a.cod_mov = pcodmov
DECLARE busca CURSOR FOR
SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.cantidad_2 FROM intb00006 a
WHERE a.num_doc=pnumdoc and a.cod_mov=pcodmov and CONVERT(CHAR(10),a.fecha,103) > "01/08/2009" AND
a.bodega = anular.bodega
LET decide = "N"
LET idx = 1
FOREACH busca INTO movi2[idx].cod_n,movi2[idx].cod_grupo,
movi2[idx].cod_tipo,movi2[idx].cod_sec,
movi2[idx].cantidad_2
IF status_m = "1" THEN
SELECT SUM(a.cantidad_2) INTO chequea.existe FROM intb00006 a
WHERE a.cod_n = movi2[idx].cod_n and a.cod_grupo = movi2[idx].cod_grupo and
a.cod_tipo=movi2[idx].cod_tipo and a.cod_sec = movi2[idx].cod_sec AND
a.bodega = anular.bodega and
a.status_t is null
LET chequea.existe = chequea.existe - movi2[idx].cantidad_2
IF chequea.existe < 0 THEN
LET cherror = "NO PUEDE ANULAR DOCUMENTO, LA EXISTENCIA SERA NEGATIVA EN EL CODIGO: ",
movi2[idx].cod_n USING "<<<<","-",movi2[idx].cod_grupo USING "<<<<","-",
movi2[idx].cod_tipo USING "<<<<","-",movi2[idx].cod_sec USING "<<<<"," Ext. ",chequea.existe USING "--<,--<.##"
CALL fgl_winmessage("ERROR",cherror,"INFO")
RETURN
END IF
END IF
LET idx = idx + 1
END FOREACH
UPDATE intb00006 set status_t = "E",
us_mod = usuarios,
fech_mod = GETDATE()
WHERE intb00006.cod_mov = pcodmov AND
intb00006.num_doc = pnumdoc AND
intb00006.bodega = anular.bodega
UPDATE intb00018 set status_t = "E"
WHERE intb00018.cod_mov = pcodmov AND
intb00018.documento = pnumdoc AND
intb00018.bodega = anular.bodega
#AND
#CONVERT(CHAR(10),intb00006.fecha,103) > "01/08/2009"
UPDATE cotb00038 set status_t = "E",us_mod = SUSER_NAME(),fech_mod = GETDATE()
WHERE @cod_mov = anular.cod_mov AND @num_doc = anular.num_doc AND
CONVERT(CHAR(10),fecha,103) > "01/08/2009"
CALL fgl_winmessage("INFO","DOCUMENTO ANULADO","INFO")
END IF
END IF
CLOSE WINDOW anular
END FUNCTION