Problema insólito en TxBrowse

Problema insólito en TxBrowse

Postby Pedro » Sun Sep 19, 2010 10:27 am

Hola a todos

Tengo un problema en un módulo de pedidos, que me trae de cabeza ya durante unos días. El tema es el siguiente :
En el módulo tengo un listbox, donde pongo los datos de un fichero, si existe y tiene datos, sino lo pongo vacío.
En la opción nuevo pedido, creo un temporal al digitar el cliente, el cual busco, compruebo que exista y busco en una tabla
todos los artículos que compra ese cliente, si no está el temporal queda con un registro en blanco.
Bien, pues lo curioso es que en ese temporal, si añado una línea nueva y tengo que buscar el artículo porque el código digitado no existe en la tabla de artículos, el registro creado se anula y me deja la tabla temporal igual que cuando la puse al buscar el cliente, es decir, como si no hubiera hecho absolutamente nada en el temporal. Lo más curioso es que puse un inkey a ver si el registro se creaba,(hacía el dbappend), y si lo hace y muestra que el artículo buscado se ha insertado en la tabla y aparece con todos los datos que se insertan, pero después todo desaparece.
Aquí os pongo el código y las funciones que intervienen:
Code: Select all  Expand view
//----------------------------------------------------------------------------//
function NuevoPedido(oDPedido )
//----------------------------------------------------------------------------//
local oDlgAlb
Local nReg,oBrw
Local oSay,oGet[7]
Local cAlias1
Private aDatos[10]


    ASIZE(aClie, CLIE->( FCOUNT() ) )
    AFILL(aClie,.T.)
    CLIE->( IniCampo(aClie) )
    CLIE->( TabCampo(aClie,0) )
    CLIE->( IniCampo(aClie) )
   
    aDatos[ 1]:= Ctod("")  // Fecha
    aDatos[ 2]:= Space(5)  // Cliente
    aDatos[ 3]:= Space(35) // Nombre
    aDatos[ 4]:= Space(22) // Teléfono
    aDatos[ 5]:= Space(12) // Móvil
    aDatos[ 6]:= 0         // Reparto
    aDatos[ 7]:= 0         // Tarifa
    aDatos[ 8]:= 0         // Agente
    aDatos[ 9]:= 0         // Zona
    aDatos[10]:= 0         // Grupo
                   

    cAlias1 := "PTEM"
   
    aDatos[1] := dFecha

    PTEM->(dbGotop())
    DEFINE DIALOG oDlgAlb RESOURCE "NUEVOPEDIDO" COLOR RGB(0,0,0),RGB(255,204,153)
*--------------------------------------------------------------------
* REDIFINIMOS LOS SAYS DEL DIALOGO DE CAPTURA DE DATOS DE LA CABECERA
*--------------------------------------------------------------------  
   REDEFINE SAY oSay ID 101 PROMPT "FECHA";
   COLOR RGB(0,0,153),RGB(255,204,153) OF oDlgAlb
   REDEFINE SAY oSay ID 102 PROMPT "Nombre";
   COLOR RGB(0,0,153),RGB(255,204,153) OF oDlgAlb
   REDEFINE SAY oSay ID 103 PROMPT "Teléfono";
   COLOR RGB(0,0,153),RGB(255,204,153) OF oDlgAlb
   REDEFINE SAY oSay ID 104 PROMPT "Móvil";
   COLOR RGB(0,0,153),RGB(255,204,153) OF oDlgAlb
   REDEFINE SAY oSay ID 105 PROMPT "Reparto";
   COLOR RGB(0,0,153),RGB(255,204,153) OF oDlgAlb
   REDEFINE SAY oSay ID 106 PROMPT "Tarifa";
   COLOR RGB(0,0,153),RGB(255,204,153) OF oDlgAlb
   REDEFINE SAY oSay ID 107 PROMPT "Cliente";
   COLOR RGB(0,0,153),RGB(255,204,153) OF oDlgAlb
