FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Envio de transferencias bancarias automatizadas
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Envio de transferencias bancarias automatizadas
Posted: Mon Nov 01, 2010 09:43 PM

Sabeis si existe en Espa帽a un sistema automatizado para poder enviar una transferencia bancaria desde una aplicaci贸n ?

gracias :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 711
Joined: Thu Oct 06, 2005 09:57 PM
Re: Envio de transferencias bancarias automatizadas
Posted: Tue Nov 02, 2010 03:34 AM

Cuaderno CSB 34

Un saludo



Manuel
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: Envio de transferencias bancarias automatizadas
Posted: Tue Nov 02, 2010 08:05 AM

Manuel,

gracias! :-)

Tienes desarrollada una rutina para realizarlo con Harbour y FWH ?

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1446
Joined: Mon Oct 10, 2005 02:38 PM
Re: Envio de transferencias bancarias automatizadas
Posted: Tue Nov 02, 2010 09:01 AM
Antonio Linares wrote:Sabeis si existe en Espa帽a un sistema automatizado para poder enviar una transferencia bancaria desde una aplicaci贸n ?

gracias :-)


Hola,

Puestos a desarrollar y seg煤n las necesidades que se tengan:

Cuaderno CSB 34 (ya tiene unos a帽itos, es todo un "cl谩sico")

Cuaderno CSB 34-1 el anterior un poco evolucionado

Cuaderno CSB 34-11 para transferencias no SEPA (nacionales e internacionales [Espacio Economico Europeo])

Cuaderno CSB 34-12 para transferencias SEPA (nacionales e internacionales[Espacio Economico Europeo])

Cuaderno CSB 34-14 es la unificaci贸n de todos los anteriores

El sencillo y por ahora en y para Espa帽a: Cuaderno CSB 34

Y no, no tengo ninguna rutina para ello.

Un Saludo

Carlos G.



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

Posts: 1516
Joined: Thu May 27, 2010 02:06 PM
Re: Envio de transferencias bancarias automatizadas
Posted: Tue Nov 02, 2010 12:48 PM
Antonio yo tengo una rutina muy vieja (mas de 8a帽os) que generaba los csb58 ( letras) parta una empresa ... En esencia es un archivo de txt con unos campos de extensi贸n normalizada .Es sencillo de hacer con fopen(), fwrite() ,fclose().
en este enlace tienes las especificaciones de la norma :
http://www.cuadernosbancarios.com/wp-content/uploads/2009/03/cuaderno_34.pdf
Saludos.
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: Envio de transferencias bancarias automatizadas
Posted: Tue Nov 02, 2010 02:49 PM

Manuel,

Te importar铆a mostrarme el c贸digo de esa rutina para ver como lo tienes organizado ? gracias! :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1516
Joined: Thu May 27, 2010 02:06 PM
Re: Envio de transferencias bancarias automatizadas
Posted: Tue Nov 02, 2010 03:29 PM
Es un codigo muy viejo y poco depurado , te he a帽adido alg煤n comentario para aclarar pero asi todo...
las xxxx son datos privados del cliente para el que se hizo que estan en el codigo y realmente tendrian que ser variables ,para que el c贸digo fuera gen茅rico.
Este proceso es para una empresa simple solo un presentador , solo un ordenante ...

para el csb58 :

Code (fw): Select all Collapse
Function Generarecibo(cIni,cFin,cDir)
local cCbs
local clinea,cFecha,cVarios,cPresenta,cCliente,cnombre
local cDc,cEnt,cSuc,cCC,cComp,nLiquido,nImporte,nrecibo
local strfacturas := ""
local G:= "Especificaci贸n de numeros de factura : 聽"
local recibo,linrec,i
local areg:={}
local aCampos:={}
local aOrden
聽 DEFAULT cDir := "c:\"
聽 cCbs:= cDir+"cbs58.txt"

聽 // borra el csb58 anterior si existiera
聽 if file(cCbs)
聽 聽 聽Ferase(cCbs)
聽 endif
聽 // crea el archivo nuevo
聽 IF (nHandle := FCREATE(cCbs,0)) == -1
聽 聽 聽 聽 聽 聽pausa("Archivo cbs58 no creado "+str( FERROR()) )
聽 聽 聽 聽 聽 聽return .f.
聽 endif
聽 // abre la dbf donde estan los recibos generados para coger datos y le pone scopes 
聽 // para el recibo inicial y final a emitir .

聽 recibo:=Abrimos("cab_rec")
聽 (recibo)->(ordsetfocus(1))
聽 (recibo)->(ordscope(0,cIni))
聽 (recibo)->(ordscope(1,cfin))
聽 (recibo)->(dbgotop())

聽// abre las lineas del recibo para coger los datos de las distintas facturas 
//que componen el recibo ( pueden ser una o varias)

聽 linrec:=Abrimos("lin_rec")
聽 (linrec)->(ordsetfocus(1))
聽 (linrec)->(dbgotop())

聽 聽//---------------------- linea1 聽llamada cabecera presentador ---------------------------

