Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-12-2015
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.474
Poder: 21
newtron Va camino a la fama
Duda creando "child" en documento XML

Hola a tod@s.

Como imagino que sabréis, a partir del día 1 de Febrero del año que entra todos los ficheros que se envíen a entidades bancarias con la norma SEPA 19 deberán de ir en formato XML, y en ello estamos.

Estoy creando el fichero XML usando la instrucción "AddChild" para ir creando los distintos nodos con sus valores y sin mayor problema. El tema está en que hay un apartado en el fichero donde se indica el importe del recibo en el que cambia la estructura del resultado y estoy algo perdido.

Si por ejemplo pones este código:

Código Delphi [-]
TextXML := XMLFileHeader.AddChild('MsgId','');
TextXML.Text := '1234567890';

el resultado sería el siguiente:

<MsgId>1234567890</MsgId>


hasta aquí sin mayores problemas se van creando los distintos nodos, la línea se compone de la etiqueta <MsgId> seguido del valor 1234567890 y acabando en /MsgId.

El problema es que me encuentro un apartado, donde se indica el tipo de moneda y el importe del recibo, en el que cambia esa regla porque el resultado sería el siguiente:

<InstdAmt Ccy="EUR">60.50</InstdAmt>

¿Alquien sabe cómo crear este nodo con estos valores? porque la etiqueta con la que empieza no es la misma con la que acaba y se mete por medio el texto "EUR" que tampoco sé cómo incluirlo?.

Gracias y un saludo
__________________
Be water my friend.
Responder Con Cita
  #2  
Antiguo 05-12-2015
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
¿Alquien sabe cómo crear este nodo con estos valores? porque la etiqueta con la que empieza no es la misma con la que acaba y se mete por medio el texto "EUR" que tampoco sé cómo incluirlo?
Yo diría que la etiqueta es la misma, pero, en este caso se incluye un atributo. Por ahí debes buscar: cómo añadir un atributo a un elemento XML. No sé qué biblioteca XML estés usando, así que no me atrevo a seguir, pero, es posible que encuentres algún método como "AddAttribute" o similar.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 05-12-2015
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.474
Poder: 21
newtron Va camino a la fama
Gracias Dec.

Estoy usando TXMLDocument, miraré eso de los atributos a ver qué veo.

Saludos
__________________
Be water my friend.
Responder Con Cita
  #4  
Antiguo 05-12-2015
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Echa un vistazo a este apartado de la ayuda de Delphi a ver si te da alguna idea.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 05-12-2015
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.474
Poder: 21
newtron Va camino a la fama
Resuelto

Amigo Dec.

Como bien decías los tiros iban por los atributos del nodo.

El tema se resuelve insertando esta línea antes de poner la etiqueta con el valor:

Código Delphi [-]
TextXML.Attributes['Ccy'] := 'EUR';

.. y a ver si nos ponemos las pilas que hemos tardado por lo menos media hora en resolver esto, ¿ein?

Gracias y un saludo
__________________
Be water my friend.
Responder Con Cita
  #6  
Antiguo 05-12-2015
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Me alegro haber podido ayudar aunque sea tan lento.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #7  
Antiguo 09-12-2015
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Hola newtron,

He creado un objecto que encapsula todo lo necesario para crear los recibos sepa en .XML y funciona bastante bien, si te pierdes dime donde te puedo hechar una mano.

Un saludo.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.
Responder Con Cita
  #8  
Antiguo 09-12-2015
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.474
Poder: 21
newtron Va camino a la fama
Cita:
Empezado por olbeup Ver Mensaje
Hola newtron,

He creado un objecto que encapsula todo lo necesario para crear los recibos sepa en .XML y funciona bastante bien, si te pierdes dime donde te puedo hechar una mano.

Un saludo.
Gracias olbeup, ya he resuelto el tema usando TXMLDocument pero igual tu solución es más elegante. ¿Cómo funciona el objeto ese que has preparado?.

Saludos
__________________
Be water my friend.
Responder Con Cita
  #9  
Antiguo 09-12-2015
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Cita:
Empezado por newtron Ver Mensaje
Gracias olbeup, ya he resuelto el tema usando TXMLDocument pero igual tu solución es más elegante. ¿Cómo funciona el objeto ese que has preparado?.

Saludos
Hola newtron,

Mas elegante no creo que sea, te pongo un ejemplo de la etiqueta del <GrpHdr>:

Código Delphi [-]
const
  ISODateTime: string   = 'yyyy-mm-dd"T"hh:nn:ss';
  ISODate: string       = 'yyyy-mm-dd';
  ISOMsgId: string      = '"PRE"yyyymmddhhnnss"%sRMS-%s"';
  ISOUNIFI20022         = [32, 39..41, 65..90, 63, 97..122, 43..58];
  ISOCHANGE20022: char  = '.';

