function main()
local cTipoDocumento := "pain.001.001.03"
local cTransferID := "13/00001"
local cFechaCreaDocu := CreaIsoDateTime()
local cTotalImportes := 0
local cOperaciones,cFechaPago
local cNif := "B333333333"
local aRecibos:= { "Recibo1" ,"TRF", 11111.11 , Date()+3 ,;
"ORDENANTE","CODIGO_IBAN_ORDENANTE","BIC_ORDENANTE","SLEV" ,{ "n_recibo","id_extremo" ,"BIC_destino" } }
local i
local etiRaizMensaje, GrpHdr ,oDoc , GrpPAgos , GrpTrasf
local xEtiqueta,xEtiqueta1
local oXml := mxmlNewXML()
// cOperaciones := len(aRecibos)
cOperaciones := 1
for i= 1 to cOperaciones
cTotalImportes:= cTotalImportes + aRecibos[3]
next
cTotalImportes := alltrim( str( cTotalImportes , 10, 2))
oDoc := mxmlNewElement( oXml, "Document" )
mxmlElementSetAttr( oDoc, "xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance" )
mxmlElementSetAttr( oDoc, "xmlns","urn:iso:std:iso:20022:tech:xsd:"+cTipoDocumento )
etiRaizMensaje := mxmlNewElement( oDoc, "CstmrDrctDbtInitn" )
//------------------------- Añadimos Grupo Cabecera (unica y obligatoria ) ---------------------
GrpHdr := mxmlNewElement( etiRaizMensaje , "GrpHdr" )
xEtiqueta := mxmlNewElement( GrpHdr, "MsgId" ) // Identificacion del mensaje 35 caracteres maximo ( similar a codigo de remesa )
mxmlNewText(xEtiqueta, 0, cTransferID ) // asignamos el cTransferID
xEtiqueta := mxmlNewElement( GrpHdr, "CreDtTm" ) // fecha creacion formato ISO
mxmlNewText( xEtiqueta, 0, cFechaCreaDocu ) // asignamos el cFechaCreaDocu
xEtiqueta:= mxmlNewElement( GrpHdr, "NbOfTxs" ) // numero de operaciones individuales (para control )
mxmlNewText(xEtiqueta, 0, cOperaciones)
xEtiqueta:= mxmlNewElement( GrpHdr, "CtrlSum" ) //Suma de importes imcluidos ( para control)
mxmlNewText(xEtiqueta, 0, cTotalImportes)
xEtiqueta := mxmlNewElement( GrpHdr, "InitgPty" ) // iniciador del pago ( identifica al pagador)
xEtiqueta := mxmlNewElement( xEtiqueta, "Nm" )
mxmlNewText(xEtiqueta, 0, cNif ) // el NIF-Sufijo (12 caracteres) cuyo uso tenga acordado con su entidad financiera
//------------------------- Añadimos Grupo Informacion de pagos ---------------------
GrpPAgos := mxmlNewElement( etiRaizMensaje , "PmtInf" ) // inicio bloque de informacion de pagos
xEtiqueta := mxmlNewElement( GrpPAgos , "PmtInfId" ) // codigo de "recibo"
mxmlNewText(xEtiqueta, 0, aRecibos[1] )
xEtiqueta := mxmlNewElement( GrpPAgos , "PmtMtd" ) //metodo de pago (TRF/CHK) trasferencia o cheque
mxmlNewText(xEtiqueta, 0, aRecibos[2] )
xEtiqueta := mxmlNewElement( GrpPAgos , "NbOfTxs" ) // numero de operaciones individuales (para control )
mxmlNewText(xEtiqueta, 0, cOperaciones )
xEtiqueta := mxmlNewElement( GrpPAgos , "CtrlSum" ) //Suma de importes imcluidos ( para control)
mxmlNewText(xEtiqueta, 0, cTotalImportes )
xEtiqueta := mxmlNewElement( GrpPAgos , "PmtTpInf" ) // etiqueta de inicio bloque tipo de pago
xEtiqueta := mxmlNewElement( xEtiqueta , "SvcLvl" ) // etiqueta de inicio bloque nivel de servicio
xEtiqueta := mxmlNewElement( xEtiqueta , "Cd" ) // codigo de servicio fijo SEPA
mxmlNewText(xEtiqueta, 0, "SEPA" )
xEtiqueta := mxmlNewElement( GrpPAgos , "ReqdExctnDt" ) //Fecha de ejecución solicitada
cFechapago:= CreateIsoDate(aRecibos[4])
mxmlNewText(xEtiqueta, 0, cFechaPago )
xEtiqueta := mxmlNewElement( GrpPAgos , "Dbtr" ) // etiquet inicio identificacion ordenante
xEtiqueta := mxmlNewElement( xEtiqueta , "Nm" ) // nombre del ordenante
mxmlNewText(xEtiqueta, 0, aRecibos[5] )
xEtiqueta := mxmlNewElement( GrpPAgos , "DbtrAcct" ) // inicio etiqueta cuenta iban ordenante
xEtiqueta1 := mxmlNewElement( xEtiqueta , "Id" )
xEtiqueta1 := mxmlNewElement( xEtiqueta1 , "IBAN" )
mxmlNewText(xEtiqueta1, 0, aRecibos[6] )
xEtiqueta1 := mxmlNewElement( xEtiqueta , "Ccy" ) // divisa
mxmlNewText(xEtiqueta1, 0, "EUR" )
xEtiqueta := mxmlNewElement( GrpPAgos , "DbtrAgt" ) // etiqueta entidad ordenante
xEtiqueta1 := mxmlNewElement( xEtiqueta , "FinInstnId" ) // etiqueta identificacion entidad ordenanate
xEtiqueta1 := mxmlNewElement( xEtiqueta1 , "BIC" ) // BIC entidad ordenante
mxmlNewText(xEtiqueta1, 0, aRecibos[7] )
xEtiqueta := mxmlNewElement( GrpPAgos , "ChrgBr" ) // clausula de gastos (CRED/DEBT/SHAR/SLEV) benefici/ordenante /compartidos/ acordados
mxmlNewText(xEtiqueta, 0, aRecibos[8] )
//---------------------------- inicio subBloque informacion trasferencia
GrpTrasf := mxmlNewElement( GrpPAgos , "CdtTrfTxInf" ) // bloque de informacion trasferencia
xEtiqueta := mxmlNewElement( GrpTrasf , "PmtId" ) // bloque instrucciones de pago
xEtiqueta1 := mxmlNewElement( xEtiqueta , "InstrId" ) // numero de recibo max 35caracteres
mxmlNewText(xEtiqueta1, 0, aRecibos[9,1] )
xEtiqueta1 := mxmlNewElement( xEtiqueta , "EndToEndId" ) // identificador de extremo a extremo ¿?
mxmlNewText(xEtiqueta1, 0, aRecibos[9,2] )
xEtiqueta := mxmlNewElement( GrpTrasf , "Amt" ) // bloque de importe
xEtiqueta1 := mxmlNewElement( xEtiqueta , "InstdAmt" )
mxmlElementSetAttr( xEtiqueta1, "Ccy","EUR" ) // importe dos decimales 11 digitos total usar "."
mxmlNewText(xEtiqueta1, 0, alltrim(str(aRecibos[3]) ) )
xEtiqueta := mxmlNewElement( GrpTrasf , "CdtrAgt" ) // entidad del beneficiario
xEtiqueta1 := mxmlNewElement( xEtiqueta , "FinInstnId" )
xEtiqueta1 := mxmlNewElement( xEtiqueta1 , "BIC" ) // bic beneficiario
mxmlNewText(xEtiqueta1, 0, aRecibos[9,3] )
xEtiqueta := mxmlNewElement( GrpTrasf , "Cdtr" ) // beneficiario
xEtiqueta1 := mxmlNewElement( xEtiqueta , "Nm" )
mxmlNewText(xEtiqueta1, 0, "Nombre_beneficiario" )
xEtiqueta := mxmlNewElement( GrpTrasf , "CdtrAcct" )
xEtiqueta1 := mxmlNewElement( xEtiqueta , "Id" )
xEtiqueta1 := mxmlNewElement( xEtiqueta1 , "IBAN" ) //iban beneficiario
mxmlNewText(xEtiqueta1, 0, "iban_beneficiario" )
xEtiqueta := mxmlNewElement( GrpTrasf , "RmtInf" ) // informacion transacion
xEtiqueta1 := mxmlNewElement( xEtiqueta , "Ustrd" ) // descripcion maximo 140caracteres
mxmlNewText(xEtiqueta1, 0, "Texto descriptivo de la transaccion" )
//------------- fin subbloque informacion trasferencia
mxmlSaveFile( oXML, "b2b.xml", MXML_NO_CALLBACK )
return NIL
FUNCTION CreaIsoDateTime()
LOCAL cFecha:= Dtos(Date())
RETURN CreateIsoDate()+"T"+Time()
Function CreateIsoDate(dDate)
LOCAL cFecha
DEFAULT dDate:= Date()
cFecha:= Dtos(dDate)
RETURN Left(cfecha,4)+"-"+SubStr(cFecha,5,2)+"-"+SubStr(cFecha,7,2)