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 28-04-2015
Delphitest Delphitest is offline
Miembro
 
Registrado: sep 2006
Ubicación: Salamanca-España
Posts: 249
Poder: 18
Delphitest Va por buen camino
Muchas gracias por el empujoncillo

En base a lo que comentais he hecho esta función:

Código Delphi [-]
Function TForm1.LimpiarCarNormaSEPAXML(texto: String; longitud: Integer): String;
var i : integer;
begin
// Quitar los acentos de las vocales y caracteres raros
texto := StringReplace(texto,'á','a',[rfReplaceAll]);
texto := StringReplace(texto,'Á','A',[rfReplaceAll]);
texto := StringReplace(texto,'é','e',[rfReplaceAll]);
texto := StringReplace(texto,'É','E',[rfReplaceAll]);
texto := StringReplace(texto,'í','i',[rfReplaceAll]);
texto := StringReplace(texto,'Í','I',[rfReplaceAll]);
texto := StringReplace(texto,'ó','o',[rfReplaceAll]);
texto := StringReplace(texto,'Ó','O',[rfReplaceAll]);
texto := StringReplace(texto,'ú','u',[rfReplaceAll]);
texto := StringReplace(texto,'Ú','U',[rfReplaceAll]);
texto := StringReplace(texto,'Ö','O',[rfReplaceAll]);
texto := StringReplace(texto,'ö','o',[rfReplaceAll]);
texto := StringReplace(texto,'Ñ','N',[rfReplaceAll]);
texto := StringReplace(texto,'ñ','n',[rfReplaceAll]);
texto := StringReplace(texto,'Ç','C',[rfReplaceAll]);
texto := StringReplace(texto,'ç','c',[rfReplaceAll]);

// Recorrer el texto para eliminar los caracteres no permitidos
for i := 1 to Length(texto) do
begin
  if not(Ord(texto[i]) in [65..90,97..122,48..57,47,45,63,58,40,41,46,44,39,43,32]) then
     texto[i] := '¤'
end;
texto := StringReplace(texto,'¤','',[rfReplaceAll, rfIgnoreCase]);

// Convertir a mayúsculas
texto := ansiuppercase(Texto);

// Codificar a Utf8
Result := Utf8Encode(Trim(Copy(texto, 1, longitud)));
end;

Lo de convertir a mayúsculas no se si es necesario o no pero por si acaso...

Y luego me queda la duda de las vocales acentuadas, tipo á é ... he revisado la documentación y no dice que sean caracteres válidos pero tampoco los incluye como ç y ñ para que no lo sean.

He abierto algunos de los ficheros de recibos que suelo enviar al banco y veo que hay muchos nombres que incluyen acentos y se han procesado correctamente.
__________________
Mi proyecto paso a paso (Parte I)
Responder Con Cita
  #2  
Antiguo 28-04-2015
Nasca Nasca is offline
Miembro
 
Registrado: abr 2007
Ubicación: Almería (España)
Posts: 249
Poder: 18
Nasca Va por buen camino
Cita:
Empezado por Delphitest Ver Mensaje
Muchas gracias por el empujoncillo

Lo de convertir a mayúsculas no se si es necesario o no pero por si acaso...

Y luego me queda la duda de las vocales acentuadas, tipo á é ... he revisado la documentación y no dice que sean caracteres válidos pero tampoco los incluye como ç y ñ para que no lo sean.

He abierto algunos de los ficheros de recibos que suelo enviar al banco y veo que hay muchos nombres que incluyen acentos y se han procesado correctamente.
Las mayúsculas no son necesarias, y bajo mi punto de vista tampoco recomendables.
Lo de los acentos mejor quitarlo, en algún momento pueden convertirse y dar lugar a errores.
Tanto antes como ahora se aceptan por algún banco, pero no había garantía de que al destinatario no le llegasen convertidos.
Responder Con Cita
  #3  
Antiguo 28-04-2015
Delphitest Delphitest is offline
Miembro
 
Registrado: sep 2006
Ubicación: Salamanca-España
Posts: 249
Poder: 18
Delphitest Va por buen camino
Adjudicado... quito lo de las mayúsculas. Es que ha dado la casualidad de que todos los ficheros que tengo vienen con ellas puestas y me quedaba la duda de si era por algo o no, pero cuanto menos haya que manipular el texto mejor.

Paso a la siguiente fase... En mi caso quiero empezar por los adeudos directos esquema básico (norma 19.15, o COR1)

He leído la documentación, en concreto el Anexo 1 que va de la página 18 a la 44, menuda parrafada que meten

Entiendo que debo crear 4 bloques y ahí detallan el contenido.

¿Todos esos campos y etiquetas son obligatorios? Supongo que solo algunos importantes lo son porque en ejemplos de ficheros que he revisado no aparecen tantos.

¿Existe una lista de campos obligatorios o se hace por lógica de datos imprescindibles?
__________________
Mi proyecto paso a paso (Parte I)
Responder Con Cita
  #4  
Antiguo 28-04-2015
Nasca Nasca is offline
Miembro
 
Registrado: abr 2007
Ubicación: Almería (España)
Posts: 249
Poder: 18
Nasca Va por buen camino
La documentación española es prácticamente ilegible. Vete directamente al esquema xsd y completa datos con el pdf que has puesto.
Es mas sencillo entender el esquema que el manual de implantación, o al menos a mí me lo ha parecido así.
Responder Con Cita
  #5  