type

  /// 1.0 ///

  {+} {1.0 Cabecera – }
  TGrpHdr = class;
    {++} {1.8 - Parte iniciadora - }
    TInitgPty = class;
      {+++} {1.8 - Identificación de la Parte iniciadora - }
      TInitgPty_Id = class;
        {++++} {1.8 - Persona jurídica - }
        TInitgPty_Id_OrgId = class;
          {+++++} {1.8 - Otra}
          TInitgPty_Id_OrgId_Othr = class;

  {Raíz del mensaje – Message root }
  TCstmrDrctDbtInitn = class
  private
    FGrpHdr: TGrpHdr; {class --> Cabecera – }
    FPmtInf: TPmtInf; {class --> Información del pago }

    // --- * --- // Variables definidas por el usuario que no forman parte del ISO20022
    FIDRemittance: Integer;
    FIDBankSEPA: Integer;

    // --- * --- Variables que no forman parte del componente ISO20022 SEPA XML
    FConnectionString: string;
  protected
  public
    constructor Create(AConnectionString: string);
    destructor Destroy; override;
    function ExecuteConvertToXML: Boolean;
    procedure SaveToFileXML(const FileName: string);
  published
    property GrpHdr: TGrpHdr read FGrpHdr write FGrpHdr; {class --> Cabecera – }
    property PmtInf: TPmtInf read FPmtInf write FPmtInf; {class --> Información del pago }

    property ConnectionString: string read FConnectionString write FConnectionString;
    property IDBankSEPA: Integer read FIDBankSEPA write FIDBankSEPA;
    property IDRemittance: Integer read FIDRemittance write FIDRemittance;
  end;

  {+} {1.0 Cabecera – }
  TGrpHdr = class
  private
    FMsgId: string;         {35}    {1.1 Identificación del mensaje}
    FCreDtTm: TDateTime;    {19}    {1.2 Fecha y hora de creación 'yyyy-mm-ddThh:nn:ss'}
    FNbOfTxs: Integer;      {15}    {1.6 Número de operaciones}
    FCtrlSum: Double;       {18}{2} {1.7 Control de suma}
    FInitgPty: TInitgPty;           {1.8 Parte iniciadora}

    {15} {1.6 Número de operaciones}
    function GetNbOfTxs: Integer;
    {18}{2} {1.7 Control de suma}
    function GetCtrlSum: Double;

    // --- * --- // Variables para controlar el GrpHdrId
    function GetMsgId: string;

  protected
    FCstmrDrctDbtInitn: TCstmrDrctDbtInitn;
  public
    constructor Create(Owner: TCstmrDrctDbtInitn);
    destructor Destroy; override;
    function GetIXMLNode: IXMLNode;
  published
    property MsgId: string read GetMsgId;
    property CreDtTm: TDateTime read FCreDtTm;
    property NbOfTxs: Integer read GetNbOfTxs;
    property CtrlSum: Double read GetCtrlSum;
    property InitgPty: TInitgPty read FInitgPty write FInitgPty;
  end;

Esto es una parte del desarrollo.

Un saludo.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.
Responder Con Cita
  #10  
Antiguo 09-12-2015
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.474
Poder: 21
newtron Va camino a la fama
Cita:
Empezado por olbeup Ver Mensaje
Hola newtron,

Mas elegante no creo que sea, te pongo un ejemplo de la etiqueta del <GrpHdr>:
Maemía..... pues la verdad es que no sé qué decirte, yo he ido creando cada child "a pelo" sin mayores problemas y ya lo tengo implantado, así que casi que lo dejo como está. De todas formas tendré en cuenta tu ofrecimiento en adelante.

Gracias y un saludo.
__________________
Be water my friend.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Usar TServerSocket y TClientSocket para enviar "streams" más o menos "grandes" dec Internet 9 04-08-2015 16:11:50
El programa se queda "colgado" mientras copia y luego "despierta" NeWsP OOP 5 10-03-2010 22:05:40
¿Cómo mostrar un Documento "Word", en Delphi? MACOII Servers 3 14-04-2008 11:08:22
Duda con el foro: "Kylix, Lazarus, FreePascal, etc..." xEsk La Taberna 2 13-10-2007 16:01:36
Necesito llamar a métodos de clases "hija" desde su clase "padre" Flecha OOP 17 20-04-2007 00:03:53


La franja horaria es GMT +2. Ahora son las 06:09:56.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi