1 Respuesta Última respuesta el Oct 17, 2014 4:00 AM por Alquimista

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

    HugoEspinosa

      /*   

       

             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  ------------------------------------------------------------------------------------------------------------------------------------------------- */

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

          Hola,

           

          No sé de dónde saqué esta fórmula que llevo usando bastante tiempo.

           

          Yo la uso como función personalizada, pero puede usarse como un cálculo normal:

           

          Let([

          STR="Un¶Dos¶Tres¶Cuatro¶Cinco¶Seis¶Siete¶Ocho¶Nueve¶Diez¶Once¶Doce¶Trece¶Catorce¶Quince¶Dieciséis¶Diecisiete¶Dieciocho¶Diecinueve¶Veinte¶Veintiún¶Veintidós¶Veintitrés¶Veinticuatro¶Veinticinco¶Veintiséis¶Veintisiete¶Veintiocho¶Veintinueve¶Treinta¶Cuarenta¶Cincuenta¶Sesenta¶Setenta¶Ochenta¶Noventa¶Cien¶Doscientos¶Trescientos¶Cuatrocientos¶Quinientos¶Seiscientos¶Setecientos¶Ochocientos¶Novecientos¶Mil¶Millón¶Millones¶y¶Céntimo¶Céntimos¶Cien¶Ciento¶Euro¶de";

          Y = " " & GetValue(STR;49) & " ";

          N1 = Int( importe/10^6 );

          N2 = Int( ( importe-N1*10^6)/10^5 );

          N3 = Int( ( importe-N2*10^5-N1*10^6)/10^3 );

          N4 = Int( ( importe-N1 * 10^6-N2*10^5-N3*10^3)/10^2 );

          N5 = Int( importe-N1*10^6-N2*10^5 - N3*10^3 - N4*10^2 );

          N6 = Round( importe - Int( importe ) ; 2 ) * 100;

          D = Case( importe; If( N2+N3+N4+N5 = 0  and  Int(importe)>0 ; GetValue(STR;55) ) & " " & GetValue(STR;54) & If( N5>1 ; "s" ) & If( N6;Y) ; "" );

          C = " " & GetValue(STR;50) & If(N6>1;"s");

          M = If (N2 or N3 ; " " & GetValue(STR;46) ) & " ";

          MM = " " & If( N1=1 ; GetValue(STR;47) ; GetValue(STR;48)) & " " ];

           

           

          If( importe > 99999999,99  or importe < 0 ; "ERR: 0 ... 99.999.999,99"; TrimAll(

          If( N1; If( N1<30 ; GetValue(STR;N1) ; GetValue(STR;Int(N1/10)+27) & If(  Mod(N1;10) ; Y & GetValue(STR;Mod(N1;10) ) ) ) & MM ) &

          If( N2; If( N2=1; If( not N3; GetValue(STR;52) ; GetValue(STR;53) ) & " " ; GetValue( STR; N2+36) & " ")) &

          If( N3; If( N3<30 ; If(N3 ≠ 1;GetValue(STR;N3)) ; GetValue(STR;Int(N3/10)+27) & If(  Mod(N3;10) ; Y & GetValue(STR;Mod(N3;10) ) ) ) ) & M &

          If( N4; If( N4=1; If( not N5; GetValue(STR;52) ; GetValue(STR;53) ) & " " ; GetValue( STR; N4+36) & " ")) &

          If( N5; If( N5<30 ; GetValue(STR;N5) ; GetValue(STR;Int(N5/10)+27) & If(  Mod(N5;10) ; Y & GetValue(STR;Mod(N5;10) ) ) ) ) & D &

          If( N6; If( N6<30 ; GetValue(STR;N6) ; GetValue(STR;Int(N6/10)+27) & If(  Mod(N6;10) ; Y & GetValue(STR;Mod(N6;10) ) ) ) & C )

           

          ;1;0)))

           

          Espero que os sirva bien.