Proceso de conciliación / comparar datos dos Grid
Moderator: Rathinagiri
Proceso de conciliación / comparar datos dos Grid
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í:
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
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í:
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
- Claudio Ricardo
- Posts: 367
- Joined: Tue Oct 27, 2020 3:38 am
- DBs Used: DBF, MySQL, MariaDB
- Location: Bs. As. - Argentina
Re: Proceso de conciliación / comparar datos dos Grid
Hola...
Puedes, en un bucle For o While comparar ambos arrays con la función Ascan () y con If o Case tomar las decisiones.
Puedes, en un bucle For o While comparar ambos arrays con la función Ascan () y con If o Case tomar las decisiones.
Corrige al sabio y lo harás más sabio, Corrige al necio y lo harás tu enemigo.
WhatsApp / Telegram: +54 911-63016162
WhatsApp / Telegram: +54 911-63016162
Re: Proceso de conciliación / comparar datos dos Grid
Leyendo algunos post encontré algo parecido y es algo como lo que menciona Claudio.
Para pruebas algo así:
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
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
Alguna idea?.
Saludos,
Javier
- SALINETAS24
- Posts: 667
- Joined: Tue Feb 27, 2018 3:06 am
- DBs Used: DBF
- Contact:
Re: Proceso de conciliación / comparar datos dos Grid
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.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í:
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...Code: Select all
FUNCTION busca(aData) LOCAL i LOCAL cStr .../.... RETURN
Alguna idea?.
Saludos,
Javier
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
Como dijo el gran pensador Hommer Simpson..., - En este mundo solo hay 3 tipos de personas, los que saben contar y los que no. 

- AUGE_OHR
- Posts: 2093
- Joined: Sun Aug 25, 2019 3:12 pm
- DBs Used: DBF, PostgreSQL, MySQL, SQLite
- Location: Hamburg, Germany
Re: Proceso de conciliación / comparar datos dos Grid
hi,
normal a Bill or Invoice have different Value
so i would compare DATE + CARGO and DATE + ABONO.
normal a Bill or Invoice have different Value
so i would compare DATE + CARGO and DATE + ABONO.
have fun
Jimmy
Jimmy
- serge_girard
- Posts: 3309
- Joined: Sun Nov 25, 2012 2:44 pm
- DBs Used: 1 MySQL - MariaDB
2 DBF - Location: Belgium
- Contact:
Re: Proceso de conciliación / comparar datos dos Grid
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
S
There's nothing you can do that can't be done...
Re: Proceso de conciliación / comparar datos dos Grid
Hola,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...
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
- SALINETAS24
- Posts: 667
- Joined: Tue Feb 27, 2018 3:06 am
- DBs Used: DBF
- Contact:
Re: Proceso de conciliación / comparar datos dos Grid
Hola Javier,jparada wrote: ↑Wed Feb 17, 2021 4:34 pmHola,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...
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
¿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,
Como dijo el gran pensador Hommer Simpson..., - En este mundo solo hay 3 tipos de personas, los que saben contar y los que no. 

- Claudio Ricardo
- Posts: 367
- Joined: Tue Oct 27, 2020 3:38 am
- DBs Used: DBF, MySQL, MariaDB
- Location: Bs. As. - Argentina
Re: Proceso de conciliación / comparar datos dos Grid
Hola...
Algo asi te podria servir:
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
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
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
Corrige al sabio y lo harás más sabio, Corrige al necio y lo harás tu enemigo.
WhatsApp / Telegram: +54 911-63016162
WhatsApp / Telegram: +54 911-63016162
- AUGE_OHR
- Posts: 2093
- Joined: Sun Aug 25, 2019 3:12 pm
- DBs Used: DBF, PostgreSQL, MySQL, SQLite
- Location: Hamburg, Germany
Re: Proceso de conciliación / comparar datos dos Grid
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
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
have fun
Jimmy
Jimmy