Page 1 of 1

Ayuda con este reto

PostPosted: Wed Sep 27, 2023 4:13 pm
by Armando
Hola Amigos y colegas:

Tengo el presente reto del que no hayo solución, trataré de explicarme:

Tengo una tabla con los siguientes registros
Image

Esta ordenada por la columna SEC

Ahora necesito mover los registros de abajo hacia arriba, el registro con la secuencia 23
debe subir a quedar en el lugar del registro de la sec 1, recorriendo el resto de los registros
hacia abajo, tal como se ve en la siguiente imagen
Image

Observen que en cada movimiento la fecha se incrementa un día, así hasta llegar al último
día del mes

Si fuera necesario crear una nueva tabla con los registros ya movidos(recorridos) no hay inconveniente.
si no fui claro, se vale preguntar.

Gracias por el apoyo e ideas

Saludos

Re: Ayuda con este reto

PostPosted: Wed Sep 27, 2023 7:28 pm
by VitalJavier
Armando
Probe asi y me resulto.

Code: Select all  Expand view

    aDemo := ASort(aDemo,,, {|x,y| x[3] < y[3]})
    xbrowse(aDemo)
    aDemo := ASort(aDemo,,, {|x,y| x[3] > y[3]})
    aDemo := ASort(aDemo,2,, {|x,y| x[3] < y[3]})
    xbrowse(aDemo)

 


espero y sea lo que querias.

Re: Ayuda con este reto

PostPosted: Wed Sep 27, 2023 10:33 pm
by nageswaragunupudi
Code: Select all  Expand view
#include "fivewin.ch"

REQUEST DBFCDX

function Main()

   local oDlg, oBrw, oFont, x
   local dBaseDate   := STOD( "20230102" )
   local dDate       := dBaseDate
   local nRotate     := 0

   CreateRotateTable()

   USE ROTATE NEW SHARED VIA "DBFCDX"
   dBaseDate   := FIELD->FECHA
   dDate       := dBaseDate

   DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-14
   DEFINE DIALOG oDlg SIZE 400,670 PIXEL TRUEPIXEL ;
      FONT oFont

   @ 70,20 XBROWSE oBrw SIZE -20,-20 PIXEL OF oDlg ;
      DATASOURCE "ROTATE" AUTOCOLS ;
      CELL LINES NOBORDER

   WITH OBJECT oBrw
      :nStretchCol   := 1
      :aCols[ 2 ]:bEditValue := { || FIELD->FECHA + nRotate }
      :aFilter := Array( 23 )
      AEval( :aFilter, { |u,i| :aFilter[ i ] := i } )
      :CreateFromCode()
   END

   @ 10,020 BTNBMP BITMAP 0xE112 SIZE 80,40 PIXEL OF oDlg FLAT ;
      ACTION ( nRotate--, ;
      x := oBrw:aFilter[ 1 ], ADel( oBrw:aFilter, 1 ), ;
      oBrw:aFilter[ 23 ] := x, ;
      oBrw:Refresh(), oBrw:SetFocus() )

   @ 10,280 BTNBMP BITMAP 0xE111 SIZE 80,40 PIXEL OF oDlg FLAT ;
      ACTION ( nRotate++, ;
      AIns( oBrw:aFilter, 1, ATail( oBrw:aFilter ) ), ;
      oBrw:Refresh(), oBrw:SetFocus() )

   ACTIVATE DIALOG oDlg CENTERED
   RELEASE FONT oFont

return nil

static function CreateRotateTable()

   local aData       := Array( 23 )

   AEval( aData, { |u,i| aData[ i ] := { "RF07", STOD( "20230102" ), "SMT", i, 700+i } } )
   AEval( aData, { |a,i| a[ 5 ] += 1 }, 8 )
   AEval( aData, { |a,i| a[ 5 ] += 1 }, 14 )
   AEval( aData, { |a,i| a[ 5 ] += 1 }, 21 )

   DBCREATE( "ROTATE.DBF", { { "ROL", "C", 4, 0 }, ;
   { "FECHA", "D", 8, 0 }, { "RUTA", "C", 3, 0 }, ;
   { "SEC", "N", 2, 0 }, { "ECO", "N", 3, 0 } }, ;
   "DBFCDX", .T., "ROT" )
   FW_ArrayToDBF( aData )

   CLOSE DATA

return nil
 


Image

We have used DBF for this test. But this logic works with any table, RecordSet, RowSet, Query, etc.

Re: Ayuda con este reto

PostPosted: Thu Sep 28, 2023 2:53 am
by Armando
Mr. Rao and Javier:

Muchas gracias, probaré y aviso.

Gracias nuevamente