Reporte (DW_Group) con Suma total en Letras

Hola, tengo un Reporte con Un DW agrupado por Nro de Documento de Venta (Boleta o Factura) y quisiera que al pie de cada documento de venta apareciese el total en letras, ya que en la tabla del detalle del documento NO se almacena ese dato.

Agradeceré cualquier ayuda, idea, comentario o respuesta al respecto.

Dejo una imagen para una mejor compresión de mi pregunta.

1 Respuesta

Respuesta
1

Para que imprimas el total en letras es mejor que lo realices en forma individual, es complicado en grupo. Lo mejor es que crees un datawiindow grid donde muestre la lista de documento y si deseas imprimir los documentos mostrados, crea otro ventana donde reciba el parámetro del documento a imprimir y ahi crea la función de convertir numero letras, para imprimir todo solo recorres el datawindows a la o enviando el parámetro a la otra ventana. Esta es la función que recibe un parámetro (numerototal)

//f_letnum
string varlet,z0,z1,resultado,mon
integer j,k,z2,z3,z4,z5
decimal num
varlet=""
mon=""
num=numEROTOTAL
z0=STRING(num,'000000000.00')
j=1
k=1
DO WHILE j <= 3
z1 = MID(z0,k,3)
z2 = integer(MID(z1,1,1))
if z2<>0 then
// f_sub1(z2,WORD)
Choose case z2
case 1
mon='CIENTO'
case 2
mon='DOSCIENTOS'
case 3
mon='TRESCIENTOS'
case 4
mon='CUATROCIENTOS'
case 5
mon='QUINIENTOS'
case 6
mon='SEISCIENTOS'
case 7
mon='SETECIENTOS'
case 8
mon='OCHOCIENTOS'
case 9
mon='NOVECIENTOS'
End Choose
//
varlet=varlet+mon+' '
end if
z2 = integer(MID(z1,2,2))
z3 = integer(MID(z1,2,1))
z4 = integer(MID(z1,3,1))
if (z3=0 AND z4=0) then
else
if z3>=1 AND z4=0 then
// f_sub4(z2,WORD)
Choose case z2
case 10
mon='DIEz'
case 11
mon='ONCE'
case 12
mon='DOCE'
case 13
mon='TRECE'
case 14
mon='CATORCE'
case 15
mon='QUINCE'
case 16
mon='DIECISEIS'
case 17
mon='DIECISIETE'
case 18
mon='DIECIOCHO'
case 19
mon='DIECINUEVE'
case 20
mon='VEINTE'
case 30
mon='TREINTA'
case 40
mon='CUARENTA'
case 50
mon='CINCUENTA'
case 60
mon='SESENTA'
case 70
mon='SETENTA'
case 80
mon='OCHENTA'
case 90
mon='NOVENTA'
End Choose
//
varlet = varlet+mon+' '
else
if z3=0 AND z4>=1 then
// f_SUB3(z4,WORD)
Choose case z4
case 1
mon='UN'
case 2
mon='DOS'
case 3
mon='TRES'
case 4
mon='CUATRO'
case 5
mon='CINCO'
case 6
mon='SEIS'
case 7
mon='SIETE'
case 8
mon='OCHO'
case 9
mon='NUEVE'
End Choose
//
if j=3 AND z4=1 then
mon=mon+'O'
end if
varlet = varlet+mon+' '
else
if z2>=11 AND z2<=19 then
// f_SUB4(z2,WORD)
Choose case z2
case 10
mon='DIEz'
case 11
mon='ONCE'
case 12
mon='DOCE'
case 13
mon='TRECE'
case 14
mon='CATORCE'
case 15
mon='QUINCE'
case 16
mon='DIECISEIS'
case 17
mon='DIECISIETE'
case 18
mon='DIECIOCHO'
case 19
mon='DIECINUEVE'
case 20
mon='VEINTE'
case 30
mon='TREINTA'
case 40
mon='CUARENTA'
case 50
mon='CINCUENTA'
case 60
mon='SESENTA'
case 70
mon='SETENTA'
case 80
mon='OCHENTA'
case 90
mon='NOVENTA'
End Choose
//
varlet=varlet+mon+' '
else
z5=ROUND(z3*10,0)
// f_SUB4(z5,WORD)
Choose case z5
case 10
mon='DIEz'
case 11
mon='ONCE'
case 12
mon='DOCE'
case 13
mon='TRECE'
case 14
mon='CATORCE'
case 15
mon='QUINCE'
case 16
mon='DIECISEIS'
case 17
mon='DIECISIETE'
case 18
mon='DIECIOCHO'
case 19
mon='DIECINUEVE'
case 20
mon='VEINTE'
case 30
mon='TREINTA'
case 40
mon='CUARENTA'
case 50
mon='CINCUENTA'
case 60
mon='SESENTA'
case 70
mon='SETENTA'
case 80
mon='OCHENTA'
case 90
mon='NOVENTA'
End Choose
//
mon=MID(mon,1,LEN(mon)-1)+'I'
varlet=varlet+mon
// f_SUB3(z4,WORD)
Choose case z4
case 1
mon='UN'
case 2
mon='DOS'
case 3
mon='TRES'
case 4
mon='CUATRO'
case 5
mon='CINCO'
case 6
mon='SEIS'
case 7
mon='SIETE'
case 8
mon='OCHO'
case 9
mon='NUEVE'
End Choose
//
if j=3 AND z4=1 then
mon=mon+'O'
end if
varlet = varlet + mon + ' '
end if
end if
end if
end if
if integer(z1)>0 then
Choose case j
case 1
if integer(z1)=1 then
varlet=varlet+'MILLON '
else
varlet=varlet+'MILLONES '
end if
case 2
varlet = varlet + 'MIL '
End Choose
end if
j=j+1
k=k+3
loop
resultado = varlet+' Y '+MID(z0,11,2)+'/100 '
RETURN(resultado)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas