Xbrowse que no se deja editar

Xbrowse que no se deja editar

Postby jose_murugosa » Fri Dec 17, 2021 4:45 pm

Tengo este código:

Code: Select all  Expand view

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
jose_murugosa
 
Posts: 1180
Joined: Mon Feb 06, 2006 4:28 pm
Location: Uruguay

Re: Xbrowse que no se deja editar

Postby Antonio Linares » Fri Dec 17, 2021 5:46 pm

Prueba a quitar esto o a cambiarlo

:nfreeze := 4
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42080
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Xbrowse que no se deja editar

Postby jose_murugosa » Fri Dec 17, 2021 6: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 y el teclado y la IA!!"
User avatar
jose_murugosa
 
Posts: 1180
Joined: Mon Feb 06, 2006 4:28 pm
Location: Uruguay

Re: Xbrowse que no se deja editar

Postby jose_murugosa » Fri Dec 17, 2021 6: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 y el teclado y la IA!!"
User avatar
jose_murugosa
 
Posts: 1180
Joined: Mon Feb 06, 2006 4:28 pm
Location: Uruguay

Re: Xbrowse que no se deja editar

Postby cmsoft » Fri Dec 17, 2021 9: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: Select all  Expand view

********************************************
** 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
cmsoft
 
Posts: 1289
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Xbrowse que no se deja editar

Postby jose_murugosa » 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: Select all  Expand view

********************************************
** 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: 1180
Joined: Mon Feb 06, 2006 4:28 pm
Location: Uruguay

Re: Xbrowse que no se deja editar

Postby jose_murugosa » Wed Dec 22, 2021 1: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 y el teclado y la IA!!"
User avatar
jose_murugosa
 
Posts: 1180
Joined: Mon Feb 06, 2006 4:28 pm
Location: Uruguay

Re: Xbrowse que no se deja editar

Postby cmsoft » Wed Dec 22, 2021 7:42 pm

Me alegro que te haya sido de utilidad José!
User avatar
cmsoft
 
Posts: 1289
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 51 guests