Inserir dados de um campo ADDCALC NO BANCO

Bom dia pessoal, fiz uma rotina utilizando o ADDCALC, para mostrar a soma dos valores que são inseridos no campo ZN_PESNF(PESO NF, este campo está na grid) que estão na minha grid, ou seja cada nova linha da grid que vai sendo incluída, o total é atualizado.

Só que estou em um grande dilema. Eu não sei como pegar esse valor que esta no campo XX_TOTAL (OBS: não tenho nenhuma tabela no banco referente a este campo) e fazer tipo um gatilho para alimentar o campo ZM_PESTOT (PESO TOTAL, esse campo esta no cabeçalho).

Estou fazendo dessa forma abaixo

//Adicionando totalizadores oModel:AddCalc('TOT_SALDO', 'SZMMASTER', 'SZNDETAIL', 'ZN_PESNF', 'XX_TOTAL', 'SUM', , , "Peso Total:" ) Return oModel

Em anexo, está o print da tela.

:warning: Atenção: Esta publicação foi transferida automaticamente do fórum antigo, mas os anexos não foram incluídos.

Arthur, boa tarde! Já tentou usando a função FWCalcStruct ?

Segue documentação e exemplo: https://tdn.totvs.com/display/framework/FWCalcStruct

Opa, boa tarde Raphael, estou usando essa função e funcionou de boa. Porém não estou conseguindo pegar o valor do campo virtual criado e alimentar em outro campo, tipo um gatilho.

Boa tarde, Arthur!

Tente fazer da seguinte maneira:


nTotal := oModel:GetModel('TOT_SALDO'):GetValue('XX_TOTAL')

Você pode tentar fazer essa modificação no LinhaOk do seu programa, sendo assim, a cada linha nova o seu campo do cabeçalho será atualizado, por exemplo:


Static Function fLineOk
Local nTotal    := 0
Local oModel    := FwModelActive()

    nTotal := oModel:GetModel('TOT_SALDO'):GetValue('XX_TOTAL')

    oModel:SetValue('ZNMASTER', 'ZN_PESNF', nTotal)

Return(.T.)

Faça um teste e verifique se lhe atende.

Bom dia pessoal
Fiz o processo mas não deu certo.

bom dia, fiz o teste mas não grava no banco de dados no campo Z09_TOTAL

oModel:AddCalc("COMP022CALC1", "Z09MASTER", "Z10DETAIL", "Z10_VALOR", "Z09_TOTAL", "SUM", , , "Total:" )

Return oModel

Static Function fLineOk() Local nTotal := 0 Local oModel := FwModelActive()

nTotal := oModel:GetModel("COMP022CALC1"):GetValue("Z09_TOTAL")

oModel:SetValue("Z09MASTER", "Z10_VALOR", nTotal)

Return (.T.)