Gravando campos customizados na SC9 através do M440SC9I | Ti Responde 0088

No vídeo de hoje, vamos demonstrar em como gravar campos customizados logo ao ser criado um registro na SC9.

A dúvida de hoje, nos perguntaram, se seria possível gravar campos customizados na SC9 assim quando ela é criada, por exemplo, para identificar a origem de qual rotina que gerou ela.

 

Pensando nisso, montamos esse exemplo, onde demonstramos em como usar o ponto de entrada M440SC9I, assim gravando logs na inclusão da SC9 e até mesmo com a possibilidade de alterar campos durante a transação.

 

Segue abaixo o vídeo exemplificando:

 

E abaixo o código fonte desenvolvido:

//Bibliotecas
#Include "TOTVS.ch"

/*/{Protheus.doc} User Function M440SC9I
Ponto de Entrada logo após a inclusão da SC9
@type  Function
@author Atilio
@since 26/01/2024
@obs Essa rotina esta durante o RecLock da SC9, NÃO DESPOSICIONAR a tabela

    Para esse exemplo, foi usado o campo customizado C9_X_ORIG
    Que irá gravar o nome da função de origem
    Crie esse campo na sua base como Caractere tamanho 10 no contexto Real
/*/

User Function M440SC9I()
    Local aArea := FWGetArea()

    //Aciona a gravação de campos customizados
    u_zVid0088()

    FWRestArea(aArea)
Return

/*/{Protheus.doc} zVid0088
Função para gravar campos customizados na SC9
@type user function
@author Atilio
@since 26/01/2024
/*/

User Function zVid0088()
    Local aArea      := FWGetArea()
    Local cTextoOrig := ""

    //Se vier da função de Pedido de Vendas
    If Alltrim(FunName()) == "MATA410"
        //Se for da rotina de Cópia
        If FWIsInCallStack("a410PCopia")
            cTextoOrig := "CPY"

        //Se estiver em Alteração
        ElseIf ALTERA
            cTextoOrig := "ALT"

        //Senão será Inclusão
        Else
            cTextoOrig := "INC"
        EndIf

        //Atualiza a origem com o texto do Pedido de Venda e qual foi a origem
        SC9->C9_X_ORIG := "PEDVEN_" + cTextoOrig

    //Senão, se veio de outra função que gerou a SC9, grava o FunName
    Else
        SC9->C9_X_ORIG := FunName()
    EndIf

    //Grava o código do usuário
    SC9->C9_X_USER := RetCodUsr()

    //Se você quiser gravar outros campos, basta fazer conforme a sintaxe abaixo (lembre-se de sempre conferir a integridade dos dados antes): 
    /*
    SC9->C9_BLCRED := "01"
    */

    FWRestArea(aArea)
Return

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação