Envio de transferencias bancarias automatizadas

Envio de transferencias bancarias automatizadas

Postby Antonio Linares » Mon Nov 01, 2010 9: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
User avatar
Antonio Linares
Site Admin
 
Posts: 42068
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Envio de transferencias bancarias automatizadas

Postby Manuel Valdenebro » Tue Nov 02, 2010 3:34 am

Cuaderno CSB 34
Un saludo

Manuel
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

Postby Antonio Linares » Tue Nov 02, 2010 8:05 am

Manuel,

gracias! :-)

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

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42068
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Envio de transferencias bancarias automatizadas

Postby FiveWiDi » Tue Nov 02, 2010 9: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 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
 
Posts: 1168
Joined: Mon Oct 10, 2005 2:38 pm

Re: Envio de transferencias bancarias automatizadas

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

Re: Envio de transferencias bancarias automatizadas

Postby Antonio Linares » Tue Nov 02, 2010 2: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
User avatar
Antonio Linares
Site Admin
 
Posts: 42068
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Envio de transferencias bancarias automatizadas

Postby mastintin » Tue Nov 02, 2010 3: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: Select all  Expand view


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

Re: Envio de transferencias bancarias automatizadas

Postby Manuel Valdenebro » Thu Nov 04, 2010 6: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
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

Postby Antonio Linares » Thu Nov 04, 2010 7:25 am

Manuel,

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

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42068
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Envio de transferencias bancarias automatizadas

Postby mastintin » Thu Nov 04, 2010 7: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 . :)
User avatar
mastintin
 
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: russimicro and 35 guests