Ayuda con este reto

Ayuda con este reto

Postby Armando » Wed Sep 27, 2023 4: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
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
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
User avatar
Armando
 
Posts: 3199
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: Ayuda con este reto

Postby VitalJavier » Wed Sep 27, 2023 7:28 pm

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.
User avatar
VitalJavier
 
Posts: 239
Joined: Mon Jun 10, 2013 6:40 pm

Re: Ayuda con este reto

Postby nageswaragunupudi » Wed Sep 27, 2023 10:33 pm

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.
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10595
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: Ayuda con este reto

Postby Armando » Thu Sep 28, 2023 2: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
User avatar
Armando
 
Posts: 3199
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: nageswaragunupudi and 37 guests