Page 1 of 2
Proceso de conciliación / comparar datos dos Grid
Posted: Tue Feb 16, 2021 4:39 pm
by jparada
Buen día,
Un poco de historia... Pensando en automatizar o semi-automatizar el proceso de conciliación, tal vez no como tal tomando en cuenta saldos iniciales, sino sólo poniendo énfasis en que los movimientos que reporta el estado de cuenta del banco coincida con los movimientos auxiliares del sistema de contabilidad... sean identificados.
Tratando de implementar ésta solución, el primer reto al menos para mi fue obtener la información del archivo pdf que envía el banco, consultamos con el banco y no ofrece o es lo que nos informaron un archivo en ningún otro formato sólo pdf...
Después de varios intentos con varias herramientas pude resolver ese tema, después el reto fue de alguna manera homologar los datos, porque hay una línea principal con la descripción del movimiento y debajo otras líneas del detalle de movimiento y ese detalle no tiene un patrón, pueden ser una línea de detalle o hasta n, tal vez aquí me falto conocimiento técnico para resolver con harbour ese problema, así que utilicé otra herramienta para resolver ese reto, de manera que ya tengo una información homologada con una sola línea en donde tengo la descripción del movimiento + la descripción del detalle (n cantidad de líneas en una sola espacio como separador)...
Así que ya con esa información leo los archivos el de banco y el auxiliar contable y obtengo dos array que pongo en dos controles Grid, algo así:

