Files
MBS/PROYECTOS/test/actualizadisponible.4gl
T

152 lines
5.5 KiB
Plaintext

MAIN
CONNECT TO "smarmotech" USER 'jsoto' USING 'lmmjvsd2014'
CALL actualiza()
END MAIN
FUNCTION actualiza()
DEFINE producto RECORD
cod_n,cod_grupo,cod_tipo,cod_Sec INT
END RECORD,
disponible,cantidad_orden1,pcantidadConduce,transito,existencia,reservado DEC(12,5)
DECLARE buscar CURSOR FOR
SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec FROM iptb00016 a
# WHERE a.ruta_foto IS NOT NULL AND a.precio > 0
#AND a.cod_n = 36 AND a.cod_grupo = 1410 AND a.cod_tipo = 3207 AND a.cod_sec = 505
ORDER BY a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec
FOREACH buscar INTO producto.*
CALL disponibles(producto.cod_n,producto.cod_grupo,
producto.cod_tipo,producto.cod_sec,today)
RETURNING cantidad_orden1,pcantidadConduce,transito,existencia,reservado
#DISPLAY "ordenes ",cantidad_orden1," c ",pcantidadConduce
LET cantidad_orden1 = cantidad_orden1-pcantidadConduce
#DISPLAY "ordenes d ",cantidad_orden1
LET disponible = existencia - cantidad_orden1 -reservado
#DISPLAY "data ",disponible
DISPLAY "PROCESANDO ",disponible," existencia ",existencia," o ",cantidad_orden1," r ",reservado
IF disponible IS NULL OR disponible <0 THEN
LET disponible = 0
END IF
UPDATE iptb00016 SET iptb00016.disponible =disponible,us_mod= 'JSOTO',fech_mod = getdate()
WHERE cod_n = producto.cod_n AND cod_grupo = producto.cod_grupo AND cod_tipo = producto.cod_tipo AND
cod_sec = producto.cod_Sec
END FOREACH
END FUNCTION
FUNCTION disponibles(pcodn,pcodgrupo,pcodtipo,pcodsec,pfecha)
DEFINE pcodn,pcodgrupo,pcodtipo,pcodsec,dias SMALLINT,
pfecha,fecha_dia DATE,
reservado,existencia,transito,cantidad_orden,pcantidadconduce,cantidad_ordenada,cantidad_recibida DEC(12,5),
selec STRING
SELECT a.dias_vence_reservas INTO dias FROM companias a
LET reservado = 0
LET fecha_Dia = TODAY
LET selec= "
SELECT SUM(a.cantidad_reservada)
FROM vetb00051 a,vetb00050 b
WHERE a.status_t IS NULL AND
a.cotizacion_no = b.cotizacion_no AND
a.cod_n = ? AND
a.cod_grupo=? AND
a.cod_tipo=? AND
a.cod_sec=? AND a.cantidad_reservada IS NOT NULL AND
a.fecha_vence_reserva >= ? AND
DATEDIFF(day,a.fecha_vence_reserva,a.fecha_inicio_reserva) <= ?
"
PREPARE comando1 FROM selec
EXECUTE comando1 INTO reservado USING pcodn,pcodgrupo,pcodtipo,pcodsec,fecha_dia,dias
IF reservado IS NULL THEN
LET reservado =0
END IF
LET existencia = 0
SELECT SUM(a.cantidad_2) INTO existencia
FROM iptb00006 a
WHERE a.status_t IS NULL AND
(a.cod_n = pcodn AND
a.cod_grupo=pcodgrupo AND
a.cod_tipo=pcodtipo AND
a.cod_sec=pcodsec)
LET cantidad_orden = 0
SELECT SUM(a.cantidad) INTO cantidad_orden
FROM prtb00013 a,prtb00012 b
WHERE a.num_oc = b.num_oc AND
b.cerrada = 'N' AND
b.status_t IS NULL AND
(a.cod_n = pcodn AND
a.cod_grupo=pcodgrupo AND
a.cod_tipo=pcodtipo AND
a.cod_sec=pcodsec )
LET pcantidadConduce = 0
SELECT SUM(c.cantidad_2*-1) INTO pcantidadConduce
FROM prtb00013 a,prtb00012 b,iptb00006 c,iptb00005 d
WHERE (a.num_oc = b.num_oc) AND
b.cerrada = 'N' AND
b.status_t IS NULL AND
(a.cod_n = pcodn AND
a.cod_grupo=pcodgrupo AND
a.cod_tipo=pcodtipo AND
a.cod_sec=pcodsec) AND
(a.cod_n = c.cod_n AND
a.cod_grupo=c.cod_grupo AND
a.cod_tipo=c.cod_tipo AND
a.cod_sec=c.cod_Sec) AND
c.cod_mov = d.cod_mov AND
(d.control_despacho = 'SI' OR d.control_devolucion = 'SI') AND
a.num_oc = c.num_oc AND
c.status_t IS NULL
# TRANSITO
LET cantidad_ordenada = 0
SELECT SUM(a.cantidad) INTO cantidad_ordenada
FROM cotb00015 a,cotb00014 b
WHERE (a.cod_n = pcodn AND
a.cod_grupo=pcodgrupo AND
a.cod_tipo=pcodtipo AND
a.cod_sec=pcodsec) AND
(a.num_oc = b.num_oc) AND
b.cierre ='N' AND
a.status_t IS NULL
LET cantidad_recibida =0
SELECT SUM(a.cantidad_2) INTO cantidad_recibida
FROM iptb00006 a,cotb00015 b,cotb00014 c
WHERE (a.cod_n = pcodn AND
a.cod_grupo=pcodgrupo AND
a.cod_tipo=pcodtipo AND
a.cod_sec=pcodsec AND
a.cod_n = b.cod_n AND
a.cod_grupo = b.cod_grupo AND
a.cod_tipo = b.cod_tipo) AND
(a.orden_compra = b.num_oc) AND
b.num_oc = c.num_oc AND
c.cierre = 'N' AND
a.status_t IS NULL
LET transito = cantidad_ordenada - cantidad_recibida
IF cantidad_orden IS NULL THEN
LET cantidad_orden=0
END IF
IF transito IS NULL THEN
LET transito=0
END IF
IF pcantidadconduce IS NULL THEN
LET pcantidadconduce =0
END IF
RETURN cantidad_orden,pcantidadConduce,transito,existencia,reservado
END FUNCTION