PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 25 → WX - Rotina de autonumeraçao e desabilitar botao apos salvar
WX - Rotina de autonumeraçao e desabilitar botao apos salvar
Iniciado por BOLLER ADRIANO, ago., 10 2016 11:54 PM - 2 respostas
Membro registado
3.659 mensagems
Popularité : +175 (223 votes)
Publicado em agosto, 10 2016 - 11:54 PM
Prezados,

Rotina de auto numeração e desabilitar botão após salvar

botão Salvar, após salvar o registro, insira o código para desabilitar o botão:

Código:
BTN_SALVAR..State = Grayed


E quando o conteúdo de algum campo for alterado, habilite novamente o botão de salvar:

Código Whenever Modified of EDT_NOME
BNT_SALVAR..State = Active





Para auto numeração, faça o seguinte:

//função para auto numerar
Procedure proximonumero()
HReadLast(nomedatabela,codigo)
RESULT= nomedatabela + 1


Pronto, cria essa função em local procedures e quando clicar no botão novo ou em algum outro evento que desejar, vc coloca assim:

nomedocampo..value = proximonumero()


:merci:

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membro registado
212 mensagems
Popularité : +25 (25 votes)
Publicado em agosto, 11 2016 - 2:09 AM
Uma dúvida Adriano,

fiz rotinas para controlar o sequencial das tabelas, só estou em dúvida onde colocar a rotina, se no botão Novo ou no botão Salvar?

No botão novo abriria o form com o próximo número, porém se cancelar e outro usuário estiver inserindo também ficaria falha no sequencial.

No botão Salvar abre o form sem o número e só gera a sequencia no momento de salvar, neste caso em um ambiente com muitos usuários não poderia gerar a mesma sequencia mais de uma vez?

--
André Martini
IS2 Automotive http://www.is2.inf.br/is2automotive/index.html
IS2 Construtive http://www.is2.inf.br/is2construtive/index.html
IS2 Store http://www.is2.inf.br/is2store/index.html
IS2 Gerent http://www.is2.inf.br/is2gerent/index.html
Membro registado
3.659 mensagems
Popularité : +175 (223 votes)
Publicado em agosto, 11 2016 - 1:23 PM
Prezado André,

Pensamos num ambiente bem hostil, concorrência de rede e dados de tabela sendo usado por um Callcenter e por um setor financeiro ao mesmo tempo e constantemente.

Nesse tipo de situação é no salvar que você deve colocar o id ao registro num processo atômico. Ao dar novo o campo chave deve estar em branco ou nem exibido na tela e somente após preencher tudo no botão salvar verificar o registro livre dar lock, gravar, deslock e fechar a tela.

Pensamos num outro tipo de documento com cabeçalho e itens, uma nota ou um pedido, numa situação que o usuário pode digitar um item ou milhares de itens.

Nessa situação é necessário fazer um check se digitou tudo ok e ainda tem a situação de queda de energia e abandono do seu local de trabalho para tomar um café, ida ao banheiro ou reunião urgente.

Quando o usuário voltar mesmo tendo abandonado a estação de trabalho e mesmo tendo ocorrido uma queda de energia, ao voltar deve partir do momento que parou, isso é assim no MS Office e nós como programadores devemos fazer. É isso que encanta o cliente, não perder trabalho e tempo usando o seu sistema, ele vai elogiar o teu trabalho.

Para atender essa situação, vc deve ter uma tabela de pré-pedido e pré-itens com uma coluna de validado/checado/processado. Deve gravar os itens numa tela e só depois de ter o seu código único garantido em rede e testado, você libera a digitação de cada item e salva. Nesse momento apenas faz checagens mas não ocorre movimentações de estoque, nem financeiro.

Assim você tem o cabeçalho gravado e os itens. Após validar toda a sua digitação nessa tela o usuário vai marcar [x] um ou vários pré-pedidos e executaria só então o processamento do pré-pedido para o pedido de forma atômica usando transaction com teste de cada select, insert, update e se um deles tiver algum retorno invalido ou alguma regra de negocio não atendida, no erro ROLLBACK e se tudo ok COMMIT, após deve por obrigação passar para o usuário em qual momento foi cancelado via mensagem, nessa ordem, pois se colocar a mensagem antes do ROLLBACK e do COMMIT ocorre o bloqueio da transação e o bloqueio de dados na rede.

Os comandos nesse processamento deve ter consultas instantâneas validadas e testadas na tabela real ou uso de views só com as colunas necessárias que transitaram na rede, sendo a view a sua grande aliada, pois num processamento transaction na rede, o fluxo de dados deve ser sempre analisado: Eu devo trazer todas as colunas e todas as linhas da tabela para o usuário agora? Essa é a pergunta mágica, tem como eu mandar só o que ele vai usar agora? Se sim View com where, se não Select normal com where.

Tudo ok, o seu pré-pedido "Aberto" muda para "Fechado" e esta criado o Pedido e itens validados no seu sistema com o seu código único.

Uma sugestão para evitar bloqueios no pré-pedido é usar 3 letras do usuário e um sequencial, exemplo: ADR-0000000010, faça testes em rede.

Se o contador for controlado no cadastro do usuário em um campo CONTADOR, jamais vai dar erro e nunca vai ter furo na sequencia.

Espero que tenha respondido a sua dúvida, Eu faria assim, tenho certeza nunca terei problemas usando o sequencial no cadastro do usuário.

Forte abraço e bons estudos meu amigo.

Precisando é só me chamar no SKYPE adrianoboller

:merci:

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/