Como melhorar o Mestre-Detalhe? Postem suas experiências

Olá Pessoal,

Gostaria de devagar um pouco sobre a aplicação mestre detalhe, que acredito ser uma das ferramentas mais usadas em aplicativos comerciais.

Certamente atende necessidades básicas ou pelo menos atendia.

Gostaria de expor minhas experiências e saber de vocês como utilizam essa ferramenta , se acham que deveria melhorar, e certamente será algo que a NetMake pode em poucos passos melhorar com novas atualizações.

Ontem apresentando a aplicação ao cliente ele simplesmente me disse assim:

Cliente: Isso não é intuitivo como você acha que eu vou esperar ter de cadastrar todo o pedido depois salvar e depois saber que devo incluir os itens, porque eu não posso ir cadastrando e salvar tudo no final?

Minha resposta ao Cliente: Essa é uma forma padrão mas posso implementar dessa forma.

Solução:
Criar na session os itens assim como são feitos nos carrinhos de compras, assim é possível salvar no final, porém é algo na unha não existe nada nativo no scriptcase.

Cliente: Fábio você acha que os usuários vão colocar todos os dados dos itens e depois lembra de clicar pra INSERIR a linha como você explicou , não tem como colocar o botão do lado direito que seria mais intuitivo?

Minha resposta ao Cliente: Infelizmente não, é padrão do sistema.

Solução:
Tentar fazer é que no último campo da linha ele insira automaticamente, o valor assim que sair do campo ou dar enter.

Cliente: Eu preciso sempre clicar no “novo” para mostra essa linha, não tem como já abrir a tela com essa linha aberta caso não tenha nada cadastrado?

Minha resposta ao Cliente: Acho que posso tentar.

Solução: Tentei colocar a aplicação para abrir em NEW mas não deu certo acredito que por ser DETALHE ela não obedece a macro.

Conclusão o cliente não gostou de forma alguma, achou nada prático tão pouco intuitivo, sei que cliente as vezes viaja, mas os gostaria de saber as experiências que tiveram com esse tipo de aplicação , se concordam ou não com oque foi reportado, como contornaram.

Enfim acho que se todos argumentarem esse tópico pode até mudar algo para próximas alterações quem sabe o detalhe vir em DIV ao invés de iframe que dá um pouco de dor de cabeça.

Obrigado a Todos.

Fazer na mão, não usar o esquema do SC.

Sem Iframe.

Quando preciso de mestre detalhe com muitos itens, eu faço na mão.

É complicado, eu particularmente uso o cadastro do cliente como entrada dos pedido, ou seja se o cliente não estiver cadastrado não é possível iniciar um pedido, sem cadastro no máximo inicia-se um orçamento que pode ser convertido em pedido, mas nesse caso obrigatoriamente deve-se vincular o pedido a um cliente, dentro do cadastro do cliente eu coloco um botão php “novo pedido” esse botão cria um registro dentro da tabela pedidos e redireciona pra aplicação de pedido levando como parâmetro o ultimo ID inserido na tabela pedidos, essa solução funciona bem se usado o controle de transações pois garantirá que o id recuperado pela função (no caso de mysql) mysql_insert_id() seja o correto, a aplicação de pedido ao abrir já traz os dados do cliente e os detalhes já abertos, outra coisa, sempre uso pra esquema de pedidos o form múltiplos registros por entender que ele é mais intuitivo, insere uma quantidade de itens de uma só vez, aí é questão de ter uma média do cliente de quantos itens cada pedido tem normalmente.

Pessoal,

Concordo integralmente com tudo que o Fábio disse na mensagem dele. O Mestre-Detalhe é muito fraco e realmente é bem confuso e algumas vezes você fica com um registro no Mestre sem os detalhes. No meu virou uma grande porcaria.

Na minha opinião a ideia do Saulo é bem interessante e eu estava pensando justamente em algo assim, mas não tinha pensado em colocar o botão “Novo Pedido” no cadastro do cliente.

Eu estou com um problema destes para ser resolvido agora, eu estava pensando em colocar no grid de pedido ou um item do Menu o “Novo pedido” e ele já criar o registro no Mestre e assim já poder ter o detalhe aberto, faltando inserir os itens. Como tem que ser amarrado a um cliente também, coloquei uma ligação no campo do nome para abrir um modal e o usuário inserir um novo cliente, caso ele não exista, o problema é que isto está apenas na ideia ainda e não comecei a mexer e nem vi como poderei fazer.

Saulo, você pode passar as coordenadas de como criar este novo registro no Mestre e também como controlar a transação para não dar nenhum problema?

Preciso saber também como já deixar aberto o grid para os itens no Detalhe.

E realmente gostaria muito que isto fosse feito de uma forma mais profissional e bem acabada, pois da forma que está ela é muito pobre e pouco funcional para o cliente.

[]'s

Olá Pessoal,

Muito Bom os comentários,

Eu particularmente uso muito Mestre/detalhe bastante mesmo.

Porém comecei a perceber de uns tempos pra cá que não tem mais como mostrar ele pra cliente, o pessoal toda vez na hora de explicar sempre a mesma coisa.

Não tem como salvar direto ??! tenho de clicar pra inserir ??! Mas do lado esquerdo.???

Uma vez um cliente me disse assim:

Você Lê da direita pra esquerda? Escreve da direita pra esquerda? Como vou saber que no final de 10 campos preenchidos tenho que voltar e clicar inserir!!!

Ele tá certo ou eu que estou errado? rs…

Outra coisa que acontece muito:

Após inserir os itens o cliente clica no BOTÂO ATUALIZAR da aplicação mestre, pronto dai da uma zica laskada , e o cara se perde , e diz assim: Mas depois que insere não precisa atualizar!!!?

Quanto mais exemplos melhor,

