{ ---------------------------------------------------------------------------- PROGRAMA : VEFUMT001 OBJETIVO : Esta Funcion Convierte Los Valores En numeros a letras PROGRAMADOR : Ing. Juan Fco. Soto. FECHA : Enero 22, 1993. ---------------------------------------------------------------------------- } GLOBALS "veprgb000.4gl" DEFINE fecha_ant DATE {FUNCTION convierte() DEFINE consegui CHAR(1) DEFINE p,miles,m,k,a,b,d,c,entero,unidades_mi,unidades_m,unidad,mil,millon, unid_c,u INTEGER DEFINE cheles DECIMAL (7,2) CALL letras() LET consegui = "N" LET entero = valor_orig LET cheles = (valor_orig - entero) * 100 LET unidad = entero / 100 LET unidad = entero - (unidad * 100) LET a = entero / 1000 LET a = entero - (a * 1000) LET d = entero - 19 IF d >= 82 THEN LET c = entero / 100 # Para Controlar los miles y los cientos IF c <= 9 THEN LET valor_letras = valor_letras clipped," ",centenas[c] clipped ELSE LET c = entero / 1000 LET b = entero / 1000000 END IF IF d > 19 THEN LET d = unidad - 19 END IF IF unidad > 0 and unidad < 20 THEN LET d = unidad LET valor_letras = valor_letras clipped," ",unidades1[d] clipped LET consegui = "S" END IF ELSE IF d > 0 AND d <= 81 THEN LET valor_letras = valor_letras clipped," ",decenas[d] clipped LET consegui = "S" END IF END IF # Para controlar los miles IF entero > 999 THEN LET unidades_m = a / 100 LET unidades_m = a - (unidades_m * 100) LET valor_letras = null IF c = 1 THEN LET valor_letras = "MIL" END IF IF c > 1 and c <= 19 THEN LET valor_letras = valor_letras clipped," ",unidades1[c] clipped," ","MIL" END IF IF c >= 20 and c <= 999 THEN IF c < 82 THEN LET c = c - 19 LET valor_letras = valor_letras clipped," ",decenas[c] clipped ELSE LET k = c / 100 LET valor_letras = valor_letras clipped," ",centenas[k] clipped LET unid_c = c - (k * 100) IF unid_c >= 20 THEN LET unid_c = unid_c - 19 LET valor_letras = valor_letras clipped," ",decenas[unid_c] clipped END IF END IF LET valor_letras = valor_letras clipped," ","MIL" END IF LET c = a IF c > 100 THEN LET c = c / 100 LET valor_letras = valor_letras clipped," ",centenas[c] clipped END IF IF unidades_m > 0 and unidades_m < 19 THEN LET a = unidades_m LET valor_letras = valor_letras clipped, " ",unidades1[a] clipped END IF END IF # Para Controlar cantidades en millones IF entero > 999999 THEN LET c = 0 LET miles = entero - 1000000 LET m = miles / 1000 LET p = miles - (m * 1000) LET u = m / 100 LET u = m - (u * 100) LET unidades_mi = p LET unidades_mi = unidades_mi / 100 LET unidades_mi = p - (unidades_mi * 100) LET valor_letras = null IF b = 1 THEN LET valor_letras = "UN MILLON" END IF IF b > 1 and b <= 19 THEN LET valor_letras = valor_letras clipped," ",unidades1[b] clipped," ", "MILLONES" END IF IF b >= 20 and b <= 999999 THEN IF b < 82 THEN LET b = b - 19 LET valor_letras = valor_letras clipped," ",decenas[b] clipped," ", "MILLONES" ELSE LET k = b / 100 LET valor_letras = valor_letras clipped," ",centenas[k] clipped," ", "MILLONES" END IF END IF LET b = m IF b > 100 THEN LET b = b / 100 LET valor_letras = valor_letras clipped," ",centenas[b] clipped IF u > 0 and u <= 19 THEN IF u = 1 THEN LET unidades1[1] = "UN" END IF LET valor_letras = valor_letras clipped," ",unidades1[u] clipped END IF LET valor_letras = valor_letras clipped," ","MIL" END IF IF p > 100 THEN LET p = p / 100 LET valor_letras = valor_letras clipped," ",centenas[p] clipped END IF IF unidades_mi > 0 and unidades_mi < 19 THEN LET m = unidades_mi LET valor_letras = valor_letras clipped, " ",unidades1[m] clipped END IF END IF IF unidad > 0 and unidad < 20 AND consegui = "N" THEN LET d = unidad LET valor_letras = valor_letras clipped," ",unidades1[d] clipped END IF IF unidad >= 20 AND d <= 81 AND consegui = "N" THEN LET valor_letras = valor_letras clipped," ",decenas[d] clipped END IF LET valor_letras = valor_letras clipped," ","PESOS" LET valor_letras = valor_letras clipped," ","CON"," ",cheles using "&&", "/100" END FUNCTION } {FUNCTION letras() LET unidades1[1] = "UNO" LET unidades1[2] = "DOS" LET unidades1[3] = "TRES" LET unidades1[4] = "CUATRO" LET unidades1[5] = "CINCO" LET unidades1[6] = "SEIS" LET unidades1[7] = "SIETE" LET unidades1[8] = "OCHO" LET unidades1[9] = "NUEVE" LET unidades1[10] = "DIEZ" LET unidades1[11] = "ONCE" LET unidades1[12] = "DOCE" LET unidades1[13] = "TRECE" LET unidades1[14] = "CATORCE" LET unidades1[15] = "QUINCE" LET unidades1[16] = "DIESISEIS" LET unidades1[17] = "DIESISIETE" LET unidades1[18] = "DIESIOCHO" LET unidades1[19] = "DIESINUEVE" LET decenas[1] = "VEINTE" LET decenas[2] = "VEINTE Y UNO" LET decenas[3] = "VEINTE Y DOS" LET decenas[4] = "VEINTE Y TRES" LET decenas[5] = "VEINTE Y CUATRO" LET decenas[6] = "VEINTE Y CINCO" LET decenas[7] = "VEINTE Y SEIS" LET decenas[8] = "VEINTE Y SIETE" LET decenas[9] = "VEINTE Y OCHO" LET decenas[10] = "VEINTE Y NUEVE" LET decenas[11] = "TREINTA" LET decenas[12] = "TREINTA Y UNO" LET decenas[13] = "TREINTA Y DOS" LET decenas[14] = "TREINTA Y TRES" LET decenas[15] = "TREINTA Y CUATRO" LET decenas[16] = "TREINTA Y CINCO" LET decenas[17] = "TREINTA Y SEIS" LET decenas[18] = "TREINTA Y SIETE" LET decenas[19] = "TREINTA Y OCHO" LET decenas[20] = "TREINTA Y NUEVE" LET decenas[21] = "CUARENTA" LET decenas[22] = "CUARENTA Y UNO" LET decenas[23] = "CUARENTA Y DOS" LET decenas[24] = "CUARENTA Y TRES" LET decenas[25] = "CUARENTA Y CUATRO" LET decenas[26] = "CUARENTA Y CINCO" LET decenas[27] = "CUARENTA Y SEIS" LET decenas[28] = "CUARENTA Y SIETE" LET decenas[29] = "CUARENTA Y OCHO" LET decenas[30] = "CUARENTA Y NUEVE" LET decenas[31] = "CINCUENTA" LET decenas[32] = "CINCUENTA Y UNO" LET decenas[33] = "CINCUENTA Y DOS" LET decenas[34] = "CINCUENTA Y TRES" LET decenas[35] = "CINCUENTA Y CUATRO" LET decenas[36] = "CINCUENTA Y CINCO" LET decenas[37] = "CINCUENTA Y SEIS" LET decenas[38] = "CINCUENTA Y SIETE" LET decenas[39] = "CINCUENTA Y OCHO" LET decenas[40] = "CINCUENTA Y NUEVE" LET decenas[41] = "SESENTA" LET decenas[42] = "SESENTA Y UNO" LET decenas[43] = "SESENTA Y DOS" LET decenas[44] = "SESENTA Y TRES" LET decenas[45] = "SESENTA Y CUATRO" LET decenas[46] = "SESENTA Y CINCO" LET decenas[47] = "SESENTA Y SEIS" LET decenas[48] = "SESENTA Y SIETE" LET decenas[49] = "SESENTA Y OCHO" LET decenas[50] = "SESENTA Y NUEVE" LET decenas[51] = "SETENTA" LET decenas[52] = "SETENTA Y UNO" LET decenas[53] = "SETENTA Y DOS" LET decenas[54] = "SETENTA Y TRES" LET decenas[55] = "SETENTA Y CUATRO" LET decenas[56] = "SETENTA Y CINCO" LET decenas[57] = "SETENTA Y SEIS" LET decenas[58] = "SETENTA Y SIETE" LET decenas[59] = "SETENTA Y OCHO" LET decenas[60] = "SETENTA Y NUEVE" LET decenas[61] = "OCHENTA" LET decenas[62] = "OCHENTA Y UNO" LET decenas[63] = "OCHENTA Y DOS" LET decenas[64] = "OCHENTA Y TRES" LET decenas[65] = "OCHENTA Y CUATRO" LET decenas[66] = "OCHENTA Y CINCO" LET decenas[67] = "OCHENTA Y SEIS" LET decenas[68] = "OCHENTA Y SIETE" LET decenas[69] = "OCHENTA Y OCHO" LET decenas[70] = "OCHENTA Y NUEVE" LET decenas[71] = "NOVENTA" LET decenas[72] = "NOVENTA Y UNO" LET decenas[73] = "NOVENTA Y DOS" LET decenas[74] = "NOVENTA Y TRES" LET decenas[75] = "NOVENTA Y CUATRO" LET decenas[76] = "NOVENTA Y CINCO" LET decenas[77] = "NOVENTA Y SEIS" LET decenas[78] = "NOVENTA Y SIETE" LET decenas[79] = "NOVENTA Y OCHO" LET decenas[80] = "NOVENTA Y NUEVE" LET decenas[81] = "CIEN" LET centenas[1] = "CIENTO" LET centenas[2] = "DOCIENTOS" LET centenas[3] = "TRESCIENTOS" LET centenas[4] = "CUATROCIENTOS" LET centenas[5] = "QUINIENTOS" LET centenas[6] = "SEISCIENTOS" LET centenas[7] = "SETECIENTOS" LET centenas[8] = "OCHOCIENTOS" LET centenas[9] = "NOVECIENTOS" END FUNCTION FUNCTION busca_zona1() OPEN WINDOW busqueda AT 10,10 WITH FORM "vefmwd301" ATTRIBUTE (BORDER,FORM LINE FIRST + 1, comment line last) CONSTRUCT criterio ON vetb00008.cod_zona,vetb00008.descrip FROM vetb00008.cod_zona,vetb00008.descrip IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF LET selec = "SELECT cod_zona,descrip FROM vetb00008 ", "WHERE status_t is null AND ",criterio clipped, " ORDER BY 1 " PREPARE localiza FROM selec DECLARE pagar CURSOR FOR localiza LET idx = 1 FOREACH pagar INTO zona1_wd[idx].* IF status = NOTFOUND THEN LET existe = "N" EXIT FOREACH END IF LET idx = idx + 1 END FOREACH CALL set_count(idx-1) DISPLAY ARRAY zona1_wd TO consart.* LET curr1 = arr_curr() LET fact_gral.zona = zona1_wd[curr1].cod_zona using "&&&" LET nombre = zona1_wd[curr1].descrip LET descrip1 = nombre CLOSE WINDOW busqueda END FUNCTION FUNCTION busca_pais() OPEN WINDOW busqueda1 AT 10,10 WITH FORM "vefmwd311" ATTRIBUTE (BORDER,FORM LINE FIRST + 1, comment line last) CONSTRUCT criterio ON cotb00018.cod_pais,cotb00018.nom_pais FROM cotb00018.cod_pais,cotb00018.nom_pais IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF LET selec = "SELECT cod_pais,nom_pais FROM cotb00018 ", "WHERE status_t is null AND ",criterio clipped, "ORDER BY 1 " PREPARE localiza1 FROM selec DECLARE country CURSOR FOR localiza1 LET idx = 1 FOREACH country INTO pais_wd[idx].* IF status = NOTFOUND THEN LET existe = "N" EXIT FOREACH END IF LET idx = idx + 1 END FOREACH CALL set_count(idx-1) DISPLAY ARRAY pais_wd TO consart.* LET curr1 = arr_curr() LET fact_gral.zona = pais_wd[curr1].cod_pais LET nombre = pais_wd[curr1].nom_pais LET descrip1 = nombre CLOSE WINDOW busqueda1 END FUNCTION FUNCTION repetir() DEFINE ant_art RECORD ventas CHAR(1), cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, mes SMALLINT END RECORD LET ant_art.ventas = pres_venta[curr].ventas LET ant_art.cod_n = pres_venta[curr].cod_n LET ant_art.cod_grupo = pres_venta[curr].cod_grupo LET ant_art.cod_tipo = pres_venta[curr].cod_tipo LET ant_art.cod_sec = pres_venta[curr].cod_sec LET ant_art.mes = pres_venta[curr].mes FOR idx = 1 TO arr_count() IF idx != curr THEN IF pres_venta[idx].ventas IS NOT NULL AND pres_venta[idx].cod_n IS NOT NULL AND pres_venta[idx].cod_grupo IS NOT NULL AND pres_venta[idx].cod_tipo IS NOT NULL AND pres_venta[idx].cod_sec IS NOT NULL AND pres_venta[idx].mes IS NOT NULL THEN IF pres_venta[idx].ventas = ant_art.ventas AND pres_venta[idx].cod_n = ant_art.cod_n AND pres_venta[idx].cod_grupo = ant_art.cod_grupo AND pres_venta[idx].cod_tipo = ant_art.cod_tipo AND pres_venta[idx].cod_sec = ant_art.cod_sec AND pres_venta[idx].mes = ant_art.mes THEN LET numero_msg = 21 CALL msg(numero_msg) LET verdad = "S" ELSE IF verdad != "S" THEN LET verdad = "N" END IF END IF END IF END IF END FOR END FUNCTION FUNCTION parciales(factura,fecha,dias,total_factura) DEFINE dias,factura INTEGER, diferencia,v_parcial,total_factura DECIMAL(12,2), fecha DATE, pdias SMALLINT, ch_parcial CHAR(12) OPEN WINDOW parcial AT 10,7 WITH FORM "vefmwd016" ATTRIBUTE (BORDER,COMMENT LINE LAST,FORM LINE FIRST + 1) LET veces = dias / 30 LET v_parcial = total_factura / veces LET fecha_ant = fecha FOR idx = 1 TO veces LET parte[idx].valor = v_parcial SELECT a.dias_prod INTO pdias FROM mestable a WHERE a.mes = MONTH(fecha_ant) LET fecha_ant = fecha_ant + pdias LET parte[idx].fecha_ven = fecha_ant END FOR LET total_valor = 0 LET diferencia = 0 FOR idx = 1 TO veces IF parte[idx].valor IS NOT NULL THEN LET total_valor = total_valor + parte[idx].valor END IF END FOR LET diferencia = total_factura - total_valor IF diferencia != 0 THEN LET parte[veces].valor = v_parcial + diferencia END IF LABEL otra: CALL set_count(veces) INPUT ARRAY parte WITHOUT DEFAULTS FROM s_parte.* IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) GOTO salir END IF LET total_valor = 0 FOR idx = 1 TO arr_count() IF parte[idx].valor IS NOT NULL THEN LET total_valor = total_valor + parte[idx].valor END IF END FOR IF total_valor != total_factura THEN LET numero_msg = 213 CALL msg(numero_msg) GOTO otra END IF FOR idx = 1 TO arr_count() IF parte[idx].valor IS NOT NULL THEN INSERT INTO vetbparcial VALUES (factura,parte[idx].valor,parte[idx].fecha_ven) LET ch_parcial = fact_gral.factura using "&&&&&&","-",idx using "&&", "/",veces using "&&" INSERT INTO cctb00001 VALUES (NULL,fact_gral.cod_cia,"FT",ch_parcial,fact_gral.tipo_cliente, fact_gral.sec_cliente,NULL,fact_gral.sec_vend, fact_gral.fecha_factura,parte[idx].fecha_ven,ch_parcial, NULL,NULL, parte[idx].valor,NULL,NULL,0,0, NULL, USER,CURRENT, NULL, NULL) END IF END FOR LABEL salir: CLOSE WINDOW parcial END FUNCTION } FUNCTION busca_pt() OPEN WINDOW busqueda AT 7,12 WITH FORM "vefmwd003" ATTRIBUTE (BORDER,FORM LINE FIRST + 2,COMMENT LINE LAST,MESSAGE LINE LAST) LET int_flag = false CONSTRUCT criterio ON a.descrip_esp FROM descrip_esp LET selec2 = "SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp", " FROM intb00001 a,iptb00002 b ", " WHERE ", "a.cod_n = b.cod_n and ", "a.cod_grupo = b.cod_grupo and ", "a.cod_tipo = b.cod_tipo and ", "a.cod_sec = b.cod_sec and ", "a.status_t is null AND ", criterio clipped, "ORDER BY 5 " IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) GO TO sale9 END IF PREPARE busca_pila FROM selec2 IF status >= 0 THEN IF status = notfound THEN LET numero_msg = 12 CALL msg(numero_msg) END IF END IF DECLARE buscar_pila CURSOR FOR busca_pila LET idx = 1 FOREACH buscar_pila INTO pilas[idx].* IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) EXIT FOREACH END IF LET idx = idx + 1 END FOREACH CALL set_count(idx-1) MESSAGE " Selecciona Producto Terminado donde esta el cursor" DISPLAY ARRAY pilas TO s_pilas.* LET curr1 = arr_curr() LET pterminado.cod_n = pilas[curr1].cod_n LET pterminado.cod_grupo = pilas[curr1].cod_grupo LET pterminado.cod_tipo = pilas[curr1].cod_tipo LET pterminado.cod_sec = pilas[curr1].cod_sec LET descuento.cod_n = pilas[curr1].cod_n LET descuento.cod_grupo = pilas[curr1].cod_grupo LET descuento.cod_tipo = pilas[curr1].cod_tipo LET descuento.cod_sec = pilas[curr1].cod_sec LET descrip1 = pilas[curr1].descrip_esp LABEL sale9: CLOSE WINDOW busqueda END FUNCTION FUNCTION consulta_zonas() OPEN WINDOW busqueda AT 7,12 WITH FORM "vefmwd071" ATTRIBUTE (BORDER,FORM LINE FIRST + 2,COMMENT LINE LAST,MESSAGE LINE LAST) LET int_flag = false CONSTRUCT criterio ON a.descrip FROM descrip LET selec2 = "SELECT a.cod_zona, a.descrip ", "FROM vetb00008 a ", "WHERE 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_z END IF PREPARE busca_zonas FROM selec2 IF status >= 0 THEN IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) END IF END IF DECLARE buscar_zonas CURSOR FOR busca_zonas LET idx = 1 FOREACH buscar_zonas INTO zonas[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 Zona donde esta el cursor" DISPLAY ARRAY zonas TO s_zonas.* LET curr1 = arr_curr() LET zona.cod_zona = zonas[curr1].cod_zona LET transportista.cod_zona = zonas[curr1].cod_zona LET descrip1 = zonas[curr1].descrip LABEL salir_consulta_z: CLOSE WINDOW busqueda END FUNCTION FUNCTION consulta_provincias() OPEN WINDOW busqueda AT 7,12 WITH FORM "vefmwd072" ATTRIBUTE (BORDER,FORM LINE FIRST + 2,COMMENT LINE LAST,MESSAGE LINE LAST) LET int_flag = false CONSTRUCT criterio ON b.nombre_provincia FROM nombre_provincia IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) GO TO salir_consulta_p END IF LET selec2 = "SELECT b.cod_provincia, b.nombre_provincia ", "FROM vetb00009 a, vetb00020 b ", "WHERE a.cod_zona=? AND a.cod_provincia=b.cod_provincia AND ", " a.status_t is null AND b.status_t is null AND ", criterio clipped," ORDER BY 1" PREPARE buscar FROM selec2 DECLARE buscar_provincias CURSOR FOR buscar OPEN buscar_provincias USING transportista.cod_zona IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) GO TO salir_consulta_p END IF IF status >= 0 THEN IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) END IF END IF LET idx = 1 WHILE status != NOTFOUND FETCH buscar_provincias INTO provincias[idx].* IF status = NOTFOUND THEN EXIT WHILE END IF IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) EXIT WHILE END IF LET idx = idx + 1 END WHILE CALL set_count(idx-1) MESSAGE " Selecciona Provincia donde esta el cursor" DISPLAY ARRAY provincias TO s_provincias.* LET curr1 = arr_curr() LET zonap.cod_provincia = provincias[curr1].cod_provincia LET transportista.cod_provincia = provincias[curr1].cod_provincia LET descrip1 = provincias[curr1].nombre_provincia LABEL salir_consulta_p: CLOSE WINDOW busqueda END FUNCTION FUNCTION ayuda() MESSAGE "HACER AYUDA" END FUNCTION FUNCTION busca_nombre_zona() SELECT descrip, status_t INTO descrip1, status_reg FROM vetb00008 WHERE cod_zona = transportista.cod_zona IF status >= 0 THEN IF status != NOTFOUND THEN IF status_reg = "E" THEN LET numero_msg = 43 CALL msg(numero_msg) RETURN END IF DISPLAY descrip1 TO descripcion_zona ELSE LET numero_msg = 42 CALL msg(numero_msg) RETURN END IF END IF END FUNCTION FUNCTION busca_provincia() SELECT a.nombre_provincia, b.status_t INTO descrip1, status_reg FROM vetb00020 a, vetb00009 b WHERE b.cod_zona = transportista.cod_zona AND b.cod_provincia = transportista.cod_provincia AND b.cod_provincia = a.cod_provincia AND b.status_t is null IF status >= 0 THEN IF status != NOTFOUND THEN IF status_reg = "E" THEN LET numero_msg = 66 CALL msg(numero_msg) RETURN END IF DISPLAY descrip1 TO descripcion_provincia ELSE LET numero_msg = 65 CALL msg(numero_msg) RETURN END IF END IF END FUNCTION FUNCTION cventas() DEFINE kventas SMALLINT, dventas CHAR(30) LET pventas = ui.combobox.forname("formonly.ventas") DECLARE bventas CURSOR FOR SELECT a.ventas,a.descripcion FROM vetb00061 a CALL pventas.clear() FOREACH bventas INTO kventas,dventas CALL pventas.additem(kventas,dventas) END FOREACH END FUNCTION