Addenda Chrysler

Este es el foro para resolver dudas y hacer comentarios del Codigo Fuente para Delphi de generacion y timbrado que se ofrece aqui en el foro
[[ FORO CERRADO DEBIDO A QUE YA LA INFORMACION YA NO ES VIGENTE ]]
fcobanda
Mensajes: 78
Registrado: Lun Sep 27, 2010 6:51 pm

Addenda Chrysler

Mensajepor fcobanda » Jue Dic 13, 2012 5:16 pm

Hola dado

estoy en la fase de certificacion de la addenda PPY de Chrysler, pero tengo un detalle que no puedo resolver, ojala y tu me puedas ayudar

el detalle es que la addenda tiene el nodo llamado factura el cual debera llevar el prefijo PPY, el problema es que no en todo me pone el prefijo en todos los elementos, la manera de como lo estoy haciendo es :

- Despues del proceso normal de la generacion del CFD normal, genero un archivo ya sellado.

- el archivo XML ya sellado lo mando como parametro a una DLL que se encargara de pegar la Addenda y lo regresara completo al modulo principal

- dentro del modulo DLL de la addenda lo hago da la siguiente forma:

Código: Seleccionar todo

function Generar_Addenda(PathCFD : String; ValidaOnly : Integer) : Integer;
const
  xmlns = 'xmlns=""';             (* Cadena String a Borrar, (se genera al obtener la interaz Factura) *)
var
  XMLFactura : IXMLDocument;
  Factura : IXMLFactura;
  CFD : TCFD;
begin

  Try
    CFD := TCFD.Create(cfdV22);       // AQUI CREO UNA INSTANCIA DEL CFD, PARA TENER LA CLASE COMPLETA
    CFD.LoadFromFile(PathCFD);       // AQUI CARGO EL XML YA SELLADO, LISTO PARA PEGAR LA ADDENDA

    XMLFactura := TXMLDocument.Create(Nil);
    XMLFactura.Active := True;

    Factura := GetFactura(XMLFactura);

// ************* PERSONALIZAR ADDENDA CHRYSLER PPY  **********************             AQUI LLENO LA ADDENDA CON LOS DATOS DE LA BASE DE DATOS
    With Factura do
     begin
       TipoDocumento := cds_cliente.FieldByName('TipoDocumento').AsString;
       TipoDocumentoFiscal := cds_Cliente.FieldByName('TipoDocumentoFiscal').AsString;   
       Version := cds_Cliente.FieldByName('Version').AsString;
      ......
      .....
    end;

    FACTURA.OwnerDocument.Options := [doAutoPrefix];


    CFD.Datos.Addenda.ChildNodes.Add(Factura);

    Factura.SetAttributeNS('xmlns:PPY','', 'http://www.dfdchryslerdemexico.com.mx/Addenda/PPY');
    Factura.Attributes['xsi:schemaLocation'] :=  'http://www.dfdchryslerdemexico.com.mx/Addenda/PPY http://www.dfdchryslerdemexico.com.mx/Addenda/PPY/PPY.XSD';

    CFD.SaveToFile('C:\Paso\CFD_PRUEBA_ADDENDA_CHRYSLER.XML');
  Finally
     ......
     ......

  End;



los cambios que hice dentro de la interfaz Intf_PPY que hice fueron los siguientes, agregar el prefijo PPY en le nombre del nodo factura

Código: Seleccionar todo


function Getfactura(Doc: IXMLDocument): IXMLFactura;
function Loadfactura(const FileName: string): IXMLFactura;
function Newfactura: IXMLFactura;

const
  TargetNamespace =
   'http://www.dfdchryslerdemexico.com.mx/Addenda/PPY'; // xsi:schemaLocation="http://www.dfdchryslerdemexico.com.mx/Addenda/PPY http://www.dfdchryslerdemexico.com.mx/Addenda/PPY/PPY.XSD"';

implementation

{ Global Functions }

function Getfactura(Doc: IXMLDocument): IXMLFactura;
begin
  Result := Doc.GetDocBinding('PPY:factura', TXMLFactura, TargetNamespace) as IXMLFactura;
end;

function Loadfactura(const FileName: string): IXMLFactura;
begin
  Result := LoadXMLDocument(FileName).GetDocBinding('PPY:factura', TXMLFactura, TargetNamespace) as IXMLFactura;
end;

function Newfactura: IXMLFactura;
begin
  Result := NewXMLDocument.GetDocBinding('PPY:factura', TXMLFactura, TargetNamespace) as IXMLFactura;
end;


y esto es lo que me resulta, con los nodos nota, otroscargos, part sin prefijo, pero si con el namespace incluido dentro de ellos

Código: Seleccionar todo


<Addenda>
      <PPY:factura tipoDocumento="PPY" TipoDocumentoFiscal="FA" version="1.0" serie="A" folioFiscal="451" fecha="2012-06-20" montoTotal="9960.98" referenciaProveedor="A 451" xmlns:PPY="http://www.dfdchryslerdemexico.com.mx/Addenda/PPY" xsi:schemaLocation="http://www.dfdchryslerdemexico.com.mx/Addenda/PPY http://www.dfdchryslerdemexico.com.mx/Addenda/PPY/PPY.XSD">
         <PPY:moneda tipoMoneda="USD" tipoCambio="1.0000"/>
         <PPY:proveedor codigo="20215" nombre="NOMBRE DE LA EMPRESA S.A. DE C.V."/>
         <PPY:destino codigo="8476" nombre="PLANTA DE MOTORES 4 CILINDROS - SALTILLO"/>
         <nota xmlns="http://www.dfdchryslerdemexico.com.mx/Addenda/PPY">Addenda de Prueba</nota>
         <otrosCargos xmlns="http://www.dfdchryslerdemexico.com.mx/Addenda/PPY" codigo="V6" monto="1373.93"/>
         <PPY:partes>
            <part xmlns="http://www.dfdchryslerdemexico.com.mx/Addenda/PPY" numero="123456" cantidad="1.0000" unidadDeMedida="EA" precioUnitario="8587.0500" montoDeLinea="8587.05">
               <references ordenCompra="XYZ6675" releaseRequisicion="XYZ4218000" ammendment="A"/>
               <nota>Probando Addenda</nota>
            </part>
         </PPY:partes>
      </PPY:factura>
   </Addenda>


