La idea de este codigo es que dada un array lo ordene por fecha de cada "grupo" de "nIdPadre", si lo pueden ejecutar
van a ver que la primera vez ordena bien para los nIdPadre == 0, pero despues toma bien desde donde tiene que comenzar "nInicio" dado por el nIdPadre pero calcula mal hasta donde tiene que ordenar, el "nFInal" me pasó lo mismo con un codigo anterior similar a esto usando aScan, no se si son por los => o que.
Podrian ayudarme?
- Code: Select all Expand view
- FUNCTION prueba()
LOCAL aDatos := { }
LOCAL nInicio, nFinal
AAdd( aDatos, { "a", { "nId" => 0, "nIdPadre" => 0, "dFecha" => "01/8/1020", "nHitem" => 0 } } )
AAdd( aDatos, { "a", { "nId" => 0, "nIdPadre" => 0, "dFecha" => "01/8/1011", "nHitem" => 0 } } )
AAdd( aDatos, { "a", { "nId" => 0, "nIdPadre" => 0, "dFecha" => "03/7/1008", "nHitem" => 0 } } )
AAdd( aDatos, { "a", { "nId" => 0, "nIdPadre" => 2, "dFecha" => "06/8/1020", "nHitem" => 0 } } )
AAdd( aDatos, { "a", { "nId" => 0, "nIdPadre" => 2, "dFecha" => "01/10/2220", "nHitem" => 0 } } )
AAdd( aDatos, { "a", { "nId" => 0, "nIdPadre" => 4, "dFecha" => "15/8/1008", "nHitem" => 0 } } )
AAdd( aDatos, { "a", { "nId" => 0, "nIdPadre" => 5, "dFecha" => "10/8/2025", "nHitem" => 0 } } )
nInicio := 1
DO WHILE .T.
nFinal := AScan( aDatos, { | xCelda | xCelda[ 2 ][ "nIdPadre" ] != aDatos[ nInicio ][ 2 ][ "nIdPadre" ] } )
XBROWSER aDatos
aDatos := ASort( aDatos, nInicio, nFinal - 1, { | x, y | CToD( x[ 2 ][ "dFecha" ] ) < CToD( y[ 2 ][ "dFecha" ] ) } )
XBROWSER aDatos TITLE "desde: " + Str(nInicio) + " hasta: " + Str(nFinal)
nInicio := nFinal
ENDDO
RETURN ( NIL )
Gracias