FoxPro/Visual FoxPro - Convertir numero es letras

 
Vista:
Imágen de perfil de Elias

Convertir numero es letras

Publicado por Elias (79 intervenciones) el 21/08/2014 17:25:04
Hola a todos,

Por favor, estoy necesitando una rutina que me permita convertir importes en letras. Es para imprimir facturas donde ademas de imprimir el monto de la factura lo tengo que incluir en letras tambien.

Desde ya gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Convertir numero es letras

Publicado por hugo (22 intervenciones) el 22/08/2014 00:08:32
esta instruccion la pones en el boton donde mandas a imprimir la factura:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
nnn = ThisForm.Txtgtotal.VALUE
mamt = str (nnn)
aaa=space(40)
do cantialetras.prg with nnn,aaa
m.letra = aaa
 
report form rptfactura environment to printer prompt noconsole
 
*** nota si te fijas arriba hacemos mencion de un PRG donde tenemos el codigo de la conversion de numero a letra y este es el codigo dentro del PRG llamado cantialetras.prg
codigo:
 
*!*	Esta rutina usa dos parametros mamt y regreso.
*!*	Donde mamt sera la variable para poner la cantidad y regreso sera una variable alfanumerica donde se almacenara el valor en letras.
 
 
 
*Su forma de uso sera:
 
*!*	nnn = 1550.00
*!*	mamt = "1550.00"
*!*	aaa=space(40)
*!*	do cantialetras with nnn,aaa
 
 
 
*Donde nnn sera el valor y aaa sera la variable que regresara la cantidad convertida, para desplegar el valor en tu pantalla solo puedes poner
 
 
 
*? aaa
 
*----------------------
PROCEDURE cantialetras
  PARAMETERS mamt, regreso
 
  IF (mamt>999999999)
    letra='* * C A N C E L A D O * *'
    RETURN
  ENDIF
 
  WMAMT = 0
  IF MAMT - INT(MAMT) > 0
    WMAMT = MAMT - INT(MAMT)
  ENDIF
 
  PRIVATE mamt, camt, unos, diez, diezes, cienes, cnum, mill, mile, cien, i
  PRIVATE mill_yn, mile_yn, cien_yn
 
  * inicializa variables de memoria
  STORE "" TO camt
  STORE "     UN    DOS   TRES  CUATROCINCO SEIS  SIETE OCHO  NUEVE " TO unos
  STORE "         DIEZ      ONCE      DOCE      TRECE     CATORCE   QUINCE    DIECISEIS DIECISIETEDIECIOCHO DIECINUEVE" TO diez
  STORE "                 VEINTE   TREINTA  CUARENTA CINCUENTASESENTA  SETENTA  OCHENTA  NOVENTA  " TO diezes
  STORE "            CIENTO       DOSCIENTOS   TRESCIENTOS  CUATROCIENTOSQUINIENTOS   SEISCIENTOS  SETECIENTOS  OCHOCIENTOS  NOVECIENTOS  " TO cienes
 
  * almacena la cantidad numerica en una string
  STORE LEFT(STR(mamt,12,2),9) TO cnum
  STORE SUBSTR(cnum,1,3) TO mill
  STORE SUBSTR(cnum,4,3) TO mile
  STORE SUBSTR(cnum,7,3) TO cien
  i=1
  STORE '' TO letra
 
  * checa cienes
  STORE .F. TO mill_yn, mile_yn, cien_yn
  DO WHILE .T.
    IF (LEN(TRIM(mill))=0 .AND. .NOT. mill_yn)
      i=2
      mill_yn=.T.
    ENDIF
    IF (LEN(TRIM(mile))=0 .AND. .NOT. mile_yn)
      i=3
      mile_yn=.T.
    ENDIF
    IF (LEN(TRIM(cien))=0 .AND. .NOT. cien_yn)
      i=4
      cien_yn=.T.
    ENDIF
 
    * pasa a la variable de trabajo el valor de
    * millones miles o cienes segun el caso
    DO CASE
      CASE i=1
        cnum=mill
      CASE i=2
        cnum=mile
      CASE i=3
        cnum=cien
    ENDCASE
    camt=''
    IF SUBSTR(cnum,1,1)>"0"
      IF SUBSTR(cnum,1,3)="100"
        camt=camt+" CIEN"
      ELSE
        IF SUBSTR(cnum,1,1)>="1"
          STORE TRIM(SUBSTR(cienes,VAL(SUBSTR(cnum,1,1))*13,13))+" " TO camt
        ENDIF
      ENDIF
    ENDIF
 
    * checa dieces y unos
    DO CASE
      CASE SUBSTR(cnum,2,1)>"1"
        STORE camt+TRIM(SUBSTR(diezes,VAL(SUBSTR(cnum,2,1))*9,9)) TO camt
        IF RIGHT(cnum,1)>"0"
          STORE camt+" Y "+TRIM(SUBSTR(unos,VAL(RIGHT(cnum,1))*6,6)) TO camt
        ENDIF
      CASE SUBSTR(cnum,2,1)="1"
        STORE camt+TRIM(SUBSTR(diez,VAL(RIGHT(cnum,1))*10+10,10)) TO camt
      CASE RIGHT(cnum,2)=" 0"
        camt="CERO"
      OTHERWISE
        IF SUBSTR(cnum,3,1)>"0"
          STORE camt+TRIM(SUBSTR(unos,VAL(RIGHT(cnum,1))*6,6)) TO camt
        ENDIF
    ENDCASE
    letra=letra+camt
    IF i=1
      letra=letra+' MILLONES '
    ENDIF
    IF i=2 .AND. cnum < '000'
      letra=letra+' MIL '
    ENDIF
    i=i+1
    IF i>3
      EXIT
    ENDIF
  ENDDO
 
  STORE '00' TO CIEN
  IF WMAMT > 0
    STORE SUBSTR(TRANSFORM(WMAMT,'.##'),2,2) TO CIEN
  ENDIF
  letra = ('(&letra PESOS &CIEN/100 M.N.)')
  STORE letra TO regreso
  RETURN
ENDPROC
*----------------------

suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar