Вы находитесь на странице: 1из 19

SDK de los sistemas

comerciales en Visual
Basic .NET

contpaqi.com
Aviso de derechos del propietario
Este Manual es una Obra Literaria protegida en favor de Computacin en Accin, S.A. de C.V.; Copyright 2004
Derechos Reservados 2004 Computacin en Accin, S.A. de C.V., Pablo Villaseor No. 435, Col. Ladrn de
Guevara, Guadalajara, Jalisco, Mxico. C.P. 44600. Los Derechos de este Manual se encuentran reconocidos por la
Ley Federal del Derecho de Autor. Se prohbe su produccin, reproduccin, publicacin, edicin o fijacin material en
copias o ejemplares, por cualquier medio, importacin, almacenamiento, transporte, distribucin, comercializacin,
venta o arrendamiento, as como su comunicacin y transmisin pblica por cualquier medio, su divulgacin en
cualquier modalidad, su traduccin, adaptacin, parfrasis, arreglos, transformaciones u otras similares, sin previa
autorizacin por escrito de su titular. La violacin de esta prohibicin constituyen un delito y una infraccin
administrativa que estn sancionados conforme a los artculos 424 fraccin III, 424 bis fraccin I y 424 ter, del Cdigo
Penal Federal; as como los artculos 229 fracciones VII y XVI y 231 fracciones I, III, IV y X, de la Ley Federal del
Derecho de Autor y dems normas aplicables vigentes.

Las marcas COMPUTACIN EN ACCIN , EN ACCIN , PAQ y sus respectivos diseos; la marca y nombre
comercial COMPAC y su diseo; las marcas ES TIEMPO DE PODER , LA CONEXIN DE TU NEGOCIO , TU
NEGOCIO SIEMPRE EN MARCHA , SOAR. PODER. CRECER. ; los avisos comerciales "Bien Pensado" ,
"Respuesta Oportuna" , y "La Forma ms Amigable de Controlar tu Negocio" ; as como la Imagen del
Foquito y del Diseo de la Portada , son signos distintivos registrados y protegidos propiedad de
Computacin en Accin, S.A. de C.V.

AdminPAQ , MegaPAQ , Exin , ContPAQ , CheqPAQ , NomiPAQ , WinPAQ , Solucin


Contable PAQ y Ventpaq , tambin son marcas registradas y protegidas propiedad de Computacin en Accin,
S.A. de C.V., la que ostenta de igual forma los derechos patrimoniales de autor; con excepcin del programa de
cmputo que ostenta la marca VentPAQ, cuyos derechos patrimoniales pertenecen a Pacific Soft, S.A. de C.V.

Microsoft , MS-D.O.S. , WINDOWS y Excel , son marcas y en su caso productos de Microsoft


Corporation.

Cualquier otra marca que se mencione dentro de este manual que pertenezca a terceras partes tiene solamente
propsitos informativos y no constituye aprobacin y/o recomendacin. Computacin en Accin, no se responsabiliza
de la ejecucin o uso de estos productos.

20140116
SDK de los sistemas comerciales en Visual Basic .NET
Visin general

Introduccin Este documento contiene la informacin necesaria para utilizar el SDK para el desarrollo de
aplicaciones externas creadas en Visual Basic .NET que enven informacin a los siguientes
sistemas comerciales de CONTPAQ i:

AdminPAQ
CONTPAQ i FACTURA ELECTRNICA

Objetivo En este documento conocers:


Cmo declarar funciones del SDK de los sistemas comerciales en Visual Basic .NET

En este Este documento contiene los siguientes captulos:


docu
ment
o

Tema Pgina
SDK de los sistemas comerciales en Visual Basic .NET I
Visin general I
Introduccin II
Visin general II
Documentacin III
Diagrama para crear un desarrollo en SDK IV
1 Establecer directorio del SDK 1
Visin general 1
2 - Declaraciones del SDK 3
Funciones 3
Constantes 6
Estructuras 7
3 Iniciar el SDK 9
Visin general 9
4 Abrir la empresa 10
Visin general 10
5 Realizar las operaciones deseadas 11
Visin general 11
6 Cerrar la empresa 12
Visin general 12
7 Terminar SDK 13
Visin general 13

Computacin en Accin, S.A. de C.V.


