{ ------------------------------------------------------------------ PROGRAMA : VEPRMT101 OBJETIVO : Capturar, Modificar, Eliminar registros de la Tabla de Datos Generales o Basicos de Clientes PROGRAMADOR : Lic. Abner Montalvo Z. FECHA REALIZACION : Diciembre 7, 1992. ------------------------------------------------------------------ } IMPORT os IMPORT util GLOBALS "veprgb000.4gl" DEFINE tmpfile STRING DEFINE file_bytes BYTE DEFINE tmpdir_file,tipos_foto,dir_file,dir_foto CHAR(60), d_tipos,mensaje,f_tipos,l_file,filepath,extension,extension_foto,tmp_dirfoto,imagefac,tmp_destino STRING,ffoto,pimagen BYTE , nombre_file_foto,foto VARCHAR(100) DEFINE Toemail,subject,cuerpo_correo,xusername,xsmtphost,xsmtpport,xpassword,emailadd,retorne STRING, telefono_vend VARCHAR(25), email_vend VARCHAR(255), codigo_err,p_res INT DEFINE valor,valor1,balance DECIMAL(12,2), pid,cuenta_contacto,num_emp SMALLINT, n1,n2,pcrea CHAR(15), chitbis CHAR(1), nombre_v CHAR(31), role_puesto VARCHAR(50), arrContactos DYNAMIC ARRAY OF RECORD tipo_negocio_contacto SMALLINT, pcontacto VARCHAR(60), ppuesto VARCHAR(60), ppuesto1 VARCHAR(60), email_contacto VARCHAR(100), email_estado VARCHAR(3), telefono_of CHAR(20), celular CHAR(20), ptelefono_casa CHAR(20) END RECORD DEFINE pinfo DYNAMIC ARRAY OF RECORD num_oc INT, fecha CHAR(10), cotizacion_no INT, valor DEC(12,2), status_ord CHAR(30) END RECORD, arr_vend_aux DYNAMIC ARRAY OF RECORD idrow INT, sec_vend_aux INT, nombre_vend_aux VARCHAR(100) END RECORD, filedestino VARCHAR(200) MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CONNECT TO "marmotech" AS "IFMX" USER usuarios USING clave CONNECT TO "smarmotech" AS "MSSQL" USER usuarios USING clave # BUSCA INFORMACION GENERAL PARA EL EMAIL SELECT from_address,puerto,nombre_servidor,clave INTO xusername,xsmtpport,xsmtphost,xpassword FROM tbperfil_mail WHERE cod_perfil = 2 CALL veprmt101() END MAIN FUNCTION veprmt101() #CLEAR SCREEN OPTIONS #FORM LINE 9, ERROR LINE 23, HELP FILE "vepray000.exe", HELP KEY CONTROL-W, MESSAGE LINE 24, COMMENT LINE 21 #OPEN FORM vefmmt101 FROM "vefmmt101" #DISPLAY FORM vefmmt101 OPEN WINDOW vefmmt101 AT 2,2 WITH FORM "vefmmt101" ATTRIBUTE (BORDER,FORM LINE FIRST+4,COMMENT LINE LAST) #CALL pantalla() #CALL ayuda() #DISPLAY "veprmt101" AT 4,3 #DISPLAY "Datos Generales" AT 6,32 INITIALIZE cliente_bas.* TO NULL INITIALIZE cliente_dir.* TO NULL MENU ON ACTION nuevo LET int_flag = FALSE SET CONNECTION "MSSQL" CLEAR FORM CALL vepcad101() ON ACTION buscar LET int_flag = FALSE SET CONNECTION "MSSQL" CALL vepcmf101() ON ACTION salir LET INT_FLAG = FALSE EXIT PROGRAM END MENU LET INT_FLAG = FALSE CLOSE WINDOW vefmmt101 END FUNCTION FUNCTION vepcad101() ## Captura los datos que va a contener el registro # WHENEVER ERROR CONTINUE DIALOG ATTRIBUTES(UNBUFFERED) INPUT BY NAME cliente_bas.tipo_cliente, cliente_bas.zona_postal,cliente_bas.num_rnc, cliente_bas.nombre,cliente_bas.limite_credito,cliente_bas.cond_pago, cliente_bas.tipo_negocio,cliente_bas.generica,cliente_bas.codigodgii, cliente_dir.calle,cliente_dir.casa_num, cliente_dir.urbanizacion,cliente_dir.barrio, cliente_bas.codigo, cliente_bas.cod_zona, cliente_bas.cod_provincia, cliente_bas.id_ciudad, cliente_bas.telefono_casa, cliente_bas.telefono, cliente_bas.fax,cliente_bas.telex, cliente_bas.nombre_patente, cliente_bas.patente, cliente_bas.puesto_laboral, cliente_bas.url, cliente_bas.us_crea,cliente_bas.fech_crea, cliente_bas.us_mod,cliente_bas.fech_mod,num_emp BEFORE FIELD nombre IF cliente_bas.zona_postal = '1' THEN IF cliente_bas.cond_pago IS NULL THEN NEXT FIELD cond_pago END IF END IF AFTER FIELD patente IF cliente_bas.patente IS NULL THEN CALL msg(16) NEXT FIELD patente END IF # VERIFICA EMAIL CALL inicializar() LET url_verification =url_verification CLIPPED,cliente_bas.patente CLIPPED CALL apiclient(url_verification) RETURNING estado,codigo_err DISPLAY "ESTADO 1 ",estado IF codigo_Err =400 THEN CALL msg(1016) NEXT FIELD patente END IF BEFORE FIELD limite_credito SELECT a.nom_puesto INTO role_puesto FROM seg0003 a WHERE a.usuario = usuarios IF role_puesto <> 'ADMINISTRATOR' AND role_puesto <> 'CXC' THEN NEXT FIELD tipo_negocio END IF BEFORE INPUT LET cliente_bas.codigo='DO' CALL ctipoNegocio("formonly.tipo_negocio") LET pcondicion = ui.combobox.forname("formonly.cond_pago") CALL ccondicion() CALL paises() CALL arrContactos.clear() SELECT a.sec_vend,a.celular,a.email INTO num_emp,telefono_vend,email_vend FROM seg0000 a WHERE a.usuario = usuarios DISPLAY BY NAME num_emp # CALL tipo_comprobante() ON ACTION buscaZona CALL consulta_zonas(cliente_bas.codigo) IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) NEXT FIELD cod_zona END IF IF NOT int_flag THEN LET cliente_bas.cod_zona = zona.cod_zona DISPLAY descrip1 TO descripcion_zona NEXT FIELD cod_provincia END IF LET int_flag = FALSE ON ACTION buscaProvincia LET transportista.cod_zona = cliente_bas.cod_zona CALL consulta_provincias(cliente_bas.cod_zona) IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) NEXT FIELD cod_provincia END IF IF NOT int_flag THEN LET cliente_bas.cod_provincia = zonap.cod_provincia DISPLAY descrip1 TO descripcion_provincia NEXT FIELD telefono END IF ON ACTION buscaEmpleado CALL vend_cli() IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) NEXT FIELD num_emp END IF IF NOT int_flag THEN # LET num_emp = cli_vend1[curr].num_emp DISPLAY num_emp,nombre_v END IF LET int_flag = FALSE BEFORE FIELD generica SELECT DISTINCT a.generica FROM vetb00004 a WHERE a.generica = "SI" IF STATUS <> NOTFOUND THEN NEXT FIELD codigodgii END IF AFTER FIELD zona_postal SELECT DISTINCT a.tipo_cliente FROM vetb00060 a WHERE a.tipo_cliente = cliente_bas.tipo_cliente AND a.paga_itbis = 'S' IF STATUS <> NOTFOUND THEN IF cliente_bas.zona_postal IS NULL THEN CALL msg(16) NEXT FIELD zona_postal END IF END IF ## Verifica que el codigo no exista en la tabla de datos basicos de clientes. ## Si existe, entonces despliega los datos del registro existente. AFTER FIELD num_rnc IF cliente_bas.codigodgii IS NOT NULL AND cliente_bas.generica='NO' THEN SELECT a.paga_itbis INTO chitbis FROM vetb00060 a WHERE a.tipo_cliente = cliente_bas.tipo_cliente IF chitbis = 'S' OR kitbis = 'S' THEN IF cliente_bas.num_rnc IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num_rnc END IF LET cliente_bas.num_rnc=cliente_bas.num_rnc CLIPPED IF cliente_bas.zona_postal = '1' THEN IF LENGTH(cliente_bas.num_rnc) <> 9 THEN LET numero_msg = 77 CALL msg(numero_msg) NEXT FIELD num_rnc END IF ELSE IF cliente_bas.zona_postal = '2' THEN IF LENGTH(cliente_bas.num_rnc) <> 11 THEN LET numero_msg = 77 CALL msg(numero_msg) NEXT FIELD num_rnc END IF END IF END IF LET VECES = 0 SELECT UNIQUE a.tipo_cliente FROM vetb00004 a WHERE a.num_rnc = cliente_bas.num_rnc AND a.tipo_cliente = cliente_bas.tipo_cliente AND a.status_t is NULL IF STATUS <> NOTFOUND THEN LET numero_msg = 12 CALL msg(numero_msg) NEXT field num_rnc END IF LET VECES = 0 SELECT COUNT(*) INTO veces FROM vetb00004 a WHERE a.num_rnc = cliente_bas.num_rnc AND a.tipo_cliente = cliente_bas.tipo_cliente AND a.status_t is NULL IF veces >= 1 THEN LET numero_msg = 12 CALL msg(numero_msg) NEXT field num_rnc END IF #BUSCA EL RNC EN LA TABLA DE LA DGII IF kitbis = 'S' AND cliente_bas.zona_postal ='1' THEN LET selec = "SELECT a.razon_social,RTRIM(a.calle),' NO.'+RTRIM(a.no_local),a.sector,a.estado1 ", "FROM DGII.dbo.empresas a ", "WHERE a.rnc = ? " PREPARE query2 FROM selec EXECUTE query2 USING cliente_bas.num_rnc INTO cliente_bas.nombre,cliente_dir.calle, cliente_dir.casa_num,cliente_dir.urbanizacion,estado_rnc IF STATUS = NOTFOUND THEN CALL msg(3) NEXT FIELD num_rnc END IF DISPLAY BY NAME cliente_bas.nombre NEXT FIELD cond_pago END IF IF estado_rnc = 'ANULADO' OR estado_rnc = 'CESE TEMPORAL' OR estado_rnc = 'DADO DE BAJA' OR estado_rnc = 'RECHAZADO' OR estado_rnc= 'RECHAZADO' OR estado_rnc = 'SUSPENDIDO' THEN CALL msg(1022) NEXT FIELD sec_cliente END IF END IF END IF AFTER FIELD tipo_cliente IF cliente_bas.tipo_cliente is NULL or cliente_bas.tipo_cliente = 0 then LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD tipo_cliente END IF # BUSCA SI EL CLIENTE PAGA ITBIS LET kitbis = 'N' SELECT a.ncf,a.control_creacion_usuario,a.codigo_dgii INTO kitbis,pcrea,cliente_bas.codigodgii FROM vetb00060 a WHERE a.tipo_cliente = cliente_bas.tipo_cliente IF STATUS = NOTFOUND THEN CALL fgl_winmessage("ERROR","TIPO CLIENTE NO EXISTE","INFO") NEXT FIELD tipo_cliente END IF IF pcrea = 'SI' THEN SELECT a.usuario FROM seg0001 a,seg0005 b WHERE a.usuario =usuarios AND a.cod_perfil = b.cod_perfil AND b.programa = 'veprmt101.crear' IF STATUS = NOTFOUND THEN CALL fgl_winmessage("ERROR","USTED NO PUEDE CREAR ESTE TIPO DE CLIENTES","INFO") NEXT FIELD tipo_cliente END IF END IF AFTER FIELD nombre IF cliente_bas.nombre IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD nombre END IF AFTER FIELD cod_zona IF cliente_bas.cod_zona is NULL then LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_zona END IF SELECT descrip INTO descrip1 FROM vetb00008 WHERE cod_zona = cliente_bas.cod_zona AND status_t IS NULL IF status = NOTFOUND THEN LET numero_msg = 43 CALL msg(numero_msg) NEXT FIELD cod_zona END IF DISPLAY descrip1 TO descripcion_zona NEXT FIELD cod_provincia AFTER FIELD cod_provincia IF cliente_bas.cod_provincia is NULL then LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_provincia END IF SELECT b.nombre_provincia, b.status_t INTO descrip1, status_reg FROM vetb00009 a, vetb00020 b WHERE a.cod_zona = cliente_bas.cod_zona AND a.cod_provincia = cliente_bas.cod_provincia AND b.cod_provincia = a.cod_provincia IF status >= 0 THEN IF status != NOTFOUND THEN IF status_reg = "E" THEN LET numero_msg = 66 CALL msg(numero_msg) NEXT FIELD cod_provincia END IF DISPLAY descrip1 TO descripcion_provincia ELSE LET numero_msg = 65 CALL msg(numero_msg) NEXT FIELD cod_zona END IF END IF CALL ciudad_pais(cliente_bas.cod_provincia) #CALL veprmt102(cliente_bas.tipo_cliente,cliente_bas.sec_cliente) #CALL veprmt106(cliente_bas.tipo_cliente,cliente_bas.sec_cliente) AFTER FIELD num_emp IF num_emp IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num_emp END IF SELECT UNIQUE a.nom1_emp,a.apell1_emp INTO n1,n2 FROM adtb00003 a WHERE (a.status_t IS NULL OR a.status_t = "I") AND a.num_emp = num_emp IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD num_emp END IF LET nombre_v = n1 CLIPPED," ",n2 CLIPPED DISPLAY BY NAME nombre_v AFTER INPUT IF num_emp IS NULL OR num_emp = 0 THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num_emp END IF IF cliente_bas.cod_provincia IS NULL OR cliente_bas.cod_provincia = 0 THEN CALL msg(16) NEXT FIELD cod_provincia END IF SELECT UNIQUE a.nom1_emp,a.apell1_emp INTO n1,n2 FROM adtb00003 a WHERE (a.status_t IS NULL OR a.status_t = "I") AND a.num_emp = num_emp IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD num_emp END IF LET nombre_v = n1 CLIPPED," ",n2 CLIPPED DISPLAY BY NAME nombre_v # CONTROL RELACION ZONAS - PROVINCIAS SELECT a.cod_provincia FROM vetb00020 a WHERE a.codigo = cliente_bas.codigo AND a.cod_provincia = cliente_bas.cod_provincia IF STATUS = NOTFOUND THEN CALL msg(66) NEXT FIELD codigo END IF END INPUT # vendedores auxiliares # vendedores auxiliares INPUT ARRAY arr_vend_aux FROM s_aux.* BEFORE ROW LET curr = arr_curr() AFTER FIELD sec_vend_aux IF arr_vend_aux[curr].sec_vend_aux IS NOT NULL THEN SELECT RTRIM(a.nom1_emp)||' '||a.apell1_emp INTO arr_vend_aux[curr].nombre_vend_aux FROM adtb00003 a WHERE a.num_emp = arr_vend_aux[curr].sec_vend_aux AND a.status_t IS NULL IF STATUS = NOTFOUND THEN CALL msg(3) NEXT FIELD sec_vend_aux END IF IF arr_vend_aux[curr].sec_vend_aux = num_emp THEN CALL fgl_winmessage("ERROR","NO PUEDE ASIGNAR EJECUTIVO DE ESTE CLIENTE COMO VENDEDOR ADICIONAL","INFO") NEXT FIELD sec_vend_aux END IF END IF ON ACTION busca_auxiliar CALL busca_empleado1() RETURNING p_adtb03.num_emp,p_adtb03.nom1_emp, p_adtb03.nom2_emp, p_adtb03.apell1_emp, p_adtb03.apell2_emp LET arr_vend_aux[curr].sec_vend_aux = p_adtb03.num_emp LET arr_vend_aux[curr].nombre_vend_aux= p_adtb03.nom1_emp clipped,' ', p_adtb03.nom2_emp clipped,' ', p_adtb03.apell1_emp clipped,' ', p_adtb03.apell2_emp clipped END INPUT # contactos INPUT ARRAY arrContactos FROM scontactos.* BEFORE INPUT CALL ctipoNegocio("formonly.tipo_negocio_contacto") AFTER FIELD email_contacto IF arrcontactos[arr_curr()].email_contacto IS NOT NULL THEN # VERIFICA EMAIL CALL inicializar() LET url_verification =arrcontactos[arr_curr()].email_contacto CLIPPED CALL apiclient(url_verification) RETURNING estado,codigo_err IF codigo_Err =400 THEN CALL msg(1016) NEXT FIELD email_contacto END IF END IF END INPUT ON ACTION CANCEL CALL MSG(2) LET INT_FLAG = FALSE RETURN ON ACTION actualiza ATTRIBUTE(TEXT="Actualiza",IMAGE="refresh") IF cliente_dir.calle IS NULL THEN CALL msg(16) NEXT FIELD calle END IF IF cliente_bas.nombre IS NULL THEN CALL msg(16) NEXT FIELD nombre END IF IF cliente_bas.patente = 'jsoto@marmotech.com.do' THEN CALL fgl_winmessage("ERROR","EMAIL INVALIDO","INFO") NEXT FIELD pantente END IF # IF LENGTH(cliente_bas.patente) <11 THEN # CALL fgl_Winmessage("INFO","EMAIL DEBE DE CONTENER MAS CARACTERES","INFO") # NEXT FIELD patente # END IF IF cliente_bas.patente NOT MATCHES "*@*" THEN CALL fgl_Winmessage("INFO","EMAIL NO ES VALIDO","INFO") NEXT FIELD patente END IF # IF cliente_bas.patente = 'jsoto@marmotech.com.do' THEN # CALL fgl_Winmessage("INFO","EMAIL ERRONEO","INFO") # NEXT FIELD patente # END IF IF LENGTH(cliente_dir.calle) < 5 THEN CALL fgl_winmessage("INFO","DEBES COLOCAR UNA DIRECCION CON MAS INFORMACION","INFO") NEXT FIELD calle END IF IF cliente_bas.patente IS NULL THEN CALL msg(16) NEXT FIELD patente END IF # VENDEDOR IF num_emp IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num_emp END IF SELECT UNIQUE a.nom1_emp,a.apell1_emp INTO n1,n2 FROM adtb00003 a WHERE (a.status_t IS NULL OR a.status_t = "I") AND a.num_emp = num_emp IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD num_emp END IF LET nombre_v = n1 CLIPPED," ",n2 CLIPPED DISPLAY BY NAME nombre_v # VERIFICA EMAIL CALL inicializar() LET url_verification =cliente_bas.patente CLIPPED CALL apiclient(url_verification) RETURNING estado,codigo_err IF codigo_Err =400 THEN CALL msg(1016) NEXT FIELD patente END IF # BUSCA EL MAXIMO NUMERO DEL TIPO DE CLIENTE SELECT MAX(a.sec_cliente) INTO cliente_bas.sec_cliente FROM vetb00004 a WHERE a.tipo_cliente = cliente_bas.tipo_cliente IF cliente_bas.sec_cliente IS NULL THEN LET cliente_bas.sec_cliente = 1 END IF LET cliente_bas.sec_cliente = cliente_bas.sec_cliente + 1 DISPLAY BY NAME cliente_bas.sec_cliente ## WHENEVER ERROR CONTINUE BEGIN WORK INSERT INTO vetb00005 VALUES (cliente_bas.tipo_cliente, cliente_bas.sec_cliente, cliente_dir.calle, cliente_dir.casa_num, cliente_dir.barrio, cliente_dir.urbanizacion, null, null, usuarios, GETDATE(), null, null) IF STATUS < 0 THEN ROLLBACK WORK EXIT PROGRAM END IF INSERT INTO vetb00028 VALUES (NULL,num_emp,cliente_bas.tipo_cliente,cliente_bas.sec_cliente, NULL,usuarios,GETDATE(),NULL,NULL) IF STATUS < 0 THEN ROLLBACK WORK EXIT PROGRAM END IF FOR idx = 1 TO arrcontactos.getLength() IF arrcontactos[idx].pcontacto IS NOT NULL THEN IF arrcontactos[idx].email_contacto IS NOT NULL THEN # VERIFICA EMAIL CALL inicializar() LET url_verification =arrcontactos[idx].email_contacto CLIPPED CALL apiclient(url_verification) RETURNING estado,codigo_err IF codigo_Err =400 THEN ROLLBACK WORK CALL msg(1016) NEXT FIELD email_contacto END IF END IF INSERT INTO vetb00087 (tipo_cliente,sec_cliente,contacto,puesto,email,celular, telefono_of,telefono_casa,us_crea,fech_crea,puesto1,tipo_negocio_contacto,email_estado) VALUES (cliente_bas.tipo_cliente,cliente_Bas.sec_cliente, arrContactos[idx].pcontacto,arrContactos[idx].ppuesto, arrContactos[idx].email_contacto,arrContactos[idx].celular, arrContactos[idx].telefono_of,arrContactos[idx].ptelefono_casa, usuarios,getdate(),arrcontactos[idx].ppuesto1,arrcontactos[idx].tipo_negocio_contacto, arrContactos[idx].email_estado) IF STATUS < 0 THEN ROLLBACK WORK EXIT PROGRAM END IF END IF END FOR INSERT INTO vetb00004 (tipo_cliente,sec_cliente,nombre,cod_zona,cod_provincia, telefono,fax,telex,limite_credito,zona_postal,num_rnc, status_t,us_crea,fech_crea,telefono_casa,tipo_negocio,cond_pago,id_ciudad,url,nombre_patente, patente,generica,codigodgii,codigo) VALUES (cliente_bas.tipo_cliente,cliente_bas.sec_cliente, cliente_bas.nombre,cliente_bas.cod_zona,cliente_bas.cod_provincia, cliente_bas.telefono,cliente_bas.fax,cliente_bas.telex, cliente_bas.limite_credito, cliente_bas.zona_postal,cliente_bas.num_rnc, NULL,usuarios,GETDATE(),cliente_bas.telefono_casa, cliente_bas.tipo_negocio,cliente_bas.cond_pago,cliente_bas.id_ciudad,cliente_bas.url, cliente_bas.nombre_patente,cliente_bas.patente,cliente_bas.generica,cliente_bas.codigodgii,cliente_bas.codigo) IF STATUS < 0 THEN ROLLBACK WORK EXIT PROGRAM END IF # Venedor auxiliar FOR idx = 1 TO arr_vend_aux.getLength() IF arr_Vend_aux[idx].sec_vend_aux IS NOT NULL THEN INSERT INTO vetb00059 (tipo_cliente,sec_cliente,sec_Vend_aux,us_crea,fech_crea) VALUES (cliente_bas.tipo_cliente,cliente_Bas.sec_cliente,arr_vend_aux[idx].sec_vend_aux,usuarios,getdate()) END IF END FOR CALL contenido() RETURNING cuerpo_correo LET Toemail = cliente_bas.patente CLIPPED LET subject = 'MARMOTECH BIENBENIDA' SELECT a.from_address,a.puerto,a.nombre_servidor,a.clave INTO xusername,xsmtpport,xsmtphost,xpassword FROM tbperfil_mail a WHERE a.cod_perfil = 2 COMMIT WORK SET CONNECTION "MSSQL" LET numero_msg = 1 CALL msg(numero_msg) { CALL enviaemail(Toemail,subject,cuerpo_correo,NULL,xusername,xsmtphost,xsmtpport,xpassword) RETURNING retorne INSERT INTO envia_email_log (email,display_name,estado,fecha,programa_envio,us_crea) VALUES (toemail ,cliente_bas.nombre ,retorne ,getdate() ,'MAESTRA CLIENTES' ,usuarios) IF retorne = 'CORRECTO' THEN COMMIT WORK CALL arrcontactos.clear() SET CONNECTION "MSSQL" LET numero_msg = 1 CALL msg(numero_msg) ELSE ROLLBACK WORK CALL msg(1016) END IF } EXIT DIALOG END DIALOG END FUNCTION FUNCTION vepcmf101() # WHENEVER ERROR CONTINUE LET int_flag = false ## Aqui se prepara para la captura del criterio de seleccion DIALOG ATTRIBUTES(UNBUFFERED,FIELD ORDER FORM) CONSTRUCT criterio ON a.num_rnc,b.sec_vend,a.tipo_cliente,a.sec_cliente, a.nombre,a.telefono,a.telefono_casa,a.tipo_negocio FROM num_rnc1,kvendedor,tipo_cliente2,sec_cliente2,nombre2,telefono2, telefono3,tipoNegocio BEFORE CONSTRUCT CALL lista_clientes.clear() CALL cvendedor() CALL ctipoNegocio1() # CALL tipo_comprobante() AFTER CONSTRUCT END CONSTRUCT ON ACTION busca_cliente ATTRIBUTE(TEXT="Buscar Cliente",IMAGE="find") SET CONNECTION "MSSQL" CALL lista_clientes.clear() LET SELEC = " SELECT a.num_rnc, a.tipo_negocio,RTRIM(CAST(ISNULL(c.nom1_emp,' ') AS CHAR(30)))+' ' + CAST(ISNULL(c.apell1_emp,' ') AS CHAR(30)),a.tipo_cliente,a.sec_cliente, ", " a.nombre, CASE a.status_t WHEN 'E' THEN 'DESACTIVADO' ELSE 'ACTIVO' END,a.telefono,a.telefono_casa ", "FROM vetb00004 a LEFT OUTER JOIN vetb00028 b ON a.tipo_cliente = b.tipo_cliente and a.sec_cliente = b.sec_cliente LEFT OUTER JOIN adtb00003 c ON b.sec_vend = c.num_emp ", " WHERE ", criterio clipped," ORDER BY a.tipo_cliente,a.sec_cliente" PREPARE busca FROM selec DECLARE datos CURSOR FOR busca CALL lista_clientes.clear() LET idx = 1 FOREACH datos INTO lista_clientes[idx].* # busca ultima factura realizada SELECT CONVERT(CHAR(10),MAX(a.fecha_factura),103) INTO lista_clientes[idx].fecha_venta FROM vetb00002 a WHERE a.tipo_cliente = lista_clientes[idx].tipo_cliente2 AND a.sec_cliente = lista_clientes[idx].sec_cliente2 AND a.status_t IS NULL LET idx = idx + 1 END FOREACH IF idx = 1 THEN CALL fgl_winmessage("ERROR","NO EXISTEN CLIENTES CON ESTA CONDICION","INFO") EXIT DIALOG END IF DISPLAY ARRAY lista_clientes TO sclientes.* ON ACTION desactivar ATTRIBUTE(TEXT="Desactivar",IMAGE="fa-close") SELECT a.usuario FROM seg0001 a,seg0005 b WHERE a.usuario =usuarios AND a.cod_perfil = b.cod_perfil AND b.programa = 'veprmt101.activar' IF STATUS = NOTFOUND THEN CALL fgl_winmessage("ERROR","USTED NO TIENE PERMISOS PARA UTILIZAR OPCION","INFO") CONTINUE DIALOG END IF # BUSCA SI EL CLIENTE PAGA ITBIS LET kitbis = 'N' SELECT a.paga_itbis INTO kitbis FROM vetb00060 a WHERE a.tipo_cliente = cliente_bas.tipo_cliente UPDATE vetb00005 SET (status_t,us_mod,fech_mod) = ("E",usuarios,GETDATE()) WHERE tipo_cliente = cliente_bas.tipo_cliente AND sec_cliente = cliente_bas.sec_cliente UPDATE vetb00006 SET (status_t,us_mod,fech_mod) = ("E",usuarios,GETDATE()) WHERE tipo_cliente_s = cliente_bas.tipo_cliente AND sec_cliente_s = cliente_bas.sec_cliente UPDATE vetb00028 SET (status_t,us_mod,fech_mod) = ("E",usuarios,GETDATE()) WHERE tipo_cliente = cliente_bas.tipo_cliente AND sec_cliente = cliente_bas.sec_cliente UPDATE vetb00004 SET (status_t,us_mod,fech_mod) = ("E",usuarios,GETDATE()) WHERE tipo_cliente = cliente_bas.tipo_cliente AND sec_cliente = cliente_bas.sec_cliente IF kitbis = 'S' THEN SET CONNECTION "IFMX" UPDATE vetb00004 SET (status_t,us_mod,fech_mod) = ("E",user,getdate()) WHERE tipo_cliente = cliente_bas.tipo_cliente AND sec_cliente = cliente_bas.sec_cliente END IF LET numero_msg = 188 CALL msg(numero_msg) ON ACTION activar SELECT a.usuario FROM seg0001 a,seg0005 b WHERE a.usuario =usuarios AND a.cod_perfil = b.cod_perfil AND b.programa = 'veprmt101.activar' IF STATUS = NOTFOUND THEN CALL fgl_winmessage("ERROR","USTED NO TIENE PERMISOS PARA UTILIZAR OPCION","INFO") CONTINUE DIALOG END IF # BUSCA SI EL CLIENTE PAGA ITBIS LET kitbis = 'N' SELECT a.ncf INTO kitbis FROM vetb00060 a WHERE a.tipo_cliente = cliente_bas.tipo_cliente UPDATE vetb00005 SET (status_t,us_mod,fech_mod) = (NULL,usuarios,GETDATE()) WHERE tipo_cliente = cliente_bas.tipo_cliente AND sec_cliente = cliente_bas.sec_cliente UPDATE vetb00006 SET (status_t,us_mod,fech_mod) = (NULL,usuarios,GETDATE()) WHERE tipo_cliente_s = cliente_bas.tipo_cliente AND sec_cliente_s = cliente_bas.sec_cliente UPDATE vetb00028 SET (status_t,us_mod,fech_mod) = (NULL,usuarios,GETDATE()) WHERE tipo_cliente = cliente_bas.tipo_cliente AND sec_cliente = cliente_bas.sec_cliente UPDATE vetb00004 SET (status_t,us_mod,fech_mod) = (NULL,usuarios,GETDATE()) WHERE tipo_cliente = cliente_bas.tipo_cliente AND sec_cliente = cliente_bas.sec_cliente # ACTUALIZACION BASE DE DATOS EXTERIOR IF kitbis = 'S' THEN SET CONNECTION "IFMX" UPDATE vetb00004 SET (status_t,us_mod,fech_mod) = (NULL,usuarios,getdate()) WHERE tipo_cliente = cliente_bas.tipo_cliente AND sec_cliente = cliente_bas.sec_cliente END IF SET CONNECTION "MSSQL" LET numero_msg = 188 CALL msg(numero_msg) BEFORE DISPLAY LET lj= lista_clientes.getLength() DISPLAY BY NAME lj LET curr = arr_curr() SELECT a.* INTO cliente_bas.* FROM vetb00004 a WHERE a.tipo_cliente = lista_clientes[curr].tipo_cliente2 AND a.sec_cliente = lista_clientes[curr].sec_cliente2 LET cliente_bas.tipo_cliente = lista_clientes[curr].tipo_cliente2 LET cliente_bas.sec_cliente = lista_clientes[curr].sec_cliente2 CALL arrcontactos.clear() CALL busca_info(DIALOG,arr_curr()) # CALL tipo_comprobante() CALL paises() DISPLAY BY NAME cliente_bas.tipo_cliente,cliente_bas.sec_cliente, cliente_bas.cod_provincia,cliente_bas.cod_zona,cliente_bas.cond_pago, cliente_bas.fax,cliente_bas.fech_crea,cliente_bas.fech_mod,cliente_bas.limite_credito, cliente_bas.nombre,cliente_bas.num_rnc,cliente_bas.status_t,cliente_bas.telefono, cliente_bas.telefono_casa,cliente_bas.telex,cliente_bas.tipo_negocio, cliente_bas.us_crea,cliente_bas.us_mod,cliente_bas.zona_postal,cliente_bas.patente, cliente_bas.codigodgii,cliente_bas.codigo BEFORE ROW LET curr = arr_curr() SELECT a.* INTO cliente_bas.* FROM vetb00004 a WHERE a.tipo_cliente = lista_clientes[curr].tipo_cliente2 AND a.sec_cliente = lista_clientes[curr].sec_cliente2 SET CONNECTION "MSSQL" LET cliente_bas.tipo_cliente = lista_clientes[curr].tipo_cliente2 LET cliente_bas.sec_cliente = lista_clientes[curr].sec_cliente2 CALL arrcontactos.clear() CALL paises() CALL busca_info(DIALOG, arr_curr()) DISPLAY BY NAME cliente_bas.tipo_cliente,cliente_bas.sec_cliente, cliente_bas.cod_provincia,cliente_bas.cod_zona,cliente_bas.cond_pago, cliente_bas.fax,cliente_bas.fech_crea,cliente_bas.fech_mod,cliente_bas.limite_credito, cliente_bas.nombre,cliente_bas.num_rnc,cliente_bas.status_t,cliente_bas.telefono, cliente_bas.telefono_casa,cliente_bas.telex,cliente_bas.tipo_negocio, cliente_bas.us_crea,cliente_bas.us_mod,cliente_bas.zona_postal,cliente_bas.patente, cliente_bas.url,cliente_bas.codigodgii,cliente_bas.codigo AFTER ROW LET curr = arr_curr() SELECT a.* INTO cliente_bas.* FROM vetb00004 a WHERE a.tipo_cliente = lista_clientes[curr].tipo_cliente2 AND a.sec_cliente = lista_clientes[curr].sec_cliente2 SET CONNECTION "MSSQL" CALL busca_info(DIALOG,arr_curr()) DISPLAY BY NAME cliente_bas.tipo_cliente,cliente_bas.sec_cliente, cliente_bas.cod_provincia,cliente_bas.cod_zona,cliente_bas.cond_pago, cliente_bas.fax,cliente_bas.fech_crea,cliente_bas.fech_mod,cliente_bas.limite_credito, cliente_bas.nombre,cliente_bas.num_rnc,cliente_bas.status_t,cliente_bas.telefono, cliente_bas.telefono_casa,cliente_bas.telex,cliente_bas.tipo_negocio, cliente_bas.us_crea,cliente_bas.us_mod,cliente_bas.zona_postal, cliente_bas.url AFTER DISPLAY END DISPLAY DISPLAY ARRAY pinfo TO sinformacion.* END DISPLAY ON ACTION cancel LET int_flag = FALSE INITIALIZE cliente_Bas.* TO NULL INITIALIZE cliente_dir.* TO NULL CALL lista_clientes.clear() CLEAR FORM EXIT DIALOG ON ACTION eliminar ATTRIBUTE(TEXT='Borrar',IMAGE="garbage2") SELECT a.sec_vend FROM vetb00028 a,seg0007 b WHERE b.usuario = usuarios AND b.sec_vend = a.sec_vend AND a.tipo_cliente = cliente_bas.tipo_cliente AND a.sec_cliente = cliente_bas.sec_cliente AND a.status_t IS NULL IF STATUS = NOTFOUND THEN CALL fgl_winmessage("ERROR","USTED NO LE VENDE A ESTE CLIENTE, DEBE CONSULTAR EL EJECUTIVO ASIGNADO","STOP") RETURN END IF SELECT SUM(a.valor+a.monto_desc) INTO valor FROM cctb00001 a WHERE a.tipo_cliente = cliente_bas.tipo_cliente AND a.sec_cliente = cliente_bas.sec_cliente AND a.status_t is NULL AND a.tipo_doc NOT in ("DE","PC") IF valor IS NULL THEN LET valor = 0.00 END IF SELECT SUM(a.valor+a.monto_desc) INTO valor1 FROM cctb00001 a WHERE a.tipo_cliente = cliente_bas.tipo_cliente and a.sec_cliente = cliente_bas.sec_cliente and a.status_t is NULL AND a.tipo_doc = "DE" AND a.num_doc = a.aplica_a IF valor1 IS NULL THEN LET valor1 = 0.00 END IF LET balance = valor - valor1 IF balance != 0 THEN LET numero_msg = 184 CALL msg(numero_msg) CONTINUE DIALOG RETURN ELSE UPDATE vetb00004 SET (status_t,us_mod,fech_mod) = ("E",usuarios,GETDATE()) WHERE tipo_cliente = cliente_bas.tipo_cliente AND sec_cliente = cliente_bas.sec_cliente UPDATE vetb00005 SET (status_t,us_mod,fech_mod) = ("E",usuarios,GETDATE()) WHERE tipo_cliente = cliente_bas.tipo_cliente AND sec_cliente = cliente_bas.sec_cliente UPDATE vetb00006 SET (status_t,us_mod,fech_mod) = ("E",usuarios,GETDATE()) WHERE tipo_cliente_s = cliente_bas.tipo_cliente AND sec_cliente_s = cliente_bas.sec_cliente UPDATE vetb00028 SET (status_t,us_mod,fech_mod) = ("E",usuarios,GETDATE()) WHERE tipo_cliente = cliente_bas.tipo_cliente AND sec_cliente = cliente_bas.sec_cliente # ACTUALIZA LA BASE DE DATOS EXTERIOR IF kitbis = 'S' THEN SET CONNECTION "IFMX" UPDATE vetb00004 SET (status_t,us_mod,fech_mod) = ("E",usuarios,getdate()) WHERE tipo_cliente = cliente_bas.tipo_cliente AND sec_cliente = cliente_bas.sec_cliente UPDATE vetb00005 SET (status_t,us_mod,fech_mod) = ("E",usuarios,getdate()) WHERE tipo_cliente = cliente_bas.tipo_cliente AND sec_cliente = cliente_bas.sec_cliente UPDATE vetb00028 SET (status_t,us_mod,fech_mod) = ("E",usuarios,getdate()) WHERE tipo_cliente = cliente_bas.tipo_cliente AND sec_cliente = cliente_bas.sec_cliente END IF END IF LET numero_msg = 39 CALL msg(numero_msg) ON ACTION actualiza ATTRIBUTE(TEXT="Actualiza",IMAGE="refresh") CALL actualiza() CALL lista_clientes.clear() END DIALOG END FUNCTION FUNCTION vend_cli() #WHENEVER ERROR CONTINUE OPEN WINDOW relacion AT 8,5 WITH FORM "vefmwd101" ATTRIBUTE (BORDER, COMMENT LINE LAST,FORM LINE FIRST + 1) CONSTRUCT criterio ON b.nom1_emp,b.apell1_emp FROM nom1_emp,apell1_emp IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE GOTO salir1 END IF LET selec = "SELECT UNIQUE b.num_emp,b.nom1_emp,b.apell1_emp ", "FROM adtb00003 b,vetb00028 a ", "WHERE b.num_emp = a.sec_vend AND a.status_t IS NULL AND ", criterio CLIPPED," ORDER BY 1 " PREPARE comando1 FROM selec DECLARE vendedor CURSOR FOR comando1 LET idx = 1 FOREACH vendedor INTO cli_vend1[idx].* LET idx = idx + 1 END FOREACH CALL set_count(idx-1) DISPLAY ARRAY cli_vend1 TO s_empleados.* LET curr = ARR_CURR() LET num_emp = cli_vend1[curr].num_emp LET nombre_v= cli_vend1[curr].nom1_emp CLIPPED," ", cli_vend1[curr].apell1_emp CLIPPED IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE GOTO salir1 END IF LABEL salir1: CLOSE WINDOW relacion END FUNCTION FUNCTION busca_info(d,i1) DEFINE d ui.Dialog, i1 INT, corporativo VARCHAR(100), plimite_cr_grupo DEC(12,2) LET transportista.cod_zona = cliente_bas.cod_zona LET nombre = cliente_bas.nombre CALL busca_nombre_zona() DISPLAY descrip1 TO descripcion_zona LET transportista.cod_zona = cliente_bas.cod_zona LET transportista.cod_provincia = cliente_bas.cod_provincia CALL busca_provincia() DISPLAY descrip1 TO descripcion_provincia SELECT UNIQUE a.num_emp,a.nom1_emp,a.apell1_emp INTO num_emp,n1,n2 FROM adtb00003 a, vetb00028 b WHERE a.num_emp = b.sec_vend AND b.tipo_cliente = cliente_bas.tipo_cliente AND b.sec_cliente = cliente_bas.sec_cliente LET nombre_v = n1 CLIPPED," ",n2 CLIPPED # BUSCA SI EL CLIENTE PAGA ITBIS LET kitbis = 'N' SELECT a.ncf INTO kitbis FROM vetb00060 a WHERE a.tipo_cliente = cliente_bas.tipo_cliente CALL ciudad_pais(cliente_bas.cod_provincia) CALL ctipoNegocio("formonly.tipo_negocio") LET pcondicion = ui.combobox.forname("formonly.cond_pago") CALL ccondicion() #CALL tipo_comprobante() CALL busca_direcciones(cliente_bas.tipo_cliente,cliente_Bas.sec_cliente) RETURNING cliente_dir.* CALL arrcontactos.clear() CALL ctipoNegocio("formonly.tipo_negocio_contacto") FOR idx = 1 TO 5 DISPLAY arrcontactos[idx].pcontacto TO scontactos[idx].pcontacto DISPLAY arrcontactos[idx].ppuesto TO scontactos[idx].ppuesto DISPLAY arrcontactos[idx].email_contacto TO scontactos[idx].email_contacto DISPLAY arrcontactos[idx].ptelefono_casa TO scontactos[idx].ptelefono_casa DISPLAY arrcontactos[idx].telefono_of TO scontactos[idx].telefono_of END FOR DECLARE busca_contactos CURSOR FOR SELECT a.tipo_negocio_contacto,a.contacto,a.puesto,a.puesto1,a.email,a.email_estado,a.celular,a.telefono_of,a.telefono_casa, a.id FROM vetb00087 a WHERE a.tipo_cliente = cliente_bas.tipo_cliente AND a.sec_cliente = cliente_bas.sec_cliente ORDER BY a.id LET idx = 1 FOREACH busca_contactos INTO arrContactos[idx].* IF idx < 5 THEN DISPLAY arrcontactos[idx].pcontacto TO scontactos[idx].pcontacto DISPLAY arrcontactos[idx].ppuesto TO scontactos[idx].ppuesto DISPLAY arrcontactos[idx].email_contacto TO scontactos[idx].email_contacto DISPLAY arrcontactos[idx].ptelefono_casa TO scontactos[idx].ptelefono_casa DISPLAY arrcontactos[idx].telefono_of TO scontactos[idx].telefono_of END IF LET idx = idx + 1 END FOREACH # INFORMACION CORPORATIVO SELECT CAST(a.codigo_grupo AS VARCHAR(10))||'-'||a.descripcion,b.limite_cr_grupo INTO corporativo,plimite_cr_grupo FROM vetb00052 a,vetb00054 b WHERE a.codigo_grupo = b.codigo_grupo AND a.tipo_cliente = cliente_bas.tipo_cliente AND a.sec_cliente = cliente_bas.sec_cliente CALL paises() SELECT a.codigo INTO cliente_bas.codigo FROM vetb00004 a WHERE a.tipo_cliente = cliente_bas.tipo_cliente AND a.sec_cliente = cliente_bas.sec_cliente DISPLAY BY NAME cliente_bas.tipo_cliente,cliente_bas.sec_cliente, cliente_bas.cod_provincia,cliente_bas.cod_zona,cliente_bas.cond_pago, cliente_bas.fax,cliente_bas.fech_crea,cliente_bas.fech_mod,cliente_bas.limite_credito, cliente_bas.nombre,cliente_bas.num_rnc,cliente_bas.status_t,cliente_bas.telefono, cliente_bas.telefono_casa,cliente_bas.telex,cliente_bas.tipo_negocio, cliente_bas.us_crea,cliente_bas.us_mod,cliente_bas.zona_postal, num_emp,nombre_v,cliente_dir.barrio,cliente_dir.calle,cliente_dir.casa_num, cliente_dir.urbanizacion,cliente_bas.id_ciudad, cliente_bas.url,cliente_bas.codigodgii,corporativo,plimite_cr_grupo, cliente_bas.codigo CALL arr_vend_aux.clear() #BUSCA VENDEDOR AUXILIAR DECLARE busca_vendedor CURSOR FOR SELECT a.idrow,a.sec_vend_aux,RTRIM(b.nom1_emp) ||' '|| b.apell1_emp FROM vetb00059 a,adtb00003 b WHERE a.tipo_cliente = cliente_bas.tipo_cliente AND a.sec_cliente = cliente_bas.sec_cliente AND a.sec_vend_aux = b.num_emp LET idx = 1 FOREACH busca_vendedor INTO arr_vend_aux[idx].* LET idx = idx+1 END FOREACH # BUSCA INFORMACION CALL pinfo.clear() DECLARE busca_informacion CURSOR FOR SELECT a.num_oc,CONVERT(CHAR(10),a.fecha_oc,103),a.cotizacion_no,b.sub_total,a.cerrada FROM prtb00012 a, vetb00050 b WHERE b.cotizacion_no = a.cotizacion_no AND a.tipo_cliente = cliente_bas.tipo_cliente AND a.sec_cliente = cliente_bas.sec_cliente AND a.status_t IS NULL LET idx = 1 FOREACH busca_informacion INTO pinfo[idx].* CALL pinfo.appendElement() IF pinfo[idx].status_ord = 'S' THEN LET pinfo[idx].status_ord = 'CERRADA' END IF IF pinfo[idx].status_ord = ' N' THEN LET pinfo[idx].status_ord = 'ABIERTA' END IF LET idx = idx + 1 END FOREACH END FUNCTION FUNCTION actualiza() SET CONNECTION "MSSQL" LET INT_FLAG = FALSE IF cliente_bas.status_t= "E" THEN LET numero_msg= 36 CALL msg(numero_msg) RETURN END IF # CONTROL VENDEDOR DISPLAY "usuario ",usuarios SELECT a.sec_vend FROM vetb00028 a,seg0007 b WHERE b.usuario = usuarios AND b.sec_vend = a.sec_vend AND a.tipo_cliente = cliente_bas.tipo_cliente AND a.sec_cliente = cliente_bas.sec_cliente AND a.status_t IS NULL IF STATUS = NOTFOUND THEN CALL fgl_winmessage("ERROR","USTED NO LE VENDE A ESTE CLIENTE, DEBE CONSULTAR EL EJECUTIVO ASIGNADO","STOP") RETURN END IF DIALOG ATTRIBUTES(UNBUFFERED,FIELD ORDER FORM) INPUT BY NAME cliente_bas.zona_postal,cliente_bas.num_rnc, cliente_bas.nombre,cliente_bas.limite_credito,cliente_bas.cond_pago, cliente_bas.tipo_negocio,cliente_bas.generica,cliente_bas.codigodgii, cliente_dir.calle,cliente_dir.casa_num, cliente_dir.urbanizacion,cliente_dir.barrio, cliente_bas.codigo, cliente_bas.cod_zona, cliente_bas.cod_provincia, cliente_bas.id_ciudad,cliente_Bas.telefono, cliente_bas.fax,cliente_bas.telex,cliente_bas.nombre_patente,cliente_bas.patente, cliente_bas.telefono_casa, cliente_bas.us_crea,cliente_bas.fech_crea, cliente_bas.us_mod,cliente_bas.fech_mod,num_emp, cliente_bas.url ATTRIBUTES(WITHOUT DEFAULTS) BEFORE FIELD nombre IF cliente_bas.zona_postal = '1' THEN NEXT FIELD cond_pago END IF AFTER FIELD patente IF cliente_bas.patente IS NULL THEN CALL msg(16) NEXT FIELD patente END IF # VERIFICA EMAIL CALL inicializar() LET url_verification =url_verification CLIPPED,cliente_bas.patente CLIPPED CALL apiclient(url_verification) RETURNING estado,codigo_err DISPLAY "ESTADO ",estado," ",url_verification IF codigo_Err =400 THEN CALL msg(1016) NEXT FIELD patente END IF BEFORE FIELD limite_credito SELECT a.nom_puesto INTO role_puesto FROM seg0003 a WHERE a.usuario = usuarios IF role_puesto <> 'ADMINISTRATOR' AND role_puesto <> 'CXC' THEN NEXT FIELD tipo_negocio END IF BEFORE INPUT CALL ctipoNegocio("formonly.tipo_negocio") LET pcondicion = ui.combobox.forname("formonly.cond_pago") CALL ccondicion() CALL paises() # CALL tipo_comprobante() BEFORE FIELD generica SELECT DISTINCT a.generica FROM vetb00004 a WHERE a.generica = "SI" IF STATUS <> NOTFOUND THEN NEXT FIELD codigodgii END IF ON ACTION buscaZona CALL consulta_zonas(cliente_bas.codigo) IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) NEXT FIELD cod_zona END IF IF NOT int_flag THEN LET cliente_bas.cod_zona = zona.cod_zona DISPLAY descrip1 TO descripcion_zona NEXT FIELD cod_provincia END IF LET int_flag = FALSE ON ACTION buscaProvincia LET transportista.cod_zona = cliente_bas.cod_zona CALL consulta_provincias(cliente_bas.cod_zona) IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) NEXT FIELD cod_provincia END IF IF NOT int_flag THEN LET cliente_bas.cod_provincia = zonap.cod_provincia DISPLAY descrip1 TO descripcion_provincia NEXT FIELD telefono END IF ON ACTION buscaEmpleado CALL vend_cli() IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) NEXT FIELD num_emp END IF IF NOT int_flag THEN LET num_emp = cli_vend1[curr].num_emp DISPLAY num_emp,nombre_v END IF LET int_flag = FALSE AFTER FIELD zona_postal SELECT DISTINCT a.tipo_cliente FROM vetb00060 a WHERE a.tipo_cliente = cliente_bas.tipo_cliente AND a.paga_itbis = 'S' IF STATUS <> NOTFOUND THEN IF cliente_bas.zona_postal IS NULL THEN CALL msg(16) NEXT FIELD zona_postal END IF END IF AFTER FIELD num_rnc IF cliente_bas.codigodgii IS NOT NULL AND cliente_bas.generica='NO' THEN IF cliente_bas.num_rnc IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num_rnc END IF IF cliente_bas.zona_postal = '1' THEN IF LENGTH(cliente_bas.num_rnc) <> 9 THEN LET numero_msg = 77 CALL msg(numero_msg) NEXT FIELD num_rnc END IF ELSE IF LENGTH(cliente_bas.num_rnc) <> 11 THEN LET numero_msg = 77 CALL msg(numero_msg) NEXT FIELD num_rnc END IF END IF LET VECES = 0 SELECT COUNT(*) INTO veces FROM vetb00004 a WHERE a.num_rnc = cliente_bas.num_rnc AND a.tipo_cliente = cliente_bas.tipo_cliente and a.status_t is null IF veces > 2 THEN LET numero_msg = 12 CALL msg(numero_msg) NEXT field num_rnc END IF #BUSCA EL RNC EN LA TABLA DE LA DGII IF kitbis = 'S' AND cliente_bas.zona_postal ='1'THEN LET selec = "SELECT a.razon_social,RTRIM(a.calle),' NO.'+RTRIM(a.no_local),a.sector ", "FROM DGII.dbo.empresas a ", "WHERE a.rnc = ? " PREPARE query1 FROM selec EXECUTE query1 USING cliente_bas. num_rnc INTO cliente_bas.nombre,cliente_dir.calle, cliente_dir.casa_num,cliente_dir.urbanizacion IF STATUS = NOTFOUND THEN CALL msg(3) #NEXT FIELD num_rnc END IF DISPLAY BY NAME cliente_bas.nombre END IF END IF AFTER FIELD cod_zona IF cliente_bas.cod_zona is NULL then LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_zona END IF SELECT descrip INTO descrip1 FROM vetb00008 WHERE cod_zona = cliente_bas.cod_zona AND status_t IS NULL IF status = NOTFOUND THEN LET numero_msg = 43 CALL msg(numero_msg) NEXT FIELD cod_zona END IF DISPLAY descrip1 TO descripcion_zona NEXT FIELD cod_provincia AFTER FIELD cod_provincia IF cliente_bas.cod_provincia is NULL then LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_provincia END IF { SELECT b.nombre_provincia, b.status_t INTO descrip1, status_reg FROM vetb00009 a, vetb00020 b WHERE a.cod_zona = cliente_bas.cod_zona AND a.cod_provincia = cliente_bas.cod_provincia AND b.cod_provincia = a.cod_provincia IF status >= 0 THEN IF status != NOTFOUND THEN IF status_reg = "E" THEN LET numero_msg = 66 CALL msg(numero_msg) NEXT FIELD cod_provincia END IF DISPLAY descrip1 TO descripcion_provincia ELSE LET numero_msg = 65 CALL msg(numero_msg) NEXT FIELD cod_zona END IF END IF} CALL ciudad_pais(cliente_bas.cod_provincia) # CALL veprmt102(cliente_bas.tipo_cliente,cliente_bas.sec_cliente) # CALL veprmt106(cliente_bas.tipo_cliente,cliente_bas.sec_cliente) AFTER FIELD num_emp IF num_emp IS NULL OR num_emp = 0 THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num_emp END IF SELECT UNIQUE a.nom1_emp,a.apell1_emp INTO n1,n2 FROM adtb00003 a WHERE (a.status_t IS NULL OR a.status_t = "I") AND (a.num_emp = num_emp) IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD num_emp END IF LET nombre_v = n1 CLIPPED," ",n2 CLIPPED DISPLAY BY NAME nombre_v AFTER INPUT IF cliente_bas.cod_provincia IS NULL OR cliente_bas.cod_provincia = 0 THEN CALL msg(16) NEXT FIELD cod_provincia END IF # BUSCA SI EL CLIENTE PAGA ITBIS LET kitbis = 'N' SELECT a.paga_itbis INTO kitbis FROM vetb00060 a WHERE a.tipo_cliente = cliente_bas.tipo_cliente IF num_emp IS NULL OR num_emp = 0 THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num_emp END IF SELECT UNIQUE a.nom1_emp,a.apell1_emp INTO n1,n2 FROM adtb00003 a WHERE (a.status_t IS NULL OR a.status_t = "I") AND a.num_emp = num_emp IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD num_emp END IF LET nombre_v = n1 CLIPPED," ",n2 CLIPPED DISPLAY BY NAME nombre_v # CONTROL RELACION ZONAS - PROVINCIAS SELECT a.cod_provincia FROM vetb00020 a WHERE a.codigo = cliente_bas.codigo AND a.cod_provincia = cliente_bas.cod_provincia END INPUT # vendedores auxiliares INPUT ARRAY arr_vend_aux FROM s_aux.* ATTRIBUTE(WITHOUT DEFAULTS) BEFORE ROW LET curr = arr_curr() AFTER FIELD sec_vend_aux IF arr_vend_aux[curr].sec_vend_aux IS NOT NULL THEN SELECT RTRIM(a.nom1_emp)||' '||a.apell1_emp INTO arr_vend_aux[curr].nombre_vend_aux FROM adtb00003 a WHERE a.num_emp = arr_vend_aux[curr].sec_vend_aux AND a.status_t IS NULL IF STATUS = NOTFOUND THEN CALL msg(3) NEXT FIELD sec_vend_aux END IF IF arr_vend_aux[curr].sec_vend_aux = num_emp THEN CALL fgl_winmessage("ERROR","NO PUEDE ASIGNAR EJECUTIVO DE ESTE CLIENTE COMO VENDEDOR ADICIONAL","INFO") NEXT FIELD sec_vend_aux END IF END IF ON ACTION busca_auxiliar CALL busca_empleado1() RETURNING p_adtb03.num_emp,p_adtb03.nom1_emp, p_adtb03.nom2_emp, p_adtb03.apell1_emp, p_adtb03.apell2_emp LET arr_vend_aux[curr].sec_vend_aux = p_adtb03.num_emp LET arr_vend_aux[curr].nombre_vend_aux= p_adtb03.nom1_emp clipped,' ', p_adtb03.nom2_emp clipped,' ', p_adtb03.apell1_emp clipped,' ', p_adtb03.apell2_emp clipped END INPUT INPUT ARRAY arrContactos FROM scontactos.* ATTRIBUTES(WITHOUT DEFAULTS) BEFORE INPUT CALL ctipoNegocio("formonly.tipo_negocio_contacto") AFTER FIELD email_contacto IF arrcontactos[arr_curr()].email_contacto IS NOT NULL THEN # VERIFICA EMAIL CALL inicializar() LET url_verification =arrcontactos[arr_curr()].email_contacto CLIPPED CALL apiclient(url_verification) RETURNING estado,codigo_err IF codigo_Err =400 THEN CALL msg(1016) NEXT FIELD email_contacto END IF END IF END INPUT { INPUT ARRAY documentos FROM docu.* ATTRIBUTES(WITHOUT DEFAULTS) BEFORE INPUT DECLARE buscat CURSOR FOR SELECT a.nombre_file, a.ruta, a.arch_tipo, a.tipo FROM vetb00062 a WHERE a.tipo_Cliente=cliente_bas.tipo_cliente AND a.sec_cliente =cliente_bas.sec_cliente LET idx=1 FOREACH buscat INTO documentos[idx].nombre_file,documentos[idx].filedestino, documentos[idx].arch_tipo,documentos[idx].tipo_file LET idx=idx+1 END FOREACH BEFORE ROW # LET documentos[arr_curr()].filedestino =NULL DISPLAY documentos[arr_curr()].filedestino TO foto ON ACTION busca_foto ATTRIBUTE(TEXT="Foto",IMAGE="upload") CALL agregar_archivo(arr_curr()) RETURNING tmp_dirfoto DISPLAY "destino ",tmp_dirfoto LET documentos[arr_curr()].nombre_file = os.Path.basename(tmp_dirfoto) LET documentos[arr_curr()].tipo_file = os.Path.extension(tmp_dirfoto) LET documentos[arr_curr()].filedestino=tmp_dirfoto LOCATE documentos[arr_curr()].data IN MEMORY CALL documentos[arr_curr()].data.readfile(tmp_dirfoto) END INPUT } ON ACTION CANCEL LET INT_FLAG = FALSE CALL msg(2) RETURN ON ACTION guardar ATTRIBUTE(TEXT="Salvar", IMAGE="fa-life-saver") IF cliente_bas.nombre IS NULL THEN CALL msg(16) NEXT FIELD nombre END IF IF num_emp IS NULL OR num_emp = 0 THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num_emp END IF # VERIFICA EL EMAIL CALL inicializar() LET url_verification =cliente_bas.patente CLIPPED DISPLAY "url ",url_verification CALL apiclient(url_verification) RETURNING estado,codigo_err DISPLAY "CODIGO ",codigo_Err IF codigo_Err =400 THEN CALL msg(1016) NEXT FIELD patente END IF # CONTROL RELACION ZONAS - PROVINCIAS SELECT a.cod_provincia FROM vetb00020 a WHERE a.codigo = cliente_bas.codigo AND a.cod_provincia = cliente_bas.cod_provincia IF STATUS = NOTFOUND THEN CALL msg(66) NEXT FIELD codigo END IF # WHENEVER ERROR CONTINUE BEGIN WORK UPDATE vetb00004 SET vetb00004.nombre = cliente_bas.nombre, vetb00004.codigo = cliente_bas.codigo, vetb00004.cod_zona = cliente_bas.cod_zona, vetb00004.cod_provincia = cliente_bas.cod_provincia, vetb00004.id_ciudad = cliente_bas.id_ciudad, vetb00004.telefono = cliente_bas.telefono, vetb00004.fax = cliente_bas.fax, vetb00004.telex = cliente_bas.telex, vetb00004.patente = cliente_bas.patente, # limite_credito = cliente_bas.limite_credito, vetb00004.zona_postal = cliente_bas.zona_postal, vetb00004.num_rnc = cliente_bas.num_rnc, vetb00004.nombre_patente = cliente_bas.nombre_patente, vetb00004.codigodgii = cliente_bas.codigodgii, vetb00004.us_mod = usuarios, vetb00004.fech_mod = GETDATE() , vetb00004.telefono_casa = cliente_Bas.telefono_casa, vetb00004.puesto_laboral = cliente_bas.puesto_laboral, vetb00004.tipo_negocio = cliente_bas.tipo_negocio, vetb00004.cond_pago = cliente_Bas.cond_pago, vetb00004.url = cliente_bas.url, vetb00004.generica = cliente_bas.generica WHERE vetb00004.tipo_cliente = cliente_bas.tipo_cliente AND vetb00004.sec_cliente = cliente_bas.sec_cliente { DELETE FROM vetb00062 WHERE tipo_cliente=cliente_bas.tipo_cliente AND sec_cliente=cliente_bas.sec_cliente FOR idx=1 TO documentos.getLength() INSERT INTO vetb00062 (tipo_cliente, sec_cliente, nombre_file, ruta, arch_tipo, tipo) VALUES(cliente_bas.tipo_cliente,cliente_bas.sec_cliente,documentos[idx].nombre_file,documentos[idx].filedestino, documentos[idx].arch_tipo,documentos[idx].tipo_file) END FOR } IF STATUS < 0 THEN ROLLBACK WORK CALL fgl_winmessage("ERROR","NO PUDE ACTUALIZAR CLIENTE","STOP") END IF SELECT a.nom_puesto INTO role_puesto FROM seg0003 a WHERE a.usuario = usuarios IF role_puesto = 'ADMINISTRATOR' OR role_puesto = 'CXC' THEN UPDATE vetb00004 SET limite_credito = cliente_bas.limite_credito WHERE vetb00004.tipo_cliente = cliente_bas.tipo_cliente AND vetb00004.sec_cliente = cliente_bas.sec_cliente IF STATUS < 0 THEN ROLLBACK WORK CALL fgl_winmessage("ERROR","NO PUDE ACTUALIZAR CLIENTE","STOP") END IF END IF DISPLAY "PASE ACT CLIENTE " SELECT a.tipo_cliente FROM vetb00005 a WHERE a.tipo_cliente = cliente_bas.tipo_cliente AND a.sec_cliente = cliente_bas.sec_cliente IF STATUS <> NOTFOUND THEN UPDATE vetb00005 SET vetb00005.calle = cliente_dir.calle, vetb00005.urbanizacion = cliente_dir.urbanizacion, vetb00005.barrio = cliente_dir.barrio, vetb00005.casa_num = cliente_dir.casa_num, us_mod = usuarios, fech_mod = getdate() WHERE vetb00005.tipo_cliente = cliente_bas.tipo_cliente AND vetb00005.sec_cliente = cliente_bas.sec_cliente IF STATUS < 0 THEN ROLLBACK WORK CALL fgl_winmessage("ERROR","NO PUDE ACTUALIZAR CLIENTE","STOP") END IF ELSE INSERT INTO vetb00005 VALUES (cliente_bas.tipo_cliente, cliente_bas.sec_cliente, cliente_dir.calle, cliente_dir.casa_num, cliente_dir.barrio, cliente_dir.urbanizacion, null, null, usuarios, GETDATE(), null, null) IF STATUS < 0 THEN ROLLBACK WORK EXIT PROGRAM END IF END IF DISPLAY "LLEGUE AL VETB28" SELECT a.sec_cliente FROM vetb00028 a WHERE a.tipo_cliente = cliente_bas.tipo_cliente and a.sec_cliente = cliente_bas.sec_cliente IF STATUS != NOTFOUND THEN DISPLAY "empleado upda ",num_emp UPDATE vetb00028 SET (sec_vend,us_mod,fech_mod) = (num_emp,usuarios,GETDATE()) WHERE tipo_cliente = cliente_bas.tipo_cliente AND sec_cliente = cliente_bas.sec_cliente IF STATUS < 0 THEN ROLLBACK WORK CALL fgl_winmessage("ERROR","NO PUDE ACTUALIZAR CLIENTE","STOP") END IF ELSE DISPLAY "empleado inst ",num_emp INSERT INTO vetb00028 (tipo_cliente,sec_cliente,sec_vend,us_crea,fech_crea) VALUES (cliente_bas.tipo_cliente,cliente_bas.sec_cliente,num_emp,usuarios,GETDATE()) IF STATUS < 0 THEN ROLLBACK WORK CALL fgl_winmessage("ERROR","NO PUDE ACTUALIZAR CLIENTE","STOP") END IF END IF # CONTACTOS LET cuenta_contacto = arr_count() DELETE FROM vetb00087 WHERE tipo_cliente = cliente_bas.tipo_cliente AND sec_cliente = cliente_bas.sec_cliente IF STATUS < 0 THEN ROLLBACK WORK CALL fgl_winmessage("ERROR","NO PUDE ACTUALIZAR CLIENTE","STOP") END IF FOR idx = 1 TO arrcontactos.getLength() IF arrContactos[idx].pcontacto IS NOT NULL THEN IF arrcontactos[idx].email_contacto IS NOT NULL THEN # VERIFICA EMAIL CALL inicializar() LET url_verification =arrcontactos[idx].email_contacto CLIPPED CALL apiclient(url_verification) RETURNING estado,codigo_err IF codigo_Err =400 THEN ROLLBACK WORK CALL msg(1016) NEXT FIELD email_contacto END IF END IF INSERT INTO vetb00087 (tipo_cliente,sec_cliente,contacto,puesto,email,celular, telefono_of,telefono_casa,us_crea,fech_crea,puesto1,tipo_negocio_contacto, email_estado) VALUES (cliente_bas.tipo_cliente,cliente_Bas.sec_cliente, arrContactos[idx].pcontacto,arrContactos[idx].ppuesto, arrContactos[idx].email_contacto,arrContactos[idx].celular, arrContactos[idx].telefono_of,arrContactos[idx].ptelefono_casa, usuarios,getdate(),arrcontactos[idx].ppuesto1,arrcontactos[idx].tipo_negocio_contacto, arrContactos[idx].email_estado) IF STATUS < 0 THEN ROLLBACK WORK CALL fgl_winmessage("ERROR","NO PUDE ACTUALIZAR CLIENTE","STOP") END IF END IF END FOR # Venedor auxiliar DELETE FROM vetb00059 WHERE tipo_cliente = cliente_bas.tipo_cliente AND sec_cliente = cliente_bas.sec_cliente FOR idx = 1 TO arr_vend_aux.getLength() IF arr_Vend_aux[idx].sec_vend_aux IS NOT NULL THEN INSERT INTO vetb00059 (tipo_cliente,sec_cliente,sec_Vend_aux,us_crea,fech_crea) VALUES (cliente_bas.tipo_cliente,cliente_Bas.sec_cliente,arr_vend_aux[idx].sec_vend_aux,usuarios,getdate()) END IF END FOR COMMIT WORK { SET CONNECTION "IFMX" SELECT a.tipo_cliente FROM vetb00004 a WHERE a.tipo_cliente = cliente_bas.tipo_cliente AND a.sec_cliente = cliente_bas.sec_cliente IF STATUS <> NOTFOUND THEN UPDATE vetb00004 SET vetb00004.nombre = cliente_bas.nombre, cod_zona = cliente_bas.cod_zona, cod_provincia = cliente_bas.cod_provincia, telefono = cliente_bas.telefono, fax = cliente_bas.fax, telex = cliente_bas.telex, patente = cliente_bas.patente, limite_credito = cliente_bas.limite_credito, zona_postal = cliente_bas.zona_postal, num_rnc = cliente_bas.num_rnc, nombre_patente = cliente_bas.nombre_patente, us_mod = usuarios, fech_mod = getdate() , codigodgii = cliente_bas.codigodgii WHERE tipo_cliente = cliente_bas.tipo_cliente AND sec_cliente = cliente_bas.sec_cliente ELSE INSERT INTO vetb00004 VALUES (cliente_bas.tipo_cliente,cliente_bas.sec_cliente, cliente_bas.nombre,cliente_bas.cod_zona,cliente_bas.cod_provincia, cliente_bas.telefono,cliente_bas.fax,cliente_bas.telex, cliente_bas.patente,cliente_bas.limite_credito, cliente_bas.zona_postal,cliente_bas.num_rnc, cliente_bas.nombre_patente,NULL,usuarios,getdate(),NULL,NULL,cliente_bas.codigodgii) END IF SELECT a.sec_cliente FROM vetb00028 a WHERE a.tipo_cliente = cliente_bas.tipo_cliente and a.sec_cliente = cliente_bas.sec_cliente IF STATUS != NOTFOUND THEN UPDATE vetb00028 SET (sec_vend,us_mod,fech_mod) = (num_emp,usuarios,getdate()) WHERE tipo_cliente = cliente_bas.tipo_cliente AND sec_cliente = cliente_bas.sec_cliente ELSE INSERT INTO vetb00028 (tipo_cliente,sec_cliente,sec_vend,us_crea,fech_crea) VALUES (cliente_bas.tipo_cliente,cliente_bas.sec_cliente,num_emp,usuarios,getdate()) END IF SELECT a.sec_cliente FROM vetb00005 a WHERE a.tipo_cliente = cliente_bas.tipo_cliente and a.sec_cliente = cliente_bas.sec_cliente IF STATUS != NOTFOUND THEN UPDATE vetb00005 SET calle = cliente_dir.calle, urbanizacion = cliente_dir.urbanizacion, barrio = cliente_dir.barrio, casa_num = cliente_dir.casa_num, us_mod = usuarios, fech_mod = getdate() WHERE tipo_cliente = cliente_bas.tipo_cliente AND sec_cliente = cliente_bas.sec_cliente ELSE INSERT INTO vetb00005 VALUES (cliente_bas.tipo_cliente, cliente_bas.sec_cliente, cliente_dir.calle, cliente_dir.casa_num, cliente_dir.barrio, cliente_dir.urbanizacion, null, null, 'veprmt101', getdate(), null, null) END IF } CLEAR FORM LET numero_msg = 13 CALL msg(numero_msg) RETURN END DIALOG END FUNCTION FUNCTION tipo_comprobante() DEFINE kcodigo char(14), kdescripcion VARCHAR(100), codigodgii ui.ComboBox LET codigodgii = ui.ComboBox.forName("formonly.codigodgii") CALL codigodgii.clear() DECLARE busca_dgii CURSOR FOR SELECT a.codigo_dgii,a.tipo_ncf FROM vetb00071 a WHERE a.disponible = "S" AND a.sucid = 1 AND a.tipo_doc = 'FT' ORDER BY a.codigo_dgii FOREACH busca_dgii INTO kcodigo,kdescripcion LET kcodigo = kcodigo CLIPPED CALL codigodgii.addItem(kcodigo,kdescripcion) END FOREACH END FUNCTION FUNCTION contenido() DEFINE xcuerpo1 STRING LET xcuerpo1 = " " LET xcuerpo1 = xcuerpo1 CLIPPED,"

