FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Carga de datos
Posts: 652
Joined: Wed Oct 19, 2005 12:03 PM
Carga de datos
Posted: Fri Oct 23, 2009 10:12 PM
Hola, a ver si alguien me puede orientar. La función de mas abajo la uso para buscar un producto y obtener los datos del mismo para cargar en los pedidos, remitos o facturas los distintos productos . Funciona bien


Code (fw): Select all Collapse
////
  Case nCol == 1
                              bValid:= {|| iif(bprodu(ubuffer,oNsto), .T. ,   (Alert( "Codigo Articulo Inexistente :-("),.F.)) }


              If lContinue:= oBrw:lEditCol( nColReal, @uBuffer, "@ZE 9999", bValid,,CLR_YELLOW)

          aPedido:aDet[nAt,1]:= oNsto:codigo
                  aPedido:aDet[nAt,2]:= oNsto:producto  
          aPedido:aDet[nAt,8]:= oNsto:abrevia
          aPedido:aDet[nAt,12] := oNsto:alpeso
          aPedido:aDet[nAt,6]:= oNsto:abrevia
               EndIf

///etc

FUNCTION BPRODU(ncod,odbf)


local lacepto := .F.
local olbm, odlg
local nbut


odbf:setorder(2)                                                   //ordeno por nombre
odbf:gotop()

if empty(ncod)
DEFINE ICON surge resource "icoprog"

DEFINE DIALOG oDlg resource "lisbus_1" ICON surge
odlg:cCaption:= "Productos" 

   REDEFINE LISTBOX olbm FIELDS (oDbf:calias) ->producto ID 101;
             ON DBLCLICK (lacepto:= .t.,odlg:end())  of odlg 
             olbm:setfocus()     
             olbm:bSkip := { | nRecs | oDbf:Skipper( nRecs ) }
             oLbm:bSeek := {|lRet| oLbm:DbfSeek(.T.) }
         oLbm:bkeydown :=  {|nkey,nflags| iif(nKey = VK_RETURN, nBut:setfocus(),.f.)}
         olbm:nClrBackFocus := CLR_CYAN
             olbm:nClrForeFocus := CLR_WHITE         
   REDEFINE BUTTON NBUT ID 102 ACTION (lacepto := .t.,odlg:end())
  
 
   REDEFINE BUTTON ID 103 ACTION( clientes( olbm, .t.,odbf),olbm:refresh())
  


ACTIVATE DIALOG ODLG 

ELSE 
 odbf:setorder(1)
 odbf:seek(ncod)
 if odbf:found()
     lacepto := .t.
 endif
 
ENDIF 

if lacepto
RETURN .t.
endif
return .f.


Pero cuando llamo de nuevo el pedido y quiero añadir otro producto me aparece el listbox vacío

Code (fw): Select all Collapse
if !lnuevo                                    // si es un pedido existente cargo en el formulario todos los datos
 ///
   eval(beval)
 
 

   oPmemo:seek(oPinterno:pedido)
   if oPmemo:found()
      aPedido:observa := oPmemo:observa
   endif

   aPedido:totales := aPedido:totpes 
      
   busnap(oMae,oPinterno:ncli)
   aPedido:ncli := oMae:ncli
   aPedido:nape := oMae:nape
   aPedido:domi := oMae:domi
   aPedido:vendedor := oPinterno:vendedor 
   if oPinterno:estado = "A"
       cEstado := "Autorizado"
   elseif oPinterno:estado = "R"
       cEstado := "Remito " + oPinterno:remito
   endif
       
   oDpedido:seek(oPinterno:pedido)

   if oDpedido:found()
      do                                    /                                               
            aadd(aPedido:aDet,{oDpedido:codigo,[size=150]eval(bprodu)[/size], oDpedido:unidad,oDpedido:cantidad,oDpedido:precio,oDpedido:envase,oDpedido:comision,oNsto:abrevia,oDpedido:recno(),.t.,.t.,oNsto:alpeso,0,0,0})
        oDpedido:skip()                                                                                                                                                                                                                             
      until oDpedido:pedido # oPinterno:pedido


