Page 1 of 1

Reitero consulta para actualizar un campo con XBrowse

PostPosted: Sat Feb 11, 2023 3:18 pm
by José Camilo
Buenos dias.
reitero esta consulta, tratando de expresarme mejor.

Tengo una DBF que muestro con Xbrowse.
tengo un campo "costo" otro campo "Pedir" y otro campo "total"
Modifico el campo "Pedir" editando la celda y lo modifica bien y actualiza el xBrowse.
Necesito modificar el campo "Total" con la multiplicacion de PEDIR*COSTO y no logro (no se como) hacerlo.
asi intento e incluso hice una funcion aparte y no lo consigo.

Se Puede realizar?
Si alguien me orienta lo agradecere.


oBrw:aCols[ 7 ]:nEditType := EDIT_GET
oBrw:aCols[ 7 ]:bEditValid := {|| if(1=1,(_ArtFor->Total := _ArtFor->Pedir*_ArtFor->Costo_ArtFor->(Eof()),msginfo('jjjj'),refXbrw(_ArtFor->(Recno()))_ArtFor->(Eof()),.t.),.f.) }
oBrw:aCols[ 7 ]:lAutoSave := .T.

oBrw:aCols[ 8 ]:nFooterType:= AGGR_TOTAL


oBrw:MakeTotals()




*----------------
//-------------------------------------------------------------------------------------------------------------------------------------------------------------//
function RefXBrw(regi)
select _ArtFor
_ArtFor->(DbGoTop())
While !_ArtFor->(Eof())
_ArtFor->Total := _ArtFor->Costo*_ArtFor->Pedir
_ArtFor->(DbSkip())
end
_ArtFor->(DbGoTo(regi))
return NIL
//-------------------------------------------------------------------------------------------------------------------------------------------------------------//

Gracias-

Re: Reitero consulta para actualizar un campo con XBrowse

PostPosted: Sun Feb 12, 2023 3:39 am
by cnavarro
Cambia el bEditValid por bEditValue

Re: Reitero consulta para actualizar un campo con XBrowse

PostPosted: Sun Feb 12, 2023 4:38 pm
by José Camilo
Cristobal.
Disculpa mi bruteza pero cambiando lo que indicas me muestra un numero que no se de donde sale.
lo estare aplicando mal.

esta es la funcion completa. necesito poder editar los valores de la columna PEDIR y al hacerlo en la columna TOTAL se muestre el resultado
de multiplicar PEDIR*COSTO y se muestre la suma de de la columna TOTAL al pie.

hasta aca puedo editar el campo PEDIR y se actualiza el mismo, el resto no lo logro realizar.

Si puedes darle una ojeada te agradezco. Seguro es algo muy simple que no se hacer.

//------------------------------------------------------------------------------------------------------------------------------------------------------------*/
function AbmOC()
local napu
local aBotones := {}

local oDlg, oBrw, cAlias := cGetNewAlias( "_ARTFOR" )
local oBr, oFont
local titgral := 'Stock'
local atitcol := ''
local acampos := {}
local lcampos

Private oBar

acampos := {|| {str(ArtFor->Articulo,4)+' '+ArtFor->Detalle+' '+ArtFor->Abrevia } }
lcampos := {|| str(ArtFor->Articulo,4)+' '+ArtFor->Detalle+' '+ArtFor->Abrevia }
atitcol := "Cód. Detalle Abrevia"

aBotones := { {"Impre1.bmp" ,"Edito" , "Edito" , {||/*EditCS(_ArtFor->Pedir),*/oBrw:MakeTotals(),oBrw:SetFocus(),oBrw:Refresh() },VK_RETURN,"<RETURN>",.f.},;
{"Impre1.bmp" ,"Imprime OC" , "Imprime OC " , {|| lstOC(),oBrw:SetFocus(),oBrw:Refresh() },VK_R ,"<V>" ,.t.},;
{"Exit.bmp" ,"Sale de Browse" , "Salir" , {|| oDlg:end() },VK_ESCAPE,"<Escape>",.t.} ;
}


SET DATE ITALIAN
SET CENTURY ON
XBrNumFormat( 'E', .t. )
SetBalloon( .t. )

dbcloseall()

