Commit inicial: fuentes MBS ERP (Genero 6) + .gitignore + docs/SETUP_PC_MBS.md

This commit is contained in:
2026-08-18 20:59:52 -04:00
commit 454973e269
5978 changed files with 2664094 additions and 0 deletions
+152
View File
@@ -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
+265
View File
@@ -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 }
+72
View File
@@ -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
+352
View File
@@ -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
+137
View File
@@ -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
+423
View File
@@ -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

+25
View File
@@ -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>
+15
View File
@@ -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>
+53
View File
@@ -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
+27
View File
@@ -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>
+38
View File
@@ -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
+12
View File
@@ -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>
+16
View File
@@ -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');
}
}
+16
View File
@@ -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
+2
View File
@@ -0,0 +1,2 @@
FUNCTION welcometemplate()
END FUNCTION
+25
View File
@@ -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