Ojala puedas ayudarme a encontrar el error que estoy cometiendo o otra manera de hacerlo, te adjunto el esquema PPY.

Gracias

Avatar de Usuario
Dado
Mensajes: 15824
Registrado: Mar Jul 06, 2010 8:56 pm

Re: Addenda Chrysler

Mensajepor Dado » Jue Dic 13, 2012 5:33 pm

Estas usando Delphi XE/XE2 verdad?

Es el mismo problema que tengo y por el que no he cambiado a ese compilador y no he podido resolverlo.
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!

fcobanda
Mensajes: 78
Registrado: Lun Sep 27, 2010 6:51 pm

Re: Addenda Chrysler

Mensajepor fcobanda » Vie Dic 14, 2012 11:40 am

Asi es estoy usando Delphi XE2.
entonces tu crees que no hay cura para este mal por el momento?

Gracias

Avatar de Usuario
Dado
Mensajes: 15824
Registrado: Mar Jul 06, 2010 8:56 pm

Re: Addenda Chrysler

Mensajepor Dado » Vie Dic 14, 2012 11:52 am

Yo no he encontrado como, lo raro que en las 3 o 4 ocasiones en las que me meto a ver este asunto no he encontrado NADA en internet, ni siquiera una queja de alguien con un problema similar

Y solo pasa en los nodos que se agregan con el metodo ADD

La ultima opcion (y que probe pero no me gusto) es usar las instrucciones primitivas del objeto TXMLDocument, es decir algo asi como

AddChild('PPY:NombreDelNodo')

y Luego atributo por atributo

SetAttribute('nombreatributo','valor')

Pero es muy laborioso y enredado
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!

fcobanda
Mensajes: 78
Registrado: Lun Sep 27, 2010 6:51 pm

Re: Addenda Chrysler

Mensajepor fcobanda » Vie Dic 14, 2012 7:00 pm

Gracias Dado

Pues voy a seguir buscando en internet, lo malo es que ya se hizo super-urgente esto,
te pido por favor si encuentras algo, me lo pases, y si yo le encuentro te lo hago llegar

Gracias

jassivg
Mensajes: 7
Registrado: Vie Abr 13, 2012 5:03 pm

Re: Addenda Chrysler

Mensajepor jassivg » Vie May 24, 2013 2:22 pm

Que tal, solo para saber si hubo alguna solución al respecto, ya que estoy teniendo el mismo problema,

De antemano gracias, Saludos

jassivg
Mensajes: 7
Registrado: Vie Abr 13, 2012 5:03 pm

Re: Addenda Chrysler

Mensajepor jassivg » Mié Jun 05, 2013 1:37 pm

Que tal, espero les sirva a los compañeros del foro.

El problema está en que la unidad XMLDoc de Delphi cambió la función TXMLNode.AddChild

Delphi 2006:
if Assigned(NSDecl) then
NodeName := GetPrefixedName(TagName, NamespaceURI)

Delphi XE3
if Assigned(NSDecl) and GenPrefix then
NodeName := GetPrefixedName(TagName, NamespaceURI)

Si se fijan ahora utiliza el parámetro para saber si genera ó no el prefijo, lo cual es correcto, ya que antes se tenía el problema de que si querías agregar nodos con un prefijo diferente no podías porque siempre agregaba el default, independientemente de que el parámetro fuera True ó False,

Entonces la unidad que genera el XML Data Binding, utiliza el siguiente código para agregar nodos:

function TXMLAnexos.Add(const Anexo: WideString): IXMLNode;
begin
Result := AddItem(-1);
Result.NodeValue := Anexo;
end;

y la función AddItem, tiene el siguiente código:

function TXMLNodeCollection.AddItem(Index: Integer): IXMLNode;
begin
if ItemTag = '' then
XMLDocError(SMissingItemTag);
Result := AddChild(ItemTag, ItemNS, False, Index);
end;

Si se fijan siempre manda llamar a la función AddChild con el parámetro 3 en False, y como ahora el AddChild si toma en cuenta este parámetro, pues lo genera sin el Prefijo.

Solución que encontré: Mandar llamar directamente la función AddChild, en lugar de AddItem, pero con el parámetro en True así:

function TXMLAnexos.Add(const Anexo: WideString): IXMLNode;
begin
Result := AddChild(ItemTag, ItemNS, True, -1);
Result.NodeValue := Anexo;
end;

Esto mismo hay que hacer con todos los nodos donde aplique, tanto en el .Add como en el .Insert, y ya con eso funciona correctamente.

Creo que el detalle está en que corrigieron el XMLDoc, pero no cambiaron el Wizard del XML Data Binding.

Cualquier otra cosa que pueda ayudar, con gusto,

Saludos

ranaya
Mensajes: 6
Registrado: Sab Jun 02, 2012 10:37 pm

Re: Addenda Chrysler

Mensajepor ranaya » Jue Ene 16, 2014 5:38 pm

Gracias por tu Información jassivg me fue de mucha ayuda.

Saludos.


Volver a “SOPORTE CODIGO FUENTE EN DELPHI”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 5 invitados