use colorfw new
use tecnico new
use corregir index corregi1 new
use acciones index accione1 new
use RamFor index RamFor1, RamFor2 new
use RubFor index RubFor1, RubFor2 new
use ProvFor index ProvFor1, ProvFor2 new
use ArtFor index ArtFor1, ArtFor2, ArtFor3, ArtFor4, ArtFor5 new
use _ArtFor index _ArtFor1, _ArtFor2 new
zap
select ArtFor
ArtFor->(DbGoTop())
While !ArtFor->(Eof())
select _ArtFor
_ArtFor->(DbAppend())
_ArtFor->Articulo := ArtFor->Articulo
_ArtFor->Detalle := ArtFor->Detalle
_ArtFor->Abrevia := ArtFor->Abrevia
_ArtFor->Costo := ArtFor->Costo
_ArtFor->StockMin := ArtFor->StockMin
_ArtFor->StockAct := ArtFor->StockAct
_ArtFor->Pedir := ArtFor->StockMin-ArtFor->StockAct
_ArtFor->Total := _ArtFor->Pedir*_ArtFor->Costo
select ArtFor
ArtFor->(DbSkip())
end
select _ArtFor
_ArtFor->(DbGoTop())



DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-15
DEFINE BRUSH oBr RESOURCE "beige2"

DEFINE DIALOG oDlg FROM 1, 30 TO 650, 1050 FONT oFont TITLE 'Generador de Orden de Compra' PIXEL

@ 4,5 XBROWSE oBrw ;
COLUMNS "Articulo", "left(Detalle,35)", "Abrevia", "Costo", "StockAct", "StockMin", "Pedir","Total" ;
HEADERS "Cód.", "Detalle", "Abr.", "Costo", "Stock Act", "Stock Min", "Pedir","Total";
COLSIZES -10,150,-10,-10,-10,-10,-10,-10 OF oDlg ;
SIZE 500,283 PIXEL ;
JUSTIFY .T.,.f.,.f.,.t.,.t.,.t.,.t.,.t. ;
ALIAS cAlias AUTOSORT FOOTERS LINES CELL NOBORDER ;
BACKGROUND aGrad VERTICAL

oBrw:nStretchCol := 2
oBrw:nRowHeight := 30
oBrw:nMarqueeStyle := 4
// anulo el doble color d los registros
oBrw:lContrastClr := .f.

// quitar barra horizontal
oBrw:lHScroll := .f.

oBrw:bKeyDown:={|nKey,nFlag|iif(veo(@nApu,@oBrw,aBotones,nKey),eval(aBotones[nApu,4]),NIL)}


oBrw:aCols[ 7 ]:nEditType := EDIT_GET
oBrw:aCols[ 7 ]:bEditValid := {|| if(1=1,(_ArtFor->Total := _ArtFor->Pedir*_ArtFor->Costo,msginfo('jjjj'),refXbrw(_ArtFor->(Recno())),_ArtFor->(Eof()),.t.),.f.) }
oBrw:aCols[ 7 ]:lAutoSave := .T.

oBrw:aCols[ 8 ]:nFooterType:= AGGR_TOTAL


oBrw:MakeTotals()
oBrw:CreateFromCode()
cGrad := PadR( GradStr( BrwGrad( oBrw ) ), 128 )
ACTIVATE DIALOG oDlg CENTERED on INIT (BtnBarNew( oBrw, @oDlg, aBotones))


RELEASE BRUSH oBr
RELEASE FONT oFont

dbcloseall()
return nil
//-------------------------------------------------------------------------------------------------------------------------------------------------------------//

//-------------------------------------------------------------------------------------------------------------------------------------------------------------//
function RefXBrw(regi)
select _ArtFor
_ArtFor->(DbGoTop())
While !_ArtFor->(Eof())
_ArtFor->Total := _ArtFor->Costo*_ArtFor->Pedir
_ArtFor->(DbSkip())
end
_ArtFor->(DbGoTo(regi))
return NIL
//-------------------------------------------------------------------------------------------------------------------------------------------------------------//

Re: Reitero consulta para actualizar un campo con XBrowse

PostPosted: Sun Feb 12, 2023 11:38 pm
by cnavarro
A los objetos columnas los puedes referenciar por su header o por su posicion en el browse
Code: Select all  Expand view

    oBrw:oCol( "Total" ):bEditValue   := { || oBrw:oCol( "Pedir" ):Value * oBrw:oCol( "Costo" ):Value }
    oBrw:oCol( "Pedir" ):nEditType    := 1
 


