Page 1 of 1

Consulta sobre GROUP

PostPosted: Mon Sep 16, 2013 5:10 am
by juan_arroyo_t
Por favor si alguien pudiera ayudarme

Estoy poniendo en un dialogo dos grupos el primera contiene 2 radios y el segundo tres
Selecciono un radio del primer grupo y cuando quiero seleccionar uno del segundo grupo, el radio del primer grupo se desactiva
Este es mi codigo :
Code: Select all  Expand view
# include "fivewin.ch"

STATIC nRad1, nRad2, cId_Art, cId_Pro, cId_Sol, cNomArt, cNomPro, cNomSol

FUNCTION RepDet()
    LOCAL oDlg := NIL,;
         aoObjetos := { nil, nil }, ;
         aoBtn := { nil, nil, nil },;
         aoSay := { nil, nil }
    LOCAL aoGrp := { nil, nil }        
   LOCAL aoRad := { nil, nil }
    LOCAL cTitulo := "Reporte detalle partidas de importaciones"
   
    cId_Art := space(18)
    cId_Pro := cId_Sol := space(5)
    cNomArt := cNomPro := cNomSol := ""
    nRad1 := 1
    nRad2 := 1
   
   dbCloseAll()

   IF ! Net_Use( "imp",,, oApp:xDatos ) .or.;           // Importaciones
    ! Net_Use( "pro",,, oApp:xDatos ) .or.;         // Ordenes de proveedores
    ! Net_Use( "ven",,, oApp:xDatos ) .or.;         // Catalogo de vendedores
    ! net_use( "art",,, oApp:xDatos ) .or.;         // Catalogo de articulos
    ! net_use( "dimp",,,oApp:xDatos )                   // Detalle de importaciones
      dbCloseAll(); RETURN(NIL)
   ENDIF
   
   DEFINE DIALOG oDlg RESOURCE "DLG_REP_DET" TITLE cTitulo
   
   REDEFINE RADIO aoRad[1] VAR nRad1                ID 201,202 OF oDlg UPDATE
   
   REDEFINE GROUP aoGrp[1] PROMPT "Seleccione"  ID 4003 OF oDlg UPDATE
   
   REDEFINE RADIO aoRad[2] VAR nRad2                ID 203,204,205 OF oDlg UPDATE
   
   REDEFINE GROUP aoGrp[2] PROMPT "Seleccione"  ID 4007 OF oDlg UPDATE
                     
   IF nRad1 == 1
    
    
    IF nRad2 == 1
        REDEFINE SAY aoSay[1] PROMPT "Articulo :"       ID 101 OF oDlg UPDATE
       
        REDEFINE GET aoObjetos[2] VAR cId_Art           ID 102 OF oDlg UPDATE ;
            PICTURE "@!" ;
            VALID EVAL ( { || cId_Art := ValCod( cId_Art, "art" ), ;
                                    iif(empty(cId_Art), .F., ;
                                       (cId_Art := art->id, cNomArt := art->nombre, oDlg:Update(), .t.)) } ) ;
                MESSAGE "Clave del articulo"
                aoObjetos[2]:cToolTip := "Introduzca o seleccione la clave del articulo"
               
            REDEFINE SAY aoSay[2] VAR cNomArt               ID 301 OF oDlg UPDATE
        ENDIF              
    
    IF nRad2 == 2
        REDEFINE SAY aoSay[1] PROMPT "Proveedor :"  ID 101 OF oDlg UPDATE
       
        REDEFINE GET aoObjetos[2] VAR cId_Pro           ID 102 OF oDlg UPDATE ;
            PICTURE "@!" ;
            VALID EVAL ( { || cId_Pro := ValCod( cId_Pro, "pro" ), ;
                                    iif(empty(cId_Pro), .F., ;
                                       (cId_Pro := pro->id, cNomPro := pro->nombre, oDlg:Update(), .t.)) } ) ;
                MESSAGE "Clave de proveedor"
                aoObjetos[2]:cToolTip := "Introduzca o seleccione la clave de proveedor"   
    
            REDEFINE SAY aoSay[2] VAR cNomPro               ID 301 OF oDlg UPDATE              
        ENDIF
                           
        IF nRad2 == 3
            REDEFINE SAY aoSay[1] PROMPT "Vendedor :"       ID 101 OF oDlg UPDATE ;
       
        REDEFINE GET aoObjetos[2] VAR cId_Sol           ID 102 OF oDlg UPDATE ;
            PICTURE "@!" ;
                VALID EVAL ( { || cId_Sol := ValCod( cId_Sol, "ven" ), ;
                                    iif(empty(cId_Sol), .F., ;
                                        (cId_Sol := ven->id, cNomSol := ven->nombre, oDlg:Update(), .t.)) } ) ;
            MESSAGE "Clave de vendedor"
                aoObjetos[2]:cToolTip := "Introduzca o seleccione la clave de vendedor"
               
            REDEFINE SAY aoSay[2] VAR cNomSol               ID 301 OF oDlg UPDATE              
           
        ENDIF
       
    ENDIF
   
    REDEFINE BUTTONBMP aoBtn[1] ID 400 OF oDlg ;
    PROMPT "A&ceptar " ;
    BITMAP "BTN_OK" TEXTRIGHT ;
    ACTION oDlg:End() ;     //( Filtra(), ImpRep(), oDlg:End() ) ;
      MESSAGE "Aceptar" UPDATE
      aoBtn[1]:cToolTip := "Presione para Continuar"

    REDEFINE BUTTONBMP aoBtn[2] ID 401 OF oDlg ;
        PROMPT "&Cancelar " BITMAP "BTN_CAN" TEXTRIGHT ;
    ACTION oDlg:End() ;     //( lContinuar := .F., oDlg:End() ) ;
      MESSAGE "Cancelar" UPDATE
      aoBtn[2]:cToolTip := "Presione para Cancelar"

   ACTIVATE DIALOG oDlg CENTERED ON INIT oninit( oDlg )
   
