Skip to Content
avatar image
Former Member

Factura clientes con total en letras en Crystal Reports

Buenas tardes

Alguien de uds puede apoyarme en como poner el total en letras en una factura hecha en crystal reports, revise el PLD y hace referencia alguna variable, pero en Crystal no he encontrado una forma de hacerlo, alguna sugerencia?

Saludos.

Add comment
10|10000 characters needed characters exceeded

  • Follow
  • Get RSS Feed

1 Answer

  • Best Answer
    avatar image
    Former Member
    Feb 03, 2011 at 08:52 PM

    Proba con esta Formula:

    if {VRetenciones.doccurr} = 'GS' THEN

    stringVar monto :=trim(totext({VRetenciones.impretencion},2,''));

    stringVar texto :='';

    stringVar ytexto :='';

    numberVar long :=length(monto);

    stringVar array Cientos := ['CIENTO', 'DOSCIENTOS','TRESCIENTOS', 'CUATROCIENTOS', 'QUINIENTOS',

    'SEISCIENTOS','SETECIENTOS', 'OCHOCIENTOS', 'NOVECIENTOS','MIL'];

    stringVar array Decenas := ['DIEZ', 'VEINTE', 'TREINTA', 'CUARENTA', 'CINCUENTA', 'SESENTA',

    'SETENTA','OCHENTA','NOVENTA',' '];

    stringVar array MasDecenas := ['ONCE', 'DOCE', 'TRECE', 'CATORCE', 'QUINCE', 'DIECISEIS',

    'DIECISIETE', 'DIECIOCHO', 'DIECINUEVE'];

    stringVar array Unidades :=['UN ','DOS', 'TRES','CUATRO','CINCO','SEIS', 'SIETE', 'OCHO',

    'NUEVE',' '];

    stringvar monto := ReplicateString ('0',15 - length(monto)) + monto;

    StringVar ParteDecimal := monto[13]monto[14]monto[15];

    StringVar Parte1 := monto[10] + monto[11] + monto[12];

    StringVar Parte2 := monto[7] + monto + monto[9];

    StringVar Parte3 := monto[4] + monto[5] + monto[6];

    StringVar Parte4 := monto[1] + monto + monto[3];

    StringVar Letras1 := ' ';

    if Parte4 <> '000' then

    if Parte4 <> '0' then

    Letras1 := Letras1 + Cientos[ToNumber(Parte4[1])];

    if Parte4 = '1' and Parte4[3] > '0' then

    Letras1 := Letras1 + ' ' + MasDecenas[ToNumber(Parte4[3])];

    if Parte4 <> '0' and Parte4[2]<>'2' THEN

    Letras1 := Letras1 + ' ' + Decenas[ToNumber(Parte4[2])];

    if Parte4 <> '0' AND Parte4[2]='2' THEN

    Letras1 := Letras1 + ' VEINTI';

    if (Parte4 <> '0') and (not(Parte4 = '1' and Parte4[3] > '0')) then

    if Letras1 <> ' ' then

    if (Parte4[2] <> '0') and (Parte4[2]<>'2') then // si es distinto de veinte y

    Letras1 := Letras1 + ' y ' + Unidades[ToNumber(Parte3[3])];

    if (Parte4[2] <> '0') and (Parte4[2]='2') then // si es veinte y

    Letras1 := Letras1 + Unidades[ToNumber(Parte4[3])];

    if Letras1=' ' and Parte4[3]<>'0' and Parte4[1]='0' and Parte4[2]='0' then // si es un mil millones, dos mil millones, etc.

    Letras1 := Letras1 + Unidades[ToNumber(Parte3[3])];

    if Parte4 <> '000' then

    Letras1 := Letras1 + ' MIL MILLONES ';

    if Parte3 <> '000' then

    if Parte3 <> '0' then

    Letras1 := Letras1 + Cientos[ToNumber(Parte3[1])];

    if Parte3 = '1' and Parte3[3] > '0' then

    Letras1 := Letras1 + ' ' + MasDecenas[ToNumber(Parte3[3])];

    if Parte3 <> '0' and Parte3[2]<>'2' then

    Letras1 := Letras1 + ' ' + Decenas[ToNumber(Parte3[2])];

    if Parte3 > '0' and Parte3[2]='2' then

    Letras1 := Letras1 + ' VEINTI';

    if (Parte3 <> '0') and (not(Parte3 = '1' and Parte3[3] > '0')) then

    if Letras1 <> ' ' then

    if (Parte3 <> '0') and (Parte3[2]<>'2') then // si es distinto de veinte y

    Letras1 := Letras1 + ' y ' + Unidades[ToNumber(Parte3[3])];

    if (Parte3 <> '0') and (Parte3[2]='2') then // si es veinte y

    Letras1 := Letras1 + Unidades[ToNumber(Parte3[3])];

    if Letras1=' ' and Parte3[3]<>'0' and Parte3[1]='0' and Parte3[2]='0' then // si es un millón, dos millones, tres millones

    Letras1 := Letras1 + Unidades[ToNumber(Parte3[3])];

    If Parte3 = '001' then

    Letras1 := Letras1 + ' MILLON '

    else

    if Parte3 <> '000' then

    Letras1 := Letras1 + ' MILLONES ';

    if Parte2 <> '000' then

    if Parte2 <> '0' then

    Letras1 := Letras1 + Cientos[ToNumber(Parte2[1])];

    if (Parte2 = '1') and (Parte2[3] > '0') then //si es dieci

    Letras1 := Letras1 + ' ' + MasDecenas[ToNumber(Parte2[3])];

    if (Parte2 = '2') and (Parte2[3] > '0') then //si es veinte y..

    Letras1 := Letras1 + ' VEINTI';

    if (Parte2 > '2') then //SI ES distinto de veinte y..

    Letras1 := Letras1 + ' ' + Decenas[ToNumber(Parte2[2])];

    if (Parte2 = '0') and (Parte2 = '1') and (Parte2[3]='0') then //SI DIEZ

    Letras1 := Letras1 + ' ' + Decenas[ToNumber(Parte2[2])];

    if (Parte2 <> '0') and (not(Parte2 = '1' and Parte2[3] > '0')) then

    if Letras1 <> ' ' then

    if (Parte2 <> '0') and (Parte2[2]<>'2') and (not(Parte2 = '1' and Parte2[3] > '0')) then // si es distinto de veinte y

    Letras1 := Letras1 + ' y ' + Unidades[ToNumber(Parte2[3])]

    else if (Parte2 <> '0') and (Parte2[2]='2') then // si es veinte y

    Letras1 := Letras1 + Unidades[ToNumber(Parte2[3])];

    if(Parte2[1]<>'0') and Parte2[2]='0' and Parte2[3] <> '0'then

    Letras1 := Letras1 + ' ' + Unidades[ToNumber(Parte2[3])];

    if Parte2 <> '000' then

    Letras1 := Letras1 + ' MIL ';

    if Parte1 <> '000' then

    if Parte1[1] <> '0' then

    if Parte1 ='100' then Letras1 := Letras1 + 'CIEN'

    else Letras1 := Letras1 + Cientos[ToNumber(Parte1[1])];

    if Parte1[2] = '1' and Parte1[3] > '0' then

    Letras1 := Letras1 + ' ' + MasDecenas[ToNumber(Parte1[3])];

    if Parte1 > '1' and Parte1[2]<>'2' then

    Letras1 := Letras1 + ' ' + Decenas[ToNumber(Parte1[2])];

    if Parte1 = '1' and Parte1[3]='0' then

    Letras1 := Letras1 + ' ' + Decenas[ToNumber(Parte1[2])];

    if Parte1 <> '0' and Parte1[2]='2' then

    Letras1 := Letras1 + ' VEINTI';

    if (Parte1 <> '0') and (not(Parte1 = '1' and Parte1[3] > '0')) then

    if Letras1 <> ' ' then

    if (Parte1 <> '0') and (Parte1[2]<>'2') and (not(Parte1 = '1' and Parte1[3] > '0')) then // si es distinto de veinte y

    If Parte1[3]='1' then

    Letras1 := Letras1 + ' y UNO'

    Else

    Letras1 := Letras1 + ' y ' + Unidades[ToNumber(Parte1[3])];

    if (Parte1 <> '0') and Parte1[2]='2' and (Parte1[3]='1')then // si es veintiun

    Letras1 := Letras1 + 'UNO';

    if (Parte1 <> '0') and (Parte1[2]='2') and (Parte1[3]<>'1') and (Parte1[3]<>'0')then // si es veintidós, veintitrés..

    Letras1 := Letras1 + Unidades[ToNumber(Parte1[3])];

    if(Parte1[1]<>'0') and Parte1[2]='0' and Parte1[3] <> '0'then

    Letras1 := Letras1 + ' ' + Unidades[ToNumber(Parte1[3])];

    Letras1 := trim(Letras1) + '.--';

    Edited by: Jorge Casaccia on Feb 3, 2011 9:52 PM

    Add comment
    10|10000 characters needed characters exceeded

    • Former Member Former Member

      Muchas gracias por sus comentarios, quedo de la siguiente forma en mi caso

      IF {OINV.DocCur}  = 'MXP' THEN
          UpperCase ( ToWords ({OINV.DocTotal}))+ ' PESOS MEXICANOS'
      ELSE IF {OINV.DocCur} = 'USD' THEN
          UpperCase ( ToWords ({OINV.DocTotalSy})) + ' DÓLARES AMERICANOS' 
      ELSE IF {OINV.DocCur}  = 'EUR' THEN
          UpperCase ( ToWords ({OINV.DocTotalSy}))+ ' EUROS'
      ELSE IF {OINV.DocCur}  = 'CAN' THEN
          UpperCase ( ToWords ({OINV.DocTotalSy}))+ ' DÓLARES CANADIENSES'
      

      Saludos.