*--------------------------------------------------------------------
* REDIFINIMOS LOS GETS DEL DIALOGO DE CAPTURA DE DATOS DE LA CABECERA
*--------------------------------------------------------------------  
   REDEFINE GET oGet[1] VAR aDatos[ 1] ID 4001 PICTURE "@D" OF oDlgAlb READONLY UPDATE;
   COLOR RGB(0,0,0),RGB(255,204,51)
   
   REDEFINE GET oGet[2] VAR aDatos[ 3] ID 4002 PICTURE "@!" OF oDlgalb READONLY UPDATE;
   COLOR RGB(0,0,153),RGB(255,204,51)  
   
   REDEFINE GET oGet[3] VAR aDatos[ 4] ID 4003 PICTURE "@!" OF oDlgAlb READONLY UPDATE;
   COLOR RGB(0,0,153),RGB(255,204,51)

   REDEFINE GET oGet[4] VAR aDatos[ 5] ID 4004 PICTURE "@!" OF oDlgAlb READONLY UPDATE;
   COLOR RGB(0,0,153),RGB(255,204,51)

   REDEFINE GET oGet[5] VAR aDatos[ 6] ID 4005 PICTURE "99" OF oDlgAlb READONLY UPDATE;
   COLOR RGB(0,0,153),RGB(255,204,51)
   
   REDEFINE GET oGet[6] VAR aDatos[ 7] ID 4006 PICTURE "99" OF oDlgAlb READONLY  UPDATE;
   COLOR RGB(0,0,153),RGB(255,204,51)
       
   REDEFINE GET oGet[7] VAR aDatos[ 2] ID 4007 PICTURE "99999" OF oDlgAlb UPDATE ;
   COLOR RGB(0,0,0),RGB(255,204,51);
   VALID BusCliArt(aDatos[2],oDlgAlb,oBrw)      
   

*-------------------------------------------------------------------------------  
* Definimos el Browse  
*-------------------------------------------------------------------------------
   oBrw = TXBrowse():New( oDlgAlb )
   
   oBrw:nColDividerStyle    := LINESTYLE_BLACK
   oBrw:nRowDividerStyle    := LINESTYLE_BLACK
   oBrw:lRecordSelector     := .t.
   oBrw:nHeaderLines        := 2
   oBrw:nDataLines          := 1
     oBrw:nRowSel             := 1
     oBrw:nMarqueeStyle       := 3 //Highlight row //MARQSTYLE_HIGHLCELL
     oBrw:bClrSelFocus        := {||{CLR_WHITE,RGB(176,196,222 )}}
   oBrw:cAlias  := "PTEM"
   oBrw:bClrStd := {|| { nRGB( 0, 0, 0), nRGB(255,248,220) } } // colores para lineas normales
   oBrw:bClrSel := {|| { nRGB(0,0,0), nRGB(241,222,088) } } // para barra de linea selecc cuando el control no tiene el foco
   oBrw:bClrSelFocus := {|| { nRGB( 0, 0, 0), nRGB(248,195, 34) } } // para barra de linea selecc cuando el control tiene el foco

   oBrw:lFastEdit  := .T.
   oBrw:bPastEof = {|| PTEM->(Dbappend()), oBrw:GoLeftMost(),oBrw:Refresh(),;
                                            oBrw:aCols[ 1 ]:Edit() }
                                            //agrega registro y "oprime" enter
                       
*   oCol = oBrw:AddCol()
*   oCol:bStrData      := { ||TRANSFORM(PTEM->codigo,"999999") }
*   oCol:nEditType     := EDIT_GET
*   oCol:cHEADER       := "CODIGO"
*   oCol:bEditValid   =   {|o| if ( VAL(o:value()) == 0 , .f.,.t.) }
*   oCol:bOnPostEdit   := { | oCol, xVal, nKey | If( RecCount() == 0,( DbAppend(), oBrw:Refresh() ),) ,;
*   If( nKey == VK_RETURN, If(BSArt(oBrw,xVal),oBrw:Refresh(),oBrw:nMoveType:=MOVE_NONE),),;
*   If( nKey == VK_ESCAPE .and. PTEM->codigo=0,( PTEM->(dbDelete()),;
*               PTEM->(__dbPack()),PTEM->(dbGoBottom()),oBrw:Refresh() ), ) }
               
   oCol = oBrw:AddCol()
   oCol:bEditValue := { |x| If( x == nil, PTEM->codigo, PTEM->codigo := x ) }
   oCol:nEditType     := EDIT_GET_BUTTON
   oCol:cHEADER       := "CODIGO  "
   oCol:addResource( "BUSCAR1" )
   oCol:lBtnTransparent := .t.
   oCol:nBtnBmp := 1
