#----------------------------------------------------------------------- # 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