RETURN NIL

// --------------------------------------------------------------------------- //
 


y esta es una imagen del dialogo
Image

De antemano muchas gracias

Re: Consulta sobre GROUP

PostPosted: Mon Sep 16, 2013 5:15 am
by juan_arroyo_t
Disculpen, todavia no se muy bien como poner una imagen

Lo vuelvo a intentar
http://www.mediafire.com/download/707bar94c8nmkf3/Captura.JPG

Re: Consulta sobre GROUP

PostPosted: Mon Sep 16, 2013 2:26 pm
by RSalazarU
Hola Juan:

Proba con con habilitar el atributo Group al primer radio de cada grupo.

Esto lo deberias hacer en tu editor de recursos.



Atentamente,

Rolando
Cochabamba - Bolivia
FWH 1109 - xHarbour 1.1.0 (SimpLex) - BCC58

Re: Consulta sobre GROUP

PostPosted: Mon Sep 16, 2013 4:42 pm
by juan_arroyo_t
Rolando

Gracias por responder

Ya lo hice y sin embargo no me actualiza el valor de nRad2, se supone que si elijo en el primer grupo el primer radio (selectivo) y en el segundo grupo el segundo o el tercer radio, siempre me considera el primer radio (articulo)

Re: Consulta sobre GROUP

PostPosted: Mon Sep 16, 2013 5:45 pm
by Hector Pedro Lerda
Hola Juan

A mi me ha ocurrido lo mismo y es por el editor de recursos, si usas pelles debes colocar en el tipo que es un radiobutton y no auto radiobutton

Saludos Pedro

Re: Consulta sobre GROUP

PostPosted: Mon Sep 16, 2013 10:37 pm
by Armando
Juan:

Al contrario de Héctor, yo los tengo definidos como AUTO RADIOBUTTON desde PellesC y sin problemas,
sería bueno que publicaras tus recursos.

Saludos

Re: Consulta sobre GROUP

PostPosted: Tue Sep 17, 2013 12:08 am
by juan_arroyo_t
Hector, Armando

Ya probe con cambiar el atributo de los radios a auto radiobutton y no funciona

Mis radios del primer grupo son "selectivo" y "General"
los del segundo grupo son "Articulo", "Proveedor" y "Vendedor"
abajo tengo un get que se activa solamente si selecciono el primer radio del grupo uno "Selectivo" y me funcionen los if-endif ; pero al parecer el valor de nRad2 siempre me queda en 1
Estoy pensando que me hace falta algo como un CHANGE para actualizar el valor de nRAd2, pero no se como implementarlo

Saludos

Re: Consulta sobre GROUP

PostPosted: Tue Sep 17, 2013 1:31 am
by Armando
Juan:

Viendo tu imagen creo comprender tus necesidades, a ver si esto te funciona:

El segundo RADIO condiciónalo solo cuando el primer RADIO valga 1 (Selectivo)
y el GET lo condicionas solo cuando el segundo RADIO valga 3 (Vendedor)

Creo que ya no necesitas los IFs.

