FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Ayuda con este reto
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Ayuda con este reto
Posted: Wed Sep 27, 2023 04:13 PM
Hola Amigos y colegas:

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

Tengo una tabla con los siguientes registros


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


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
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 257
Joined: Mon Jun 10, 2013 06:40 PM
Re: Ayuda con este reto
Posted: Wed Sep 27, 2023 07:28 PM
Armando
Probe asi y me resulto.
Code (fw): Select all Collapse
    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.
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Ayuda con este reto
Posted: Wed Sep 27, 2023 10:33 PM
Code (fw): Select all Collapse
#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


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



G. N. Rao.

Hyderabad, India
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Ayuda con este reto
Posted: Thu Sep 28, 2023 02:53 AM

Mr. Rao and Javier:

Muchas gracias, probaré y aviso.

Gracias nuevamente

SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero

Continue the discussion