Inicializador padrão com SOMA1

Olá Rafael, eu peguei esse mesmo tipo de situação e resolvi pelo valida do campo na ViewDef, da uma olhada com fiz e veja se te ajuda.

Simples mas resolveu, se te ajudar marca como resposta, vlw.


Local bVldDoc        := {|| u_e42VDoc()}

oView:SetFieldAction( 'ZA5_NUM', bVldDoc)



/*/{Protheus.doc} User Function e42VldDoc
    (Fonte responsável por validar a sequencia da contagem pelo numero do documento)
    @type  Function
    @author Leandro Lemos
    @since 15/03/2021
    @version P12
    @param param_name, param_type, param_descr
    @return return_var, return_type, return_description
    @example
    (examples)
    @see (links_or_references)
    /*/
User Function e42VDoc()
    Local aArea         := GetArea()
    Local oModelPad     := FWModelActive()
    Local oModel        := oModelPad:GetModel('ZA5MASTER')
    Local lOk           := .T.
    Local oView         := FWViewActive() //Objeto da View, adicionado para dar refresh após adicioar uma nova linha
    Local cSequencia    := '001'

    //Só processa na inclusão
    IF oModel:GetOperation() == MODEL_OPERATION_INSERT

        DbSelectArea('ZA5')
        DbSetOrder(1)
        IF (DbSeek(xFilial('ZA5')+oModel:GetValue('ZA5_NUM')))
            While ZA5->(!EOF() .and. ZA5_NUM == oModel:GetValue('ZA5_NUM'))
                cSequencia := Soma1(cSequencia)
                ZA5->(DBSkip())
            EndDo
        EndIF

        //Setando a sequencia
        oModel:SetValue('ZA5_SEQUEN',cSequencia)

        //Atualizando a View
        oView:Refresh('VIEW_ZA5')

    EndIF

    RestArea(aArea)

Return lOk