Envio de transferencias bancarias automatizadas

Post Reply
User avatar
Antonio Linares
Site Admin
Posts: 42521
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 31 times
Been thanked: 76 times
Contact:

Envio de transferencias bancarias automatizadas

Post by Antonio Linares »

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
User avatar
Manuel Valdenebro
Posts: 706
Joined: Thu Oct 06, 2005 9:57 pm
Location: Málaga-España

Re: Envio de transferencias bancarias automatizadas

Post by Manuel Valdenebro »

Cuaderno CSB 34
Un saludo

Manuel
User avatar
Antonio Linares
Site Admin
Posts: 42521
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 31 times
Been thanked: 76 times
Contact:

Re: Envio de transferencias bancarias automatizadas

Post by Antonio Linares »

Manuel,

gracias! :-)

Tienes desarrollada una rutina para realizarlo con Harbour y FWH ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
FiveWiDi
Posts: 1238
Joined: Mon Oct 10, 2005 2:38 pm
Has thanked: 3 times
Been thanked: 4 times

Re: Envio de transferencias bancarias automatizadas

Post by FiveWiDi »

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 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
User avatar
mastintin
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

Re: Envio de transferencias bancarias automatizadas

Post by mastintin »

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.
User avatar
Antonio Linares
Site Admin
Posts: 42521
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 31 times
Been thanked: 76 times
Contact:

Re: Envio de transferencias bancarias automatizadas

Post by Antonio Linares »

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
User avatar
mastintin
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

Re: Envio de transferencias bancarias automatizadas

Post by mastintin »

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: Select all | Expand



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.

User avatar
Manuel Valdenebro
Posts: 706
Joined: Thu Oct 06, 2005 9:57 pm
Location: Málaga-España

Re: Envio de transferencias bancarias automatizadas

Post by Manuel Valdenebro »

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
User avatar
Antonio Linares
Site Admin
Posts: 42521
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 31 times
Been thanked: 76 times
Contact:

Re: Envio de transferencias bancarias automatizadas

Post by Antonio Linares »

Manuel,

gracias por la información :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
mastintin
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

Re: Envio de transferencias bancarias automatizadas

Post by mastintin »

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 . :)
Post Reply