Derechos Reservados
Pgina
contpaqi.com
I
Introduccin
Visin general

Introduccin En este captulo conocers los conceptos bsicos del SDK de los sistemas comerciales, qu
es, para qu sirve y dnde encontrar documentacin para su uso.

Sistemas El SDK de los sistemas comerciales de CONTPAQ i que se explica en este documento
come funciona para:
rciale
s AdminPAQ
CONTPAQ i FACTURA ELECTRNICA

El SDK es bsicamente el mismo para los 2 sistemas solo cambian algunas instrucciones que
se explicarn a lo largo de este documento.

Qu es el SDK El SDK es un grupo de funciones creadas en C++ que permiten leer y guardar informacin en
la Base de Datos de los sistemas comerciales de CONTPAQ i.

El acceso del SDK es de lectura y escritura.


Controla la concurrencia en un ambiente multiusuario.
Respeta las reglas de negocio por lo que aseguran la integridad de la Base de
Datos.
No es necesario conocer la estructura de la base de datos.
Estas funciones estn almacenadas en el archivo MGW_SDK.DLL

Nota: El SDK solo funciona en versiones de Office de 32 bits.

Computacin en Accin, S.A. de C.V.


Derechos Reservados
Pgina
contpaqi.com
II
Documentacin

Documentacin Al instalar AdminPAQ se agrega en el grupo de programas Ayuda, un archivo con el listado
de funciones del SDK de AdminPAQ as como informacin para la utilizacin de esta librera.
Aqu encontrars la sintaxis de las funciones, los parmetros y los valores que retorna cada
una de ellas, definicin de estructuras y constantes.

MGW_SDK.h Las funciones del SDK fueron creadas en C++.

En la ruta C:\Archivos de programa\Compacw\AdminPAQ\SDK se encuentra el archivo


MGW_SDK.h que contiene la declaracin de las funciones, estructuras y constantes del SDK
definidas en C++.

Tambin puedes apoyarte de este archivo para ver la declaracin de las funciones y sus
parmetros tal cual como las recibe C++.

Computacin en Accin, S.A. de C.V. Pgina


Derechos Reservados III
Diagrama para crear un desarrollo en SDK

Pasos para el Pasos generales para crear un desarrollo utilizando el SDK.


uso
del
SDK

1 Establecer el directorio del SDK


Para esto, puedes utilizar la funcin de Windows SetCurrentDirectory.

2 Declaraciones del SDK


Declara: Funciones, estructuras y constantes de longitud del SDK.

3 Iniciar SDK
Inicializa el SDK con la funcin fSetNombrePAQ.

4 Abrir la empresa
Abre la empresa con la funcin fAbreEmpresa.

5 Realizar las operaciones deseadas


Despus de ejecutar todos los pasos anteriores puedes realizar las operaciones
deseadas como crear clientes, productos, documentos, etctera.

6 Cerrar la empresa
Antes de salir de tu aplicacin cierra la empresa con la funcin fCierraEmpresa.

7 Terminar el SDK
Finaliza el SDK con la funcin fTerminaSDK.

Pgina Computacin en Accin, S.A. de C.V.


IV Derechos Reservados
1 Establecer directorio del SDK
Visin general

Introduccin El primer paso para poder usar el SDK de los sistemas comerciales es establecer el directorio
donde est ubicado el archivo MGW_SDK.DLL.

Este archivo se encuentra por omisin en las siguientes rutas:

Ubicacin del El archivo MGW_SDK.DLL se instala por omisin en las siguientes carpetas:
MGW
_SDK
.DLL

Sistema Ubicacin
AdminPAQ C:\Archivos de Programa\Compacw\AdminPAQ
CONTPAQ i FACTURA ELECTRNICA C:\Archivos de Programa\Compacw\Facturacion

Registro de Si instalaste el sistema en otra ubicacin podrs saber la carpeta donde se encuentra el
Wind archivo MGW_SDK.DLL leyendo las siguientes llaves del registro de Windows:
ows

Sistema Ubicacin
AdminPAQ HKEY_LOCAL_MACHINE\SOFTWARE\Computacin en Accin, SA
CV\AdminPAQ\DIRECTORIOBASE
CONTPAQ i FACTURA ELECTRNICA HKEY_LOCAL_MACHINE\SOFTWARE\Computacin en Accin, SA
CV\ CONTPAQ I Facturacion\DIRECTORIOBASE

