Xbrowse que no se deja editar

Post Reply
User avatar
jose_murugosa
Posts: 1185
Joined: Mon Feb 06, 2006 4:28 pm
Location: Uruguay
Contact:

Xbrowse que no se deja editar

Post by jose_murugosa »

Tengo este código:

Code: Select all | Expand


function PlanillaMantDiarios( oCn )
     LOCAL oDlg, oFont1, oFont2, oFont3, oBrw, oRs, csql, oGet:={}
     oGet:=Array(2)
     
     cSql := "SELECT * FROM mantenimientos JOIN planilla JOIN maquinas JOIN sectores ON ( mantenimientos.mant_id = planilla.plaMant_id and mantenimientos.mantMaq_id = maquinas.Maq_id and mantenimientos.mantSector_id = sectores.Sector_ID ) WHERE ( planilla.pla_mes = 11 and planilla.pla_anio = 2021 )"
     oRs := oCn:RowSet( cSql )

     DEFINE DIALOG oDlg RESOURCE "DLG_PLAMDIARIOS" TITLE "Planilla de Mantenimientos Diarios"
     
          REDEFINE GET oGet[1] VAR wmes id 101 picture "99" of oDlg
          REDEFINE GET oGet[2] VAR wanio id 102 picture "9999" of oDlg

          REDEFINE XbROWSE oBrw id 201 of oDlg DATASOURCE oRs         ;
               COLUMNS "mant_nombre", "pla_mes", "pla_anio", "Sector_Nombre", "D1", "D2",                               ;
                    "D3",  "D4",  "D5",  "D6",  "D7",  "D8",  "D9",  "D10", "D11", "D12",                               ;
                    "D13", "D14", "D15", "D16", "D17", "D18", "D19", "D20", "D21", "D22",                               ;
                    "D23", "D24", "D25", "D26", "D27", "D28", "D29", "D30", "D31"                                       ;
               HEADERS "Mantenimiento:", "Mes:", "Año:", "Sector:", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12",     ;
                    "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31"   ;
               SIZES 320, 30, 40, 120, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,  ;
                    20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20                                                          
               FASTEDIT
 
          WITH OBJECT oBrw
               :nEditTypes    := EDIT_GET
               :SetChecks( nil, .t. )
               :nfreeze := 4
               :lEdit:=.t.
          END WITH
         
     ACTIVATE DIALOG oDlg CENTER
     oRs:Close()
RETURN nil
 


No me deja editar las celdas excepto la primera y no encuentro porqué, quizá alguien de foro me pueda dar una mano por favor.
Saludos/Regards,
José Murugosa
"Los errores en programación, siempre están entre la silla y el teclado y la IA!!"
User avatar
Antonio Linares
Site Admin
Posts: 42529
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 31 times
Been thanked: 77 times
Contact:

Re: Xbrowse que no se deja editar

Post by Antonio Linares »

Prueba a quitar esto o a cambiarlo

:nfreeze := 4
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
jose_murugosa
Posts: 1185
Joined: Mon Feb 06, 2006 4:28 pm
Location: Uruguay
Contact:

Re: Xbrowse que no se deja editar

Post by jose_murugosa »

Antonio Linares wrote:Prueba a quitar esto o a cambiarlo

:nfreeze := 4



