HugoEspinosa

Función para convertir el importe de valor numérico a texto ej. 132 >> Ciento treinta y dos

Discussion created by HugoEspinosa on Aug 12, 2014
Latest reply on Oct 17, 2014 by Alquimista

/*   

 

       Función de Conversión de ImporteEnNúmero en ImporteEnLetra

       Por: Hugo Espinosa Mireles Zesati

       Septiembre 2007  ( probado hasta en FM13 )

        Esto para evitar el cargar una base de datos que me mostraron como con + 1,000,000 de registros y su campo de texto para cada valor

       Esta función está a un estilo "OLD SCHOOL" pero funciona y es muy fácil adaptarla a tu pais y tu idioma

       Se aceptan comentarios para mejorar

 

 

    */

 

 

Let ( [

           moneda = "pesos ";

           sufijo = "/100 m.n." ;

           signo_L = If( ImporteEnNúmero  < 0 ; "Menos " ; "" );

           ImporteEnNúmero = Abs ( ImporteEnNúmero );

           dec = Round((ImporteEnNúmero - Int(ImporteEnNúmero))*100;2)  ;

           U = Int(ImporteEnNúmero) - Truncate(ImporteEnNúmero ; -1) ;

           D = (Truncate(ImporteEnNúmero;-1) - Truncate(ImporteEnNúmero;-2)) / 10 ;

           C = (Truncate(ImporteEnNúmero;-2) - Truncate(ImporteEnNúmero;-3)) / 100 ;

           M = (Truncate(ImporteEnNúmero;-3) - Truncate(ImporteEnNúmero;-4)) / 1000 ;

           DM = (Truncate(ImporteEnNúmero;-4) - Truncate(ImporteEnNúmero;-5)) / 10000 ;

           CM = (Truncate(ImporteEnNúmero;-5) - Truncate(ImporteEnNúmero;-6)) / 100000 ;

           MMU = (Truncate(ImporteEnNúmero;-6) - Truncate(ImporteEnNúmero;-7)) / 1000000 ;

           MMD = (Truncate(ImporteEnNúmero;-7) - Truncate(ImporteEnNúmero;-8)) / 10000000 ; 

           MMC = (Truncate(ImporteEnNúmero;-8) - Truncate(ImporteEnNúmero;-9)) / 100000000 ; 

 

 

           moneda = If ( ImporteEnNúmero  ≥ 1 and ImporteEnNúmero  <  2 ;"peso " ; moneda ) ;

 

 

/* ----    Unidades    ------------------------------------------------------------------------------------------------------------------------------------------------------- */

 

 

           UL = Choose(U;"";"un ";"dos ";"tres ";"cuatro ";"cinco ";"seis ";"siete ";"ocho ";"nueve ");

 

 

           UL = If ( ImporteEnNúmero   <  1 ; "cero " ; UL );     /*  preprara Unidades para el valor de CERO   */

           UL = If ( D = 1 and U = 1 ;"" ; UL ) ;                          /*  preprara Unidades para el valor de ONCE   */

           UL = If ( D = 1 and U = 2 ;"" ; UL ) ;                          /*  preprara Unidades para el valor de DOCE   */

           UL = If ( D = 1 and U = 3 ;"" ; UL ) ;                          /*  preprara Unidades para el valor de TRECE   */

           UL = If ( D = 1 and U = 4 ;"" ; UL ) ;                          /*  preprara Unidades para el valor de CATORCE   */

           UL = If ( D = 1 and U = 5 ;"" ; UL ) ;                          /*  preprara Unidades para el valor de QUINCE   */

 

 

           DL = Choose(D;"";"dieci";"veinti";"treinta ";"cuarenta ";"cincuenta ";"sesenta ";"setenta ";"ochenta ";"noventa ") ;

 

 

           DL = If ( D = 1 and U = 0 ; "diez ";DL);

           DL = If ( D = 1 and U = 1 ; "once ";DL);

           DL = If ( D = 1 and U = 2 ; "doce ";DL);

           DL = If ( D = 1 and U = 3 ; "trece ";DL);

           DL = If ( D = 1 and U = 4 ; "catorce ";DL);

           DL = If ( D = 1 and U = 5 ; "quince ";DL);

 

 

           DL = If ( D = 2 and U = 0 ; "veinte ";DL);

           DL = If ( D  ≥ 3 and U  ≥ 1 ; DL & "y " ;DL);

 

 

           CL = Choose(C;"";"ciento ";"doscientos ";"trescientos ";"cuatrocientos ";"quinientos ";"seiscientos ";"setecientos ";"ochocientos ";"novecientos ");

 

 

           CL = If( C = 1 and D = 0 and U = 0 ; "cien " ; CL ) ;

 

 

/* ----    miles    ------------------------------------------------------------------------------------------------------------------------------------------------------- */

 

 

           ML = Choose(M;"";"un ";"dos ";"tres ";"cuatro ";"cinco ";"seis ";"siete ";"ocho ";"nueve ");

 

 

           ML = If ( DM = 1 and M = 1 ;"" ; ML ) ;               /*  Valor de ONCE   */

           ML = If ( DM = 1 and M = 2 ;"" ; ML ) ;               /*  Valor de DOCE   */

           ML = If ( DM = 1 and M = 3 ;"" ; ML ) ;               /*  Valor de TRECE   */

           ML = If ( DM = 1 and M = 4 ;"" ; ML ) ;               /*  Valor de CATORCE   */

           ML = If ( DM = 1 and M = 5 ;"" ; ML ) ;               /*  Valor de QUINCE   */

 

 

           coMa = If ( C ≥ 1 or D  ≥ 1 or U ≥ 1 ; ", " ; " " ) ;

           ML = If ( M  ≥ 1 or DM  ≥ 1 or CM  ≥ 1; ML & "mil" & coMa ; ML );

 

 

 

 

           DML = Choose(DM;"";"dieci";"veinti";"treinta ";"cuarenta ";"cincuenta ";"sesenta ";"setenta ";"ochenta ";"noventa ") ;

 

 

           DML = If ( DM = 1 and M = 0 ; "diez ";DML);

           DML = If ( DM = 1 and M = 1 ; "once ";DML);

           DML = If ( DM = 1 and M = 2 ; "doce ";DML);

           DML = If ( DM = 1 and M = 3 ; "trece ";DML);

           DML = If ( DM = 1 and M = 4 ; "catorce ";DML);

           DML = If ( DM = 1 and M = 5 ; "quince ";DML);

           DML = If ( DM = 2 and M = 0 ; "veinte ";DML);

 

 

           DML = If ( DM  ≥ 3 and M  ≥ 1 ; DML & "y " ;DML);

 

 

           CML = Choose(CM;"";"ciento ";"doscientos ";"trescientos ";"cuatrocientos ";"quinientos ";"seiscientos ";"setecientos ";"ochocientos ";"novecientos ");

 

 

           CML = If( CM = 1 and DM = 0 and M = 0 ; "cien " ; CML ) ;

 

 

 

 

 

 

/* ----    millones    ------------------------------------------------------------------------------------------------------------------------------------------------------- */

 

 

           MMUL = Choose(MMU;"";"un ";"dos ";"tres ";"cuatro ";"cinco ";"seis ";"siete ";"ocho ";"nueve ");

 

 

           MMUL = If ( MMD = 1 and MMU = 1 ;"" ; MMUL ) ;               /*  Valor de ONCE   */

           MMUL = If ( MMD = 1 and MMU = 2 ;"" ; MMUL ) ;               /*  Valor de DOCE   */

           MMUL = If ( MMD = 1 and MMU = 3 ;"" ; MMUL ) ;               /*  Valor de TRECE   */

           MMUL = If ( MMD = 1 and MMU = 4 ;"" ; MMUL ) ;               /*  Valor de CATORCE   */

           MMUL = If ( MMD = 1 and MMU = 5 ;"" ; MMUL ) ;               /*  Valor de QUINCE   */

 

 

           MMDL = Choose(MMD;"";"dieci";"veinti";"treinta ";"cuarenta ";"cincuenta ";"sesenta ";"setenta ";"ochenta ";"noventa ") ;

 

 

           MMDL = If ( MMD = 1 and MMU = 0 ; "diez ";MMDL);

           MMDL = If ( MMD = 1 and MMU = 1 ; "once ";MMDL);

           MMDL = If ( MMD = 1 and MMU = 2 ; "doce ";MMDL);

           MMDL = If ( MMD = 1 and MMU = 3 ; "trece ";MMDL);

           MMDL = If ( MMD = 1 and MMU = 4 ; "catorce ";MMDL);

           MMDL = If ( MMD = 1 and MMU = 5 ; "quince ";MMDL);

 

 

           MMDL = If ( MMD = 2 and MMU = 0 ; "veinte ";MMDL);

           MMDL = If ( MMD  ≥ 3 and MMU  ≥ 1 ; MMDL & "y " ;MMDL);

 

 

 

 

           coMMa = If ( CM  ≥ 1 or DM  ≥ 1 or M  ≥ 1 ; ", " ; " " ) ;

           MMUL = If ( MMU = 1 and MMD = 0 ; MMUL & "millón" & coMMa ; MMUL );

           MMUL = If ( MMU  ≥ 2 or MMD  ≥ 1 or MMC ≥ 1; MMUL & "millones" & coMMa ; MMUL );

 

 

           MMCL = Choose(MMC;"";"ciento ";"doscientos ";"trescientos ";"cuatrocientos ";"quinientos ";"seiscientos ";"setecientos ";"ochocientos ";"novecientos ");

 

 

           MMCL = If( MMC = 1 and MMD = 0 and MMU = 0 ; "cien " ; MMCL ) ;

 

 

/* ------------------------------------------------------------------------------------------------------------------------------------------------------- */

           moneda = If( ImporteEnNúmero    ≥  1000000 and U = 0 and D = 0 and C = 0 and M = 0 and DM = 0 and CM = 0 ; "de " & moneda ; moneda );

           ImporteEnLetra = Signo_L & MMCL & MMDL & MMUL & CML & DML &  ML & CL & DL & UL & moneda &  dec & sufijo ;

           ImporteEnLetra = If(ImporteEnNúmero  > 999999999.99 or ImporteEnNúmero  < -999999999.99 ; Signo_L & ImporteEnNúmero ; ImporteEnLetra )

];

            Upper(Left( ImporteEnLetra;1)) & Right(ImporteEnLetra ;Length( ImporteEnLetra) -1)

 

 

)

/*   ------  FIN  ------------------------------------------------------------------------------------------------------------------------------------------------- */

Outcomes