Code: Select all  Expand view

          REDEFINE RADIO aoRad[2] VAR nRad2 ID 203,204,205 OF oDlg UPDATE;
          WHEN nRad1 == 1     // AQUÍ
          ...
          ...
          ...
        REDEFINE GET aoObjetos[2] VAR cId_Sol           ID 102 OF oDlg UPDATE ;
            WHEN nRad2 == 3;          // Y AQUÍ
            PICTURE "@!" ;
                VALID EVAL ( { || cId_Sol := ValCod( cId_Sol, "ven" ), ;
                                    iif(empty(cId_Sol), .F., ;
                                        (cId_Sol := ven->id, cNomSol := ven->nombre, oDlg:Update(), .t.)) } ) ;
            MESSAGE "Clave de vendedor"
 


Ojalá que esto te ayude.

Saludos

Re: Consulta sobre GROUP

PostPosted: Sun Sep 22, 2013 3:50 am
by juan_arroyo_t
Armando

Disculpa por la tardanza

Juan:

Viendo tu imagen creo comprender tus necesidades, a ver si esto te funciona:

El segundo RADIO condiciónalo solo cuando el primer RADIO valga 1 (Selectivo)
y el GET lo condicionas solo cuando el segundo RADIO valga 3 (Vendedor)

Creo que ya no necesitas los IFs.


Sucede que el prompt del say va a cambiar en base al valor que tenga nRad2 y que nRad1 sea 1
Si nRAd1 = 1 y nRad2 = 1, el prompt del say sera "Articulo"
Si nRAd1 = 1 y nRad2 = 2, el prompt del say sera "Proveedor"
Si nRad1 = 1 y nRad2 = 3, el prompt del say sera "Vendedor"
y abrira las bases de datos que correspondan segun el valor de nRad2

Si nRad1 = 2, (General) el get no se activara

Cuando salgo del dialogo y pruebo los valores de nRad1 y nRad2 los muestra correctos

No se a que se deba

Gracias

Re: Consulta sobre GROUP

PostPosted: Sun Sep 22, 2013 8:48 am
by Antonio Linares
Juan,

El problema es que no puedes hacer unos IFs en función de algo que valdrá x a posteriori.

Usa la claúsula ON CHANGE para cambiar el texto del SAY, etc.

REDEFINE RADIO ... ON CHANGE If( nRad1 == 1, oSay:SetText( { "Artículo", "Proveedor", "Vendedor" }[ nRad2 ] ),)

Como ves, llamamos a If() despues de que se seleccione otro elemento del radio

Re: Consulta sobre GROUP

PostPosted: Sun Sep 22, 2013 9:03 am
by Antonio Linares
Y para el GET:

REDEGINE GET ... WHEN nRad1 != 2

Re: Consulta sobre GROUP

PostPosted: Sun Sep 22, 2013 6:40 pm
by juan_arroyo_t
Antonio

Gracias por responder

Este es el nuevo codigo
Code: Select all  Expand view
# include "fivewin.ch"

STATIC nRad1, nRad2, nOpcion, cId_Art, cId_Pro, cId_Sol, cNomArt, cNomPro, cNomSol

