No artigo de hoje vamos ver em como criar um Usuário Caixa direto pelo cadastro de usuários no Configurador.
Esse conteúdo foi gentilmente disponibilizado por Renan Martins, LinkedIn: https://www.linkedin.com/in/renan-martins-9b00ab15b/
Imagina que uma empresa tem muitos usuários para cadastrar na SLF, de Usuário Caixa no SIGALOJA.
E se existisse uma forma automatizada de fazer isso, direto via Configurador.
Pensando nisso, o Renan montou a customização que funciona assim:
- Via ChkExec é criado um atalho, o -F8- caso seja a rotina de Cadastro de Usuários
- Nisso se o usuário apertar essa tecla no browse, é feito a inserção do usuário caixa e já chamado o Wizard para prosseguir
Abaixo um gif de exemplo do funcionamento:
E abaixo o código fonte disponibilizado pelo Renan:
//Bibliotecas
#Include "TOTVS.ch"
#Include "TopConn.ch"
/*/{Protheus.doc} User Function ChkExec
Ponto de Entrada acionado ao clicar em alguma opção no menu
@type Function
@author rmartins
@since 02/01/2026
@see https://tdn.totvs.com/display/public/framework/CHKEXEC+-+Dispara+ponto+de+entrada
/*/
User Function ChkExec()
Local lContinua := .T.
Local cFuncao := Upper(ParamIXB)
//Se for a função de manutenção do profile
If ("APUSR30" $ cFuncao)
SetKey(VK_F8, {|| u_criaCX() })
EndIf
Return lContinua
User Function criaCX()
Local aArea := FWGetArea()
criaUsrCx(USR_CODIGO)
FWRestArea(aArea)
Return
Static Function criaUsrCx(cCodigo)
Local lWizard := .T.
Local cCodUser := "C01"
Local cQuery := "
//Busca o último usuário na SLF
cQuery := " SELECT MAX(LF_COD) AS LF_COD FROM " + RetSqLName("SLF")
cQuery += " WHERE D_E_L_E_T_ = ' '
TcQuery cQuery new Alias "QSLF"
//Se houver dados, pega o último e incrementa 1
If ! QSLF->(EoF())
cCodUser := Soma1(QSLF->LF_COD)
Endif
QSLF->(DbCloseArea()
//Se o usuário confirmar a pergunta
If FWAlertYesNo("Deseja Criar o usuário caixa/vendas para o usuário " + cValtoChar(cCodigo) + "codigo " + cCodUser, "Continua?)
//Vai prosseguir se não existir no cadastro de bancos
DbSelectArea("SA6")
SA6->(DbSetOrder(1)) // A6_FILIAL + A6_COD + A6_AGENCIA + A6_NUMCON
If ! SA6->(DbSeek(FWxFilial("SA6") + cCodUser))
//Grava no Perfil / Acesso Caixa
Reclock("SLF", .T.)
REPLACE LF_COD WITH cCodUser
REPLACE LF_ACESSO WITH "SNNNNSSSS S S SS S SSS S S S S S SSSS"
REPLACE LF_FILIAL WITH xFilial("SLF")
REPLACE LF_MULTIMI WITH 'N'
REPLACE LF_DESCPER WITH 5
REPLACE LF_DESCVAL WITH 999999.9999
REPLACE LF_LOGERRO WITH 'NNNNN'
REPLACE LF_FRTAUTO WITH 'N'
REPLACE LF_TPVAL WITH '1'
REPLACE LF_OPCDESC WITH 2
REPLACE LF_TOTDESP WITH 99.99
REPLACE LF_TOTDESV WITH 999999.9999
SLF->(MsUnlock())
//Grava no Banco
RecLock("SA6", .T.)
REPLACE A6_FILIAL WITH FWxFilial("SA6")
REPLACE A6_COD WITH cCodUser
REPLACE A6_AGENCIA WITH '.'
REPLACE A6_NUMCON WITH '.'
REPLACE A6_NOME WITH cCodigo
REPLACE A6_NREDUZ WITH cCodigo
REPLACE A6_MOEDA WITH 1
SA6->(MsUnlock())
//Grava na tabela genérica o vínculo
RecLock("SX5", .T.)
REPLACE X5_TABELA WITH '23'
REPLACE X5_CHAVE WITH cCodUser
REPLACE X5_DESCRI WITH cCodigo
REPLACE X5_DESCSPA WITH cCodigo
REPLACE X5_DESCENG WITH cCodigo
MsUnlock()
EndIf
//Aciona o Wizard para continuar o cadastro
a120CFG(lWizard, cCodUser)
EndIf
Return
Bom pessoal, por hoje é só.
Abraços a até a próxima.
