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
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 :o

---

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