Estoy migrando de dbf a sql y hasta ahora voy avanzando pero ahora tengo que mostrar el stock de artículos, mi tabla de artículos esta diseñada
asi:
[img]
[/img]
la tabla detguiat es una tabla transaccional que contiene los movimientos y esta relacionada con la tabla artículos para mostrar el stock:
- Code: Select all Expand view
select detguiat
SET RELATION TO detguiat->articu INTO articulo additive
REDEFINE XBROWSE oBrwDet ;
DATASOURCE detguiat ;
COLUMNS "articu", "Articulo->DesG","Articulo->UM","Articulo->Cap","Cantid" ;
,"salant('articulo')+ingmes('articulo')-salmes('articulo')-cantid" ;
,"PRECIO" ;
FIELDSIZES 65,195,30,30,40,80,40 ;
HEADERS "CODIGO" ;
,"DESCRIPCIÓN" ;
,"U.M." ;
,"CAP" ;
,"CANT." ;
,"STOCK" ;
,"PRECIO"
y estas son las definiciones de las funciones que invoco en la definición del xbrowse
- Code: Select all Expand view
FUNCTION INGANO(cAlias, nMes) // devuelve la suma todo los ingresos hasta el mes que le indique en el parametro
MEMVAR mMes
LOCAL nSuma := 0, i
LOCAL cMes
DEFAULT nMes := mMes
nMes -= 1
FOR i = 0 to nMes
cMes := 'CONING'+STRZERO(i,2)
nSuma += (cAlias)->&cMes
NEXT
Return(nSuma)
/* --------------------------------------------------------- */
FUNCTION SALANO(cAlias, nMes) //devuelve la suma de todas las salidas hasta el mes que le indique en el parametro
MEMVAR mMes
LOCAL nSuma := 0, i
LOCAL cMes
DEFAULT nMes := mMes
nMes -= 1
FOR i = 0 to nMes
cMes := 'CONSAL'+StrZero(i,2)
nSuma += (cAlias)->&cMes
NEXT
RETURN(nSuma)
/* --------------------------------------------------------- */
FUNCTION INGMES(cAlias, nMes) //devuelve los ingresos de un mes
MEMVAR mMes
LOCAL cMes, nIng
DEFAULT nMes := mMes
cMes := 'CONING'+ STRZERO(nMes,2)
nIng := (cAlias)->&cMes
RETURN( nIng )
/* --------------------------------------------------------- */
FUNCTION SALMES(cAlias, nMes) //devuelve las salidas de un mes
MEMVAR mMes
LOCAL cMes, nSal
DEFAULT nMes := mMes
cMes := 'CONSAL' + STRZERO(nMes,2)
nSal := (cAlias)->&cMes
RETURN( nSal )
/* --------------------------------------------------------- */
FUNCTION SALANT(cAlias, nMes) //devuelve las salidas de un mes
MEMVAR mMes
LOCAL cMes, nIng, nSal
DEFAULT nMes := mMes
nIng :=INGANO(cAlias,nMes)
nSal :=SALANO(cAlias,nMes)
RETURN ( nIng - nSal )
La pregunta del TRILLON como hacer esto mismo con sentencias sql? que me recomiendan usar VISTAS? No he usado vistas, tendrán un ejemplo
- Code: Select all Expand view
cSql:="SELECT d.cod, a.descripcion, a.um, a.cap, d.cantid, [FUNCION DE USUARIO QUE CALCULE STOCK], a.precio from #ppru as d left join articulo as a on d.cod=a.cod "