Gracias por tu respuesta Antonio, pero sigue igual :(
Saludos/Regards,
José Murugosa
"Los errores en programación, siempre están entre la silla y el teclado y la IA!!"
User avatar
jose_murugosa
Posts: 1185
Joined: Mon Feb 06, 2006 4:28 pm
Location: Uruguay
Contact:

Re: Xbrowse que no se deja editar

Post by jose_murugosa »

la consulta involucra 4 tablas, y los campos del xbrowse pertenecen a las 4, aunque ningun nombre se superpone porque yo nombro los campos con la abreviatura de la tabla, sucede que los campos que quedan editables son los de la tabla del select, pero todas las tablas de los joins, sus campos no se pueden editar.

Si pongo el nombre de la tabla punto el nombre del campo entre comillas, el campo no se muestra pero permite editar, la verdad estoy desconcertado.

xBrowse es sumamente potente, he visto lo que puede hacer y me fascina, pero la verdad para mi como novato en su uso, me ha resultado algo problemático, obviamente por mi ignorancia.

Creo que porque me ha resultado dificil de interpretar la documentación disponible.

Agradezco vuestra paciencia.
Saludos/Regards,
José Murugosa
"Los errores en programación, siempre están entre la silla y el teclado y la IA!!"
User avatar
cmsoft
Posts: 1297
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina
Been thanked: 2 times

Re: Xbrowse que no se deja editar

Post by cmsoft »

Cuando es una consulta convinada, tengo entendido que no deja editar directamente, porque no hace referencia a una sola tabla.
Una practica que yo uso es, generar una tabla temporal con el resultado de la consulta convinada, y editar esa tabla temporal.
Si el usuario decide grabar, ahi hago el pasaje a las tablas correspondientes.
Te muestro un ejemplo:

Code: Select all | Expand


********************************************
** Liquidaciones de sueldos
STATIC FUNCtION Liquida()
LOCAL oQry, oDlg1, oFont, acor:= ARRAY(4), nMes:=MONTH(DATE()), nAno := YEAR(DATE()), mrta:=.F., oGet:= ARRAY(6),;
      oBot1, oBot2, oBrwLiq, aLiqu, nSub := 0, dFecha := DATE(), oQryE , cDetalle := SPACE(30), oError

oApp:oServer:Execute("CREATE TEMPORARY TABLE IF NOT EXISTS `transi_liqemp` ("+;
                           "`codemp` INT(6) DEFAULT 0 NOT NULL, "+;
                           "`nombre` VARCHAR(40) , "+;
                           "`sueldo` DECIMAL(10,2) DEFAULT 0 NOT NULL, "+;                          
                           "`extras` DECIMAL(10,2) DEFAULT 0 NOT NULL, "+;                          
                           "`total`  DECIMAL(10,2) DEFAULT 0 NOT NULL "+;                                                      
                           ") ENGINE=INNODB DEFAULT CHARSET=utf8")
oApp:oServer:NextResult()
oApp:oServer:Execute("TRUNCATE transi_liqemp")
oApp:oServer:NextResult()
oApp:oServer:Execute(" INSERT INTO transi_liqemp (SELECT codigo,nombre,sueldo,0 as extra,sueldo as total FROM re_emp_empleado ORDER BY nombre)")
oQryE := oApp:oServer:Query("SELECT * FROM transi_liqemp")
DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-11.5
DEFINE DIALOG oDlg1 TITLE "Carga de Liquidación de Sueldos" FROM 03,15 TO 30,100
   acor := AcepCanc(oDlg1)      
   @ 07, 05 SAY "Periodo:"                OF oDlg1 PIXEL SIZE 50,20 RIGHT
   @ 22, 05 SAY "SubLiq.:"                OF oDlg1 PIXEL SIZE 50,20 RIGHT
   @ 22, 75 SAY "Fecha Imputación:"       OF oDlg1 PIXEL SIZE 50,20 RIGHT
   @ 37, 05 SAY "Detalle:"                OF oDlg1 PIXEL SIZE 50,20 RIGHT


   @ 05, 60 GET oGet[01] VAR nMes     OF oDlg1 PIXEL PICTURE "99" VALID(nMes>0 .and. nMes < 13) RIGHT
   @ 05,100 GET oGet[02] VAR nAno     OF oDlg1 PIXEL PICTURE "9999" RIGHT
   @ 20, 60 GET oGet[03] VAR nSub     OF oDlg1 PIXEL PICTURE "99" RIGHT                      
   @ 20,130 GET oGet[04] VAR dFecha   OF oDlg1 PIXEL PICTURE "@D" CENTER  
   @ 35, 60 GET oGet[05] VAR cDetalle OF oDlg1 PIXEL PICTURE "@!"          

   @ 55, 05 XBROWSE oBrwLiq SIZE 315,100 pixel OF oDlg1 DATASOURCE oQryE ;
      HEADERS "Empleado", "Sueldo","Extras","Total";
      COLUMNS "nombre", "sueldo" ,"extras", "total";
      FOOTERS;
      CELL LINES NOBORDER UPDATE
   WITH OBJECT oBrwLiq
      :aCols[2]:nFooterType := AGGR_SUM
      :aCols[3]:nFooterType := AGGR_SUM
      :aCols[4]:nFooterType := AGGR_SUM
      :aCols[2]:cEditPicture := "999999.99"
      :aCols[3]:cEditPicture := "999999.99"
      :aCols[4]:cEditPicture := "999999.99"
      :nMoveType := 1
      :aCols[2]:nEditType := EDIT_GET
      :aCols[2]:bOnPostEdit := {|oCol, xVal, nKey | (CambiaValor(1,xval,oQryE,oBrwLiq,oGet[1]))}
      :aCols[3]:nEditType := EDIT_GET
      :aCols[3]:bOnPostEdit := {|oCol, xVal, nKey | (CambiaValor(2,xval,oQryE,oBrwLiq,oGet[1]))}
      :MakeTotals()
      :CreateFromCode()
   END  
   PintaBrw(oBrwLiq,0)
   
   @ acor[1],acor[2] BUTTON oBot1 PROMPT "&Grabar" OF oDlg1 SIZE 30,10 ;
           ACTION ((mrta := .t.), oDlg1:End() ) PIXEL
   @ acor[3],acor[4] BUTTON oBot2 PROMPT "&Cancelar" OF oDlg1 SIZE 30,10 ;
           ACTION ((mrta := .f.), oDlg1:End() ) PIXEL
ACTIVATE DIALOG oDlg1 CENTER
IF !mrta
   RETURN  NIL
ENDIF
// Valido si hay liquidacion
IF oApp:oServer:Query("SELECT * FROM re_emp_liqsueldo WHERE mes = " + ClipValue2Sql(nMes)+;
                      " AND ano = " + ClipValue2Sql(nAno)+ " AND sub = "+ClipValue2Sql(nSub)):nRecCount > 0
   mrta := MsgNoYes("Existe ya esa liquidacion!"+chr(10)+"Desea reemplazarla por esta??","Atencion")
   IF !mrta
      RETURN nil
   ENDIF
ENDIF
TRY

  oApp:oServer:BeginTransaction()
  oApp:oServer:Execute("DELETE FROM re_emp_liqsueldo WHERE mes = " + ClipValue2Sql(nMes)+;
                      " AND ano = " + ClipValue2Sql(nAno)+ " AND sub = "+ClipValue2Sql(nSub))
  oApp:oServer:Execute("INSERT INTO re_emp_liqsueldo (mes,ano,sub,codemp,fecha,sueldo,extras,total,observa,usuario) "+;
                       " (SELECT "+ClipValue2Sql(nMes)+","+ ClipValue2Sql(nAno)+","+ClipValue2Sql(nSub)+",codemp,"+;
                       ClipValue2Sql(dFecha)+",sueldo,extras,total,"+ClipValue2Sql(cDetalle)+"," + ClipValue2Sql(oApp:usuario)+;
                       " FROM transi_liqemp)")
  oApp:oServer:CommitTransaction()
  MsgInfo("Proceso Terminado con Exito!","Atencion")
CATCH oError
    ValidaError(oError)
END TRY      

RETURN nil
 

Yo uso Dolphin porque no tengo la ultima version de Fivewin, no te quiero confundir... Pero es una opcion para lo que necesitas.
User avatar
jose_murugosa
Posts: 1185
Joined: Mon Feb 06, 2006 4:28 pm
Location: Uruguay
Contact:

Re: Xbrowse que no se deja editar

Post by jose_murugosa »

cmsoft wrote:Cuando es una consulta convinada, tengo entendido que no deja editar directamente, porque no hace referencia a una sola tabla.
Una practica que yo uso es, generar una tabla temporal con el resultado de la consulta convinada, y editar esa tabla temporal.
Si el usuario decide grabar, ahi hago el pasaje a las tablas correspondientes.
Te muestro un ejemplo:

Code: Select all | Expand


********************************************
** Liquidaciones de sueldos
STATIC FUNCtION Liquida()
LOCAL oQry, oDlg1, oFont, acor:= ARRAY(4), nMes:=MONTH(DATE()), nAno := YEAR(DATE()), mrta:=.F., oGet:= ARRAY(6),;
      oBot1, oBot2, oBrwLiq, aLiqu, nSub := 0, dFecha := DATE(), oQryE , cDetalle := SPACE(30), oError

oApp:oServer:Execute("CREATE TEMPORARY TABLE IF NOT EXISTS `transi_liqemp` ("+;
                           "`codemp` INT(6) DEFAULT 0 NOT NULL, "+;
                           "`nombre` VARCHAR(40) , "+;
                           "`sueldo` DECIMAL(10,2) DEFAULT 0 NOT NULL, "+;                          
                           "`extras` DECIMAL(10,2) DEFAULT 0 NOT NULL, "+;                          
                           "`total`  DECIMAL(10,2) DEFAULT 0 NOT NULL "+;                                                      
                           ") ENGINE=INNODB DEFAULT CHARSET=utf8")
oApp:oServer:NextResult()
oApp:oServer:Execute("TRUNCATE transi_liqemp")
oApp:oServer:NextResult()
oApp:oServer:Execute(" INSERT INTO transi_liqemp (SELECT codigo,nombre,sueldo,0 as extra,sueldo as total FROM re_emp_empleado ORDER BY nombre)")
oQryE := oApp:oServer:Query("SELECT * FROM transi_liqemp")
DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-11.5
DEFINE DIALOG oDlg1 TITLE "Carga de Liquidación de Sueldos" FROM 03,15 TO 30,100
   acor := AcepCanc(oDlg1)      
   @ 07, 05 SAY "Periodo:"                OF oDlg1 PIXEL SIZE 50,20 RIGHT
   @ 22, 05 SAY "SubLiq.:"                OF oDlg1 PIXEL SIZE 50,20 RIGHT
   @ 22, 75 SAY "Fecha Imputación:"       OF oDlg1 PIXEL SIZE 50,20 RIGHT
   @ 37, 05 SAY "Detalle:"                OF oDlg1 PIXEL SIZE 50,20 RIGHT


   @ 05, 60 GET oGet[01] VAR nMes     OF oDlg1 PIXEL PICTURE "99" VALID(nMes>0 .and. nMes < 13) RIGHT
   @ 05,100 GET oGet[02] VAR nAno     OF oDlg1 PIXEL PICTURE "9999" RIGHT
   @ 20, 60 GET oGet[03] VAR nSub     OF oDlg1 PIXEL PICTURE "99" RIGHT                      
   @ 20,130 GET oGet[04] VAR dFecha   OF oDlg1 PIXEL PICTURE "@D" CENTER  
   @ 35, 60 GET oGet[05] VAR cDetalle OF oDlg1 PIXEL PICTURE "@!"          

   @ 55, 05 XBROWSE oBrwLiq SIZE 315,100 pixel OF oDlg1 DATASOURCE oQryE ;
      HEADERS "Empleado", "Sueldo","Extras","Total";
      COLUMNS "nombre", "sueldo" ,"extras", "total";
      FOOTERS;
      CELL LINES NOBORDER UPDATE
   WITH OBJECT oBrwLiq
      :aCols[2]:nFooterType := AGGR_SUM
      :aCols[3]:nFooterType := AGGR_SUM
      :aCols[4]:nFooterType := AGGR_SUM
      :aCols[2]:cEditPicture := "999999.99"
      :aCols[3]:cEditPicture := "999999.99"
      :aCols[4]:cEditPicture := "999999.99"
      :nMoveType := 1
      :aCols[2]:nEditType := EDIT_GET
      :aCols[2]:bOnPostEdit := {|oCol, xVal, nKey | (CambiaValor(1,xval,oQryE,oBrwLiq,oGet[1]))}
      :aCols[3]:nEditType := EDIT_GET
      :aCols[3]:bOnPostEdit := {|oCol, xVal, nKey | (CambiaValor(2,xval,oQryE,oBrwLiq,oGet[1]))}
      :MakeTotals()
      :CreateFromCode()
   END  
   PintaBrw(oBrwLiq,0)
   
   @ acor[1],acor[2] BUTTON oBot1 PROMPT "&Grabar" OF oDlg1 SIZE 30,10 ;
           ACTION ((mrta := .t.), oDlg1:End() ) PIXEL
   @ acor[3],acor[4] BUTTON oBot2 PROMPT "&Cancelar" OF oDlg1 SIZE 30,10 ;
           ACTION ((mrta := .f.), oDlg1:End() ) PIXEL
ACTIVATE DIALOG oDlg1 CENTER
IF !mrta
   RETURN  NIL
ENDIF
// Valido si hay liquidacion
IF oApp:oServer:Query("SELECT * FROM re_emp_liqsueldo WHERE mes = " + ClipValue2Sql(nMes)+;
                      " AND ano = " + ClipValue2Sql(nAno)+ " AND sub = "+ClipValue2Sql(nSub)):nRecCount > 0
   mrta := MsgNoYes("Existe ya esa liquidacion!"+chr(10)+"Desea reemplazarla por esta??","Atencion")
   IF !mrta
      RETURN nil
   ENDIF
ENDIF
TRY

  oApp:oServer:BeginTransaction()
  oApp:oServer:Execute("DELETE FROM re_emp_liqsueldo WHERE mes = " + ClipValue2Sql(nMes)+;
                      " AND ano = " + ClipValue2Sql(nAno)+ " AND sub = "+ClipValue2Sql(nSub))
  oApp:oServer:Execute("INSERT INTO re_emp_liqsueldo (mes,ano,sub,codemp,fecha,sueldo,extras,total,observa,usuario) "+;
                       " (SELECT "+ClipValue2Sql(nMes)+","+ ClipValue2Sql(nAno)+","+ClipValue2Sql(nSub)+",codemp,"+;
                       ClipValue2Sql(dFecha)+",sueldo,extras,total,"+ClipValue2Sql(cDetalle)+"," + ClipValue2Sql(oApp:usuario)+;
                       " FROM transi_liqemp)")
  oApp:oServer:CommitTransaction()
  MsgInfo("Proceso Terminado con Exito!","Atencion")
CATCH oError
    ValidaError(oError)
END TRY      

RETURN nil
 

Yo uso Dolphin porque no tengo la ultima version de Fivewin, no te quiero confundir... Pero es una opcion para lo que necesitas.


Gracias por molestarte en pegar aquí parte del código que usas, lo voy a adaptar y ver que pasa, de todas maneras me encantaría si alguien que use fwmariadb de FWH puede comentar si hay algo ya implementado para estos casos.

Un abrazo y felices fiestas!! :D
Saludos/Regards,
José Murugosa
"Los errores en programación, siempre están entre la silla y el teclado y la IA!!"
User avatar
jose_murugosa
Posts: 1185
Joined: Mon Feb 06, 2006 4:28 pm
Location: Uruguay
Contact:

Re: Xbrowse que no se deja editar

Post by jose_murugosa »

César, Muchas gracias por tu ayuda, lo he implementado adaptandolo a FWMariaDB de FWH y funcionó bien.

Gracias por compartir tu código y consejo. :D
Saludos/Regards,
José Murugosa
"Los errores en programación, siempre están entre la silla y el teclado y la IA!!"
User avatar
cmsoft
Posts: 1297
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina
Been thanked: 2 times

Re: Xbrowse que no se deja editar

Post by cmsoft »

Me alegro que te haya sido de utilidad José!
Post Reply