BIENBENIDO ",cliente_bas.nombre CLIPPED,"

" LET xcuerpo1 = xcuerpo1 CLIPPED, "

Es un placer para nosotros poder contar con la confianza que usted deposita en nuestra empresa

" LET xcuerpo1 = xcuerpo1 CLIPPED,"

El ejecutivo que lo atiende es ",nombre_v CLIPPED,"

" LET xcuerpo1 = xcuerpo1 CLIPPED,"

Puede contactarlo a los telefonos: (809)-227-1322 En Santo Domingo o a su numero celular: ", telefono_Vend CLIPPED," Asi como tambien a su correo electronico ",email_vend CLIPPED, "
ProductosUnidades cantidad" LET xcuerpo1 = xcuerpo1 CLIPPED,"
" RETURN xcuerpo1 END FUNCTION FUNCTION inicializar() LET url_verification =NULL #'https://api.apilayer.com/email_verification/' END FUNCTION FUNCTION agregar_archivo(i) DEFINE filepath STRING DEFINE tmpfile STRING DEFINE i INTEGER DEFINE tmp_destino,nombre_foto string LET filepath= NULL CALL ui.Interface.frontCall( "standard","openfile", [NULL,"Images","*.jpg *.png *.gif *.pdf","Seleccione archivo"], [filepath] ) {IF filepath IS NULL THEN RETURN END IF} LET nombre_foto =cliente_bas.tipo_cliente USING "<<<<<<<<","-",cliente_bas.sec_cliente USING "<<<<<<<<","-",i USING "<<<<" LET tmpfile = FGL_GETENV("TEMP"),"\\",nombre_foto CLIPPED,".jpg" LET tmp_destino=fgl_getenv("IMAGENES"),"\\clientes\\",nombre_foto CLIPPED,".",os.Path.extension(filepath) DISPLAY "tmp file",tmpfile DISPLAY "nombre ",nombre_foto -- Copia local FE ? FE CALL fgl_getfile(filepath, tmp_destino) RETURN tmp_destino END FUNCTION