FUNCTION RepDet()
    LOCAL oDlg := NIL,;
         aoObjetos := { nil, nil }, ;
         aoBtn := { nil, nil, nil },;
         aoSay := { nil, nil }
    LOCAL aoGrp := { nil, nil }        
   LOCAL aoRad := { nil, nil }
    LOCAL cTitulo := "Reporte detalle partidas de importaciones"
   
    cId_Art := space(18)
    cId_Pro := cId_Sol := space(5)
    cNomArt := cNomPro := cNomSol := ""
    nRad1 := 1
    nRad2 := 1
   
   dbCloseAll()

   IF ! Net_Use( "imp",,, oApp:xDatos ) .or.;           // Importaciones
    ! Net_Use( "pro",,, oApp:xDatos ) .or.;         // Ordenes de proveedores
    ! Net_Use( "ven",,, oApp:xDatos ) .or.;         // Catalogo de vendedores
    ! net_use( "art",,, oApp:xDatos ) .or.;         // Catalogo de articulos
    ! net_use( "dimp",,,oApp:xDatos )                   // Detalle de importaciones
      dbCloseAll(); RETURN(NIL)
   ENDIF
   
   DEFINE DIALOG oDlg RESOURCE "DLG_REP_DET" TITLE cTitulo TRANSPARENT
   
   REDEFINE RADIO aoRad[1] VAR nRad1                ID 201,202 OF oDlg UPDATE ;
    ON CHANGE If( nRad1 == 1, aoSay[1]:SetText( { "Artículo", "Proveedor", "Vendedor" }[ nRad2 ] ), )

   REDEFINE GROUP aoGrp[1] PROMPT "Seleccione"  ID 4003 OF oDlg UPDATE
    
   REDEFINE RADIO aoRad[2] VAR nRad2                ID 203,204,205 OF oDlg UPDATE ;
    ON CHANGE If( nRad1 == 1, aoSay[1]:SetText( { "Artículo", "Proveedor", "Vendedor" }[ nRad2 ] ), )
    
   REDEFINE GROUP aoGrp[2] PROMPT "Seleccione"  ID 4007 OF oDlg UPDATE
   
   
   if nRad2 == 3
    ? nRad2
    REDEFINE SAY aoSay[1] PROMPT "Vendedor :"       ID 101 OF oDlg UPDATE
    
    REDEFINE GET aoObjetos[2] VAR cId_Sol           ID 102 OF oDlg UPDATE ;
            PICTURE "@!" ;
            VALID EVAL ( { || cId_Sol := ValCod( cId_Sol, "ven" ), ;
                                iif(empty(cId_Sol), .F., ;
                                    (cId_Sol := ven->id, cNomSol := ven->nombre, oDlg:Update(), .t.)) } ) ;
        MESSAGE "Clave de vendedor" ;
        WHEN nRad1 != 2
            aoObjetos[2]:cToolTip := "Introduzca o seleccione la clave de vendedor"
       
        REDEFINE SAY aoSay[2] VAR cNomSol               ID 301 OF oDlg UPDATE
       
   elseif nRad2 == 2
    ? nRad2
    REDEFINE SAY aoSay[1] PROMPT "Proveedor :"  ID 101 OF oDlg UPDATE
       
    REDEFINE GET aoObjetos[2] VAR cId_Pro           ID 102 OF oDlg UPDATE ;
        PICTURE "@!" ;
        VALID EVAL ( { || cId_Pro := ValCod( cId_Pro, "pro" ), ;
                                iif(empty(cId_Pro), .F., ;
                                   (cId_Pro := pro->id, cNomPro := pro->nombre, oDlg:Update(), .t.)) } ) ;
            MESSAGE "Clave de proveedor" ;
            WHEN nRad1 != 2
            aoObjetos[1]:cToolTip := "Introduzca o seleccione la clave de proveedor"
           
        REDEFINE SAY aoSay[2] VAR cNomPro               ID 301 OF oDlg UPDATE                                  
       
   elseif nRad2 == 1
    ? nRad2
    REDEFINE SAY aoSay[1] PROMPT "Articulo :"       ID 101 OF oDlg UPDATE
       
    REDEFINE GET aoObjetos[2] VAR cId_Art           ID 102 OF oDlg UPDATE ;
        PICTURE "@!" ;
        VALID EVAL ( { || cId_Art := ValCod( cId_Art, "art" ), ;
                                iif(empty(cId_Art), .F., ;
                                   (cId_Art := art->id, cNomArt := art->nombre, oDlg:Update(), .t.)) } ) ;
            MESSAGE "Clave del articulo" ;
            WHEN nRad1 != 2
            aoObjetos[2]:cToolTip := "Introduzca o seleccione la clave del articulo"
               
        REDEFINE SAY aoSay[2] VAR cNomArt               ID 301 OF oDlg UPDATE
   
   endif
   
    REDEFINE BUTTONBMP aoBtn[1] ID 400 OF oDlg ;
    PROMPT "A&ceptar " ;
    BITMAP "BTN_OK" TEXTRIGHT ;
    ACTION oDlg:End() ;     //( Filtra(), ImpRep(), oDlg:End() ) ;
      MESSAGE "Aceptar" UPDATE
      aoBtn[1]:cToolTip := "Presione para Continuar"

    REDEFINE BUTTONBMP aoBtn[2] ID 401 OF oDlg ;
        PROMPT "&Cancelar " BITMAP "BTN_CAN" TEXTRIGHT ;
    ACTION oDlg:End() ;     //( lContinuar := .F., oDlg:End() ) ;
      MESSAGE "Cancelar" UPDATE
      aoBtn[2]:cToolTip := "Presione para Cancelar"

   ACTIVATE DIALOG oDlg CENTERED ON INIT  oninit( oDlg )
   ? nRad1, nRad2
   
RETURN NIL
 


En el segundo grupo de radios checo el valor de nRad2 y me los da correctos pero en los ifs no puedo accesar a las bases de datos segun el valor de nRad2

Saludos