811 lines
30 KiB
Plaintext
811 lines
30 KiB
Plaintext
#-----------------------------------------------------------------------
|
|
# Esta funcion captura los datos de la tabla de fechas y cantidades de
|
|
# Entregas de los articulos de las ordenes de compras.
|
|
#---------------------------------------------------------------------
|
|
|
|
GLOBALS "coprgb000.4gl"
|
|
|
|
DEFINE busca_parcial DYNAMIC ARRAY OF RECORD
|
|
secuencia INT,
|
|
cod_n SMALLINT,
|
|
cod_grupo SMALLINT,
|
|
cod_tipo SMALLINT,
|
|
cod_sec SMALLINT,
|
|
cantidad DEC(12,5),
|
|
fech_emb DATE,
|
|
fech_ent DATE
|
|
END RECORD,
|
|
m_articulos1 RECORD LIKE istb00002.*,
|
|
datos_gen RECORD
|
|
num_doc INT,
|
|
fecha DATE
|
|
END RECORD
|
|
FUNCTION parcial(fecha_orden,xdia_aduana,xnumero_orden,xtipo,xcodn,xcodgrupo,xcodtipo,xcodsec,xnum_req,xcantidad)
|
|
DEFINE xcodn,xcodgrupo,xcodtipo,xcodsec,xnum_req INT,
|
|
xcantidad DEC(12,5)
|
|
|
|
DEFINE usuarios RECORD
|
|
us_crea CHAR(50),
|
|
fech_crea LIKE cotb00025.fech_crea
|
|
END RECORD,
|
|
|
|
fecha_orden DATE,
|
|
xdia_aduana SMALLINT,
|
|
xnumero_orden INT,
|
|
xtipo CHAR(2)
|
|
|
|
DEFINE id_num DYNAMIC ARRAY OF INTEGER
|
|
|
|
DEFINE sale CHAR(1)
|
|
DEFINE ant_fecha DYNAMIC ARRAY OF DATE
|
|
#WHENEVER ERROR CONTINUE
|
|
OPEN WINDOW parcial1 AT 8,15 WITH FORM "cofmfu009"
|
|
ATTRIBUTE (BORDER,FORM LINE FIRST + 1, comment line last)
|
|
|
|
CALL busca_parcial.clear()
|
|
|
|
LET requi = arr_ordenes[curr].num_req
|
|
DECLARE recurso CURSOR FOR
|
|
SELECT secuencia,cod_n,cod_grupo,cod_tipo,cod_sec,cantidad,fech_emb,
|
|
fech_ent,us_crea,fech_crea FROM cotb00025
|
|
WHERE num_oc = xnumero_orden and tipo = xtipo and
|
|
num_req = xnum_req and
|
|
cod_n = xcodn and
|
|
cod_grupo = xcodgrupo and
|
|
cod_tipo=xcodtipo and
|
|
cod_sec=xcodsec and
|
|
status_t is null
|
|
|
|
LET idx = 1
|
|
FOREACH recurso INTO busca_parcial[idx].*,usuarios.*,id_num[idx]
|
|
# CALL integridad()
|
|
# IF bandera = 1 THEN
|
|
# LET bandera = 0
|
|
# RETURN m_articulos1.cod_n,m_articulos1.cod_grupo,m_articulos1.cod_tipo,m_articulos1.cod_sec,m_articulos1.descrip_esp,m_articulos1.unidad_med
|
|
# END IF
|
|
|
|
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
IF idx = 1 THEN
|
|
LET busca_parcial[idx].cod_n=xcodn
|
|
LET busca_parcial[idx].cod_grupo=xcodgrupo
|
|
LET busca_parcial[idx].cod_tipo=xcodtipo
|
|
LET busca_parcial[idx].cod_sec=xcodsec
|
|
LET busca_parcial[idx].cantidad=xcantidad
|
|
END IF
|
|
LABEL vuelve:
|
|
LET cantidad_total = 0
|
|
LET sale = null
|
|
|
|
INPUT ARRAY busca_parcial WITHOUT DEFAULTS FROM s_parcial.*
|
|
BEFORE ROW
|
|
LET fila = scr_line()
|
|
LET linea = arr_curr()
|
|
|
|
LET busca_parcial[linea].secuencia=linea
|
|
LET busca_parcial[linea].cod_n = xcodn
|
|
LET busca_parcial[linea].cod_grupo = xcodgrupo
|
|
LET busca_parcial[linea].cod_tipo = xcodtipo
|
|
LET busca_parcial[linea].cod_sec = xcodsec
|
|
|
|
DISPLAY busca_parcial[linea].cod_n to s_parcial[fila].cod_n
|
|
DISPLAY busca_parcial[linea].cod_grupo to s_parcial[fila].cod_grupo
|
|
DISPLAY busca_parcial[linea].cod_tipo to s_parcial[fila].cod_tipo
|
|
DISPLAY busca_parcial[linea].cod_sec to s_parcial[fila].cod_sec
|
|
|
|
BEFORE FIELD fech_emb
|
|
LET ant_fecha[linea] = busca_parcial[linea].fech_emb
|
|
LET anterior[linea].fech_emb = busca_parcial[linea].fech_emb
|
|
BEFORE FIELD cantidad
|
|
|
|
|
|
LET busca_parcial[linea].cod_n = xcodn
|
|
LET busca_parcial[linea].cod_grupo = xcodgrupo
|
|
LET busca_parcial[linea].cod_tipo = xcodtipo
|
|
LET busca_parcial[linea].cod_sec = xcodsec
|
|
|
|
DISPLAY busca_parcial[linea].cod_n to s_parcial[fila].cod_n
|
|
DISPLAY busca_parcial[linea].cod_grupo to s_parcial[fila].cod_grupo
|
|
DISPLAY busca_parcial[linea].cod_tipo to s_parcial[fila].cod_tipo
|
|
DISPLAY busca_parcial[linea].cod_sec to s_parcial[fila].cod_sec
|
|
|
|
LET anterior[linea].cod_n = busca_parcial[linea].cod_n
|
|
LET anterior[linea].cod_grupo = busca_parcial[linea].cod_grupo
|
|
LET anterior[linea].cod_tipo = busca_parcial[linea].cod_tipo
|
|
LET anterior[linea].cod_sec = busca_parcial[linea].cod_sec
|
|
|
|
|
|
AFTER FIELD fech_ent
|
|
IF busca_parcial[linea].fech_ent < busca_parcial[linea].fech_emb THEN
|
|
CALL fgl_winmessage("INFO","FECHA DE ENTREGA MENOR A LA FECHA DE EMBARQUE","INFO")
|
|
NEXT FIELD fech_ent
|
|
END IF
|
|
AFTER FIELD fech_emb
|
|
IF busca_parcial[linea].fech_emb < fecha_orden THEN
|
|
CALL fgl_winmessage("INFO","FECHA DE EMBARQUE MENOR A LA FECHA DE LA ORDEN","INFO")
|
|
NEXT FIELD fech_emb
|
|
END IF
|
|
LET verdad = "N"
|
|
CALL repite4()
|
|
LET busca_parcial[linea].fech_ent =
|
|
busca_parcial[linea].fech_emb + m_articulos1.dia_llegada +
|
|
dia_aduana
|
|
DISPLAY busca_parcial[linea].fech_ent to s_parcial[fila].fech_ent
|
|
AFTER FIELD cantidad
|
|
|
|
# Calcula el total de la cantidad a entregar y lo presenta en pantalla
|
|
LET cantidad_total = 0
|
|
FOR idx = 1 TO busca_parcial.getLength()
|
|
IF busca_parcial[idx].cantidad IS NOT NULL THEN
|
|
LET cantidad_total =
|
|
cantidad_total + busca_parcial[idx].cantidad
|
|
ELSE
|
|
EXIT FOR
|
|
END IF
|
|
END FOR
|
|
|
|
IF cantidad_total > arr_ordenes[curr].cantidad THEN
|
|
LET numero_msg = 46
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cantidad
|
|
END IF
|
|
DISPLAY cantidad_total TO cantidad_total
|
|
|
|
AFTER INPUT
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
EXIT INPUT
|
|
END IF
|
|
IF cantidad_total != xcantidad THEN
|
|
LET numero_msg = 368
|
|
CALL msg(numero_msg)
|
|
CONTINUE INPUT
|
|
END IF
|
|
|
|
|
|
END INPUT
|
|
LET int_flag = FALSE
|
|
|
|
|
|
CLOSE WINDOW parcial1
|
|
RETURN busca_parcial
|
|
END FUNCTION
|
|
|
|
FUNCTION repite4()
|
|
DEFINE p_fecha DATE
|
|
|
|
LET verdad = null
|
|
LET p_fecha = busca_parcial[linea].fech_emb
|
|
|
|
FOR idx = 1 TO arr_count()
|
|
IF idx != linea THEN
|
|
IF p_fecha = busca_parcial[idx].fech_emb THEN
|
|
LET verdad = "S"
|
|
LET numero_msg = 21
|
|
CALL msg(numero_msg)
|
|
ELSE
|
|
IF verdad != "S" THEN
|
|
LET verdad = "N"
|
|
END IF
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
END FUNCTION
|
|
|
|
|
|
FUNCTION producto(xtipo,xcodn,xcodgrupo,xcodtipo,xcodsec)
|
|
DEFINE xtipo CHAR(20),
|
|
xcodn,xcodgrupo,xcodtipo,xcodsec SMALLINT
|
|
|
|
IF xtipo = "MISCELANEOS" THEN
|
|
SELECT a.descrip_esp,a.unidad_med INTO m_articulos1.descrip_esp,m_articulos1.unidad_med
|
|
FROM istb00002 a
|
|
WHERE a.cod_n = Xcodn AND
|
|
a.cod_grupo = Xcodgrupo AND
|
|
a.cod_tipo = xcodtipo AND
|
|
a.cod_sec = xcodsec AND
|
|
a.status_t is null
|
|
|
|
IF status = notfound THEN
|
|
LET opc = fgl_winquestion("MISCELANEOS","REGISTRO NO EXISTE EN MAESTRA, DESEA CREARLO AHORA?","YES","YES|NO","QUESTION",0)
|
|
LET existe = "N"
|
|
END IF
|
|
END IF
|
|
|
|
IF xtipo = "MATERIA PRIMA" THEN
|
|
SELECT a.descrip_esp,a.unidad_med INTO m_articulos1.descrip_esp,m_articulos1.unidad_med
|
|
FROM intb00001 a
|
|
WHERE a.cod_n = Xcodn AND
|
|
a.cod_grupo = Xcodgrupo AND
|
|
a.cod_tipo = xcodtipo AND
|
|
a.cod_sec = xcodsec AND
|
|
a.status_t is null
|
|
|
|
IF status = notfound THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
LET existe = "S"
|
|
END IF
|
|
END IF
|
|
IF xtipo = "PRODUCTO TERMINADOS" THEN
|
|
SELECT a.descrip_esp,a.unidad_med INTO m_articulos1.descrip_esp,m_articulos1.unidad_med
|
|
FROM iptb00002 a
|
|
WHERE a.cod_n = Xcodn AND
|
|
a.cod_grupo = Xcodgrupo AND
|
|
a.cod_tipo = xcodtipo AND
|
|
a.cod_sec = xcodsec AND
|
|
a.status_t is null
|
|
|
|
IF status = notfound THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
LET existe = "S"
|
|
END IF
|
|
END IF
|
|
IF xtipo = "REPUESTOS" THEN
|
|
SELECT a.descrip_esp,a.unidad_med INTO m_articulos1.descrip_esp,m_articulos1.unidad_med
|
|
FROM irtb00002 a
|
|
WHERE a.cod_n = Xcodn AND
|
|
a.cod_grupo = Xcodgrupo AND
|
|
a.cod_tipo = xcodtipo AND
|
|
a.cod_sec = xcodsec AND
|
|
a.status_t is null
|
|
|
|
IF status = notfound THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
LET existe = "S"
|
|
END IF
|
|
END IF
|
|
|
|
RETURN m_articulos1.descrip_esp,m_articulos1.unidad_med
|
|
END FUNCTION
|
|
|
|
FUNCTION busca_dpto()
|
|
|
|
OPEN WINDOW busqueda WITH FORM "cofmwd002"
|
|
ATTRIBUTE (BORDER,FORM LINE FIRST + 2,COMMENT LINE LAST)
|
|
LET int_flag = false
|
|
CONSTRUCT criterio ON a.nom_dpto FROM nom_dpto
|
|
|
|
AFTER CONSTRUCT
|
|
IF INT_FLAG THEN
|
|
EXIT CONSTRUCT
|
|
END IF
|
|
END CONSTRUCT
|
|
|
|
LET selec = "SELECT a.departamento,a.nom_dpto FROM adtb00001 a ",
|
|
" WHERE ",
|
|
" a.status_t is null AND ",
|
|
criterio clipped,
|
|
" ORDER BY a.departamento "
|
|
|
|
PREPARE busca1 FROM selec
|
|
DECLARE johnn1 CURSOR FOR busca1
|
|
LET idx = 1
|
|
|
|
FOREACH johnn1 INTO busca_wd1[idx].*
|
|
|
|
LET idx = idx + 1
|
|
|
|
END FOREACH
|
|
# CALL set_count(idx-1)
|
|
DISPLAY ARRAY busca_wd1 TO s_desp1.*
|
|
AFTER DISPLAY
|
|
LET curr1 = arr_curr()
|
|
|
|
LET requisi.departamento = busca_wd1[curr1].codigo
|
|
LET descrip1 = busca_wd1[curr1].nom_dpto
|
|
EXIT DISPLAY
|
|
END DISPLAY
|
|
|
|
|
|
LET INT_FLAG = FALSE
|
|
CLOSE WINDOW busqueda
|
|
RETURN requisi.departamento,descrip1
|
|
|
|
END FUNCTION
|
|
|
|
FUNCTION busca_emp()
|
|
OPEN WINDOW busqueda AT 8,8 WITH FORM "cofmwd001"
|
|
ATTRIBUTE (BORDER,FORM LINE FIRST + 2,COMMENT LINE LAST)
|
|
|
|
LET int_flag = false
|
|
CONSTRUCT criterio ON a.nom1_emp FROM nom_emp
|
|
AFTER CONSTRUCT
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
EXIT CONSTRUCT
|
|
END IF
|
|
END CONSTRUCT
|
|
LET selec1 = "SELECT a.num_emp,a.nom1_emp,a.apell1_emp ",
|
|
" FROM adtb00003 a ",
|
|
" WHERE ",
|
|
criterio clipped,
|
|
" and a.status_t is null ",
|
|
"ORDER BY a.nom1_emp "
|
|
|
|
|
|
PREPARE busca5 FROM selec1
|
|
DECLARE johnn CURSOR FOR busca5
|
|
OPEN johnn
|
|
LET idx = 1
|
|
|
|
FOREACH johnn INTO busca_wd[idx].*
|
|
|
|
LET desp_wd[idx].codigo = busca_wd[idx].cod_emp_sec using "&&&&"
|
|
LET desp_wd[idx].nom_emp = busca_wd[idx].nom1_emp clipped," ",
|
|
busca_wd[idx].apell1_emp clipped
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
LET existe = "N"
|
|
IF idx > 1 THEN
|
|
LET existe = "S"
|
|
END IF
|
|
IF existe = "S" THEN
|
|
CALL set_count (idx - 1)
|
|
DISPLAY ARRAY desp_wd TO s_desp.*
|
|
AFTER DISPLAY
|
|
LET curr1 = arr_curr()
|
|
LET requisi.cod_emp_sec = busca_wd[curr1].cod_emp_sec
|
|
LET descrip2 = desp_wd[curr1].nom_emp
|
|
EXIT DISPLAY
|
|
END DISPLAY
|
|
END IF
|
|
|
|
CLOSE WINDOW busqueda
|
|
RETURN requisi.cod_emp_sec,descrip2
|
|
END FUNCTION
|
|
|
|
FUNCTION busca_mt(xtipo_inv)
|
|
DEFINE xtipo_inv VARCHAR(20)
|
|
OPEN WINDOW busqueda AT 8,8 WITH FORM "cofmwd003"
|
|
ATTRIBUTE (BORDER,FORM LINE FIRST + 2,COMMENT LINE LAST)
|
|
|
|
LET int_flag = false
|
|
CONSTRUCT criterio ON a.descrip_esp FROM descrip_esp
|
|
AFTER CONSTRUCT
|
|
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
EXIT CONSTRUCT
|
|
END IF
|
|
END CONSTRUCT
|
|
IF INT_FLAG THEN
|
|
LET m_articulos1.cod_n=0
|
|
LET m_articulos1.cod_grupo=0
|
|
LET m_articulos1.cod_tipo=0
|
|
LET m_articulos1.cod_sec=0
|
|
LET m_articulos1.descrip_esp=NULL
|
|
LET m_articulos1.unidad_med=NULL
|
|
LET INT_FLAG = FALSE
|
|
CLOSE WINDOW busqueda
|
|
RETURN m_articulos1.cod_n,m_articulos1.cod_grupo,m_articulos1.cod_tipo,m_articulos1.cod_sec,
|
|
m_articulos1.descrip_esp,m_articulos1.unidad_med
|
|
|
|
END IF
|
|
IF xtipo_inv IS NULL THEN
|
|
CLOSE WINDOW busqueda
|
|
RETURN
|
|
END IF
|
|
IF xtipo_inv = "MISCELANEOS" THEN
|
|
LET selec2 =
|
|
"SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp,",
|
|
"a.unidad_med ",
|
|
" FROM istb00002 a ",
|
|
" WHERE ",
|
|
" a.status_t is null AND ",
|
|
criterio clipped,
|
|
" ORDER BY a.descrip_esp "
|
|
|
|
END IF
|
|
|
|
IF xtipo_inv = "PRODUCTO TERMINADOS" THEN
|
|
LET selec2 =
|
|
"SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp,",
|
|
"a.unidad_med ",
|
|
" FROM iptb00002 a ",
|
|
" WHERE ",
|
|
" a.status_t is null AND ",
|
|
criterio clipped,
|
|
" ORDER BY a.descrip_esp "
|
|
END IF
|
|
IF xtipo_inv = "MATERIA PRIMA" THEN
|
|
LET selec2 =
|
|
"SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp,",
|
|
"a.unidad_med ",
|
|
" FROM intb00001 a ",
|
|
" WHERE ",
|
|
" a.status_t is null AND ",
|
|
criterio clipped,
|
|
" ORDER BY a.descrip_esp "
|
|
END IF
|
|
IF xtipo_inv = "REPUESTOS" THEN
|
|
LET selec2 =
|
|
"SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp,",
|
|
"a.unidad_med ",
|
|
" FROM irtb00002 a ",
|
|
" WHERE ",
|
|
" a.status_t is null AND ",
|
|
criterio clipped,
|
|
" ORDER BY a.descrip_esp "
|
|
END IF
|
|
|
|
WHENEVER ERROR CONTINUE
|
|
PREPARE busca2 FROM selec2
|
|
DECLARE johnn2 CURSOR FOR busca2
|
|
WHENEVER ERROR STOP
|
|
IF SQLCA.SQLCODE <> 0 THEN
|
|
CALL msg(SQLCA.SQLCODE)
|
|
CLOSE WINDOW busqueda
|
|
RETURN 0,0,0,0,' ',' '
|
|
END IF
|
|
LET idx = 1
|
|
|
|
FOREACH johnn2 INTO busca_ma[idx].*
|
|
|
|
#Esta condicion controla que el numero de registros encontrados no exceda
|
|
#el limite del arreglo. Abner
|
|
|
|
LET busca_mt1[idx].codigo = busca_ma[idx].cod_n using "&&&&","-",
|
|
busca_ma[idx].cod_grupo using "&&&&","-",
|
|
busca_ma[idx].cod_tipo using "&&&&","-",
|
|
busca_ma[idx].cod_sec using "&&&&&&"
|
|
LET busca_mt1[idx].descrip_esp = busca_ma[idx].descrip_esp
|
|
LET busca_mt1[idx].unidad_med = busca_ma[idx].unidad_med
|
|
|
|
LET idx = idx + 1
|
|
|
|
END FOREACH
|
|
IF idx = 1 THEN
|
|
CLOSE WINDOW busqueda
|
|
RETURN 0,0,0,0,' ',' '
|
|
ELSE
|
|
CALL set_count(idx-1)
|
|
DISPLAY ARRAY busca_mt1 TO s_desp2.*
|
|
AFTER DISPLAY
|
|
IF INT_FLAG THEN
|
|
EXIT DISPLAY
|
|
END IF
|
|
LET curr1 = arr_curr()
|
|
LET m_articulos1.cod_n = busca_mt1[curr1].codigo[1,4]
|
|
LET m_articulos1.cod_grupo = busca_mt1[curr1].codigo[6,9]
|
|
LET m_articulos1.cod_tipo = busca_mt1[curr1].codigo[11,14]
|
|
LET m_articulos1.cod_sec = busca_mt1[curr1].codigo[16,21]
|
|
LET m_articulos1.descrip_esp = busca_mt1[curr1].descrip_esp
|
|
LET m_articulos1.unidad_med = busca_mt1[curr1].unidad_med
|
|
|
|
EXIT DISPLAY
|
|
END DISPLAY
|
|
|
|
LET INT_FLAG = FALSE
|
|
CLOSE WINDOW busqueda
|
|
RETURN m_articulos1.cod_n,m_articulos1.cod_grupo,m_articulos1.cod_tipo,
|
|
m_articulos1.cod_sec,m_articulos1.descrip_esp,m_articulos1.unidad_med
|
|
END IF
|
|
|
|
END FUNCTION
|
|
|
|
|
|
FUNCTION busca_requi(xnum_req,xtipo,xcodn,xcodgrupo,xcodtipo,xcodsec,xarr_ordenes)
|
|
DEFINE xnum_req,xcodn,xcodgrupo,xcodtipo,xcodsec INTEGER,
|
|
xtipo CHAR(2)
|
|
|
|
DEFINE xarr_ordenes DYNAMIC ARRAY OF RECORD
|
|
num_orden INT,
|
|
num_req LIKE cotb00006.num_req,
|
|
cod_n SMALLINT,
|
|
cod_grupo SMALLINT,
|
|
cod_tipo SMALLINT,
|
|
cod_sec SMALLINT,
|
|
descripcion CHAR(180),
|
|
unidad CHAR(4),
|
|
cantidad DECIMAL(12,3),
|
|
tipo_costo CHAR(10),
|
|
precio DECIMAL(18,5),
|
|
porc_desc DEC(12,2),
|
|
monto_desc DEC(12,2),
|
|
valor DECIMAL(12,2)
|
|
|
|
END RECORD,
|
|
idx4 SMALLINT
|
|
|
|
OPEN WINDOW busqueda1 WITH FORM "cofmwd007"
|
|
ATTRIBUTE (BORDER,FORM LINE FIRST + 1, comment line last)
|
|
DISPLAY "tipo ",xtipo
|
|
IF xtipo = "04" THEN
|
|
LET selec = "SELECT '0',a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,",
|
|
" b.unidad_med,SUM(a.cantidad), AVG(a.precio),b.dia_llegada ",
|
|
"FROM cotb00008 a,istb00002 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.status_t is null AND ",
|
|
|
|
" a.num_req= ? ",
|
|
" AND (a.procesada = 'N')
|
|
GROUP BY a.num_req,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,
|
|
b.unidad_med,b.dia_llegada
|
|
ORDER BY a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec "
|
|
DISPLAY "num req ",xnum_req
|
|
END IF
|
|
|
|
IF xtipo = "01" THEN
|
|
LET selec = "SELECT a.num_req,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,",
|
|
" b.unidad_med,SUM(a.cantidad), AVG(a.precio),c.dia_llegada ",
|
|
"FROM cotb00008 a,intb00001 b,intb00002 c ",
|
|
"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.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 ",
|
|
" a.status_t is null AND ",
|
|
" a.num_req= ? ",
|
|
" AND (a.procesada = 'N')
|
|
GROUP BY a.num_req,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,
|
|
b.unidad_med,c.dia_llegada
|
|
ORDER BY a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec "
|
|
|
|
END IF
|
|
IF xtipo = "02" THEN
|
|
LET selec = "SELECT a.num_req,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,",
|
|
" b.unidad_med,SUM(a.cantidad), AVG(a.precio),b.dia_llegada ",
|
|
"FROM cotb00008 a,iptb00002 b,cotb00006 c ",
|
|
"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_req = c.num_req AND ",
|
|
" a.status_t is null AND ",
|
|
" a.num_req= ? ",
|
|
" AND (a.procesada = 'N')
|
|
GROUP BY a.num_req,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,
|
|
b.unidad_med,b.dia_llegada
|
|
ORDER BY a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec "
|
|
|
|
END IF
|
|
IF xtipo = "03" THEN
|
|
LET selec = "SELECT a.num_req,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,",
|
|
" b.unidad_med,SUM(a.cantidad), AVG(a.precio),b.dia_llegada ",
|
|
"FROM cotb00008 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.status_t is null AND ",
|
|
" a.num_req= ? ",
|
|
" AND (a.procesada = 'N')
|
|
GROUP BY a.num_req,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,
|
|
b.unidad_med,b.dia_llegada
|
|
ORDER BY a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec "
|
|
|
|
|
|
END IF
|
|
|
|
PREPARE origen FROM selec
|
|
DECLARE proximo CURSOR FOR origen
|
|
OPEN proximo USING xnum_req
|
|
CALL localiza_wd.clear()
|
|
LET idx = 1
|
|
FOREACH proximo INTO localiza_wd[idx].*
|
|
|
|
FOR idx4 = 1 TO xarr_ordenes.getLength()
|
|
|
|
IF xarr_ordenes[idx4].cod_n = localiza_wd[idx].cod_n AND
|
|
xarr_ordenes[idx4].cod_grupo = localiza_wd[idx].cod_grupo AND
|
|
xarr_ordenes[idx4].cod_tipo = localiza_wd[idx].cod_tipo AND
|
|
xarr_ordenes[idx4].cod_sec = localiza_wd[idx].cod_sec AND
|
|
xarr_ordenes[idx4].num_req = localiza_wd[idx].num_orden
|
|
THEN
|
|
display "localiza: ",xarr_ordenes[idx4].cod_sec," req ",xarr_ordenes[idx4].num_req
|
|
CONTINUE FOREACH
|
|
|
|
END IF
|
|
END FOR
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
IF idx = 1 THEN
|
|
CALL fgl_winmessage("INFO","TODOS LOS CODIGOS DE ESA REQUISICION ESTAN COLOCADOS","INFO")
|
|
CLOSE WINDOW busqueda1
|
|
CALL localiza_wd.clear()
|
|
|
|
RETURN localiza_wd[idx].cod_n,localiza_wd[idx].cod_grupo, localiza_wd[idx].cod_tipo,
|
|
localiza_wd[idx].cod_sec, localiza_wd[idx].descrip_esp,
|
|
localiza_wd[idx].unidad_med, localiza_wd[idx].cantidad,
|
|
localiza_wd[idx].precio,localiza_wd[idx].dia_llegada,
|
|
localiza_wd[idx].num_orden
|
|
|
|
END IF
|
|
DISPLAY ARRAY localiza_wd TO muestra.*
|
|
{ IF identifica = "O" THEN
|
|
IF localiza_wd[curr1].cod_n IS NOT NULL THEN
|
|
LET arr_ordenes[curr].cod_n = localiza_wd[curr1].cod_n
|
|
LET arr_ordenes[curr].cod_grupo = localiza_wd[curr1].cod_grupo
|
|
LET arr_ordenes[curr].cod_tipo = localiza_wd[curr1].cod_tipo
|
|
LET arr_ordenes[curr].cod_sec = localiza_wd[curr1].cod_sec
|
|
LET articulos.descrip_esp = localiza_wd[curr1].descrip_esp
|
|
LET articulos.unidad_med = localiza_wd[curr1].unidad_med
|
|
LET arr_ordenes[curr].cantidad = localiza_wd[curr1].cantidad
|
|
LET arr_ordenes[curr].precio = localiza_wd[curr1].precio
|
|
|
|
|
|
LET m_articulos1.base = 1
|
|
IF arr_ordenes[curr].cod_n = 1 THEN
|
|
|
|
SELECT a.base INTO m_articulos1.base FROM intb00002 a
|
|
WHERE a.cod_n = arr_ordenes[curr].cod_n AND
|
|
a.cod_grupo = arr_ordenes[curr].cod_grupo AND
|
|
a.cod_tipo = arr_ordenes[curr].cod_tipo AND
|
|
a.cod_sec = arr_ordenes[curr].cod_sec AND
|
|
a.status_t IS NULL
|
|
END IF
|
|
|
|
LET arr_ordenes[curr].valor = arr_ordenes[curr].precio *
|
|
arr_ordenes[curr].cantidad
|
|
|
|
IF m_articulos1.base IS NULL OR m_articulos1.base = 0 THEN
|
|
LET m_articulos1.base = 1
|
|
END IF
|
|
|
|
LET arr_ordenes[curr].valor=(arr_ordenes[curr].cantidad/m_articulos1.base)
|
|
* arr_ordenes[curr].precio
|
|
END IF
|
|
END IF
|
|
}
|
|
AFTER DISPLAY
|
|
LET idx = arr_curr()
|
|
EXIT DISPLAY
|
|
END DISPLAY
|
|
CLOSE WINDOW busqueda1
|
|
|
|
RETURN localiza_wd[idx].cod_n,localiza_wd[idx].cod_grupo, localiza_wd[idx].cod_tipo,
|
|
localiza_wd[idx].cod_sec, localiza_wd[idx].descrip_esp,
|
|
localiza_wd[idx].unidad_med, localiza_wd[idx].cantidad,
|
|
localiza_wd[idx].precio,localiza_wd[idx].dia_llegada,
|
|
localiza_wd[idx].num_orden
|
|
END FUNCTION
|
|
|
|
FUNCTION crea_producto()
|
|
|
|
OPEN WINDOW w1 WITH FORM "isfmmt002"
|
|
|
|
## Captura los datos que va a contener el registro
|
|
|
|
INPUT BY NAME m_articulos1.cod_n THRU m_articulos1.cod_sec,m_articulos1.descrip_esp,m_articulos1.unidad_med,
|
|
m_articulos1.pto_reorden THRU m_articulos1.fech_mod
|
|
BEFORE INPUT
|
|
LET m_articulos1.cod_n = 2
|
|
LET m_articulos1.cod_grupo = 0
|
|
LET m_articulos1.cod_tipo = 0
|
|
LET m_articulos1.bodega = 1
|
|
LET m_articulos1.dia_llegada=0
|
|
LET m_articulos1.existencia=0
|
|
LET m_articulos1.gravamen=0
|
|
LET m_articulos1.pto_reorden=0
|
|
LET m_articulos1.unidad_med='UD'
|
|
|
|
DISPLAY BY NAME m_articulos1.cod_n,m_articulos1.cod_grupo,m_articulos1.cod_tipo,
|
|
m_articulos1.bodega,m_articulos1.dia_llegada,m_articulos1.existencia,
|
|
m_articulos1.gravamen,m_articulos1.pto_reorden,m_articulos1.unidad_med
|
|
|
|
NEXT FIELD descrip_esp
|
|
## Verifica que el codigo no exista en el catalogo de m_articulos1. Si existe,
|
|
## entonces despliega los datos del registro existente.
|
|
AFTER FIELD cod_sec
|
|
IF ( m_articulos1.cod_n = 0 AND m_articulos1.cod_grupo = 0 AND
|
|
m_articulos1.cod_tipo = 0 AND m_articulos1.cod_sec = 0 ) THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
|
|
SELECT max(num_doc),max(fecha) INTO datos_gen.num_doc,datos_gen.fecha
|
|
FROM istb00006 WHERE cod_mov = 99
|
|
|
|
IF status = notfound THEN
|
|
LET datos_gen.num_doc = 0
|
|
LET datos_gen.fecha = today
|
|
END IF
|
|
|
|
LET datos_gen.num_doc = datos_gen.num_doc + 1
|
|
|
|
AFTER FIELD cod_nab
|
|
IF m_articulos1.cod_nab IS NOT NULL THEN
|
|
SELECT * FROM cotb00005 WHERE
|
|
cod_nab = m_articulos1.cod_nab and
|
|
status_t is null
|
|
|
|
IF status >= 0 THEN
|
|
IF status = notfound THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_nab
|
|
END IF
|
|
|
|
END IF
|
|
END IF
|
|
|
|
AFTER FIELD bodega
|
|
IF m_articulos1.bodega IS NOT NULL THEN
|
|
SELECT * FROM intb00009 WHERE
|
|
cod_bodega = m_articulos1.bodega
|
|
|
|
IF status >= 0 THEN
|
|
IF status = notfound THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD bodega
|
|
END IF
|
|
END IF
|
|
END IF
|
|
|
|
AFTER FIELD dia_llegada
|
|
IF m_articulos1.dia_llegada IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD dia_llegada
|
|
END IF
|
|
|
|
END INPUT
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = FALSE
|
|
CLOSE WINDOW w1
|
|
RETURN m_articulos1.cod_n,m_articulos1.cod_grupo,m_articulos1.cod_tipo,m_articulos1.cod_sec,m_articulos1.descrip_esp,m_articulos1.unidad_med
|
|
END IF
|
|
SELECT MAX(a.cod_sec) INTO m_articulos1.cod_sec FROM istb00002 a
|
|
WHERE a.cod_n = m_articulos1.cod_n AND
|
|
a.cod_grupo = m_articulos1.cod_grupo AND
|
|
a.cod_tipo = m_articulos1.cod_tipo
|
|
|
|
IF m_articulos1.cod_sec IS NULL THEN
|
|
LET m_articulos1.cod_sec = 0
|
|
END IF
|
|
LET m_articulos1.cod_sec = m_articulos1.cod_sec +1
|
|
DISPLAY BY NAME m_articulos1.cod_sec
|
|
INSERT INTO istb00002 (cod_n,cod_grupo,cod_tipo,cod_Sec,pto_reorden,existencia,cod_nab,base,bodega,
|
|
categoria,dia_llegada,gravamen,us_crea,fech_crea,descrip_esp,unidad_med )
|
|
VALUES (m_articulos1.cod_n,m_articulos1.cod_grupo,
|
|
m_articulos1.cod_tipo,m_articulos1.cod_sec,m_articulos1.pto_reorden,
|
|
m_articulos1.existencia,m_articulos1.cod_nab,m_articulos1.base,
|
|
m_articulos1.bodega, m_articulos1.categoria,
|
|
m_articulos1.dia_llegada,m_articulos1.gravamen,
|
|
usuarios,getdate(),m_articulos1.descrip_esp,m_articulos1.unidad_med)
|
|
|
|
# Verifica el Status que retorna luego de insertar el registro en la tabla.
|
|
# Si el Status es diferente de cero quiere decir que hubo problemas durante
|
|
# la creacion del registro, entonces despliega un mensaje de alerta para que
|
|
# el usuario sepa que hubo problemas en la creacion del registro.
|
|
|
|
SELECT * FROM istb00006 WHERE
|
|
cod_mov = 99 AND
|
|
cod_n = m_articulos1.cod_n AND
|
|
cod_grupo = m_articulos1.cod_grupo AND
|
|
cod_tipo = m_articulos1.cod_tipo AND
|
|
cod_sec = m_articulos1.cod_sec
|
|
|
|
IF status = notfound THEN
|
|
|
|
INSERT INTO istb00006 (num_doc,fecha,cod_mov,cod_n,cod_grupo,cod_tipo,
|
|
cod_sec,cantidad_2,bodega,us_crea,fech_crea)
|
|
VALUES (1,datos_gen.fecha,99,m_articulos1.cod_n,m_articulos1.cod_grupo,
|
|
m_articulos1.cod_tipo,m_articulos1.cod_sec,m_articulos1.existencia,
|
|
m_articulos1.bodega,usuarios,getdate())
|
|
|
|
END IF
|
|
|
|
LET numero_msg = 1
|
|
CALL msg(numero_msg)
|
|
CLOSE WINDOW w1
|
|
RETURN m_articulos1.cod_n,m_articulos1.cod_grupo,m_articulos1.cod_tipo,m_articulos1.cod_sec,m_articulos1.descrip_esp,m_articulos1.unidad_med
|
|
END FUNCTION
|