Nesse vídeo demonstraremos como efetuar o controle de numerações de códigos no Protheus usando as funções GetSXENum (para buscar), ConfirmSX8 (para efetivar) e RollBackSX8 (para abortar).
Abaixo o código fonte desenvolvido para o exemplo em vídeo acima:
//Bibliotecas
#Include "TOTVS.ch"
/*/{Protheus.doc} User Function zExe088
Exemplo de como buscar um código sequencial de uma tabela, confirmar no banco ou estornar
@type Function
@author Atilio
@since 09/12/2022
@see https://tdn.totvs.com/pages/releaseview.action?pageId=23889183 , https://tdn.totvs.com/pages/releaseview.action?pageId=24346933 e https://tdn.totvs.com/pages/releaseview.action?pageId=24347062
@obs
Função GetSXENum
Parâmetros
+ cAlias , Caractere , Informa o alias da tabela
+ cCpoSx8 , Caractere , Informa o nome do campo que irá buscar o sequencial
+ cAliasSX8 , Caractere , Informa o alias caso não seja utilizado o nome padrão da tabela no sequenciamento (opcional)
+ nOrdem , Numérico , Informa o número do índice que será utilizado para verificar o sequenciamento da tabela (opcional)
Retorno
+ cRet , Caractere , Retorna o conteúdo sequencial encontrado
Função ConfirmSX8
Parâmetros
+ lPosConf , Lógico , Se passado .T. será validado se já existe o código gravado na tabela do Protheus
Retorno
Não possui
Função RollBackSX8
Parâmetros
Não possui
Retorno
Não possui
Atualmente as numerações ficam no License Server, antigamente eram as tabelas SXE e SXF (e mais antigamente a SX8)
Outro ponto importante, em documentações citam a ConfirmSXE e RollBackSXE, porém até o momento da montagem desse exemplo
essas das funções não veem nativas no RPO (se você der um inspetor de funções, ambas não serão encontradas), por esse motivo
utilizamos a ConfirmSX8 e RollBackSX8
**** Apoie nosso projeto, se inscreva em https://www.youtube.com/TerminalDeInformacao ****
/*/
User Function zExe088()
Local aArea := FWGetArea()
Local cCodigo := ''
//Iniciando o controle de transações
Begin Transaction
//Pegando o último pedido de venda disponível conforme a numeração automática
cCodigo := GetSXENum('SC5', 'C5_NUM')
//Perguntando se deseja confirmar esse código, para confirmar e atualizar as tabelas de numeração automática
If FWAlertYesNo("Deseja confirmar o código " + cCodigo + "?", "Confirma?")
ConfirmSX8()
//Senão, volta a numeração onde estava
Else
RollBackSX8()
EndIf
End Transaction
FWRestArea(aArea)
Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.