28 de enero de 2009

Abanq: Importe con letra en las facturas

Por default en el campo "texto" de la tabla "reciboscli" se almacena la cantidad con letra, pero la manera en que es generada no funciona para México por lo que hay que modificarse. Las modificaciones a realizar son las siguientes:

En el script "tesoreria/scripts/flfactteso.qs"

Se agrega el siguiente código en la función "oficial_generarReciboCli":
/* inicio del código agregado. */
// declaración de variables
var redondeado:Number=0;
var centavos:Number=0;
var conletra:String;
var totalconletra:String;
var conletra = util.enLetra(importe); // Cantidad con numero de la parte entera
redondeado = Math.round(importe); // redondea la cantidad al numero entero mas próximo para conocer centavos

if (redondeado < importe){
centavos = importe - redondeado;
centavos = centavos * 100;
}
if (redondeado > importe) {
centavos = redondeado - importe;
centavos = centavos * 100;
}
if (centavos == 0)
{
totalconletra = conletra + " PESOS " + centavos + centavos + "/100 M.N.";
}
else{
totalconletra = conletra + " PESOS " + centavos + "/100 M.N.";
}
/*
Hubiera sido mas sencillo obtener los decimales con util.partDecimal(importe),
pero al usarlo devolvía una bonita violación de segmento:
// var centavos:Number = util.partDecimal(importe);
*/
/* fin del código agregado. */


En la misma función un poco más abajo se modifica:
setValueBuffer("texto", util.enLetraMoneda(importe, divisa));
Por:
setValueBuffer("texto", totalconletra.upper()); /* se usa upper para que muestre el texto mio en mayúscula.*/

En el archivo "informes/queries/i_facturascli.qry"

Se cambia:
<tables>empresa,facturascli,lineasfacturascli,albaranescli</tables>
Por:
<tables>empresa,facturascli,lineasfacturascli,albaranescli,reciboscli </tables>

En las etiquetas select del mismo archivo se agrega el campo "reciboscli.texto" y en las etiquetas from se cambia:
< from >
empresa,facturascli INNER JOIN lineasfacturascli ON facturascli.idfactura = lineasfacturascli.idfactura
LEFT OUTER JOIN albaranescli ON albaranescli.idalbaran = lineasfacturascli.idalbaran
</from>


Por:
< from >
empresa,facturascli INNER JOIN lineasfacturascli ON facturascli.idfactura = lineasfacturascli.idfactura
INNER JOIN reciboscli ON reciboscli.idfactura = facturascli.idfactura
LEFT OUTER JOIN albaranescli ON albaranescli.idalbaran = lineasfacturascli.idalbaran
</from>


En el archivo "informes/reports/i_facturascli.kut"

Se manda llamar el campo "reciboscli.texto":
<CalculatedField BackgroundColor="255,255,255" BorderColor="0,0,0"
BorderStyle="0" BorderWidth="1" CalculationType="5"
CommaSeparator="0" Currency="32" DataType="0"
DateFormat="11" Field="reciboscli.texto" FontFamily="Verdana"
FontItalic="0" FontSize="10" FontWeight="50"
ForegroundColor="0,0,0" HAlignment="0" Height="20"
NegValueColor="0,0,0" Precision="0" Text="[reciboscli.texto]"
VAlignment="1" Width="410" WordWrap="0"
X="98" Y="28" />


11 comentarios:

Jaareh dijo...

Hola samuel, tienes muy buen contenido en este block te felicito por eso, y espero sigas publicando cosas interesantes, te escribo por que esta entrada no he podido hacer que funcione, sera que pueda mandarme el codigo del archivo a gruporealtech@mac.com, saludos y ojala puedas responder.

scs_calleros dijo...

Hola Jaareh, he corregido la entrada porque no se mostraba correctamente la parte en donde se agrega código en i_facturascli.kut.

Carlos Sierra dijo...

Hola, Samuel Calleros:
Soy Carlos Sierra, tambien de México e interesado en el AbanQ.
Primero quiero agradecerte por la información de tu blog.
Segundo, he realizado unas preguntas en el foro de AbanQ, la liga:

http://abanq.org/laboratorio/minibb/index.php?&action=vthread&forum=2&topic=741