Funcin de Para establecer este directorio puedes utilizar la funcin SetCurrentDirectory de la librera
Wind de Windows Kernel32.dll
ows

Declaracin de la El siguiente cdigo muestra la declaracin de la funcin SetCurrentDirectory la cual


funci establece un directorio activo.
n

Declaracin de la funcin para establecer un directorio actual


Public Declare Function SetCurrentDirectory Lib "KERNEL32" Alias
"SetCurrentDirectoryA" (ByVal pPtrDirActual As String) As Integer

Continaenlasiguientepgina

Computacin en Accin, S.A. de C.V.


Derechos Reservados
Pgina
contpaqi.com
1
Visin general, Continuacin

Llamado de la El siguiente cdigo muestra el llamado a la funcin SetCurrentDirectory que establece el


funci directorio activo almacenado en la llave del sistema AdminPAQ. Si deseas acceder a otro
n sistema asigna la llave correspondiente indicada en la tabla anterior.

' Se asigna a una variable la llave del registro de Windows de


AdminPAQ.
Dim sLlaveSis = ""

sLlaveSis = "HKEY_LOCAL_MACHINE\SOFTWARE\Computacin en Accin, SA


CV\AdminPAQ"

' Se lee el valor de la llave DIRECTORIO BASE, la cual contiene la


ruta donde est ubicado el archivo MGW_SDK.DLL
Dim lRutaBinarios = My.Computer.Registry.GetValue(sLlaveSis,
"DIRECTORIOBASE", Nothing)

' Se establece como directorio actual la ruta donde est ubicado el


archivo MGW_SDK.DLL
SetCurrentDirectory(lRutaBinarios)

Computacin en Accin, S.A. de C.V.


Derechos Reservados
Pgina
contpaqi.com
1
2 - Declaraciones del SDK
Funciones

Qu son Las funciones del SDK permiten la lectura y escritura en la base de datos de los sistemas. De
esta forma podrs enviar informacin a los sistemas comerciales.

Tipos En el SDK existen 2 tipos de funciones:

Alto nivel. Usan estructuras


Bajo nivel. No usan estructuras

Lenguajes y Solo podrs usar funciones de alto nivel en tu proyecto si el lenguaje de programacin que
tipos ests utilizando soporta el manejo de estructuras de datos.
de
funci Ejemplos de lenguajes que s soportan el uso de Estructuras de Datos: Visual Basic for
ones Applications, Visual Basic, C#.

Ejemplo de un lenguaje que no soporta el uso de Estructuras de Datos: Visual Fox.

Documentacin Para ver la sintaxis de las funciones y sus parmetros, auxliate de los archivos SDK de
AdminPAQ.pdf y MGW_SDK.h.

Valores de En general la mayora de las funciones del SDK regresan un entero el cual ser:
retor
no 0 (cero). Si la funcin se ejecut con xito.
Diferente de cero. Retorna el nmero del error.

Parmetros de Las funciones pueden recibir parmetros los cuales tienen un tipo y un uso:
las
funci Tipo. Enteros, Largos, Cadenas, Booleanos, etctera. En el caso de las funciones
ones de alto nivel reciben como parmetro una estructura que previamente tuvo que
haber sido declarada.
Uso.
o Por valor. Este tipo de declaracin se utiliza para los datos que se envan
a la funcin.
o Por referencia. Este tipo de declaracin se utiliza para recibir datos
regresados por la funcin.

Continaenlasiguientepgina

Computacin en Accin, S.A. de C.V. Pgina


Derechos Reservados 3
Funciones, Continuacin

Consejos A continuacin se listan los siguientes consejos en la declaracin de funciones:


gener
ales Siempre ten en cuenta que las funciones del SDK estn en C++, el objetivo al
declarar las funciones en tu lenguaje es pasar los tipos de datos que C++ pueda
recibir. Busca el tipo de datos en tu lenguaje que coincida mejor con el tipo de C++.
En C++ no existe el tipo String sino que todas las cadenas son apuntadores a una
cadena de tipo Char *. Por lo que, en lenguajes que soporten datos de tipo String,
se recomienda hacer siempre la declaracin del parmetro Por valor.
Si al usar una funcin recibes un error de tipo Intento de escribir en memoria
protegida es porque ests utilizando un parmetro con tipo de datos incorrecto o
porque no lo ests pasando de forma correcta (Por Valor o Por Referencia).

