Commit inicial: fuentes MBS ERP (Genero 6) + .gitignore + docs/SETUP_PC_MBS.md
This commit is contained in:
@@ -0,0 +1,152 @@
|
||||
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
|
||||
|
||||
@@ -0,0 +1,265 @@
|
||||
DEFINE usuarios, clave STRING
|
||||
|
||||
MAIN
|
||||
DEFER INTERRUPT
|
||||
CALL ARG_VAL(1) RETURNING usuarios
|
||||
CALL ARG_VAL(2) RETURNING clave
|
||||
|
||||
CONNECT TO "smarmotech" USER usuarios USING clave
|
||||
CALL Ajustar_Cantidad2()
|
||||
END MAIN
|
||||
|
||||
FUNCTION Ajustar_Cantidad()
|
||||
|
||||
DEFINE
|
||||
Data DYNAMIC ARRAY OF RECORD
|
||||
bodega TINYINT,
|
||||
cod_n, cod_grupo, cod_tipo, cod_sec INT,
|
||||
cantidad_2_62, cantidad_2_06 DECIMAL(12, 5)
|
||||
END RECORD,
|
||||
Data2 DYNAMIC ARRAY OF RECORD
|
||||
idrow INT,
|
||||
cod_n, cod_grupo, cod_tipo, cod_sec INT,
|
||||
cantidad_2_62 DECIMAL(12, 5),
|
||||
cod_mov INT
|
||||
END RECORD,
|
||||
Data3 DYNAMIC ARRAY OF RECORD
|
||||
idrow INT,
|
||||
cod_n, cod_grupo, cod_tipo, cod_sec INT,
|
||||
cantidad_2_62 DECIMAL(12, 5),
|
||||
cod_mov INT
|
||||
END RECORD,
|
||||
i, j, x INT,
|
||||
query, query2, query3 STRING
|
||||
|
||||
DEFINE checking INT
|
||||
|
||||
PREPARE query
|
||||
FROM "SELECT t1.bodega,
|
||||
t1.cod_n,
|
||||
t1.cod_grupo,
|
||||
t1.cod_tipo,
|
||||
t1.cod_sec,
|
||||
t1.cantidad_iptb00062,
|
||||
t2.cantidad_iptb00006
|
||||
FROM(SELECT bodega,
|
||||
cod_n,
|
||||
cod_grupo,
|
||||
cod_tipo,
|
||||
cod_sec,
|
||||
SUM(cantidad2) AS cantidad_iptb00062
|
||||
FROM iptb00062
|
||||
WHERE status_t IS NULL
|
||||
GROUP BY bodega, cod_n, cod_grupo, cod_tipo, cod_sec)
|
||||
t1
|
||||
INNER
|
||||
JOIN(SELECT bodega,
|
||||
cod_n,
|
||||
cod_grupo,
|
||||
cod_tipo,
|
||||
cod_sec,
|
||||
SUM(cantidad_2) AS cantidad_iptb00006
|
||||
FROM iptb00006
|
||||
WHERE status_t IS NULL
|
||||
GROUP BY bodega, cod_n, cod_grupo, cod_tipo, cod_sec)
|
||||
t2
|
||||
ON t1.cod_n = t2.cod_n
|
||||
AND t1.cod_grupo = t2.cod_grupo
|
||||
AND t1.cod_tipo = t2.cod_tipo
|
||||
AND t1.cod_sec = t2.cod_sec
|
||||
AND t1.bodega = t2.bodega
|
||||
WHERE t1.cantidad_iptb00062 <> t2.cantidad_iptb00006
|
||||
AND t2.bodega = 5
|
||||
AND t1.bodega = 5
|
||||
AND t1.cod_n NOT IN (12, 5, 25)"
|
||||
|
||||
DECLARE buscar CURSOR FOR query
|
||||
|
||||
LET i = 1
|
||||
|
||||
FOREACH buscar INTO Data[i].*
|
||||
|
||||
INITIALIZE data2 TO NULL
|
||||
LET j = 1
|
||||
|
||||
PREPARE query2
|
||||
FROM 'SELECT idrow, cod_n,cod_grupo,cod_tipo,cod_sec, cantidad2, cod_mov
|
||||
FROM iptb00062
|
||||
WHERE cod_n = '
|
||||
|| data[i].cod_n
|
||||
|| '
|
||||
AND cod_grupo = '
|
||||
|| data[i].cod_grupo
|
||||
|| '
|
||||
AND cod_tipo ='
|
||||
|| data[i].cod_tipo
|
||||
|| '
|
||||
AND cod_sec ='
|
||||
|| data[i].cod_sec
|
||||
|| '
|
||||
AND bodega ='
|
||||
|| data[i].bodega
|
||||
|| '
|
||||
AND status_t IS NULL '
|
||||
|
||||
DECLARE buscar2 CURSOR FOR query2
|
||||
|
||||
FOREACH buscar2 INTO data2[j].*
|
||||
|
||||
IF data[i].cantidad_2_06 = data2[j].cantidad_2_62
|
||||
AND data2[j].cod_mov = 99 THEN
|
||||
|
||||
DISPLAY "Encontró registro con igualdad de existencia en mov 99"
|
||||
|
||||
LET x = 1
|
||||
|
||||
WHILE x <= data2.getLength()
|
||||
|
||||
IF data2[x].cod_mov <> 99 THEN
|
||||
|
||||
DELETE FROM iptb00062 WHERE idrow = data2[x].idrow
|
||||
DISPLAY "ejecutó query (?"
|
||||
|
||||
END IF
|
||||
|
||||
LET x = x + 1
|
||||
|
||||
END WHILE
|
||||
|
||||
END IF
|
||||
|
||||
LET j = j + 1
|
||||
|
||||
END FOREACH
|
||||
|
||||
LET i = i + 1
|
||||
|
||||
END FOREACH
|
||||
|
||||
END FUNCTION
|
||||
|
||||
FUNCTION Ajustar_Cantidad2()
|
||||
|
||||
DEFINE
|
||||
Data DYNAMIC ARRAY OF RECORD
|
||||
bodega TINYINT,
|
||||
cod_n, cod_grupo, cod_tipo, cod_sec INT,
|
||||
cantidad_2_62, cantidad_2_06 DECIMAL(12, 5)
|
||||
END RECORD,
|
||||
Data2 DYNAMIC ARRAY OF RECORD
|
||||
idrow INT,
|
||||
cod_n, cod_grupo, cod_tipo, cod_sec INT,
|
||||
cantidad_2_62 DECIMAL(12, 5),
|
||||
cod_mov INT
|
||||
END RECORD,
|
||||
Data3 DYNAMIC ARRAY OF RECORD
|
||||
idrow INT,
|
||||
cod_n, cod_grupo, cod_tipo, cod_sec INT,
|
||||
cantidad_2_62 DECIMAL(12, 5),
|
||||
cod_mov INT
|
||||
END RECORD,
|
||||
i, j, x INT,
|
||||
query, query2, query3 STRING
|
||||
|
||||
DEFINE checking INT, container DECIMAL(12,2)
|
||||
|
||||
PREPARE query
|
||||
FROM "SELECT t1.bodega,
|
||||
t1.cod_n,
|
||||
t1.cod_grupo,
|
||||
t1.cod_tipo,
|
||||
t1.cod_sec,
|
||||
t1.cantidad_iptb00062,
|
||||
t2.cantidad_iptb00006
|
||||
FROM(SELECT bodega,
|
||||
cod_n,
|
||||
cod_grupo,
|
||||
cod_tipo,
|
||||
cod_sec,
|
||||
SUM(cantidad2) AS cantidad_iptb00062
|
||||
FROM iptb00062
|
||||
WHERE status_t IS NULL
|
||||
GROUP BY bodega, cod_n, cod_grupo, cod_tipo, cod_sec)
|
||||
t1
|
||||
INNER
|
||||
JOIN(SELECT bodega,
|
||||
cod_n,
|
||||
cod_grupo,
|
||||
cod_tipo,
|
||||
cod_sec,
|
||||
SUM(cantidad_2) AS cantidad_iptb00006
|
||||
FROM iptb00006
|
||||
WHERE status_t IS NULL
|
||||
GROUP BY bodega, cod_n, cod_grupo, cod_tipo, cod_sec)
|
||||
t2
|
||||
ON t1.cod_n = t2.cod_n
|
||||
AND t1.cod_grupo = t2.cod_grupo
|
||||
AND t1.cod_tipo = t2.cod_tipo
|
||||
AND t1.cod_sec = t2.cod_sec
|
||||
AND t1.bodega = t2.bodega
|
||||
WHERE t1.cantidad_iptb00062 <> t2.cantidad_iptb00006
|
||||
AND t1.cantidad_iptb00062 < t2.cantidad_iptb00006
|
||||
AND t2.bodega = 5
|
||||
AND t1.bodega = 5
|
||||
AND t1.cod_n NOT IN (12, 5, 25)"
|
||||
|
||||
DECLARE buscar3 CURSOR FOR query
|
||||
|
||||
LET i = 1
|
||||
|
||||
FOREACH buscar3 INTO Data[i].*
|
||||
|
||||
INITIALIZE data2 TO NULL
|
||||
LET j = 1
|
||||
|
||||
PREPARE query2
|
||||
FROM 'SELECT idrow, cod_n,cod_grupo,cod_tipo,cod_sec, cantidad2, cod_mov
|
||||
FROM iptb00062
|
||||
WHERE cod_n = '
|
||||
|| data[i].cod_n
|
||||
|| '
|
||||
AND cod_grupo = '
|
||||
|| data[i].cod_grupo
|
||||
|| '
|
||||
AND cod_tipo ='
|
||||
|| data[i].cod_tipo
|
||||
|| '
|
||||
AND cod_sec ='
|
||||
|| data[i].cod_sec
|
||||
|| '
|
||||
AND bodega ='
|
||||
|| data[i].bodega
|
||||
|| '
|
||||
AND status_t IS NULL '
|
||||
|
||||
DECLARE buscar4 CURSOR FOR query2
|
||||
|
||||
FOREACH buscar4 INTO data2[j].*
|
||||
|
||||
IF data2[j].cod_mov = 99 THEN
|
||||
LET container = data[i].cantidad_2_06 - data[i].cantidad_2_62
|
||||
|
||||
UPDATE iptb00062 SET cantidad2 = data2[j].cantidad_2_62 + container
|
||||
EXIT FOREACH
|
||||
|
||||
END IF
|
||||
|
||||
LET j = j + 1
|
||||
|
||||
END FOREACH
|
||||
|
||||
LET i = i + 1
|
||||
|
||||
END FOREACH
|
||||
|
||||
END FUNCTION
|
||||
|
||||
{ Query para buscar el area en la 06
|
||||
|
||||
select b.idrow, a.area, a.cod_mov,a.num_doc,a.bodega,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec, a.cantidad_1,a.cantidad_2, b.cantidad2, b.fech_crea,
|
||||
a.status_t as estadoiptb06, b.status_t as estado62
|
||||
from iptb00006 a inner join iptb00062 b on a.cod_n = b.cod_n and a.cod_grupo = b.cod_grupo and
|
||||
a.cod_tipo = b.cod_tipo and a.cod_sec = b.cod_sec and a.cod_mov = b.cod_mov and a.bodega = b.bodega
|
||||
and a.num_doc = b.num_doc
|
||||
where a.cantidad_2 = b.cantidad2 and a.cantidad_1 = b.cantidad and a.area is not null and b.cod_mov <> 99
|
||||
order by a.area, a.bodega,a.cod_mov,a.num_Doc }
|
||||
@@ -0,0 +1,72 @@
|
||||
{
|
||||
FUNCTION: programar_proximo_conteo
|
||||
OBJETIVO: GENERAR LOS CICLOS DE LOS CONTEOS A PARTIR DE UNA FECHA
|
||||
FECHA 3, FEBRERO 2025
|
||||
DESARROLLADO POR: ING. JUAN SOTO
|
||||
|
||||
}
|
||||
|
||||
MAIN
|
||||
|
||||
DEFINE bodega INT,
|
||||
fecha DATE
|
||||
LET bodega = 4
|
||||
LET fecha = '02/10/2025'
|
||||
CONNECT TO "smarmotech" USER 'jusoto' USING 'lmmjvsd2014'
|
||||
CALL programar_proximo_conteo(bodega,fecha)
|
||||
END MAIN
|
||||
|
||||
FUNCTION programar_proximo_conteo(v_fecha_nueva,v_bodega)
|
||||
DEFINE v_categoria CHAR(2)
|
||||
DEFINE v_dias INTEGER
|
||||
DEFINE v_fecha_nueva DATE
|
||||
DEFINE v_codid INTEGER
|
||||
DEFINE v_cod_n INTEGER
|
||||
DEFINE v_cod_grupo INTEGER
|
||||
DEFINE v_cod_tipo INTEGER
|
||||
DEFINE v_cod_sec INTEGER
|
||||
DEFINE v_bodega INTEGER
|
||||
|
||||
-- Cursor para obtener productos con transacciones en almacén
|
||||
DECLARE c_productos CURSOR FOR
|
||||
SELECT p.codid, t.cod_n, t.cod_grupo, t.cod_tipo, t.cod_sec, t.bodega, p.categoria
|
||||
FROM iptb00006 t
|
||||
INNER JOIN iptb00002 p ON t.cod_n = p.cod_n
|
||||
AND t.cod_grupo = p.cod_grupo
|
||||
AND t.cod_tipo = p.cod_tipo
|
||||
AND t.cod_sec = p.cod_sec
|
||||
WHERE t.bodega IS NOT NULL
|
||||
GROUP BY p.codid, t.cod_n, t.cod_grupo, t.cod_tipo, t.cod_sec, t.bodega, p.categoria
|
||||
|
||||
OPEN c_productos
|
||||
FOREACH c_productos INTO v_codid, v_cod_n, v_cod_grupo, v_cod_tipo, v_cod_sec, v_bodega, v_categoria
|
||||
-- Obtener los días correspondientes según la categoría
|
||||
SELECT dias INTO v_dias
|
||||
FROM intb00016
|
||||
WHERE categoria = v_categoria
|
||||
|
||||
IF SQLCA.SQLCODE = 0 THEN
|
||||
-- Calcular la nueva fecha de conteo
|
||||
LET v_fecha_nueva = v_fecha_nueva + v_dias
|
||||
|
||||
-- Marcar el conteo actual como realizado (para esta bodega y producto)
|
||||
UPDATE iptb00075
|
||||
SET estado_conteo = 'Realizado', fecha_ultimo_conteo = TODAY
|
||||
WHERE codid = v_codid
|
||||
AND bodega = v_bodega
|
||||
AND estado_conteo = 'Pendiente'
|
||||
|
||||
-- Eliminar registros pendientes con la misma fecha para evitar duplicados
|
||||
DELETE FROM iptb00075
|
||||
WHERE codid = v_codid
|
||||
AND bodega = v_bodega
|
||||
AND fecha_proximo_conteo = v_fecha_nueva
|
||||
AND estado_conteo = 'Pendiente'
|
||||
|
||||
-- Insertar un nuevo registro de conteo por bodega
|
||||
INSERT INTO iptb00075 (codid, cod_n, cod_grupo, cod_tipo, cod_sec, bodega, fecha_proximo_conteo, categoria, estado_conteo, fecha_ultimo_conteo)
|
||||
VALUES (v_codid, v_cod_n, v_cod_grupo, v_cod_tipo, v_cod_sec, v_bodega, v_fecha_nueva, v_categoria, 'Pendiente', TODAY)
|
||||
END IF
|
||||
END FOREACH
|
||||
CLOSE c_productos
|
||||
END FUNCTION
|
||||
@@ -0,0 +1,352 @@
|
||||
IMPORT os
|
||||
IMPORT JAVA java.lang.System
|
||||
IMPORT JAVA java.lang.Object
|
||||
IMPORT JAVA java.io.ByteArrayOutputStream
|
||||
IMPORT JAVA java.io.PrintStream
|
||||
IMPORT JAVA java.util.Properties
|
||||
IMPORT JAVA javax.mail.Session
|
||||
IMPORT JAVA javax.mail.Transport
|
||||
IMPORT JAVA javax.mail.Authenticator
|
||||
IMPORT JAVA javax.mail.Message
|
||||
IMPORT JAVA javax.mail.Message.RecipientType
|
||||
IMPORT JAVA javax.mail.internet.InternetAddress
|
||||
IMPORT JAVA javax.mail.internet.MimeMessage
|
||||
IMPORT JAVA javax.mail.internet.MimeMultipart
|
||||
IMPORT JAVA javax.mail.internet.MimeBodyPart
|
||||
IMPORT JAVA com.sun.mail.smtp.SMTPTransport
|
||||
IMPORT security
|
||||
|
||||
CONSTANT debug_level = 1
|
||||
DEFINE sesion Session,
|
||||
propuesta Properties,
|
||||
password,s_protocol,m_charset STRING
|
||||
DEFINE msg MimeMessage
|
||||
DEFINE mbodyp MimeBodyPart
|
||||
DEFINE multip MimeMultipart
|
||||
DEFINE trans SMTPTransport
|
||||
DEFINE Toemail,subject,cuerpo_correo,xusername,xsmtphost,xsmtpport,xpassword,emailadd STRING
|
||||
DEFINE logtext STRING
|
||||
DEFINE out_stream ByteArrayOutputStream
|
||||
|
||||
TYPE cnf_t RECORD
|
||||
hostname STRING,
|
||||
smtphost STRING,
|
||||
smtpport INTEGER,
|
||||
senderemail STRING,
|
||||
smtpauth SMALLINT, -- 1: uses SMTP AUTH, 0: doesn't use AUTH
|
||||
username STRING,
|
||||
password STRING,
|
||||
use_ssl SMALLINT, -- 1: uses SSL, 0: doesn't use SSL
|
||||
use_tls SMALLINT, -- 1: uses TLS, 0: doesn't use TLS
|
||||
cnxtimeout INTEGER
|
||||
END RECORD
|
||||
DEFINE cnf cnf_t
|
||||
|
||||
|
||||
MAIN
|
||||
DEFINE xemail STRING
|
||||
#CALL generatemplate()
|
||||
CALL enviaemail()
|
||||
END MAIN
|
||||
#FUNCTION enviaemail(rcpt_to,subject,body,attachment,xusername,xsmtphost,xsmtpport,xpassword)
|
||||
FUNCTION enviaemail()
|
||||
DEFINE rcpt_to,subject,body,attachment,xusername,xsmtphost,xsmtpport,xpassword STRING
|
||||
|
||||
LET cnf.smtphost = 'smtp.office365.com'
|
||||
LET cnf.smtpport = '587'
|
||||
LET cnf.username = 'notificacion@marmotech.com.do'
|
||||
LET cnf.smtpauth = TRUE
|
||||
LET cnf.password = 'Lmmjvsd2020'
|
||||
LET s_protocol = 'smtp'
|
||||
|
||||
# INFORMACION DEL EMAIL DESTINO
|
||||
|
||||
LET rcpt_to ='jsoto@marmotech.com.do'
|
||||
LET subject = 'sin subject'
|
||||
LET body = 'PRUEBA'
|
||||
|
||||
DISPLAY "data to:",rcpt_to," subj ",subject," body:",body," att:",attachment," user:",xusername,
|
||||
" host: ",xsmtphost, " port ",xsmtpport," pass ",xpassword
|
||||
#LET cnf.smtphost = xsmtphost
|
||||
#LET cnf.smtpport = xsmtpport
|
||||
#LET cnf.username = xusername
|
||||
LET cnf.senderemail = 'notificacion@marmotech.com.do'
|
||||
# LET cnf.smtpauth = TRUE
|
||||
# LET cnf.password = xpassword
|
||||
# LET s_protocol = 'smtp'
|
||||
CALL create_cxion_session() RETURNING sesion,password,s_protocol
|
||||
|
||||
LET m_charset=getCharset()
|
||||
|
||||
LET msg=MimeMessage.create(sesion)
|
||||
# Email Message creation : add recipients -> From, To, CC and BCC
|
||||
|
||||
# LET cnf.senderemail = 'notificacion@marmotech.com.do'
|
||||
|
||||
CALL msg.setFrom(InternetAddress.create(cnf.senderemail))
|
||||
CALL msg.setRecipients(Message.RecipientType.TO,InternetAddress.parse(rcpt_to, FALSE))
|
||||
|
||||
CALL msg.setSubject(subject)
|
||||
# Email Message creation : create multipart (for text and attachments)
|
||||
|
||||
LET multip=MimeMultipart.create()
|
||||
|
||||
# Email Message creation : add body part
|
||||
|
||||
LET mbodyp=MimeBodyPart.create()
|
||||
|
||||
CALL mbodyp.setText(body, m_charset, "html")
|
||||
-- CALL mbodyp.setText(body, m_charset)
|
||||
|
||||
IF attachment IS NOT NULL THEN
|
||||
CALL mbodyp.attachFile(attachment)
|
||||
END IF
|
||||
CALL multip.addBodyPart(mbodyp)
|
||||
CALL msg.setContent(multip)
|
||||
|
||||
CALL show_debug_msg(1,"Email Message created.")
|
||||
|
||||
# Sending the email
|
||||
|
||||
CALL show_debug_msg(1,SFMT("Connecting to server %1 ...",cnf.hostname))
|
||||
|
||||
TRY
|
||||
LET trans = CAST(sesion.getTransport(s_protocol) AS SMTPTransport)
|
||||
CALL trans.connect(cnf.smtphost, cnf.username, password)
|
||||
|
||||
CALL trans.sendMessage(msg,msg.getAllRecipients())
|
||||
CALL trans.close()
|
||||
|
||||
CALL show_debug_msg(1,SFMT("Email sent through server %1.",cnf.hostname))
|
||||
CATCH
|
||||
CALL show_output_dialog("ERR")
|
||||
CALL mbox_ok("Error", SFMT("Error trying to send email through server %1 (code=%2)",cnf.hostname,STATUS), "stop")
|
||||
END TRY
|
||||
|
||||
|
||||
|
||||
END FUNCTION
|
||||
|
||||
PRIVATE FUNCTION create_cxion_session()
|
||||
DEFINE s_proto, s_password STRING
|
||||
DEFINE x_timeout INTEGER
|
||||
DEFINE sess Session
|
||||
DEFINE props Properties
|
||||
DEFINE custom_ps PrintStream
|
||||
|
||||
# Connection parameters preparation
|
||||
|
||||
CALL show_debug_msg(1,"Preparing connection parameters ...")
|
||||
# LET cnf.password = 'Lmmjvsd2020'
|
||||
CALL string_to_base64(cnf.password) RETURNING cnf.password
|
||||
|
||||
LET s_password=base64_to_string(cnf.password)
|
||||
|
||||
IF cnf.cnxtimeout>0 THEN
|
||||
LET x_timeout=cnf.cnxtimeout*1000 # convert to miliseconds
|
||||
ELSE
|
||||
LET x_timeout=0
|
||||
END IF
|
||||
|
||||
LET cnf.use_tls = TRUE
|
||||
LET cnf.use_ssl = FALSE
|
||||
|
||||
IF cnf.use_ssl THEN
|
||||
LET s_proto="smtps"
|
||||
ELSE
|
||||
LET s_proto="smtp"
|
||||
END IF
|
||||
|
||||
|
||||
CALL show_debug_msg(2,SFMT("Host: %1",cnf.smtphost))
|
||||
CALL show_debug_msg(2,SFMT("Port: %1",cnf.smtpport))
|
||||
CALL show_debug_msg(2,SFMT("User: %1",cnf.username))
|
||||
CALL show_debug_msg(4,SFMT("Password: %1",cnf.password)) # this is the base64 password
|
||||
CALL show_debug_msg(5,SFMT("Pswd txt: %1",s_password)) # this is the plain-text password
|
||||
CALL show_debug_msg(2,SFMT("Prot: %1",s_proto))
|
||||
CALL show_debug_msg(2,SFMT("TLS: %1",cnf.use_tls))
|
||||
CALL show_debug_msg(2,SFMT("Timeout: %1",x_timeout))
|
||||
|
||||
# Session properties preparation
|
||||
|
||||
CALL show_debug_msg(1,"Preparing Session properties ...")
|
||||
|
||||
LET props=System.getProperties()
|
||||
|
||||
IF cnf.use_ssl THEN
|
||||
CALL setMailProperties(props,"smtp","ssl.enable","true")
|
||||
ELSE
|
||||
CALL setMailProperties(props,"smtp","ssl.enable","false")
|
||||
END IF
|
||||
|
||||
IF cnf.smtpauth THEN
|
||||
CALL setMailProperties(props,s_proto,"auth","true")
|
||||
ELSE
|
||||
CALL setMailProperties(props,s_proto,"auth","false")
|
||||
END IF
|
||||
|
||||
CALL setMailProperties(props,s_proto,"port",cnf.smtpport)
|
||||
|
||||
CALL setMailProperties(props,s_proto,"connectiontimeout",x_timeout)
|
||||
|
||||
IF cnf.use_tls THEN
|
||||
CALL setMailProperties(props,s_proto,"starttls.enable","true")
|
||||
# the following 2 parameters are needed for FourJs mail server
|
||||
# but also work fine with Gmail servers when TLS option is selected
|
||||
# both servers were tested on 2016-06-02
|
||||
CALL setMailProperties(props,s_proto,"ssl.checkserveridentity","false")
|
||||
CALL setMailProperties(props,s_proto,"ssl.trust","*")
|
||||
ELSE
|
||||
CALL setMailProperties(props,s_proto,"starttls.enable","false")
|
||||
END IF
|
||||
|
||||
# Session creation
|
||||
|
||||
CALL show_debug_msg(1,"Creating Session ...")
|
||||
|
||||
LET sess=Session.getInstance(props)
|
||||
LET out_stream = ByteArrayOutputStream.create()
|
||||
LET custom_ps = PrintStream.create(out_stream)
|
||||
CALL sess.setDebugOut(custom_ps)
|
||||
CALL sess.setDebug(TRUE)
|
||||
|
||||
RETURN sess,s_password,s_proto
|
||||
|
||||
END FUNCTION
|
||||
|
||||
PRIVATE FUNCTION show_debug_msg(lev,msg)
|
||||
DEFINE lev SMALLINT
|
||||
DEFINE msg STRING
|
||||
IF lev>=debug_level THEN
|
||||
DISPLAY msg
|
||||
END IF
|
||||
END FUNCTION
|
||||
|
||||
FUNCTION string_to_base64(str_ent)
|
||||
|
||||
DEFINE str_ent,str_b64,str_aux STRING
|
||||
|
||||
TRY
|
||||
CALL security.Base64.FromString(str_ent) RETURNING str_b64
|
||||
CATCH
|
||||
LET str_aux="Unable to convert the input string into Base64:",STATUS
|
||||
CALL mbox_ok("Error", str_aux, "stop")
|
||||
LET str_b64=NULL
|
||||
END TRY
|
||||
|
||||
RETURN str_b64
|
||||
|
||||
END FUNCTION
|
||||
|
||||
FUNCTION validate_param_smpt_auth()
|
||||
|
||||
DEFINE flag_ok BOOLEAN
|
||||
|
||||
LET flag_ok=TRUE
|
||||
|
||||
IF xpassword=cnf.password THEN
|
||||
-- if password didn't change we don't encrypt as it is already encrypted
|
||||
ELSE
|
||||
IF LENGTH(cnf.password)>0 THEN
|
||||
CALL string_to_base64(cnf.password) RETURNING cnf.password
|
||||
END IF
|
||||
LET xpassword=cnf.password -- store new encrypted value
|
||||
END IF
|
||||
|
||||
IF cnf.smtpauth THEN
|
||||
IF LENGTH(cnf.username) == 0 THEN
|
||||
LET flag_ok=FALSE
|
||||
CALL mbox_ok("Error", "The username is mandatory when using Smtp Auth", "stop")
|
||||
ELSE
|
||||
IF LENGTH(cnf.password) == 0 THEN
|
||||
LET flag_ok=FALSE
|
||||
CALL mbox_ok("Error", "The password is mandatory when using Smtp Auth", "stop")
|
||||
END IF
|
||||
END IF
|
||||
END IF
|
||||
|
||||
RETURN flag_ok
|
||||
|
||||
END FUNCTION
|
||||
|
||||
# Retrieve the current charset
|
||||
FUNCTION getCharset()
|
||||
DEFINE l STRING
|
||||
DEFINE c base.Channel
|
||||
|
||||
LET c = base.Channel.create()
|
||||
CALL c.openPipe("fglrun -i mbcs 2>&1", "r")
|
||||
LET l = c.readLine()
|
||||
WHILE l IS NOT NULL
|
||||
IF l MATCHES "Charmap : *" THEN
|
||||
RETURN l.subString(16,length(l))
|
||||
EXIT WHILE
|
||||
END IF
|
||||
LET l = c.readLine()
|
||||
END WHILE
|
||||
RETURN "ISO-8859-1" -- default value
|
||||
END FUNCTION
|
||||
|
||||
PRIVATE FUNCTION show_output_dialog(s_stat)
|
||||
DEFINE s_stat,s_msg,s_color STRING
|
||||
DEFINE strbuf base.StringBuffer
|
||||
|
||||
IF s_stat="OK" THEN
|
||||
LET s_color="green"
|
||||
LET s_msg="The SMTP connection ended OK."
|
||||
ELSE
|
||||
LET s_color="red"
|
||||
LET s_msg="The SMTP connection ended with Error."
|
||||
END IF
|
||||
|
||||
# separates the Session debug message into html lines
|
||||
LET strbuf = base.StringBuffer.create()
|
||||
CALL strbuf.append(out_stream.toString())
|
||||
CALL strbuf.replace("\n","<BR>",0)
|
||||
|
||||
LET logtext=strbuf.toString(),"<BR>", # first adds the debug lines without additional format
|
||||
SFMT("<font color='%1'>",s_color),s_msg,"</font>" # then adds the result message in color
|
||||
|
||||
END FUNCTION
|
||||
FUNCTION mbox_ok(t, m, i)
|
||||
DEFINE t,m,i STRING
|
||||
MENU t ATTRIBUTES(STYLE="dialog",COMMENT=m,IMAGE=i)
|
||||
COMMAND "Ok" EXIT MENU
|
||||
END MENU
|
||||
END FUNCTION
|
||||
|
||||
FUNCTION base64_to_string(str_b64)
|
||||
|
||||
DEFINE str_out,str_b64,str_aux STRING
|
||||
|
||||
TRY
|
||||
CALL security.Base64.ToString(str_b64) RETURNING str_out
|
||||
CATCH
|
||||
LET str_aux="Unable to convert the Base64 string into plain-text:",STATUS
|
||||
CALL mbox_ok("Error", str_aux, "stop")
|
||||
LET str_out=NULL
|
||||
END TRY
|
||||
|
||||
RETURN str_out
|
||||
|
||||
END FUNCTION
|
||||
|
||||
PRIVATE FUNCTION setMailProperties(props,prot,prop,val)
|
||||
DEFINE props Properties
|
||||
DEFINE auxi,prot,prop,val STRING
|
||||
|
||||
LET auxi=SFMT("mail.%1.%2",prot,prop)
|
||||
|
||||
CALL props.put(auxi,val)
|
||||
|
||||
CALL show_debug_msg(1,SFMT("Property '%1' set to value '%2'", auxi, val))
|
||||
|
||||
END FUNCTION
|
||||
FUNCTION generatemplate()
|
||||
DEFINE location STRING
|
||||
OPEN WINDOW w1 WITH FORM 'wform'
|
||||
|
||||
INPUT BY NAME location
|
||||
|
||||
CLOSE WINDOW w1
|
||||
END FUNCTION
|
||||
@@ -0,0 +1,137 @@
|
||||
DEFINE creacion,selec STRING
|
||||
MAIN
|
||||
|
||||
#CONNECT TO "db_cedulados+dbmsnc_11" AS "MSSQL"
|
||||
|
||||
#CONNECT TO "movilsoluciones+dbmmys_5_7" AS "MYSQL"
|
||||
CONNECT TO "sqlcedula" AS "MSSQL"
|
||||
CONNECT TO "cedula" AS "MYSQL"
|
||||
|
||||
LET creacion ="
|
||||
|
||||
CREATE TABLE CEDULADOS(
|
||||
MUN_CED varchar(3) NULL,
|
||||
SEQ_CED varchar(7) NULL,
|
||||
VER_CED varchar(1) NULL,
|
||||
NOMBRES varchar(30) NULL,
|
||||
APELLIDO1 varchar(30) NULL,
|
||||
APELLIDO2 varchar(30) NULL,
|
||||
FECHA_NAC datetime NULL,
|
||||
LUGAR_NAC varchar(30) NULL,
|
||||
CALLE varchar(25) NULL,
|
||||
CASA varchar(5) NULL,
|
||||
EDIFICIO varchar(25) NULL,
|
||||
PISO varchar(2) NULL,
|
||||
APTO varchar(5) NULL,
|
||||
TELEFONO varchar(20) NULL,
|
||||
COD_MUNICIPIO varchar(3) NULL,
|
||||
COD_CIUDAD varchar(2) NULL,
|
||||
COD_SECTOR varchar(4) NULL,
|
||||
COD_PIEL numeric(2, 0) NULL,
|
||||
COD_SANGRE numeric(2, 0) NULL,
|
||||
SEXO varchar(1) NULL,
|
||||
COD_PROF numeric(3, 0) NULL,
|
||||
EST_CIVIL varchar(1) NULL,
|
||||
NPADRE varchar(40) NULL,
|
||||
NMADRE varchar(40) NULL,
|
||||
ESTATUS varchar(1) NULL,
|
||||
CEDULA VARCHAR(13))
|
||||
|
||||
|
||||
"
|
||||
#SET CONNECTION "MYSQL"
|
||||
#PREPARE comando FROM creacion
|
||||
#EXECUTE comando
|
||||
SET CONNECTION "MSSQL"
|
||||
LET selec = "SELECT MUN_CED,
|
||||
SEQ_CED,
|
||||
VER_CED ,
|
||||
NOMBRES ,
|
||||
APELLIDO1 ,
|
||||
APELLIDO2 ,
|
||||
FECHA_NAC ,
|
||||
LUGAR_NAC ,
|
||||
CALLE ,
|
||||
CASA ,
|
||||
EDIFICIO ,
|
||||
PISO ,
|
||||
APTO ,
|
||||
TELEFONO ,
|
||||
COD_MUNICIPIO ,
|
||||
COD_CIUDAD ,
|
||||
COD_SECTOR ,
|
||||
COD_PIEL ,
|
||||
COD_SANGRE ,
|
||||
SEXO ,
|
||||
COD_PROF ,
|
||||
EST_CIVIL ,
|
||||
NPADRE ,
|
||||
NMADRE ,
|
||||
ESTATUS ,
|
||||
CEDULA
|
||||
FROM cedulados
|
||||
"
|
||||
DISPLAY "INICIO "
|
||||
UNLOAD TO "cedulados.csv" selec
|
||||
DISPLAY "TERMINE"
|
||||
|
||||
|
||||
SET CONNECTION "MYSQL"
|
||||
DISPLAY "mysql inicio"
|
||||
DELETE FROM cedulados
|
||||
LOAD FROM "cedulados.csv" INSERT INTO cedulados
|
||||
DISPLAY "mysql termino"
|
||||
|
||||
#CALL insertar()
|
||||
|
||||
END MAIN
|
||||
|
||||
FUNCTION insertar()
|
||||
DEFINE cedulas dynamic ARRAY OF RECORD
|
||||
MUN_CED varchar(3) ,
|
||||
SEQ_CED varchar(7),
|
||||
VER_CED varchar(1) ,
|
||||
NOMBRES varchar(30),
|
||||
APELLIDO1 varchar(30) ,
|
||||
APELLIDO2 varchar(30) ,
|
||||
FECHA_NAC DATETIME YEAR TO minute ,
|
||||
LUGAR_NAC varchar(30) ,
|
||||
CALLE varchar(25) ,
|
||||
CASA varchar(5) ,
|
||||
EDIFICIO varchar(25) ,
|
||||
PISO varchar(2) ,
|
||||
APTO varchar(5) ,
|
||||
TELEFONO varchar(20) ,
|
||||
COD_MUNICIPIO varchar(3) ,
|
||||
COD_CIUDAD varchar(2) ,
|
||||
COD_SECTOR varchar(4) ,
|
||||
COD_PIEL numeric(2, 0) ,
|
||||
COD_SANGRE numeric(2, 0) ,
|
||||
SEXO varchar(1) ,
|
||||
COD_PROF numeric(3, 0) ,
|
||||
EST_CIVIL varchar(1) ,
|
||||
NPADRE varchar(40) ,
|
||||
NMADRE varchar(40) ,
|
||||
ESTATUS varchar(1) ,
|
||||
CEDULA VARCHAR(13)
|
||||
|
||||
END RECORD,
|
||||
i int
|
||||
|
||||
SET CONNECTION "MSSQL"
|
||||
DECLARE buscar CURSOR FOR
|
||||
SELECT * FROM cedulados
|
||||
|
||||
LET i = 1
|
||||
DISPLAY "EN PROCESO"
|
||||
FOREACH buscar INTO cedulas[i].*
|
||||
LET i = i + 1
|
||||
END FOREACH
|
||||
DISPLAY "TERMINE DE LEER DATOS"
|
||||
|
||||
SET CONNECTION "MYSQL"
|
||||
FOR i = 1 TO cedulas.getLength()
|
||||
INSERT INTO cedulados VALUES (cedulas[i].*)
|
||||
END FOR
|
||||
|
||||
END FUNCTION
|
||||
@@ -0,0 +1,423 @@
|
||||
|
||||
DEFINE datos RECORD
|
||||
cod_n int,cod_grupo int,cod_tipo int,cod_Sec int,
|
||||
sku varchar(50) ,
|
||||
descripcion varchar(255) ,
|
||||
frecuencia_compra decimal(18, 2) ,
|
||||
frecuencia_ventas decimal(18, 2) ,
|
||||
volumen_compra decimal(18, 2) ,
|
||||
volumen_venta decimal(18, 2) ,
|
||||
frecuencia_transacciones_entrada decimal(18, 2) ,
|
||||
volumen_transaccion_entrada decimal(18, 2) ,
|
||||
frecuencia_transaccion_salida,volumen_transaccion_salida decimal(18, 2) ,
|
||||
ano INT,
|
||||
unidad_med VARCHAR(4),
|
||||
existencia DEC(12,5),
|
||||
bodega VARCHAR(100),
|
||||
categoria VARCHAR(10)
|
||||
END RECORD
|
||||
|
||||
DEFINE pano INT,
|
||||
fecha_ini,fecha_fin DATE
|
||||
MAIN
|
||||
CALL ARG_VAL(1) RETURNING pano
|
||||
|
||||
CONNECT TO "smarmotech" USER 'jsoto' USING 'lmmjvsd2014'
|
||||
SELECT MIN(fecha_inicio),MAX(fecha_corte) INTO fecha_ini,fecha_fin FROM prdtable WHERE ano = pano
|
||||
|
||||
LET fecha_ini = '01/01/2024'
|
||||
LET fecha_fin = '06/30/2025'
|
||||
DISPLAY "RANGO FECHA ",fecha_ini," ",fecha_fin
|
||||
CALL frecuencia()
|
||||
|
||||
END MAIN
|
||||
|
||||
FUNCTION frecuencia()
|
||||
|
||||
DELETE FROM tmpdata_inventario WHERE ano = pano
|
||||
|
||||
# FRECUENCIA COMPRAS
|
||||
DECLARE f1 CURSOR FOR
|
||||
select
|
||||
a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,
|
||||
CAST(a.cod_n AS CHAR(5))+'-'+CAST(a.cod_grupo AS char(5))+'-'+CAST(a.cod_tipo AS CHAR(5))+'-'+CAST(a.cod_sec AS CHAR(5)),b.descrip_esp,
|
||||
count(*),'0','0','0','0','0','0','0','0',b.unidad_med,'0','ALM GENERAL',b.categoria
|
||||
from iptb00006 a,iptb00002 b
|
||||
where
|
||||
a.cod_n = b.cod_n and a.cod_grupo = b.cod_grupo and a.cod_tipo = b.cod_tipo and a.cod_Sec = b.cod_sec AND
|
||||
a.fecha between fecha_ini and fecha_fin
|
||||
and a.status_t is NULL AND a.cod_mov IN (10,35) AND a.bodega = 4 AND
|
||||
b.cod_n IN (3, 14, 36, 42, 60, 106, 115, 116, 152, 167, 168, 169,
|
||||
37, 43, 45, 46, 52, 53, 56, 63, 145,74,75,76,77,78,79,80,81,83,84,85,87,88,
|
||||
89,90,91,92,93,94,95,96, 104, 112, 117, 118, 119,
|
||||
35,64,65,66,67,68,69,70,71,72,101,107,108,120,134,135,137,138)
|
||||
|
||||
|
||||
|
||||
group by a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,b.unidad_med,b.categoria
|
||||
order by a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp
|
||||
|
||||
DISPLAY "INSERTANDO FRECUENCIA COMPRAS..."
|
||||
FOREACH f1 INTO datos.*
|
||||
LET datos.ano = pano
|
||||
LET datos.sku = datos.cod_n USING "&&&&","-",datos.cod_grupo USING "&&&&&&","-",datos.cod_tipo USING "&&&&&&",
|
||||
"-",datos.cod_Sec USING "&&&&&&&&"
|
||||
INSERT INTO tmpdata_inventario VALUES (datos.*)
|
||||
END FOREACH
|
||||
|
||||
# VOLUMEN COMPRA
|
||||
DECLARE f2 CURSOR FOR
|
||||
select
|
||||
a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,
|
||||
CAST(a.cod_n AS CHAR(5))+'-'+CAST(a.cod_grupo AS char(5))+'-'+CAST(a.cod_tipo AS CHAR(5))+'-'+CAST(a.cod_sec AS CHAR(5)),b.descrip_esp,
|
||||
'0','0',SUM(a.cantidad_2),'0','0','0','0','0','0',b.unidad_med,'0','ALM GENERAL',b.categoria
|
||||
from iptb00006 a,iptb00002 b where
|
||||
a.cod_n = b.cod_n and a.cod_grupo = b.cod_grupo and a.cod_tipo = b.cod_tipo and a.cod_Sec = b.cod_sec AND
|
||||
a.fecha between fecha_ini and fecha_fin AND a.cod_mov IN (10,35) and
|
||||
a.status_t is null AND a.bodega =4 AND
|
||||
b.cod_n IN (3, 14, 36, 42, 60, 106, 115, 116, 152, 167, 168, 169,
|
||||
37, 43, 45, 46, 52, 53, 56, 63, 145,74,75,76,77,78,79,80,81,83,84,85,87,88,
|
||||
89,90,91,92,93,94,95,96, 104, 112, 117, 118, 119,
|
||||
35,64,65,66,67,68,69,70,71,72,101,107,108,120,134,135,137,138)
|
||||
|
||||
group by a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,b.unidad_med,b.categoria
|
||||
order by a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp
|
||||
|
||||
DISPLAY "INSERTANDO VOLUMEN COMPRAS..."
|
||||
FOREACH f2 INTO datos.*
|
||||
LET datos.ano = pano
|
||||
LET datos.sku = datos.cod_n USING "&&&&","-",datos.cod_grupo USING "&&&&&&","-",datos.cod_tipo USING "&&&&&&",
|
||||
"-",datos.cod_Sec USING "&&&&&&&&"
|
||||
SELECT DISTINCT a.cod_n FROM tmpdata_inventario a
|
||||
WHERE a.cod_n = datos.cod_n AND
|
||||
a.cod_grupo = datos.cod_grupo AND
|
||||
a.cod_tipo = datos.cod_tipo AND
|
||||
a.cod_sec = datos.cod_sec AND
|
||||
a.ano = pano
|
||||
|
||||
IF STATUS = NOTFOUND THEN
|
||||
INSERT INTO tmpdata_inventario VALUES (datos.*)
|
||||
ELSE
|
||||
UPDATE tmpdata_inventario SET volumen_compra = datos.volumen_compra
|
||||
WHERE cod_n = datos.cod_n AND
|
||||
cod_grupo = datos.cod_grupo AND
|
||||
cod_tipo = datos.cod_tipo AND
|
||||
cod_sec = datos.cod_sec AND
|
||||
ano = pano
|
||||
|
||||
END IF
|
||||
END FOREACH
|
||||
|
||||
#FRECUENCIA VENTAS
|
||||
DECLARE f3 CURSOR FOR
|
||||
select
|
||||
a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,
|
||||
CAST(a.cod_n AS CHAR(5))+'-'+CAST(a.cod_grupo AS char(5))+'-'+CAST(a.cod_tipo AS CHAR(5))+'-'+CAST(a.cod_sec AS CHAR(5)),b.descrip_esp,
|
||||
'0',count(*),'0','0','0','0','0','0','0',b.unidad_med,'0','ALM GENERAL',b.categoria
|
||||
from iptb00006 a,iptb00002 b where
|
||||
a.cod_n = b.cod_n and a.cod_grupo = b.cod_grupo and a.cod_tipo = b.cod_tipo and a.cod_Sec = b.cod_sec AND
|
||||
a.fecha between fecha_ini and fecha_fin
|
||||
and a.status_t is null AND a.cod_mov IN (30,31,55,56) and
|
||||
a.bodega=4 AND
|
||||
b.cod_n IN (3, 14, 36, 42, 60, 106, 115, 116, 152, 167, 168, 169,
|
||||
37, 43, 45, 46, 52, 53, 56, 63, 145,74,75,76,77,78,79,80,81,83,84,85,87,88,
|
||||
89,90,91,92,93,94,95,96, 104, 112, 117, 118, 119,
|
||||
35,64,65,66,67,68,69,70,71,72,101,107,108,120,134,135,137,138)
|
||||
|
||||
group by a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,b.unidad_med,b.categoria
|
||||
order by a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp
|
||||
|
||||
|
||||
DISPLAY "INSERTANDO FRECUENCIA VENTAS..."
|
||||
FOREACH f3 INTO datos.*
|
||||
LET datos.ano = pano
|
||||
LET datos.sku = datos.cod_n USING "&&&&","-",datos.cod_grupo USING "&&&&&&","-",datos.cod_tipo USING "&&&&&&",
|
||||
"-",datos.cod_Sec USING "&&&&&&&&"
|
||||
SELECT DISTINCT a.cod_n FROM tmpdata_inventario a
|
||||
WHERE a.cod_n = datos.cod_n AND
|
||||
a.cod_grupo = datos.cod_grupo AND
|
||||
a.cod_tipo = datos.cod_tipo AND
|
||||
a.cod_sec = datos.cod_sec AND
|
||||
a.ano = pano
|
||||
|
||||
IF STATUS = NOTFOUND THEN
|
||||
INSERT INTO tmpdata_inventario VALUES (datos.*)
|
||||
ELSE
|
||||
UPDATE tmpdata_inventario SET frecuencia_ventas = datos.frecuencia_ventas
|
||||
WHERE cod_n = datos.cod_n AND
|
||||
cod_grupo = datos.cod_grupo AND
|
||||
cod_tipo = datos.cod_tipo AND
|
||||
cod_sec = datos.cod_sec AND
|
||||
ano = pano
|
||||
|
||||
END IF
|
||||
END FOREACH
|
||||
|
||||
DECLARE f4 CURSOR FOR
|
||||
#VOLUMEN VENTAS
|
||||
select
|
||||
a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,
|
||||
CAST(a.cod_n AS CHAR(5))+'-'+CAST(a.cod_grupo AS char(5))+'-'+CAST(a.cod_tipo AS CHAR(5))+'-'+CAST(a.cod_sec AS CHAR(5)),b.descrip_esp,
|
||||
'0','0','0',SUM(a.cantidad_2),'0','0','0','0','0',b.unidad_med,'0','ALM GENERAL',b.categoria
|
||||
from iptb00006 a,iptb00002 b where
|
||||
a.cod_n = b.cod_n and a.cod_grupo = b.cod_grupo and a.cod_tipo = b.cod_tipo and a.cod_Sec = b.cod_sec AND
|
||||
a.fecha between fecha_ini and fecha_fin
|
||||
and a.status_t is null AND a.cod_mov IN (30,31,55,56) and
|
||||
a.bodega=4 AND
|
||||
b.cod_n IN (3, 14, 36, 42, 60, 106, 115, 116, 152, 167, 168, 169,
|
||||
37, 43, 45, 46, 52, 53, 56, 63, 145,74,75,76,77,78,79,80,81,83,84,85,87,88,
|
||||
89,90,91,92,93,94,95,96, 104, 112, 117, 118, 119,
|
||||
35,64,65,66,67,68,69,70,71,72,101,107,108,120,134,135,137,138)
|
||||
|
||||
|
||||
group by a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,b.unidad_med,b.categoria
|
||||
order by a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp
|
||||
|
||||
|
||||
DISPLAY "INSERTANDO VOLUMEN VENTAS..."
|
||||
FOREACH f4 INTO datos.*
|
||||
LET datos.ano = pano
|
||||
LET datos.volumen_venta = datos.volumen_venta * -1
|
||||
LET datos.sku = datos.cod_n USING "&&&&","-",datos.cod_grupo USING "&&&&&&","-",datos.cod_tipo USING "&&&&&&",
|
||||
"-",datos.cod_Sec USING "&&&&&&&&"
|
||||
SELECT DISTINCT a.cod_n FROM tmpdata_inventario a
|
||||
WHERE a.cod_n = datos.cod_n AND
|
||||
a.cod_grupo = datos.cod_grupo AND
|
||||
a.cod_tipo = datos.cod_tipo AND
|
||||
a.cod_sec = datos.cod_sec AND
|
||||
a.ano = pano
|
||||
|
||||
IF STATUS = NOTFOUND THEN
|
||||
INSERT INTO tmpdata_inventario VALUES (datos.*)
|
||||
ELSE
|
||||
UPDATE tmpdata_inventario SET volumen_venta = datos.volumen_venta
|
||||
WHERE cod_n = datos.cod_n AND
|
||||
cod_grupo = datos.cod_grupo AND
|
||||
cod_tipo = datos.cod_tipo AND
|
||||
cod_sec = datos.cod_sec AND
|
||||
ano = pano
|
||||
|
||||
END IF
|
||||
END FOREACH
|
||||
|
||||
#FRECUENCIA TRANSFERENCIA ENTRADAS
|
||||
# COD MOV 80
|
||||
DECLARE f5 CURSOR FOR
|
||||
select
|
||||
a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,
|
||||
CAST(a.cod_n AS CHAR(5))+'-'+CAST(a.cod_grupo AS char(5))+'-'+CAST(a.cod_tipo AS CHAR(5))+'-'+CAST(a.cod_sec AS CHAR(5)),b.descrip_esp,
|
||||
'0','0','0','0',count(*),'0','0','0','0',b.unidad_med,'0','ALM GENERAL',b.categoria
|
||||
from iptb00006 a,iptb00002 b where
|
||||
a.cod_n = b.cod_n and a.cod_grupo = a.cod_grupo and a.cod_tipo = b.cod_tipo and a.cod_Sec = b.cod_sec AND
|
||||
a.fecha between fecha_ini and fecha_fin
|
||||
and a.status_t is null and
|
||||
a.bodega=4 AND a.cod_mov = 80 AND
|
||||
b.cod_n IN (3, 14, 36, 42, 60, 106, 115, 116, 152, 167, 168, 169,
|
||||
37, 43, 45, 46, 52, 53, 56, 63, 145,74,75,76,77,78,79,80,81,83,84,85,87,88,
|
||||
89,90,91,92,93,94,95,96, 104, 112, 117, 118, 119,
|
||||
35,64,65,66,67,68,69,70,71,72,101,107,108,120,134,135,137,138)
|
||||
|
||||
group by a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,b.unidad_med,b.categoria
|
||||
order by a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp
|
||||
|
||||
DISPLAY "INSERTANDO FRECUENCIA TRANSFERENCIA ENTRADAS..."
|
||||
FOREACH f5 INTO datos.*
|
||||
LET datos.ano = pano
|
||||
LET datos.sku = datos.cod_n USING "&&&&","-",datos.cod_grupo USING "&&&&&&","-",datos.cod_tipo USING "&&&&&&",
|
||||
"-",datos.cod_Sec USING "&&&&&&&&"
|
||||
SELECT DISTINCT a.cod_n FROM tmpdata_inventario a
|
||||
WHERE a.cod_n = datos.cod_n AND
|
||||
a.cod_grupo = datos.cod_grupo AND
|
||||
a.cod_tipo = datos.cod_tipo AND
|
||||
a.cod_sec = datos.cod_sec AND
|
||||
a.ano = pano
|
||||
|
||||
IF STATUS = NOTFOUND THEN
|
||||
INSERT INTO tmpdata_inventario VALUES (datos.*)
|
||||
ELSE
|
||||
UPDATE tmpdata_inventario SET frecuencia_transacciones_entrada = datos.frecuencia_transacciones_entrada
|
||||
WHERE cod_n = datos.cod_n AND
|
||||
cod_grupo = datos.cod_grupo AND
|
||||
cod_tipo = datos.cod_tipo AND
|
||||
cod_sec = datos.cod_sec AND
|
||||
ano = pano
|
||||
|
||||
END IF
|
||||
END FOREACH
|
||||
|
||||
|
||||
#VOLUMEN TRANSFERENCIA ENTRADAS
|
||||
#COD MOV 80
|
||||
DECLARE f6 CURSOR FOR
|
||||
select
|
||||
a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,
|
||||
CAST(a.cod_n AS CHAR(5))+'-'+CAST(a.cod_grupo AS char(5))+'-'+CAST(a.cod_tipo AS CHAR(5))+'-'+CAST(a.cod_sec AS CHAR(5)),b.descrip_esp,
|
||||
'0','0','0','0','0',SUM(a.cantidad_2),'0','0','0',b.unidad_med,'0','ALM GENERAL',b.categoria
|
||||
from iptb00006 a,iptb00002 b where
|
||||
a.cod_n = b.cod_n and a.cod_grupo = a.cod_grupo and a.cod_tipo = b.cod_tipo and a.cod_Sec = b.cod_sec AND
|
||||
a.fecha between fecha_ini and fecha_fin
|
||||
and a.status_t is null and
|
||||
a.bodega=4 AND a.cod_mov = 80 AND
|
||||
b.cod_n IN (3, 14, 36, 42, 60, 106, 115, 116, 152, 167, 168, 169,
|
||||
37, 43, 45, 46, 52, 53, 56, 63, 145,74,75,76,77,78,79,80,81,83,84,85,87,88,
|
||||
89,90,91,92,93,94,95,96, 104, 112, 117, 118, 119,
|
||||
35,64,65,66,67,68,69,70,71,72,101,107,108,120,134,135,137,138)
|
||||
|
||||
group by a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,b.unidad_med,b.categoria
|
||||
order by a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp
|
||||
|
||||
|
||||
|
||||
DISPLAY "INSERTANDO VOLUMEN TRANSFERENCIA ENTRADAS..."
|
||||
FOREACH f6 INTO datos.*
|
||||
LET datos.ano = pano
|
||||
LET datos.sku = datos.cod_n USING "&&&&","-",datos.cod_grupo USING "&&&&&&","-",datos.cod_tipo USING "&&&&&&",
|
||||
"-",datos.cod_Sec USING "&&&&&&&&"
|
||||
SELECT DISTINCT a.cod_n FROM tmpdata_inventario a
|
||||
WHERE a.cod_n = datos.cod_n AND
|
||||
a.cod_grupo = datos.cod_grupo AND
|
||||
a.cod_tipo = datos.cod_tipo AND
|
||||
a.cod_sec = datos.cod_sec AND
|
||||
a.ano = pano
|
||||
|
||||
IF STATUS = NOTFOUND THEN
|
||||
INSERT INTO tmpdata_inventario VALUES (datos.*)
|
||||
ELSE
|
||||
UPDATE tmpdata_inventario SET volumen_transaccion_entrada = datos.volumen_transaccion_entrada
|
||||
WHERE cod_n = datos.cod_n AND
|
||||
cod_grupo = datos.cod_grupo AND
|
||||
cod_tipo = datos.cod_tipo AND
|
||||
cod_sec = datos.cod_sec AND
|
||||
ano = pano
|
||||
|
||||
END IF
|
||||
END FOREACH
|
||||
|
||||
#FRECUENCIA TRANSFERENCIA SALIDAS
|
||||
# COD MOV 79
|
||||
DECLARE f7 CURSOR FOR
|
||||
select
|
||||
a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,
|
||||
CAST(a.cod_n AS CHAR(5))+'-'+CAST(a.cod_grupo AS char(5))+'-'+CAST(a.cod_tipo AS CHAR(5))+'-'+CAST(a.cod_sec AS CHAR(5)),b.descrip_esp,
|
||||
'0','0','0','0','0','0',count(*),'0','0',b.unidad_med,'0','ALM GENERAL',b.categoria
|
||||
from iptb00006 a,iptb00002 b where
|
||||
a.cod_n = b.cod_n and a.cod_grupo = a.cod_grupo and a.cod_tipo = b.cod_tipo and a.cod_Sec = b.cod_sec AND
|
||||
a.fecha between fecha_ini and fecha_fin
|
||||
and a.status_t is null and
|
||||
a.bodega=4 AND a.cod_mov = 79 AND
|
||||
b.cod_n IN (3, 14, 36, 42, 60, 106, 115, 116, 152, 167, 168, 169,
|
||||
37, 43, 45, 46, 52, 53, 56, 63, 145,74,75,76,77,78,79,80,81,83,84,85,87,88,
|
||||
89,90,91,92,93,94,95,96, 104, 112, 117, 118, 119,
|
||||
35,64,65,66,67,68,69,70,71,72,101,107,108,120,134,135,137,138)
|
||||
|
||||
|
||||
group by a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,b.unidad_med,b.categoria
|
||||
order by a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp
|
||||
|
||||
DISPLAY "INSERTANDO FRECUENCIA TRANSFERENCIA SALIDAS..."
|
||||
FOREACH f7 INTO datos.*
|
||||
LET datos.ano = pano
|
||||
LET datos.sku = datos.cod_n USING "&&&&","-",datos.cod_grupo USING "&&&&&&","-",datos.cod_tipo USING "&&&&&&",
|
||||
"-",datos.cod_Sec USING "&&&&&&&&"
|
||||
SELECT DISTINCT a.cod_n FROM tmpdata_inventario a
|
||||
WHERE a.cod_n = datos.cod_n AND
|
||||
a.cod_grupo = datos.cod_grupo AND
|
||||
a.cod_tipo = datos.cod_tipo AND
|
||||
a.cod_sec = datos.cod_sec AND
|
||||
a.ano = pano
|
||||
|
||||
IF STATUS = NOTFOUND THEN
|
||||
INSERT INTO tmpdata_inventario VALUES (datos.*)
|
||||
ELSE
|
||||
UPDATE tmpdata_inventario SET frecuencia_transaccion_salida = datos.frecuencia_transaccion_salida
|
||||
WHERE cod_n = datos.cod_n AND
|
||||
cod_grupo = datos.cod_grupo AND
|
||||
cod_tipo = datos.cod_tipo AND
|
||||
cod_sec = datos.cod_sec AND
|
||||
ano = pano
|
||||
|
||||
END IF
|
||||
END FOREACH
|
||||
|
||||
#VOLUMEN TRANSFERENCIA SALIDAS
|
||||
#COD MOV 79
|
||||
DECLARE f8 CURSOR FOR
|
||||
select
|
||||
a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,
|
||||
CAST(a.cod_n AS CHAR(5))+'-'+CAST(a.cod_grupo AS char(5))+'-'+CAST(a.cod_tipo AS CHAR(5))+'-'+CAST(a.cod_sec AS CHAR(5)),b.descrip_esp,
|
||||
'0','0','0','0','0','0','0',SUM(a.cantidad_2),'0',b.unidad_med ,'0','ALM GENERAL',b.categoria
|
||||
from iptb00006 a,iptb00002 b where
|
||||
a.cod_n = b.cod_n and a.cod_grupo = a.cod_grupo and a.cod_tipo = b.cod_tipo and a.cod_Sec = b.cod_sec AND
|
||||
a.fecha between fecha_ini and fecha_fin
|
||||
and a.status_t is null and
|
||||
a.bodega=4 AND a.cod_mov = 79 AND
|
||||
b.cod_n IN (3, 14, 36, 42, 60, 106, 115, 116, 152, 167, 168, 169,
|
||||
37, 43, 45, 46, 52, 53, 56, 63, 145,74,75,76,77,78,79,80,81,83,84,85,87,88,
|
||||
89,90,91,92,93,94,95,96, 104, 112, 117, 118, 119,
|
||||
35,64,65,66,67,68,69,70,71,72,101,107,108,120,134,135,137,138)
|
||||
|
||||
group by a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,b.unidad_med,b.categoria
|
||||
order by a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp
|
||||
|
||||
|
||||
DISPLAY "INSERTANDO VOLUMEN TRANSFERENCIA SALIDAS..."
|
||||
FOREACH f8 INTO datos.*
|
||||
LET datos.ano = pano
|
||||
LET datos.sku = datos.cod_n USING "&&&&","-",datos.cod_grupo USING "&&&&&&","-",datos.cod_tipo USING "&&&&&&",
|
||||
"-",datos.cod_Sec USING "&&&&&&&&"
|
||||
LET datos.volumen_transaccion_salida = datos.volumen_transaccion_salida * -1
|
||||
SELECT DISTINCT a.cod_n FROM tmpdata_inventario a
|
||||
WHERE a.cod_n = datos.cod_n AND
|
||||
a.cod_grupo = datos.cod_grupo AND
|
||||
a.cod_tipo = datos.cod_tipo AND
|
||||
a.cod_sec = datos.cod_sec AND
|
||||
a.ano = pano
|
||||
|
||||
IF STATUS = NOTFOUND THEN
|
||||
INSERT INTO tmpdata_inventario VALUES (datos.*)
|
||||
ELSE
|
||||
UPDATE tmpdata_inventario SET volumen_transaccion_salida = datos.volumen_transaccion_salida
|
||||
WHERE cod_n = datos.cod_n AND
|
||||
cod_grupo = datos.cod_grupo AND
|
||||
cod_tipo = datos.cod_tipo AND
|
||||
cod_sec = datos.cod_sec AND
|
||||
ano = pano
|
||||
|
||||
END IF
|
||||
END FOREACH
|
||||
|
||||
#EXISTENCIA
|
||||
DECLARE f10 CURSOR FOR
|
||||
select
|
||||
a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,
|
||||
CAST(a.cod_n AS CHAR(5))+'-'+CAST(a.cod_grupo AS char(5))+'-'+CAST(a.cod_tipo AS CHAR(5))+'-'+CAST(a.cod_sec AS CHAR(5)),b.descrip_esp,
|
||||
'0','0','0','0','0','0','0','0','0',b.unidad_med ,SUM(a.cantidad_2),'ALM GENERAL',b.categoria
|
||||
from iptb00006 a,iptb00002 b where
|
||||
a.cod_n = b.cod_n and a.cod_grupo = a.cod_grupo and a.cod_tipo = b.cod_tipo and a.cod_Sec = b.cod_sec AND
|
||||
a.fecha <= fecha_fin
|
||||
and a.status_t is null and
|
||||
a.bodega=4 AND
|
||||
b.cod_n IN (3, 14, 36, 42, 60, 106, 115, 116, 152, 167, 168, 169,
|
||||
37, 43, 45, 46, 52, 53, 56, 63, 145,74,75,76,77,78,79,80,81,83,84,85,87,88,
|
||||
89,90,91,92,93,94,95,96, 104, 112, 117, 118, 119,
|
||||
35,64,65,66,67,68,69,70,71,72,101,107,108,120,134,135,137,138)
|
||||
|
||||
group by a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,b.unidad_med,b.categoria
|
||||
order by a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp
|
||||
|
||||
|
||||
DISPLAY "EXISTENCIAS..."
|
||||
FOREACH f10 INTO datos.*
|
||||
UPDATE tmpdata_inventario SET existencia = datos.existencia
|
||||
WHERE cod_n = datos.cod_n AND
|
||||
cod_grupo = datos.cod_grupo AND
|
||||
cod_tipo = datos.cod_tipo AND
|
||||
cod_sec = datos.cod_sec AND
|
||||
ano = pano
|
||||
|
||||
|
||||
END FOREACH
|
||||
|
||||
DISPLAY "PROCESO TERMINADO"
|
||||
|
||||
END FUNCTION
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 16 KiB |
@@ -0,0 +1,25 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html style="width: 100%; height: 100%;">
|
||||
<head>
|
||||
<meta content="text/html; charset=UTF-8" http-equiv="content-type">
|
||||
<title></title>
|
||||
<style type="text/css">
|
||||
body {
|
||||
border-width: 0px;
|
||||
margin: 0px;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
</style>
|
||||
<script language="JavaScript" type="text/javascript" src="signature.js"></script>
|
||||
</head>
|
||||
<body onload="checkSvg()" >
|
||||
<svg id="svg" xmlns="http://www.w3.org/2000/svg" width="100%" height="100%">
|
||||
<rect width="100%" height="100%" fill="#ffa"/>
|
||||
<line x1="0" y1="80%" x2="100%" y2="80%" stroke="#666" stroke-width="1" stroke-dasharray="3" shape-rendering="crispEdges" pointer-events="none"/>
|
||||
<path id="path" stroke="navy" stroke-width="2" fill="none" pointer-events="none"/>
|
||||
</svg>
|
||||
<div id=pathdata></div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<meta content="text/html; charset=UTF-8" http-equiv="content-type">
|
||||
<title>welcome</title>
|
||||
</head>
|
||||
<body>
|
||||
<div>
|
||||
<img src="./logo.png" width="400" height="200" >
|
||||
<h1>BIENBENIDO A MARMOTECH</h1>
|
||||
<!-- <script language="JavaScript" type="text/javascript" src="wc_echo.js"></script> -->
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,53 @@
|
||||
MAIN
|
||||
DEFINE arreglo DYNAMIC ARRAY OF RECORD
|
||||
producto,almacen STRING,
|
||||
existencia SMALLINT,
|
||||
nodo CHAR(10) ,
|
||||
hijos CHAR(10)
|
||||
END RECORD,
|
||||
i SMALLINT,
|
||||
producto, almacen STRING
|
||||
|
||||
LET producto = 'ESTE ES EL PRODUCTO NO '
|
||||
LET almacen ='ESTE ES EL ALMACEN NO '
|
||||
{ FOR i = 1 TO 10
|
||||
LET arreglo[i].producto = producto CLIPPED,i USING "<<<"
|
||||
LET arreglo[i].almacen = almacen CLIPPED, i USING "<<<"
|
||||
IF i < 5 THEN
|
||||
LET arreglo[i].nodo = NULL
|
||||
ELSE
|
||||
LET arreglo[i].nodo='1'
|
||||
END IF
|
||||
END for}
|
||||
LET arreglo[1].producto = '1'
|
||||
LET arreglo[1].existencia = 0
|
||||
LET arreglo[1].almacen = ''
|
||||
LET arreglo[1].nodo=''
|
||||
LET arreglo[1].hijos = '1'
|
||||
|
||||
LET arreglo[2].producto = '1'
|
||||
LET arreglo[2].existencia = 2
|
||||
LET arreglo[2].almacen = 'GENERAL'
|
||||
LET arreglo[2].nodo='1'
|
||||
LET arreglo[2].hijos = '1.1'
|
||||
|
||||
LET arreglo[3].producto = '1'
|
||||
LET arreglo[3].existencia = 1
|
||||
LET arreglo[3].almacen = 'EXHIBICION'
|
||||
LET arreglo[3].nodo='1'
|
||||
LET arreglo[3].hijos = '1.2'
|
||||
|
||||
|
||||
LET arreglo[4].producto = '1'
|
||||
LET arreglo[4].existencia = 1
|
||||
LET arreglo[4].almacen = 'PRINCIPAL'
|
||||
LET arreglo[4].nodo='1'
|
||||
LET arreglo[4].hijos = '1.3'
|
||||
FOR i = 1 TO arreglo.getLength()
|
||||
DISPLAY arreglo[i].producto," ",arreglo[i].almacen," ",arreglo[i].existencia," -- ",arreglo[i].nodo," ",arreglo[i].hijos
|
||||
END FOR
|
||||
OPEN WINDOW w1 WITH FORM 'treeviewfrm'
|
||||
DISPLAY ARRAY arreglo TO sarreglo.*
|
||||
CLOSE WINDOW w1
|
||||
|
||||
END MAIN
|
||||
@@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<ManagedForm fileVersion="31400" gstVersion="31408" name="managedform" uid="{7eeabfce-5b2c-4089-a3b7-80b2b59963f9}">
|
||||
<AGSettings>
|
||||
<DynamicProperties version="2"/>
|
||||
</AGSettings>
|
||||
<Record name="sarreglo" uid="{66952700-1cbb-4324-867c-19571ea12d7d}">
|
||||
<RecordField fieldIdRef="1" name="producto" uid="{13673eba-d3d9-4ff5-91a6-3b81a09f42a0}"/>
|
||||
<RecordField fieldIdRef="2" name="almacen" uid="{2f815152-1843-4f27-a678-ceaded909c2e}"/>
|
||||
<RecordField fieldIdRef="3" name="existencia" uid="{21bc38fc-0bd4-4527-bf2e-7aad345769e6}"/>
|
||||
<RecordField fieldIdRef="4" length="10" name="nodo" uid="{e5aebf54-5d68-413e-9661-366a35077aa6}"/>
|
||||
<RecordField fieldIdRef="5" name="hijos" uid="{cf8024d4-a078-409e-ade1-c2f75582766f}"/>
|
||||
</Record>
|
||||
<Form gridHeight="25" gridWidth="80" name="form" text="Form">
|
||||
<Grid gridHeight="11" gridWidth="57" name="grid1" posX="5" posY="2">
|
||||
<Tree gridHeight="6" gridWidth="37" idColumn="producto" isNodeColumn="hijos" name="table1" parentIdColumn="nodo" posX="6" posY="4" totalRows="5">
|
||||
<Edit fieldId="1" gridHeight="1" gridWidth="8" name="producto" posX="0" posY="0" tabIndex="-1" title="Productos" widget="Edit"/>
|
||||
<Edit fieldId="2" gridHeight="1" gridWidth="8" name="almacen" posX="8" posY="0" tabIndex="-1" title="Almacenes" widget="Edit"/>
|
||||
<Edit fieldId="3" gridHeight="1" gridWidth="8" name="existencia" posX="16" posY="0" tabIndex="-1" title="existencia" widget="Edit"/>
|
||||
<Phantom fieldId="4" length="10" name="nodo" widget="Phantom"/>
|
||||
<Phantom fieldId="5" name="hijos" widget="Phantom"/>
|
||||
</Tree>
|
||||
</Grid>
|
||||
</Form>
|
||||
<DiagramLayout>
|
||||
<![CDATA[AAAAAgAAAEwAewA2ADYAOQA1ADIANwAwADAALQAxAGMAYgBiAC0ANAAzADIANAAtADgANgA3AGMALQAxADkANQA3ADEAZQBhADEAMgBkADcAZAB9AAAAAAAAAAAAAAAAAAAAAD9QYk3S8an8AQ==]]>
|
||||
</DiagramLayout>
|
||||
</ManagedForm>
|
||||
@@ -0,0 +1,38 @@
|
||||
IMPORT util
|
||||
|
||||
MAIN
|
||||
DEFINE rec RECORD
|
||||
mywebcomp STRING,
|
||||
result STRING
|
||||
END RECORD
|
||||
|
||||
OPEN FORM f FROM "wc_echo"
|
||||
DISPLAY FORM f
|
||||
|
||||
INPUT BY NAME rec.* ATTRIBUTES(UNBUFFERED)
|
||||
ON ACTION get_title
|
||||
|
||||
CALL ui.Interface.frontCall("webcomponent","getTitle",
|
||||
["formonly.mywebcomp"],[rec.result])
|
||||
ON ACTION echo_string
|
||||
|
||||
LET rec.result = wc_call("formonly.mywebcomp", "echoString", "Hello!")
|
||||
ON ACTION echo_object
|
||||
|
||||
LET rec.result = wc_call("formonly.mywebcomp", "echoObject",
|
||||
'{"id":"235","name":"Doorman"}')
|
||||
END INPUT
|
||||
|
||||
END MAIN
|
||||
|
||||
FUNCTION wc_call(fn,fc,p1)
|
||||
DEFINE fn,fc,p1 STRING
|
||||
DEFINE res STRING
|
||||
TRY
|
||||
CALL ui.Interface.frontCall("webcomponent","call",[fn,fc,p1],[res])
|
||||
CATCH
|
||||
ERROR err_get(status)
|
||||
RETURN NULL
|
||||
END TRY
|
||||
RETURN res
|
||||
END FUNCTION
|
||||
@@ -0,0 +1,12 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>The title</title>
|
||||
<script language="JavaScript" type="text/javascript" src="wc_echo.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div style="background-color:green;width:3000px;height:3000px;" >
|
||||
here
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,16 @@
|
||||
var echoString = function(str) {
|
||||
return str;
|
||||
}
|
||||
|
||||
var echoObject = function(ostr) {
|
||||
var o = JSON.parse(ostr);
|
||||
return JSON.stringify(o);
|
||||
}
|
||||
|
||||
var onICHostReady = function(version) {
|
||||
|
||||
if ( version != 1.0 ) {
|
||||
alert('Invalid API version');
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
LAYOUT
|
||||
GRID
|
||||
{
|
||||
[wc1 ]
|
||||
[ ]
|
||||
[ ]
|
||||
Info: [f1 ]
|
||||
}
|
||||
END
|
||||
END
|
||||
ATTRIBUTES
|
||||
WEBCOMPONENT wc1 = FORMONLY.mywebcomp,
|
||||
COMPONENTTYPE="template", STRETCH=BOTH;
|
||||
EDIT f1 = FORMONLY.result;
|
||||
|
||||
END
|
||||
@@ -0,0 +1,2 @@
|
||||
FUNCTION welcometemplate()
|
||||
END FUNCTION
|
||||
@@ -0,0 +1,25 @@
|
||||
|
||||
|
||||
LAYOUT
|
||||
GRID
|
||||
{
|
||||
[wc ]
|
||||
[ ]
|
||||
[ ]
|
||||
[ ]
|
||||
[ ]
|
||||
[ ]
|
||||
[ ]
|
||||
[ ]
|
||||
[f2 ]
|
||||
[ ]
|
||||
}
|
||||
END
|
||||
END
|
||||
|
||||
ATTRIBUTES
|
||||
WEBCOMPONENT wc = FORMONLY.chart,
|
||||
COMPONENTTYPE = "template"; -- Identifies "mychart.html"
|
||||
BUTTONEDIT f2 = FORMONLY.location, ACTION=set_loc;
|
||||
|
||||
END
|
||||
Reference in New Issue
Block a user