FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Adeudos Directos SEPA en euros Esquema B2B
Posts: 1515
Joined: Thu Oct 30, 2008 02:37 PM

Re: Adeudos Directos SEPA en euros Esquema B2B

Posted: Wed Jan 29, 2014 08:54 AM
Parece que en el formato texto 19.14 o 19.44, la referencia:

Campo 7: Identificación del fichero: referencia que asigna el presentador al fichero, para su envío a
la entidad receptora.

Esta referencia se estructurará de la siguiente manera, tomando los datos generados
por el ordenador del presentador en el momento de la creación del fichero:
• Indicador del tipo de mensaje (3 caracteres)
• AAAAMMDD (año, mes y día) = (8 caracteres)
• HHMMSSmmmmm (hora minuto segundo y 5 posiciones de milisegundos = 11
caracteres)
• Referencia identificativa que asigne el presentador (13 caracteres)

El indicador de tipo de mensaje tomará el valor:

PRE Fichero de presentación de adeudos

Un ejemplo de Identificación de un fichero de presentación:
PRE20101105223542122450159300491893
Posts: 563
Joined: Sun Oct 09, 2005 07:23 PM

Adeudos Directos SEPA en euros Esquema B2B

Posted: Mon Mar 17, 2014 09:01 PM

¿Está alguien usándolo ya de forma habitual para generar recibos domiciliados?. Parece que en general en los bancos se siguen aceptando los ficheros planos de texto con las normas antiguas pues los clientes de las empresas que generan estos recibos se resisten a firmar la orden de pago, por aquello de no poder devolver los recibos si no están de acuerdo, y antes que perder clientes prefieren seguir trabajando como hasta ahora.

¿Hay alguna recopilación de funciones para el asunto SEPA?.

Saludos.

Posts: 118
Joined: Fri Dec 20, 2013 10:39 AM

Re: Adeudos Directos SEPA en euros Esquema B2B

Posted: Mon Mar 17, 2014 10:38 PM

Hola. Precisamente, a mis clientes, hoy les han notificado desde Ibarcaja que el 17 de marzo funcionaría la norma 19 y el día 18 no, así que aquí estoy, preparando la 19.14

Windows 10 + FWH 20.08 + BCC 7.4 + Harbour 3.2.0 + PSPad 5.0.3
Posts: 422
Joined: Mon Aug 17, 2009 12:18 PM

Re: Adeudos Directos SEPA en euros Esquema B2B

Posted: Thu Oct 02, 2014 04:47 PM

Hola,

Un cliente mío de Barcelona tiene problemas con el carácter ’, que es el chr(146) pero en ascii no me sale en el MED, pero sí que lo meten al programa, y no se admite por SEPA.

¿A alguien le ha sucedido?.

Muchas gracias!.

Saludos,



Eduardo
Posts: 1446
Joined: Mon Oct 10, 2005 02:38 PM

Re: Adeudos Directos SEPA en euros Esquema B2B

Posted: Tue Oct 07, 2014 04:43 PM
mgsoft wrote:Hola,

Un cliente mío de Barcelona tiene problemas con el carácter ’, que es el chr(146) pero en ascii no me sale en el MED, pero sí que lo meten al programa, y no se admite por SEPA.

¿A alguien le ha sucedido?.

Muchas gracias!.

SEPA dice que admite todos estos:

Local cCaracteresOK := "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

cCaracteresOk := cCaracteresOk + Lower( cCaracteresOk )
cCaracteresOk := cCaracteresOk + "1234567890"
cCaracteresOk := cCaracteresOk + "/-?:().,'+ "

y consigo meterle un literal (sacado del fichero TXT que le doy al banco) así (sin las doble comillas):

"...edelroser.COM 'Consulta rebut' Codi:..."

Saludos,

Un Saludo

Carlos G.



FiveWin 25.12 + Harbour 3.2.0dev (r2502110321), BCC 7.7 Windows 11 Home