聽 cLinea:="5170xxxxxxxxx" 聽//x->nif emisor 聽el 51 nos dice que se emite en euros. 70 codigo de dato ->indica que es cabecera
聽 cPresenta :"555" 聽// codigo presentador -> no recuerdo pero creo que lo da el banco .

聽 cLinea :=cLinea+cPresenta
聽 cFecha :=ponfecha() 聽 聽// funcion-> strzero(day(xFecha),2)+strzero(month(xFecha),2)+right(str(year(xFecha)),2)
聽 cLinea :=cLinea+cFecha+" 聽 聽 聽"+"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" // 40 posiciones para el nombre de emisor
聽 
聽 cVarios := Space(20) + "xxxx" + "xxxx" 聽// x->codigo de banco y oficina del emisor
聽
聽 clinea := cLinea +cVarios+space(66)+chr(13)+chr(10)
聽 FWRITE(nHandle,clinea)

聽//------------ linea 2 llamada cabecera ordenante 聽----------------------

聽 cLinea :="5370xxxxxxxxx"+cPresenta+cFecha+" 聽 聽 聽" 聽// 53 para el euro 70 codigo de dato +nif cliente
聽 cLinea:=cLinea+"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" //40 posiciones del nombre del emisor

聽
聽 cVarios := "xxxx"+"xxxx"+"xx"+"xxxxxxxxxx" // cuenta de ingreso emisor
聽
聽 clinea := cLinea +cVarios+Space(8)+"06"+Space(52)+"330240901"+space(3)+chr(13)+chr(10)
聽 FWRITE(nHandle,clinea)

//--------------- lineas _registro individual ______________________

聽 聽i:= 0
聽 聽nImporte:= 0
聽 聽do while !(recibo)->(eof())

聽 聽 聽 if 聽(recibo)->status_e != "S"
聽 聽 聽 聽 聽 areg:={}
聽 聽 聽 聽 聽 cLinea:= "56"+"70"+"xxxxxxxxx"+cPresenta+space(6) // 56 para euro 70 codigo de dato 聽x->nif del emisor

聽 聽 聽 聽 聽 // codigo de cliente+nombre 聽46 posiciones

聽 聽 聽 聽 聽 cCliente:=(recibo)->cliente
聽 聽 聽 聽 聽 cNombre:=(recibo)->nombre 
聽 聽 聽 聽 聽
聽 聽 聽 聽 聽 cLinea:=cLinea+ccliente+cNombre

聽 聽 聽 聽 聽 cDc:= (recibo)->dc
聽 聽 聽 聽 聽 if Empty(cDc)
聽 聽 聽 聽 聽 聽 pausa( "el Dc de "+cCliente+ " no existe se colocar谩n ** en su lugar")
聽 聽 聽 聽 聽 聽 cDC := "**"
聽 聽 聽 聽 聽 endif
聽 聽 聽 聽 聽 cEnt:=(recibo)->ent
聽 聽 聽 聽 聽 cSuc:=(recibo)->suc
聽 聽 聽 聽 聽 cCC:=(recibo)->banco_cc
聽 聽 聽 聽 聽 cComp:=CalculaCCC(cEnt,cSuc,cCC)
聽 聽 聽 聽 聽 if cDC != cComp
聽 聽 聽 聽 聽 聽 聽pausa("ERROR EN LA CUENTA DEL CLIENTE "+cCliente)
聽 聽 聽 聽 聽 endif
聽 聽 聽 聽 聽 cVarios = cEnt + cSuc + cDC + ajuscc(cCC)
聽 聽 聽 聽 聽 nLiquido:= (recibo)->liquido
聽 聽 聽 聽 聽 cVarios:= cVarios + ajustaEuro(nLiquido, 10)
聽 聽 聽 聽 聽 nImporte = nImporte + (nliquido*100)
聽 聽 聽 聽 聽 nRecibo:= (recibo)->n_recibo
聽 聽 聽 聽 聽 cVarios:= cVarios +cCliente + "Rec." + ajusta(nrecibo, 6)
聽 聽 聽 聽 聽 cVarios = cVarios + G + ponfecha((recibo)->fecha_venc)
聽 聽 聽 聽 聽 cLinea:=cLinea+ cVarios+space(2)+chr(13)+chr(10)

聽 聽 聽 聽 聽 aadd(areg,cLinea)
聽 聽 聽 聽 聽 * FWRITE(nHandle,cLinea)

聽 聽 聽 聽 聽 //----------------- linea 1 -------------------------------

