Criando Usuário Caixa direto pelo cadastro de usuários no Configurador

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:

  1. Via ChkExec é criado um atalho, o -F8- caso seja a rotina de Cadastro de Usuários
  2. 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:

Exemplo da customização

Exemplo da customização

 

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.

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