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
+644
View File
@@ -0,0 +1,644 @@
{
------------------------------------------------------------------------------
PROGRAMA : IPPRCS006
OBJETIVO : Programa Consulta Balances - Producto Terminado.
PROGRAMADOR : JUAN FCO SOTO
FECHA REALIZACION : AGOSTO 1997
DIRECTOR PROYECTO : JOSE ALFREDO PAULINO ALEJO
------------------------------------------------------------------------------
}
GLOBALS
"ipprgb000.4gl"
DEFINE csmov1 DYNAMIC ARRAY OF RECORD
descrip_mov1 VARCHAR(100),
num_doc CHAR(11),
num_oc INT,
num_compra INT,
fecha_2 LIKE iptb00006.fecha,
cantidad float,
entrada float,
salida float,
bodega1 CHAR(50),
balance FLOAT,
parent_id, child_id STRING
END RECORD
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CONNECT TO "smarmotech" USER usuarios USING clave
SELECT * INTO p_companias.* FROM companias
CALL ipprcs006()
END MAIN
FUNCTION ipprcs006()
DEFINE fecha1 char(8)
DEFINE hora1 char(5)
DEFINE flag BOOLEAN
LET fecha1 = today using "dd/mm/yyy"
LET hora1 = time
LET int_flag = false
LET bandera = 0
#WHENEVER ERROR CONTINUE
CLEAR SCREEN
OPTIONS
ERROR LINE 24,
FORM LINE 4,
COMMENT LINE 22,
PROMPT LINE 23
DISPLAY fecha1 AT 1,70 ATTRIBUTE (BLUE)
DISPLAY hora1 AT 2,73 ATTRIBUTE (BLUE)
OPEN FORM ipfmcs006 FROM "ipfmcs006"
DISPLAY FORM ipfmcs006
CALL ui.Interface.LoadStyles("mbsStyle")
INITIALIZE datos_gen.* TO NULL
CALL csmov1.clear()
LABEL volver:
INPUT BY NAME historico,datos_cons.cod_n,datos_cons.cod_grupo,datos_Cons.cod_tipo,
datos_cons.cod_sec,datos_cons.fech_in,datos_cons.fech_fi
BEFORE INPUT
CALL csmov1.clear()
BEFORE FIELD fech_in
LET datos_cons.fech_in = today using "dd/mm/yyyy"
DISPLAY BY NAME datos_cons.fech_in
BEFORE FIELD fech_fi
LET datos_cons.fech_fi = today using "dd/mm/yyyy"
DISPLAY BY NAME datos_cons.fech_fi
AFTER FIELD cod_grupo
IF datos_cons.cod_grupo IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_grupo
END IF
AFTER FIELD cod_tipo
IF datos_cons.cod_tipo IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_tipo
END IF
AFTER FIELD cod_sec
IF datos_cons.cod_n is not null and
datos_cons.cod_grupo is not null and
datos_cons.cod_tipo is not null and
datos_cons.cod_sec is not null THEN
IF historico = 'N' THEN
LET selec =
" SELECT descrip_esp,unidad_med ",
" FROM iptb00002 ",
" WHERE cod_n = ? and ",
" cod_grupo = ? and ",
" cod_tipo = ? and ",
" cod_sec = ? and ",
" status_t is null "
ELSE
LET selec =
" SELECT descrip_esp,unidad_med ",
" FROM historicomtech.dbo.iptb00002 ",
" WHERE cod_n = ? and ",
" cod_grupo = ? and ",
" cod_tipo = ? and ",
" cod_sec = ? and ",
" status_t is null "
END IF
PREPARE cmdbusca FROM selec
EXECUTE cmdbusca INTO descripcion,articulos.unidad_med
USING datos_cons.cod_n,datos_cons.cod_grupo,
datos_cons.cod_tipo,datos_cons.cod_sec
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
CLEAR FORM
NEXT FIELD cod_n
END IF
LET descripcion = descripcion CLIPPED," "
DISPLAY BY NAME descripcion,articulos.unidad_med
END IF
AFTER FIELD fech_in
IF datos_cons.fech_in IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fech_in
END IF
AFTER FIELD fech_fi
IF datos_cons.fech_fi IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fech_fi
END IF
IF datos_cons.fech_in > datos_cons.fech_fi THEN
LET numero_msg = 36
CALL msg(numero_msg)
NEXT FIELD fech_in
END IF
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
CLEAR SCREEN
RETURN
END IF
EXIT INPUT
END INPUT
CONSTRUCT criterio ON a.bodega FROM bodega
BEFORE CONSTRUCT
LET k1 = '1'
CALL bodegas(k1)
AFTER CONSTRUCT
EXIT CONSTRUCT
END CONSTRUCT
LET balance = 0
DISPLAY "Buscando Informacion... Espere Por Favor" AT 24,2 ATTRIBUTE (BLUE)
IF historico = 'N' THEN
LET selec =
"SELECT SUM(a.cantidad_2) FROM iptb00006 a ",
" WHERE a.cod_n =? and a.cod_grupo = ? AND ",
" a.cod_tipo = ? and a.cod_sec = ? and ",criterio CLIPPED,
" and a.fecha < ? and a.status_t is null "
ELSE
LET selec =
"SELECT SUM(a.cantidad_2) FROM historicomtech.dbo.iptb00006 a ",
" WHERE a.cod_n =? and a.cod_grupo = ? AND ",
" a.cod_tipo = ? and a.cod_sec = ? and ",criterio CLIPPED,
" AND a.fecha < ? and a.status_t is null "
END IF
PREPARE cmdbalance FROM selec
EXECUTE cmdbalance INTO balance
USING datos_cons.cod_n,datos_cons.cod_grupo,
datos_cons.cod_tipo,datos_cons.cod_sec,
datos_cons.fech_in
IF balance IS NULL THEN
LET balance = 0
END IF
DISPLAY balance TO balance_ini
IF historico = 'N' THEN
LET selec =
"SELECT '('+cast(c.cod_mov as char(3))+')'+RTRIM(c.descrip_mov), a.num_doc,a.num_oc,a.orden_compra,a.fecha,",
"SUM(a.cantidad_2),'0','0','('+cast(b.cod_bodega as char(1))+')'+RTRIM(b.descripcion) FROM iptb00006 a,intb00009 b,iptb00005 c ",
"WHERE a.cod_n = ? and a.cod_grupo=? and ",
" a.cod_tipo =? and a.cod_sec=? and ",
" a.status_t is null and a.fecha between ? and ? and ",
" a.cod_mov = c.cod_mov and ",
" a.bodega = b.cod_bodega and ",criterio CLIPPED,
" GROUP BY a.num_doc,a.fecha,a.orden_compra,a.num_oc,c.cod_mov,c.descrip_mov,b.cod_bodega,b.descripcion ",
" ORDER BY a.fecha,a.num_doc "
ELSE
LET selec =
"SELECT '('+cast(c.cod_mov as char(3))+')'+RTRIM(c.descrip_mov), a.num_doc,a.num_oc,a.orden_compra,a.fecha,",
"SUM(a.cantidad_2),'0','0','('+cast(b.cod_bodega as char(1))+')'+RTRIM(b.descripcion) FROM historicomtech.dbo.iptb00006 a,historicomtech.dbo.intb00009 b,iptb00005 c ",
"WHERE a.cod_n = ? and a.cod_grupo=? and ",
" a.cod_tipo =? and a.cod_sec=? and ",
" a.status_t is null and a.fecha between ? and ? and ",
" a.cod_mov = c.cod_mov and ",
" a.bodega = b.cod_bodega and ",criterio CLIPPED,
" GROUP BY a.num_doc,a.fecha,a.orden_compra,c.cod_mov,c.descrip_mov,b.cod_bodega,b.descripcion ",
" ORDER BY a.fecha,a.num_doc "
END IF
PREPARE cmdtrx FROM selec
DECLARE jhonn_1 CURSOR FOR cmdtrx
OPEN jhonn_1 USING datos_cons.cod_n,datos_cons.cod_grupo,
datos_cons.cod_tipo,datos_cons.cod_sec,
datos_cons.fech_in, datos_cons.fech_fi
LET idx = 1
FOREACH jhonn_1 INTO csmov1[idx].*
IF STATUS = NOTFOUND THEN
EXIT FOREACH
RETURN
END IF
LET flag = FALSE
LET balance = balance + csmov1[idx].cantidad
# LET csmov1[idx].num_oc = csmov.num_oc
# LET csmov1[idx].num_compra = csmov.num_compra
# LET csmov1[idx].fecha_2 = csmov.fecha_1
# LET csmov1[idx].balance = balance USING "-,---,---.###"
# LET csmov1[idx].num_doc = "(",csmov.cod_mov using "&&",")"," ",
# csmov.num_doc USING "&&&&&&"
# LET csmov1[idx].bodega1 = csmov.bodega
IF csmov1[idx].cantidad < 0 THEN
LET csmov1[idx].entrada = null
LET csmov1[idx].salida = csmov1[idx].cantidad
ELSE
LET csmov1[idx].salida = null
LET csmov1[idx].entrada = csmov1[idx].cantidad
END IF
LET csmov1[idx].balance = balance
CALL LlenarHijos() RETURNING flag
IF flag != TRUE THEN
LET idx = idx + 1
ELSE
END IF
END FOREACH
LET balance = 0
CALL set_count(idx - 1)
DISPLAY ARRAY csmov1 TO s_csmov.*
CALL csmov1.clear()
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
CLEAR SCREEN
RETURN
END IF
CLEAR FORM
DISPLAY " " AT 13,6
DISPLAY " " AT 13,60
GOTO volver
END FUNCTION
FUNCTION llenarHijos()
DEFINE MirrorLocation DYNAMIC ARRAY OF RECORD
seccion STRING,
cod_seccion INT,
existenciaSec DECIMAL(12, 5),
tramo STRING,
cod_tramo INT,
existenciaTram DECIMAL(12, 5),
fila STRING,
cod_fila INT,
existenciaFil DECIMAL(12, 5),
posicion STRING,
cod_pos INT,
existenciaPos DECIMAL(12, 5)
END RECORD
DEFINE Container DYNAMIC ARRAY OF RECORD
seccion STRING,
cod_seccion INT,
existenciaSec DECIMAL(12, 5),
tramo STRING,
cod_tramo INT,
existenciaTram DECIMAL(12, 5),
fila STRING,
cod_fila INT,
existenciaFil DECIMAL(12, 5),
posicion STRING,
cod_pos INT,
existenciaPos DECIMAL(12, 5)
END RECORD
DEFINE checking, i,z, bodegaCont INT
DEFINE counterSec, counterTram, counterFil, counterPos INT
DEFINE NextTree, NextTree2, index2 BOOLEAN
CONSTANT firstID = 1
DEFINE tok base.StringTokenizer, SplittedMov, SplittedBodega DYNAMIC ARRAY OF STRING
LET counterSec = 2
LET counterTram = 1
LET counterFil = 1
LET counterPos = 1
LET nextTree = FALSE
LET nextTree2 = FALSE
LET index2 = FALSE
INITIALIZE checking, i, z, bodegaCont TO NULL
LET i = 1
LET tok = base.StringTokenizer.create(csmov1[idx].descrip_mov1, "()")
WHILE tok.hasMoreTokens()
LET SplittedMov[i] = tok.nextToken().trim() CLIPPED
LET i = i + 1
END WHILE
LET i = 1
LET tok = base.StringTokenizer.create(csmov1[idx].bodega1, "()")
WHILE tok.hasMoreTokens()
LET SplittedBodega[i] = tok.nextToken().trim() CLIPPED
LET i = i + 1
END WHILE
#SELECT DISTINCT a.cod_bodega
# INTO bodegaCont
# FROM intb00009 a INNER JOIN iptb00006 b ON a.cod_bodega = b.bodega
# WHERE a.descripcion = "'"|| SplittedBodega[2] ||"'"
SELECT COUNT(*) INTO checking FROM iptb00062 WHERE (cod_mov = SplittedMov[1] AND num_doc = csmov1[idx].num_doc
AND cod_n = datos_cons.cod_n AND cod_grupo = datos_cons.cod_grupo
AND cod_tipo = datos_cons.cod_tipo AND cod_sec = datos_cons.cod_sec)
AND status_t IS NULL
IF checking > 0 THEN
LET index2 = TRUE
LET csmov1[idx].parent_id = NULL
LET csmov1[idx].child_id = FirstID
DECLARE query CURSOR FOR
SELECT
RTRIM(a.descripcion) AS seccion,
a.cod_seccion as cod_seccion,
(SELECT SUM(cantidad2)
FROM iptb00062
WHERE (cod_mov = t.cod_mov and num_doc = t.num_doc and cod_n = t.cod_n and cod_grupo = t.cod_grupo and cod_tipo = t.cod_tipo and cod_sec = t.cod_sec AND bodega = t.bodega) AND (cod_seccion = t.cod_seccion)) AS suma_cantidad2_seccion,
RTRIM(b.descripcion) AS tramo,
b.cod_tramo as cod_tramo,
(SELECT SUM(cantidad2)
FROM iptb00062
WHERE (cod_mov = t.cod_mov and num_doc = t.num_doc and cod_n = t.cod_n and cod_grupo = t.cod_grupo and cod_tipo = t.cod_tipo and cod_sec = t.cod_sec AND bodega = t.bodega) AND (cod_seccion = t.cod_seccion AND cod_tramo = t.cod_tramo)) AS suma_cantidad2_tramo,
RTRIM(c.titulo) AS fila,
c.cod_fila as cod_fila,
(SELECT SUM(cantidad2)
FROM iptb00062
WHERE (cod_mov = t.cod_mov and num_doc = t.num_doc and cod_n = t.cod_n and cod_grupo = t.cod_grupo and cod_tipo = t.cod_tipo and cod_sec = t.cod_sec AND bodega = t.bodega) AND (cod_seccion = t.cod_seccion AND cod_tramo = t.cod_tramo AND cod_fila = t.cod_fila)) AS suma_cantidad2_fila,
RTRIM(d.titulo) AS posicion,
d.cod_pos as cod_pos,
(SELECT SUM(cantidad2)
FROM iptb00062
WHERE (cod_mov = t.cod_mov and num_doc = t.num_doc and cod_n = t.cod_n and cod_grupo = t.cod_grupo and cod_tipo = t.cod_tipo and cod_sec = t.cod_sec AND bodega = t.bodega) AND (cod_seccion = t.cod_seccion AND cod_tramo = t.cod_tramo AND cod_fila = t.cod_fila AND cod_pos = t.cod_pos)) AS suma_cantidad2_pos
FROM
iptb00062 t
INNER JOIN intb00010 a ON t.bodega = a.cod_bodega AND t.cod_seccion = a.cod_seccion
INNER JOIN intb00043 b ON t.bodega = b.cod_bodega AND t.cod_seccion = b.cod_seccion AND t.cod_tramo = b.cod_tramo
INNER JOIN intb00045 c ON t.bodega = c.cod_bodega AND t.cod_seccion = c.cod_seccion AND t.cod_tramo = c.cod_tramo AND t.cod_fila = c.cod_fila
INNER JOIN intb00046 d ON t.bodega = d.cod_bodega AND t.cod_seccion = d.cod_seccion AND t.cod_tramo = d.cod_tramo AND t.cod_fila = d.cod_fila AND t.cod_pos = d.cod_pos
WHERE
( t.cod_mov = SplittedMov[1] AND t.num_doc = csmov1[idx].num_doc AND t.cod_n = datos_cons.cod_n AND t.cod_grupo = datos_cons.cod_grupo AND t.cod_tipo = datos_cons.cod_tipo AND t.cod_sec = datos_cons.cod_sec) AND t.status_t IS NULL
GROUP BY
t.cod_seccion, t.cod_tramo, t.cod_fila, t.cod_pos, a.cod_seccion, a.descripcion, b.cod_tramo, b.descripcion, c.cod_fila, c.titulo, d.cod_pos, d.titulo, t.bodega, t.cod_n, t.cod_grupo, t.cod_tipo, t.cod_sec, t.cod_mov, t.num_doc
ORDER BY
t.cod_seccion, t.cod_tramo, t.cod_fila, t.cod_pos;
LET i = 2
LET z = 1
INITIALIZE MirrorLocation TO NULL
FOREACH query INTO Container[z].*
IF container[z].existenciaSec != 0
AND container[z].existenciaTram != 0
AND container[z].existenciaFil != 0
AND container[z].existenciaPos != 0 THEN
LET MirrorLocation[i] = Container[z]
LET i = i + 1
END IF
LET z = z + 1
END FOREACH
LET idx = idx + 1
LET csmov1[idx].descrip_mov1 = " UBICACIONES "
LET csmov1[idx].parent_id = firstID
LET csmov1[idx].child_id = firstID ||"."||firstID
LET idx = idx + 1
LET i = 2
WHILE i <= mirrorLocation.getLength()
IF mirrorLocation[i].seccion = mirrorLocation[i - 1].seccion THEN
IF mirrorLocation[i].tramo = mirrorLocation[i - 1].tramo THEN
IF mirrorLocation[i].fila = mirrorLocation[i - 1].fila THEN
IF mirrorLocation[i].posicion
= mirrorLocation[i - 1].posicion THEN
DISPLAY "nothing happened" --se supone que gracias al
--query esto nunca saldrá
ELSE
LET counterPos = counterPos + 1
LET csmov1[idx].descrip_mov1 =
" ",
mirrorLocation[i].posicion,
" || Cantidad:",
mirrorLocation[i].existenciaPos
LET csmov1[idx].parent_id =
firstID
|| "."
|| counterSec
|| "."
|| counterTram
|| "."
|| counterFil
LET csmov1[idx].child_id =
firstID
|| "."
|| counterSec
|| "."
|| counterTram
|| "."
|| counterFil
|| "."
|| counterPos
LET NextTree = TRUE
END IF
ELSE
IF nextTree = TRUE THEN
LET counterPos = 1
LET nextTree = FALSE
END IF
LET counterFil = counterFil + 1
LET csmov1[idx].descrip_mov1 =
" ",
mirrorLocation[i].fila,
" || Cantidad:",
mirrorLocation[i].existenciaFil
LET csmov1[idx].parent_id =
firstID ||"." || counterSec || "." || counterTram
LET csmov1[idx].child_id =
firstID
||"."
|| counterSec
|| "."
|| counterTram
|| "."
|| counterFil
LET idx = idx + 1
LET csmov1[idx].descrip_mov1 =
" ",
mirrorLocation[i].posicion,
" || Cantidad:",
mirrorLocation[i].existenciapos
LET csmov1[idx].parent_id = csmov1[idx - 1].child_id
LET csmov1[idx].child_id =
csmov1[idx - 1].child_id || "." || counterPos
LET nextTree2 = TRUE
END IF
ELSE
IF nextTree2 THEN
LET counterPos = 1
LET counterFil = 1
LET nextTree2 = FALSE
END IF
LET counterTram = counterTram + 1
LET csmov1[idx].descrip_mov1 =
" ",
mirrorLocation[i].tramo,
" || Cantidad:",
mirrorLocation[i].existenciatram
LET csmov1[idx].parent_id = firstID || "." || counterSec
LET csmov1[idx].child_id = firstID || "." || counterSec || "." || counterTram
LET idx = idx + 1
LET csmov1[idx].descrip_mov1 =
" ",
mirrorLocation[i].fila,
" || Cantidad:",
mirrorLocation[i].existenciafil
LET csmov1[idx].parent_id = csmov1[idx - 1].child_id
LET csmov1[idx].child_id =
csmov1[idx - 1].child_id || "." || counterFil
LET idx = idx + 1
LET csmov1[idx].descrip_mov1 =
" ",
mirrorLocation[i].posicion,
" || Cantidad:",
mirrorLocation[i].existenciapos
LET csmov1[idx].parent_id = csmov1[idx - 1].child_id
LET csmov1[idx].child_id =
csmov1[idx - 1].child_id || "." || counterPos
END IF
ELSE
LET counterSec = counterSec + 1
LET csmov1[idx].descrip_mov1 =
" ",
mirrorLocation[i].seccion,
" || Cantidad:",
mirrorLocation[i].existenciaSec
LET csmov1[idx].parent_id = firstID
LET csmov1[idx].child_id = firstID || "." || counterSec
LET idx = idx + 1
LET csmov1[idx].descrip_mov1 =
" ",
mirrorLocation[i].tramo,
" || Cantidad:",
mirrorLocation[i].existenciatram
LET csmov1[idx].parent_id = csmov1[idx - 1].child_id
LET csmov1[idx].child_id = csmov1[idx - 1].child_id || "." || firstID
LET idx = idx + 1
LET csmov1[idx].descrip_mov1 =
" ",
mirrorLocation[i].fila,
" || Cantidad:",
mirrorLocation[i].existenciaFil
LET csmov1[idx].parent_id = csmov1[idx - 1].child_id
LET csmov1[idx].child_id = csmov1[idx - 1].child_id || "." || firstID
LET idx = idx + 1
LET csmov1[idx].descrip_mov1 =
" ",
mirrorLocation[i].posicion,
" || Cantidad:",
mirrorLocation[i].existenciaPos
LET csmov1[idx].parent_id = csmov1[idx - 1].child_id
LET csmov1[idx].child_id = csmov1[idx - 1].child_id || "." || firstID
LET counterTram = 1
LET counterFil = 1
LET counterPos = 1
END IF
LET idx = idx + 1
LET i = i + 1
END WHILE
END IF
RETURN index2
END FUNCTION