Parmetros en Enseguida se muestra una tabla con los tipos de datos de los parmetros de funciones para
VB las declaraciones recomendados en Visual Basic .NET:
.NET
SDK de AdminPAQ.pdf VB .NET
Tipo Cadena Declaracin
Cadena Por Valor ByVal parametro as String
*Cadena Por Referencia ByVal parametro as String
Entero Por Valor ByVal parametro as Integer
Entero Por Referencia ByRef parametro as Integer
Entero Largo Por Valor ByVal parametro as Long
Entero Largo Por Referencia ByRef parametro as Long
Doble Por Valor ByVal parametro as Double
Doble Por Referencia ByRef parametro as Double
Bool Por Valor ByVal parametro as Boolean
Unsigned char Por Valor ByVal parametro as Byte
Estructuras (Dato Por Referencia estructura as tEstructura
abstracto)

*Importante: En C++ las cadenas son apuntadores a datos de tipo Char, por lo que ya se
reciben por referencia, debido a esto, en VB .NET siempre declara todas las cadenas Por
valor (incluso si en la documentacin dice que su uso es Por Referencia).

Cadenas Si el parmetro de la funcin es una cadena y va a regresar un valor puedes declarar ese
parmetro de 2 formas:

Como String. En el siguiente ejemplo el parmetro aMensaje recibe un valor y se


declara como String. Al momento de asignarle el valor a este parmetro dimensiona
el tamao de la variable con la instruccin space(variable).
Public Declare Sub fError Lib "MGW_SDK.DLL" (ByVal aNumError As
Integer, aMensaje As String, ByVal aLen As Integer)

Como StringBuilder. En el siguiente ejemplo el parmetro aMensaje recibe un


valor y se declara como StringBuilder.
Public Declare Sub fError Lib "MGW_SDK.DLL" (ByVal aNumError As
Integer, aMensaje As StringBuilder, ByVal aLen As Integer)

Importante: Los tipos de datos StringBuilder requieren de la declaracin de la librera


Imports System.Text.

Continaenlasiguientepgina

Pgina Computacin en Accin, S.A. de C.V.


4 Derechos Reservados
Funciones, Continuacin

Ejemplo VB .NET A continuacin se muestra un ejemplo de declaracin de una funcin en VB .NET, observa
cmo estn definidas en el archivo PDF y cmo se declara en VB .NET:

Documentacin en archivo PDF:

Declaracin en VB .NET:

Public Declare Function fSiguienteFolio Lib "MGW_SDK.DLL" (ByVal


aCodigoConcepto As String, aSerie As String, ByRef aFolio As Double)
As Integer

Observa lo siguiente:

El campo aCodigoConcepto se define como String (Cadena) Por referencia.


El campo aSerie se declara como tipo String.
El campo aFolio se define como Double y el uso es Por Referencia (ByRef).
El valor que regresa la funcin es un Integer (Entero).

Computacin en Accin, S.A. de C.V. Pgina


Derechos Reservados 5
Constantes

Constantes Opcionalmente se sugiere declarar constantes de longitud para los datos de tipo cadena que
se utilizarn en las estructuras.

Documentacin Para ver las longitudes de las constantes, auxliate de los archivos SDK de AdminPAQ.pdf
(seccin Tipos de dato Abstractos del SDK) y MGW_SDK.h.

Caracter nulo En la documentacin se define el tamao de las constantes de tipo cadena, es importante
sumar 1 caracter al tamao, correspondiente al caracter nulo.

Declarar Enseguida se muestra un ejemplo de declaraciones de constantes.


const
antes

' Constantes y estructuras


