Bloqueio, gravação e concorrência de registros
Verifica o lock antes de atribuir campos e distingue desbloqueio de transação.
Visão geral
RecLock(cAlias,.F.) tenta bloquear o registro posicionado para alteração; .T. inicia inclusão. Só atribua campos após retorno verdadeiro. O alias não pode ser query nem somente leitura. MsUnlock encerra a operação sobre o registro no alias corrente; dentro de transação explícita o lock físico pode permanecer até o final, embora MsUnlock continue necessário. Não tratar desbloqueio como confirmação de toda uma operação de negócio. O fragmento exige tabela própria ZZ1, campo Z1_DESC e registro previamente localizado em homologação. Não é exemplo de manutenção direta de tabela padrão. (TOTVS, s.d., refs. 1–2)
Retorno
Não há retorno único: trata-se de um roteiro composto.
Exemplo comentado
// Fragmento: ZZ1 aberta, gravavel, com Z1_DESC e registro de teste posicionado.
If !ZZ1->(Eof())
If RecLock("ZZ1", .F.)
// Regra e valor ficticios, apenas para tabela propria.
ZZ1->Z1_DESC := "TESTE EDITORIAL"
ZZ1->(MsUnlock())
Else
ConOut("Registro indisponivel; nenhuma atribuicao.")
EndIf
EndIfCom lock obtido, propõe atualizar Z1_DESC na tabela fictícia; na falha, não atribui. O fragmento não implementa a recuperação completa de erros. Em revisão: exemplo editorial não compilado nem executado em Protheus. Conferir includes, release, RDD e contexto antes de homologar.
- Reler e validar critérios sob o lock, manter trecho curto e tratar erros para encerrar a operação. Não incluir diálogos nem tentativas infinitas; testar concorrência com duas sessões e a transação externa.
- Em revisão: exemplo editorial não compilado nem executado em Protheus. Conferir includes, release, RDD e contexto antes de homologar.

Comentários
Ainda não há comentários aprovados.
Entre com Google ou Microsoft para comentar.