Posts: 518
Joined: Fri Jun 29, 2012 12:49 PM

Re: Adeudos Directos SEPA en euros Esquema B2B

Posted: Sat Nov 07, 2015 05:30 PM

Hola,

Alguno tiene funcionando el xml?. El Banco dice que desde febrero de 2016 todo tiene que ser xml y no admitirán txt!!!!.

Muy agradecida.

Posts: 1515
Joined: Thu Oct 30, 2008 02:37 PM

Re: Adeudos Directos SEPA en euros Esquema B2B

Posted: Wed Nov 25, 2015 06:39 PM
Muy estimados,

Se acerca la fatídica fecha del primero de febrero de 2016.

Ese día parece que nuestras remesas habrán de estar codificadas en formato xml. Los
usuarios ya empiezan a estar nerviosos porque los bancos ya les van dando "toquecitos"
de que tienen que pasarselas como archivos .xml.

Probando la clase de Joaquín Ferrer (gracias Joaquin) me encuentro que me da errores.
¿ Alguien la está usando en producción ?

gracias de antemano.

PD. Aquí los errores generados con el testSEPA.xml contra su schema:


    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}MsgId': [facet 'maxLength'] The value has a length of '36'; this exceeds the allowed maximum length of '35'.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}MsgId': '
    PRE2015112518544068080REMESA001 ' is not a valid value of the atomic type '{urn:iso:std:iso:xsd:pain.008.001.02}Max35Text'.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}CreDtTm': '
    2015-11-25T18:54:40' is not a valid value of the atomic type '{urn:iso:std:iso:xsd:pain.008.001.02}ISODateTime'.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}NbOfTxs': [facet 'pattern'] The value '
    3' is not accepted by the pattern '[0-9]{1,15}'.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}NbOfTxs': '
    3' is not a valid value of the atomic type '{urn:iso:std:iso:xsd:pain.008.001.02}Max15NumericText'.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}BICOrBEI': [facet 'pattern'] The value '
    BSABESBBXXX' is not accepted by the pattern '[A-Z]{6,6}[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3,3}){0,1}'.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}BICOrBEI': '
    BSABESBBXXX' is not a valid value of the atomic type '{urn:iso:std:iso:xsd:pain.008.001.02}AnyBICIdentifier'.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}PmtInfId': [facet 'maxLength'] The value has a length of '37'; this exceeds the allowed maximum length of '35'.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}PmtInfId': '
    PRE2015112518544068080REMESA001-0001' is not a valid value of the atomic type '{urn:iso:std:iso:xsd:pain.008.001.02}Max35Text'.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}PmtMtd': [facet 'enumeration'] The value '
    DD' is not an element of the set {'DD'}.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}PmtMtd': '
    DD' is not a valid value of the atomic type '{urn:iso:std:iso:xsd:pain.008.001.02}PaymentMethod2Code'.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}BtchBookg': '
    TRUE' is not a valid value of the atomic type '{urn:iso:std:iso:xsd:pain.008.001.02}BatchBookingIndicator'.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}NbOfTxs': [facet 'pattern'] The value '
    1' is not accepted by the pattern '[0-9]{1,15}'.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}NbOfTxs': '
    1' is not a valid value of the atomic type '{urn:iso:std:iso:xsd:pain.008.001.02}Max15NumericText'.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}Cd': [facet 'maxLength'] The value has a length of '5'; this exceeds the allowed maximum length of '4'.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}Cd': '
    SEPA' is not a valid value of the atomic type '{urn:iso:std:iso:xsd:pain.008.001.02}ExternalServiceLevel1Code'.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}SeqTp': [facet 'enumeration'] The value '
    RCUR' is not an element of the set {'FRST', 'RCUR', 'FNAL', 'OOFF'}.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}SeqTp': '
    RCUR' is not a valid value of the atomic type '{urn:iso:std:iso:xsd:pain.008.001.02}SequenceType1Code'.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}ReqdColltnDt': '
    2014-03-03' is not a valid value of the atomic type '{urn:iso:std:iso:xsd:pain.008.001.02}ISODate'.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}ChrgBr': This element is not expected. Expected is ( {urn:iso:std:iso:xsd:pain.008.001.02}CdtrAcct ).
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}PmtInfId': [facet 'maxLength'] The value has a length of '37'; this exceeds the allowed maximum length of '35'.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}PmtInfId': '
    PRE2015112518544068080REMESA001-0001' is not a valid value of the atomic type '{urn:iso:std:iso:xsd:pain.008.001.02}Max35Text'.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}PmtMtd': [facet 'enumeration'] The value '
    DD' is not an element of the set {'DD'}.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}PmtMtd': '
    DD' is not a valid value of the atomic type '{urn:iso:std:iso:xsd:pain.008.001.02}PaymentMethod2Code'.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}BtchBookg': '
    TRUE' is not a valid value of the atomic type '{urn:iso:std:iso:xsd:pain.008.001.02}BatchBookingIndicator'.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}NbOfTxs': [facet 'pattern'] The value '
    1' is not accepted by the pattern '[0-9]{1,15}'.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}NbOfTxs': '
    1' is not a valid value of the atomic type '{urn:iso:std:iso:xsd:pain.008.001.02}Max15NumericText'.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}Cd': [facet 'maxLength'] The value has a length of '5'; this exceeds the allowed maximum length of '4'.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}Cd': '
    SEPA' is not a valid value of the atomic type '{urn:iso:std:iso:xsd:pain.008.001.02}ExternalServiceLevel1Code'.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}SeqTp': [facet 'enumeration'] The value '
    RCUR' is not an element of the set {'FRST', 'RCUR', 'FNAL', 'OOFF'}.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}SeqTp': '
    RCUR' is not a valid value of the atomic type '{urn:iso:std:iso:xsd:pain.008.001.02}SequenceType1Code'.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}ReqdColltnDt': '
    2014-03-13' is not a valid value of the atomic type '{urn:iso:std:iso:xsd:pain.008.001.02}ISODate'.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}ChrgBr': This element is not expected. Expected is ( {urn:iso:std:iso:xsd:pain.008.001.02}CdtrAcct ).
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}PmtInfId': [facet 'maxLength'] The value has a length of '37'; this exceeds the allowed maximum length of '35'.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}PmtInfId': '
    PRE2015112518544068080REMESA001-0001' is not a valid value of the atomic type '{urn:iso:std:iso:xsd:pain.008.001.02}Max35Text'.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}PmtMtd': [facet 'enumeration'] The value '
    DD' is not an element of the set {'DD'}.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}PmtMtd': '
    DD' is not a valid value of the atomic type '{urn:iso:std:iso:xsd:pain.008.001.02}PaymentMethod2Code'.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}BtchBookg': '
    TRUE' is not a valid value of the atomic type '{urn:iso:std:iso:xsd:pain.008.001.02}BatchBookingIndicator'.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}NbOfTxs': [facet 'pattern'] The value '
    1' is not accepted by the pattern '[0-9]{1,15}'.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}NbOfTxs': '
    1' is not a valid value of the atomic type '{urn:iso:std:iso:xsd:pain.008.001.02}Max15NumericText'.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}Cd': [facet 'maxLength'] The value has a length of '5'; this exceeds the allowed maximum length of '4'.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}Cd': '
    SEPA' is not a valid value of the atomic type '{urn:iso:std:iso:xsd:pain.008.001.02}ExternalServiceLevel1Code'.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}SeqTp': [facet 'enumeration'] The value '
    RCUR' is not an element of the set {'FRST', 'RCUR', 'FNAL', 'OOFF'}.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}SeqTp': '
    RCUR' is not a valid value of the atomic type '{urn:iso:std:iso:xsd:pain.008.001.02}SequenceType1Code'.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}ReqdColltnDt': '
    2014-03-23' is not a valid value of the atomic type '{urn:iso:std:iso:xsd:pain.008.001.02}ISODate'.
    ERROR: Element '{urn:iso:std:iso:xsd:pain.008.001.02}ChrgBr': This element is not expected. Expected is ( {urn:iso:std:iso:xsd:pain.008.001.02}CdtrAcct ).

    [/list:u]