Public Const kLongCodigo As Integer = 30 + 1
Public Const kLongNombre As Integer = 60 + 1
Public Const kLongNombreProducto As Integer = 255 + 1
Public Const kLongFecha As Integer = 23 + 1
Public Const kLongAbreviatura As Integer = 3 + 1
Public Const kLongCodValorClasif As Integer = 3 + 1
Public Const kLongTextoExtra As Integer = 50 + 1
Public Const kLongNumSerie As Integer = 11 + 1
Public Const kLongReferencia As Integer = 20 + 1
Public Const kLongSeries As Integer = 30 + 1
Public Const kLongDescripcion As Integer = 60 + 1
Public Const kLongNumeroExtInt As Integer = 6 + 1
Public Const kLongCodigoPostal As Integer = 6 + 1
Public Const kLongTelefono As Integer = 15 + 1
Public Const kLongEmailWeb As Integer = 50 + 1
Public Const kLongRFC As Integer = 20 + 1
Public Const kLongCURP As Integer = 20 + 1
Public Const kLongDesCorta As Integer = 20 + 1
Public Const kLongDenComercial As Integer = 50 + 1
Public Const kLongRepLegal As Integer = 50 + 1
Public Const kLongNumeroExpandido As Integer = 30 + 1
Public Const kLongMsgError As Integer = 512

Pgina Computacin en Accin, S.A. de C.V.


6 Derechos Reservados
Estructuras

Qu son Las estructuras definen los datos con sus tipos y longitudes pertenecientes a un objeto.

Ejemplo: La estructura tDocumento define los datos que incluye este objeto, como su Folio,
Serie, Fecha, Total, etctera.

Funciones de Las funciones de alto nivel reciben como parmetro una estructura. Para utilizarlas el
alto lenguaje de programacin que manejes deber soportar el uso de estructuras.
nivel

Documentacin Para ver la sintaxis de las estructuras, auxliate de los archivos SDK de AdminPAQ.pdf
(seccin Tipos de dato Abstractos del SDK) y MGW_SDK.h.

Caracter nulo En la documentacin se define el tamao de las constantes de tipo cadena, es importante
sumar un caracter al tamao, correspondiente al caracter nulo.

Tipos de datos Enseguida se muestra una tabla con los tipos de datos en VB .NET:
en
VB SDK de AdminPAQ.pdf VB .NET
.NET Tipo Declaracin
Cadena String
Entero Integer
Entero Largo Long
Doble Double

Ejemplo VB .NET A continuacin se muestra un ejemplo de declaracin de una estructura en VB .NET, observa
cmo estn definidas en el archivo PDF y cmo se declara en VB .NET:

Documentacin en archivo PDF:

Nota: kLongCodigo y kLongReferencia son constantes de longitud definidas


previamente.

Continaenlasiguientepgina

Computacin en Accin, S.A. de C.V. Pgina


Derechos Reservados 7
Estructuras, Continuacin

Declarar El siguiente ejemplo muestra la declaracin de la estructura para movimientos.


Estru
ctura Observa que los datos de tipo String tienen definido un tamao fijo en base a las constantes
s previamente definidas.

Las constantes de longitud previamente definidas son: kLongCodigo y kLongReferencia.

' Estructura para Movimientos


<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi,
Pack:=4)>
Public Structure tMovimiento
Public aConsecutivo As Integer
Public aUnidades As Double
Public aPrecio As Double
Public aCosto As Double
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=kLongCodigo)>
Public aCodProdSer As String
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=kLongCodigo)>
Public aCodAlmacen As String
<MarshalAs(UnmanagedType.ByValTStr,
SizeConst:=kLongReferencia)> Public aReferencia As String
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=kLongCodigo)>
Public aCodClasificacion As String
End Structure

Tamaos de los Es importante que el tamao de las cadenas sea exacto al que se especifica en la
datos documentacin. Para el caso de VB .NET se utiliza el parmetro SizeConst para definir el
tamao exacto de la cadena.

Pgina Computacin en Accin, S.A. de C.V.


8 Derechos Reservados
3 Iniciar el SDK
Visin general

Inicializar SDK Una vez que ya estableciste el directorio donde se ubica el archivo MGW_SDK.DLL debers
inicializar el SDK para esto:

Declara y llama la funcin fSetNombrePAQ(aSistema) dependiendo el sistema:

Sistema a usar Sistema


AdminPAQ fSetNombrePAQ(AdminPAQ)
CONTPAQ i FACTURA fSetNombrePAQ(CONTPAQ I Facturacion)
ELECTRNICA

