https://github.com/QuimFerrer/sepa
http://forums.fivetechsupport.com/viewtopic.php?f=6&t=25369&start=30
hay unas descargas que creo que pueden ser utiles.
Un Saludo
Alfonso Cobo
Hola Miguel,
nLONGI=LEN(lcCIF)
FOR I=1 TO nLONGI
IF SUBSTR(lcCIF,I,1)$'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
letraCIF=SUBSTR(lcCIF,I,1)
lcCIF=STUFF(lcCIF,I,1,str(&letraCIF))
nLONGI=LEN(lcCIF)
ENDIF
ENDFOR
cAux = lcCIF++'14'+'28'+'00'
|
Payments |
PMNT |
|
Cash Management |
CAMT |
|
Derivatives |
DERV |
|
Loans, Deposits & Syndications |
LDAS |
|
Foreign Exchange |
FORX |
|
Precious Metal |
PMET |
|
Commodities |
CMDT |
|
Trade Services |
TRAD |
|
Securities |
SECU |
|
Account Management |
ACMT |
|
Extended Domain |
XTND |
Hola Buenas llevo dos días rompiendome la cabeza, me han pasado un proyecto para manternerlo en visual Studio, este programa genera un fichero norma 19 en texto plano, ahora hay que hacer que genere el nuevo formato 19-14 SEPA, me podeis decir cuales son las principales diferencias al nuevo formato?? Solo es añadir la cuenta del cliente con formato IBAN ?? (esto ya lo he realizado introducciendo una función en la aplicación) , hay algún cambio mas ?? me tiene mareado el tema!! Muchas Gracias!
lcCIF2=''
** Convertir las letras del país (ES) en números aplicando E = 14 ; S = 28 y la letra del CIF por su valor
** En este ejemplo añado al CIF los números correspondientes al "ES" y dos ceros al final
nLONGI=LEN(lcCIF)
FOR I=1 TO nLONGI
IF SUBSTR(lcCIF,I,1)$'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
letraCIF=SUBSTR(lcCIF,I,1)
lcCIF2=lcCIF2+ALLTRIM(str(&letraCIF))
ELSE
lcCIF2=lcCIF2+SUBSTR(lcCIF,I,1)
ENDIF
ENDFOR
cAux = lcCIF2++'14'+'28'+'00'
Correcto Miguel.
El planteamiento solo es válido para sociedades con letra inicial en el CIF, como era mi caso. Con el código que propones es válido para CIF con letras tanto incial como al final.
No obstante, el bucle For ...Endfor da error porque no reemplaza correctamente el valor de las letras al estar analizando la variable lcCIF. Tambien da error en el resultado de MOD(nParte2,97) porque la cadena cAux ha aumentado de tamaño.
Paso la función CALCULA_ACREEDOR() nuevamente con las correcciones sobre las cuestiones apuntadas.
FUNCTION CALCULA_ACREEDOR(lcCIF, lcSufijo, llDControl)
**---------------------------------------------**
* Rutina para calcular el código ACREEDOR a partir del CIF de la entidad
* Parámetros:
* lcCIF = CIF de la entidad
* lcSufijo = Código sufijo de la entidad. Por defecto '000'
* llDControl = Obtener solo parte ES+los dos dígitos de control. Por defecto .F.
*-----------------------------------------------------
LOCAL nParte1 AS Integer, nResul1 AS Integer, cResul1 AS String, ;
nParte2 AS Integer, nResul2 AS Integer, cResul2 AS String,;
CIF AS String, nDigitosControl AS Integer, cDigitosControl AS String
Local llSoloDControl, letraCIF, Sufijo, i, nLetras
Sufijo = IIF(vartype(lcSufijo)='C', lcSufijo, '000')
llDControl = IIF(vartype(llDControl)='L', llDControl, .F.)
** Valor de cada letra para convertir el código de país a numérico
Local A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z
A = 10
B = 11
C = 12
D = 13
E = 14
F = 15
G = 16
H = 17
I = 18
J = 19
K = 20
L = 21
M = 22
N = 23
O = 24
P = 25
Q = 26
R = 27
S = 28
T = 29
U = 30
V = 31
W = 32
X = 33
Y = 34
Z = 35
if parameters()>0
**/Eliminar guiones y espacios en blanco en el CIF
CIF = alltrim(STRTRAN(STRTRAN(m.lcCIF, '-', ''), ' ', ''))
endif
IF LEN(m.CIF) # 9 OR ISDIGIT(m.CIF)
MESSAGEBOX('CIF no válido (Letra + 8 dígitos).', 0+32+0, 'CIF:'+m.lcCIF)
RETURN (m.CIF)
ENDIF
** Convertir las letras del país (ES) en números aplicando E = 14 ; S = 28 y la letra del CIF por su valor
** En este ejemplo añado al CIF los números correspondientes al "ES" y dos ceros al final
**/letraCIF=SUBSTR(CIF,1,1) && Válido para CIF con solo letra inicial
**/ cAux = alltrim(str(&letraCIF))+substr(CIF,2,8)+'14'+'28'+'00'
**/ Adaptando corrección por MIGUEL A. para CIFs con mas de una letra
cAux = CIF
nLetras = 0
FOR i=1 TO LEN(CIF)
IF SUBSTR(CIF,I,1)$'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
letraCIF=SUBSTR(CIF,i,1)
cAux=STUFF(cAux,i+nLetras,1,alltrim(str(&letraCIF)))
nLetras = nLetras+1
ENDIF
ENDFOR
cAux = cAux+'14'+'28'+'00'
nParte1 = VAL(SUBSTR(cAux,1,8))
nResul1 = MOD(nParte1,97)
cResul1 = ALLTRIM(STR(nResul1))
nParte2 = VAL(cResul1+SUBSTR(cAux,9,LEN(cAux)-8))
nResul2 = MOD(nParte2,97)
cResul2 = ALLTRIM(STR(nResul2))
nDigitosControl = 98 - VAL(cResul2)
cDigitosControl = ALLTRIM(STR(nDigitosControl))
** Los dígitos calculados de control deben ser 2 así que si el resultado es menor de 10, añado un 0 por delante
cDigitosControl = PADL(cDigitosControl, 2, "0")
return('ES'+cDigitosControl+IIF(llDControl,'',m.Sufijo+CIF))
endfunc
Feliz Año Nuevo
Alguno tiene la función de paso de CCC (codigo cuenta corriente) a IBAN para la comunidad europea? Por el tema de los cuadernos nuevos19-14 del SEPA.?
Buenos días,
Tras la revisión del fichero REMESAS_SEPA.XML se comprueba que la estructura XML es correcta pero la validación de datos es incorrecta.
Les indicamos el listado de errores detectados:
- Líneas de la 7 a la 30: Registro con errores de validación de fichero plano (Validaciones AEB) - Tipo identificación del deudor mal informado
- Líneas de la 34 a la 36: Registro con errores de validación de fichero plano (Validaciones AEB) - Tipo identificación del deudor mal informado.
No le veo sentido alguno a dichas anomalias teniendo en cuenta el fichero que he pasado...Dado que en esas lineas que me indican hay estructura y no datos. Tampoco se pq dicen validación de fichero flano cuando no es un txt sino un xml... en fin creo que los bancos no saben lo que están haciendo...
¿Alguno tiene noticias de validaciones correctas?
Si la remesa se hace en formato xml, el cliente debe crear obligatoriamente una etiqueta identificativa para ubicar el campo BIC, aunque puede informar en la misma un textual que sea o “NOTPROVIDED” o “NOTPROVI”. (En función de si en su base de datos tiene alimentada esa información con ocho u once posiciones).
Hola a todos,