Imagen

DESCARGA SOFTWARE PARA FACTURA ELECTRONICA DE AQUI.
Facturacion, Validacion, Addendas, Librerias de programacion, etc.


CARTA PORTE V3.1

ECODEX TIENE ESTOS NUEVOS DATOS DE CONTACTO :
Comercializacion y Ventas - Evelia Vicke evicke@ecodex.com.mx 33-16-03-03-48
Soporte - Humberto Guerrero soporte@ecodex.com.mx 33-34-90-46-03


.

Namespace prefix (o porque aparece cfdi: en nodos del CFDI)

La factura esta basada en XML, independiente del lenguaje de programacion todos debemos saber acerca de esta tecnologia
[[ FORO CERRADO DEBIDO A QUE YA LA INFORMACION YA NO ES VIGENTE ]]
Cerrado
Avatar de Usuario
Dado
Mensajes: 15933
Registrado: Mar Jul 06, 2010 7:56 pm

Namespace prefix (o porque aparece cfdi: en nodos del CFDI)

Mensaje por Dado »

Conflicto entre nombre.
En XML los nombres de los elementos son definidos por el desarrollador. A menudo esto resulta en un conflicto cuando se trata de mezclar documentos XML de diferentes aplicaciones

Este XML contiene informacion de una tabla HTML

Código: Seleccionar todo

<table>
  <tr>
    <td>Apples</td>
    <td>Bananas</td>
  </tr>
</table>
Este XML contiene informacion de una mesa (table = "mesa" en ingles)

Código: Seleccionar todo

<table>
  <name>African Coffee Table</name>
  <width>80</width>
  <length>120</length>
</table>
Si estos fragmentos de XML se juntam habria un conflicto, los dos contienen el elemento <table> pero tienen distintos contenidos y significados.

Un interprete de XML no sabria como manejar las diferencias.

Resolviendo el conflicto de nombre usando Prefijos

El conflicto de nombres en XML se puede evitar usando un "name prefix" (prefijo de nombre)

Código: Seleccionar todo

<h:table>
  <h:tr>
    <h:td>Apples</h:td>
    <h:td>Bananas</h:td>
  </h:tr>
</h:table>

<f:table>
  <f:name>African Coffee Table</f:name>
  <f:width>80</f:width>
  <f:length>120</f:length>
</f:table> 
En el ejemplo no hay comflicto porque los dos elementos <table> tienen distintos nombres.

XML Namespaces - El atributo xmlns

Cuando se usa prefijos en XML se debe definir "namespace"

Este namespace esta definido por el atributo xmlns en el primer nodo de un elemento

La declaracion del namespace sigue la siguiente sintaxis : xmlns:prefijo="URI"

Código: Seleccionar todo

<root>

<h:table xmlns:h="http://www.w3.org/TR/html4/">
  <h:tr>
    <h:td>Apples</h:td>
    <h:td>Bananas</h:td>
  </h:tr>
</h:table>

<f:table xmlns:f="http://www.w3schools.com/furniture">
  <f:name>African Coffee Table</f:name>
  <f:width>80</f:width>
  <f:length>120</f:length>
</f:table>

</root>
En el ejemplo anterior el atributo xmlns en la etiqueta <table> le da a h: y a f: un namespace adecuado.

Cuando se define un namespace para un elemento, todos los elementos hijos con el mismo prefijo son asociados con el mismo namespace.

Sigue en la parte II.......
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!
Avatar de Usuario
Dado
Mensajes: 15933
Registrado: Mar Jul 06, 2010 7:56 pm

