{ ------------------------------------------------------------------ PROGRAMA : veprmt049 OBJETIVO : Generar las Cotizaciones de clientes PROGRAMADOR : JUAN SOTO FECHA REALIZACION : Tuesday, 27 November, 2001 11:56:20 AM MODIFICADO POR : Empresa : MARMOTECH, S.A. ------------------------------------------------------------------ } IMPORT os GLOBALS "veprgb000.4gl" DEFINE file,rcol,arch_pc,fila_excel,chconvierte,chmensaje STRING, correo CHAR(50),pcelular1,pcelular2 CHAR(15), factor DEC(12,5), pdescrip CHAR(40), punidad CHAR(4), psimbolo CHAR(4), pexistencia DEC(12,4),controlE CHAR(2), orden_cliente CHAR(25), prtb12 RECORD LIKE prtb00012.*, exito BOOLEAN, respuesta_req,tipo3 CHAR(3), chdescuento VARCHAR(10), precio_ant DEC(12,2), d_tipos,f_tipos, mensaje,dir_file,filepath,filedestino STRING DEFINE actualiza CHAR(1), pnombre_cliente CHAR(50), telefono,prog CHAR(9), esta CHAR(1), xorden,pvend,ultimo_numero,xi,p_res,tmpnumero1 INTEGER, vetb05 RECORD LIKE vetb00005.*, p_vetb49 RECORD LIKE vetb00049.* DEFINE cnt SMALLINT, cantidad_ant LIKE vetb00051.cantidad DEFINE despiece DYNAMIC ARRAY OF RECORD etiqueta CHAR(20), cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, lado_1 DEC(12,5), lado_2 DEC(12,5), lado_3 DEC(12,5), cantidad DEC(12,5), medida DEC(12,5) END RECORD, cuenta_item SMALLINT, total_medida DEC(12,4), valor1,valor2,balancecxc,pporciento DEC(12,2) DEFINE salida STRING MAIN DEFER INTERRUPT CALL STARTLOG("veprmt049.log") CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CALL ARG_VAL(3) RETURNING impresor CALL ARG_VAL(4) RETURNING copia #LET usuarios="jsoto" #LET clave="lmmjvsd2009" CONNECT TO "exterior" AS "IFMX" CONNECT TO "smarmotech" AS "MSSQL" USER usuarios USING clave CALL startlog("errores.log") SELECT a.* INTO p_companias.* FROM companias a SELECT a.sec_vend,a.email,a.celular,a.celular2 INTO pvend,correo,pcelular1,pcelular2 FROM seg0000 a WHERE a.usuario = usuarios LET chdescuento = 'NO' SELECT a.controldescuento INTO chdescuento FROM seg0003 a WHERE a.usuario = usuarios IF chdescuento IS NULL THEN LET chdescuento = 'NO' END IF CALL veprmt049() END MAIN FUNCTION veprmt049() CLEAR SCREEN OPTIONS FORM LINE 3, ERROR LINE 24, COMMENT LINE 24 OPEN FORM vefmmt049 FROM "vefmmt049" DISPLAY FORM vefmmt049 #CALL f_canvas() # BUSCA EL ULTIMO NUMERO TEMPORAL PARA EL CONTROL DE CODIGOS # DUPLICADOS DE PRODUCTOS SET CONNECTION "MSSQL" SELECT a.documento INTO tmpnumero1 FROM repitecodigotmp a WHERE tipo_doc = 'CO' IF tmpnumero1 IS NULL OR tmpnumero1 = 0 THEN LET tmpnumero1=1000 INSERT INTO repitecodigotmp VALUES (tmpnumero1,'CO') END IF LET tmpnumero1 = tmpnumero1 + 1 UPDATE repitecodigotmp set documento = tmpnumero1 MENU ON ACTION nuevo SET CONNECTION "MSSQL" LET INT_FLAG = FALSE CLEAR FORM LET actualiza = "N" INITIALIZE p_vetb50.* TO NULL CALL arr_cotiza.clear() CALL vepcad008() ON ACTION buscar SET CONNECTION "MSSQL" LET INT_FLAG = FALSE CLEAR FORM LET actualiza = "S" CALL vepcmf008() ON ACTION salir EXIT MENU END MENU END FUNCTION FUNCTION vepcad008() DEFINE pasa BOOLEAN ## Captura los datos que va a contener el registro SET CONNECTION "MSSQL" LET INT_FLAG = false #LET p_vetb50.tipo_cliente = NULL #LET p_Vetb50.sec_cliente = NULL LET p_vetb50.fecha_entrega = TODAY USING "dd/mm/yyyy" LET p_vetb50.fecha = TODAY USING "dd/mm/yyyy" IF actualiza = 'N' THEN LET p_vetb50.sec_vend = pvend SELECT a.nom1_emp,a.apell1_emp,a.telefono INTO nombres,apellidos,telefono FROM adtb00003 a WHERE a.num_emp = p_vetb50.sec_vend SELECT a.sec_vend,a.email,a.celular,a.celular2 INTO pvend,correo,pcelular1,pcelular2 FROM seg0000 a WHERE a.usuario = usuarios LET nombre_vend = nombres CLIPPED, " ",apellidos CLIPPED,pcelular1 CLIPPED," / ", pcelular2 CLIPPED DISPLAY BY NAME nombre_vend END IF DELETE FROM repitecodigo WHERE repitecodigo.documento = tmpnumero1 AND repitecodigo.TIPO_DOC = 'CO' DIALOG ATTRIBUTE(UNBUFFERED) INPUT BY NAME p_vetb50.cod_cia,p_vetb50.cotizacion_no, p_vetb50.ventas,p_vetb50.tipo_cliente, p_vetb50.sec_cliente,p_vetb50.nombre_cliente, p_vetb50.rnc,p_vetb50.porc_itbi,p_vetb50.nombre_proyecto, p_vetb50.direccion_proyecto, p_vetb50.direccion_cliente,p_vetb50.cod_provincia, p_vetb50.fecha,p_vetb50.fecha_entrega, p_vetb50.plazo_entrega,p_vetb50.cond_pago,p_vetb50.sec_vend, p_vetb50.comentario,p_vetb50.contacto, p_vetb50.tipo_precio,p_vetb50.telefono_r, p_vetb50.celular,p_vetb50.telefono_o, p_vetb50.beeper, p_vetb50.fax,p_vetb50.email ATTRIBUTE (WITHOUT DEFAULTS) BEFORE INPUT LET p_vetb50.cod_cia=1 # LET p_vetb50.direccion_proyecto = NULL # DISPLAY BY NAME p_vetb50.direccion_proyecto AFTER FIELD nombre_proyecto IF p_vetb50.nombre_proyecto IS NULL THEN CALL msg(16) NEXT FIELD nombre_proyecto END IF AFTER FIELD direccion_proyecto IF p_vetb50.direccion_proyecto IS NULL THEN CALL msg(16) NEXT FIELD direccion_proyecto END IF ON ACTION busca_direccion IF p_vetb50.tipo_cliente IS NOT NULL AND p_vetb50.sec_cliente IS NOT NULL THEN LET chconvierte = null IF p_vetb50.direccion_proyecto IS NOT NULL THEN LET chconvierte = fgl_winquestion("DIRECCION","EL CAMPO ESTA LLENO CON UNA DIRECCION, DESEA SUSTITUIRLA?","NO","YES|NO","QUESTION",0) END IF IF chconvierte = 'SI' OR p_vetb50.direccion_proyecto IS NULL THEN DISPLAY "ENTRE" LET selec = "SELECT ISNULL(RTRIM(a.calle),' ')+', '+ISNULL(RTRIM(a.casa_num),' ')+', '+ ISNULL(RTRIM(a.urbanizacion),' ') +', '+ISNULL(RTRIM(a.barrio),' ') FROM vetb00005 a WHERE a.tipo_cliente =? AND ", " a.sec_cliente =?" PREPARE cbusca FROM selec EXECUTE cbusca USING p_vetb50.tipo_cliente,p_vetb50.sec_cliente INTO p_vetb50.direccion_proyecto DISPLAY BY NAME p_vetb50.direccion_proyecto END IF END IF ON KEY(CONTROL-W) IF INFIELD(tipo_cliente) THEN CALL busca_cliente8() DISPLAY BY NAME p_vetb50.tipo_cliente,p_vetb50.sec_cliente,p_vetb50.nombre_cliente LET int_flag = FALSE END IF IF INFIELD(sec_cliente) THEN CALL busca_cliente8() DISPLAY BY NAME p_vetb50.tipo_cliente,p_vetb50.sec_cliente,p_vetb50.nombre_cliente LET int_flag = FALSE END IF IF INFIELD(cod_provincia) THEN call busca_provincia1() DISPLAY BY NAME p_vetb50.cod_provincia,nombre_ciudad LET int_flag = FALSE END IF BEFORE FIELD cod_cia IF actualiza ="S" THEN NEXT FIELD tipo_cliente ELSE SELECT a.itbi,a.porciento INTO p_vetb50.porc_itbi,pporciento FROM vetb00019 a WHERE a.disponible = 'S' DISPLAY BY NAME p_vetb50.porc_itbi END IF BEFORE FIELD ventas IF actualiza <> "S" THEN LET pventas = ui.ComboBox.forName("formonly.ventas") CALL cventas() END IF BEFORE FIELD cond_pago # IF actualiza <> "S" THEN LET pcondicion = ui.ComboBox.forName("formonly.cond_pago") CALL ccondicion() # END IF AFTER FIELD tipo_cliente IF p_vetb50.tipo_cliente IS NOT NULL THEN SELECT a.tipo_cliente FROM vetb00060 a WHERE a.tipo_cliente = p_vetb50.tipo_cliente AND a.ventas = p_vetb50.ventas IF STATUS = NOTFOUND THEN LET numero_msg =386 CALL msg(numero_msg) NEXT FIELD tipo_cliente END IF END IF AFTER FIELD cod_cia IF p_vetb50.cod_cia IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_cia END IF CASE WHEN p_vetb50.cod_cia = 1 LET nombre_cia = p_companias.nombre EXIT CASE WHEN p_vetb50.cod_cia = 3 LET nombre_cia = "EMPRESA GENERAL" EXIT CASE END CASE DISPLAY BY NAME nombre_cia BEFORE FIELD fecha IF actualiza = "N" THEN LET p_vetb50.fecha = TODAY DISPLAY BY NAME p_vetb50.fecha END IF AFTER FIELD fecha IF actualiza = "N" THEN LET p_vetb50.fecha_entrega = p_vetb50.fecha + 19 DISPLAY BY NAME p_vetb50.fecha_entrega END IF AFTER FIELD telefono_r IF p_vetb50.telefono_r IS NOT NULL THEN IF LENGTH(p_vetb50.telefono_r) != 12 THEN LET numero_msg =77 CALL msg(numero_msg) #NEXT FIELD telefono_r END IF END IF AFTER FIELD fax IF p_vetb50.fax IS NOT NULL THEN IF LENGTH(p_vetb50.fax) != 12 THEN LET numero_msg =77 CALL msg(numero_msg) #NEXT FIELD fax END IF END IF AFTER FIELD celular IF p_vetb50.celular IS NOT NULL THEN IF LENGTH(p_vetb50.celular) != 12 THEN LET numero_msg =77 CALL msg(numero_msg) #NEXT FIELD celular END IF END IF AFTER FIELD sec_cliente IF p_vetb50.sec_cliente IS NOT NULL THEN SELECT a.nombre,a.telefono_casa,a.telefono,a.telex,a.patente,a.cod_provincia, b.nombre_provincia, a.num_rnc,a.tipo_negocio INTO p_vetb50.nombre_cliente,p_vetb50.telefono_r,p_vetb50.telefono_o, p_vetb50.celular, p_vetb50.email,p_vetb50.cod_provincia,nombre_ciudad,p_vetb50.rnc, cliente_bas.tipo_negocio FROM vetb00004 a,vetb00020 b WHERE a.tipo_cliente = p_vetb50.tipo_cliente AND a.sec_cliente = p_vetb50.sec_cliente AND a.cod_provincia = b.cod_provincia AND a.status_t IS NULL IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD sec_cliente END IF IF cliente_bas.tipo_negocio IS NULL THEN CALL fgl_winmessage("ERROR","TIPO DE NEGOCIO ESTA NULO EN LA MAESTRA, FAVOR ACTUALIZAR","INFO") NEXT FIELD sec_cliente END IF SELECT a.* INTO vetb05.* FROM vetb00005 a WHERE a.tipo_cliente = p_vetb50.tipo_cliente AND a.sec_cliente = p_vetb50.sec_cliente AND a.status_t IS NULL LET p_vetb50.direccion_cliente = vetb05.calle CLIPPED," ,",vetb05.casa_num CLIPPED, vetb05.barrio CLIPPED," ,",vetb05.urbanizacion CLIPPED # BUSCA INFORMACION CONTACTO DE LAS ULTIMAS COTIZACIONES IF p_vetb50.celular IS NULL THEN SELECT MAX(a.celular) INTO p_vetb50.celular FROM vetb00050 a WHERE a.tipo_cliente = p_vetb50.tipo_cliente AND a.sec_cliente = p_vetb50.sec_cliente AND a.status_t IS NULL DISPLAY BY NAME p_vetb50.celular END IF LET p_vetb50.nombre_proyecto = NULL SELECT a.* INTO p_vetb49.* FROM vetb00049 a WHERE a.tipo_cliente = p_vetb50.tipo_cliente AND a.sec_cliente = p_vetb50.sec_cliente AND a.status_t IS NULL IF p_vetb50.nombre_proyecto IS NULL THEN LET p_vetb50.nombre_proyecto = p_vetb49.nombre_proyecto END IF IF p_vetb50.direccion_proyecto IS NULL THEN LET p_vetb50.direccion_proyecto = p_vetb49.direccion_proyecto END IF DISPLAY BY NAME p_vetb50.*,nombre_ciudad # BUSCA VENDEDOR SELECT a.sec_vend INTO p_vetb50.sec_vend FROM vetb00028 a WHERE a.tipo_cliente = p_vetb50.tipo_cliente AND a.sec_cliente = p_vetb50.sec_cliente CALL control_vendedor(p_vetb50.sec_vend,p_vetb50.tipo_cliente,p_vetb50.sec_cliente) RETURNING pasa IF pasa = TRUE THEN NEXT FIELD sec_vend END IF SELECT a.nom1_emp,a.apell1_emp,a.telefono INTO nombres,apellidos,telefono FROM adtb00003 a WHERE a.num_emp = p_vetb50.sec_vend LET nombre_vend = nombres CLIPPED, " ",apellidos CLIPPED," ",pcelular1 CLIPPED, " / ",pcelular2 CLIPPED DISPLAY BY NAME p_vetb50.sec_vend,nombre_vend END IF IF p_vetb50.sec_cliente IS NOT NULL THEN # BUSCA BALANCE CON AVANCES SELECT SUM(a.valor+a.monto_desc) INTO valor1 FROM cctb00001 a WHERE a.fecha_orig <= today AND a.tipo_cliente = p_vetb50.tipo_cliente AND a.sec_cliente = p_Vetb50.sec_cliente AND a.tipo_doc IN ("AV") AND a.num_doc = a.aplica_a AND a.status_t IS NULL IF valor1 IS NULL THEN LET valor1 = 0 END IF # BUSCA BALANCE SIN AVANCES SELECT SUM(a.valor+a.monto_desc) INTO valor2 FROM cctb00001 a WHERE a.fecha_orig <= today AND a.tipo_cliente = p_Vetb50.tipo_cliente AND a.sec_cliente = p_vetb50.sec_cliente AND a.tipo_doc NOT IN ("AV","PC") AND a.status_t IS NULL IF valor1 IS NULL THEN LET valor1 = 0 END IF LET balancecxc = valor2-valor1 DISPLAY BY NAME balancecxc END IF AFTER FIELD cod_provincia SELECT a.nombre_provincia INTO nombre_ciudad FROM vetb00020 a WHERE a.cod_provincia = p_vetb50.cod_provincia IF STATUS = NOTFOUND THEN LET numero_msg= 3 CALL msg(numero_msg) NEXT FIELD cod_provincia END IF DISPLAY BY NAME nombre_ciudad AFTER FIELD sec_vend SELECT a.nom1_emp,a.apell1_emp,a.telefono INTO nombres,apellidos,telefono FROM adtb00003 a WHERE a.num_emp = p_vetb50.sec_vend IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD sec_vend END IF LET nombre_vend = nombres CLIPPED, " ",apellidos CLIPPED," ",pcelular1 CLIPPED, " / ",pcelular2 CLIPPED DISPLAY BY NAME nombre_vend # CONTROL VENDEDOR CALL control_vendedor(p_vetb50.sec_vend,p_vetb50.tipo_cliente,p_vetb50.sec_cliente) RETURNING pasa IF pasa = TRUE THEN NEXT FIELD sec_vend END IF AFTER INPUT LET d_tipos="Images" LET f_tipos="*.jpg *.png *.gif" LET mensaje=%"Elige Imagen" IF p_vetb50.tipo_cliente IS NOT NULL THEN SELECT a.tipo_cliente FROM vetb00060 a WHERE a.tipo_cliente = p_vetb50.tipo_cliente AND a.ventas = p_vetb50.ventas IF STATUS = NOTFOUND THEN LET numero_msg =386 CALL msg(numero_msg) NEXT FIELD tipo_cliente END IF END IF IF p_vetb50.cond_pago < 1 OR p_vetb50.cond_pago IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cond_pago END IF IF p_vetb50.ventas IS NULL THEN CALL msg(16) NEXT FIELD ventas END IF IF p_vetb50.sec_vend = 0 OR p_vetb50.sec_Vend IS NULL THEN CALL msg(16) NEXT FIELD sec_vend END IF END INPUT INPUT ARRAY arr_cotiza FROM s_pedido.* ATTRIBUTE(WITHOUT DEFAULTS) BEFORE FIELD porc_Desc IF chdescuento <> "SI" THEN SELECT DISTINCT a.cotizacion_no FROM vetb00088 a WHERE a.cotizacion_no = p_vetb50.cotizacion_no AND a.cod_n = arr_cotiza[curr].cod_n AND a.cod_grupo = arr_cotiza[curr].cod_grupo AND a.cod_tipo = arr_cotiza[curr].cod_tipo AND a.cod_Sec = arr_cotiza[curr].cod_sec AND a.autoriza = "SI" IF STATUS <> NOTFOUND THEN NEXT FIELD ruta END IF END IF BEFORE INPUT DECLARE buscaitm CURSOR FOR SELECT a.area,' ',a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descripcion,b.unidad_med, a.cantidad_1,a.cantidad,a.precio,a.porc_desc,'0',a.foto_producto FROM vetb00051 a,iptb00002 b WHERE a.cotizacion_no = p_vetb50.cotizacion_no AND a.cod_cia = p_vetb50.cod_cia 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 LET idx = 1 FOREACH buscaitm INTO arr_cotiza[idx].* LET idx = idx + 1 END FOREACH CALL set_count(idx-1) ON ACTION busca_descrip LET curr = arr_curr() CALL busca_descripcion() RETURNING arr_cotiza[curr].nombre_p DISPLAY arr_cotiza[curr].nombre_p TO s_pedido[scr_l].nombre_p ON KEY(CONTROL-W) IF INFIELD(cod_n) THEN CALL busca_prod1() DISPLAY arr_cotiza[curr].cod_n TO s_pedido[scr_l].cod_n DISPLAY arr_cotiza[curr].cod_grupo TO s_pedido[scr_l].cod_grupo DISPLAY arr_cotiza[curr].cod_tipo TO s_pedido[scr_l].cod_tipo DISPLAY arr_cotiza[curr].cod_sec TO s_pedido[scr_l].cod_sec DISPLAY arr_cotiza[curr].nombre_p TO s_pedido[scr_l].nombre_p DISPLAY arr_cotiza[curr].unidad TO s_pedido[scr_l].unidad LET int_flag = FALSE NEXT FIELD cod_n END IF IF INFIELD(cod_grupo) THEN CALL busca_prod1() DISPLAY arr_cotiza[curr].cod_n TO s_pedido[scr_l].cod_n DISPLAY arr_cotiza[curr].cod_grupo TO s_pedido[scr_l].cod_grupo DISPLAY arr_cotiza[curr].cod_tipo TO s_pedido[scr_l].cod_tipo DISPLAY arr_cotiza[curr].cod_sec TO s_pedido[scr_l].cod_sec DISPLAY arr_cotiza[curr].nombre_p TO s_pedido[scr_l].nombre_p DISPLAY arr_cotiza[curr].unidad TO s_pedido[scr_l].unidad LET int_flag = FALSE NEXT FIELD cod_n END IF IF INFIELD(cod_tipo) THEN CALL busca_prod1() DISPLAY arr_cotiza[curr].cod_n TO s_pedido[scr_l].cod_n DISPLAY arr_cotiza[curr].cod_grupo TO s_pedido[scr_l].cod_grupo DISPLAY arr_cotiza[curr].cod_tipo TO s_pedido[scr_l].cod_tipo DISPLAY arr_cotiza[curr].cod_sec TO s_pedido[scr_l].cod_sec DISPLAY arr_cotiza[curr].nombre_p TO s_pedido[scr_l].nombre_p DISPLAY arr_cotiza[curr].unidad TO s_pedido[scr_l].unidad LET int_flag = FALSE NEXT FIELD cod_n END IF IF INFIELD(cod_sec) THEN CALL busca_prod1() DISPLAY arr_cotiza[curr].cod_n TO s_pedido[scr_l].cod_n DISPLAY arr_cotiza[curr].cod_grupo TO s_pedido[scr_l].cod_grupo DISPLAY arr_cotiza[curr].cod_tipo TO s_pedido[scr_l].cod_tipo DISPLAY arr_cotiza[curr].cod_sec TO s_pedido[scr_l].cod_sec DISPLAY arr_cotiza[curr].nombre_p TO s_pedido[scr_l].nombre_p DISPLAY arr_cotiza[curr].unidad TO s_pedido[scr_l].unidad LET int_flag = FALSE NEXT FIELD cod_n END IF IF INFIELD(area) THEN CALL busca_area() DISPLAY arr_cotiza[curr].area TO s_pedido[scr_l].area DISPLAY arr_cotiza[curr].nombre_area TO s_pedido[scr_l].nombre_area END IF BEFORE ROW LET curr = arr_curr() LET scr_l = scr_line() # LET arr_cotiza[curr].fila = curr LET cantidad_ant = arr_cotiza[curr].cantidad IF arr_cotiza[curr].ruta IS NOT NULL THEN DISPLAY arr_cotiza[curr].ruta TO foto_producto END IF # DISPLAY arr_cotiza[curr].fila TO s_pedido[scr_l].fila AFTER FIELD area IF arr_cotiza[curr].area IS NOT NULL THEN LET nombre_area = NULL SELECT a.nombre_area INTO nombre_area FROM prtb00016 a WHERE a.area_num = arr_cotiza[curr].area IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD area END IF LET arr_cotiza[curr].nombre_area = nombre_area DISPLAY arr_cotiza[curr].nombre_area TO s_pedido[scr_l].nombre_area END IF AFTER FIELD cod_sec LET scr_l = scr_line() IF arr_cotiza[curr].cod_sec IS NOT NULL THEN LET controlE= NULL IF actualiza = 'N' THEN # OPERACION PAA CUANDO ES ADICIONANDO COTIZACION SELECT a.descrip_esp,a.unidad_med,b.factor_conv,a.control_existencia INTO arr_cotiza[curr].nombre_p,arr_cotiza[curr].unidad,factor,controlE FROM iptb00002 a,iptb00001 b WHERE a.cod_n = arr_cotiza[curr].cod_n AND a.cod_grupo = arr_cotiza[curr].cod_grupo AND a.cod_tipo = arr_cotiza[curr].cod_tipo AND a.cod_sec = arr_cotiza[curr].cod_sec 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 IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD area END IF DISPLAY arr_cotiza[curr].nombre_p TO s_pedido[scr_l].nombre_p DISPLAY arr_cotiza[curr].unidad TO s_pedido[scr_l].unidad LET pdescrip = arr_cotiza[curr].nombre_p LET punidad = arr_cotiza[curr].unidad ELSE IF arr_cotiza[curr].nombre_p IS NULL THEN # OPERACION CUANDO ESTA MODIFICANDO COTIZACION SELECT a.descrip_esp,a.unidad_med,b.factor_conv,a.control_existencia INTO arr_cotiza[curr].nombre_p,arr_cotiza[curr].unidad,factor,controlE FROM iptb00002 a,iptb00001 b WHERE a.cod_n = arr_cotiza[curr].cod_n AND a.cod_grupo = arr_cotiza[curr].cod_grupo AND a.cod_tipo = arr_cotiza[curr].cod_tipo AND a.cod_sec = arr_cotiza[curr].cod_sec 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 IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD area END IF DISPLAY arr_cotiza[curr].nombre_p TO s_pedido[scr_l].nombre_p DISPLAY arr_cotiza[curr].unidad TO s_pedido[scr_l].unidad LET pdescrip = arr_cotiza[curr].nombre_p LET punidad = arr_cotiza[curr].unidad END IF END IF LET verdad = "N" DELETE FROM repitecodigo WHERE documento = tmpnumero1 and tipo_doc = 'CO' FOR idx = 1 TO arr_count() LET pcodigo = arr_cotiza[idx].area USING "&&&", arr_cotiza[idx].cod_n USING "&&&&", arr_cotiza[idx].cod_grupo USING "&&&&", arr_cotiza[idx].cod_tipo USING "&&&&", arr_cotiza[idx].cod_sec USING "&&&&" IF pcodigo IS NOT NULL THEN WHENEVER ERROR CONTINUE INSERT INTO repitecodigo (documento,tipo_doc,codigo,codid,us_crea,fech_crea) VALUES (tmpnumero1,'CO',pcodigo,curr,usuarios,getdate()) IF sqlca.sqlcode THEN CALL fgl_winmessage("DUPLICADO","CODIGO DUPLICADO EN CAPTURA DE DATOS","STOP") CALL arr_cotiza.deleteElement(curr) NEXT FIELD cod_n END IF END IF END FOR # CONTROL DESPIECE SELECT a.cod_n FROM iptb00027 a WHERE a.cod_n = arr_cotiza[curr].cod_n AND a.cod_grupo = arr_cotiza[curr].cod_grupo AND a.cod_tipo = arr_cotiza[curr].cod_tipo AND a.cod_sec = arr_cotiza[curr].cod_sec IF STATUS <> NOTFOUND THEN CALL despiece() DISPLAY arr_cotiza[curr].cantidad_1 TO s_pedido[scr_l].cantidad_1 END IF # IF arr_cotiza[curr].precio IS NULL THEN CALL precios(p_vetb50.ventas,arr_cotiza[curr].cod_n,arr_cotiza[curr].cod_grupo,arr_cotiza[curr].cod_tipo, arr_cotiza[curr].cod_Sec,p_vetb50.tipo_cliente,p_vetb50.sec_cliente) RETURNING arr_cotiza[curr].precio,existe IF existe = 'N' THEN CALL msg(85) LET existe = 'S' LET arr_cotiza[curr].precio = NULL LET arr_cotiza[idx].total_p = 0 DISPLAY arr_cotiza[idx].precio TO s_pedido[scr_l].precio DISPLAY arr_cotiza[idx].total_p TO s_pedido[scr_l].total_p NEXT FIELD cod_n END IF LET precio_ant = arr_cotiza[curr].precio IF precio_ant IS NULL THEN LET precio_ant = 0 END IF DISPLAY arr_cotiza[curr].precio TO s_pedido[scr_l].precio END IF # END IF AFTER FIELD precio IF arr_cotiza[curr].cod_Sec IS NOT NULL THEN IF arr_cotiza[curr].precio < precio_ant THEN CALL fgl_winmessage("ERROR","PRECIO ES MENOR AL PRECIO DE LISTA","INFO") NEXT FIELD precio END IF END IF { AFTER ROW # CONTROL DESPIECE IF arr_cotiza[curr].cod_sec IS NOT NULL AND arr_cotiza[curr].cod_n IS NOT NULL AND arr_cotiza[curr].cod_grupo IS NOT NULL AND arr_cotiza[curr].cod_tipo IS NOT NULL THEN SELECT a.cod_n FROM iptb00027 a WHERE a.cod_n = arr_cotiza[curr].cod_n AND a.cod_grupo = arr_cotiza[curr].cod_grupo AND a.cod_tipo = arr_cotiza[curr].cod_tipo AND a.cod_sec = arr_cotiza[curr].cod_sec IF STATUS <> NOTFOUND THEN IF actualiza = 'N' THEN LET p_vetb50.cotizacion_no = tmpnumero1 END IF SELECT a.cod_n FROM vetb00022 a WHERE a.area = arr_cotiza[curr].area AND a.cod_n = arr_cotiza[curr].cod_n AND a.cod_grupo = arr_cotiza[curr].cod_grupo AND a.cod_tipo = arr_cotiza[curr].cod_tipo AND a.cod_Sec = arr_cotiza[curr].cod_sec AND a.cotizacion_no = p_vetb50.cotizacion_no IF STATUS = NOTFOUND THEN CALL despiece() DISPLAY arr_cotiza[curr].cantidad_1 TO s_pedido[scr_l].cantidad_1 END IF END IF END IF} ON ACTION dibujo LET curr = arr_curr() CALL ui.Interface.frontCall("standard","openfile", [dir_file,d_tipos,f_tipos,mensaje], [filepath] ) IF filepath IS NOT NULL THEN DISPLAY "filepath ",filepath LET arr_cotiza[curr].ruta= filepath CLIPPED DISPLAY arr_cotiza[curr].ruta TO foto_producto LET filedestino = FGL_GETENV("IMAGENNOMINA") LET filedestino = filedestino CLIPPED,"\\PRODUCTOS\\",p_vetb50.cotizacion_no USING "&&&&&&","-", arr_cotiza[curr].cod_n USING "&&&&", arr_cotiza[curr].cod_grupo USING "&&&&",'-', arr_cotiza[curr].cod_tipo USING "&&&&",'-', arr_cotiza[curr].cod_sec USING "&&&&", ".jpg" # CALL fgl_winmessage("2",filedestino,"info") # CALL fgl_winmessage("3",ruta[idx],"info") CALL fgl_getfile(arr_cotiza[curr].ruta,filedestino) END IF AFTER FIELD porc_desc IF arr_cotiza[curr].porc_desc IS NULL THEN LET arr_cotiza[curr].porc_desc = 0 END IF IF chdescuento <> 'SI' THEN SELECT DISTINCT a.cotizacion_no FROM vetb00088 a WHERE a.cotizacion_no = p_vetb50.cotizacion_no AND a.cod_n = arr_cotiza[curr].cod_n AND a.cod_grupo = arr_cotiza[curr].cod_grupo AND a.cod_tipo = arr_cotiza[curr].cod_tipo AND a.cod_Sec = arr_cotiza[curr].cod_sec AND a.autoriza = "SI" IF STATUS <> NOTFOUND THEN NEXT FIELD ruta END IF IF arr_cotiza[curr].porc_desc > pporciento THEN CALL fgl_winmessage("ERROR","PORCIENTO DESCUENTO MAYOR AL PERMITIDO","INFO") NEXT FIELD porc_Desc END IF ELSE LET arr_cotiza[curr].chactualiza = "SI" END IF IF arr_cotiza[curr].cod_sec IS NOT NULL THEN LET arr_cotiza[curr].total_p = arr_cotiza[curr].precio * arr_cotiza[curr].cantidad LET arr_cotiza[curr].total_p = arr_cotiza[curr].total_p - (arr_cotiza[curr].total_p * (arr_cotiza[curr].porc_desc / 100)) DISPLAY arr_cotiza[curr].total_p TO s_pedido[scr_l].total_p END IF AFTER FIELD cantidad_1 IF actualiza = "S" THEN SELECT UNIQUE a.cotizacion_no FROM prtb00012 a,prtb00013 b WHERE a.cotizacion_no = p_vetb50.cotizacion_no AND a.num_oc = b.num_oc AND # b.area = arr_cotiza[curr].area and b.cod_n = arr_cotiza[curr].cod_n and b.cod_grupo = arr_cotiza[curr].cod_grupo and b.cod_tipo = arr_cotiza[curr].cod_tipo and b.cod_sec = arr_cotiza[curr].cod_sec and a.status_t is null IF STATUS != NOTFOUND THEN LET numero_msg =392 CALL msg(numero_msg) LET arr_cotiza[curr].cantidad = cantidad_ant DISPLAY arr_cotiza[curr].cantidad TO s_pedido[scr_l].cantidad END IF END IF IF arr_cotiza[curr].cod_sec IS NOT NULL THEN SELECT a.factor_conv iNTO factor FROM iptb00001 a WHERE a.cod_n = arr_cotiza[curr].cod_n and a.cod_grupo = arr_cotiza[curr].cod_grupo and a.cod_tipo = arr_cotiza[curr].cod_tipo and a.cod_sec = arr_cotiza[curr].cod_sec and a.status_t IS NULL LET arr_cotiza[curr].cantidad = arr_cotiza[curr].cantidad_1 * factor DISPLAY arr_cotiza[curr].cantidad TO s_pedido[scr_l].cantidad # BUSCA EXISTENCIA IF controlE = "SI" THEN LET pexistencia = 0 SELECT SUM(a.cantidad_2) iNTO pexistencia FROM iptb00006 a WHERE a.cod_n = arr_cotiza[curr].cod_n AND a.cod_grupo = arr_cotiza[curr].cod_grupo AND a.cod_tipo = arr_cotiza[curr].cod_tipo AND a.cod_Sec = arr_cotiza[curr].cod_sec AND a.status_t IS NULL IF pexistencia < 0 THEN call FGL_WINMESSAGE('ADVERTENCIA','EXISTENCIA EN NEGATIVO','STOP') END IF IF arr_cotiza[curr].cantidad > pexistencia THEN call FGL_WINMESSAGE('ADVERTENCIA','CANTIDAD EXCEDE EXISTENCIA','STOP') END IF END IF END IF AFTER INPUT LET p_vetb50.total_bruto = 0 LET p_vetb50.monto_desc = 0 FOR idx = 1 TO arr_count() IF arr_cotiza[idx].cod_sec IS NOT NULL THEN IF arr_cotiza[idx].porc_desc IS NULL THEN LET arr_cotiza[idx].porc_desc = 0 END IF IF arr_cotiza[idx].precio IS NULL OR arr_cotiza[idx].precio = 0 THEN CALL msg(16) NEXT FIELD precio END IF # CONTROL DESPIECE SELECT a.cod_n FROM iptb00027 a WHERE a.cod_n = arr_cotiza[idx].cod_n AND a.cod_grupo = arr_cotiza[idx].cod_grupo AND a.cod_tipo = arr_cotiza[idx].cod_tipo AND a.cod_sec = arr_cotiza[idx].cod_sec IF STATUS <> NOTFOUND THEN SELECT a.cod_n FROM vetb00022 a WHERE a.area = arr_cotiza[idx].area AND a.cod_n = arr_cotiza[idx].cod_n AND a.cod_grupo = arr_cotiza[idx].cod_grupo AND a.cod_tipo = arr_cotiza[idx].cod_tipo AND a.cod_Sec = arr_cotiza[idx].cod_sec AND a.cotizacion_no = p_vetb50.cotizacion_no IF STATUS = NOTFOUND THEN CALL fgl_winmessage("ERROR","EXISTE UN CODIGO QUE NECESITA DESPIEZAR, FAVOR DE DIRIGIRSE AL CODIGO Y REALIZAR EL DESPIECE","INFO") NEXT FIELD area END IF END IF LET p_vetb50.total_bruto = p_vetb50.total_bruto + (arr_cotiza[idx].precio * arr_cotiza[idx].cantidad) LET p_vetb50.monto_desc = (arr_cotiza[idx].precio * arr_cotiza[idx].cantidad) * (arr_cotiza[idx].porc_desc / 100) + p_vetb50.monto_desc END IF END FOR IF p_vetb50.porc_itbi IS NULL THEN LET p_vetb50.porc_itbi = 0 END IF LET p_vetb50.sub_total = p_vetb50.total_bruto - p_vetb50.monto_desc LET p_vetb50.monto_itbi = p_vetb50.sub_total * (p_vetb50.porc_itbi / 100) LET p_vetb50.total_neto = p_vetb50.sub_total + p_vetb50.monto_itbi DISPLAY BY NAME p_vetb50.* END INPUT ON ACTION cancel LET tipo2 = FGL_WINQUESTION("Pregunta","Esta seguro que desea salir del programa?","no","yes|no","question",0) LET tipo2 = UPSHIFT(tipo2) DELETE FROM repitecodigo WHERE documento = tmpnumero1 and tipo_doc = 'CO' LET int_flag = FALSE IF tipo2 = "YES" THEN LET numero_msg = 2 CALL msg(numero_msg) EXIT DIALOG ELSE CONTINUE DIALOG END IF ON ACTION actualiza LET p_vetb50.total_bruto = 0 LET p_vetb50.monto_desc = 0 FOR idx = 1 TO arr_count() IF arr_cotiza[idx].cod_sec IS NOT NULL THEN IF arr_cotiza[idx].porc_desc IS NULL THEN LET arr_cotiza[idx].porc_desc = 0 END IF # CONTROL DESCUENTO IF chdescuento <> 'SI' THEN SELECT DISTINCT a.cotizacion_no FROM vetb00088 a WHERE a.cotizacion_no = p_vetb50.cotizacion_no AND a.cod_n = arr_cotiza[idx].cod_n AND a.cod_grupo = arr_cotiza[idx].cod_grupo AND a.cod_tipo = arr_cotiza[idx].cod_tipo AND a.cod_Sec = arr_cotiza[idx].cod_sec AND a.autoriza = "SI" IF STATUS <> NOTFOUND THEN NEXT FIELD ruta END IF IF arr_cotiza[idx].porc_desc > pporciento THEN CALL fgl_winmessage("ERROR","PORCIENTO DESCUENTO MAYOR AL PERMITIDO","INFO") NEXT FIELD porc_Desc END IF ELSE LET arr_cotiza[idx].chactualiza = "SI" END IF IF arr_cotiza[idx].precio IS NULL OR arr_cotiza[idx].precio = 0 THEN CALL msg(16) NEXT FIELD cod_n END IF # CONTROL PRECIO IF arr_cotiza[idx].precio IS NULL THEN CALL precios(p_vetb50.ventas,arr_cotiza[idx].cod_n,arr_cotiza[idx].cod_grupo,arr_cotiza[idx].cod_tipo, arr_cotiza[idx].cod_Sec,p_vetb50.tipo_cliente,p_vetb50.sec_cliente) RETURNING arr_cotiza[idx].precio,existe IF existe = 'N' THEN CALL msg(85) LET existe = 'S' LET arr_cotiza[idx].precio = NULL LET arr_cotiza[idx].total_p = 0 DISPLAY arr_cotiza[idx].precio TO s_pedido[scr_l].precio DISPLAY arr_cotiza[idx].total_p TO s_pedido[scr_l].total_p NEXT FIELD cod_n END IF DISPLAY arr_cotiza[idx].precio TO s_pedido[scr_l].precio END IF # CONTROL DESPIECE SELECT a.cod_n FROM iptb00027 a WHERE a.cod_n = arr_cotiza[idx].cod_n AND a.cod_grupo = arr_cotiza[idx].cod_grupo AND a.cod_tipo = arr_cotiza[idx].cod_tipo AND a.cod_sec = arr_cotiza[idx].cod_sec IF STATUS <> NOTFOUND THEN SELECT a.cod_n FROM vetb00022 a WHERE a.area = arr_cotiza[idx].area AND a.cod_n = arr_cotiza[idx].cod_n AND a.cod_grupo = arr_cotiza[idx].cod_grupo AND a.cod_tipo = arr_cotiza[idx].cod_tipo AND a.cod_Sec = arr_cotiza[idx].cod_sec AND a.cotizacion_no = p_vetb50.cotizacion_no IF STATUS = NOTFOUND THEN CALL fgl_winmessage("ERROR","EXISTE UN CODIGO QUE NECESITA DESPIEZAR, FAVOR DE DIRIGIRSE AL CODIGO Y REALIZAR EL DESPIECE","INFO") NEXT FIELD area END IF END IF LET p_vetb50.total_bruto = p_vetb50.total_bruto + (arr_cotiza[idx].precio * arr_cotiza[idx].cantidad) LET p_vetb50.monto_desc = (arr_cotiza[idx].precio * arr_cotiza[idx].cantidad) * (arr_cotiza[idx].porc_desc / 100) + p_vetb50.monto_desc END IF END FOR IF p_vetb50.porc_itbi IS NULL THEN LET p_vetb50.porc_itbi = 0 END IF LET p_vetb50.sub_total = p_vetb50.total_bruto - p_vetb50.monto_desc LET p_vetb50.monto_itbi = p_vetb50.sub_total * (p_vetb50.porc_itbi / 100) LET p_vetb50.total_neto = p_vetb50.sub_total + p_vetb50.monto_itbi DISPLAY BY NAME p_vetb50.* #====================================================================== # CONTROL NUMERO COTIZACION #====================================================================== LET tipo2 = FGL_WINQUESTION("Pregunta","Guardo esta cotizacion?","no","yes|no","question",0) LET tipo2= UPSHIFT(tipo2) IF tipo2 = "YES" THEN IF actualiza = "N" THEN #SELECT MAX(a.cotizacion_no) INTO ultimo_numero #FROM vetb00050 a #WHERE a.cod_cia = p_vetb50.cod_cia SELECT a.cotizacion_no INTO ultimo_numero FROM vetb00053 a IF ultimo_numero IS NULL THEN LET ultimo_numero = 1 END IF LET p_vetb50.cotizacion_no = ultimo_numero + 1 DISPLAY BY NAME p_vetb50.cotizacion_no UPDATE vetb00053 SET cotizacion_no = p_vetb50.cotizacion_no, us_mod = SUSER_SNAME() END IF #LET formato = fgl_winquestion("Informacion","Desa Visualizar esta cotizacion en otro formato?","yes","yes|no","Question",0) # IF formato = "yes" THEN # CALL impresion(p_vetb50.cotizacion_no) # ELSE LET cuenta_item = arr_count() UPDATE vetb00022 set cotizacion_no = p_vetb50.cotizacion_no WHERE cotizacion_no = tmpnumero1 BEGIN WORK DELETE FROM vetb00050 WHERE cotizacion_no = p_vetb50.cotizacion_no AND cod_cia = p_vetb50.cod_cia INSERT INTO vetb00050 (cod_cia,ventas,cotizacion_no,tipo_cliente,sec_cliente, nombre_cliente,rnc,nombre_proyecto,direccion_cliente, cod_provincia,direccion_proyecto,telefono_r,telefono_o, email,tipo_precio,beeper,celular,prima,fax1,celular1, fax,fecha,fecha_entrega,plazo_entrega,comentario,contacto, cond_pago,sec_vend,porc_itbi,total_bruto,sub_total, monto_desc,monto_itbi,total_neto,monto_dolar,status_t, us_crea,fech_crea) VALUES (p_vetb50.cod_cia,p_vetb50.ventas,p_vetb50.cotizacion_no,p_vetb50.tipo_cliente,p_vetb50.sec_cliente, p_vetb50.nombre_cliente,p_vetb50.rnc,p_vetb50.nombre_proyecto,p_vetb50.direccion_cliente, p_vetb50.cod_provincia,p_vetb50.direccion_proyecto,p_vetb50.telefono_r,p_vetb50.telefono_o, p_vetb50.email,p_vetb50.tipo_precio,p_vetb50.beeper,p_vetb50.celular,p_vetb50.prima,p_vetb50.fax1,p_vetb50.celular1, p_vetb50.fax,p_vetb50.fecha,p_vetb50.fecha_entrega,p_vetb50.plazo_entrega,p_vetb50.comentario,p_vetb50.contacto, p_vetb50.cond_pago,p_vetb50.sec_vend,p_vetb50.porc_itbi,p_vetb50.total_bruto,p_vetb50.sub_total, p_vetb50.monto_desc,p_vetb50.monto_itbi,p_vetb50.total_neto,p_vetb50.monto_dolar,null,SUSER_SNAME(),GETDATE()) IF STATUS < 0 THEN ROLLBACK WORK CALL fgl_winmessage("ERROR","NO FUE POSIBLE LA CREACION DE LA COTIZACION","STOP") EXIT PROGRAM END IF DELETE FROM repitecodigo WHERE documento = tmpnumero1 and tipo_doc = 'CO' #commit work IF actualiza = "S" THEN UPDATE vetb00050 set us_mod = suser_sname(), fech_mod = GETDATE() WHERE cotizacion_no = p_vetb50.cotizacion_no AND cod_cia = p_vetb50.cod_cia ELSE UPDATE vetb00050 set us_crea = suser_sname(), fech_crea = GETDATE() WHERE cotizacion_no = p_vetb50.cotizacion_no AND cod_cia = p_vetb50.cod_cia END IF DELETE FROM vetb00051 WHERE vetb00051.cotizacion_no = p_vetb50.cotizacion_no AND vetb00051.cod_cia = p_vetb50.cod_cia FOR idx = 1 TO arr_count() IF arr_cotiza[idx].cod_sec IS NOT NULL THEN IF arr_cotiza[idx].porc_Desc IS NULL THEN LET arr_cotiza[idx].porc_desc = 0 END IF INSERT INTO vetb00051 # (cod_cia,cotizacion_no,ventas,fila,area,cod_n,cod_grupo,cod_tipo,cod_Sec,cantidad_1,cantidad,precio, (cod_cia,cotizacion_no,ventas,area,cod_n,cod_grupo,cod_tipo,cod_Sec,descripcion,cantidad_1,cantidad,precio, porc_desc,status_t,us_crea,fech_crea,foto_producto,descripcion_area) VALUES #(p_vetb50.cod_cia,p_vetb50.cotizacion_no,p_vetb50.ventas,arr_cotiza[idx].fila, (p_vetb50.cod_cia,p_vetb50.cotizacion_no,p_vetb50.ventas, arr_cotiza[idx].area,arr_cotiza[idx].cod_n, arr_cotiza[idx].cod_grupo,arr_cotiza[idx].cod_tipo, arr_cotiza[idx].cod_sec, arr_cotiza[idx].nombre_p, arr_cotiza[idx].cantidad_1,arr_cotiza[idx].cantidad, arr_cotiza[idx].precio,arr_cotiza[idx].porc_desc,null, suser_sname(),GETDATE(),arr_cotiza[idx].ruta,arr_cotiza[idx].nombre_area) IF STATUS < 0 THEN ROLLBACK WORK CALL fgl_winmessage("ERROR","NO FUE POSIBLE LA CREACION DEl DETALLE DE LA COTIZACION","STOP") EXIT PROGRAM END IF IF chdescuento = "SI" THEN SELECT DISTINCT a.cotizacion_no FROM vetb00088 a WHERE a.cotizacion_no = p_vetb50.cotizacion_no AND a.cod_n = arr_cotiza[idx].cod_n AND a.cod_grupo = arr_cotiza[idx].cod_grupo AND a.cod_tipo = arr_cotiza[idx].cod_tipo AND a.cod_Sec = arr_cotiza[idx].cod_sec IF STATUS <> NOTFOUND THEN UPDATE vetb00088 SET fecha_autorizacion = getdate(), us_autoriza = usuarios, porc_descuento = arr_cotiza[idx].porc_desc WHERE cotizacion_no = p_vetb50.cotizacion_no AND cod_n = arr_cotiza[idx].cod_n AND cod_grupo = arr_cotiza[idx].cod_grupo AND cod_tipo = arr_cotiza[idx].cod_tipo AND cod_Sec = arr_cotiza[idx].cod_sec ELSE INSERT INTO vetb00088 (cotizacion_no ,fecha_autorizacion ,us_autoriza ,cod_n ,cod_grupo ,cod_tipo ,cod_sec ,porc_descuento ,autoriza) VALUES (p_vetb50.cotizacion_no, getdate(), usuarios, arr_cotiza[idx].cod_n, arr_cotiza[idx].cod_grupo, arr_cotiza[idx].cod_tipo, arr_cotiza[idx].cod_sec, arr_cotiza[idx].porc_desc, arr_cotiza[idx].chactualiza) END IF END IF END IF END FOR COMMIT WORK IF p_vetb50.tipo_cliente IS NOT NULL THEN LET chconvierte = fgl_winquestion("ORDEN","DESEA CONVERTIR ESTA CATOZACION EN ORDEN DE PEDIDOS?","NO","YES|NO","QUESTION",0) IF chconvierte = "YES" THEN INPUT BY NAME orden_cliente ATTRIBUTE(MAGENTA) AFTER INPUT IF orden_cliente IS NULL THEN CALL msg(16) NEXT FIELD orden_cliente END IF END INPUT CALL convierteorden(p_vetb50.cotizacion_no,orden_cliente,usuarios,clave,impresor,copia) RETURNING prtb12.num_oc,exito IF NOT exito THEN CALL fgl_winmessage("ERROR","NO SE REALIZO LA ORDEN","STOP") ELSE LET respuesta_req = fgl_winquestion("REQUISICION","ADICIONO LA REQUISICION DE DESPACHO AHORA?","NO","YES|NO","QUESTION",0) IF respuesta_req = "YES" THEN SELECT a.* INTO prtb12.* FROM prtb00012 a WHERE a.cotizacion_no = p_vetb50.cotizacion_no and a.status_t is NULL CALL requisiciondespacho(prtb12.num_oc,p_vetb50.tipo_cliente, p_vetb50.sec_cliente,p_vetb50.cond_pago,p_vetb50.total_neto,p_vetb50.fecha, p_vetb50.sec_vend,usuarios) END IF # END IF # END IF END IF END IF END IF CALL impresion(p_vetb50.cotizacion_no,'veprmt049.4rp','PDF',cuenta_item) RETURNING salida # INSERTA EN INFORMIX SET CONNECTION "IFMX" SELECT a.ncf INTO xncf FROM vetb00061 a WHERE a.tipo_cliente = p_vetb50.tipo_cliente DELETE FROM vetb00050 WHERE cotizacion_no = p_vetb50.cotizacion_no AND cod_cia = p_vetb50.cod_cia #begin work INSERT INTO vetb00050 (cod_cia,ventas,cotizacion_no,tipo_cliente,sec_cliente, nombre_cliente,rnc,nombre_proyecto,direccion_cliente, cod_provincia,direccion_proyecto,telefono_r,telefono_o, email,tipo_precio,beeper,celular,prima,fax1,celular1, fax,fecha,fecha_entrega,plazo_entrega,comentario,contacto, cond_pago,sec_vend,porc_itbi,total_bruto,sub_total, monto_desc,monto_itbi,total_neto,monto_dolar,status_t, us_crea,fech_crea) VALUES (p_vetb50.cod_cia,p_vetb50.ventas,p_vetb50.cotizacion_no,p_vetb50.tipo_cliente,p_vetb50.sec_cliente, p_vetb50.nombre_cliente,p_vetb50.rnc,p_vetb50.nombre_proyecto,p_vetb50.direccion_cliente, p_vetb50.cod_provincia,p_vetb50.direccion_proyecto,p_vetb50.telefono_r,p_vetb50.telefono_o, p_vetb50.email,p_vetb50.tipo_precio,p_vetb50.beeper,p_vetb50.celular,p_vetb50.prima,p_vetb50.fax1,p_vetb50.celular1, p_vetb50.fax,p_vetb50.fecha,p_vetb50.fecha_entrega,p_vetb50.plazo_entrega,p_vetb50.comentario,p_vetb50.contacto, p_vetb50.cond_pago,p_vetb50.sec_vend,p_vetb50.porc_itbi,p_vetb50.total_bruto,p_vetb50.sub_total, p_vetb50.monto_desc,p_vetb50.monto_itbi,p_vetb50.total_neto,p_vetb50.monto_dolar,null,usuarios,current) #commit work IF actualiza = "S" THEN UPDATE vetb00050 set us_mod = user, fech_mod = current WHERE cotizacion_no = p_vetb50.cotizacion_no AND cod_cia = p_vetb50.cod_cia ELSE UPDATE vetb00050 set us_crea = user, fech_crea = current WHERE cotizacion_no = p_vetb50.cotizacion_no AND cod_cia = p_vetb50.cod_cia END IF DELETE FROM vetb00051 WHERE vetb00051.cotizacion_no = p_vetb50.cotizacion_no AND vetb00051.cod_cia = p_vetb50.cod_cia FOR idx = 1 TO arr_count() IF arr_cotiza[idx].cod_sec IS NOT NULL THEN IF arr_cotiza[idx].porc_Desc IS NULL THEN LET arr_cotiza[idx].porc_desc = 0 END IF INSERT INTO vetb00051 # (cod_cia,cotizacion_no,ventas,fila,area,cod_n,cod_grupo,cod_tipo,cod_Sec,cantidad_1,cantidad,precio, (cod_cia,cotizacion_no,ventas,area,cod_n,cod_grupo,cod_tipo,cod_Sec,cantidad_1,cantidad,precio, porc_desc,status_t,us_crea,fech_crea) VALUES #(p_vetb50.cod_cia,p_vetb50.cotizacion_no,p_vetb50.ventas,arr_cotiza[idx].fila, (p_vetb50.cod_cia,p_vetb50.cotizacion_no,p_vetb50.ventas, arr_cotiza[idx].area,arr_cotiza[idx].cod_n, arr_cotiza[idx].cod_grupo,arr_cotiza[idx].cod_tipo, arr_cotiza[idx].cod_sec,arr_cotiza[idx].cantidad_1,arr_cotiza[idx].cantidad, arr_cotiza[idx].precio,arr_cotiza[idx].porc_desc,null, user,current) END IF END FOR SET CONNECTION "MSSQL" LET numero_msg = 1 CALL msg(numero_msg) ELSE DELETE FROM repitecodigo WHERE documento = tmpnumero1 and tipo_doc = 'CO' CONTINUE DIALOG END IF EXIT DIALOG END DIALOG END FUNCTION FUNCTION vepcmf008() DEFINE chanula CHAR(3) ## Aqui se prepara para la captura del criterio de seleccion CONSTRUCT BY NAME criterio ON a.cod_cia,a.cotizacion_no,a.tipo_cliente,a.sec_cliente, a.nombre_cliente,a.nombre_proyecto, a.direccion_proyecto,a.fecha IF INT_FLAG THEN LET numero_msg = 2 CALL msg(numero_msg) LET INT_FLAG = FALSE RETURN END IF LET SELEC = " SELECT DISTINCT a.cod_cia,a.ventas,a.cotizacion_no,a.tipo_cliente,a.sec_cliente,a.nombre_cliente, " || " a.rnc,a.nombre_proyecto,a.direccion_cliente,a.cod_provincia,a.direccion_proyecto, " || " a.telefono_r,a.telefono_o,a.email,a.tipo_precio,a.beeper,a.celular,a.prima,a.fax1,a.celular1, " || " a.fax, CONVERT(CHAR(10),a.fecha,103),CONVERT(CHAR(10),a.fecha_entrega,103), " || " a.plazo_entrega,a.comentario,a.contacto, a.cond_pago,a.sec_Vend,a.porc_itbi," || " a.total_bruto,a.sub_total,a.monto_Desc,a.monto_itbi,a.total_neto,a.monto_dolar " || " FROM vetb00050 a " || " WHERE " || criterio CLIPPED || " AND a.status_t is null ", " ORDER BY a.cotizacion_no" PREPARE busca FROM selec DECLARE datos SCROLL CURSOR FOR busca OPEN datos FETCH FIRST datos INTO p_vetb50.cod_cia,p_vetb50.ventas,p_vetb50.cotizacion_no,p_vetb50.tipo_cliente,p_vetb50.sec_cliente,p_vetb50.nombre_cliente, p_vetb50.rnc,p_vetb50.nombre_proyecto,p_vetb50.direccion_cliente,p_vetb50.cod_provincia,p_vetb50.direccion_proyecto, p_vetb50.telefono_r,p_vetb50.telefono_o,p_vetb50.email,p_vetb50.tipo_precio,p_vetb50.beeper,p_vetb50.celular,p_vetb50.prima,p_vetb50.fax1,p_vetb50.celular1, p_vetb50.fax, p_vetb50.fecha,p_vetb50.fecha_entrega, p_vetb50.plazo_entrega,p_vetb50.comentario,p_vetb50.contacto, p_vetb50.cond_pago,p_vetb50.sec_Vend,p_vetb50.porc_itbi, p_vetb50.total_bruto,p_vetb50.sub_total,p_vetb50.monto_Desc,p_vetb50.monto_itbi,p_vetb50.total_neto,p_vetb50.monto_dolar IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF DISPLAY "sub ",p_vetb50.sub_total CALL busca_info() MENU "OPCIONES " COMMAND "Siguiente" "Presenta en pantalla la siguiente cotizacion encontrada" FETCH NEXT datos INTO p_vetb50.cod_cia,p_vetb50.ventas,p_vetb50.cotizacion_no,p_vetb50.tipo_cliente,p_vetb50.sec_cliente,p_vetb50.nombre_cliente, p_vetb50.rnc,p_vetb50.nombre_proyecto,p_vetb50.direccion_cliente,p_vetb50.cod_provincia,p_vetb50.direccion_proyecto, p_vetb50.telefono_r,p_vetb50.telefono_o,p_vetb50.email,p_vetb50.tipo_precio,p_vetb50.beeper,p_vetb50.celular,p_vetb50.prima,p_vetb50.fax1,p_vetb50.celular1, p_vetb50.fax, p_vetb50.fecha,p_vetb50.fecha_entrega, p_vetb50.plazo_entrega,p_vetb50.comentario,p_vetb50.contacto, p_vetb50.cond_pago,p_vetb50.sec_Vend,p_vetb50.porc_itbi, p_vetb50.total_bruto,p_vetb50.sub_total,p_vetb50.monto_Desc,p_vetb50.monto_itbi,p_vetb50.total_neto,p_vetb50.monto_dolar IF STATUS = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF CALL busca_info() COMMAND "anterior" "Presenta en pantalla el registro anterior encontrado" FETCH PREVIOUS datos INTO p_vetb50.cod_cia,p_vetb50.ventas,p_vetb50.cotizacion_no,p_vetb50.tipo_cliente,p_vetb50.sec_cliente,p_vetb50.nombre_cliente, p_vetb50.rnc,p_vetb50.nombre_proyecto,p_vetb50.direccion_cliente,p_vetb50.cod_provincia,p_vetb50.direccion_proyecto, p_vetb50.telefono_r,p_vetb50.telefono_o,p_vetb50.email,p_vetb50.tipo_precio,p_vetb50.beeper,p_vetb50.celular,p_vetb50.prima,p_vetb50.fax1,p_vetb50.celular1, p_vetb50.fax, p_vetb50.fecha,p_vetb50.fecha_entrega, p_vetb50.plazo_entrega,p_vetb50.comentario,p_vetb50.contacto, p_vetb50.cond_pago,p_vetb50.sec_Vend,p_vetb50.porc_itbi, p_vetb50.total_bruto,p_vetb50.sub_total,p_vetb50.monto_Desc,p_vetb50.monto_itbi,p_vetb50.total_neto,p_vetb50.monto_dolar IF STATUS = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF CALL busca_info() COMMAND "Primero" "Presenta en pantalla el primer registro encontrado" FETCH FIRST datos INTO p_vetb50.cod_cia,p_vetb50.ventas,p_vetb50.cotizacion_no,p_vetb50.tipo_cliente,p_vetb50.sec_cliente,p_vetb50.nombre_cliente, p_vetb50.rnc,p_vetb50.nombre_proyecto,p_vetb50.direccion_cliente,p_vetb50.cod_provincia,p_vetb50.direccion_proyecto, p_vetb50.telefono_r,p_vetb50.telefono_o,p_vetb50.email,p_vetb50.tipo_precio,p_vetb50.beeper,p_vetb50.celular,p_vetb50.prima,p_vetb50.fax1,p_vetb50.celular1, p_vetb50.fax, p_vetb50.fecha,p_vetb50.fecha_entrega, p_vetb50.plazo_entrega,p_vetb50.comentario,p_vetb50.contacto, p_vetb50.cond_pago,p_vetb50.sec_Vend,p_vetb50.porc_itbi, p_vetb50.total_bruto,p_vetb50.sub_total,p_vetb50.monto_Desc,p_vetb50.monto_itbi,p_vetb50.total_neto,p_vetb50.monto_dolar CALL busca_info() COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado" FETCH LAST datos INTO p_vetb50.cod_cia,p_vetb50.ventas,p_vetb50.cotizacion_no,p_vetb50.tipo_cliente,p_vetb50.sec_cliente,p_vetb50.nombre_cliente, p_vetb50.rnc,p_vetb50.nombre_proyecto,p_vetb50.direccion_cliente,p_vetb50.cod_provincia,p_vetb50.direccion_proyecto, p_vetb50.telefono_r,p_vetb50.telefono_o,p_vetb50.email,p_vetb50.tipo_precio,p_vetb50.beeper,p_vetb50.celular,p_vetb50.prima,p_vetb50.fax1,p_vetb50.celular1, p_vetb50.fax, p_vetb50.fecha,p_vetb50.fecha_entrega, p_vetb50.plazo_entrega,p_vetb50.comentario,p_vetb50.contacto, p_vetb50.cond_pago,p_vetb50.sec_Vend,p_vetb50.porc_itbi, p_vetb50.total_bruto,p_vetb50.sub_total,p_vetb50.monto_Desc,p_vetb50.monto_itbi,p_vetb50.total_neto,p_vetb50.monto_dolar CALL busca_info() ON ACTION impresion CALL impresion(p_vetb50.cotizacion_no,'veprmt049.4rp','PDF',cuenta_item) RETURNING salida COMMAND "Borrar" CALL busca_info() PROMPT "Esta seguro?" FOR esta LET esta = UPSHIFT(esta) IF esta = "S" THEN UPDATE vetb00050 set status_t = "E", us_mod = suser_sname(), fech_mod = GETDATE() WHERE @cotizacion_no = p_vetb50.cotizacion_no UPDATE vetb00051 set status_t = "E", us_mod = suser_sname(), fech_mod = GETDATE() WHERE @cotizacion_no = p_vetb50.cotizacion_no LET numero_msg = 39 CALL msg(numero_msg) END IF COMMAND "Escoger" "Actualiza Cotizacion" LET actualiza = "S" SELECT UNIQUE a.cotizacion_no FROM prtb00012 a WHERE a.cotizacion_no = p_vetb50.cotizacion_no and a.status_t is null IF STATUS != NOTFOUND THEN LET numero_msg =392 CALL msg(numero_msg) EXIT MENU END IF CALL vepcad008() LET numero_msg = 13 CALL msg(numero_msg) COMMAND "Orden" "Hacer Orden Pedidos" IF xorden IS NOT NULL THEN CALL fgl_winmessage("ERROR","ESTA COTIZACION YA TIENE ORDEN","STOP") ELSE INPUT BY NAME orden_cliente ATTRIBUTE(MAGENTA) AFTER INPUT IF orden_cliente IS NULL THEN CALL msg(16) NEXT FIELD orden_cliente END IF END INPUT IF p_vetb50.tipo_cliente IS NOT NULL THEN CALL convierteorden(p_vetb50.cotizacion_no,orden_cliente,usuarios,clave,impresor,copia) RETURNING prtb12.num_oc,exito IF NOT exito THEN CALL fgl_winmessage("ERROR","NO SE REALIZO LA ORDEN","STOP") END IF DISPLAY prtb12.num_oc TO orden CALL msg(1) END IF END IF COMMAND "Anula Orden" "Anulacion de la orden de pedidos" IF xorden IS NOT NULL THEN LET chanula = fgl_winquestion("ORDEN","ESTA SEGURO DE ANULAR ESTA ORDEN?","NO","YES|NO","QUESTION",0) IF chanula = "YES" THEN SET CONNECTION "MSSQL" # VERIFICA SI TIENE REQUISICION SELECT UNIQUE a.num_oc FROM cctb00026 a WHERE a.num_oc = xorden AND a.status_t IS NULL IF STATUS <> NOTFOUND THEN ERROR "NO PUEDE ANULAR ORDEN, TIENE REQUISICION" CONTINUE MENU END IF # VERIFICA SI ESTA FACTURADA LA ORDEN SELECT UNIQUE a.orden FROM vetb00002 a WHERE a.orden = xorden AND a.status_t is null IF STATUS != NOTFOUND THEN ERROR "NO PUEDE ANULAR ORDEN, TIENE FACTURAS" CONTINUE MENU END IF # VERIFICACION DESPACHO SELECT UNIQUE a.conduce_no FROM iptb00006 a WHERE a.num_oc = xorden AND a.fech_Crea > '01/01/2007' and a.status_t is null IF STATUS != NOTFOUND THEN ERROR "NO PUEDE ANULAR ORDEN, TIENE TRANSACCIONES DE INVENTARIO" CONTINUE MENU END IF UPDATE prtb00012 SET status_t = 'E', us_mod = usuarios, fech_mod = getdate() WHERE num_oc =xorden UPDATE prtb00013 SET status_t = 'E', us_mod = usuarios, fech_mod = getdate() WHERE num_oc =xorden { SET CONNECTION "IFMX" UPDATE prtb00012 SET status_t = 'E', us_mod = usuarios, fech_mod = getdate() WHERE num_oc =xorden UPDATE prtb00013 SET status_t = 'E', us_mod = usuarios, fech_mod = getdate() WHERE num_oc =xorden } CALL fgl_winmessage("WARNING","ORDEN ANULADA","INFO") END IF END IF COMMAND "Requisicion" "Hacer requisicion" IF xorden IS NULL THEN CALL fgl_winmessage("ERROR","ESTA COTIZACION NO TIENE ORDEN, NO PUEDE HACER REQUISICION","STOP") CONTINUE MENU END IF LET respuesta_req = fgl_winquestion("REQUISICION","ESTA SEGURO DE HACER LA REQUISICION?","NO","YES|NO","QUESTION",0) IF respuesta_req = "YES" THEN SELECT UNIQUE a.num_oc FROM cctb00026 a WHERE a.num_oc = xorden AND a.status_t IS NULL IF STATUS != NOTFOUND THEN CALL fgl_winmessage("ERROR","ORDEN TIENE REQUISICION, DEBE HACERLA POR EL PROGRAMA NORMAL","STOP") CONTINUE MENU END IF CALL requisiciondespacho(prtb12.num_oc,p_vetb50.tipo_cliente,p_vetb50.sec_cliente,p_vetb50.cond_pago,p_vetb50.total_neto,p_vetb50.fecha,p_vetb50.sec_vend,usuarios) END IF COMMAND "@quit.bmp" "Retorna al menu anterior" EXIT MENU END MENU END FUNCTION FUNCTION busca_area() OPEN WINDOW busqueda AT 7,12 WITH FORM "vefmwd102" ATTRIBUTE (BORDER,FORM LINE FIRST + 2,COMMENT LINE LAST,MESSAGE LINE LAST) LET INT_FLAG = false CONSTRUCT criterio ON a.nombre_area FROM nombre_area LET selec2 = "SELECT a.area_num, a.nombre_area ", " FROM prtb00016 a", " WHERE ", "a.status_t is NULL AND ", criterio clipped, "ORDER BY 2 " IF INT_FLAG THEN LET numero_msg = 2 CALL msg(numero_msg) GO TO salir_consulta_c END IF PREPARE busca_area FROM selec2 IF status >= 0 THEN IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) END IF ELSE END IF DECLARE buscar_area1 CURSOR FOR busca_area LET idx = 1 FOREACH buscar_area1 INTO arr_area[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_area TO s_area.* LET curr1 = arr_curr() LET int_flag = FALSE LET arr_cotiza[curr].area = arr_area[curr1].area_num LET arr_cotiza[curr].nombre_area = arr_area[curr1].nombre_area LABEL salir_consulta_c: CLOSE WINDOW busqueda END FUNCTION FUNCTION busca_provincia1() DEFINE arr_provincias DYNAMIC ARRAY OF RECORD cod_provincia LIKE vetb00020.cod_provincia, nombre_provincia LIKE vetb00020.nombre_provincia END RECORD OPEN WINDOW busqueda AT 7,12 WITH FORM "vefmwd018" ATTRIBUTE (BORDER,FORM LINE FIRST + 2,COMMENT LINE LAST,MESSAGE LINE LAST) LET INT_FLAG = false CONSTRUCT criterio ON a.nombre_provincia FROM nombre_provincia LET selec2 = "SELECT a.cod_provincia, a.nombre_provincia ", " FROM vetb00020 a", " WHERE ", "a.status_t is NULL AND ", criterio clipped, "ORDER BY 2 " IF INT_FLAG THEN LET numero_msg = 2 CALL msg(numero_msg) GO TO salir_consulta_c END IF PREPARE busca_provp FROM selec2 IF status >= 0 THEN IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) END IF ELSE END IF DECLARE buscar_prov CURSOR FOR busca_provp LET idx = 1 FOREACH buscar_prov INTO arr_provincias[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_provincias TO s_provincias.* LET curr1 = arr_curr() LET int_flag = FALSE LET p_vetb50.cod_provincia = arr_provincias[curr1].cod_provincia LET nombre_ciudad = arr_provincias[curr1].nombre_provincia LABEL salir_consulta_c: CLOSE WINDOW busqueda END FUNCTION FUNCTION busca_cliente8() 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.tipo_cliente,a.nombre,b.nombre_proyecto FROM tipo_cliente,nombre,nombre_proyecto LET selec2 = "SELECT a.tipo_cliente, a.sec_cliente, a.nombre,b.nombre_proyecto ", " FROM vetb00004 a,outer vetb00049 b ", " where a.tipo_cliente = b.tipo_cliente and a.sec_cliente = b.sec_cliente and ", "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_cliente8s FROM selec2 IF status >= 0 THEN IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) END IF ELSE END IF DECLARE buscar_clientes CURSOR FOR busca_cliente8s 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() IF INT_FLAG THEN LET numero_msg = 2 CALL msg(numero_msg) GOTO salir_consulta_c END IF LET int_flag = FALSE LET p_vetb50.tipo_cliente = arr_clientes[curr1].tipo_cliente LET p_vetb50.sec_cliente = arr_clientes[curr1].sec_cliente LET p_vetb50.nombre_cliente = arr_clientes[curr1].nombre LABEL salir_consulta_c: CLOSE WINDOW busqueda END FUNCTION FUNCTION busca_prod1() DEFINE arr_prod DYNAMIC ARRAY OF RECORD cod_n INTEGER, cod_grupo INTEGER, cod_tipo INTEGER, cod_sec INTEGER, descrip_esp CHAR(50), unidad_med LIKE intb00001.unidad_med, cantidad_o DEC(18,4), cantidad_c DEC(18,4), existencia DEC(18,4) END RECORD, selec_pt CHAR(1500) OPEN WINDOW busca_2 AT 8,4 WITH FORM "vefmwd100" ATTRIBUTE (BORDER,FORM LINE FIRST + 1,PROMPT LINE LAST) CONSTRUCT criterio ON a.cod_n,a.cod_grupo,a.cod_tipo,a.descrip_esp FROM cod_n,cod_grupo,cod_tipo,descrip_esp { ESTE FUE EL QUERY ORIGINAL, LE QUITE LA TABLA VETB00051 y PRTB00013 PORQUE NO TRAIA LOS CODIGOS EN LA CONSULTA "SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp,a.unidad_med,SUM(e.cantidad),SUM(d.cantidad),SUM(b.cantidad_2) ", " FROM iptb00002 AS a INNER JOIN iptb00001 AS c ON 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 LEFT OUTER JOIN ", " iptb00006 AS b ON 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 LEFT OUTER JOIN ", " vetb00051 AS e ON a.cod_n = e.cod_n AND a.cod_grupo = e.cod_grupo AND ", " a.cod_tipo = e.cod_tipo AND a.cod_sec = e.cod_sec LEFT OUTER JOIN ", " prtb00013 AS d ON ", " a.cod_n = d.cod_n AND a.cod_grupo = d.cod_grupo AND ", " a.cod_tipo = d.cod_tipo AND a.cod_sec = d.cod_sec INNER JOIN ", " prtb00012 AS f ON d.num_oc = f.num_oc and f.cotizacion_no = e.cotizacion_no ", " AND f.cerrada = 'N' ", " WHERE a.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 " } LET selec_pt = "SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp,a.unidad_med,'0','0',SUM(b.cantidad_2) ", " FROM iptb00002 AS a INNER JOIN iptb00001 AS c ON 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 LEFT OUTER JOIN ", " iptb00006 AS b ON 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 ", " WHERE a.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 " IF int_flag THEN LET Int_flag = FALSE CLOSE WINDOW busca_2 RETURN END IF 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() LET arr_cotiza[curr].cod_n = arr_prod[idx].cod_n LET arr_cotiza[curr].cod_grupo = arr_prod[idx].cod_grupo LET arr_cotiza[curr].cod_tipo = arr_prod[idx].cod_tipo LET arr_cotiza[curr].cod_sec = arr_prod[idx].cod_sec LET arr_cotiza[curr].nombre_p = arr_prod[idx].descrip_esp LET arr_cotiza[curr].unidad = arr_prod[idx].unidad_med LET pexistencia = arr_prod[idx].existencia CLOSE WINDOW busca_2 END FUNCTION FUNCTION vendedor8es() OPEN WINDOW busqueda2 AT 7,12 WITH FORM "vefmwd001" ATTRIBUTE (BORDER,FORM LINE FIRST + 2,COMMENT LINE LAST,MESSAGE LINE LAST) LET INT_FLAG = false CONSTRUCT criterio ON a.nom1_emp FROM descrip6 LET selec2 = "SELECT UNIQUE a.num_emp,a.nom1_emp,a.apell1_emp,a.telefono ", " FROM adtb00003 a,vetb00028 b", " WHERE a.num_emp = b.sec_vend AND ", "a.status_t is NULL AND ", criterio clipped, "ORDER BY 1 " IF INT_FLAG THEN LET numero_msg = 2 CALL msg(numero_msg) GO TO salir_consulta_e END IF PREPARE busca_empleados FROM selec2 IF status >= 0 THEN IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) END IF ELSE END IF DECLARE buscar_empleados CURSOR FOR busca_empleados LET idx = 1 FOREACH buscar_empleados INTO arr_empleados[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 empleados[idx].cod_emp_sec = arr_empleados[idx].num_emp LET empleados[idx].descrip6 = arr_empleados[idx].nom1_emp clipped," ",arr_empleados[idx].apell1_emp clipped LET idx = idx + 1 END FOREACH CALL set_count(idx-1) MESSAGE " Selecciona Empleado donde esta el cursor" DISPLAY ARRAY empleados TO s_empleados.* LET curr1 = scr_line() IF INT_FLAG THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE GOTO salir_consulta_e END IF LET p_vetb50.sec_vend = empleados[curr1].cod_emp_sec LET nombre_vend = empleados[curr1].descrip6 LABEL salir_consulta_e: CLOSE WINDOW busqueda2 END FUNCTION FUNCTION busca_vendm8() IF p_vetb50.sec_vend IS NOT NULL THEN SELECT a.nom1_emp,a.apell1_emp INTO nombres,apellidos FROM adtb00003 a WHERE a.num_emp = p_vetb50.sec_vend LET nombre_vend = nombres CLIPPED," ",apellidos CLIPPED DISPLAY BY NAME nombre_vend ATTRIBUTE(BLUE) END IF END FUNCTION FUNCTION busca_info() IF p_vetb50.cod_cia = 1 THEN LET nombre_cia = p_companias.nombre ELSE LET nombre_cia = "EMPRESA DEMO 2" END IF LET pventas = ui.ComboBox.forName("formonly.ventas") CALL cventas() LET pcondicion = ui.ComboBox.forName("formonly.cond_pago") CALL ccondicion() LET xorden = NULL SELECT DISTINCT a.num_oc,a.nombre_file INTO xorden,orden_cliente FROM prtb00012 a WHERE a.cotizacion_no = p_vetb50.cotizacion_no AND a.status_t is null DISPLAY BY NAME p_vetb50.*,nombre_cia DISPLAY xorden TO orden LET prtb12.num_oc = xorden SELECT a.nombre_provincia INTO nombre_ciudad FROM vetb00020 a WHERE a.cod_provincia = p_vetb50.cod_provincia DISPLAY BY NAME nombre_ciudad # BUSCA BALANCE CON AVANCES SELECT SUM(a.valor+a.monto_desc) INTO valor1 FROM cctb00001 a WHERE a.fecha_orig <= today AND a.tipo_cliente = p_vetb50.tipo_cliente AND a.sec_cliente = p_vetb50.sec_cliente AND a.tipo_doc IN ("AV") AND a.num_doc = a.aplica_a AND a.status_t IS NULL IF valor1 IS NULL THEN LET valor1 = 0 END IF # BUSCA BALANCE SIN AVANCES SELECT SUM(a.valor+a.monto_desc) INTO valor2 FROM cctb00001 a WHERE a.fecha_orig <= today AND a.tipo_cliente = p_vetb50.tipo_cliente AND a.sec_cliente = p_vetb50.sec_cliente AND a.tipo_doc NOT IN ("AV","PC") AND a.status_t IS NULL IF valor1 IS NULL THEN LET valor1 = 0 END IF LET balancecxc = valor2-valor1 DISPLAY BY NAME balancecxc CALL arr_cotiza.clear() DECLARE buscaitm1 CURSOR FOR SELECT a.area,c.nombre_area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descripcion,b.unidad_med, a.cantidad_1,a.cantidad,a.precio,a.porc_desc,'0',a.foto_producto FROM vetb00051 a,iptb00002 b,prtb00016 c WHERE a.cotizacion_no = p_vetb50.cotizacion_no AND a.cod_cia = p_vetb50.cod_cia 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.area = c.area_num LET idx = 1 FOREACH buscaitm1 INTO arr_cotiza[idx].* LET arr_cotiza[idx].total_p = (arr_cotiza[idx].cantidad * arr_cotiza[idx].precio) - ((arr_cotiza[idx].cantidad * arr_cotiza[idx].precio) * (arr_cotiza[idx].porc_desc / 100)) IF arr_cotiza[idx].nombre_p IS NULL THEN SELECT a.descrip_esp INTO arr_cotiza[idx].nombre_p FROM iptb00002 a WHERE a.cod_n = arr_cotiza[idx].cod_n AND a.cod_grupo = arr_cotiza[idx].cod_grupo AND a.cod_tipo = arr_cotiza[idx].cod_tipo AND a.cod_sec = arr_cotiza[idx].cod_sec END IF SELECT UNIQUE a.autoriza INTO arr_cotiza[idx].chactualiza FROM vetb00088 a WHERE a.cotizacion_no = p_vetb50.cotizacion_no AND a.cod_n = arr_cotiza[idx].cod_n AND a.cod_grupo = arr_cotiza[idx].cod_grupo AND a.cod_tipo = arr_cotiza[idx].cod_tipo AND a.cod_sec = arr_cotiza[idx].cod_sec LET idx = idx + 1 END FOREACH CALL set_count(idx) DISPLAY ARRAY arr_cotiza TO s_pedido.* ON KEY (CONTROL-W) CALL despiece() BEFORE ROW LET idx = arr_curr() DISPLAY arr_cotiza[idx].ruta TO foto_producto AFTER DISPLAY END DISPLAY END FUNCTION { FUNCTION f_canvas() -- Define parameters DEFINE porciento ,l_offset SMALLINT DEFINE test CHAR(1) -- Define local variables DEFINE l_span smallint, l_objid smallint, valor_cotizado,valor_facturado INT, str_facturado,str_cotizado CHAR(25), fecha1 LIKE vetb00002.fecha_factura LET l_offset = 50 CALL drawinit() # OPEN WINDOW w_card AT 2,2 WITH FORM "canvas" -- Select and initialize drawing room CALL DisableColorlines(0) CALL DrawSelect("canvas1") CALL DrawClear() LET fecha1 = TODAY - 30 SELECT SUM(a.neto) INTO valor_facturado FROM vetb00002 a WHERE a.fecha_factura BETWEEN fecha1 AND TODAY AND a.cod_cia = 1 AND a.status_t is null SELECT SUM(a.total_neto) INTO valor_cotizado FROM vetb00050 a WHERE a.cod_cia = 1 AND a.fecha BETWEEN fecha1 AND TODAY AND a.status_t is null # LET valor_facturado = 500000 # LET valor_cotizado = 2000000 LET Porciento = (valor_facturado / valor_cotizado) * 100 LET l_span = 360 * (porciento / 100) -- Select the color for the first arc CALL DrawFillColor("blue") -- Draw the first arc. # LET l_span = 0 CALL DrawArc(900,200,600,0,100) RETURNING l_objid # CALL DrawArc(900,200,600,0,l_span) RETURNING l_objid -- Compute the next arc. # LET l_span = l_offset LET l_offset = l_span LET l_offset = 360 - l_span CALL drawfillcolor("red") CALL DrawArc(900,200,600,100,260) RETURNING l_objid # CALL DrawArc(900,200,600,l_span,l_offset) RETURNING l_objid -- Write the legend LET str_facturado = "Facturado ",valor_facturado USING "<<,<<<,<<<" LET str_cotizado = "Cotizado ", Valor_cotizado USING "##,###,###" CALL drawanchor("w") CALL drawtext(200,90, str_facturado) RETURNING l_objid CALL drawtext(100,90, str_cotizado) RETURNING l_objid CALL drawfillcolor("blue") CALL drawrectangle(180,50,30,30) RETURNING l_objid CALL drawfillcolor("red") CALL drawrectangle(80,50,30,30) RETURNING l_objid # PROMPT "Press a key Con 300 : " FOR test # CLOSE WINDOW w_card END FUNCTION } FUNCTION chqDdeError(p_res,p_msg) DEFINE p_res INTEGER, p_msg STRING, m_err STRING, m_log STRING IF p_res THEN RETURN END IF CALL ui.Interface.frontCall("WINDDE","DDEError",[],[m_err]) CALL ui.Interface.frontCall("WINDDE","DDEFinishAll", [], [p_res] ) LET m_log="DDE Error: ",m_err CLIPPED," (",p_msg,")" CALL errorlog(m_log) LET m_log="Se ha producido un Error en '",p_msg CLIPPED,"'. Para mas detalle revise el LOG de errores." CALL fgl_winmessage("DDE Error", m_log, "stop") EXIT PROGRAM END FUNCTION FUNCTION pru_new_dde(xval,xcol,i) DEFINE celda,rval,xval,xcol STRING DEFINE i INTEGER LET celda = fila_excel,i USING "<<<<&",xcol CLIPPED LET rval = xval CALL ui.Interface.frontCall("WINDDE","DDEPoke", [prog,file,celda,rval], [p_res] ) CALL chqDdeError(p_res,"DDEPoke "||celda) { MESSAGE "Salvando la planilla ",file CLIPPED," !" CALL ui.Interface.refresh() LET p_cmd="[save()]" CALL ui.Interface.frontCall("WINDDE","DDEExecute", [prog,file,p_cmd], [p_res] ) IF p_res THEN CALL fgl_winmessage("Planilla salvada", "Nombre = "||file, "information") ELSE CALL chqDdeError(p_res,"DDEExecute save") END IF CAL ui.Interface.frontCall("WINDDE","DDEFinish", [prog,file], [p_res] ) CALL chqDdeError(p_res,"DDEFinish") CALL ui.Interface.frontCall("WINDDE","DDEFinishAll", [], [p_res] ) CALL chqDdeError(p_res,"DDEFinishAll") } END FUNCTION FUNCTION cotizacion_display() DEFINE arr_display DYNAMIC ARRAY OF RECORD cotizacion_no INTEGER, fecha DATE, nombre_cliente CHAR(50), nombre_proyecto CHAR(50) END RECORD OPEN WINDOW cotizaciones WITH FORM "vefmmt149" DECLARE busca_cotiza CURSOR FOR SELECT a.cotizacion_no,a.fecha,a.nombre_cliente,a.nombre_proyecto FROM vetb00050 a WHERE a.sec_Vend = pvend ORDER BY a.fecha DESC LET idx = 1 FOREACH busca_cotiza INTO arr_display[idx].* LET idx = idx + 1 END FOREACH CALL set_count(idx-1) DISPLAY ARRAY arr_display TO s_cotiza.* AFTER DISPLAY LET idx = arr_curr() EXIT DISPLAY END DISPLAY END FUNCTION FUNCTION despiece() DEFINE vuelve BOOLEAN OPEN WINDOW wdespiece AT 5,3 WITH FORM "vefmwd019" ATTRIBUTE (BORDER,FORM LINE FIRST + 1,PROMPT LINE LAST) DISPLAY arr_cotiza[curr].nombre_p TO descrip_esp ATTRIBUTE(BLUE) DISPLAY arr_cotiza[curr].unidad TO unidad_med ATTRIBUTE(BLUE) DISPLAY arr_cotiza[curr].area TO area ATTRIBUTE(BLUE) DISPLAY arr_cotiza[curr].nombre_area TO descripcion_area ATTRIBUTE(BLUE) CALL despiece.clear() IF actualiza = "N" THEN LET p_vetb50.cotizacion_no = tmpnumero1 DECLARE busca_despiece CURSOR FOR SELECT a.etiqueta,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.lado_1,a.lado_2,a.lado_3,a.cantidad,a.medida FROM vetb00022 a WHERE a.cotizacion_no = p_vetb50.cotizacion_no AND # a.secuencia = curr AND a.area = arr_cotiza[curr].area AND a.cod_n = arr_cotiza[curr].cod_n AND a.cod_grupo = arr_cotiza[curr].cod_grupo AND a.cod_tipo = arr_cotiza[curr].cod_tipo AND a.cod_sec = arr_cotiza[curr].cod_sec LET idx = 1 FOREACH busca_despiece INTO despiece[idx].* LET idx = idx + 1 END FOREACH ELSE DECLARE busca_despiece1 CURSOR FOR SELECT a.etiqueta,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec, a.lado_1,a.lado_2,a.lado_3,a.cantidad,a.medida FROM vetb00022 a WHERE a.cotizacion_no = p_vetb50.cotizacion_no AND #a.secuencia = curr AND a.area = arr_cotiza[curr].area AND a.cod_n = arr_cotiza[curr].cod_n AND a.cod_grupo = arr_cotiza[curr].cod_grupo AND a.cod_tipo = arr_cotiza[curr].cod_tipo AND a.cod_sec = arr_cotiza[curr].cod_sec LET idx = 1 FOREACH busca_despiece1 INTO despiece[idx].* LET idx = idx + 1 END FOREACH END IF # LET despiece[1].cod_n = arr_cotiza[curr].cod_n # LET despiece[1].cod_grupo = arr_cotiza[curr].cod_grupo # LET despiece[1].cod_tipo = arr_cotiza[curr].cod_tipo # LET despiece[1].cod_sec = arr_cotiza[curr].cod_sec CALL set_count(idx-1) INPUT ARRAY despiece WITHOUT DEFAULTS FROM sdespiece.* BEFORE ROW LET curr1 = arr_curr() LET fila = scr_line() # LET petiquetas = ui.ComboBox.forName("formonly.etiqueta") CALL cetiquetas() LET despiece[curr1].cod_n = arr_cotiza[curr].cod_n LET despiece[curr1].cod_grupo = arr_cotiza[curr].cod_grupo LET despiece[curr1].cod_tipo = arr_cotiza[curr].cod_tipo LET despiece[curr1].cod_sec = arr_cotiza[curr].cod_sec IF curr1 > 1 THEN IF despiece[curr1].etiqueta IS NULL THEN LET despiece[curr1].etiqueta = despiece[curr1-1].etiqueta END IF END IF DISPLAY despiece[curr1].etiqueta TO sdespiece[fila].etiqueta DISPLAY arr_cotiza[curr].cod_n TO sdespiece[fila].cod_n DISPLAY arr_cotiza[curr].cod_grupo TO sdespiece[fila].cod_grupo DISPLAY arr_cotiza[curr].cod_tipo TO sdespiece[fila].cod_tipo DISPLAY arr_cotiza[curr].cod_sec TO sdespiece[fila].cod_sec AFTER FIELD cantidad IF arr_cotiza[curr].unidad = "M2" THEN LET despiece[curr1].medida = despiece[curr1].cantidad * (despiece[curr1].lado_1 * despiece[curr1].lado_2) END IF IF arr_cotiza[curr].unidad= "M3" THEN LET despiece[curr1].medida = despiece[curr1].cantidad * (despiece[curr1].lado_1 * despiece[curr1].lado_2 * despiece[curr1].lado_3) END IF IF arr_cotiza[curr].unidad= "ML" THEN LET despiece[curr1].medida = despiece[curr1].cantidad * despiece[curr1].lado_1 LET despiece[curr1].lado_2 = 0 END IF IF arr_cotiza[curr].unidad= "UD" OR arr_cotiza[curr].unidad= "GL" THEN LET despiece[curr1].medida = despiece[curr1].cantidad END IF DISPLAY despiece[curr1].medida TO sdespiece[fila].medida AFTER ROW IF despiece[curr1].medida IS NULL AND despiece[curr1].lado_1 IS NOT NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD lado_1 END IF LET total_medida = 0 FOR idx = 1 TO arr_count() IF despiece[idx].medida IS NOT NULL THEN LET total_medida = total_medida + despiece[idx].medida END IF END FOR DISPLAY BY NAME total_medida AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) EXIT INPUT END IF LET total_medida = 0 LET vuelve = FALSE FOR idx = 1 TO arr_count() IF despiece[idx].medida IS NOT NULL THEN IF despiece[idx].etiqueta IS NULL THEN LET vuelve = TRUE EXIT FOR END IF LET total_medida = total_medida + despiece[idx].medida END IF END FOR IF vuelve THEN CALL msg(16) NEXT FIELD medida CONTINUE INPUT END IF DISPLAY BY NAME total_medida END INPUT IF int_flag THEN LET int_flag = FALSE RETURN END IF # CONTROL NUMERICO BEGIN WORK WHENEVER ERROR CONTINUE DELETE FROM veTB00022 WHERE cotizacion_no = p_vetb50.cotizacion_no AND # secuencia = curr AND area = arr_cotiza[curr].area AND cod_n = arr_cotiza[curr].cod_n AND cod_grupo = arr_cotiza[curr].cod_grupo AND cod_tipo = arr_cotiza[curr].cod_tipo AND cod_sec = arr_cotiza[curr].cod_sec IF SQLSTATE > 02 THEN LET chmensaje = SQLERRMESSAGE CLIPPED,"NO ES POSIBLE GUARDAR LA TRANSACCION" ROLLBACK WORK CALL fgl_winmessage("ERROR",chmensaje,"STOP") RETURN END IF LET total_medida = 0 FOR idx = 1 TO arr_count() IF despiece[idx].medida IS NOT NULL THEN INSERT INTO vetb00022 VALUES (despiece[idx].etiqueta,p_vetb50.cotizacion_no,curr, arr_cotiza[curr].area,arr_cotiza[curr].cod_n,arr_cotiza[curr].cod_grupo, arr_cotiza[curr].cod_tipo,arr_cotiza[curr].cod_sec, despiece[idx].lado_1,despiece[idx].lado_2, despiece[idx].lado_3,despiece[idx].cantidad, despiece[idx].medida,null,SUSER_SNAME(),GETDATE(),null,null) IF SQLSTATE > 02 THEN LET chmensaje = SQLERRMESSAGE CLIPPED,"NO ES POSIBLE GUARDAR LA TRANSACCION" ROLLBACK WORK CALL fgl_winmessage("ERROR",chmensaje,"STOP") RETURN END IF LET total_medida = total_medida + despiece[idx].medida END IF END FOR COMMIT WORK LET arr_cotiza[curr].cantidad_1 = total_medida CLOSE WINDOW wdespiece END FUNCTION FUNCTION control_vendedor(xvendedor,xtipo,xcliente) DEFINE xvendedor SMALLINT, xtipo,xcliente INT, existe BOOLEAN # CONTROL VENDEDOR LET existe = FALSE IF xtipo IS NOT NULL THEN SELECT UNIQUE a.sec_vend FROM vetb00028 a WHERE a.tipo_cliente = xtipo AND a.sec_cliente = xcliente and a.sec_vend = xvendedor and a.status_t is null IF STATUS = NOTFOUND THEN CALL fgl_winmessage("ERROR","USTED NO PUEDE VENDERLE A ESTE CLIENTE, TIENE EJECUTIVO ASINADO","STOP") LET existe = TRUE END IF END IF RETURN existe END FUNCTION FUNCTION busca_descripcion() DEFINE pdescripcion LIKE iptb00002.descrip_esp SELECT a.descrip_esp INTO pdescripcion FROM iptb00002 a WHERE a.cod_n = arr_cotiza[curr].cod_n AND a.cod_grupo = arr_cotiza[curr].cod_grupo AND a.cod_tipo = arr_cotiza[curr].cod_tipo AND a.cod_sec = arr_cotiza[curr].cod_sec RETURN pdescripcion END FUNCTION