*   oCol:bEditValid    := {|o| if ( Empty(o:value()) , .f., .t.) }
   oCol:bEditValid    := {|o| if ( o:value()= 0  , .f., .t.) }  
   oCol:bEditBlock   := {|nRow, nCol, oCol| oCol:Value := BusArtic() }
   oCol:bOnPostEdit   := { | oCol, xVal, nKey | If( RecCount() == 0,( DbAppend(), oBrw:Refresh() ),) ,;
   If( nKey == VK_RETURN, If(BSArt(oBrw,xVal),oBrw:Refresh(),oBrw:GoleftMost()),),;
   If( nKey == VK_ESCAPE .and. PTEM->codigo=0,( PTEM->(dbDelete()),;
               PTEM->(__dbPack()),PTEM->(dbGoBottom()),oBrw:Refresh() ), ) }

           
     oCol = oBrw:AddCol()
   oCol:bStrData      := { ||PTEM->articulo }   
   oCol:nEditType     := EDIT_GET
   oCol:cHEADER       := "ARTICULO"
   oCol:bOnPostEdit = { | oCol, xVal, nKey | If( RecCount() == 0, DbAppend(),),;
     If( nKey == VK_RETURN, PTEM->articulo := xVal ,) }

     oCol = oBrw:AddCol()
   oCol:bStrData      := { ||TRANSFORM( PTEM->precio,"999.999") }   
   oCol:nEditType     := EDIT_GET
   oCol:cHEADER       := "PRECIO"
   oCol:bOnPostEdit = { | oCol, xVal, nKey | If( RecCount() == 0, DbAppend(),),;
     If( nKey == VK_RETURN, PTEM->precio := Val(xVal) ,) }
                 
     oCol = oBrw:AddCol()
   oCol:bStrData      := { ||Transform( PTEM->cajas,"9,999" ) } 
   oCol:nDataStrAlign := 1 //alineado a la derecha
   oCol:nEditType     := EDIT_GET
   oCol:bEditWhen     := {|| (cAlias1)->tipo = 1 }
   oCol:cHEADER       := "CAJAS"+CRLF+"ENTERO"
   oCol:bOnPostEdit = { | oCol, xVal, nKey | If( RecCount() == 0, DbAppend(),),;
     If( nKey == VK_RETURN,  PTEM->cajas := Val(xVal) ,) }
   
   oCol = oBrw:AddCol()
   oCol:bStrData      := { ||Transform( PTEM->UNIDADES,"999") }  
   oCol:nDataStrAlign := 1 //alineado a la derecha
   oCol:nEditType     := EDIT_GET
   oCol:bEditWhen     := {|| (cAlias1)->tipo = 1 }
   oCol:cHEADER       := "UNIDADES"+CRLF+"ENTERO"
   oCol:bOnPostEdit = { | oCol, xVal, nKey | If( RecCount() == 0, DbAppend(),),;
     If( nKey == VK_RETURN, PTEM->unidades := Val(xVal) ,) }    
      
   oCol = oBrw:AddCol()
   oCol:bStrData      := { ||Transform( PTEM->BANDEJAS,"9,999") }  
   oCol:nDataStrAlign := 1 //alineado a la derecha
   oCol:nEditType     := EDIT_GET
   oCol:bEditWhen     := {|| (cAlias1)->tipo = 2 }
   oCol:cHEADER       := "CAJAS"+CRLF+"BANDEJAS"
   oCol:bOnPostEdit = { | oCol, xVal, nKey | If( RecCount() == 0, DbAppend(),),;
     If( nKey == VK_RETURN, PTEM->bandejas := Val(xVal) ,) }
   
   
    oBrw:SetRdd()
    oBrw:CreateFromResource(2001)
    oBrw:bKeyDown :={ | nKey | Teclas(nKey, oBrw, "PTEM") }        
   
   
   
   REDEFINE BUTTON ID 221 OF oDlgAlb ;
              ACTION AltasPedi( oDlgAlb ), BorraTemp(), oDlgAlb:End()

   REDEFINE BUTTON ID 223 OF oDlgAlb CANCEL ACTION BorraTemp(),oDlgAlb:End()

    ACTIVATE DIALOG oDlgAlb ON PAINT oDlgAlb:aControls[14]:SetFocus() CENTERED
    SysRefresh()

