FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Comportamiento extraño
Posts: 652
Joined: Wed Oct 19, 2005 12:03 PM
Comportamiento extraño
Posted: Mon Sep 28, 2015 01:19 PM
Hola compañeros tengo el siguiente código

Code (fw): Select all Collapse
   LOCAL aConstancia := { "Activo", "No Inscripto", "Exento", "No Alcanzado", "Exento no alcanzado" }
   LOCAL cConiva := "No Inscripto"
   LOCAL cCongan := "No Inscripto"
   LOCAL cConmono := "No Inscripto"

 /////////

   REDEFINE COMBOBOX oCos[ 1 ] VAR cConiva id 114 ITEMS aConstancia of oFold:adialogs[ 1 ] update
   REDEFINE COMBOBOX oCos[ 2 ] VAR cCongan id 115 ITEMS aConstancia of oFold:adialogs[ 1 ] update
   REDEFINE COMBOBOX oCos[ 3 ] VAR cConmono id 119 ITEMS aConstancia of oFold:adialogs[ 1 ] update
/////////////

STATIC FUNCTION ACEPTAR()

      IF  reviso(oData)
     /////
           oData:constiva := grabcons( cConiva )
           oData:constgan := grabcons( cCongan )
           oData:constmono := grabcons( cConmono )
      //////
           salvo(oData)
 
      ENDIF


Code (fw): Select all Collapse
FUNCTION grabcons( cConstan )

   LOCAL cActivo := ""

   ? cConstan

   IF cConstan == "Activo"
      cActivo := "AC"
   ELSEIF cConstan == "No Inscripto"
      cActivo := "NI"
   ELSEIF cConstan == "Exento"
      cActivo := "EX"
   ELSEIF cConstan == "No alcanzado"
      cActivo := "NA"
   ELSEIF cConstan == "Exento no alcanzado"
      cActivo := "AN"
   ENDIF

RETURN cActivo


Este mismo código compilado con harbour da distintos resultados que con xharbour, a saber hice un msginfo en dónde transformo las variables al dato que necesito
Supongamos que en el combo elijo "Activo"

En xHarbour

El msginfo dice "Activo"

pero el compilado con harbour

El msginfo dice "Activocripto"

No reemplaza la variable sino que la sobreescribe.
Lo que hice fue poner todas las opciones con la misma cantidad de caracteres, y funciona.

Pero porque el comportamiento.

Luis
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Comportamiento extraño
Posted: Tue Sep 29, 2015 12:11 AM

Luis,

Puedes comprobar si en el ejemplo samples\combos.prg te ocurre igual ? gracias

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 652
Joined: Wed Oct 19, 2005 12:03 PM
Re: Comportamiento extraño
Posted: Tue Sep 29, 2015 12:16 PM

No Antonio en el ejemplo funciona bien.

Luis

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Comportamiento extraño
Posted: Tue Sep 29, 2015 02:17 PM

Luis,

Podrias proporcionar un pequeño ejemplo autocontenido que reproduzca el problema ? gracias

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 652
Joined: Wed Oct 19, 2005 12:03 PM
Re: Comportamiento extraño
Posted: Tue Sep 29, 2015 04:59 PM
Antonio hice este ejemplo lo compile en el mismo programa ....Y ACA FUNCIONA BIEN

Code (fw): Select all Collapse
# include "Fivewin.ch"
 function prueba()
 
 LOCAL aConstancia := { "Activo", "No Inscripto", "Exento", "No Alcanzado", "Exento no alcanzado" }
 LOCAL cConmono  := "No Inscripto"
 LOCAL oDlg
 local oBtn
 
 
DEFINE DIALOG oDlg FROM 1, 1 TO 20, 60
 

@ 2, 2 COMBOBOX cConmono ITEMS aConstancia SIZE 200, 100

@ 4, 2 button oBtn  prompt "prueba" ACTION grabcons( cConmono ) SIZE 50, 30 

@ 4, 20 button oBtn   prompt "Salir" ACTION oDlg:end() SIZE 50, 30 

 
                    
ACTIVATE DIALOG oDlg CENTER

return nil

/////////////////////////////////////////////////////////////////////////////////////////
static FUNCTION grabcons( cConstan )

   LOCAL cActivo := ""

   ? cConstan

   IF cConstan == "Activo"
      cActivo := "AC"

   ELSEIF cConstan == "No Inscripto"
      cActivo := "NI"
   ELSEIF cConstan == "Exento"
      cActivo := "EX"
   ELSEIF cConstan == "No alcanzado"
      cActivo := "NA"
   ELSEIF cConstan == "Exento no alcanzado"
      cActivo := "AN"
   ENDIF

RETURN cActivo


Aquí funciona bien.

Realmente no se porque en los demas programas no trabaja correctamente, ya que todos los prg que son compilados con harbour y xharbour son los mismos, pero en uno funciona y en harbour da esa incongruencia.


Luis
Posts: 652
Joined: Wed Oct 19, 2005 12:03 PM
Re: Comportamiento extraño
Posted: Tue Sep 29, 2015 10:24 PM
Seguí haciendo pruebas
Código original