Nota: Para el caso exclusivo de AdminPAQ tambin se puede inicializar el SDK a travs de
la funcin fInicializaSDK(). Pero es importante que uses solo una de las dos funciones
(fInicializaSDK o fSetNombrePAQ) para que no inicialices el SDK 2 veces.

Recomendacin: Se recomienda inicializar solo una vez el SDK por proyecto.

Declarar El siguiente cdigo declara la funcin fSetNombrePAQ la cual se utiliza para inicializar el
fSetN SDK.
ombr
ePAQ

' Funcin para inicializar el SDK


Public Declare Function fSetNombrePAQ Lib "MGW_SDK.DLL" (ByVal
aNombrePAQ As String) As Integer

Inicializar SDK El siguiente ejemplo inicializa el SDK en CONTPAQ i FACTURA ELECTRNICA. Si deseas
inicializar el SDK de AdminPAQ, cambia el parmetro por AdminPAQ.

' Funcin para inicializar el SDK en CONTPAQ i FACTURA ELECTRNICA


fSetNombrePAQ("CONTPAQ I Facturacion")

Computacin en Accin, S.A. de C.V. Pgina


Derechos Reservados 9
4 Abrir la empresa
Visin general

Abrir empresa Despus de inicializar el SDK debers abrir la empresa con la funcin fAbreEmpresa.

Declarar El siguiente cdigo declara la funcin para abrir empresas.


fAbre
Empr
esa

' Funciones para Abrir la empresa


Public Declare Function fAbreEmpresa Lib "MGW_SDK.DLL" (ByVal
aEmpresa As String) As Integer

Abrir Empresa El siguiente cdigo abre la empresa ubicada en la carpeta MiEmpresa.

' Abre la empresa


fAbreEmpresa("C:\CompacW\Empresas\MiEmpresa")

Pgina Computacin en Accin, S.A. de C.V.


10 Derechos Reservados
5 Realizar las operaciones deseadas
Visin general

Introduccin Despus de abrir la empresa podrs realizar las operaciones deseadas como crear clientes,
productos, documentos, etctera.

Operaciones En la siguiente tabla se muestran las funciones del SDK requeridas para realizar las
comu operaciones ms comunes:
nes

Operacin Funciones del SDK


Crear producto fAltaProducto
Editar producto fBuscaIdProducto
fEditaProducto
fSetDatoProducto
fGuardaProducto
Crear clientes fAltaCteProv
Editar clientes fBuscaIdCteProv
fEditaCteProv
fSetDatoCteProv
fGuardaCteProv
Crear documentos fSiguienteFolio
fAltaDocumento
fAltaMovimiento
fAfectaDocto_Param
Crear documentos con series o lotes fSiguienteFolio
fAltaDocumento
fAltaMovimiento
fAltaMovimientoSeriesCapas
fCalculaMovtoSerieCapa
fAfectaDocto_Param
Timbrar y entregar documentos fInicializaLicenseInfo
fEmitirDocumento
fEntregEnDiscoXML
Timbrar XML fInicializaLicenseInfo
fTimbraXML

Computacin en Accin, S.A. de C.V. Pgina


Derechos Reservados 11
6 Cerrar la empresa
Visin general

Cerrar empresa Antes de salir de tu aplicacin cierra la empresa con la funcin fCierraEmpresa.

Declarar El siguiente cdigo declara la funcin que cierra la empresa que se abri previamente.
fCierr
aEmp
resa
' Funcin para Cerrar la empresa
Public Declare Sub fCierraEmpresa Lib "MGW_SDK.DLL" ()

Cierra Empresa El siguiente cdigo declara la funcin que cierra la empresa que se abri previamente.

' Cierra la empresa


fCierraEmpresa()

Pgina Computacin en Accin, S.A. de C.V.


12 Derechos Reservados
7 Terminar SDK
Visin general

Terminar SDK Al terminar de utilizar el SDK debers usar la funcin fTerminaSDK para finalizar la conexin
a este.

Declarar El siguiente cdigo declara la funcin para terminar la sesin de SDK.


fTerm
inaS
DK
' Funcin para terminar el SDK
Public Declare Sub fTerminaSDK Lib "MGW_SDK.DLL" ()

Termina SDK El siguiente cdigo termina la sesin del SDK.

' Termina el SDK


fTerminaSDK()

Computacin en Accin, S.A. de C.V. Pgina


Derechos Reservados 13