Aquí me carga bien el formulario pero si quiero agregar un producto el listbox con los mismos me aparece vacío.

No pude encontrar el porque de este comportamiento.

Gracias
Posts: 652
Joined: Wed Oct 19, 2005 12:03 PM
Re: Carga de datos
Posted: Sat Oct 24, 2009 11:04 AM
Hace varios años este problema lo tenía resuelto devolviendo un array, es decir llamaba la función abría la base de datos cargaba en un array el registro y cerraba la base. Pero estoy haciendo un nuevo programa y quería hacerlo de la manera que me parecía mas correcta que era pasar como parámetro el objeto database y cerrarlo cuando dejaba la rutina principal.

Code (fw): Select all Collapse
FUNCTION BPRODU(ncod)


local lacepto := .F.
local olbm, odlg
local nbut
local k1
local surge
local aProd := array(0)


if !pasaje("nstock");return nil;endif
database oNsto
oNsto:setorder(2)                                                   //ordeno por nombre
oNsto:gobottom()
oNsto:gotop()

if empty(ncod)
DEFINE ICON surge resource "icoprog"

DEFINE DIALOG oDlg resource "lisbus_1" ICON surge
odlg:cCaption:= "Productos" 

   REDEFINE LISTBOX olbm FIELDS (oNsto:calias) ->producto ID 101;
             ON DBLCLICK (lacepto:= .t.,odlg:end())  of odlg 
             olbm:setfocus()     
             olbm:bSkip := { | nRecs | oNsto:Skipper( nRecs ) }
             oLbm:bSeek := {|lRet| oLbm:DbfSeek(.T.) }
         oLbm:bkeydown :=  {|nkey,nflags| iif(nKey = VK_RETURN, nBut:setfocus(),.f.)}
         olbm:nClrBackFocus := CLR_CYAN
             olbm:nClrForeFocus := CLR_WHITE         
   REDEFINE BUTTON NBUT ID 102 ACTION (lacepto := .t.,odlg:end())
  
 
   REDEFINE BUTTON ID 103 ACTION( clientes( olbm, .t.,oNsto),olbm:refresh())
  


ACTIVATE DIALOG ODLG 

ELSE 
 oNsto:setorder(1)
 oNsto:seek(ncod)
 if oNsto:found()
    lacepto := .t.
 endif
 
ENDIF 

if lacepto
    aadd(aProd,oNsto:codigo)               //1
    aadd(aProd,oNsto:familia )               //2
    aadd(aProd,oNsto:fantasia)            //3
    aadd(aProd,oNsto:npro)                  //4  
        aadd(aProd,oNsto:codenv)              //5
    aadd(aProd,oNsto:medida)               //6
    aadd(aProd,oNsto:abrevia)              //7
    aadd(aProd,oNsto:lista1)                //8 
    aadd(aProd,oNsto:lista2)                  //9 
    aadd(aProd,oNsto:lista3)                  //10 
    aadd(aProd,oNsto:lista4)                  //11
    aadd(aProd,oNsto:lista5)                  //12
    aadd(aProd,oNsto:costo)                   //13
    aadd(aProd,oNsto:almacen)             //14
    aadd(aProd,oNsto:alpeso)                 //15   
    aadd(aProd,oNsto:unidades)             //16
endif
cierroalias(oNsto:calias,oNsto)
return  aProd
Posts: 652
Joined: Wed Oct 19, 2005 12:03 PM
Re: Carga de datos
Posted: Sat Oct 24, 2009 12:02 PM
Aquí en el primera imagen es como tiene que funcionar tanto si es un nuvo formulario o como una modificación del mismo Usando un array(aPod)
Y así también lo hace cuando es un formulario nuevo y usando la clase database



y así es como funciona cuando quiero modificar el formulario con la clase database

Continue the discussion