Code (fw): Select all Collapse
REDEFINE COMBOBOX oCos[ 1 ] VAR cConiva id 114 ITEMS aConstancia of oFold:adialogs[ 1 ] update


En este es caso cuando da la incongruencia entre los dos compiladores

Ahora si hago

Code (fw): Select all Collapse
   REDEFINE COMBOBOX oCos[ 1 ] VAR cConiva id 114 ITEMS aConstancia of oFold:adialogs[ 1 ] update  ON CHANGE grabcons(cConiva)


Recuerdo la función
Code (fw): Select all Collapse
FUNCTION grabcons( cConstan )

   LOCAL cActivo := ""

   ? AllTrim(cConstan)

   IF cConstan = "Activo"
      cActivo := "AC"
   ELSEIF cConstan = "No Inscripto"
      cActivo := "NI"
   ELSEIF cConstan = "Exento"
      cActivo := "EX"
   ELSEIF cConstan = "No alcanzado"
      cActivo := "NA"
   ELSEIF cConstan = "Exento no alcanzado"
      cActivo := "AN"
   ENDIF

RETURN cActivo


De esta forma funciona correctamente!!!!
Porqué ???? Si lo único que hago es mostrar la variable (y la muestra correctamente) ???
Ademas cConstan se vé solamente en la función grabcons

Luis
Posts: 652
Joined: Wed Oct 19, 2005 12:03 PM
Re: Comportamiento extraño
Posted: Tue Sep 29, 2015 11:18 PM
Ahora probé de esta forma
Cuando modifico cargo los datos de la base de datos

Antes
Code (fw): Select all Collapse
   LOCAL cConiva := ""
   LOCAL cCongan := ""
   LOCAL cConmono := ""
////////////////////////////////////////////////////

    if !lnuevo
      cConiva := vercond( oData:constiva )
      cCongan := vercond( oData:constgan )
      cConmono := vercond( oData:constmono )


Ahora
Code (fw): Select all Collapse
   LOCAL cConiva := ""
   LOCAL cCongan := ""
   LOCAL cConmono := ""
   LOCAL cVariva := ""
   LOCAL cVarGan := ""
   LOCAL cVarmono := ""
//////////
    if !lnuevo
      cVariva := cConiva := vercond( oData:constiva )
      cVarGan := cCongan := vercond( oData:constgan )
      cVarmono := cConmono := vercond( oData:constmono )

la Función VERCOND

Code (fw): Select all Collapse
///////////
FUNCTION vercond( cVar )

   LOCAL cCondicion

   IF cVar = "AC" .OR. cVar = "S"
      cCondicion := "Activo"
   ELSEIF cVar = "NI" .OR. cVar = "N" .OR. Empty( cVar )
      cCondicion := "No Inscripto"
   ELSEIF cVar = "EX"
      cCondicion := "Exento"
   ELSEIF cVar = "NA"
      cCondicion = "No alcanzado"
   ELSEIF cVar = "XN"
      cCondicion = "Exento no alcanzado"
   ELSEIF cVar = "AN"
      cCondicion = "Activo no alcanzado"
   ENDIF

RETURN cCondicion


Antes

Code (fw): Select all Collapse
   REDEFINE COMBOBOX oCos[ 1 ] VAR cConiva id 114 ITEMS aConstancia of oFold:adialogs[ 1 ] update  
   REDEFINE COMBOBOX oCos[ 2 ] VAR cCongan id 115 ITEMS aConstancia of oFold:adialogs[ 1 ] update 
   REDEFINE COMBOBOX oCos[ 3 ] VAR cConmono id 119 ITEMS aConstancia of oFold:adialogs[ 1 ] update


Ahora
Code (fw): Select all Collapse
   REDEFINE COMBOBOX oCos[ 1 ] VAR cConiva id 114 ITEMS aConstancia of oFold:adialogs[ 1 ] update on change( cVariva :=  cConiva)
   REDEFINE COMBOBOX oCos[ 2 ] VAR cCongan id 115 ITEMS aConstancia of oFold:adialogs[ 1 ] update on change(cVarGan := cCongan )
   REDEFINE COMBOBOX oCos[ 3 ] VAR cConmono id 119 ITEMS aConstancia of oFold:adialogs[ 1 ] update on change(cVarmono :=  cConmono )



Antes
NO FUNCIONABA

Ahora
FUNCIONA

Alguna idea del porque???

Luis
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Comportamiento extraño
Posted: Wed Sep 30, 2015 07:57 AM

Luis,

Es dificil de saber la razón salvo que pudieses proporcionar un ejemplo autocontenido para probrarlo

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 652
Joined: Wed Oct 19, 2005 12:03 PM
Re: Comportamiento extraño
Posted: Thu Oct 01, 2015 11:01 PM

Antonio en el ejemplo que te quiero enviar funciona perfectamente, indudablemente es algo del programa que interfiere, pero todavía no he podido encontrarlo, en dónde falla es un prg de alta baja de clientes y en el de proveedores que son muy similares.

Luis

Continue the discussion