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.