Files
MBS/PROYECTO/codir/coprfu009.4gl
T

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