PDA

Ver la Versión Completa : C++Builder 6 CFDI Mexico ¿Como agregar Concepto ?


JXJ
04-03-2016, 08:21:07
Hola

¿Alguien sabe como se puede generar el xml y agregar nodos del tipo concepto ?

importe el XSD http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd

no se como hacer el codigo

Cualquier ayuda es bienvenida.

Gracias.

juanelo
05-03-2016, 01:19:49
Pregunta: ¿estas de cero en CFDI o quieres agregar complementos concepto ?

JXJ
05-03-2016, 03:59:44
Hola juanelo

Estoy en ceros por que no se si lo estoy haciendo bien. de xml no tengo ni idea

este es el codigo de el boton genera xml





//---------------------------------------------------------------------------
void __fastcall TForm1::BtnFacturaGenerarClick(TObject *Sender)
{
log("Iniciamos Generacion de XML");
TXMLDocument* fDocXML = new TXMLDocument("");


fDocXML->Active = true;
fDocXML->Version = "1.0";
fDocXML->Encoding = "UTF-8";
fDocXML->StandAlone = "yes";

Comprobante = GetComprobante(XMLDocument1);

_di_IXMLComprobante CFDI32 = GetComprobante(fDocXML);

CFDI32->version = "3.2";
CFDI32->certificado = EditCertNum->Text;
CFDI32->sello = "";
CFDI32->formaDePago = EditFormaDePago->Text;
CFDI32->condicionesDePago = EditCondicionesDePago->Text;
// CFDI32->fecha = FormatDateTime("yyyy-mm-dd""T""hh:nn:ss", Now() ); // no jala asi
CFDI32->fecha = FormatDateTime("yyyy-mm-dd", Now()) + "T" + FormatDateTime("hh:nn:ss", Now() );
CFDI32->folio = EditFolio->Text;
CFDI32->serie = EditSerie->Text;
CFDI32->LugarExpedicion = EditLugarDeExpedicion->Text;
CFDI32->subTotal = EditFacturaSubtotal->Text;
CFDI32->TipoCambio = "0.0";
CFDI32->Moneda = "Pesos";
// CFDI32->descuento = ;
// CFDI32->motivoDescuento = ;
CFDI32->total = EditFacturaTotalFinal->Text;
CFDI32->tipoDeComprobante = EditTipoDeCFDI->Text;
CFDI32->metodoDePago = EditMetodoDePago->Text;
CFDI32->LugarExpedicion = EditLugarDeExpedicion->Text;
CFDI32->DeclareNamespace("cfdi","http://www.sat.gob.mx/cfd/3") ;
CFDI32->SetAttribute("xsi:schemaLocation" , "http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd");
CFDI32->SetAttribute("xmlns:tfd" , "http://www.sat.gob.mx/TimbreFiscalDigital"); // no se respeta el texto solo pone TRUE
CFDI32->SetAttribute("xmlns:xs" , "http://www.w3.org/2001/XMLSchema"); // no se respeta el texto solo pone TRUE
CFDI32->SetAttribute("xmlns:xsi" , "http://www.w3.org/2001/XMLSchema-instance");// no se respeta el texto solo pone TRUE

CFDI32->Emisor->rfc = EditEmisorRFC->Text;
CFDI32->Emisor->nombre = EditEmisorNombre->Text;

CFDI32->Emisor->DomicilioFiscal->calle = EditEmisorCalle->Text ;
CFDI32->Emisor->DomicilioFiscal->noExterior = EditEmisorNumExt->Text;
CFDI32->Emisor->DomicilioFiscal->noInterior = EditEmisorNumInt->Text;
CFDI32->Emisor->DomicilioFiscal->colonia = EditEmisorColonia->Text;
CFDI32->Emisor->DomicilioFiscal->localidad = EditEmisorLocalidad->Text;
CFDI32->Emisor->DomicilioFiscal->municipio = EditEmisorMun->Text;
CFDI32->Emisor->DomicilioFiscal->estado = EditEmisorEstado->Text;
CFDI32->Emisor->DomicilioFiscal->pais = EditEmisorPais->Text;
CFDI32->Emisor->DomicilioFiscal->codigoPostal = EditEmisorCP->Text;
CFDI32->Emisor->ExpedidoEn->calle = EditEmisorExpedidoEnCalle->Text;
CFDI32->Emisor->ExpedidoEn->noExterior = EditEmisorExpedidoEnNumExt->Text;
CFDI32->Emisor->ExpedidoEn->noInterior = EditEmisorExpedidoEnNumInt->Text;
CFDI32->Emisor->ExpedidoEn->colonia = EditEmisorExpedidoEnColonia->Text;
CFDI32->Emisor->ExpedidoEn->localidad = EditEmisorExpedidoEnLocalidad->Text;
CFDI32->Emisor->ExpedidoEn->referencia = EditEmisorExpedidoEnRef->Text;
CFDI32->Emisor->ExpedidoEn->municipio = EditEmisorExpedidoEnMun->Text;
CFDI32->Emisor->ExpedidoEn->estado = EditEmisorExpedidoEnEstado->Text;
CFDI32->Emisor->ExpedidoEn->pais = EditEmisorExpedidoEnPais->Text;
CFDI32->Emisor->ExpedidoEn->codigoPostal = EditEmisorExpedidoEnCP->Text;

CFDI32->Emisor->RegimenFiscal->Add()->Regimen = EditEmisorRegimen->Text;

CFDI32->Receptor->rfc = EditReceptorRFC->Text;
CFDI32->Receptor->nombre = EditReceptorNombre->Text;
CFDI32->Receptor->Domicilio->calle = EditReceptorCalle->Text;
CFDI32->Receptor->Domicilio->noExterior = EditReceptorNumExt->Text;
CFDI32->Receptor->Domicilio->noInterior = EditReceptorNumInt->Text;
CFDI32->Receptor->Domicilio->colonia = EditReceptorColonia->Text ;
CFDI32->Receptor->Domicilio->localidad = EditReceptorLocalidad->Text;
CFDI32->Receptor->Domicilio->referencia = EditReceptorReferencia->Text;
CFDI32->Receptor->Domicilio->municipio = EditReceptorMun->Text;
CFDI32->Receptor->Domicilio->estado = EditReceptorEstado->Text;
CFDI32->Receptor->Domicilio->pais = EditReceptorPais->Text;
CFDI32->Receptor->Domicilio->codigoPostal = EditReceptorCP->Text;


CFDI32->Conceptos->Add();// me genera un nodo conceptos vacio







/* Me genera un nodo por cada Add() con solo un miembro.
CFDI32->Conceptos->Add()-> cantidad = EditConceptoCantidad->Text;
CFDI32->Conceptos->Add()->unidad = EditConceptoUnidad->Text;
CFDI32->Conceptos->Add()->descripcion = EditConceptoDescripcion->Text;
CFDI32->Conceptos->Add()->valorUnitario = EditConceptoValorUnitario->Text;
CFDI32->Conceptos->Add()->importe = EditConceptoTotal->Text;
*/
/* Me genera un nodo por cada Add() con solo un miembro.
CFDI32->Impuestos->Traslados->Add()->impuesto = EditFacturaImpuestoNombre->Text ;
CFDI32->Impuestos->Traslados->Add()->tasa = EditFacturaTasa->Text;
CFDI32->Impuestos->Traslados->Add()->importe = EditFacturaImporte->Text;
*/

/* no se como agregar el timbre*/
// CFDI32->Complemento-> ->Traslados->Add()->importe = ;




log("guardamos el XML CFDI en ");
fDocXML->SaveToFile( "Pruebna1.xml");

SynEdit1->Lines->LoadFromFile("Pruebna1.xml");

}

tmsanchez
07-03-2016, 22:39:18
Hola.

Hay un proyecto en Delphi para factura electrónica de México(CFDI) que probablemente te sirva como referencia acerca de los nodos:

https://github.com/bambucode/tfacturaelectronica

el código para crear un CFDI se encuentra aquí:

https://github.com/bambucode/tfacturaelectronica/blob/master/Ejemplo/EjemploFacturaElectronica.dpr


En cuanto al tema de XML hay una serie de artículos (también en delphi) que muestran el uso de los componentes para generar XML, no creo que sea muy complicado pasarlo a C++:

http://delphiallimite.blogspot.mx/2007/10/trabajando-con-documentos-xml.html
http://delphiallimite.blogspot.mx/2007/10/trabajando-con-documentos-xml-ii.html
http://delphiallimite.blogspot.mx/2007/10/trabajando-con-documentos-xml-y-iii.html

Saludos.