domingo, 16 de octubre de 2016

CREAR .DLL EN C# PARA USAR EN VFP 9 PASO A PASO (PARTE 1)


MANUAL CREACION .DLL EN C# PARA USAR EN VFP 9.0 (Win 7)

AUTOR : MILTON CACHIPUENDO, Servysistem Online, Ibarra – Ecuador, 0986 104-104


1.       INTRODUCCION
                Luego de realizar una extensa investigación para lograr dar la funcionalidad de Facturación Electrónica (eFactura)  a mi sistema Omega, llegué a definir  el proceso que se necesita para la solución, resumiendo esto: (1) Añadir los campos  necesarios a la Base de Datos, (2) Crear el XML de la factura electrónica, (3) Firmar el XML y (4) enviar al SRI para autorizarlo. Todo bien hasta que me topé con la limitación de que VFP no es un lenguaje que permita ejecutar el proceso de firmar un XML. Afortunadamente encontré una librería denominada FirmaXAdesNet.DLL de licencia GNU desarrollada en España y que permite realizar este trabajo. Pero el problema es que esta librería no es utilizable desde VFP ya que está hecha para entornos de desarrollo de .NET, pero no puede usarse desde VFP porque  requiere sea ensamblada con ciertas particularidades. Por lo que en mi inmenso afán de conocer e implementar mis propias soluciones, me aventuro en crear mi propia librería.
                Para esto tengo que conocer primeramente como crear una librería .DLL en C# que cumpla con los requisitos necesarios para poder usarla desde mi amado Fox. Para esto debo partir desde un conocimiento básico y  en las líneas siguientes detallo un ejemplo sencillo y paso a paso para generar la DLL utilizando Visual Studio 2010 y el lenguaje C#. Posteriormente en otra entrega indicaré como logré firmar el XML de la Factura electrónica para que sea usable en aplicaciones VFP.
                Este ejemplo existe ya en internet, por lo que aunque no detallo los autores por no alargarme mucho procedo a documentarlo paso a paso como lo pude hacerlo, quizá sirva a otros colegas.

2.       CREAR LA DLL
                Este ejemplo fue ejecutado en la plataforma Windows 7, previamente instalado Visual Studio 2010, FrameWork 4.0 de Windows y  Visual Foxpro 9 SP2, una vez que tenemos instalados los requisitos previos ya podemos desarrollar el ejemplo.
                Ingresar  a Visual Studio 2010 ir al menú File, opciones New, Project, se muestra la ventana New Project, en esta ventana navegamos en el árbol de Installed Templates, seleccionamos Visual C#, Windows, de la lista de la derecha seleccionamos Class Library en Name escribimos el nombre de la Clase a crear en nuestro caso la llamaremos VFPMath, en Location indicamos la ruta donde se creará el proyecto que será C:\VFPMath, luego OK.
                A la derecha en el árbol del proyecto buscar Class1.cs y reemplazar el siguiente código que seguidamente procederé a describir.





*


