{ ------------------------------------------------------------------ PROGRAMA : IPPRMT017 OBJETIVO : Capturar, Modificar, Eliminar registros de la Tabla de Precio por Cliente PROGRAMADOR : JUAN SOTO FECHA REALIZACION : Febrero 1997 MODIFICADO POR : JUAN SOTO DESCRIPCION MOD : ADICION LISTA DE PRECIOS EN TAB SEPARADOS ADMINISTRACION PRECIOS POR ITEMS ------------------------------------------------------------------ } GLOBALS "ipprgb000.4gl" DEFINE cliente_dir RECORD LIKE vetb00005.*, costo_std,costo_lq,existencia DEC (12,5) DEFINE ventas ui.combobox, guarda_info CHAR(6) DEFINE descuento RECORD LIKE vetb00013.* DEFINE arr_clientes DYNAMIC ARRAY OF RECORD tipo_cliente LIKE vetb00004.tipo_cliente, sec_cliente LIKE vetb00004.sec_cliente, nombre CHAR(30) END RECORD DEFINE listproduct DYNAMIC ARRAY OF RECORD elimina CHAR(1), idrow INT, codlista SMALLINT, codn SMALLINT, codgrupo SMALLINT, codtipo SMALLINT, codsec SMALLINT, descripcion_p CHAR(50), unidad_med CHAR(4), tipoCliente SMALLINT, secCliente INT, nombreCliente CHAR(30), ventas SMALLINT, moneda CHAR(4), pprecio DEC(12,2), costo_std1 DEC(12,4), costo_r DEC(12,4), fecha_lq DATE, existencia DEC(12,4) END RECORD, respuesta CHAR(3) MAIN DEFER INTERRUPT CALL STARTLOG("ipprmt017.log") CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CONNECT to "smarmotech" USER usuarios USING clave SELECT * INTO p_companias.* FROM companias CALL ipprmt017() END MAIN FUNCTION ipprmt017() # WHENEVER ERROR CONTINUE OPTIONS FORM LINE 9, ERROR LINE 23, HELP FILE "ippray000.exe", HELP KEY CONTROL-W, COMMENT LINE 21 OPEN WINDOW w1 AT 5,10 WITH FORM "ipfmmt017" MENU ON ACTION nuevo ATTRIBUTE(TEXT="Nuevo",IMAGE="imagenes\precio.png") CLEAR FORM CALL listproduct.clear() LET int_flag = FALSE CALL ippcad017() ON ACTION salir EXIT MENU END MENU END FUNCTION FUNCTION ippcad017() ## Captura los datos que va a contener el registro # WHENEVER ERROR CONTINUE DEFINE noreg INT DIALOG ATTRIBUTES (UNBUFFERED, FIELD ORDER FORM) CONSTRUCT criterio ON iptb00002.cod_n,iptb00002.cod_grupo,iptb00002.cod_tipo,iptb00002.cod_sec, iptb00002.descrip_esp,vetb00025.cod_lista,vetb00025.ventas FROM codn,codgrupo,codtipo,codsec,descripcion_p,codlista,ventas BEFORE CONSTRUCT CALL cventas() END CONSTRUCT ON ACTION limpia CALL listproduct.clear() CLEAR FORM ON ACTION buscaLista LET selec2 = " SELECT CONVERT(CHAR(10),MAX(a.fecha_lq),103) ", " FROM cttb00013 a ", " WHERE a.cod_n = ? AND ", " a.cod_grupo = ? AND ", " a.cod_tipo = ? AND ", " a.cod_sec = ? AND ", " a.status_t IS NULL " PREPARE bfecha FROM selec2 LET selec = "SELECT count(*) ", " FROM vetb00061 INNER JOIN ", " vetb00025 ON vetb00061.ventas = vetb00025.ventas AND vetb00025.status_t is null LEFT OUTER JOIN ", " vetb00004 ON vetb00025.sec_cliente = vetb00004.sec_cliente AND vetb00025.tipo_cliente = vetb00004.tipo_cliente RIGHT OUTER JOIN ", " iptb00002 ON vetb00025.cod_n = iptb00002.cod_n AND vetb00025.cod_grupo = iptb00002.cod_grupo AND vetb00025.cod_tipo = iptb00002.cod_tipo AND ", " vetb00025.cod_sec = iptb00002.cod_sec ", " WHERE ",criterio CLIPPED PREPARE cmdcuenta FROM selec EXECUTE cmdcuenta INTO noreg LET selec = "SELECT vetb00025.idrow,vetb00025.cod_lista,iptb00002.cod_n,iptb00002.cod_grupo,iptb00002.cod_tipo,iptb00002.cod_sec, ", "iptb00002.descrip_esp,iptb00002.unidad_med, ", " vetb00025.tipo_cliente,vetb00025.sec_cliente,vetb00004.nombre,vetb00061.simbolo,vetb00025.precio,", " '0',vetb00025.ventas ", " FROM vetb00061 INNER JOIN ", " vetb00025 ON vetb00061.ventas = vetb00025.ventas AND vetb00025.status_t is null LEFT OUTER JOIN ", " vetb00004 ON vetb00025.sec_cliente = vetb00004.sec_cliente AND vetb00025.tipo_cliente = vetb00004.tipo_cliente RIGHT OUTER JOIN ", " iptb00002 ON vetb00025.cod_n = iptb00002.cod_n AND vetb00025.cod_grupo = iptb00002.cod_grupo AND vetb00025.cod_tipo = iptb00002.cod_tipo AND ", " vetb00025.cod_sec = iptb00002.cod_sec ", " WHERE ",criterio CLIPPED LET progreso = 0 DISPLAY progreso TO progreso CALL ui.Interface.refresh() PREPARE comando FROM selec DECLARE lista CURSOR FOR comando LET idx = 1 FOREACH lista INTO listproduct[idx].idrow,listproduct[idx].codlista, listproduct[idx].codn, listproduct[idx].codgrupo, listproduct[idx].codtipo,listproduct[idx].codsec, listproduct[idx].descripcion_p,listproduct[idx].unidad_med, listproduct[idx].tipocliente,listproduct[idx].secCliente, listproduct[idx].nombreCliente,listproduct[idx].moneda, listproduct[idx].pprecio, listproduct[idx].costo_r, listproduct[idx].ventas # BUSCA FECHA DE LA ULTIMA LIQUIDACION EXECUTE bfecha INTO fecha1 USING listproduct[idx].codn, listproduct[idx].codgrupo, listproduct[idx].codtipo, listproduct[idx].codsec LET listproduct[idx].elimina = 'N' LET listproduct[idx].costo_r = 0 SELECT AVG(a.costo_lq) INTO listproduct[idx].costo_r FROM cttb00013 a WHERE a.cod_n = listproduct[idx].codn AND a.cod_grupo = listproduct[idx].codgrupo AND a.cod_tipo = listproduct[idx].codtipo AND a.cod_sec = listproduct[idx].codsec AND a.fecha_lq= fecha1 AND a.status_t IS NULL LET listproduct[idx].fecha_lq = fecha1 CALL busca_info(listproduct[idx].codn,listproduct[idx].codgrupo, listproduct[idx].codtipo,listproduct[idx].codsec, listproduct[idx].tipoCliente, listproduct[idx].secCliente) RETURNING listproduct[idx].existencia, listproduct[idx].costo_std1, listproduct[idx].costo_r LET progreso = (idx /noreg )*100 DISPLAY progreso TO progreso CALL ui.Interface.refresh() IF listproduct[idx].codlista IS NULL THEN LET listproduct[idx].codlista=1 END IF LET idx = idx + 1 END FOREACH IF idx = 1 THEN CALL fgl_winmessage("INFO","NO EXISTEN REGISTROS CON ESA CONDICION","INFO") CONTINUE DIALOG END IF CALL set_count(idx-1) INPUT ARRAY listproduct WITHOUT DEFAULTS FROM lproducto2.* BEFORE INPUT CALL cventas() LET INT_FLAG = FALSE BEFORE ROW LET curr1 = arr_curr() LET scr_l = scr_line() IF listproduct[curr1].codlista IS NULL THEN LET listproduct[curr1].codlista = 1 DISPLAY listproduct[curr1].codlista TO lproducto2[scr_l].codlista END IF AFTER FIELD seccliente LET curr1 = arr_curr() LET scr_l = scr_line() LET p_vetb25.tipo_cliente =listproduct[curr1].tipoCliente LET p_vetb25.sec_cliente =listproduct[curr1].secCliente LET p_vetb25.ventas =listproduct[curr1].ventas IF listproduct[curr1].secCliente IS NOT NULL AND listproduct[curr1].secCliente <> 0 THEN LET listproduct[curr1].nombreCliente = NULL SELECT a.nombre INTO listproduct[curr1].nombreCliente FROM vetb00004 a WHERE a.tipo_cliente = p_vetb25.tipo_cliente and a.sec_cliente = p_vetb25.sec_cliente and a.status_t is NULL IF STATUS = NOTFOUND THEN CALL msg(3) NEXT FIELD tipocliente END IF DISPLAY listproduct[curr1].nombreCliente TO lproducto2[scr_l].nombrecliente END IF AFTER FIELD pprecio IF listproduct[curr1].codsec IS NOT NULL THEN IF listproduct[curr1].pprecio < 0 OR listproduct[curr1].pprecio IS null THEN CALL msg(16) NEXT FIELD pprecio END IF END IF AFTER FIELD codsec IF listproduct[curr1].codn IS NOT NULL THEN SELECT a.descrip_esp,a.descrip_ing,a.unidad_med INTO m_articulos.descrip_esp ,m_articulos.descrip_ing ,m_articulos.unidad_med FROM iptb00002 a WHERE a.cod_n=listproduct[curr1].codn and a.cod_grupo=listproduct[curr1].codgrupo and a.cod_tipo=listproduct[curr1].codtipo and a.cod_sec=listproduct[curr1].codsec and a.status_t is NULL IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD codn END IF LET listproduct[curr1].descripcion_p = m_articulos.descrip_esp LET listproduct[curr1].unidad_med = m_articulos.unidad_med DISPLAY listproduct[curr1].descripcion_p TO lproducto2[scr_l].descripcion_p DISPLAY listproduct[curr1].unidad_med TO lproducto2[scr_l].unidadmed DISPLAY listproduct[curr1].pprecio TO lproducto2[scr_l].pprecio NEXT FIELD ventas END IF AFTER FIELD ventas IF listproduct[curr1].ventas IS NOT NULL THEN SELECT DISTINCT a.simbolo INTO listproduct[curr1].moneda FROM vetb00061 a WHERE a.ventas = listproduct[curr1].ventas DISPLAY listproduct[curr1].moneda TO lproducto2[scr_l].moneda IF listproduct[curr1].tipoCliente IS NOT NULL AND listproduct[curr1].tipoCliente <> 0 THEN # CONTROL INTEGRIDAD VENTAS / CLIENTES SELECT a.tipo_cliente FROM vetb00060 a WHERE a.ventas = p_vetb25.ventas AND a.tipo_cliente = p_vetb25.tipo_cliente IF STATUS = NOTFOUND THEN CALL msg(386) NEXT FIELD tipocliente END IF END IF END IF ON ACTION guardar IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET guarda_info = fgl_winquestion("Guardar","Esta seguro de actualizar precios?","yes","yes|no","question",0) LET guarda_info = UPSHIFT(guarda_info) IF guarda_info = "YES" THEN BEGIN WORK FOR idx = 1 TO listproduct.getLength() IF listproduct[idx].pprecio IS NOT null THEN IF listproduct[idx].codlista IS NULL THEN NEXT FIELD codlista END IF SELECT DISTINCT a.idrow FROM vetb00025 a WHERE a.idrow = listproduct[idx].idrow IF STATUS <> NOTFOUND THEN UPDATE vetb00025 SET cod_lista = listproduct[idx].codlista, cod_n = listproduct[idx].codn, cod_Grupo = listproduct[idx].codgrupo, cod_tipo = listproduct[idx].codtipo, cod_Sec = listproduct[idx].codsec, tipo_cliente = listproduct[idx].tipocliente, sec_cliente = listproduct[idx].secCliente, ventas = listproduct[idx].ventas, precio = listproduct[idx].Pprecio, us_mod = usuarios, fech_mod = GETDATE() WHERE idrow = listproduct[idx].idrow INSERT INTO vetb00091 (cod_lista,cod_n,cod_Grupo,cod_tipo, cod_Sec ,tipo_cliente,sec_cliente,ventas,precio, us_mod,fech_mod,accion,fecha_inicial) VALUES (listproduct[idx].codlista, listproduct[idx].codn,listproduct[idx].codgrupo, listproduct[idx].codtipo, listproduct[idx].codsec, listproduct[idx].tipocliente, listproduct[idx].secCliente, listproduct[idx].ventas, listproduct[idx].Pprecio, usuarios, GETDATE(),"ACTUALIZADO",getdate()) IF STATUS < 0 THEN ROLLBACK WORK CALL fgl_winmessage("Error","NO PUDE ACTUALIZAR INFORMACION","STOP") EXIT FOR END IF ELSE IF listproduct[idx].tipoCliente IS NULL THEN LET listproduct[idx].tipoCliente = 0 END IF IF listproduct[idx].secCliente IS NULL THEN LET listproduct[idx].secCliente = 0 END IF INSERT INTO vetb00025 (ventas,cod_n,cod_grupo,cod_tipo,cod_Sec,tipo_cliente,sec_cliente, precio,us_crea,fech_crea,cod_lista) VALUES (listproduct[idx].ventas,listproduct[idx].codn,listproduct[idx].codgrupo, listproduct[idx].codtipo,listproduct[idx].codsec,listproduct[idx].tipocliente, listproduct[idx].seccliente,listproduct[idx].pprecio,usuarios,GETDATE(), listproduct[idx].codlista) IF STATUS < 0 THEN ROLLBACK WORK CALL fgl_winmessage("Error","NO PUDE ACTUALIZAR INFORMACION","STOP") EXIT FOR END IF INSERT INTO vetb00091 (cod_lista,cod_n,cod_Grupo,cod_tipo, cod_Sec ,tipo_cliente,sec_cliente,ventas,precio, us_mod,fech_mod,accion,fecha_inicial) VALUES (listproduct[idx].codlista, listproduct[idx].codn,listproduct[idx].codgrupo, listproduct[idx].codtipo, listproduct[idx].codsec, listproduct[idx].tipocliente, listproduct[idx].secCliente, listproduct[idx].ventas, listproduct[idx].Pprecio, usuarios, GETDATE(),"NUEVO",getdate()) END IF # ACTUALIZA PRODUCTOS TIENDA ONLINE IF listproduct[idx].ventas = '3' THEN UPDATE iptb00016 SET precio_usd = listproduct[idx].pprecio,fech_mod = getdate(), us_mod = usuarios WHERE cod_n = listproduct[idx].codn AND cod_grupo = listproduct[idx].codgrupo AND cod_tipo = listproduct[idx].codtipo AND cod_sec = listproduct[idx].codsec END IF END IF # CALL fgl_winmessage("o",listproduct[idx].elimina,"info") DISPLAY "emilina ",listproduct[idx].elimina IF listproduct[idx].elimina = "S" THEN # CALL fgl_winmessage("o",listproduct[idx].idrow,"info") INSERT INTO vetb00091 (cod_lista,cod_n,cod_Grupo,cod_tipo, cod_Sec ,tipo_cliente,sec_cliente,ventas,precio, us_mod,fech_mod,accion,fecha_inicial) VALUES (listproduct[idx].codlista, listproduct[idx].codn,listproduct[idx].codgrupo, listproduct[idx].codtipo, listproduct[idx].codsec, listproduct[idx].tipocliente, listproduct[idx].secCliente, listproduct[idx].ventas, listproduct[idx].Pprecio, usuarios, GETDATE(),"BOORADO",getdate()) DELETE FROM vetb00025 WHERE idrow = listproduct[idx].idrow END IF END FOR COMMIT WORK END IF CALL fgl_winmessage("Mensajes","Actualizacion Exitosa","info") CALL listproduct.clear() CLEAR FORM LET progreso = 0 DISPLAY progreso TO progreso CALL ui.Interface.refresh() END INPUT ON ACTION cancel LET respuesta = fgl_winquestion("Pregunta","Esta seguro de salir del programa?","no","yes|no","question",0) IF respuesta = "yes" THEN RETURN LET progreso = 0 DISPLAY progreso TO progreso CALL ui.Interface.refresh() ELSE CALL listproduct.clear() LET progreso = 0 DISPLAY progreso TO progreso CALL ui.Interface.refresh() CONTINUE DIALOG END IF LET INT_FLAG = FALSE END DIALOG END FUNCTION { FUNCTION ippcmf017() # WHENEVER ERROR CONTINUE MESSAGE "" LET int_flag = false ## Aqui se prepara para la captura del criterio de seleccion CONSTRUCT criterio ON a.ventas,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec FROM ventas,cod_n,cod_grupo,cod_tipo,cod_sec BEFORE CONSTRUCT CALL cventas() AFTER CONSTRUCT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF END CONSTRUCT LET SELEC = "SELECT a.* FROM vetb00025 a ", "WHERE a.status_t IS NULL AND ",criterio clipped, " ORDER BY a.ventas,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec" PREPARE busca FROM selec CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF DECLARE datos SCROLL CURSOR FOR busca OPEN datos FETCH FIRST datos INTO p_vetb25.* IF status >= 0 THEN IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF ELSE CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF END IF SELECT descrip_esp,descrip_ing,unidad_med INTO descrip1,descrip2,medida FROM iptb00002 WHERE cod_n = p_vetb25.cod_n and cod_grupo = p_vetb25.cod_grupo and cod_tipo = p_vetb25.cod_tipo and cod_sec= p_vetb25.cod_sec LET nom_cliente = NULL SELECT nombre INTO nom_cliente FROM vetb00004 WHERE tipo_cliente = p_vetb25.tipo_cliente and sec_cliente = p_vetb25.sec_cliente LET descripcion = descrip1 CLIPPED DISPLAY BY NAME p_vetb25.*,descripcion,medida,nom_cliente MENU "OPCIONES " COMMAND "Siguiente" "Presenta en pantalla el proximo registro encontrado" FETCH NEXT datos INTO p_vetb25.* IF STATUS = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF SELECT descrip_esp,unidad_med INTO descrip1,medida FROM iptb00002 WHERE cod_n = p_vetb25.cod_n and cod_grupo = p_vetb25.cod_grupo and cod_tipo = p_vetb25.cod_tipo and cod_sec = p_vetb25.cod_sec LET nom_cliente = NULL SELECT nombre INTO nom_cliente FROM vetb00004 WHERE tipo_cliente = p_vetb25.tipo_cliente and sec_cliente = p_vetb25.sec_cliente LET descripcion = descrip1 CLIPPED DISPLAY BY NAME p_vetb25.*,descripcion,medida,nom_cliente COMMAND "Anterior" "Presenta en pantalla el registro anterior encontrado" FETCH PREVIOUS datos INTO p_vetb25.* IF STATUS = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF SELECT descrip_esp,unidad_med INTO descrip1,medida FROM iptb00002 WHERE cod_n = p_vetb25.cod_n and cod_grupo = p_vetb25.cod_grupo and cod_tipo = p_vetb25.cod_tipo and cod_sec= p_vetb25.cod_sec LET nom_cliente = NULL SELECT nombre INTO nom_cliente FROM vetb00004 WHERE tipo_cliente = p_vetb25.tipo_cliente and sec_cliente = p_vetb25.sec_cliente LET descripcion = descrip1 CLIPPED DISPLAY BY NAME p_vetb25.*,descripcion,medida,nom_cliente COMMAND "Primero" "Presenta en pantalla el primer registro encontrado" FETCH FIRST datos INTO p_vetb25.* SELECT descrip_esp,unidad_med INTO descrip1,medida FROM iptb00002 WHERE cod_n = p_vetb25.cod_n and cod_grupo = p_vetb25.cod_grupo and cod_tipo = p_vetb25.cod_tipo and cod_sec = p_vetb25.cod_sec LET nom_cliente = NULL SELECT nombre INTO nom_cliente FROM vetb00004 WHERE tipo_cliente = p_vetb25.tipo_cliente and sec_cliente = p_vetb25.sec_cliente LET descripcion = descrip1 CLIPPED DISPLAY BY NAME p_vetb25.*,descripcion,medida,nom_cliente IF STATUS = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado" FETCH LAST datos INTO p_vetb25.* SELECT descrip_esp,unidad_med INTO descrip1,medida FROM iptb00002 WHERE cod_n = p_vetb25.cod_n and cod_grupo = p_vetb25.cod_grupo and cod_tipo = p_vetb25.cod_tipo and cod_sec = p_vetb25.cod_sec LET nom_cliente = NULL SELECT nombre INTO nom_cliente FROM vetb00004 WHERE tipo_cliente = p_vetb25.tipo_cliente and sec_cliente = p_vetb25.sec_cliente LET descripcion = descrip1 CLIPPED DISPLAY BY NAME p_vetb25.*,descripcion,medida,nom_cliente IF STATUS = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF COMMAND "Escoger" " Actualiza Registro Cancela Operacion" IF p_vetb25.status_t= "E" THEN LET numero_msg= 36 CALL msg(numero_msg) RETURN END IF INPUT BY NAME p_vetb25.precio WITHOUT DEFAULTS AFTER FIELD precio IF p_vetb25.precio IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD precio END IF AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF IF p_vetb25.precio IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD precio END IF EXIT INPUT END INPUT #### Verifica si el usuario presiono la tecla IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF IF p_vetb25.tipo_cliente is NULL AND p_vetb25.sec_cliente is NULL THEN UPDATE vetb00025 SET precio = p_vetb25.precio, us_mod = USER, fech_mod = CURRENT WHERE ventas = p_vetb25.ventas and cod_n = p_vetb25.cod_n and cod_grupo = p_vetb25.cod_grupo and cod_tipo = p_vetb25.cod_tipo and cod_sec = p_vetb25.cod_sec and tipo_cliente is NULL and sec_cliente is NULL ELSE UPDATE vetb00025 SET precio = p_vetb25.precio, us_mod = USER, fech_mod = CURRENT WHERE ventas = p_vetb25.ventas and cod_n = p_vetb25.cod_n and cod_grupo = p_vetb25.cod_grupo and cod_tipo = p_vetb25.cod_tipo and cod_sec=p_vetb25.cod_sec and tipo_cliente=p_vetb25.tipo_cliente and sec_cliente = p_vetb25.sec_cliente END IF LET numero_msg = 13 CALL msg(numero_msg) COMMAND KEY ("L") "eLiminar" "Elimina registro que esta en la pantalla" UPDATE vetb00025 SET status_t ="E" WHERE ventas = p_vetb25.ventas and cod_n = p_vetb25.cod_n and cod_grupo = p_vetb25.cod_grupo and cod_tipo = p_vetb25.cod_tipo and cod_sec=p_vetb25.cod_sec and tipo_cliente =p_vetb25.tipo_cliente and sec_cliente = p_vetb25.sec_cliente LET numero_msg = 39 CALL msg(numero_msg) COMMAND "Retornar" "Retorna al menu anterior" CLEAR FORM EXIT MENU END MENU END FUNCTION } FUNCTION busca_pt1() OPEN WINDOW busqueda AT 7,12 WITH FORM "ipfmwd008" ATTRIBUTE (BORDER,FORM LINE FIRST + 2,COMMENT LINE LAST,MESSAGE LINE LAST) LET int_flag = false CONSTRUCT BY NAME criterio ON a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec, a.descrip_esp LET selec2 = "SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp ", "FROM iptb00002 a ", "WHERE a.status_t is NULL AND ", criterio clipped, " ORDER BY 5 " IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) GO TO sale9 END IF PREPARE busca_pila FROM selec2 IF status >= 0 THEN IF status = notfound THEN LET numero_msg = 12 CALL msg(numero_msg) END IF END IF DECLARE buscar_pila CURSOR FOR busca_pila LET idx = 1 FOREACH buscar_pila INTO pilas[idx].* IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) EXIT FOREACH END IF LET idx = idx + 1 END FOREACH CALL set_count(idx-1) MESSAGE " Selecciona Producto Terminado donde esta el cursor" DISPLAY ARRAY pilas TO s_pilas.* LET curr1 = arr_curr() LET m_articulos.cod_n = pilas[curr1].cod_n LET m_articulos.cod_grupo = pilas[curr1].cod_grupo LET m_articulos.cod_tipo = pilas[curr1].cod_tipo LET m_articulos.cod_sec = pilas[curr1].cod_sec LET descuento.cod_n = pilas[curr1].cod_n LET descuento.cod_grupo = pilas[curr1].cod_grupo LET descuento.cod_tipo = pilas[curr1].cod_tipo LET descuento.cod_sec = pilas[curr1].cod_sec LET descrip1 = pilas[curr1].descrip_esp LABEL sale9: CLOSE WINDOW busqueda END FUNCTION FUNCTION consulta_clientes() OPEN WINDOW busqueda AT 7,12 WITH FORM "vefmwd002" ATTRIBUTE (BORDER,FORM LINE FIRST + 2,COMMENT LINE LAST,MESSAGE LINE LAST) LET int_flag = false CONSTRUCT criterio ON a.nombre FROM nombre LET selec2 = "SELECT a.tipo_cliente, a.sec_cliente, a.nombre ", " FROM vetb00004 a", " WHERE ", "a.status_t is NULL AND ", criterio clipped, "ORDER BY 1,2 " IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) GO TO salir_consulta_c END IF PREPARE busca_clientes FROM selec2 IF status >= 0 THEN IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) END IF END IF DECLARE buscar_clientes CURSOR FOR busca_clientes LET idx = 1 FOREACH buscar_clientes INTO arr_clientes[idx].* IF status = NOTFOUND THEN EXIT FOREACH END IF IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) EXIT FOREACH END IF LET idx = idx + 1 END FOREACH CALL set_count(idx-1) MESSAGE " Selecciona Cliente donde esta el cursor" DISPLAY ARRAY arr_clientes TO s_clientes.* LET curr1 = arr_curr() LET cliente_dir.tipo_cliente = arr_clientes[curr1].tipo_cliente LET cliente_dir.sec_cliente = arr_clientes[curr1].sec_cliente LET descrip1 = arr_clientes[curr1].nombre LABEL salir_consulta_c: CLOSE WINDOW busqueda END FUNCTION FUNCTION cventas() DEFINE kventas SMALLINT, dventas CHAR(30) LET ventas = ui.combobox.forname("formonly.ventas") DECLARE bventas CURSOR FOR SELECT a.ventas,a.descripcion FROM vetb00061 a CALL ventas.clear() FOREACH bventas INTO kventas,dventas CALL ventas.additem(kventas,dventas) END FOREACH END FUNCTION FUNCTION busca_info(pcodn,pcodgrupo,pcodtipo,pcodsec,ptipocliente,pseccliente) DEFINE pcodn,pcodgrupo,pcodtipo,pcodsec,ptipocliente SMALLINT, pseccliente INT, costo_r DEC(12,2) # EXISTENCIA LET existencia = 0 SELECT SUM(a.cantidad_2) INTO existencia FROM iptb00006 a WHERE a.cod_n = pcodn AND a.cod_grupo = pcodgrupo AND a.cod_tipo = pcodtipo AND a.cod_sec = pcodsec AND a.status_t IS NULL # BUSCA COSTO LET costo_std = 0 LET costo_lq = 0 SELECT a.material+a.labor+a.gastos INTO costo_std FROM iptb00004 a WHERE a.ano = YEAR(TODAY) and a.mes_ini = "01" AND a.mes_fin = "12" AND a.cod_n = pcodn AND a.cod_grupo = pcodgrupo AND a.cod_tipo = pcodtipo AND a.cod_sec = pcodsec AND a.status_t IS NULL LET selec = "SELECT CONVERT(CHAR(10),max(a.fecha_lq),103) FROM cttb00013 a WHERE a.cod_n = ? AND a.cod_grupo = ? AND a.cod_tipo = ? AND a.cod_sec = ? AND a.status_t IS NULL " PREPARE cfecha FROM selec EXECUTE cfecha INTO fecha1 USING pcodn,pcodgrupo, pcodtipo,pcodsec SELECT avg(a.costo_lq) INTO costo_r FROM cttb00013 a WHERE a.fecha_lq = fecha1 AND a.cod_n = pcodn AND a.cod_grupo = pcodgrupo AND a.cod_tipo = pcodtipo AND a.cod_sec = pcodsec AND a.status_t IS NULL RETURN existencia,costo_std,costo_r END FUNCTION # CALL consulta_clientes()