Eu acho que a Netmake deveria pensar nisso esse mestre / detalhe nunca evoluiu corrijam-me se estiver errado.

Grande Abraço a Todos.

Fábio,

Eu já usei o Scriptcase deste a versão 4, em 2008, e sempre foi a mesma coisa. Isto não evoluiu nem um pouco.

O uso de Mestre Detalhe é um dos mais importantes em uma aplicação. Dificilmente você deixará de utilizar.

Isto seria uma boa modificação na nova versão 8, mas pelo que vi até agora, vai continuar da mesma forma.

Se pudéssemos fazer da forma que mostrei abaixo já seria uma boa solução, mas não sei como fazer e os mais evoluídos na ferramenta e programação poderiam dar uma ajuda para resolvermos isto.

Abraços a todos.

Não uso Mestre / Detalhe do SC. Faço tudo no braço. Há casos como o de pedidos que crio uma trigger onde ao criar o pedido no mestre o detalhe ja aparece esperando os produtos. É bem parecido com a função mysql que o Saulo explicou.

Talvez eu esteja errado , mas não considero ser algo tão difícil assim da NETMAKE melhorar isso, só acredito que ninguém reclamou tanto dele, e cada um conseguiu uma forma de fazer no braço!.

Assim como já fiz, mas confesso que perco ou seja invisto uma boa parcela de tempo quando vou fazer aplicações mestre/detalhe.

Quando um cliente me pediu assim:

Quero colocar todos os dados do cabeçalho do pedido e dos itens na mesma tela e depois quero gravar uma vez só assim como é feito no meu sistema antigo em DELPHI.

Dai eu pergunto Dá pra fazer??

Claro que dá usando array e session, mas vai custar bem mais horas e por consequência mais caro vai ficar, dai o cliente já acha que você está de alguma forma empurrando algo pra ele.

É uma situação delicada.

Eu só gostaria que o mestre detalhe fosse mais intuitivo e pra ser sincero tem muitas coisas que vi na versão 8 nos seminários que poderiam deixar pra depois e melhorar essa parte.

Vamo que vamo

Bem complicado mesmo Fábio. O grande problema é que não dá pra fazer muitas comparações entre sistemas desktop e sistemas web. Pra se fazer tudo isto que o teu cliente pediu em desktop, eu por exemplo, faço rapidinho, pois é bem mais fácil e rápido. Agora quando se trata de sistemas web, a coisa complica pois existe uma série de fatores que entram, tais como as explicadas aqui neste tópico. Eu por exemplo, não sei fazer na “unha” um mestre/detalhe no PHP. Teria que usar o padrão do SC mesmo… e aí?

Ter a opção de colocar os botões do lado direito seria um bom começo… Não é nada lógico ir preenchendo os campos e ter de voltar atras para incluir.

Como eu disse antes, se eu tivesse um conhecimento maior, a forma de iniciar uma transação, incluir o mestre e depois pelo menos o primeiro detalhe e depois fechar a transação já resolveria. Seria uma alternativa com tudo em uma única tela, sem usar o padrão que existe no SC.

Mas, como não sei fazer isto, estou usando o padrão do SC mesmo, como o nosso colega Kleyber.

Alguém teria como mostrar como fazer desta forma ou algo parecido, sem ser na unha?

[]'s

Eu estou sem computador, amanha acredito que resolvo isso e tenho fazer um exemplo. Mas resumindo é só implementar a lógica em um botão PHP e após o pedido inserido e seu id definido pegar esse id com a função mysql_insert_id() e usar o sc_redir passa o id re recuperado como parâmetro paraum form de pedido, o form ao receber o id já vai habilitar os detalhes.

Tem que prever a questão mult user.

Não tenho certeza se mysql insert id preve isso.

E precisa ver a função similar em outros bancos.

Olá Pessoal

Fico contente que muitos estão interessados.

Estou pensando em criar alguns exemplos inclusive um que eu usei para um cliente que fiz com session e gravando tudo no final.

O conhecimento trocado aqui será de grande valia a muitos.

Grande Abraço

Sim Haroldo por isso que disse que tem que ser feito com controle de transação pra contornar a questão de inserts concorrentes, bem tenho um sistema usando esse esquema com cerca de 12 usuários simultâneos fazendo inserts, até o momento não tive problemas, e referente a função pra outro sgbd realmente precisaria pesquisar.

A forma que utilizo e funciona para qualquer banco é?

Gravar a sessão do php na tabela.

Select max(id) from tabela where sessao=$sessao.

Quando inserir o item limpar o campo sessao da tabela.

Nunca pensei em usar sessão nesse sentido , sempre usei o select max(id) no onAfterInsert, pois uso SqlServer, por enquanto ainda não tive problemas.

Mas também tenho sistemas com 10 a 20 usuários simultâneos , talvez com centenas a coisa muda de figura.

Vou começar a pensar nessa dica do Haroldo.

A sessao garante que o max(id) traga id do ultimo insert feito na sessão corrente, excluindo qualquer chance de pegar o id gerado por outro usuário.

Haroldo,

Usando um exemplo de Pedido e ItemPedido

Você grava o Pedido primeiro e no evento onAfertInsert grava o ID na sessão? ou Você faz isso usando o campo gravar variavel na sessão do scriptcase nas propriedades do campo?

Pode detalhar um pouco mais?

Obrigado

Eu grava a sessão do php numa coluna da tabela. Id eh auto increment.

IF (ISSET($_REQUEST[‘PHPSESSID’])) $_PHPSESSID=@$_REQUEST[‘PHPSESSID’];
IF (!ISSET($_PHPSESSID)||EMPTY($_PHPSESSID)) $_PHPSESSID=session_id();

$_INSERT=“INSERT INTO pedido set sessao_php=’$_PHPSESSID’”;