File:Facturas - pruebas (funciona).odt

From The Document Foundation Wiki
Jump to: navigation, search
Facturas_-_pruebas_(funciona).odt(file size: 15 KB, MIME type: application/vnd.oasis.opendocument.text)
Warning: This file type may contain malicious code. By executing it, your system may be compromised.

Descripción

Macros with LibreOffice Writer

Como usar los campos de usuario para calcular fórmulas complejas en tablas dentro de Writer. Después de investigar mucho no he localizado información al respecto, motivo por el cuál escribo este pequeño tutorial que espero ayude a mucha gente que como yo, le gusta programar, trata de hacerse pequeñas herramientas pero no es un experto, y quizas le resulte muy confuso y tedisoso lidiar con la ayuda de las apis.

El objetivo de este fichero es muy sencillo: Crear una factura que haga los cálculos de forma automática para no "meter la pata" al transcribir datos y hacer los cálculos. De tal forma los datos a introducir son mínimos:

Valor a facturar (como valor) Valor del IVA vigente (como porcentaje)(Este valor se conserva entre facturas) Valor de la retención del IRPF (como porcentaje) (Este valor se conserva entre facturas) Valor de otros gastos suplidos a incluir en el cobro (como valor)

Presionando un boton, una macro realiza los cálculos y los redondeos, asignando los valores en la tabla de fórma automática y reduciendo la posibilidad de errores a la hora de crear la factura.

El problema al que me he enfrentado es que no he conseguido localizar información sobre cómo manejar los campos (de entrada de variables, denominados internamente como "SetExpression", y los de ususario, denominados internamente como "User", que son los únicos en los que podemos volcar información a posteriori una vez realizados los cálculos. Por lo menos yo no he conseguido hacerlo en los otros tipos de campos).

Una vez localizas cómo hay que obtener los datos de la compleja estructura del api y cómo se vuelven a actualiar una vez realizados los cálculos como funciones dentro del Basic, el único misterio es saber cómo definimos la entrada de datos en nuestro formulario (tabla protegida). Los campos en los que introducimos datos hay que declararlos (en el fichero que hacemos en Writer, dentro de "Insertar Campos") como "Campo de entrada" (habiendo definido primero la variable en "Establecer Variable"). Los campos en los que queremos "volcar" los calculos que hemos realizado, hay que declaralos como "Campos de usuario". Los nombres de los campos deben corresponderse concienzudamente con los que declaremos en el Basic.

Estoy tratando de vincular un "ejemplo" de esto. https://wiki.documentfoundation.org/File:Facturas_-_pruebas_(funciona).odt

El fichero BASIC tiene lo siguiente: REM ***** BASIC ***** rem CAMPOS DE ESTABLECER VARIABLE rem factura_base rem factura_iva_porcentaje rem retencion_porcentaje rem otros_valor REM ("com.sun.star.text.fieldmaster.User.factura_base")

REM CAMPOS DE USUARIO rem factura_iva_valor rem factura_total rem retencion_valor rem liquido_percibir

OPTION EXPLICIT

REM DECLARACIONES DIM sfactura_base as string DIM sfactura_iva_porcentaje as string DIM sretencion_porcentaje as string DIM sotros_valor as string

DIM sfactura_iva_valor as string DIM sfactura_total as string DIM sretencion_valor as string DIM sliquido_percibir as string

REM ########################################## Sub calcular DIM dfactura_base as double DIM dfactura_iva_porcentaje as double DIM dretencion_porcentaje as double DIM dotros_valor as double

DIM dfactura_iva_valor as double DIM dfactura_total as double DIM dretencion_valor as double DIM dliquido_percibir as double

DIM oDoc as Object Dim oCampo as Object Dim vValor as Variant

REM ASIGNACION VALORES FIJOS sfactura_base = "com.sun.star.text.fieldmaster.SetExpression."&"factura_base" sfactura_iva_porcentaje = "com.sun.star.text.fieldmaster.SetExpression."&"factura_iva_porcentaje" sretencion_porcentaje = "com.sun.star.text.fieldmaster.SetExpression."&"retencion_porcentaje" sotros_valor = "com.sun.star.text.fieldmaster.SetExpression."&"otros_valor"

sfactura_iva_valor = "com.sun.star.text.fieldmaster.User."&"factura_iva_valor" sfactura_total = "com.sun.star.text.fieldmaster.User."&"factura_total" sretencion_valor = "com.sun.star.text.fieldmaster.User."&"retencion_valor" sliquido_percibir = "com.sun.star.text.fieldmaster.User."&"liquido_percibir"

dfactura_base = ThisComponent.TextFieldMasters.getByName(sfactura_base).DependentTextFields(0).getPropertyValue ("Value") dfactura_iva_porcentaje = ThisComponent.TextFieldMasters.getByName(sfactura_iva_porcentaje).DependentTextFields(0).getPropertyValue ("Value") dretencion_porcentaje = ThisComponent.TextFieldMasters.getByName(sretencion_porcentaje).DependentTextFields(0).getPropertyValue ("Value") dotros_valor = ThisComponent.TextFieldMasters.getByName(sotros_valor).DependentTextFields(0).getPropertyValue ("Value")

REM Calculos dfactura_iva_valor = fix (100 * dfactura_base * dfactura_iva_porcentaje) / 100 dfactura_total = dfactura_base + dfactura_iva_valor dretencion_valor = fix (100 * dfactura_base * dretencion_porcentaje) / 100 dliquido_percibir = dfactura_total + dretencion_valor + dotros_valor

REM actualizar los campos del formulario ThisComponent.TextFieldMasters.getByName(sfactura_iva_valor).setPropertyValue ("Value", dfactura_iva_valor) ThisComponent.TextFieldMasters.getByName(sfactura_total).setPropertyValue ("Value", dfactura_total) ThisComponent.TextFieldMasters.getByName(sretencion_valor).setPropertyValue ("Value", dretencion_valor) ThisComponent.TextFieldMasters.getByName(sliquido_percibir).setPropertyValue ("Value", dliquido_percibir)

End Sub

Copyright status:

Licensing

Cc.logo.white.svgCc-zero.svg

This file is made available under the Creative Commons CC0 1.0 Universal Public Domain Dedication.
The person who associated a work with this deed has dedicated the work to the public domain by waiving all of his or her rights to the work worldwide under copyright law, including all related and neighboring rights, to the extent allowed by law. You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission.

Source:

File history

Click on a date/time to view the file as it appeared at that time.

Date/TimeDimensionsUserComment
current2016-10-19T19:51:37 (15 KB)IvanMM (talk | contribs)Macros with LibreOffice Writer
  • You cannot overwrite this file.

There are no pages that link to this file.