Carga de datos

Carga de datos

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


////
  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: Select all  Expand view


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
surGom
 
Posts: 640
Joined: Wed Oct 19, 2005 12:03 pm

Re: Carga de datos

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

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
 
surGom
 
Posts: 640
Joined: Wed Oct 19, 2005 12:03 pm

Re: Carga de datos

Postby surGom » 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

Image

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

Image
surGom
 
Posts: 640
Joined: Wed Oct 19, 2005 12:03 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 34 guests