Problema: conforme o número de depósito, atualiza um saldo diferente, pode ser somar ou tirar, e precisa evitar erro de divisão por zero.
STATIC FUNCTION UpdateJPESTOQUE( nIdEstoque, nSomaTira )
LOCAL nSelect := Select(), cVarDep, cnSQL := ADOClass():New( AppConexao() )
WITH OBJECT cnSQL
:cSQL := "SELECT * FROM JPESTOQUE WHERE IDESTOQUE=" + NumberSQL( nIdEstoque )
:Execute()
Encontra( StrZero( :Number( "ESPRODUTO" ), 6 ), "jpitem", "item" )
SELECT jpitem
nSomaTira := iif( :String( "ESTIPLAN", 1 ) == "1", -nSomaTira, nSomaTira )
WITH OBJECT cnSQL
RecLock()
IF :String( "ESNUMDEP", 1 ) $ "23456789"
cVarDep := "jpitem->ieQtd" + :String( "ESNUMDEP", 1 )
REPLACE &( cVarDep ) WITH &( cVarDep ) + ( :Number( "ESQTDE" ) * nSomaTira )
:ExecuteCmd( "UPDATE JPITEM SET IEQTD" + :String( "ESNUMDEP", 1 ) + " = IEQTD" + ;
:String( "ESNUMDEP", 1 ) + " + " + NumberSQL( nSomaTira * :Number( "ESQTDE" ) ) + " WHERE IDPRODUTO = " + NumberSQL( :Number( "ESPRODUTO" ) ) )
ELSE
REPLACE jpitem->ieQtd1 WITH jpitem->ieQtd1 + ( :Number( "ESQTDE" ) * nSomaTira )
:ExecuteCmd( "UPDATE JPITEM SET IEQTD1 = IEQTD1 + " + NumberSQL( nSomaTira * :Number( "ESQTDE" ) ) + ;
" WHERE IDPRODUTO = " + NumberSQL( :Number( "ESPRODUTO" ) ) )
ENDIF
RecUnlock()
ENDWITH
:CloseRecordset()
ENDWITH
SELECT ( nSelect )
RETURN NIL
Tem como criar um comando pequeno? ou só indicando todos os depósitos?
UPDATE JPESTOQUE,JPITEM .....
UPDATE JPESTOQUE LEFT JOIN JPITEM .....
Essa parte ok, o problema é atualizar IEQTD1, IEQTD2.... IEQTD9.
TALVEZ... a melhor solução fosse criar uma tabela de saldos contendo numero e quantidade.... sei lá...
Por enquanto pensando na mesma estrutura atual.