Re: Namespace prefix (o porque aparece cfdi: en nodos del CF

Mensaje por Dado »

PARTE II. Los CFDI

El SAT ha definido que los CFDI V3 tengan el siguiente namespace

xmlns:cfdi="http://www.sat.gob.mx/cfd/3"

Y por eso todos los nodos del CFDI llevan un prefijo cfdi:

Ahora, EN DELPHI para usar prefijos de namespace se debe usar algo similar al siguiente codigo :

Código: Seleccionar todo

	XMLDoc.XML.Text := '<?xml version="1.0" encoding="UTF-8" ?><cfdi:Comprobante></cfdi:Comprobante>';
	XMLDoc.Active := True;	
	CFD := GetComprobante(XMLDoc);
	CFD.DeclareNamespace('cfdi','http://www.sat.gob.mx/cfd/3');
Y eso es todo, ahora todos los elementos van a estar referenciados con el prefijo cfdi:
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!
mauricio
Mensajes: 372
Registrado: Mié Ago 11, 2010 1:55 am
Ubicación: México, D.F.
Contactar:

Re: Namespace prefix (o porque aparece cfdi: en nodos del CF

Mensaje por mauricio »

Mi estimado Dado:

¿Por que no publicaste esto hace unos meses, cuando me estuve peleando con esto?, jejeje...

Muy buen apunte, es muy útil para cuando haces tus filtros personalizados para importar directamente del XML...

Un abrazo
Todo lo que no es dado es perdido
manurobe
Mensajes: 2
Registrado: Lun Ene 03, 2011 11:42 pm

Re: Namespace prefix (o porque aparece cfdi: en nodos del CF

Mensaje por manurobe »

Hola:

Yo te compre la actualizacion a la v3 de los cfdi para Delphi 7
La pregunta es en que parte del codigo defines los prefijos cfdi?

Gracias
Avatar de Usuario
Dado
Mensajes: 15933
Registrado: Mar Jul 06, 2010 7:56 pm

Re: Namespace prefix (o porque aparece cfdi: en nodos del CF

Mensaje por Dado »

manurobe escribió:Hola:

Yo te compre la actualizacion a la v3 de los cfdi para Delphi 7
La pregunta es en que parte del codigo defines los prefijos cfdi?

Gracias
Se definen con esta linea de codigo :

XMLDoc.XML.Text := '<?xml version="1.0" encoding="UTF-8" ?><cfdi:Comprobante xmlns:cfdi="http://www.sat.gob.mx/cfd/3".....etc

Antes lo hacia como lo menciona dos o tres mensajes arriba que tienen por titulo "Parte II" pero vi que en una sola linea se podia hacer
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!
Czar
Mensajes: 24
Registrado: Mar Mar 29, 2011 8:55 am

Re: Namespace prefix (o porque aparece cfdi: en nodos del CF

Mensaje por Czar »

Duda:

...Estoy realizando actualmente la addenda de super neto, el nodo principal se llama 'ap' (por aquello de a-ddenda de p-roveedores). Bueno el caso es que yo genero una addenda con la estructura como sigue:

<cfdi:Addenda>
<ap xmlns="http://www.tiendasneto.com/ap" xsi:schemaLocation="http://www.tiendasneto.com/ap addenda_prov.xsd" plazoPago="CREDITO"
observaciones="Ninguna">
<Detalle folio="0950965">
<Producto codigoBarras="873647000067" cajasEntregadas="60" precioUnitarioCaja="147.60" piezasEntregadas="1080" precioUnitarioPieza="8.20">
<Impuestos totalImpuestosTrasladados="1416.96">
<Traslados>
<Traslado impuesto="IVA" tasa="16.00" importe="1416.96" />
</Traslados>
</Impuestos>
</Producto>
</Detalle>
</ap>
</cfdi:Addenda>

y el proveedor me hace la observación de que el prefijo debe de ir en todos los atributos, como sigue:

<cfdi:Addenda>
<ap:ap xmlns:ap="http://www.tiendasneto.com/ap" xsi:schemaLocation="http://www.tiendasneto.com/ap addenda_prov.xsd" plazoPago="CREDITO"
observaciones="Ninguna">
<ap:Detalle folio="0950965" tipoComprobante="FE">
<ap:Producto codigoBarras="873647000067" cajasEntregadas="60" precioUnitarioCaja="147.60" piezasEntregadas="1080" precioUnitarioPieza="8.20">
<ap:Impuestos totalImpuestosTrasladados="1416.96">
<ap:Traslados>
<ap:Traslado impuesto="IVA" tasa="16" importe="1416.96" />
</ap:Traslados>
</ap:Impuestos>
</ap:Producto>
</ap:Detalle>
</ap:ap>
</cfdi:Addenda>

Tengo mi función similar (por no decir igual) a la de la amece:

function GetAddendaSuperNeto(Doc: IXMLDocument): IXMLAddenda;
begin
Result := Doc.GetDocBinding('Addenda', TXMLAddenda, TargetNamespace) as IXMLAddenda;
end;

Si a esta función le modifico el parametro y lo mando como: Result := Doc.GetDocBinding('Addenda:ap', TXMLAddenda, TargetNamespace) as IXMLAddenda;
--esto no funciona

function Getap(Doc: IXMLDocument): IXMLAp;
begin
Result := Doc.GetDocBinding('ap', TXMLAp, TargetNamespace) as IXMLAp;
end;
Si a esta función le modifico el parámetro de 'ap' por 'ap:ap'
--tampoco funciona

Por ahí, en algún lugar del foro, leí que se puede usar la función DeclareNameSpace
intenté usarla, pero si se lo pongo al nivel de CFD.DeclareNameSpace(.... , lo coloca a nivel principal
si lo pongo como Addenda.DeclareNameSpace(... no me lo hace

Alguien se ha topado con éste problema? Alguna idea de como solucionarlo?
Cerrado