Hola a todos.
Hace unos años para enviar una remesa de recibos al Banco (en España), se hacia en un fichero TXT, y se utilizaba la norma 19, la norma 32 o la norma 58.
Desde hace un par de años y al ser para toda Europa, el fichero hay que generarlo en XML.
¿Se puede generar un fichero XML desde CLIPPER..?
Supongo que alguien tendrá alguna rutina que genere este tipo de fichero, que es comun para todos los paises UE.
Podeis indicarme los pasos a seguir.
Muchas gracias como siempre.
Saludos.
XML - SEPA
Moderator: Rathinagiri
- SALINETAS24
- Posts: 667
- Joined: Tue Feb 27, 2018 3:06 am
- DBs Used: DBF
- Contact:
XML - SEPA
Como dijo el gran pensador Hommer Simpson..., - En este mundo solo hay 3 tipos de personas, los que saben contar y los que no.
Re: XML - SEPA
Hola.
Ve a esta direccion:
viewtopic.php?f=24&t=4808&p=45650&hilit=XML#p45650
Creo que te puede ayudar.
Ve a esta direccion:
viewtopic.php?f=24&t=4808&p=45650&hilit=XML#p45650
Creo que te puede ayudar.
- dragancesu
- Posts: 921
- Joined: Mon Jun 24, 2013 11:53 am
- DBs Used: DBF, MySQL, Oracle
- Location: Subotica, Serbia
Re: XML - SEPA
Look https://www.w3schools.com/xml/xml_whatis.asp
Do not worry much, the plain text file in which the data is entered can contain many tags for defining data and structures
Each one is specific and the one to whom you want to send a description of what it looks like, it's still easy
Do not worry much, the plain text file in which the data is entered can contain many tags for defining data and structures
Each one is specific and the one to whom you want to send a description of what it looks like, it's still easy
- SALINETAS24
- Posts: 667
- Joined: Tue Feb 27, 2018 3:06 am
- DBs Used: DBF
- Contact:
Re: XML - SEPA
Muchas gracias, lo probaré
Como dijo el gran pensador Hommer Simpson..., - En este mundo solo hay 3 tipos de personas, los que saben contar y los que no.
Re: XML - SEPA
Hola, mira este ejemplo de andaretor:
http://forums.fivetechsupport.com/viewt ... &start=105
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)
A mi me sirvió y mucho, tan solo que hubo que poner hace pocos meses la totalidad de importe y de número de recibos a demás de en la cabecera principal en la subcabecera.
Es decir repetir estas etiquetas, es la modificación 9.1 creo
cadena := "<NbOfTxs>" + AllTrim( Str( nCont ) ) + "</NbOfTxs>"
FWriteLn( nHandle , cadena )
cadena := "<CtrlSum>" + AllTrim( Transform( nTotImp, cPictImpSEPA(.F.) ) ) + "</CtrlSum>"
FWriteLn( nHandle , cadena )
Tambien en https://github.com/QuimFerrer/sepa
Saludos
http://forums.fivetechsupport.com/viewt ... &start=105
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)
A mi me sirvió y mucho, tan solo que hubo que poner hace pocos meses la totalidad de importe y de número de recibos a demás de en la cabecera principal en la subcabecera.
Es decir repetir estas etiquetas, es la modificación 9.1 creo
cadena := "<NbOfTxs>" + AllTrim( Str( nCont ) ) + "</NbOfTxs>"
FWriteLn( nHandle , cadena )
cadena := "<CtrlSum>" + AllTrim( Transform( nTotImp, cPictImpSEPA(.F.) ) ) + "</CtrlSum>"
FWriteLn( nHandle , cadena )
Tambien en https://github.com/QuimFerrer/sepa
Saludos
- SALINETAS24
- Posts: 667
- Joined: Tue Feb 27, 2018 3:06 am
- DBs Used: DBF
- Contact:
Re: XML - SEPA
Muchas gracias
Como dijo el gran pensador Hommer Simpson..., - En este mundo solo hay 3 tipos de personas, los que saben contar y los que no.