- img1.png (49.46 KiB) Viewed 2635 times
y bien a partir de aquí la idea es de alguna manera buscar las coincidencias de los importes entre las columnas de ambos Grid, debe coincidir importe/fecha la descripción puede variar mucho así que puede ser una búsqueda parcial entre las columnas de "descripcion" y bueno agregar otra columna para indicar si hay alguna coincidencia localizada.
Y bueno un poco largo el post porque quería ser un poco claro en lo que estoy buscando y que aún no tengo idea cómo comenzar que es cómo hacer esa búsqueda, cómo comparar los valores entre un Grid y el otro.
Alguno de ustedes ha resuelto algo similar, alguna idea que pueda compartir?.
Gracias por su tiempo.
Saludos,
Javier
Re: Proceso de conciliación / comparar datos dos Grid
Posted: Tue Feb 16, 2021 7:29 pm
by Claudio Ricardo
Hola...
Puedes, en un bucle For o While comparar ambos arrays con la función Ascan () y con If o Case tomar las decisiones.
Re: Proceso de conciliación / comparar datos dos Grid
Posted: Tue Feb 16, 2021 11:13 pm
by jparada
Leyendo algunos post encontré algo parecido y es algo como lo que menciona Claudio.
Para pruebas algo así:
Code: Select all
FUNCTION busca(aData)
LOCAL i
LOCAL cStr
// aData contenido segundo Grid - Datos movimientos auxiliar
FOR i := 1 TO win1.Grid1.ItemCount // contenido primer Grid - Datos Banco
cStr := ALLTRIM(win1.Grid1.Cell(i,2))
IF Ascan( aData, { | nRow | nRow[2] == cStr } ) > 0
MsgExclamation("Dato encontrado")
ENDIF
NEXT
MsgExclamation("Terminado...")
RETURN
Pero eso no me funcionaría para la búsqueda de la descripción del movimiento ya que no es exacta debería de poder utilizar el símbolo $ pero con Ascan no es posible, no sé si cambiando a For each...
Alguna idea?.
Saludos,
Javier
Re: Proceso de conciliación / comparar datos dos Grid
Posted: Wed Feb 17, 2021 7:05 am
by SALINETAS24
jparada wrote: ↑Tue Feb 16, 2021 11:13 pm
Leyendo algunos post encontré algo parecido y es algo como lo que menciona Claudio.
Para pruebas algo así:
Code: Select all
FUNCTION busca(aData)
LOCAL i
LOCAL cStr
.../....
RETURN
Pero eso no me funcionaría para la búsqueda de la descripción del movimiento ya que no es exacta debería de poder utilizar el símbolo $ pero con Ascan no es posible, no sé si cambiando a For each...
Alguna idea?.
Saludos,
Javier
Hola Javier, es raro que una entidad no te facilite los movimientos financieros ni en EXCEL, ni en formato ASCII, yo creo que hay una obligación, por lo menos aquí en España, si lo pides te lo facilitan en una norma estandard, NORMA 43 del CSB, y creo recordar que a nivel europeo también hay algun formato.
Pero vamos a lo tuyo, una posible solución pasa por comparar palabra por palabra, a final te informo de las coincidencias para que ya decidas si consolidar o no...
Code: Select all
// Tendrás que buscar por palabras
FUNCTION busca(aData)
LOCAL i
LOCAL cStr
LOCAL cTrozo // cTrozo, subcadena a comparar
LOCAL nPos // nPos, donde esta el espacio en blanco
LOCAL nCont // Contador de coincidencias
// aData contenido segundo Grid - Datos movimientos auxiliar
FOR i := 1 TO win1.Grid1.ItemCount // contenido primer Grid - Datos Banco
nCont:=0 // Pongo el contador a cero
DO WHILE !empty(aData) // mientras tenga algo que comparar....., comparo
nPos:=AT(" ",aData)
IF nPos=0 // Si no encuentro es el ultimo trozo
cTrozo:=aData
aData:=""
ELSE
cTrozo:=SUBSTR(aData,1,nPos) // Si encuentro, troceo
aData:=SUBSTR(nPos+1)
ENDIF
cStr := ALLTRIM(win1.Grid1.Cell(i,2))
IF Ascan( cTrozo, { | nRow | nRow[2] == cStr } ) > 0
nCont++
ENDIF
ENDDO
IF nCont > 0
MsgExclamation("Encontrado "+STR(nCont)+" Veces")
ENDIF
NEXT
MsgExclamation("Terminado...")
RETURN
Espero que te sirva.., y vamos con una cervecita fresquita y confinada...!!
Re: Proceso de conciliación / comparar datos dos Grid
Posted: Wed Feb 17, 2021 9:59 am
by AUGE_OHR
hi,
normal a Bill or Invoice have different Value
so i would compare DATE + CARGO and DATE + ABONO.
Re: Proceso de conciliación / comparar datos dos Grid
Posted: Wed Feb 17, 2021 2:25 pm
by serge_girard
I did something similar in PL/i, years ago, for auto-matching invoices against purchase orders. This was done in batch and only the ones which couldn't match were to handle on screen.
S
Re: Proceso de conciliación / comparar datos dos Grid
Posted: Wed Feb 17, 2021 4:34 pm
by jparada
SALINETAS24 wrote: ↑Wed Feb 17, 2021 7:05 am
Hola Javier, es raro que una entidad no te facilite los movimientos financieros ni en EXCEL, ni en formato ASCII, yo creo que hay una obligación, por lo menos aquí en España, si lo pides te lo facilitan en una norma estandard, NORMA 43 del CSB, y creo recordar que a nivel europeo también hay algun formato.
Pero vamos a lo tuyo, una posible solución pasa por comparar palabra por palabra, a final te informo de las coincidencias para que ya decidas si consolidar o no...
Hola,
Honestamente no sé si esté legislado éste tema acá en mi país México, pero es lo que me reportan las personas que se contactaron con la institución bancaria.
Te agradezco el código que me muestras pero me está dando error en la línea nPos:=AT(" ",aData) error de argumento
y la línea aData:=SUBSTR(nPos+1) me da error, pero es porque no estamos indicando la variable que en este caso debe ser cTrozo, correcto?.
Lo que vi es que para AT los parámetros son correctos, no sé por qué está dando el error.
Alguna ayuda extra por favor...
Saludos,
Javier
Re: Proceso de conciliación / comparar datos dos Grid
Posted: Wed Feb 17, 2021 5:16 pm
by SALINETAS24
jparada wrote: ↑Wed Feb 17, 2021 4:34 pm
SALINETAS24 wrote: ↑Wed Feb 17, 2021 7:05 am
Hola Javier, es raro que una entidad no te facilite los movimientos financieros ni en EXCEL, ni en formato ASCII, yo creo que hay una obligación, por lo menos aquí en España, si lo pides te lo facilitan en una norma estandard, NORMA 43 del CSB, y creo recordar que a nivel europeo también hay algun formato.
Pero vamos a lo tuyo, una posible solución pasa por comparar palabra por palabra, a final te informo de las coincidencias para que ya decidas si consolidar o no...
Hola,
Honestamente no sé si esté legislado éste tema acá en mi país México, pero es lo que me reportan las personas que se contactaron con la institución bancaria.
Te agradezco el código que me muestras pero me está dando error en la línea nPos:=AT(" ",aData) error de argumento
y la línea aData:=SUBSTR(nPos+1) me da error, pero es porque no estamos indicando la variable que en este caso debe ser cTrozo, correcto?.
Lo que vi es que para AT los parámetros son correctos, no sé por qué está dando el error.
Alguna ayuda extra por favor...
Saludos,
Javier
Hola Javier,
¿Que contiene aData..? yo he tomado la idea de que aData es una variable que contiene solo la descripción
Si es un array con varias posiciones, tienes que modificar por aData[n], siendo n la posición de la descripción.
Un saludo,
Re: Proceso de conciliación / comparar datos dos Grid
Posted: Wed Feb 17, 2021 5:26 pm
by Claudio Ricardo
Hola...
Algo asi te podria servir:
Code: Select all
// Busca equivalencias de array1 dentro del array2
Function Busca (aArray1,aArray2)
LOCAL i, j, dDate, nCargo, nAbono, cDesc
If Len (aArray1) > 0 .AND. Len (aArray2) > 0
For i = 1 To Len (aArray1)
dDate := aArray1 [i,1]
cDesc := aArray1 [i,2]
nCargo := aArray1 [i,3]
nAbono := aArray1 [i,4]
For j = 1 To Len (aArray2)
If aArray2 [j,1] == dDate .AND. aArray2 [j,3] == nCargo .AND. aArray2 [j,4] == nAbono
If aArray2 [j,2] $ cDesc
// Msg o acción
EndIf
EndIf
Next
Next
EndIf
Return Nil
Comienza en la primer "linea" del array 1 y busca coincidencias dentro del array 2, si no encuentra continúa con la siguiente.
Para aumentar la coincidencia podrias reemplazar: cDesc := aArray1 [i,2] por cDesc := Upper (aArray [i,2]) y
If aArray2 [j,2] $ cDesc por If Upper (aArray2 [j,2]) $ cDesc
Re: Proceso de conciliación / comparar datos dos Grid
Posted: Thu Feb 18, 2021 11:21 am
by AUGE_OHR
hi,
i don´t "think" that "" mean next line ... all between 01/DIC are IHMO same Record
in your 2nd GRID, with import Data, there are only Debit no Credit
---
in Europa you can "send" Data using IBAN Format and "get" Data in same Format
i would ask for IBAN Format which is used International