Return( nil )
*-------------------------------------------------------------------------------
FUNCTION BUSCLIART(cClien,oDlg,oBrw)
*-------------------------------------------------------------------------------
Local nPrecio := 0
Local nTipo   := 0

    cClien := PADL(ALLTRIM(cClien),5,"0")
    If Val(cClien)== 0
       MsgInfo("No se permiten pedidos al Cliente "+"00000","AVISO")
       Return(.f.)
    EndIf  
    CLIE->(dbSeek(cClien))
    If CLIE->(Found())
       aDatos[ 2] := cClien
       aDatos[ 3] := CLIE->nombre
       aDatos[ 4] := CLIE->telefono
       aDatos[ 5] := CLIE->movil
       aDatos[ 6] := BARREPARTO()
       aDatos[ 7] := CLIE->tarifa
       aDatos[ 8] := CLIE->agente
       aDatos[ 9] := CLIE->zona
       aDatos[10] := CLIE->grupo
    Else
       MsgInfo("No existe el cliente","AVISO")
       Return(.f.)
    EndIf    
    IF PTEM->(Flock())
       PTEM->(dbZap())
    EndIf    
    CLIAR->(dbSeek(cClien))
    If CLIAR->(Found())
       While CLIAR->cliente == cClien
              PTEM->(dbAppend())
              PTEM->codigo   := CLIAR->codigo
              PTEM->articulo := CLIAR->articulo
              nPrecio := BARPRECIO(aDatos,CLIAR->codigo)
              PTEM->precio := nPrecio
              nTipo := BARTIPO(CLIAR->codigo)
              PTEM->tipo := nTipo
              CLIAR->(dbSkip())
              If CLIAR->(Eof())
                 Exit
              EndIf    
       EndDo
       PTEM->(dbUnlockAll())
       PTEM->(dbCommitAll())
     ELSE
       PTEM->(dbAppend())  
     EndIf

     oDlg:Update()
     oDlg:Refresh()
     PTEM->(dbGotop())
     oBrw:Refresh()
     SysRefresh()        
Return(.t.)
* ------------------------------------------------------------------
FUNCTION BSART(oBrw,nCodigo)
* ------------------------------------------------------------------
Local nArti := nCodigo  
Local lSigue := .T.
Local xCodigo := 0
 
 
       
      ARTI->(dbSeek(nArti))

      If ARTI->(Found())
         (oBrw:cAlias)->codigo   := nArti
         (oBrw:cAlias)->articulo := ARTI->articulo
         (oBrw:cAlias)->precio   := ARTI->(FIELDGET(aDatos[7]+6))
         (oBrw:cAlias)->tipo     := BARTIPO(nArti)
      Else
         nSino := MsgYesNo("Artículo no encontrado"+CRLF+"¿Desea buscarlo?","ELIJA")
         If nSino
            nArti := BUSARTIC()
            If nArti == 0
               lSigue := .F.
            Else
               PTEM->codigo   := nArti
               PTEM->articulo := ARTI->articulo
               PTEM->precio   := ARTI->(FIELDGET(aDatos[7]+6))
               PTEM->tipo     := BARTIPO(nArti)
              oBrw:Refresh()
            EndIf    
         Else  
            lSigue := .F.
         EndIf  
      EndIf
      SysRefresh()
      inkey(5)
     