Antiguo 29-04-2015
Delphitest Delphitest is offline
Miembro
 
Registrado: sep 2006
Ubicación: Salamanca-España
Posts: 249
Poder: 18
Delphitest Va por buen camino
He encontrado este link que parece detallarlo un poco mejor, al menos indica lo que es obligatorio y lo que no.

Al final pone incluso ejemplos prácticos.

A ver si saco algo en claro...
__________________
Mi proyecto paso a paso (Parte I)
Responder Con Cita
  #6  
Antiguo 29-04-2015
Delphitest Delphitest is offline
Miembro
 
Registrado: sep 2006
Ubicación: Salamanca-España
Posts: 249
Poder: 18
Delphitest Va por buen camino
He empezado a escribir el fichero xml. De momento intento entender lo que hay que hacer y si doy con ello lo completare con los campos de las tablas correspondientes, os voy poniendo el codigo de los bloques A y B (según las instrucciones y en base a los ficheros de ejemplo que mando al banco habitualmente).

Código:
// Estructura/Raíz del mensaje (Message Root) BLOQUE A
  Writeln(FicheroRecibos,'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>');
  Writeln(FicheroRecibos,'<Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:iso:std:iso:20022:tech:xsd:pain.008.001.02">');
  Writeln(FicheroRecibos,' <CstmrCdtTrfInitn>');

// Cabecera (Group Header) BLOQUE B
  Writeln(FicheroRecibos,'  <GrpHdr>');
  Writeln(FicheroRecibos,'    <MsgId>');
  Writeln(FicheroRecibos, LimpiarCarNormaSEPAXML('Mensaje de Identificación',35));
  Writeln(FicheroRecibos,'    </MsgId>');
  Writeln(FicheroRecibos,'    <CreDtTm>');
  Writeln(FicheroRecibos,'Fecha y Hora de creación - Formato YYYY-MM-DDThh:mm:ss');
  Writeln(FicheroRecibos,'    </CreDtTm>');
  Writeln(FicheroRecibos,'    <NbOfTxs>');
  Writeln(FicheroRecibos, 'Número de Operaciones');
  Writeln(FicheroRecibos,'    </NbOfTxs>');
  Writeln(FicheroRecibos,'    <InitgPty>');
  Writeln(FicheroRecibos,'      <Nm>');
  Writeln(FicheroRecibos, LimpiarCarNormaSEPAXML('Nombre del Presentador',70));
  Writeln(FicheroRecibos,'      </Nm>');
  Writeln(FicheroRecibos,'      <Id>');
  Writeln(FicheroRecibos,'        <OrgId>');
  Writeln(FicheroRecibos,'          <Othr>');
  Writeln(FicheroRecibos,'            <Id>');
  Writeln(FicheroRecibos, LimpiarCarNormaSEPAXML('Identificador del Presentador',16));
  Writeln(FicheroRecibos,'            </Id>');
  Writeln(FicheroRecibos,'          </Othr>');
  Writeln(FicheroRecibos,'        </OrgId>');
  Writeln(FicheroRecibos,'      </Id>');
  Writeln(FicheroRecibos,'    </InitgPty>');
  Writeln(FicheroRecibos,'  </GrpHdr>');
Os consulto unas dudas que van surgiendo por si me podéis echar una mano:

He añadido en la primera línea Standalone="yes" porque lo he visto en mis ficheros pero no acabo de saber para qué sirve y si es o no obligatorio.

No me queda claro tampoco si el mensaje de identificación <MsgId> debo generarlo yo de tal manera que sea único para siempre o es el nombre que le quiera dar a la remesa.

Me llama la atención que en ningún fichero de los que mando aparezca la suma total de los importes, entiendo que no es obligatorio.

He comprobado que tengo ficheros en los que aparece la etiqueta <OrgId> y en otros <PrvId>, todos son aceptados por el banco y en teoría trabajamos como empresa ¿Tiene alguna importancia el uso de persona física o jurídica independientemente de que corresponda a la realidad?

A grandes rasgos estoy metiendo las etiquetas que veo en mis ejemplos ¿Es conveniente completar todos los datos (direccion, codigo postal...) o me limito a lo que es necesario?

Muchas gracias por vuestro tiempo

Un saludo

PD: LO siento pero si pongo las etiquetas de código Delphi se borra parte del texto, no se como ponerlo de otra manera.
__________________
Mi proyecto paso a paso (Parte I)

Última edición por Delphitest fecha: 29-04-2015 a las 20:21:51.
Responder Con Cita
  #7  
Antiguo 02-02-2016
GuillerMac GuillerMac is offline
Registrado
NULL
 
Registrado: feb 2015
Posts: 1
Poder: 0
GuillerMac Va por buen camino
Esto ya está solucionado, copiar y pegar

https://github.com/aspettl/delphi-sepa-xml
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
necesito alguien que sepa de delphi poolero Internet 24 08-04-2011 16:44:34
Necesito Ayuda de Seoane (o de otro que sepa C y Delphi) JoAnCa API de Windows 4 14-11-2008 14:53:19
Sobre Crystal Report alguien que sepa Larra Impresión 0 08-09-2006 16:41:57
Formato de openoffice.org, 'OpenDocument' se convierte en norma ISO lanysoft Noticias 3 02-06-2006 19:36:24
Crear fichero bancario con la norma csb19 carlosgarciabla Varios 1 10-08-2005 14:16:20


La franja horaria es GMT +2. Ahora son las 08:36:28.


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