*
*
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace VFPMATH {
    [ClassInterface(ClassInterfaceType.AutoDual)]
    [ProgId("VFPMath.MathFunctions")]
    public class MathFunctions :  System.EnterpriseServices.ServicedComponent {
        public Int32 Add(Int32 x, Int32 y) { return(x + y);}
        public Int32 Subtract(Int32 x, Int32 y) { return(x - y);}
        public Int32 Multiply(Int32 x, Int32 y) { return(x * y);}
        public Int32 Divide(Int32 x, Int32 y) { return(x / y);}
    }

*  Son líneas que no pueden excluirse para usar desde VFP.

                Considero que el lector es un programador de nivel medio que tiene algo de experiencia en programación C#, por lo que será muy obvio las líneas de código anteriores, en resumen se crea una DLL llamada VFPMath, que implementa una Clase pública llamada MathFunctions, que tiene varios métodos públicos  (Add, Substract, Multiply y Divide) que realizan las operaciones matemáticas indicadas.
                Vemos una estructura propia para crear un objeto COM por lo que las línea  (using System.Runtime.InteropServices;) es requisito y no puede excluirse. Las líneas que prosiguen a namespace siempre debe estructurarse así, es decir la clase MathFunctions debe estar dentro del namespace. Tampoco se pueden excluir los atributos ([ClassInterface(ClassInterfaceType.AutoDual)] y [ProgId("VFPMath.MathFunctions")]), con esto ya tenemos todo el código que requerimos para el ejemplo.

                Lo siguiente es establecer unas dos propiedades adicionales y listo, para esto en Solution Explorer abrimos el menú de contexto de  C# VFPMath y escogemos Properties, en la pestaña Application hacemos click en Assembly Information… en la ventana que se abrió activamos la casilla Make Assembly COM-Visible.
                En la pestaña Signing (firmando) seleccione activamos la casilla Sign the Assembly, en el combo box seleccione New…, al abrirse la siguiente ventana de una nombre al archivo de firma en nuestro caso será VFPMath, desactive la opción Protect my key file with a password, luego OK.
               
En Solution Explorer abrimos el menú de contexto de References, seleccionamos Add Reference… , en la pestaña .NET, buscamos System.EnterpriseServices y luego OK, como muestra en la figura de la siguiente página.


Con esto está lista nuestra DLL, para generarla en Solution Explorer abrimos el menú de contexto de  Solution VFPMath  y seleccionamos la opción Built Solution. Ahora nuestra solución se encuentra en el directorio: c:\VFPMath\ VFPMath\ VFPMath\Bin\Debug.



3.       REGISTRAR LA DLL
                Ahora busco el archivo RegAsm.exe,  lo he localice en el siguiente directorio  C:\Windows\Microsoft.NET\Framework\v4.0.30319  procedo a copiar al directorio donde se creó mi  VFPMath.DLL, esto es en la carpeta C:\VFPMath\ VFPMath\ VFPMath\Bin\Debug. En este punto ya puedo registrar la librería, ejecuto como Administrador del Sistema el Símbolo del Sistema y luego el siguiente comando:
RegAsm VFPMath.dll /codebase


4.       USANDO LA LIBRERÍA DESDE VFP.
Una vez que está registrada esta librería estará disponible en cualquier momento y podemos ahora usarla, con el siguiente código fox podemos hacerlo, creamos el programa VFPMath.PRG, y seguidamente lo ejecutamos.
oVFPMath = CreateObject("VFPMath.MathFunctions")
?oVFPMath.add(5,4)
?oVFPMath.subtract(5,4)
?oVFPMath.multiply(5,4)
?oVFPMath.divide(5,4)



lunes, 4 de julio de 2016

Nuevo DIMM para el IVA 14%



En esta entrada quiero informar que a partir del 8 de julio del 2016, habrá una nueva actualización del DIMM formularios que el SRI está preparando; esto en vista de que el alza del IVA al 14% requiere algunos ajustes y la implementación de nuevos casilleros que contemplarán los nuevos requerimientos. Por lo que advierto que no será posible hacerlo correctamente con la versión última publicada el 23 de mayo del 2016, si usted procede o ya hizo declaración con esta versión se requerirá realizar una declaración sustitutiva posterior con la nueva versión que será publicada en la fecha indicada, por lo que se recomienda estar pendiente de este evento.

         También conviene leer la siguiente publicación en lo referente a preguntas que usted puede querer conocer sobre el IVA 14%.

http://www.sri.gob.ec/DocumentosAlfrescoPortlet/descargar/d9995fcc-d747-4e0b-a1db-3790774fb5a5/PREGUNTAS+FRECUENTES+NUEVA+TARIFA+IVA+Y+PROCEDIMIENTO+PARA+FACTURAS.pdf

         En el siguiente video podrá ver aspectos sobre los requisitos que deben cumplir los comprobantes de venta para el 14%.


            Es todo, espero sea de utilidad.


Atentamente,


MILTON CACHIPUENDO
ServySistem Online
Ibarra - Ecuador
Cel. 0986 104-104


lunes, 23 de mayo de 2016

IVA 14% Calendario de Vigencia y Tareas a Realizar


Esta entrada pretende explicar de manera clara como enfrentar este cambio de tarifas de IVA, indicar los aspectos técnicos relacionados a los sistemas computarizados, esclarecer cuales pueden ser las dificultades a la hora de cambiarnos entre tarifas y dar una visión de lo que usted como usuario del software debe hacer.

     Sin ánimo de intranquilizar, los aspectos que voy a revelar servirán como punto de partida para que tanto profesionales técnicos en computación, programadores y usuarios de los sistemas conozcan en detalle los procesos involucrados en esta modificación de tarifas. Algunos usuarios podrán decir que es una tarea sencilla que solo consiste en cambiar un valor o una tabla y preguntarse ¿que de complicado tiene hacerlo?, pero debo decir que para quienes desarrollamos software este cambio puede implica realizar una exaustiva revisión de miles de líneas de código, cambiar reportes, rediseñar ventanas, incluso modificar estructuras de bases de datos y hacer pruebas, procesos que pueden resultar costosos y no viables en algunos casos.

    La solución dependerá del software que usted esté utilizando, también del tipo de servicio técnico contratado y de la seriedad de su proveedor. De todas maneras es recomendable que en la medida de lo posible se ponga en contacto con su proveedor para que le explique como lo resolverán.

     Entonces pasemos a ver los aspectos técnicos relacionados.


Cálculo del IVA
En un principio debemos conocer como se calcula el IVA, lo más ilustrativo es hacer un ejemplo. Supongamos que comercializamos un bien o un servicio cuyo valor  sin IVA es $ 100 y estamos facturando hoy 23 de mayo del 2016, fijándonos en la tarifa de la tabla anterior debemos aplicar el 12%,  por lo que 100x0.12 es $12; entonces el total de la factura será 100+12=112.

     El mismo producto facturado el 1 de junio del 2016 debería aplicar la tarifa 14%, entonces 100x0.14 es $14; entonces el total de la factura será 100+14 =$114.
 
     Como veremos el costo del bien o servicio comercializado en si no cambia, pero si el IVA. Debemos entender las empresas comercializadoras de productos, que esto no representan un incremento del factor costo porque este IVA que en principio se paga al proveedor en la compra, se recupera en la venta al cliente. Por lo que, a la hora de reestablecer el Precio de Valor al Público (repreciar el PVP) entre tarifas, debe hacerse con prudencia y el reajuste debería en el mejor de los casos hacerse sobre el impuesto.

     Un error de algunas empresas al calcular el PVP, es considerar al IVA dentro del costo del producto, sumarle un porcentaje de margen de ganancia y así obtener el PVP. Cuando lo correcto es obtener el costo de compra sin IVA, sumarle el margen de ganancia y a esta sumatoria tarifarle el IVA en vigencia.

    Un cálculo inverso para obtener el costo de un producto a partir del PVP es simplemente dividirlo para 1+tarifa, es decir si un producto tiene un PVP de $112 su costo es 112/1.12=100, este proceso se denomina desglosar.

    De lo anterior deducimos que el incremento del PVP  entre las tarifa 12% y 14%  es $2,oo de IVA y que es posible desglosar su costo a partir del mismo PVP si se conoce que  tarifa se aplicó.


Repreciación del PVP.

El proceso que implica calcular el nuevo PVP en función del PVP anterior le denominamos repreciación, planteemos la siguiente fórmula útil para repreciar productos, y para el ejemplo tratado sobre el cambio del 12% al 14%, sería así:

PVP Nuevo = PVP/1.12 + PVP/1.12*0.14
PVP Nuevo = 112/1.12 + 112/1.12*0.14
PVP Nuevo = 114

    Como podrá observar este proceso no es tan complicado ejecutar si el número de productos a calcular no sobrepasan los 200, pero si se trata de miles de productos que pueden existir en una farmacia, ferretería, papelería o micromercado  la tarea se vuelve interminable y si a esto le consideramos que algunas empresas manejan varias tipos de precios al mismo producto, entonces esto esto si que se complica.

     En una encuesta realizada a nuestros clientes en la categoría de restaurantes, bares y kioscos han mencionado que no alterarán los PVP con la finalidad de mantener sus precios competitivos y considerando que la afectación es de solamente 2 centavos por cada dolar facturado.

Redondeo del PVP.

Algunas empresas especialmente micromercados y ferreterías establecen el PVP a valores útiles y comercialmente atractivos para el cliente, por ejemplo: Jabón Prot 110gX3 a $2.95, Pasta Dental Trid 75g a $1.10, de tal manera que su PVP se redondea a 5 centavos y es fácil para dar el cambio. Ahora aplicando la fórmula de la repreciación tendremos:

PVP Nuevo = 2.95/1.12 + 2.95/1.12*0.14
PVP Nuevo = 2.63 + 0.37
PVP Nuevo = 3
PVP Redondeado a 5 centavos = 3

PVP Nuevo = 1.10/1.12 + 1.10/1.12*0.14
PVP Nuevo = 0.98 + 0.14
PVP Nuevo = 1.12
PVP Redondeado a 5 centavos = 1.15

     Observamos en el primer caso y coincidencialmente se obtuvo un PVP correctamente redondeado a 5 cinco centavos; para el segundo se calculó $1.15 lo cual incrementa nuestras ganancias pero el producto puede perder competitividad y no puede ser tampoco $1.10 porque estaríamos asumiendo el incremento del IVA; entonces se debe plantear preguntas decisivas al respecto, este es otro aspectos técnico a contemplar a la hora de ejecutar repreciaciones.

     Para complicarlo un poco más para el redondeo a 5 centavos no suele ser factible en productos con PVP inferiores a $1, por lo que debe establecerse si o no se utilizará redondeo.

Recomendaciones Generales

Lo anteriormente expuesto nos da una idea de las tareas que es necesario realizar, a lo que yo personalmente recomiendo.
1.- Póngase en contacto a la brevedad posible con su proveedor de software.
2.- Establezca las políticas que incluirá el proceso de cálculo de la repreciación  y redondeo de los productos o servicios vendidos.
3.- El 1 de junio del 2016 realice el proceso.
4.- Luego de que se ejecute el proceso anterior, verifique de ser posible producto por producto el valor que ha sido calculado o en su defecto realice un sondeo al azar del cálculo realizado.
5.- De ser necesario realice correcciones manuales de los PVP calculados, haciendo ajustes a su criterio.
6.- Realice pruebas sobre facturación, compras, egresos, etc, verifique que los cálculos que está generando su sistema están correctos.

Recomendaciones para Usuarios de Omega

Para los usuarios de Omega, recomendamos:

1.- Ponerse en contacto con su técnico a cargo,
2.- Solicite la actualización del sistema a la versión 2016,
3.- Solicite asistencia técnica para el proceso de repreciación y redondeo.
4.- Antes de recibir los trabajos solicitados, realice todas las comprobaciones necesarias.

      Es todo, espero que todo lo expuesto sirva a nuestros clientes y en general a todas las personas que estén interesadas en este tema.

Atentamente,


MILTON CACHIPUENDO
Servysistem Online
Ibarra - Ecuador 
0986 104-104







martes, 17 de mayo de 2016

Ecuador IVA 14%, actualización OMEGA.


Un saludo a nuestros distinguidos clientes de ServySistem, específicamente aquellos que ya se encuentran utilizando nuestro software OMEGA. La finalidad de la presente entrada es para esclarecer aspectos importantes sobre el incremento del IVA al 14% que fue aprobado por la asamblea este 12 de mayo del 2016.

       En el proyecto de ley se establece que esta tarifa debe regir al menos por un año y será vigente a partir del 1 día del mes siguiente al que se publique en el registro oficial, es decir del 1 de junio del 2016 hasta 31 de mayo del 2017.

      Con este fin, hemos procedido ha preparar una actualización del sistema por única vez sobre la versión 2016, esto quiere decir que todos los sistemas de las versiones anteriores deberán ser actualizados, el costo pueden consultar con el técnico a cargo incluirá una visita técnica en la que se hará la instalación, se importará los datos de su sistema, se actualizará reportes relacionados y se dará una garantía de 60 días.

     En adelante el software de facturación desglosara del PVP al 12% hasta el 31 de mayo, el 1 de junio del 2016 desglosará al 14% hasta el 31 de mayo del 2017 y el 1 de junio del 2017 volverá al 12% en forma automática, todos los reportes, ventanas, procesos implicados en el cálculo cambiarán automáticamente entre tarifas según dice la ley y no necesita intervención del usuario, sin embargo es necesario que el usuario vaya estableciendo los nuevos precios PVP con los que sus entidades cobrarán a sus clientes el 1 de junio. Para aquellos clientes que manejan grandes cantidades de items como son farmacias, ferreterías, papelerías y bodegas  que requieren automatización en el cambio de precios, puede solicitar ayuda a su técnico a cargo para solicitar servicio recálculo por repreciación automatizado.

     Para personas naturales o jurídicas que requieran se les ayude en la repreciación automatizada de otros sistemas que no sean Omega y que admitan la tarifa 14%, puede consultarnos, estaremos gustosos de poderlos ayudar a simplificar este proceso.

      Cabe destacar que la versión 2016 trae algunas innovaciones e incluyen campos que permitirán facturación electrónica, también incluye la actualización de contribuyentes del SRI, cerca de 10000 productos memorizados. Ahora puede abrir una factura electrónica en formato .XML, hacerle un COPY y PEGAR en el egreso y automáticamente se llenarán los campos requeridos, para la contabilidad y anexo transaccional; y muchas mejoras que hacen eficiente el uso de su software favorito.

Atentamente,


MILTON CACHIPUENDO
Servysistem Online
Ibarra - Ecuador
0986 104-104