Hoy en la madrugada he podido cambiar algunas etiquetas de formularios y tu sugerencia del R.F.C. Ahora trabajo en lo de Importe con Letra.

Tercero, veo que en México se desconoce esta aplicación. Mi objetivo al escribirte es pedir tu ayuda con respecto al AbanQ, para aplicarlo en mi negocio y despues para comercializar con el. Que te parece? A ver que podemos hacer, ¿no? Yo no conosco mucho de esto, pero me comprometo a trabajar.
carlossierra59@hotmail.com
Gracias

scs_calleros dijo...

Hola Carlos, lo que yo he realizado con abanq es prácticamente lo que describo en este blog. Lo subí con el fin de que les sirviera a otros mexicanos que como yo quiere una aplicación gratuita y sobre todo libre para llevar el control de un negocio y pudiera personalizarse para aplicarlo en México.



Llevo usando abanq durante casi dos años usando Debian GNU/Linux tanto en el Server como en clientes y se ha portado bien durante ese tiempo. Quizás, el inconveniente es que algunos módulos importantes tienen un costo (en Euros) que me parecen elevados para un pequeño negocio. Para el uso que yo le doy abanq es más que suficiente, pero si se pretende utilizar en negocios de distintos giros las cosas se puede complicar porque requieres de otros módulos.

Muchos usuarios de abanq se han cambiado a openErp(openerp.com) donde hay una gran cantidad de módulos libres. De hecho tengo en mente probar openerp y si lo encuentro atractivo migrar hacia este.

Si tu intensión es hacer negocio instalándolo en diversos negocios te recomiendo que pruebes también openErp a lo mejor te decantas por este último.

Anónimo dijo...

Hola, he estado modificando un poco Abanq a mis necesidades, y en este momento quiero hacer que el precio de venta de un producto se calcule a partir del precio de compra (costemedio). Sé que este valor se refleja en el formulario del almacén (articulos.ui), pero se calcula desde el script de las facturas (flfactalma.qs). Me he dado cuenta que simplemente hace una suma ponderada del precio y la cantidad (SUM(pvptotal) / SUM(cantidad)). Al parecer, simplemente toma todas las líneas de facturación donde se encuentre el producto y las promedia. Yo quisiera saber cómo puedo seleccionar sólo la última factura donde aparezca el producto ¿Alguna idea? Te lo agradezco de antemano.

scs_calleros dijo...

Hola, Anónimo, la verdad no sabría decirte exactamente como hacerlo. Pero se me ocurre que busques la función que almacena el valor en el campo articulos.costemedio y la comentes, y luego en el script que registra las compras, insertes el costo del artículo de la compra (lineasfacturasprov.pvpunitario) en articulos.costemedio.

Anónimo dijo...

Hola. Una ligera modificación a tu aporte. Ojalá os resulte útil.

/** \C
Separa la parte entera del importe y la pone en letra. Después obtiene la parte decimal. Al final lo une.
\end */
var centavos:String;
var conletra:String;
var conletra = util.enLetra(importe); // Cantidad con número de la parte entera
centavos = util.buildNumber(util.partDecimal(importe), "Number", 0); // obtiene los centavos del importe
totalconletra = conletra + " PESOS " + centavos + "/100 M.N.";

La definición de partDecimal es que entrega un número del tipo long, lo que seguramente ocasionaba la segmentación.

scs_calleros dijo...

Gracias por el aporte Anónimo, haber cuando lo pruebo.

scs_calleros dijo...

Me he dado cuenta de que parte del código seguía sin mostrarse correctamente. Lo he corregido poniendo con etiquetes CODE , espero y haya quedado correctamente. Voy a revisar el resto de artículos haber si encuentro algún error en ellos.

Anónimo dijo...

Hola,
¿Cómo es eso de la etiqueta CODE? ¿puedes poner la sentencia modificada? ¿en qué parte se mostraba mal? Estoy usando PostgreSQL. ¿Tú cuál usas? Gracias :).

scs_calleros dijo...

Cuando publicas código, Blogspot no lo interpreta correctamente si dentro del código se encuentran algunas etiquetas HTML aunque el código lo pongas dentro de etiquetas CODE o PRE. He verificado el artículo minuciosamente y parece ser que blogspot ya muestra correctamente el código (script, SQL, etc) con los cambios realizados.

PD: Yo uso MySQL.