Deseo un código para un programa de facturación que permita pasar números en dígitos a texto
Saludos Expertos, Alguno de Uds. Tiene código PL/SQL que te permita convertir números a letras ... Estoy haciendo el reporte de una factura y necesito mostrar el NETO A PAGAR tanto en números como en letras. Gr@ci@s de @ntem@no !
1 respuesta
Respuesta de lriverac
1
1
lriverac, DBA Oracle Desarrollo aplicaciones en Developer y Reports
Espero que te sirva es un procedimiento de base de datos CREATE OR REPLACE FUNCTION Letras (cia in varchar2, cta in varchar2, numero In NUMBER) RETURN CHAR IS /* RESULTADO: Retorna numero en letras con la moneda de una cuenta de una compa?ia. */ /* variables de la funcion letras */ temp NUMBER; va_descmon varchar2(20); va_moneda varchar2(2); FUNCTION nombre_decenas (digito IN NUMBER) RETURN CHAR IS BEGIN if digito = 1 then return('DIECI'); elsif digito = 2 then return('VEINTI'); elsif digito = 3 then return('TREINTA'); elsif digito = 4 then return('CUARENTA'); elsif digito = 5 then return('CINCUENTA'); elsif digito = 6 then return('SESENTA'); elsif digito = 7 then return('SETENTA'); elsif digito = 8 then return('OCHENTA'); elsif digito = 9 then return('NOVENTA'); elsif digito = 0 then return('CERO'); else return(''); end if; END; FUNCTION Unidades (unidad IN NUMBER) RETURN CHAR IS -- Convierte los numero desde 0 hasta 9 a letras BEGIN if unidad = 1 then return('UNO'); elsif unidad = 2 then return('DOS'); elsif unidad = 3 then return('TRES'); elsif unidad = 4 then return('CUATRO'); elsif unidad = 5 then return('CINCO'); elsif unidad = 6 then return('SEIS'); elsif unidad = 7 then return('SIETE'); elsif unidad = 8 then return('OCHO'); elsif unidad = 9 then return('NUEVE'); elsif unidad = 0 then return('CERO'); else return(''); end if; END; FUNCTION decenas (decena IN NUMBER) RETURN CHAR IS -- Convierte numeros de dos digitos a letras numero varchar2(2); digitos number; digito1 number; digito2 number; BEGIN numero := to_char(decena); digitos := length(numero); if digitos = 1 then -- Si tiene solo un digito entoces devuelve unidades return unidades(decena); elsif digitos = 2 then -- Esto es en el caso de dos digitos if decena = 10 then -- Estos son casos especiales del 10 a 15 return('DIEZ'); elsif decena = 11 then return('ONCE'); elsif decena = 12 then return('DOCE'); elsif decena = 13 then return('TRECE'); elsif decena = 14 then return('CATORCE'); elsif decena = 15 then return('QUINCE'); elsif decena = 20 then return('VEINTE'); else digito1 := to_number(substr(numero,1,1)); digito2 := to_number(substr(numero,2,1)); if digito1 = 1 then -- Estos los casos de 16 al 19 return('DIECI'||unidades(digito2)); elsif digito1 = 2 then -- Estos son los casos del 21 al 29 return('VEINTI'||unidades(digito2)); else -- El resto de los casos if digito2 = 0 then return(nombre_decenas(digito1)); else return(nombre_decenas(digito1)||' y '||unidades(digito2)); end if; end if; end if; else return(''); end if; END; FUNCTION cientos (cien IN NUMBER) RETURN CHAR IS -- convierte numeros de tres o menos digitos as letras numero varchar2(3); digitos number; digito1 number; digito23 number; BEGIN numero := to_char(cien); digitos := length(numero); if digitos <= 2 then -- En el caso de que el numero sea de uno return(decenas(cien)); -- o dos digitos elsif digitos = 3 then -- En el caso de que sean tres digitos digito1 := to_number(substr(numero,1,1)); digito23 := to_number(substr(numero,2,2)); if digito1 = 1 then -- El caso del cien if digito23 = 0 then return('CIEN'); else return('CIENTO '||decenas(digito23)); end if; elsif digito1 = 5 then -- El caso de los quinientos if digito23 = 0 then return('QUINIENTOS'); else return('QUINIENTOS '||decenas(digito23)); end if; elsif digito1 = 9 then -- El caso de los novecientos