Posts: 2
Joined: Thu Nov 27, 2014 11:58 AM

Re: Adeudos Directos SEPA en euros Esquema B2B

Posted: Wed Dec 02, 2015 11:19 AM

Hola:
Yo lo he hecho un poco rudimentario pero me lo ha aceptado el banco. Aquí os dejo cómo he elaborado el XML.
Espero que os sirva.

Ahora estoy con el tema de las devoluciones.

Un saludo.

          fichero := "PRUEBA.xml"
          nHandle:= FCreate( fichero )
          // RAIZ DEL MENSAJE
          cadena := "<?xml version=" + CHR(34) + "1.0" + CHR(34) + " encoding=" + CHR(34) + "utf-8" + CHR(34) + "?>"
          FWriteLn( nHandle , cadena )
          cadena := "<Document xmlns=" + CHR(34) + "urn:iso:std:iso:20022:tech:xsd:pain.008.001.02" + CHR(34) + " xmlns:xsi=" + CHR(34) + "http://www.w3.org/2001/XMLSchema-instance" + CHR(34) + ">"
          FWriteLn( nHandle , cadena )
          cadena := "<CstmrDrctDbtInitn>"
          FWriteLn( nHandle , cadena )
          // CABECERA
          cadena := "<GrpHdr>"
          FWriteLn( nHandle , cadena )
             cadena := "<MsgId>" + "PRE" + Str( Year( date() ), 4 ) + Padl( Month( date() ), 2, "0" ) + Padl( Day( date() ), 2, "0" ) + Padr( cTime, 11, "0" ) + Padr( oDatos[ ( dbGesBanco )->( fieldpos( "Codigo" ) ) ], 13, "0" ) + "</MsgId>"
             FWriteLn( nHandle , cadena )
             cadena := "<CreDtTm>" + Str( Year( date() ), 4 ) + "-" + Padl( Month( date() ), 2, "0" ) + "-" + Padl( Day( date() ), 2, "0" ) + "T" + time() + "</CreDtTm>"
             FWriteLn( nHandle , cadena )
             cadena := "<NbOfTxs>" + AllTrim( Str( nCont ) ) + "</NbOfTxs>"
             FWriteLn( nHandle , cadena )
             cadena := "<CtrlSum>" + AllTrim( Transform( nTotImp, cPictImpSEPA(.F.) ) ) + "</CtrlSum>"
             FWriteLn( nHandle , cadena )
             cadena := "<InitgPty>"
             FWriteLn( nHandle , cadena )
                cadena := "<Nm>" + AllTrim( Padr( ArreglaNombre( oDatos[ ( dbGesBanco )->( fieldpos( "NOMBRE" ) ) ] ), 70, " " ) ) + "</Nm>"
                FWriteLn( nHandle , cadena )
                cadena := "<Id>"
                FWriteLn( nHandle , cadena )
                   cadena := "<OrgId>"
                   FWriteLn( nHandle , cadena )
                      cadena := "<Othr>"
                      FWriteLn( nHandle , cadena )
                         cadena := "<Id>" + AllTrim( "ES" + cGetDigitIDSEPA( AllTrim( oDatos[ ( dbGesBanco )->( fieldpos( "NIF" ) ) ] ), "ES" ) + oDatos[ ( dbGesBanco )->( fieldpos( "Sufijo" ) ) ] + Padr( oDatos[ ( dbGesBanco )->( fieldpos( "NIF" ) ) ], 28, " " ) ) + "</Id>"
                         FWriteLn( nHandle , cadena )
                      cadena := "</Othr>"
                      FWriteLn( nHandle , cadena )
                   cadena := "</OrgId>"
                   FWriteLn( nHandle , cadena )
                cadena := "</Id>"
                FWriteLn( nHandle , cadena )
             cadena := "</InitgPty>"
             FWriteLn( nHandle , cadena )
          cadena := "</GrpHdr>"
          FWriteLn( nHandle , cadena )

          // INFORMACION DEL PAGO
          cadena := "<PmtInf>"
          FWriteLn( nHandle , cadena )
             cadena := "<PmtInfId>" + Str( Year( date() ), 4 ) + Padl( Month( date() ), 2, "0" ) + Padl( Day( date() ), 2, "0" ) + Padr( cTime, 11, "0" ) + Padr( oDatos[ ( dbGesBanco )->( fieldpos( "Codigo" ) ) ], 13, "0" ) + "</PmtInfId>"
             FWriteLn( nHandle , cadena )
             cadena := "<PmtMtd>DD</PmtMtd>"
             FWriteLn( nHandle , cadena )
             cadena := "<PmtTpInf>"
             FWriteLn( nHandle , cadena )
                cadena := "<SvcLvl>"
                FWriteLn( nHandle , cadena )
                   cadena := "<Cd>SEPA</Cd>"
                   FWriteLn( nHandle , cadena )
                cadena := "</SvcLvl>"
                FWriteLn( nHandle , cadena )
                cadena := "<LclInstrm>"
                FWriteLn( nHandle , cadena )
                   cadena := "<Cd>CORE</Cd>"
                   FWriteLn( nHandle , cadena )
                cadena := "</LclInstrm>"
                FWriteLn( nHandle , cadena )
                cadena := "<SeqTp>RCUR</SeqTp>"
                FWriteLn( nHandle , cadena )
             cadena := "</PmtTpInf>"
             FWriteLn( nHandle , cadena )
             cadena := "<ReqdColltnDt>" + Str( Year( dFecha ), 4 ) + "-" + Padl( Month( dFecha ), 2, "0" ) + "-" + Padl( Day( dFecha ), 2, "0" ) + "</ReqdColltnDt>"
             FWriteLn( nHandle , cadena )
             cadena := "<Cdtr>"
             FWriteLn( nHandle , cadena )
                cadena := "<Nm>" + AllTrim( Padr( ArreglaNombre( oDatos[ ( dbGesBanco )->( fieldpos( "NOMBRE" ) ) ] ), 70, " " ) ) + "</Nm>"
                FWriteLn( nHandle , cadena )
             cadena := "</Cdtr>"
             FWriteLn( nHandle , cadena )
             cadena := "<CdtrAcct>"
             FWriteLn( nHandle , cadena )
                cadena := "<Id>"
                FWriteLn( nHandle , cadena )
                   cadena := "<IBAN>" + AllTrim( Padr( oDatos[ ( dbGesBanco )->( fieldpos( "CCCABONO" ) ) ], 34, " " ) ) + "</IBAN>"
                   FWriteLn( nHandle , cadena )
                cadena := "</Id>"
                FWriteLn( nHandle , cadena )
             cadena := "</CdtrAcct>"
             FWriteLn( nHandle , cadena )
             cadena := "<CdtrAgt>"
             FWriteLn( nHandle , cadena )
                cadena := "<FinInstnId>"
                FWriteLn( nHandle , cadena )
                cadena := "</FinInstnId>"
                FWriteLn( nHandle , cadena )
             cadena := "</CdtrAgt>"
             FWriteLn( nHandle , cadena )
             cadena := "<CdtrSchmeId>"
             FWriteLn( nHandle , cadena )
                cadena := "<Id>"
                FWriteLn( nHandle , cadena )
                   cadena := "<PrvtId>"
                   FWriteLn( nHandle , cadena )
                      cadena := "<Othr>"
                      FWriteLn( nHandle , cadena )
                          cadena := "<Id>" + AllTrim( "ES" + cGetDigitIDSEPA( AllTrim( oDatos[ ( dbGesBanco )->( fieldpos( "NIF" ) ) ] ), "ES" ) + oDatos[ ( dbGesBanco )->( fieldpos( "Sufijo" ) ) ] + Padr( oDatos[ ( dbGesBanco )->( fieldpos( "NIF" ) ) ], 28, " " ) ) + "</Id>"
                          FWriteLn( nHandle , cadena )
                          cadena := "<SchmeNm>"
                          FWriteLn( nHandle , cadena )
                             cadena := "<Prtry>SEPA</Prtry>"
                             FWriteLn( nHandle , cadena )
                          cadena := "</SchmeNm>"
                          FWriteLn( nHandle , cadena )
                      cadena := "</Othr>"
                      FWriteLn( nHandle , cadena )
                   cadena := "</PrvtId>"
                   FWriteLn( nHandle , cadena )
                cadena := "</Id>"
                FWriteLn( nHandle , cadena )
             cadena := "</CdtrSchmeId>"
             FWriteLn( nHandle , cadena )

             // INFORMACION DEL ADEUDO DIRECTO
             ( cDbTmp )->( DbGoTop() )
             nCont := 0
             nTotImp := 0
             nContReg := 0
             While ( cDbTmp )->( !Eof() )
                If ( cDbTmp )->LSELECT .and. ( cDBTmp )->IMPORTE > 0
                   nCont ++
                   nTotImp += ( cDbTmp )->IMPORTE

                   cadena := "<DrctDbtTxInf>"
                   FWriteLn( nHandle , cadena )
                      cadena := "<PmtId>"
                      FWriteLn( nHandle , cadena )
                         cadena := "<EndToEndId>" + Padr( "REMESA HERMANDAD REF. "+oDatos[ ( dbGesBanco )->( fieldpos( "Codigo" ) ) ]+( cDbTmp )->CODIGO, 35, " " ) + "</EndToEndId>"
                         FWriteLn( nHandle , cadena )
                      cadena := "</PmtId>"
                      FWriteLn( nHandle , cadena )
                      cadena := "<InstdAmt Ccy=" + CHR(34) + "EUR" + CHR(34) + ">" + AllTrim( Transform( ( cDbTmp )->IMPORTE, cPictImpSEPA(.F.) ) ) + "</InstdAmt>"
                      FWriteLn( nHandle , cadena )
                      cadena := "<DrctDbtTx>"
                      FWriteLn( nHandle , cadena )
                         cadena := "<MndtRltdInf>"
                         FWriteLn( nHandle , cadena )
                            cadena := "<MndtId>" + Padr( ( cDbTmp )->REFBANCO, 35, " " ) + "</MndtId>"
                            FWriteLn( nHandle , cadena )
                            cadena := "<DtOfSgntr>" + Str( Year( ( cDbTmp )->MANDATO ), 4 ) + "-" + Padl( Month( ( cDbTmp )->MANDATO ), 2, "0" ) + "-" + Padl( Day( ( cDbTmp )->MANDATO ), 2, "0" ) + "</DtOfSgntr>"
                            FWriteLn( nHandle , cadena )
                         cadena := "</MndtRltdInf>"
                         FWriteLn( nHandle , cadena )
                      cadena := "</DrctDbtTx>"
                      FWriteLn( nHandle , cadena )
                      cadena := "<DbtrAgt>"
                      FWriteLn( nHandle , cadena )
                         cadena := "<FinInstnId>"
                         FWriteLn( nHandle , cadena )
                         cadena := "</FinInstnId>"
                         FWriteLn( nHandle , cadena )
                      cadena := "</DbtrAgt>"
                      FWriteLn( nHandle , cadena )
                      cadena := "<Dbtr>"
                      FWriteLn( nHandle , cadena )
                         cadena := "<Nm>" + AllTrim( Padr( ArreglaNombre( AllTrim( ( cDbTmp )->NOMBRE ) + " " + AllTrim( ( cDbTmp )->APELLIDOS ) ), 70, " " ) ) + "</Nm>"
                         FWriteLn( nHandle , cadena )
                      cadena := "</Dbtr>"
                      FWriteLn( nHandle , cadena )
                      cadena := "<DbtrAcct>"
                      FWriteLn( nHandle , cadena )
                         cadena := "<Id>"
                         FWriteLn( nHandle , cadena )
                            cadena := "<IBAN>" + AllTrim( Padr( "ES" + DCIdentificador( ( cDbTmp )->CBANCO + ( cDbTmp )->COFICINA + ( cDbTmp )->CCUENTA + "ES00" ) + ( cDbTmp )->CBANCO + ( cDbTmp )->COFICINA + ( cDbTmp )->CCUENTA, 34, " " ) ) + "</IBAN>"
                            FWriteLn( nHandle , cadena )
                         cadena := "</Id>"
                         FWriteLn( nHandle , cadena )
                      cadena := "</DbtrAcct>"
                      FWriteLn( nHandle , cadena )
                      cadena := "<RmtInf>"
                      FWriteLn( nHandle , cadena )
                         cadena := "<Ustrd>" + AllTrim( Padr( ArreglaNombre( AllTrim( ( cDbTmp )->OBSERV ) ), 140, " " ) ) + "</Ustrd>"
                         FWriteLn( nHandle , cadena )
                      cadena := "</RmtInf>"
                      FWriteLn( nHandle , cadena )
                   cadena := "</DrctDbtTxInf>"
                   FWriteLn( nHandle , cadena )
                end if
                ( cDbTmp )->( DbSkip() )
             end while

          cadena := "</PmtInf>"
          FWriteLn( nHandle , cadena )

          cadena := "</CstmrDrctDbtInitn>"
          FWriteLn( nHandle , cadena )

          cadena := "</Document>"
          FWriteLn( nHandle , cadena )

          FClose(nHandle)