Return(lSigue)
*-----------------------------------------------------------------------------
Function Teclas(nKey, oBrw, cAlias)
*-----------------------------------------------------------------------------
Local nCol := oBrw:nColSel    
   
    Do Case
       Case nKey == VK_DELETE
            if MsgNoYes("¿Confirme borrar este registro?")
              (cAlias)->(dbDelete())
              (cAlias)->(dbCommitall())
               oBrw:GoUp()
               oBrw:Refresh()
            EndIf  

    EndCase
           
Return nil
//----------------------------------------------------------------------------//
 function BusArtic()
//----------------------------------------------------------------------------//
Local oLbArt, oWArtic
Local oDlgArt
Local cCodigo := 0
Local oDArti
Local nSelect := Select()

      dbSelectArea("ARTI")
      DATABASE oDArti
      oDArti:Gotop()

    DEFINE DIALOG oDlgArt RESOURCE "DLGBUSART"


    REDEFINE LISTBOX oLbArt ;
        FIELDS Str(oDArti:Codigo),oDArti:articulo ;
        HEADERS "Codigo ","Articulo" ;
        ID 101 ;
        OF  oDlgArt ;
        COLOR CLR_BLACK, RGB( 180, 180, 180) ;
        ON DBLCLICK ( cCodigo := oDArti:codigo , oDlgArt:End() ,;
                    dbSelectArea(nSelect)  ) ;
        ALIAS "ARTI"

        oDlgArt:SetControl( oLbArt )
        oDlgArt:bGotFocus := { || oLbArt:Refresh() }
        oLbArt:bSkip = { | nRecs | oDArti:Skipper( nRecs ) }
        oLbArt:lCellStyle = .F.



    ACTIVATE DIALOG oDlgArt CENTERED
    SysRefresh()

return( cCodigo )

 


Y aún más curioso, si el artículo digitado existe, pone todos los datos y sigue el proceso, si no existe, es como si volviera a digitar el cliente creando un temporal nuevo, sobre el anterior que está abierto y de forma exclusiva.
Después de añadir los datos al registro en la función BSART, he puesto un dbunlock, un dbcommit y nada, se lo pasa por el forro.
Al volver de la función BSART, si el artículo ha sido buscado, todo browse temporal desaparece y el cursor pasa al get de cliente.

¿Alguien tiene de idea del por qué en este módulo me pasa esto y en los demás que tengo esto mismo no pasa?
Un saludo
Pedro
gahetesoft@gmail.com
FWH12.06 BCC582, Xverce CW, Pelles C 6.00.4,PSPAD 4.54
y ahora con ADO
User avatar
Pedro
 
Posts: 464
Joined: Tue Mar 21, 2006 7:30 pm
Location: Córdoba (España)

Re: Problema insólito en TxBrowse (SOLUCIONADO)

Postby Pedro » Sun Sep 26, 2010 10:40 am

Pues parece que eso de que el orden de los factores no altera el producto :lol: :lol: no se da aquí.
cambiando el último get, que es el único que no es readonly, al principio de los controles, se ha solucionado y el fantasma que borraba y generaba de nuevo el browse se ha largado. :roll: :shock:
Un saludo
Pedro
gahetesoft@gmail.com
FWH12.06 BCC582, Xverce CW, Pelles C 6.00.4,PSPAD 4.54
y ahora con ADO
User avatar
Pedro
 
Posts: 464
Joined: Tue Mar 21, 2006 7:30 pm
Location: Córdoba (España)

Re: Problema insólito en TxBrowse

Postby Antonio Linares » Sun Sep 26, 2010 11:35 am

Pedro,

Me alegro de que lo hayas podido solucionar :-)
regards, saludos

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

Re: Problema insólito en TxBrowse

Postby Pedro » Sun Sep 26, 2010 3:32 pm

Me ha costado solucionarlo, Antonio, aunque no entiendo por qué un get debe estar en un sitio o en otro.
¿Hay alguna razón especial?
Un saludo
Pedro
gahetesoft@gmail.com
FWH12.06 BCC582, Xverce CW, Pelles C 6.00.4,PSPAD 4.54
y ahora con ADO
User avatar
Pedro
 
Posts: 464
Joined: Tue Mar 21, 2006 7:30 pm
Location: Córdoba (España)


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 29 guests