que es lo mismo que

Code: Select all  Expand view

    oBrw:oCol( 8 ):bEditValue   := { || oBrw:oCol( 7 ):Value * oBrw:oCol( 4 ):Value }
    oBrw:oCol( 7 ):nEditType    := 1
 

Re: Reitero consulta para actualizar un campo con XBrowse

PostPosted: Mon Feb 13, 2023 1:03 am
by FranciscoA
Saludos, Cristóbal.

Camilo:
Code: Select all  Expand view
Aqui está otro ejemplo parcial de como hacerlo:
function XBrwFactuDBF()
   local oDlg, oBrw, cAlias

   DbCreate("Tempo",{ {"Codigo"   , "N",  4,0 } ,;
                      {"Descrip"  , "C", 15,0 } ,;
                      {"Cantidad" , "N", 10,0 } ,;
                      {"Precio"  , "N", 10,2 } ,;
                      {"ValorTot" , "N", 10,2 } })

   dbUseArea(.t.,,"Tempo","Tempo",.f.)

   DbSelectArea("Tempo")
   DbAppend()

   cAlias := Alias()

   DEFINE DIALOG oDlg SIZE 800,450 PIXEL TITLE "INVOICE"

   @ 10,10 XBROWSE oBrw SIZE -10,-10 PIXEL OF oDlg ;
           DATASOURCE cAlias ;
           COLUMNS "CODIGO", "DESCRIP", "CANTIDAD", "PRECIO", "VALORTOT" ;
           HEADERS "CODIGO", "DESCRIP", "CANTIDAD", "PRECIO", "VALORTOT" ;
           PICTURES "9999", nil, "9,999", "9,999,99, 999,999.99" ;
           CELL LINES FOOTERS NOBORDER FASTEDIT

   oBrw:nEditTypes := { EDIT_GET, EDIT_NONE, EDIT_GET, EDIT_GET, EDIT_NONE, EDIT_NONE, EDIT_NONE }

   WITH OBJECT oBrw:Codigo
      :bEditValid     := { |oGet| oGet:VarGet() > 0 }
      :bOnChange      := { |oCol| oBrw:Descrip:Value := "Codigo " + Str(oBrw:Codigo:Value,4) }
   END

   WITH OBJECT oBrw:Cantidad
      :bEditWhen      := { || ! Empty( oBrw:Codigo:Value ) }
      :bOnChange      := { || oBrw:MakeTotals(), oBrw:RefreshFooters() }
      :bEditValid     := { |oGet| oGet:VarGet() > 0 }
   END

   WITH OBJECT oBrw:Precio
      :bEditWhen      := { || ! Empty( oBrw:Codigo:Value ) .and. ! Empty( oBrw:Cantidad:Value ) }
      :bOnChange      := { || oBrw:MakeTotals(), oBrw:RefreshFooters() }
      :bEditValid     := { |oGet| oGet:VarGet() > 0 }
   END

   WITH OBJECT oBrw:ValorTot
      :bEditValue     := { || oBrw:Cantidad:Value * oBrw:Precio:Value }
      :cEditPicture   := "999,999,999.99"
      :nFooterType    := AGGR_SUM
   END

   oBrw:bPastEof      := { || If( Empty( oBrw:ValorTot:Value ), nil, ;
                                  ( (cAlias)->(DbAppend()),;
                                    oBrw:GoDown(),;
                                    oBrw:GoLeftMost(),;
                                    oBrw:Refresh() ) ) ;
                         }

   oBrw:nHeadStrAligns := AL_CENTER

   oBrw:CreateFromCode()

   ACTIVATE DIALOG oDlg CENTERED ;
            ON INIT ( oBrw:SetFocus() )

   Tempo->(DbCloseArea())
   Ferase("Tempo.dbf")
return nil
 

Re: Reitero consulta para actualizar un campo con XBrowse

PostPosted: Mon Feb 13, 2023 1:24 am
by José Camilo
Muchas gracias Cristobal y Francisco por su tiempo. Lo pruebo y comento. GRACIAS!!!

Re: Reitero consulta para actualizar un campo con XBrowse

PostPosted: Mon Feb 13, 2023 12:39 pm
by José Camilo
Cristobal y Francisco.

Perfecto. GRACIAS!!!!

José Camilo