FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Xbrowse que no se deja editar
Posts: 1279
Joined: Mon Feb 06, 2006 04:28 PM
Xbrowse que no se deja editar
Posted: Fri Dec 17, 2021 04:45 PM
Tengo este c贸digo:

Code (fw): Select all Collapse
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, el teclado y la IA!!"
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Xbrowse que no se deja editar
Posted: Fri Dec 17, 2021 05:46 PM

Prueba a quitar esto o a cambiarlo

:nfreeze := 4

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1279
Joined: Mon Feb 06, 2006 04:28 PM
Re: Xbrowse que no se deja editar
Posted: Fri Dec 17, 2021 06:12 PM
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, el teclado y la IA!!"
Posts: 1279
Joined: Mon Feb 06, 2006 04:28 PM
Re: Xbrowse que no se deja editar
Posted: Fri Dec 17, 2021 06:52 PM
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, el teclado y la IA!!"
Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Re: Xbrowse que no se deja editar
Posted: Fri Dec 17, 2021 09:55 PM
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 (fw): Select all Collapse
********************************************
** 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.
Posts: 1279
Joined: Mon Feb 06, 2006 04:28 PM
Re: Xbrowse que no se deja editar
Posted: Mon Dec 20, 2021 11:43 AM
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 (fw): Select all Collapse
********************************************
** 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!! :-)
Saludos/Regards,

Jos茅 Murugosa

"Los errores en programaci贸n, siempre est谩n entre la silla, el teclado y la IA!!"
Posts: 1279
Joined: Mon Feb 06, 2006 04:28 PM
Re: Xbrowse que no se deja editar
Posted: Wed Dec 22, 2021 01:33 PM

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, el teclado y la IA!!"
Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Re: Xbrowse que no se deja editar
Posted: Wed Dec 22, 2021 07:42 PM

Me alegro que te haya sido de utilidad Jos茅!

Continue the discussion