local h, he, hc
set proc to libfacturista additive
init_libfacturista()
rutaLlavePrivada="./aaa010101aaa__csd_01.key"
contrasena="12345678a"
rutaCertificado="./aaa010101aaa__csd_01.cer"
rutaDestino="./cfdi_sellado_vfp.xml"
xml2="./cfdi_timbrado_vfp.xml"
h=cfdi_comprobante("3.2", "A", "1234", "2013-09-08T18:43:11", "Pago en una sola exhibicion", "6172.50", "12.34", "USD", "7124.75", "Efectivo", "ingreso", "Campeche, Campeche", "3849", "", "", "", "")
he=cfdi_emisor(h,"AAA010101AAA","facturista.com")
if he=0
messagebox(cfdi_error(h))
return -1
endif
cfdi_emisor_regimen(he,"Regimen 1")
cfdi_emisor_regimen(he,"Regimen 2")
* el RFC de los clientes no debe contener guiones o espacios
hr=cfdi_receptor(h,"X&XX010101AAA","nombre_tu_cliente")
* los clientes deben tener desglosada su direccion para poder llenar los campos del receptor
cfdi_receptor_domicilio(hr,"Paseo de Montejo", "1234", "456", "Col. Europea", "Ciudad gotica", "Municipio de Merida", "Yucatan", "Mexico", "38294", "Por la cascada")
hc=cfdi_concepto(h,"10", "PZA", "1", "Memoria USB", "123.45", "1234.50")
cfdi_concepto_informacionaduanera(hc,"12345", "2011-01-01","Aduana nogales")
hc=cfdi_concepto(h,"10", "PZA", "2", "Memoria USB", "123.45", "1234.50")
cfdi_concepto_cuentapredial(hc,"3836463729385495")
hc=cfdi_concepto(h,"10", "PZA", "3", "Memoria USB", "123.45", "1234.50")
cfdi_concepto_parte(h,"10", "PZA", "3", "Parte 1", "123.45", "1234.50")
cfdi_concepto_parte(h,"10", "PZA", "3", "Parte 2", "123.45", "1234.50")
hc=cfdi_concepto(h,"10", "PZA", "4", "Memoria USB", "123.45", "1234.50")
cfdi_concepto_ComplementoConcepto(hc)
hc=cfdi_concepto(h,"10", "PZA", "5", "Memoria USB", "123.45", "1234.50")
hi=cfdi_impuestos(h,"35.35","987.60")
cfdi_impuestos_retencion(hi,"ISR","12.12")
cfdi_impuestos_retencion(hi,"IVA","23.23")
cfdi_impuestos_traslado(hi,"IVA", "987.60", "16.00")
cfdi_impuestos_traslado(hi,"IEPS", "0.00", "0.00")
messagebox("Cadena original:"+cfdi_cadena_original(h))
if(cfdi_sellar_pkcs8(h, rutaLlavePrivada, contrasena, rutaCertificado, rutaDestino,1)>0)
* Ecodex
lcparams="TransaccionID=123456789"
lcparams=lcparams+";RFC=AAA010101AAA;Servidor=pruebas.ecodex.com.mx;Puerto=2044"+";Sellar=1"
lnpac=1
* En modo DEMO pasamos la cadena vacia en el segundo parametro, para timbrar lo que hay en memoria
if cfdi_timbrar(h,"",xml2,lnpac,lcparams)>0
messagebox("timbrado con exito")
else
messagebox("Error al timbrar: "+cfdi_error(h))
endif
else
messagebox("Error al sellar: "+cfdi_error(h))
endif
clear dlls
close all
* facturista.com - Archivo de inclusion para FoxPro
#define hcfdi INTEGER
#define scfdi STRING
#define cfdires INTEGER
#define hconcepto INTEGER
#define himpuesto INTEGER
#define hnode INTEGER
function init_libfacturista()
declare;
string libfacturista_version in libfacturista
declare;
hcfdi cfdi_comprobante in libfacturista scfdi version, scfdi serie, scfdi folio, scfdi fecha,;
scfdi formaDePago, scfdi subTotal, scfdi TipoCambio, scfdi Moneda, scfdi total,;
scfdi metodoDePago, scfdi tipoDeComprobante, scfdi LugarExpedicion, scfdi NumCtaPago,;
scfdi FolioFiscalOrig, scfdi SerieFolioFiscalOrig, scfdi FechaFolioFiscalOrig, scfdi MontoFolioFiscalOrig
declare;
hcfdi cfdi_emisor in libfacturista hcfdi pcfdi, scfdi rfc, scfdi nombre
declare;
cfdires cfdi_emisor_regimen in libfacturista hcfdi pcfdi, scfdi Regimen
declare;
cfdires cfdi_emisor_domicilio in libfacturista hcfdi pcfdi, scfdi calle, scfdi noExterior, scfdi noInterior,;
scfdi colonia, scfdi localidad, scfdi municipio, scfdi estado, scfdi pais, scfdi codigoPostal, scfdi referencia
declare;
cfdires cfdi_emisor_expedido_en in libfacturista hcfdi pcfdi, scfdi calle, scfdi noExterior, scfdi noInterior,;
scfdi colonia, scfdi localidad, scfdi municipio, scfdi estado, scfdi pais, scfdi codigoPostal, scfdi referencia
declare;
hcfdi cfdi_receptor in libfacturista hcfdi pcfdi, scfdi rfc, scfdi nombre
declare;
cfdires cfdi_receptor_domicilio in libfacturista hcfdi pcfdi, scfdi calle, scfdi noExterior, scfdi noInterior,;
scfdi colonia, scfdi localidad, scfdi municipio, scfdi estado, scfdi pais, scfdi codigoPostal, scfdi referencia
declare;
himpuesto cfdi_impuestos in libfacturista hcfdi pcfdi, scfdi totalImpuestosRetenidos, scfdi totalImpuestosTrasladados
declare;
cfdires cfdi_impuestos_retencion in libfacturista hcfdi pcfdi, scfdi impuesto, scfdi importe
declare;
cfdires cfdi_impuestos_traslado in libfacturista hcfdi pcfdi, scfdi impuesto, scfdi importe, scfdi tasa
declare;
hconcepto cfdi_concepto in libfacturista hcfdi pcfdi, scfdi cantidad, scfdi unidad, scfdi noIdentificacion,;
scfdi descripcion, scfdi valorUnitario, scfdi importe
declare;
cfdires cfdi_concepto_informacionaduanera in libfacturista hconcepto hc, scfdi numero, scfdi fecha, scfdi aduana
declare;
cfdires cfdi_concepto_cuentapredial in libfacturista hconcepto hc, scfdi numero
declare;
cfdires cfdi_concepto_parte in libfacturista hconcepto hc, scfdi cantidad, scfdi unidad, scfdi noIdentificacion,;
scfdi descripcion, scfdi valorUnitario, scfdi importe
declare;
cfdires cfdi_concepto_ComplementoConcepto in libfacturista hconcepto hc
declare;
hcfdi cfdi_xml_cargar in libfacturista hcfdi h, scfdi rutaFuente
declare;
integer cfdi_xml_guardar in libfacturista hcfdi h, scfdi rutaDestino, integer decorar
declare;
integer cfdi_xml_validar in libfacturista hcfdi h, scfdi archivoXML, scfdi archivoXSD, scfdi parametros
declare;
integer cfdi_sellar_pkcs8 in libfacturista hcfdi h, scfdi rutaLlavePrivada, scfdi contrasena, scfdi rutaCertificado, scfdi rutaDestino, integer decorar
declare;
integer cfdi_sellar_pem in libfacturista hcfdi h, scfdi rutaLlavePrivada, scfdi contrasena, scfdi rutaCertificado, scfdi rutaDestino, integer decorar
declare;
integer cfdi_sellar in libfacturista hcfdi h, scfdi rutaLlavePrivada, scfdi rutaCertificado, scfdi rutaDestino, integer decorar
declare;
integer cfdi_timbrar in libfacturista hcfdi h, scfdi rutaFuente, scfdi rutaDestino, integer numeroPAC, scfdi parametros
declare;
integer cfdi_cancelar in libfacturista hcfdi h, integer numeroPAC, scfdi parametros
declare;
integer cfdi_recuperar in libfacturista hcfdi h, scfdi rutaDestino, integer numeroPAC, scfdi parametros
declare;
string cfdi_estado_cuenta in libfacturista hcfdi h, integer numeroPAC, scfdi parametros
declare;
STRING cfdi_error in libfacturista hcfdi h
declare;
STRING cfdi_resultado in libfacturista hcfdi h
declare;
STRING cfdi_xml_atributo in libfacturista hcfdi h, scfdi ruta, scfdi nombre
declare;
integer cfdi_xml_atributo_agregar in libfacturista hcfdi h, scfdi ruta, scfdi nombre, scfdi valor
declare;
integer cfdi_xml_atributo_borrar in libfacturista hcfdi h, scfdi ruta, scfdi nombre
declare;
STRING cfdi_cadena_original in libfacturista hcfdi h
declare;
STRING cfdi_cadena_original_sat in libfacturista hcfdi h
declare;
STRING cfdi_uuid in libfacturista hcfdi h
declare;
STRING cfdi_fecha_timbrado in libfacturista hcfdi h
declare;
STRING cfdi_numero_certificado_sat in libfacturista hcfdi h
declare;
STRING cfdi_sello_cfd in libfacturista hcfdi h
declare;
STRING cfdi_sello_sat in libfacturista hcfdi h
declare;
STRING cfdi_sello in libfacturista hcfdi h
declare;
STRING cfdi_fecha in libfacturista hcfdi h
declare;
STRING cfdi_numero_certificado in libfacturista hcfdi h, scfdi rutaCertificado
*// Call with root node and "acp" for windows programs not handling utf8
declare;
integer xml_caller_charset in libfacturista hnode h, scfdi charset
*// Return the node handler for the path specified, if h==0 it will return the root node
declare;
hnode xml_node in libfacturista hnode h, scfdi path
*// Return the number of children nodes
declare;
integer xml_node_children_number in libfacturista hnode h
*// Return a node handler for the index-th child, it is 1-based
declare;
hnode xml_node_by_index in libfacturista hnode h, integer index
*// Return the node name
declare;
string xml_node_name in libfacturista hnode h
*// Return a node handler for the child with the asked name
declare;
hnode xml_node_by_name in libfacturista hnode h, scfdi name
*// Return the value of the asked attribute, empty if it does not exist
declare;
string xml_node_attribute in libfacturista hnode h, scfdi name
declare;
integer cfdi_timbrar_lote in libfacturista hcfdi h, scfdi rutaFuente, scfdi rutaDestino, scfdi parametrosLote, integer numeroPAC, scfdi parametrosPAC
declare;
integer xml_insert in libfacturista integer h, string path, string XMLstring, integer indexFather, integer indexChildren
declare;
string xml_serialize in libfacturista integer h, integer decorate
declare;
integer cfdi_validar in libfacturista hcfdi h, scfdi archivoXML, scfdi parametros
return .T.
endfunc
* Extendemos las funciones, usando el acceso a los nodos XML
function cfdi_tfd_version(hcfdi)
local lcruta
lcruta="cfdi:Comprobante/cfdi:Complemento/tfd:TimbreFiscalDigital"
return cfdi_xml_atributo(hcfdi,lcruta,"version")
endfunc
function cfdi_tfd_uuid(hcfdi)
local lcruta
lcruta="cfdi:Comprobante/cfdi:Complemento/tfd:TimbreFiscalDigital"
return cfdi_xml_atributo(hcfdi,lcruta,"UUID")
endfunc
function cfdi_tfd_fecha(hcfdi)
local lcruta
lcruta="cfdi:Comprobante/cfdi:Complemento/tfd:TimbreFiscalDigital"
return cfdi_xml_atributo(hcfdi,lcruta,"FechaTimbrado")
endfunc
function cfdi_tfd_sellocfd(hcfdi)
local lcruta
lcruta="cfdi:Comprobante/cfdi:Complemento/tfd:TimbreFiscalDigital"
return cfdi_xml_atributo(hcfdi,lcruta,"selloCFD")
endfunc
function cfdi_tfd_nocertificadosat(hcfdi)
local lcruta
lcruta="cfdi:Comprobante/cfdi:Complemento/tfd:TimbreFiscalDigital"
return cfdi_xml_atributo(hcfdi,lcruta,"noCertificadoSAT")
endfunc