Instruccion de Johnny: todos los directorios de fuentes de inventario deben migrarse de la carpeta temporal PROYECTOS a la carpeta real PROYECTO, ya que PROYECTOS sera eliminada. Se elimino tambien un archivo suelto sin relacion llamado "ipdir" que existia en PROYECTO (del commit inicial) y bloqueaba el nombre de la carpeta. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
341 lines
12 KiB
Plaintext
341 lines
12 KiB
Plaintext
{
|
|
--------------------------------------------------------------------------
|
|
PROGRAMA : IPPRMT064
|
|
OBJETIVO : Programa Para Anular en Forma Logica Movimientos de
|
|
Inventario de Producto Terminado Tabla iptb00006
|
|
FECHA : Octubre 1997
|
|
PROGRAMADOR : JUAN SOTO
|
|
DIRECTOR PROYECTO : JOSE ALFREDO PAULINO ALEJO
|
|
--------------------------------------------------------------------------
|
|
}
|
|
GLOBALS
|
|
"ipprgb000.4gl"
|
|
|
|
DEFINE anular RECORD
|
|
cod_mov SMALLINT,
|
|
bodega SMALLINT,
|
|
num_doc INTEGER,
|
|
fecha DATE,
|
|
cod_sp SMALLINT,
|
|
cod_sp_sec SMALLINT
|
|
END RECORD
|
|
define prtb09 RECORD LIKE prtb00009.*
|
|
DEFINE descrip_mov CHAR(30)
|
|
DEFINE opc1 CHAR(3),conducex CHAR(10),ordenx INTEGER,
|
|
pcontrol_existencia VARCHAR(2)
|
|
|
|
MAIN
|
|
DEFER INTERRUPT
|
|
CALL STARTLOG("ipmt064.text")
|
|
CALL ARG_VAL(1) RETURNING usuarios
|
|
CALL ARG_VAL(2) RETURNING clave
|
|
CALL ARG_VAL(3) RETURNING impresor
|
|
CONNECT to "marmotech" AS "SQL_E" USER usuarios USING clave
|
|
|
|
CONNECT to "smarmotech" AS "SQL_C" USER usuarios USING clave
|
|
|
|
SELECT * INTO p_companias.* FROM companias
|
|
CALL ipprmt064()
|
|
END MAIN
|
|
|
|
FUNCTION ipprmt064()
|
|
DEFINE fecha CHAR(8)
|
|
DEFINE hora CHAR(5),
|
|
bodegad,pnum_oc,prequisi,num_doc_destino,codigo_dest,pnum_doc,
|
|
pnum_doc_trans,bodega_trans,cod_mov_trans,numero_req INT,
|
|
codigo_destino,err_mensaje,bodega_destino STRING
|
|
|
|
CLEAR SCREEN
|
|
OPTIONS
|
|
ERROR LINE 24,
|
|
FORM LINE 4,
|
|
COMMENT LINE 22,
|
|
PROMPT LINE 23
|
|
|
|
|
|
OPEN WINDOW anular AT 8,4 WITH FORM "ipfmwd003" ATTRIBUTE (BORDER,FORM LINE
|
|
FIRST + 1,PROMPT LINE LAST)
|
|
|
|
INPUT BY NAME anular.cod_mov,anular.bodega,anular.num_doc ATTRIBUTE (BOLD)
|
|
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
|
|
LET codigo_dest = NULL
|
|
SELECT a.descrip_mov,codigo_mov_transferencia
|
|
INTO descrip_mov,codigo_dest FROM iptb00005 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
|
|
IF codigo_dest IS NOT NULL THEN
|
|
SELECT '('+ CAST(a.cod_mov AS CHAR(10))+')'+a.descrip_mov INTO codigo_Destino
|
|
FROM iptb00005 a WHERE a.cod_mov = codigo_dest
|
|
END IF
|
|
|
|
DISPLAY BY NAME descrip_mov,codigo_Destino
|
|
|
|
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
|
|
LET bodegad = NULL
|
|
LET pnum_Doc = NULL
|
|
SELECT UNIQUE a.num_doc,a.bodega_d,a.numero_doc INTO pnum_doc,bodegad,numero_req FROM iptb00006 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 AND
|
|
a.fecha > '01/01/2009'
|
|
|
|
IF status = notfound THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_mov
|
|
END IF
|
|
LET bodega_destino = NULL
|
|
IF codigo_destino IS NOT NULL THEN
|
|
SELECT DISTINCT b.num_doc, a.descripcion INTO num_doc_destino,bodega_destino FROM intb00009 a,iptb00006 b
|
|
WHERE a.cod_bodega = bodegad AND b.num_doc_transferencia = anular.num_doc AND
|
|
b.bodega_procedencia = anular.bodega
|
|
|
|
DISPLAY BY NAME bodega_destino,num_doc_destino
|
|
END IF
|
|
#-> aCTUALZI el monitoreo de las ordenes de corte vg Saturday, March 03, 2001
|
|
IF anular.cod_mov = 20 THEN
|
|
SELECT UNIQUE a.num_oc INTO conducex FROM iptb00006 a
|
|
WHERE a.num_doc = anular.num_doc and a.cod_mov = 20 and
|
|
a.bodega = anular.bodega
|
|
and a.status_t IS NULL
|
|
|
|
LET ordenx = conducex
|
|
END IF
|
|
# REPORTE ENTRADA
|
|
IF anular.cod_mov = 10 THEN
|
|
SELECT UNIQUE a.rep_entrada FROM cgtb00017 a
|
|
WHERE a.rep_entrada = anular.num_doc
|
|
AND a.bodega = anular.bodega
|
|
and a.status_t IS NULL
|
|
|
|
IF STATUS <> NOTFOUND THEN
|
|
CALL msg(504)
|
|
NEXT FIELD num_doc
|
|
END IF
|
|
END IF
|
|
|
|
# BUSCAR NUMERO DE DOCUMENTO INICIAL TRANSFERENCIA BODEGA ORIGEN DEL MOVIMIENTO
|
|
LET pnum_doc_trans = NULL
|
|
LET bodega_trans = NULL
|
|
LET cod_mov_trans = NULL
|
|
SELECT DISTINCT a.num_doc_transferencia,a.bodega_procedencia,a.cod_mov_transferencia
|
|
INTO pnum_doc_trans,bodega_trans,cod_mov_trans
|
|
FROM iptb00006 a WHERE a.num_doc = anular.num_Doc AND a.bodega = anular.bodega AND
|
|
a.cod_mov = anular.cod_mov AND a.status_t IS NULL
|
|
|
|
# VERIFICA SI EL CONDUCE ESTA FACTURADO
|
|
IF anular.cod_mov = 30 OR anular.cod_mov = 55 OR anular.cod_mov = 31 THEN
|
|
SELECT a.factura FROM vetb00002 a,vetb00060 b
|
|
WHERE a.conduce = anular.num_doc AND
|
|
a.ventas = b.ventas AND
|
|
b.cod_mov = anular.cod_mov AND
|
|
a.tipo_cliente = b.tipo_cliente AND
|
|
a.bodega = anular.bodega AND
|
|
a.status_t IS NULL
|
|
IF STATUS <> NOTFOUND THEN
|
|
LET numero_msg =501
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_mov
|
|
END IF
|
|
END IF
|
|
|
|
SELECT UNIQUE a.fecha,a.cod_sp,a.cod_sp_sec
|
|
INTO anular.fecha,anular.cod_sp,anular.cod_sp_sec
|
|
FROM iptb00006 a
|
|
WHERE a.cod_mov = anular.cod_mov AND a.num_doc = anular.num_doc AND
|
|
a.fecha > '12/31/2008' AND
|
|
a.bodega = anular.bodega and
|
|
a.status_t IS NULL
|
|
|
|
DISPLAY BY NAME anular.fecha,anular.cod_sp,anular.cod_sp_sec
|
|
|
|
LET p_fechas = anular.fecha
|
|
|
|
CALL prd(p_fechas,usuarios) RETURNING bandera
|
|
IF bandera = 1 THEN
|
|
NEXT FIELD cod_mov
|
|
END IF
|
|
|
|
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = FALSE
|
|
CLOSE WINDOW anular
|
|
EXIT INPUT
|
|
END IF
|
|
LET opc1 = fgl_winquestion("WARING","PROCEDO ANULAR ESTE DOCUMENTO?","NO","yes|no","question",0)
|
|
|
|
LET opc1 = upshift(opc1)
|
|
|
|
IF opc1 = "YES" THEN
|
|
SELECT a.status_mov INTO status_m FROM iptb00005 a
|
|
WHERE a.cod_mov = anular.cod_mov
|
|
|
|
DECLARE busca CURSOR FOR
|
|
SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.cantidad_2 FROM iptb00006 a
|
|
WHERE a.num_doc=anular.num_doc and a.cod_mov=anular.cod_mov #and fecha> '12/31/2008'
|
|
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 ISNULL(SUM(a.cantidad_2),0) INTO p_iptb06.cantidad_2 FROM iptb00006 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
|
|
|
|
DISPLAY "DATA: ", p_iptb06.cantidad_2
|
|
|
|
LET p_iptb06.cantidad_2 = p_iptb06.cantidad_2 - movi2[idx].cantidad_2
|
|
# busca el control de la existencia
|
|
SELECT a.control_existencia INTO pcontrol_existencia FROM iptb00002 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
|
|
|
|
|
|
IF pcontrol_existencia = "SI" THEN
|
|
IF p_iptb06.cantidad_2 < 0 THEN
|
|
LET err_mensaje="EL ITEM ",movi2[idx].cod_n USING "&&&&","-",movi2[idx].cod_grupo USING "&&&&","-",
|
|
movi2[idx].cod_tipo USING "&&&&",'-',movi2[idx].cod_Sec USING "&&&&&&",
|
|
" ESTA EN NEGATIVO"
|
|
CALL fgl_winmessage("INFO",err_mensaje,"INFO")
|
|
END IF
|
|
END IF
|
|
IF pcontrol_existencia = "SI" THEN
|
|
IF p_iptb06.cantidad_2 < 0 THEN
|
|
LET err_mensaje = NULL
|
|
LET err_mensaje="EL ITEM ",movi2[idx].cod_n USING "&&&&","-",movi2[idx].cod_grupo USING "&&&&","-",
|
|
movi2[idx].cod_tipo USING "&&&&",'-',movi2[idx].cod_Sec USING "&&&&&&",
|
|
" VA A EXCEDER EXISTENCIA SI ANULAS ESTE DOCUMENTO"
|
|
|
|
CALL fgl_winmessage("INFO",err_mensaje,"INFO")
|
|
RETURN
|
|
END IF
|
|
END IF
|
|
END IF
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
|
|
IF (anular.cod_mov = 33 OR anular.cod_mov = 34) THEN
|
|
UPDATE iptb00017 set status_t = "E",us_mod = SUSER_SNAME(),fech_mod = GETDATE()
|
|
WHERE @cod_mov = anular.cod_mov AND @num_doc = anular.num_doc AND
|
|
bodega = anular.bodega
|
|
END IF
|
|
IF anular.cod_mov = 30 OR anular.cod_mov = 31 OR anular.cod_mov = 55 OR anular.cod_mov = 56 OR anular.cod_mov = 12
|
|
OR anular.cod_mov = 13
|
|
THEN
|
|
SET CONNECTION "SQL_E"
|
|
# VERIFICA QUE EL MOVIMIENTO DE ALMACEN NO ESTE APLICADO EN CUENTAS POR COBRAR
|
|
SELECT DISTINCT a.num_doc FROM cctb00001 a
|
|
WHERE a.banco = anular.cod_mov AND a.num_cheque = anular.num_doc AND a.bodega = anular.bodega AND
|
|
a.status_t IS null
|
|
IF STATUS <> NOTFOUND THEN
|
|
CALL msg(364)
|
|
NEXT FIELD cod_mov
|
|
END IF
|
|
SET CONNECTION "SQL_C"
|
|
# VERIFICA QUE EL MOVIMIENTO DE ALMACEN NO ESTE APLICADO EN CUENTAS POR COBRAR
|
|
SELECT DISTINCT a.num_doc FROM cctb00001 a
|
|
WHERE a.banco = anular.cod_mov AND a.num_cheque = anular.num_doc AND a.bodega = anular.bodega AND
|
|
a.status_t IS null
|
|
|
|
IF STATUS <> NOTFOUND THEN
|
|
CALL msg(364)
|
|
NEXT FIELD cod_mov
|
|
END IF
|
|
LET prequisi = 0
|
|
LET pnum_oc = 0
|
|
SELECT UNIQUE a.num_oc,a.num_req INTO pnum_oc,prequisi
|
|
FROM iptb00006 a
|
|
WHERE a.cod_mov = anular.cod_mov AND a.num_doc = anular.num_doc AND
|
|
a.fecha > '12/31/2008' AND bodega = anular.bodega
|
|
|
|
BEGIN WORK
|
|
UPDATE prtb00012 SET cerrada = "N",us_mod = SUSER_SNAME(),fech_mod = GETDATE()
|
|
WHERE num_oc = pnum_oc and fecha > '12/31/2008' AND status_t IS null
|
|
|
|
UPDATE cctb00025 set estado_despacho = 'NO DESPACHADA'
|
|
WHERE num_req = prequisi
|
|
COMMIT WORK
|
|
|
|
END IF
|
|
IF numero_req > 0 THEN
|
|
UPDATE iptb00057 SET estado = 'AUTORIZADA',us_mod = usuarios,fech_mod = getdate()
|
|
WHERE iptb00057.cod_mov = anular.cod_mov AND numero_doc = numero_Req AND bodega = anular.bodega
|
|
END IF
|
|
BEGIN WORK
|
|
IF codigo_dest IS NULL THEN
|
|
UPDATE iptb00006 set status_t = "E",us_mod = SUSER_SNAME(),fech_mod = GETDATE()
|
|
WHERE iptb00006.cod_mov = anular.cod_mov AND iptb00006.num_doc = anular.num_doc AND
|
|
iptb00006.FECHA > "12/31/2008" AND bodega = anular.bodega
|
|
|
|
UPDATE iptb00062 set status_t = "E",us_mod = SUSER_SNAME(),fech_mod = GETDATE()
|
|
WHERE iptb00062.cod_mov = anular.cod_mov AND iptb00062.num_doc = anular.num_doc AND
|
|
bodega = anular.bodega
|
|
|
|
UPDATE iptb00025 set status_t = "E"
|
|
WHERE cod_mov = anular.cod_mov AND num_doc = anular.num_doc AND
|
|
bodega = anular.bodega
|
|
|
|
UPDATE iptb00033 set status_t = "E",us_mod = SUSER_SNAME(),fech_mod = GETDATE()
|
|
WHERE cod_mov = anular.cod_mov AND num_doc = anular.num_doc AND
|
|
bodega = anular.bodega
|
|
|
|
END IF
|
|
IF pnum_doc_trans IS NOT NULL THEN
|
|
|
|
UPDATE iptb00033 SET cond_recep = 'N',status_t = 'E',us_mod=usuarios,fech_mod=getdate()
|
|
WHERE num_doc = pnum_doc_trans AND cod_mov = cod_mov_trans AND
|
|
bodega = bodega_trans
|
|
END IF
|
|
IF codigo_dest IS NOT NULL THEN
|
|
UPDATE iptb00006 set status_t = "E",us_mod = SUSER_SNAME(),fech_mod = GETDATE()
|
|
WHERE iptb00006.cod_mov = anular.cod_mov AND iptb00006.num_doc = anular.num_doc AND
|
|
iptb00006.FECHA > "12/31/2008" AND bodega = anular.bodega
|
|
|
|
UPDATE iptb00062 set status_t = "E",us_mod = SUSER_SNAME(),fech_mod = GETDATE()
|
|
WHERE iptb00062.cod_mov = anular.cod_mov AND iptb00062.num_doc = anular.num_doc AND
|
|
bodega = anular.bodega
|
|
|
|
UPDATE iptb00006 set status_t = "E",us_mod = SUSER_SNAME(),fech_mod = GETDATE()
|
|
WHERE iptb00006.cod_mov = codigo_dest AND iptb00006.num_doc_transferencia = anular.num_doc AND
|
|
iptb00006.FECHA > "12/31/2008" AND bodega_procedencia = anular.bodega
|
|
|
|
UPDATE iptb00033 set status_t = "E",us_mod = SUSER_SNAME(),fech_mod = GETDATE()
|
|
WHERE cod_mov = anular.cod_mov AND num_doc = anular.num_doc AND
|
|
bodega = anular.bodega
|
|
|
|
END IF
|
|
COMMIT WORK
|
|
CALL fgl_winmessage("INFO","REGISTRO ELIMINADO","INFO")
|
|
NEXT FIELD cod_mov
|
|
END IF
|
|
|
|
END INPUT
|
|
CLOSE WINDOW anular
|
|
END FUNCTION
|