Files
MBS/PROYECTOS/irdir/irprmt036.4gl
T

1858 lines
72 KiB
Plaintext

{
----------------------------------------------------------------------------
PROGRAMA : IRPRMT036
OBJETIVO : Programa Captura Documento Movimiento:
OTROS MOVIMIENTOS DE REPUESTOS
de Inventario de Repuesto.
PROGRAMADOR : Ing. Juan Fco. Soto (Copiado del IHPRMT036)
FECHA REALIZACION : Marzo 1, 1993.
----------------------------------------------------------------------------
}
IMPORT util
GLOBALS "irprgb000.4gl"
DEFINE cerrada CHAR(1)
DEFINE r_cantidad1,
r_cantidad,
total_cantidad,
recibida,
ordenada,
xdepartamento
INTEGER,
xusername, xsmtphost, xsmtpport, xpassword STRING
DEFINE porciento DECIMAL(8, 3)
DEFINE v_producto_id VARCHAR(100)
DEFINE
costo_estandar DECIMAL(12, 2),
codigo_mq LIKE irtb00008.cod_maq,
xnombre VARCHAR(100),
existminima DYNAMIC ARRAY OF FLOAT,
existenciaact DYNAMIC ARRAY OF FLOAT,
porcientoControl DYNAMIC ARRAY OF FLOAT,
enviaCorreo VARCHAR(2),
enviaEmailProd DYNAMIC ARRAY OF CHAR(2),
answer STRING, APIexistencia DECIMAL(12,2)
DEFINE CheckApi RECORD
checkDept BOOLEAN,
checkMaquina BOOLEAN,
checkRep BOOLEAN
END RECORD
DEFINE fakeData RECORD LIKE cotb00001.*
DEFINE data RECORD
rnumeroDoc,rcodMov,rtipo_cliente,num_oc,tipo_cliente,sec_cliente,bodega,bodega_destino INT,
nombre VARCHAR(100)
END RECORD
DEFINE answer_workorder INT
DEFINE req_check BOOLEAN
MAIN
DEFER INTERRUPT
CALL STARTLOG("irprmt36.log")
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CALL ARG_VAL(3) RETURNING impresor
CONNECT TO "smarmotech" USER usuarios USING clave
SELECT a.* INTO p_companias.* FROM companias a
CALL irprmt036()
END MAIN
FUNCTION irprmt036()
DEFINE fecha CHAR(8)
DEFINE hora CHAR(5)
CLEAR SCREEN
OPTIONS ERROR LINE 24, FORM LINE 4, COMMENT LINE 22, PROMPT LINE 23
LET fecha = TODAY USING "dd/mm/yyyy"
LET hora = TIME
LET lj = (80 - LENGTH(p_companias.nombre CLIPPED)) / 2
DISPLAY p_companias.nombre CLIPPED AT 2, lj ATTRIBUTE(REVERSE, BLUE)
OPEN FORM irfmmt036 FROM "irfmmt036"
DISPLAY FORM irfmmt036
MENU
ON ACTION nuevo
LET req_check = FALSE
INITIALIZE data.* TO NULL
CALL irautorizadas(usuarios) RETURNING data.*
DISPLAY data.*
IF data.rcodMov IS NOT NULL AND data.rcodMov != 0 THEN
LET req_check = TRUE
END IF
CALL irprad036()
ON ACTION buscar
LET pprograma = 'inprmt036'
CALL irprmfad036()
ON ACTION salir
EXIT MENU
END MENU
END FUNCTION
FUNCTION irprad036()
DEFINE tipos1 CHAR(1)
DEFINE i INT, query STRING
LET tipos1 = NULL
LET opc = NULL
LET int_flag = FALSE
INITIALIZE datos1.* TO NULL
LET checkapi.checkDept = FALSE
LET checkapi.checkMaquina = FALSE
LET checkapi.checkRep = FALSE
IF data.rcodMov IS NOT NULL AND data.rcodMov != 0 THEN
LET datos1.cod_mov = data.rcodMov
DISPLAY "entra a la condicion"
SELECT MAX(num_oc) INTO datos1.orden_compra
FROM irtb00057 WHERE numero_doc = data.rnumeroDoc
SELECT tipo INTO datos1.tipo
FROM cotb00014 WHERE num_oc = datos1.orden_compra
DECLARE buscar CURSOR FOR
SELECT cod_n, cod_grupo, cod_tipo, cod_sec, cantidad_2, descripcion,
unidad_med FROM irtb00058
WHERE numero_doc = data.rnumeroDoc
LET i = 1
FOREACH buscar INTO movi8[i].cod_n, movi8[i].cod_grupo, movi8[i].cod_tipo,
movi8[i].cod_sec, movi8[i].cantidad_2, movi8[i].descrip_esp, movi8[i].unidad_med
LET i = i + 1
DISPLAY "se agregan los items"
END FOREACH
IF datos1.cod_mov = 35 THEN
CALL msg(40)
END IF
SELECT requisiciones INTO transacc.requisiciones FROM irtb00005
WHERE @cod_mov = datos1.cod_mov AND @status_t IS NULL
SELECT a.descrip_mov,
a.status_mov,
a.control_departamento,
a.control_maquina
INTO datos1.descrip_mov,
transacc.status_mov,
transacc.control_departamento,
transacc.control_maquina
FROM irtb00005 a
WHERE @cod_mov = datos1.cod_mov AND @status_t IS NULL
DISPLAY transacc.control_departamento
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
END IF
END IF
#WHENEVER ERROR CONTINUE
#ERROR "CTRL-W PARA ELIMINAR DOCUMENTOS"
DIALOG ATTRIBUTE(UNBUFFERED)
INPUT BY NAME datos1.* ATTRIBUTE(WITHOUT DEFAULTS)
BEFORE INPUT
DISPLAY "entra al before input"
LET datos1.fecha = TODAY USING "dd/mm/yyyy"
DISPLAY BY NAME datos1.fecha
CALL busca_departamento()
DISPLAY "busco el departamento"
IF data.rcodMov IS NOT NULL AND data.rcodMov != 0 THEN
NEXT FIELD orden_compra
CALL dialog.setFieldActive('cod_mov', FALSE)
DISPLAY "codmov false"
ELSE
CALL dialog.setFieldActive('cod_mov', TRUE)
DISPLAY "cod_mov true"
END IF
DISPLAY "salio del codmov if"
AFTER FIELD fecha
IF datos1.fecha IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha
END IF
IF datos1.fecha > TODAY THEN
LET numero_msg = 189
CALL msg(numero_msg)
NEXT FIELD fecha
END IF
LET bandera = 0
LET p_fechas = datos1.fecha
CALL prd(p_fechas, usuarios) RETURNING bandera
IF bandera = 1 THEN
LET bandera = 0
NEXT FIELD fecha
END IF
AFTER FIELD orden_compra
IF datos1.orden_compra IS NOT NULL THEN
IF datos1.tipo IS NULL THEN
LET query = "SELECT cod_sp, cod_sp_sec, cierre
FROM cotb00014
WHERE num_oc = ",datos1.orden_compra,"
AND status_t IS NULL"
ELSE
LET query = "SELECT cod_sp, cod_sp_sec, cierre
FROM cotb00014
WHERE num_oc = ",datos1.orden_compra,"
AND tipo = ",datos1.tipo,"
AND status_t IS NULL"
END IF
DISPLAY query
PREPARE busqueda FROM query
EXECUTE busqueda INTO datos1.cod_sp, datos1.cod_sp_sec, cerrada
IF status >= 0 THEN
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
DISPLAY "FILTRO 1"
NEXT FIELD orden_compra
END IF
IF cerrada = "S" THEN
LET numero_msg = 74
CALL msg(numero_msg)
DISPLAY "FILTRO 2"
NEXT FIELD orden_compra
END IF
END IF
SELECT UNIQUE a.nom_sp
INTO datos1.nom_sp
FROM cotb00001 a
WHERE a.cod_sp = datos1.cod_sp
AND a.cod_sp_sec = datos1.cod_sp_sec
AND a.status_t IS NULL
IF status >= 0 THEN
IF STATUS = NOTFOUND THEN
SELECT a.nombre
INTO datos1.nom_sp
FROM vetb00004 a
WHERE a.tipo_cliente = datos1.cod_sp
AND a.sec_cliente = datos1.cod_sp_Sec
AND a.status_t IS NULL
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_sp
END IF
END IF
END IF
DISPLAY BY NAME datos1.nom_sp
END IF
AFTER FIELD cod_sp_Sec
IF datos1.cod_sp_Sec IS NOT NULL THEN
SELECT UNIQUE a.nom_sp
INTO datos1.nom_sp
FROM cotb00001 a
WHERE a.cod_sp = datos1.cod_sp
AND a.cod_sp_sec = datos1.cod_sp_sec
AND a.status_t IS NULL
IF STATUS = NOTFOUND THEN
SELECT a.nombre
INTO datos1.nom_sp
FROM vetb00004 a
WHERE a.tipo_cliente = datos1.cod_sp
AND a.sec_cliente = datos1.cod_sp_Sec
AND a.status_t IS NULL
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_sp
END IF
END IF
DISPLAY BY NAME datos1.nom_sp
END IF
AFTER FIELD cod_mov
IF datos1.cod_mov IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_mov
END IF
# Controla que el movimiento que se digite pertenezca a este formulario
SELECT UNIQUE a.usuario
FROM irtb00018 a
WHERE a.cod_mov = datos1.cod_mov AND a.usuario = usuarios
IF status = NOTFOUND THEN
LET numero_msg = 139
CALL msg(numero_msg)
NEXT FIELD cod_mov
END IF
IF datos1.cod_mov = 35 THEN
CALL msg(40)
NEXT FIELD cod_mov
END IF
SELECT requisiciones INTO transacc.requisiciones FROM irtb00005
WHERE @cod_mov = datos1.cod_mov AND @status_t IS NULL
IF transacc.requisiciones = 'SI' AND req_check = FALSE THEN
CALL msg(1672)
NEXT FIELD cod_mov
END IF
SELECT a.descrip_mov,
a.status_mov,
a.control_departamento,
a.control_maquina
INTO datos1.descrip_mov,
transacc.status_mov,
transacc.control_departamento,
transacc.control_maquina
FROM irtb00005 a
WHERE @cod_mov = datos1.cod_mov AND @status_t IS NULL
DISPLAY transacc.control_departamento
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
IF data.rcodMov IS NULL THEN
NEXT FIELD cod_mov
END IF
END IF
DISPLAY BY NAME datos1.descrip_mov
NEXT FIELD tipo
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
CALL movi8.clear()
SLEEP 3
RETURN
END IF
IF datos1.cod_mov = 35 THEN
CALL msg(40)
NEXT FIELD cod_mov
END IF
IF datos1.departamento IS NULL
AND transacc.control_departamento = "SI" THEN
CALL msg(16)
NEXT FIELD departamento
END IF
IF datos1.departamento IS NOT NULL
AND transacc.control_departamento = "NO" THEN
CALL msg(1665)
NEXT FIELD cod_mov
END IF
# Busca los articulos de la orden si el usuario la digita
IF datos1.orden_compra IS NOT NULL THEN
IF datos1.tipo IS NOT NULL THEN
LET query = "SELECT a.cod_n,
a.cod_grupo,
a.cod_tipo,
a.cod_sec,
a.cantidad
FROM cotb00015 a, irtb00002 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.num_oc = ",datos1.orden_compra,"
AND a.tipo = ",datos1.tipo,"
AND a.status_t IS NULL
AND b.status_t IS NULL"
ELSE
LET query = "SELECT a.cod_n,
a.cod_grupo,
a.cod_tipo,
a.cod_sec,
a.cantidad
FROM cotb00015 a, irtb00002 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.num_oc = ",datos1.orden_compra,"
AND a.status_t IS NULL
AND b.status_t IS NULL"
END IF
DECLARE busca CURSOR FROM query
LET idx = 1
FOREACH busca INTO movi8[idx].*
LET idx = idx + 1
END FOREACH
# CAPTURA ARREGLO DE LOS CODIGOS DE MATERIA PRIMA
CALL set_count(idx - 1)
END IF
INITIALIZE ant_art.* TO NULL
IF datos1.orden_compra IS NOT NULL AND datos1.departamento IS NULL THEN
NEXT FIELD departamento
END IF
END INPUT
INPUT ARRAY movi8 FROM s_movi1.* ATTRIBUTE(WITHOUT DEFAULTS)
BEFORE INPUT
CALL maquinas(-1)
CALL DIALOG.setFieldActive('orden_trabajo', FALSE)
ON ACTION buscaProd
CALL busca_prod1()
LET movi8[p_act].cod_n = arr_prod[idx].cod_n
LET movi8[p_act].cod_grupo = arr_prod[idx].cod_grupo
LET movi8[p_act].cod_tipo = arr_prod[idx].cod_tipo
LET movi8[p_act].cod_sec = arr_prod[idx].cod_sec
LET movi8[p_act].descrip_esp = arr_prod[idx].descrip_esp
DISPLAY movi8[p_act].cod_n TO s_movi1.cod_n
DISPLAY movi8[p_act].cod_grupo TO s_movi1.cod_grupo
DISPLAY movi8[p_act].cod_tipo TO s_movi1.cod_tipo
DISPLAY movi8[p_act].cod_sec TO s_movi1.cod_sec
DISPLAY movi8[p_act].descrip_esp TO s_movi1.descrip_esp
BEFORE ROW
LET p_act = arr_curr()
LET scr_l = scr_line()
AFTER ROW
IF movi8[p_act].cod_n IS NOT NULL
AND movi8[p_act].cod_grupo IS NOT NULL
AND movi8[p_act].cod_tipo IS NOT NULL
AND movi8[p_act].cod_sec IS NOT NULL THEN
LET p_act = arr_curr()
LET ant_art.cod_n = movi8[p_act].cod_n
LET ant_art.cod_grupo = movi8[p_act].cod_grupo
LET ant_art.cod_tipo = movi8[p_act].cod_tipo
LET ant_art.cod_sec = movi8[p_act].cod_sec
LET ant_art.maquina = movi8[p_act].codigo
FOR idx = 1 TO arr_count()
IF idx != p_act THEN
IF movi8[idx].cod_n = ant_art.cod_n
AND movi8[idx].cod_grupo = ant_art.cod_grupo
AND movi8[idx].cod_tipo = ant_art.cod_tipo
AND movi8[idx].cod_sec = ant_art.cod_sec
AND movi8[idx].codigo = ant_art.maquina THEN
LET numero_msg = 21
CALL msg(numero_msg)
LET p_act = p_act - 1
NEXT FIELD cod_n
END IF
END IF
END FOR
IF movi8[p_act].cantidad_2 IS NULL
AND movi8[p_act].cod_n IS NOT NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
END IF
LET ant_art.cod_n = movi8[p_act].cod_n
LET ant_art.cod_grupo = movi8[p_act].cod_grupo
LET ant_art.cod_tipo = movi8[p_act].cod_tipo
LET ant_art.cod_sec = movi8[p_act].cod_sec
LET ant_art.maquina = movi8[p_act].codigo
AFTER FIELD cod_n
LET p_act = arr_curr()
IF movi8[p_act].cod_n IS NOT NULL THEN
LET ant_art.cod_n = movi8[p_act].cod_n
LET ant_art.cod_grupo = movi8[p_act].cod_grupo
LET ant_art.cod_tipo = movi8[p_act].cod_tipo
LET ant_art.cod_sec = movi8[p_act].cod_sec
LET ant_art.maquina = movi8[p_act].codigo
FOR idx = 1 TO arr_count()
IF idx != p_act THEN
IF movi8[idx].cod_n = ant_art.cod_n
AND movi8[idx].cod_grupo = ant_art.cod_grupo
AND movi8[idx].cod_tipo = ant_art.cod_tipo
AND movi8[idx].cod_sec = ant_art.cod_sec
AND movi8[idx].codigo = ant_art.maquina THEN
LET p_act = p_act - 1
NEXT FIELD cod_grupo
END IF
END IF
END FOR
END IF
AFTER FIELD cod_grupo
IF movi8[p_act].cod_grupo IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
LET p_act = arr_curr()
LET ant_art.cod_n = movi8[p_act].cod_n
LET ant_art.cod_grupo = movi8[p_act].cod_grupo
LET ant_art.cod_tipo = movi8[p_act].cod_tipo
LET ant_art.cod_sec = movi8[p_act].cod_sec
LET ant_art.maquina = movi8[p_act].codigo
FOR idx = 1 TO arr_count()
IF idx != p_act THEN
IF movi8[idx].cod_n = ant_art.cod_n
AND movi8[idx].cod_grupo = ant_art.cod_grupo
AND movi8[idx].cod_tipo = ant_art.cod_tipo
AND movi8[idx].cod_sec = ant_art.cod_sec
AND movi8[idx].codigo = ant_art.maquina THEN
LET p_act = p_act - 1
NEXT FIELD cod_tipo
END IF
END IF
END FOR
AFTER FIELD cod_tipo
IF movi8[p_act].cod_tipo IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
LET p_act = arr_curr()
LET ant_art.cod_n = movi8[p_act].cod_n
LET ant_art.cod_grupo = movi8[p_act].cod_grupo
LET ant_art.cod_tipo = movi8[p_act].cod_tipo
LET ant_art.cod_sec = movi8[p_act].cod_sec
LET ant_art.maquina = movi8[p_act].codigo
FOR idx = 1 TO arr_count()
IF idx != p_act THEN
IF movi8[idx].cod_n = ant_art.cod_n
AND movi8[idx].cod_grupo = ant_art.cod_grupo
AND movi8[idx].cod_tipo = ant_art.cod_tipo
AND movi8[idx].cod_sec = ant_art.cod_sec
AND movi8[idx].codigo = ant_art.maquina THEN
LET p_act = p_act - 1
NEXT FIELD cod_sec
END IF
END IF
END FOR
# Verifica que el numero del documento de entrada no este en el archivo de
# movi8mientos.
AFTER FIELD cod_sec
LET p_act = arr_curr()
IF movi8[p_act].cod_sec IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
IF movi8[p_act].cod_n IS NULL
AND movi8[p_act].cod_sec IS NOT NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
IF movi8[p_act].cod_n IS NOT NULL
AND movi8[p_act].cod_grupo IS NOT NULL
AND movi8[p_act].cod_tipo IS NOT NULL
AND movi8[p_act].cod_sec IS NOT NULL THEN
SELECT a.descrip_esp, a.unidad_med, a.exist_min
INTO descrip1, descrip2, existminima[p_act]
FROM irtb00002 a
WHERE a.cod_n = movi8[p_act].cod_n
AND a.cod_grupo = movi8[p_act].cod_grupo
AND a.cod_tipo = movi8[p_act].cod_tipo
AND a.cod_sec = movi8[p_act].cod_sec
AND a.status_t IS NULL
AND a.status_t IS NULL
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
CALL existencia(
movi8[p_act].cod_n,
movi8[p_act].cod_grupo,
movi8[p_act].cod_tipo,
movi8[p_act].cod_sec)
RETURNING existen
IF existen IS NULL THEN
LET existen = 0
END IF
LET movi8[p_act].existencia = existen
DISPLAY movi8[p_act].existencia TO s_movi1[scr_l].existencia
# BUSCA LA MAQUINA PERTENECIENTE AL REPUESTO
# se quito este control porque entonces alguien debe de adicionar todos los repuestos a las maquinas
{ SELECT a.cod_maq INTO codigo_mq
FROM irtb00008 a
WHERE a.cod_n = movi8[p_act].cod_n AND
a.cod_grupo = movi8[p_act].cod_grupo AND
a.cod_tipo = movi8[p_act].cod_tipo AND
a.cod_sec = movi8[p_act].cod_sec AND
a.status_t IS NULL
IF STATUS = NOTFOUND THEN
LET numero_msg = 384
CALL msg(numero_msg)
#NEXT FIELD cod_sec
END IF
IF STATUS < 0 THEN
LET consulta = "N"
CALL busca_maquina()
LET movi8[p_act].codigo = busca_wd2[curr1].codigo
DISPLAY movi8[p_act].codigo TO s_movi1[scr_l].codigo
DISPLAY BY NAME maquinaria.nombre
END IF
}
#CONTROL COSTO
# LET bandera = 0
# CALL busca_costo()
# IF bandera = 1 THEN
# NEXT FIELD cod_sec
# END IF
END IF
LET movi8[p_act].descrip_esp = descrip1
LET movi8[p_act].unidad_med = descrip2 CLIPPED
DISPLAY movi8[p_act].descrip_esp TO s_movi1[scr_l].descrip_esp
DISPLAY movi8[p_act].unidad_med TO s_movi1[scr_l].unidad_med
LET ant_art.cod_n = movi8[p_act].cod_n
LET ant_art.cod_grupo = movi8[p_act].cod_grupo
LET ant_art.cod_tipo = movi8[p_act].cod_tipo
LET ant_art.cod_sec = movi8[p_act].cod_sec
LET ant_art.maquina = movi8[p_act].codigo
FOR idx = 1 TO arr_count()
IF idx != p_act THEN
IF movi8[idx].cod_n = ant_art.cod_n
AND movi8[idx].cod_grupo = ant_art.cod_grupo
AND movi8[idx].cod_tipo = ant_art.cod_tipo
AND movi8[idx].cod_sec = ant_art.cod_sec
AND movi8[idx].codigo = ant_art.maquina THEN
LET numero_msg = 21
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
END IF
END FOR
AFTER FIELD codigo
IF movi8[p_act].cod_n IS NOT NULL
AND movi8[p_act].cod_grupo IS NOT NULL
AND movi8[p_act].cod_tipo IS NOT NULL
AND movi8[p_act].cod_sec IS NOT NULL THEN
IF movi8[p_act].codigo IS NOT NULL THEN
LET xdepartamento = NULL
SELECT a.departamento
INTO xdepartamento
FROM irtb00009 a
WHERE a.codigo = movi8[p_act].codigo
IF xdepartamento IS NOT NULL THEN
LET datos1.departamento = xdepartamento
DISPLAY BY NAME datos1.departamento
END IF
END IF
IF movi8[p_act].codigo IS NOT NULL THEN
CALL DIALOG.setFieldActive('orden_trabajo',TRUE)
END IF
END IF
AFTER FIELD cantidad_2
IF movi8[p_act].cod_n IS NOT NULL
AND movi8[p_act].cod_grupo IS NOT NULL
AND movi8[p_act].cod_tipo IS NOT NULL
AND movi8[p_act].cod_sec IS NOT NULL THEN
IF movi8[p_act].cantidad_2 IS NULL
OR movi8[p_act].cantidad_2 <= 0 THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
IF transacc.status_mov = "2" THEN
CALL existencia(
movi8[p_act].cod_n,
movi8[p_act].cod_grupo,
movi8[p_act].cod_tipo,
movi8[p_act].cod_sec)
RETURNING existen
IF existen IS NULL THEN
LET existen = 0
END IF
IF existen < 0 THEN
LET numero_msg = 30
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
IF movi8[p_act].cantidad_2 > existen THEN
LET numero_msg = 30
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
LET existenciaact[p_act] = existen
END IF
END IF
AFTER FIELD orden_trabajo
IF movi8[p_act].orden_trabajo IS NOT NULL THEN
INITIALIZE fakedata.* TO NULL
CALL ApiMaintainC('CHECK', movi8[p_act].orden_trabajo, fakeData.*, usuarios) RETURNING answer
IF answer IS NULL OR answer = 0 THEN
CALL fgl_winmessage(
"ORDEN DE TRABAJO EN MAINTAINX",
"El ID de la orden de trabajo colocada no se encuentra en MaintainX",
"stop")
NEXT FIELD orden_trabajo
ELSE
LET answer_workorder = answer
END IF
END IF
AFTER FIELD num_emp
IF movi8[p_act].num_emp IS NOT NULL THEN
SELECT num_emp FROM adtb00003
WHERE num_emp = movi8[p_act].num_emp AND status_t IS NULL
IF status = NOTFOUND THEN
CALL msg(3)
NEXT FIELD num_emp
END IF
END IF
ON ACTION guardar ATTRIBUTE(TEXT = "Salvar", IMAGE = "save")
IF datos1.departamento IS NULL
AND transacc.control_departamento = "SI" THEN
DISPLAY BY NAME datos1.departamento
CALL msg(16)
NEXT FIELD departamento
END IF
FOR idx = 1 TO movi8.getLength()
IF movi8[idx].cod_n IS NOT NULL
AND movi8[idx].cod_grupo IS NOT NULL
AND movi8[idx].cod_tipo IS NOT NULL
AND movi8[idx].cod_sec IS NOT NULL THEN
IF movi8[idx].codigo IS NOT NULL THEN
LET xdepartamento = NULL
SELECT a.departamento
INTO xdepartamento
FROM irtb00009 a
WHERE a.codigo = movi8[idx].codigo
IF xdepartamento IS NOT NULL THEN
LET datos1.departamento = xdepartamento
DISPLAY BY NAME datos1.departamento
END IF
END IF
END IF
END FOR
IF movi8[p_act].cod_n IS NULL THEN
CALL limpia1()
END IF
IF movi8[p_act].cod_grupo IS NULL THEN
CALL limpia1()
END IF
IF movi8[p_act].cod_tipo IS NULL THEN
CALL limpia1()
END IF
IF movi8[p_act].cod_sec IS NULL THEN
CALL limpia1()
END IF
IF datos1.orden_compra IS NOT NULL THEN
# Busca la cantidad recibida de la orden especificada
SELECT SUM(cantidad_2)
INTO recibida
FROM irtb00006
WHERE orden_compra = datos1.orden_compra
AND tipo = datos1.tipo
# Busca la cantidad ordenada de la orden especificada
SELECT SUM(cantidad)
INTO ordenada
FROM cotb00015
WHERE num_oc = datos1.orden_compra
AND tipo = datos1.tipo
IF recibida IS NULL THEN
LET recibida = 0
END IF
IF ordenada IS NULL THEN
LET ordenada = 0
END IF
# Calculo de los porcentaje limites de las ordenes
LET porciento = ordenada * 0.10
LET recibida = recibida + total_cantidad
LET r_cantidad = ordenada - porciento
LET r_cantidad1 = ordenada + porciento
# Si la cantiad recibida producto de la sumatoria y subtracion del 10%
# es mayor o igual a la cantidad recibida y menor o igual a la cantidad de
# la orden cierra la orden
IF recibida >= r_cantidad AND recibida <= r_cantidad1 THEN
LET cerrada = "S"
END IF
END IF
LET nombre_d =
ui.ComboBox.forName('formonly.departamento')
.getTextOf(datos1.departamento)
CALL defecto(
usuarios, clave, impresor)
RETURNING imprime,
negrilla_on,
negrillas_of,
doble_on,
doble_off,
comp_on,
comp_off,
doce,
normal,
archivo,
copia
START REPORT formu4 TO archivo
# CONFIGURACION ENVIO EMAIL
DECLARE buscaemail CURSOR FOR
SELECT a.correo
FROM seg0003 a
WHERE a.aviso_existencia_minima_repuesto = "SI"
LET pccemail = NULL
LET toEmail = NULL
FOREACH buscaemail INTO PCCEMAIL
IF toEmail IS NULL THEN
LET toEmail = pccemail CLIPPED
ELSE
LET toEmail = toEmail CLIPPED, ";", pccemail CLIPPED
END IF
END FOREACH
LET subject = 'AVISO EXISTENCIA MINIMA ALMACEN REPUESTOS'
LET cuerpo_correo =
"<style>",
" table, td, th {
border: 1px solid black;
}
</style>",
"<table align='right' >",
"<thead><tr><th colspan='3'>CON EL DOCUMENTO&nbsp",
datos1.num_doc USING "&&&&&&&&",
"PERTENECIENTE AL MOVIMIENTO&nbsp(",
datos1.cod_mov USING "&&&",
")",
datos1.descrip_mov CLIPPED,
"</th></tr></thead>",
"<tr>",
"<th>PRODUCTOS</th>",
"<th>CANTIDAD TRANSACC</th>",
"<th>CANTIDAD MINIMA</th>",
"<th>EXISTENCIA</th></tr>",
"<tbody>"
LET enviaCorreo = "NO"
BEGIN WORK
# Selecciona el registro del ultimo numero de documento para chequear si
# existe para insertarlo en la tabla de secuencia
SELECT num_salida INTO datos1.num_doc FROM irtb00014 WHERE cod_mov = datos1.cod_mov
IF status = NOTFOUND THEN
LET datos1.num_doc = 0
INSERT INTO irtb00014
VALUES(datos1.num_doc,
datos1.cod_mov,
NULL,
SUSER_SNAME(),
GETDATE(),
NULL,
NULL)
END IF
LET datos1.num_doc = datos1.num_doc + 1
DISPLAY BY NAME datos1.num_doc ATTRIBUTE(BOLD)
UPDATE irtb00014
SET num_salida = datos1.num_doc,
us_mod = usuarios,
fech_mod = getdate()
WHERE cod_mov = datos1.cod_mov
#----------------------------------------------------------------------------
FOR idx = 1 TO arr_count()
IF movi8[idx].cod_n IS NOT NULL
AND movi8[idx].cod_grupo IS NOT NULL
AND movi8[idx].cod_tipo IS NOT NULL
AND movi8[idx].cod_sec IS NOT NULL
AND (movi8[idx].cantidad_2 IS NOT NULL
AND movi8[idx].cantidad_2 > 0) THEN
IF transacc.status_mov = "2" THEN
LET movi8[idx].cantidad_2 =
movi8[idx].cantidad_2 * -1
END IF
IF movi8[idx].codigo IS NULL
AND transacc.control_maquina = "SI" THEN
DISPLAY "AQUI 1"
ROLLBACK WORK
CALL msg(16)
NEXT FIELD codigo
END IF
IF movi8[idx].codigo IS NOT NULL
AND transacc.control_maquina = "NO" THEN
DISPLAY "AQUI 2"
ROLLBACK WORK
CALL msg(1664)
NEXT FIELD codigo
END IF
LET checkapi.checkDept = FALSE
LET checkapi.checkMaquina = FALSE
LET checkapi.checkRep = FALSE
--Verificar si el departamento esta en maintainX
INITIALIZE answer TO NULL
SELECT id_maintainx INTO answer
FROM adtb00001 WHERE departamento = datos1.departamento
IF answer IS NULL THEN
#CALL msg(16)
DISPLAY "AQUI 3"
ELSE
LET checkApi.checkDept = TRUE
END IF
--Verificar si la maquina esta en maintainX
INITIALIZE answer TO NULL
SELECT b.id_maintainX INTO answer FROM irtb00009 a, actb00001 b
WHERE a.id_codigo = b.codigo
AND a.codigo = movi8[idx].codigo
IF answer IS NULL THEN
#CALL msg(16)
DISPLAY "AQUI 4"
ELSE
LET checkApi.checkMaquina = TRUE
END IF
--Verificar si el repuesto esta en maintainX
INITIALIZE answer TO NULL
select id_maintainX INTO answer from irtb00002 WHERE
cod_n = movi8[idx].cod_n AND cod_grupo = movi8[idx].cod_grupo
AND cod_tipo = movi8[idx].cod_tipo AND cod_sec = movi8[idx].cod_sec
IF answer IS NULL THEN
#CALL msg(16)
DISPLAY "AQUI 5"
ELSE
LET checkApi.checkRep = TRUE
END IF
INSERT INTO irtb00006(
num_doc,
fecha,
conduce_no,
tipo,
orden_compra,
cod_sp,
cod_sp_sec,
cod_mov,
maquina,
cod_n,
cod_grupo,
cod_tipo,
cod_sec,
cantidad_2,
sec_a,
status_mov,
us_crea,
fech_crea,
bodega,
orden_trabajo,
num_req)
VALUES(datos1.num_doc,
datos1.fecha,
datos1.conduce_no,
datos1.tipo,
datos1.orden_compra,
datos1.cod_sp,
datos1.cod_sp_sec,
datos1.cod_mov,
movi8[idx].codigo,
movi8[idx].cod_n,
movi8[idx].cod_grupo,
movi8[idx].cod_tipo,
movi8[idx].cod_sec,
movi8[idx].cantidad_2,
datos1.departamento,
transacc.status_mov,
usuarios,
GETDATE(),
'1',
movi8[idx].orden_trabajo,
data.rnumeroDoc)
IF data.rcodMov IS NOT NULL AND data.rcodMov != 0 THEN
UPDATE irtb00057 SET estado = 'CERRADA', us_mod = usuarios, fech_mod = getdate()
WHERE numero_doc = data.rnumeroDoc AND cod_mov = data.rcodMov AND bodega = data.bodega
END IF
IF movi8[idx].num_emp IS NOT NULL THEN
LET v_producto_id =
movi8[idx].cod_n CLIPPED, "-" CLIPPED,
movi8[idx].cod_grupo CLIPPED, "-" CLIPPED,
movi8[idx].cod_tipo CLIPPED, "-" CLIPPED,
movi8[idx].cod_sec CLIPPED
INSERT INTO adtb00057(num_emp, fecha, codigo, documento, cantidad)
VALUES(movi8[idx].num_emp,
datos1.fecha,
REPLACE(v_producto_id, ' ',''),
datos1.num_doc,
ABS(movi8[idx].cantidad_2))
END IF
SELECT SUM(cantidad_2) INTO APIexistencia from irtb00006
WHERE cod_n = movi8[idx].cod_n and cod_grupo = movi8[idx].cod_grupo
and cod_tipo = movi8[idx].cod_tipo and cod_sec = movi8[idx].cod_sec
AND status_t IS NULL
SELECT exist_min INTO m_articulos.exist_min FROM irtb00002
WHERE cod_n = movi8[idx].cod_n AND cod_grupo = movi8[idx].cod_grupo
AND cod_tipo = movi8[idx].cod_tipo AND cod_sec = movi8[idx].cod_sec
AND status_t IS NULL
select costo_st INTO m_articulos.descrip_ing from irtb00013 where mes_fin = 12 and ano = YEAR(datos1.fecha)
and cod_n = movi8[idx].cod_n AND cod_grupo = movi8[idx].cod_grupo
AND cod_tipo = movi8[idx].cod_tipo AND cod_sec = movi8[idx].cod_sec
AND status_t IS NULL
# ESTE CONTROL ESTABA AL MOMENTO DE NOSOTROS DESARROLLAR EL API,
# POR SUGERENCIA DE CESAR FRANCISCO EN FECHA 08/05/2026 SOLO SE ESTA CONTROLANDO
# SI EL REPUESTO ESTA EN MAINTAINX
# IF checkapi.checkDept AND checkapi.checkMaquina AND checkapi.checkRep THEN
IF checkapi.checkRep THEN
LET m_articulos.existencia = APIexistencia
CALL ApiMaintainR('PATCH',answer, m_articulos.*, usuarios) RETURNING answer
IF answer != 1 THEN
DISPLAY "AQUI 6"
ROLLBACK WORK
END IF
END IF
# ---------------------------------------------------------------
# MaintainX: adjunta el repuesto de la linea a SU orden de trabajo.
# Cada linea del detalle se adjunta a su propia orden de trabajo.
# ---------------------------------------------------------------
IF movi8[idx].orden_trabajo IS NOT NULL THEN
# El repuesto debe existir en MaintainX; de lo contrario se aborta.
IF NOT checkapi.checkRep THEN
CALL fgl_winmessage(
"REPUESTO NO ESTA EN MAINTAINX",
"El repuesto de una linea con orden de trabajo no se encuentra en MaintainX. No se puede guardar el documento.",
"stop")
ROLLBACK WORK
NEXT FIELD cod_n
END IF
# Obtiene el ID real de la orden de trabajo en MaintainX para ESTA linea.
INITIALIZE fakeData.* TO NULL
CALL ApiMaintainC('CHECK', movi8[idx].orden_trabajo,
fakeData.*, usuarios) RETURNING answer
IF answer IS NULL OR answer = 0 THEN
CALL fgl_winmessage(
"ORDEN DE TRABAJO EN MAINTAINX",
"El ID de la orden de trabajo colocada no se encuentra en MaintainX.",
"stop")
ROLLBACK WORK
NEXT FIELD orden_trabajo
END IF
LET answer_workorder = answer
# Datos del repuesto que se adjuntara a la orden de trabajo.
SELECT UNIQUE id_maintainx INTO fakeData.id_maintainx
FROM irtb00002
WHERE cod_n = movi8[idx].cod_n
AND cod_grupo = movi8[idx].cod_grupo
AND cod_tipo = movi8[idx].cod_tipo
AND cod_sec = movi8[idx].cod_sec
AND status_t IS NULL
LET fakeData.contactID = movi8[idx].cantidad_2
LET fakeData.cod_sp_sec = datos1.departamento
LET fakeData.term_sp = datos1.cod_mov
CALL ApiMaintainC('PATCH_WORKORDER', answer_workorder,
fakeData.*, usuarios) RETURNING answer
IF answer != 1 THEN
CALL fgl_winmessage(
"ORDEN DE TRABAJO EN MAINTAINX",
"No se pudo adjuntar el repuesto a la orden de trabajo en MaintainX.",
"stop")
ROLLBACK WORK
NEXT FIELD orden_trabajo
END IF
END IF
IF transacc.status_mov = "2" THEN
CALL existencia(
movi8[idx].cod_n,
movi8[idx].cod_grupo,
movi8[idx].cod_tipo,
movi8[idx].cod_sec)
RETURNING existen
IF existen IS NULL THEN
LET existen = 0
END IF
IF existen < 0 THEN
DISPLAY "AQUI 7"
ROLLBACK WORK
LET numero_msg = 30
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
END IF
OUTPUT TO REPORT formu4(datos1.*, movi8[idx].*)
LET cuerpo_correo = cuerpo_correo CLIPPED, "<tr>"
# PROCEDIMIENTO ENVIO CORREO PARA LA EXISTENCIA MINIMA
LET existenciaact[idx] =
(existenciaact[idx] - (movi8[idx].cantidad_2 * -1))
IF existminima[idx] > 0 THEN
LET porcientocontrol[idx] =
(existminima[idx] / existenciaact[idx]) * 100
END IF
LET enviaEmailProd[idx] = "NO"
IF porcientocontrol[idx] >= 90
AND transacc.status_mov = 2
AND existminIma[idx] > 0 THEN
# INFORMACION PARA ENVIAR EL CORREO A LOS VENDEDORES
LET enviaCorreo = "SI"
LET CCEmail = "jsoto@marmotech.com.do"
LET cuerpo_correo =
cuerpo_correo CLIPPED,
"<td>",
movi8[idx].descrip_esp CLIPPED,
"</td>",
"<td>",
movi8[idx].cantidad_2 USING "##,###.##",
"</td>",
"<td>",
existminima[idx] USING "##,###.##",
"</td>",
"<td>",
existenciaact[idx] USING "##,###.##",
"</td>",
"</tr>"
LET enviaEmailProd[idx] = "SI"
END IF
IF porcientocontrol[idx] <= 0
AND transacc.status_mov = 2
AND existminIma[idx] > 0 THEN
# INFORMACION PARA ENVIAR EL CORREO A LOS VENDEDORES
LET enviaCorreo = "SI"
# LET TOEmail = "mantenimiento@marmotech.com.do"
LET CCEmail = "jsoto@marmotech.com.do"
LET cuerpo_correo =
cuerpo_correo CLIPPED,
"<td>",
movi8[idx].descrip_esp CLIPPED,
"</td>",
"<td>",
movi8[idx].cantidad_2 USING "##,###.##",
"</td>",
"<td>",
existminima[idx] USING "##,###.##",
"</td>",
"<td>",
existenciaact[idx] USING "##,###.##",
"</td>",
"</tr>"
LET enviaEmailProd[idx] = "SI"
END IF
IF transacc.status_mov = 2
AND existenciaact[idx] <= 0
AND enviaEmailProd[idx] = "NO" THEN
# INFORMACION PARA ENVIAR EL CORREO A LOS VENDEDORES
LET enviaCorreo = "SI"
# LET TOEmail = "mantenimiento@marmotech.com.do"
LET CCEmail = "jsoto@marmotech.com.do"
LET cuerpo_correo =
cuerpo_correo CLIPPED,
"<tr><td>EXISTENCIA EN CERO</td></tr>",
"<td>",
movi8[idx].descrip_esp CLIPPED,
"</td>",
"<td>",
movi8[idx].cantidad_2 USING "##,###.##",
"</td>",
"<td>",
existminima[idx] USING "##,###.##",
"</td>",
"<td>",
existenciaact[idx] USING "##,###.##",
"</td>",
"</tr>"
END IF
END IF
# SE DESACTIVO EL ENVIO POR CADA TRANSACCION QUE ESTE POR DEBAJO DEL MINIMO
LET enviaCorreo = "NO"
END FOR
IF enviaCorreo = "SI" THEN
LET cuerpo_correo =
cuerpo_correo CLIPPED, "</tbody></table></div>"
LET procedimiento =
"{ call cc_avisadespacho(?,?,?,?) }" CLIPPED
IF LENGTH(Toemail) > 2 THEN
LET xusername = 'notificacion@marmotech.com.do'
LET xsmtphost = 'smtp.office365.com'
LET xsmtpport = '587'
LET xpassword = 'Lmmjvsd2020'
LET toemail = 'jsoto@marmotech.com.do'
CALL enviaemail(
Toemail,
subject,
cuerpo_correo,
NULL,
xusername,
xsmtphost,
xsmtpport,
xpassword)
END IF
# CALL envia_correo(
# TOemail, CCEmail, cuerpo_correo, subject, procedimiento)
END IF
COMMIT WORK
FINISH REPORT formu4
RUN imprime
LET numero_msg = 1
CALL msg(numero_msg)
CALL movi8.clear()
INITIALIZE datos1.* TO NULL
INITIALIZE transacc.* TO NULL
CLEAR FORM
ON ACTION CANCEL ATTRIBUTE(TEXT = "Cancelar")
LET opt =
fgl_winquestion(
"Salir",
"Esta seguro de salir del programa?",
"no",
"YES|NO",
"question",
0)
IF opt = "YES" THEN
EXIT PROGRAM
ELSE
NEXT FIELD orden_compra
END IF
END INPUT
END DIALOG
END FUNCTION
FUNCTION limpia1()
LET movi8[p_act].cod_n = NULL
LET movi8[p_act].cod_grupo = NULL
LET movi8[p_act].cod_tipo = NULL
LET movi8[p_act].cod_sec = NULL
LET movi8[p_act].cantidad_2 = NULL
LET movi8[p_act].unidad_med = NULL
LET movi8[p_act].descrip_esp = NULL
DISPLAY movi8[p_act].cod_n TO s_movi1[scr_l].cod_n
DISPLAY movi8[p_act].cod_grupo TO s_movi1[scr_l].cod_grupo
DISPLAY movi8[p_act].cod_tipo TO s_movi1[scr_l].cod_tipo
DISPLAY movi8[p_act].cod_sec TO s_movi1[scr_l].cod_sec
DISPLAY movi8[p_act].cantidad_2 TO s_movi1[scr_l].cantidad_2
DISPLAY movi8[p_act].unidad_med TO s_movi1[scr_l].unidad_med
DISPLAY movi8[p_act].descrip_esp TO s_movi1[scr_l].descrip_esp
END FUNCTION
REPORT formu4(x, z)
DEFINE x RECORD
cod_mov LIKE irtb00006.cod_mov,
descrip_mov LIKE irtb00005.descrip_mov,
num_doc LIKE irtb00006.num_doc,
tipo LIKE irtb00006.tipo,
orden_compra LIKE irtb00006.orden_compra,
cod_sp LIKE irtb00006.cod_sp,
cod_sp_sec LIKE irtb00006.cod_sp_sec,
fecha LIKE irtb00006.fecha,
conduce_no VARCHAR(50),
secc_a LIKE irtb00006.sec_a,
nom_sp CHAR(30)
END RECORD
DEFINE z RECORD
cod_n LIKE intb00003.cod_n,
cod_grupo LIKE intb00003.cod_grupo,
cod_tipo LIKE intb00003.cod_tipo,
cod_sec LIKE intb00003.cod_sec,
cantidad_2 LIKE irtb00006.cantidad_2,
unidad_med LIKE irtb00002.unidad_med,
descrip_esp LIKE irtb00002.descrip_esp,
codigo LIKE irtb00008.cod_maq,
orden_trabajo INT,
existencia FLOAT,
num_emp SMALLINT
END RECORD
# DEFINE doce,normal,doble,doble_of,negras,negras_off CHAR(2)
DEFINE l, cuenta SMALLINT
OUTPUT
TOP MARGIN 0
LEFT MARGIN 0
BOTTOM MARGIN 1
PAGE LENGTH 33
FORMAT
PAGE HEADER
LET doce = ASCII 27, ASCII 77
LET doble = ASCII 14
LET doble_of = ASCII 20
LET negras = ASCII 27, ASCII 69
LET negras_off = ASCII 27, ASCII 70
PRINT doce
PRINT COLUMN 1, negras, doble, p_companias.nombre CLIPPED
PRINT COLUMN 65, "No. ", doble, x.num_doc USING "<<<<<<"
PRINT COLUMN 30,
"MOVIMIENTOS DE ALMACEN",
COLUMN 60,
x.fecha #using "dd/mm/yyyy"
SKIP 1 LINES
LET l = (80 - LENGTH(x.descrip_mov)) / 2
PRINT COLUMN l,
"(",
x.cod_mov USING "&&",
")",
x.descrip_mov,
negras_off
PRINT COLUMN 1,
"Suplidor : ",
x.cod_sp USING "&&",
"-",
x.cod_sp_sec USING "&&&&",
" ",
x.nom_sp
PRINT COLUMN 1, "Condude : ", x.conduce_no
PRINT COLUMN 1,
"Departamento: ",
x.secc_a USING "<<<<",
" ",
nombre_d
SKIP 1 LINES
PRINT COLUMN 1,
"---------------------------------------------------------------------"
PRINT COLUMN 58, "CANTIDAD"
# 2 SPACES, "EXITENCIA"
PRINT COLUMN 2,
doble,
"ARTICULOS",
doble_of CLIPPED,
COLUMN 51,
"REQUERIDA "
PRINT COLUMN 1,
"-----------------------------------------------------------------------"
SKIP 1 LINES
ON EVERY ROW
IF z.cod_n IS NOT NULL
AND z.cod_grupo IS NOT NULL
AND z.cod_tipo IS NOT NULL
AND z.cod_sec IS NOT NULL THEN
LET xnombre = NULL
SELECT a.nombre
INTO xnombre
FROM irtb00009 a
WHERE a.codigo = z.codigo AND a.status_t IS NULL
PRINT COLUMN 2,
z.cod_n USING "&",
"-",
COLUMN 4,
z.cod_grupo USING "&&&",
"-",
COLUMN 6,
z.cod_tipo USING "&&&",
"-",
COLUMN 9,
z.cod_sec USING "&&&",
COLUMN 17,
z.descrip_esp CLIPPED,
" ",
z.unidad_med,
COLUMN 58,
z.cantidad_2 USING "##,###.##",
COLUMN 68,
z.codigo USING "<<<",
" ",
xnombre
# 2 SPACES, z.existencia USING "<<,<<<.##"
END IF
PAGE TRAILER
PRINT COLUMN 1,
"------------------",
COLUMN 27,
"------------------",
COLUMN 50,
"------------------"
PRINT COLUMN 5,
"Entregado Por",
COLUMN 29,
"Recibido Por",
COLUMN 53,
"Aprobado Por"
SKIP 2 LINE
PRINT COLUMN 2, "Original: Contabilidad Copia: Almacen"
SKIP 1 LINE
#PRINT normal
END REPORT
FUNCTION anular()
DISPLAY "ELIMINACION REGISTROS " AT 3, 2 ATTRIBUTE(BLUE, REVERSE)
INPUT BY NAME datos1.cod_mov, datos1.num_doc
AFTER FIELD num_doc
IF datos1.num_doc IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD num_doc
END IF
SELECT UNIQUE fecha, tipo, orden_compra, sec_de, cod_sp, cod_sp_sec
INTO datos1.fecha,
datos1.tipo,
datos1.orden_compra,
datos1.departamento
FROM irtb00006
WHERE @num_doc = datos1.num_doc AND @cod_mov = datos1.cod_mov
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD num_doc
END IF
DISPLAY BY NAME datos1.*
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
EXIT INPUT
END IF
END INPUT
IF int_flag THEN
GOTO salir
END IF
PROMPT "Esta Seguro de Eliminar Este Documento (S/N)? " FOR ya
LET ya = upshift(ya)
IF ya = "S" THEN
UPDATE irtb00006
SET status_t = "E", us_mod = SUSER_SNAME(), fech_mod = GETDATE()
WHERE num_doc = datos1.num_doc AND cod_mov = datos1.cod_mov
END IF
LABEL salir:
DISPLAY "<Esc> Adiciona Registro" AT 3, 2 ATTRIBUTE(BLUE, REVERSE)
END FUNCTION
FUNCTION busca_prod1()
OPEN WINDOW busca_2
AT 8, 4
WITH FORM "irfmwd001"
ATTRIBUTE(BORDER, FORM LINE FIRST + 1, PROMPT LINE LAST)
CONSTRUCT BY NAME criterio
ON a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, a.descrip_esp
LET selec_pt =
"SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp, ",
" a.unidad_med,isnull(sum(b.cantidad_2),0) FROM irtb00002 a,irtb00006 b ",
"WHERE a.status_t IS NULL AND ",
" (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 ",
" b.status_t is null AND ",
criterio CLIPPED,
" GROUP BY a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp,a.unidad_med ",
" ORDER BY a.descrip_esp "
PREPARE comando_p FROM selec_pt
DECLARE busca_2 CURSOR FOR comando_p
LET idx = 1
FOREACH busca_2 INTO arr_prod[idx].*
LET idx = idx + 1
END FOREACH
CALL SET_COUNT(idx - 1)
DISPLAY ARRAY arr_prod TO s_prod.*
LET idx = ARR_CURR()
CLOSE WINDOW busca_2
END FUNCTION
FUNCTION busca_costo()
SELECT a.costo_st
FROM irtb00013 a
WHERE a.cod_n = movi8[p_act].cod_n
AND a.cod_grupo = movi8[p_act].cod_grupo
AND a.cod_tipo = movi8[p_act].cod_tipo
AND a.cod_sec = movi8[p_act].cod_sec
AND a.ano = YEAR(TODAY)
AND a.mes_fin = 12
AND a.status_t IS NULL
IF STATUS = NOTFOUND THEN
LET numero_msg = 351
CALL msg(numero_msg)
LET bandera = 1
END IF
END FUNCTION
FUNCTION irprmfad036()
DIALOG ATTRIBUTE(UNBUFFERED)
CONSTRUCT BY NAME criterio ON a.cod_mov, a.num_Doc
BEFORE CONSTRUCT
CALL busca_departamento()
ON ACTION busca_info
ATTRIBUTE(TEXT = "Busca Informacion", IMAGE = "find")
LET selec =
" select a.cod_mov,b.descrip_mov,a.num_doc,a.tipo,a.orden_compra,a.cod_sp,a.cod_sp_sec,a.fecha,",
" d.nombre,a.sec_a ,c.nom_sp FROM irtb00006 a LEFT OUTER JOIN cotb00001 c ON a.cod_sp=c.cod_sp and ",
" a.cod_sp_sec = c.cod_sp_sec LEFT OUTER JOIN irtb00009 d ON a.maquina = d.codigo, ",
"irtb00005 b ",
" WHERE ",
criterio CLIPPED,
" AND a.cod_mov = b.cod_mov AND a.status_t IS NULL "
PREPARE x1 FROM selec
DECLARE busca_ir SCROLL CURSOR FOR x1
OPEN busca_ir
FETCH FIRST busca_ir INTO datos1.*
CALL desplega_doc()
MENU "NAVEGACION"
COMMAND "Siguiente"
FETCH NEXT busca_ir INTO datos1.*
IF STATUS = NOTFOUND THEN
CALL msg(4)
CONTINUE MENU
END IF
CALL desplega_doc()
COMMAND "Anterior"
FETCH PREVIOUS busca_ir INTO datos1.*
IF STATUS = NOTFOUND THEN
CALL msg(5)
CONTINUE MENU
END IF
CALL desplega_doc()
COMMAND "Ultimo"
FETCH LAST busca_ir INTO datos1.*
IF STATUS = NOTFOUND THEN
CALL msg(4)
CONTINUE MENU
END IF
CALL desplega_doc()
COMMAND "Primero"
FETCH FIRST busca_ir INTO datos1.*
CALL desplega_doc()
COMMAND "Retornar"
EXIT MENU
END MENU
ON ACTION CANCEL
EXIT DIALOG
AFTER CONSTRUCT
END CONSTRUCT
END DIALOG
END FUNCTION
FUNCTION desplega_Doc()
DISPLAY BY NAME datos1.*
DECLARE busca_detalle CURSOR FOR
SELECT a.cod_n,
a.cod_grupo,
a.cod_tipo,
a.cod_sec,
a.cantidad_2,
b.unidad_med,
b.descrip_esp,
a.maquina,
a.orden_trabajo
FROM irtb00006 a, irtb00002 b
WHERE (a.cod_mov = datos1.cod_mov AND a.num_Doc = datos1.num_doc)
AND (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.status_t IS NULL
CALL maquinas(-1)
LET idx = 1
FOREACH busca_detalle INTO movi8[idx].*
LET idx = idx + 1
END FOREACH
DISPLAY ARRAY movi8 TO s_movi1.*
ON ACTION imprime ATTRIBUTE(TEXT = "Re-imprimir", IMAGE = "fa-print")
CALL defecto(
usuarios, clave, impresor)
RETURNING imprime,
negrilla_on,
negrillas_of,
doble_on,
doble_off,
comp_on,
comp_off,
doce,
normal,
archivo,
copia
START REPORT formu4 TO archivo
FOR idx = 1 TO movi8.getLength()
OUTPUT TO REPORT formu4(datos1.*, movi8[idx].*)
END FOR
FINISH REPORT formu4
RUN imprime
ON ACTION CANCEL
EXIT DISPLAY
AFTER DISPLAY
END DISPLAY
END FUNCTION
FUNCTION busca_maquina()
# LET formulario = fgl_getenv("FORMS") CLIPPED,"/codir/"
# LET formulario = formulario CLIPPED, "cofmwd002"
LET formulario = "irfmwd068"
OPEN WINDOW busqueda
AT 8, 8
WITH FORM "irfmwd068"
ATTRIBUTE(BORDER, FORM LINE FIRST + 2, COMMENT LINE LAST)
LET int_flag = FALSE
IF consulta = "S" THEN
CONSTRUCT criterio ON irtb00009.nombre FROM irtb00009.nombre
LET selec =
"SELECT codigo,nombre FROM irtb00009 ",
" WHERE ",
" status_t is null AND ",
criterio CLIPPED,
"ORDER BY 1 "
ELSE
{
LET selec = "SELECT a.codigo,a.nombre FROM irtb00009 a,irtb00008 b ",
" WHERE ",
" b.cod_n =7 AND ",
" b.cod_grupo = 0 AND ",
" b.cod_tipo = 0 AND ",
" b.cod_sec = 2 AND ",
" a.codigo = b.cod_maq ",
"ORDER BY 1 "
}
LET selec =
"SELECT a.codigo,a.nombre FROM irtb00009 a,irtb00008 b ",
" WHERE ",
" b.cod_n = '",
movi8[p_act].cod_n,
"' AND ",
" b.cod_grupo = '",
movi8[p_act].cod_grupo,
"' AND ",
" b.cod_tipo = '",
movi8[p_act].cod_tipo,
"' AND ",
" b.cod_sec = '",
movi8[p_act].cod_sec,
"' AND ",
" a.codigo = b.cod_maq ",
"ORDER BY 1 "
END IF
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
GO TO sale2
RETURN
END IF
PREPARE busca2 FROM selec
IF status >= 0 THEN
IF status = NOTFOUND THEN
LET numero_msg = 12
CALL msg(numero_msg)
END IF
END IF
DECLARE johnn2 CURSOR FOR busca2
LET idx = 1
FOREACH johnn2 INTO busca_wd2[idx].*
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
GO TO sale3
END IF
IF status = NOTFOUND THEN
EXIT FOREACH
END IF
LET idx = idx + 1
LABEL sale3:
END FOREACH
CALL set_count(idx - 1)
DISPLAY ARRAY busca_wd2 TO s_desp1.*
LET curr1 = arr_curr()
LET dm_rep.maquina = busca_wd2[curr1].codigo
LET maquinaria.codigo = busca_wd2[curr1].codigo
LET maquinaria.nombre = busca_wd2[curr1].nombre
LABEL sale2:
CLOSE WINDOW busqueda
END FUNCTION
FUNCTION existencia(codn, codgrupo, codtipo, codsec)
DEFINE
codn, codgrupo, codtipo, codsec INT,
pexistencia DEC(12, 5)
# EXISTENCIA
LET pexistencia = 0
SELECT ISNULL(SUM(a.cantidad_2), 0)
INTO pexistencia
FROM irtb00006 a
WHERE a.cod_n = codn
AND a.cod_grupo = codgrupo
AND a.cod_tipo = codtipo
AND a.cod_sec = codsec
AND a.status_t IS NULL
RETURN pexistencia
END FUNCTION