聽 聽 聽 聽 聽 cLinea:="56"+ "71" +"xxxxxxxxx"+cPresenta+space(6)+cCliente 聽// 56 euro, 71 codigo dato linea 聽 x->nif
聽 聽 聽 聽 聽 (linrec)->(ordscope(0,nrecibo))
聽 聽 聽 聽 聽 (linrec)->(ordscope(1,nrecibo))
聽 聽 聽 聽 聽 (linrec)->(dbgotop())
聽 聽 聽 聽 聽 strfacturas:=""
聽 聽 聽 聽 聽 do while !(linrec)->(eof())
聽 聽 聽 聽 聽 聽 聽 strfacturas = strfacturas + (linrec)->factura + " - "
聽 聽 聽 聽 聽 聽 聽(linrec)->(dbskip())
聽 聽 聽 聽 聽 enddo
聽 聽 聽 聽 聽 (linrec)->(ordscope(0,nil))
聽 聽 聽 聽 聽 (linrec)->(ordscope(1,nil))
聽 聽 聽 聽 聽 strfacturas:=padr(strfacturas,134)
聽 聽 聽 聽 聽 cLinea := cLinea+strfacturas+chr(13)+chr(10)

聽 聽 聽 聽 聽 aadd(areg,cLinea)
聽 聽 聽 聽 聽 * FWRITE(nHandle,cLinea)

聽 聽 聽 聽 聽 aadd(areg,cEnt + cSuc + cCliente)

聽 聽 聽 聽 聽 if (recibo)->(rlock())
聽 聽 聽 聽 聽 聽 聽 聽(recibo)->status_e := "S"
聽 聽 聽 聽 聽 聽 聽 聽(recibo)->(dbunlock())
聽 聽 聽 聽 聽 endif
聽 聽 聽 聽 聽 i++
聽 聽 聽 聽 聽 aadd(aCampos,areg)
聽 聽 聽 聽endif
聽 聽 聽 聽(recibo)->(dbskip())
聽 聽 enddo

聽 聽 aOrden := ASORT(aCampos,,, { |x, y| x[3] < y[3] })
聽 聽 for i = 1 to len(aOrden)
聽 聽 聽 聽FWRITE(nHandle,aOrden[i,1])
聽 聽 聽 聽FWRITE(nHandle,aOrden[i,2])
聽 聽 next
聽 聽i:=len(aCampos)

// ----------- cierre 2 lineas --------------


聽 //-------------------------linea total cliente ordenante ---------------
聽
聽 聽cLinea:= "58"+"70"+"xxxxxxxxx"+cPresenta 聽 // x->if del emisor
聽 聽cVarios:=Space(20)+ajusta(nImporte,10)+Space(6)+ajusta(i,10)+ajusta(i*2+2,10)
聽 聽cVarios:= padr(cVarios,94)
聽 聽cLinea := cLinea+space(6)+space(6)+space(40)+cVarios+chr(13)+chr(10)
聽 聽FWRITE(nHandle,cLinea)

聽 聽// ----------- linea total General --------------------------

聽 聽cLinea:= "59"+"70"+"xxxxxxxxx"+cPresenta //x->nif del emisor sin giones

聽 聽cVarios:= "0001"+Space(16)+ajusta(nImporte,10)+Space(6)+ajusta(i,10)+ajusta(i*2+4,10)
聽 聽cVarios:= Padr(cVarios,94)
聽 聽cLinea := cLinea+space(6)+space(6)+space(40)+cVarios+chr(13)+chr(10)
聽 聽FWRITE(nHandle,cLinea)

聽 聽(recibo)->(ordscope(0,nil))
聽 聽(recibo)->(ordscope(1,nil))

聽 聽 聽 FCLOSE(nHandle)

聽close(recibo)
聽close(linrec)

return .t.
Posts: 711
Joined: Thu Oct 06, 2005 09:57 PM
Re: Envio de transferencias bancarias automatizadas
Posted: Thu Nov 04, 2010 06:20 AM

Antonio,

Creo que el cuaderno CSB 58 nada tiene que ver con el envio de transferencias 贸 n贸minas automatizadas. El cuaderno a aplicar es el CSB 34.

Se trata de hacer un fichero plano, siguiendo un formato de registro definido en el propio cuaderno.

El tema, aunque sencillo, es bastante tedioso y en mi opini贸n, hay que realizarlo seg煤n las caracter铆sticas de cada aplicaci贸n. Es decir, hay que sacar de nuestra base de datos esa informaci贸n y a帽adirla a un fichero plano. Este fichero plano es el que finalmente se envia al banco.

Algunas entidades bancarias, tienen aplicaciones gratuitas para realizar esta labor. Te puede servir para comprobar si el fichero plano que tu realizas, coincide con el que realiza la aplicaci贸n del banco.

Un saludo



Manuel
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: Envio de transferencias bancarias automatizadas
Posted: Thu Nov 04, 2010 07:25 AM

Manuel,

gracias por la informaci贸n :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1516
Joined: Thu May 27, 2010 02:06 PM
Re: Envio de transferencias bancarias automatizadas
Posted: Thu Nov 04, 2010 07:51 AM
Manuel Valdenebro wrote:Antonio,

Creo que el cuaderno CSB 58 nada tiene que ver con el envio de transferencias 贸 n贸minas automatizadas. El cuaderno a aplicar es el CSB 34.

Efectivamente , csb34 son trasferencias , csb54 son anticipos de credito ... aunque nada tiene que ver, el proceso de creaci贸n es el mismo, salvando que los "campos" a usar en el texto plano son distintos y se ajustan a la norma csb34 . :-)

Continue the discussion