Sabeis si existe en Espa帽a un sistema automatizado para poder enviar una transferencia bancaria desde una aplicaci贸n ?
gracias ![]()
Sabeis si existe en Espa帽a un sistema automatizado para poder enviar una transferencia bancaria desde una aplicaci贸n ?
gracias ![]()
Cuaderno CSB 34
Manuel,
gracias! ![]()
Tienes desarrollada una rutina para realizarlo con Harbour y FWH ?
Antonio Linares wrote:Sabeis si existe en Espa帽a un sistema automatizado para poder enviar una transferencia bancaria desde una aplicaci贸n ?
gracias
Un Saludo
Carlos G.
FiveWin 25.12 + Harbour 3.2.0dev (r2502110321), BCC 7.7 Windows 11 Home
Manuel,
Te importar铆a mostrarme el c贸digo de esa rutina para ver como lo tienes organizado ? gracias! ![]()
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.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.
Manuel,
gracias por la informaci贸n ![]()
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.