Posts: 1515
Joined: Thu Oct 30, 2008 02:37 PM

Re: Adeudos Directos SEPA en euros Esquema B2B

Posted: Wed Dec 02, 2015 11:30 AM

Hola Andaretor,

Muchas gracias por tu aporte. Voy a probarlo.

Saludos

Posts: 563
Joined: Sun Oct 09, 2005 07:23 PM

Re: Adeudos Directos SEPA en euros Esquema B2B

Posted: Thu Dec 03, 2015 08:09 PM

Hay funciones que no aparecen:

ArreglaNombre

DCIdentificador

cGetDigitIDSEPA

¿Podías ponernos el código?
Gracias de antemano.

Posts: 518
Joined: Fri Jun 29, 2012 12:49 PM

Re: Adeudos Directos SEPA en euros Esquema B2B

Posted: Mon Dec 14, 2015 03:40 PM

Hola!,

¿Algún progreso?.

Yo probé también el código de Quimm y no funciona correctamente.

Muy agradecida ;).

Posts: 731
Joined: Fri Oct 07, 2005 07:42 AM

Re: Adeudos Directos SEPA en euros Esquema B2B

Posted: Tue Dec 15, 2015 06:50 PM

Buenas

Por lo que veo, los errores son de validación , no de estructura del XML, por poner un ejemplo ;
ERROR: Element '{urn:iso:std:iso:20022:tech:xsd:pain.008.001.02}PmtInfId': [facet 'maxLength'] The value has a length of '37'; this exceeds the allowed maximum length of '35'

Dicen bien claro que estas pasando un valor de longitud de 37, cuando el máx. es de 35.
Por lo tanto, la clase o funcion que crea el XML , debería tener en cuenta el XSD para que cumple el XML.

Saludos Cordiales

Saludos

Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
Posts: 518
Joined: Fri Jun 29, 2012 12:49 PM

Re: Adeudos Directos SEPA en euros Esquema B2B

Posted: Wed Dec 30, 2015 07:58 PM

Amig@s,

¿Se sabe algo?.

Que dios os bendiga y feliz 2016.

Continue the discussion