Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
adriano_servitec Colaborador
Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Qui Out 14, 2010 9:53 pm Assunto: Ajuda para bolar a regra de negocio? **Concluído** |
|
|
Pessoal, estou com um problema numa regra de negocio que preciso fazer aqui em um form de ordem de serviço...
Tenho que alimentar este form da segunte maneira
Chamo um nova OS.
Se não for cliente cadastrado é acionado uma tabela de preços chamada TABELA PREÇO GLOBAL
Se a OS for para algum cliente que tenha vinculado a ele a tabela de preço então o Sistema busca a TABELA DE PREÇO INDIVIDUAL pois cada cliente tem preços diferenciados.
Então neste caso temos dois tipos de tabelas diferente que o formulario de OS deve tratar. Isso o sistema ja faz com precisão.
Agora, um cliente me pediu para ver se tem como fazer outra regra neste OS.
Por exemplo nast tabelas de preços tanto global quanto individual, existe um indice que é do condutor que entrga a mercadoria. Porém este cliente quer trabalhar com preços diferenciados, dependendo do condutor do veiculo. Ou seja uns ganham porcentagem X e outros porcentagem Y.
Ai é que esta, não estou sabendo montar a regra de negocio para este caso ai.
Cheguei a abrir um campo novo no Cadastro de Condutor e colocar o valor do indice no cadastro do condutor.
Ai o sistema na hora de incluir um OS verificar se o condutor tem um indice de porcentagem ai calcular o valor do frete dele cfe o indice de seu cadastro.
Funcionou novamente. Mais ai fiquei barrado em uma questão que complicou.
Estes OS, são pré-preenchidos e em alguns casos define um condutor para fazer o frete e grava no banco, mais a qualquer momento pode alterar o condutor neste OS, e ai que o "bixo pega"... Como alterar varios pedidos desta ordem novamente? Pois quando estou fazendo um a um o sistema verifica todas as chaves das tabelas envolvidas, mais depois de gravado em outra tabela chamada serviços isso ja fica impossivel de fazer a verificação, pois na época que foi crado não foi bolado para este tipo de rergra. _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Editado pela última vez por adriano_servitec em Dom Out 17, 2010 10:29 pm, num total de 1 vez |
|
Voltar ao Topo |
|
|
cyberdisk Colaborador
Registrado: Domingo, 4 de Julho de 2010 Mensagens: 2391 Localização: São José dos Campos - SP
|
Enviada: Qui Out 14, 2010 10:39 pm Assunto: |
|
|
Citação: | Estes OS, são pré-preenchidos e em alguns casos define um condutor para fazer o frete e grava no banco, mais a qualquer momento pode alterar o condutor neste OS, e ai que o "bixo pega"... Como alterar varios pedidos desta ordem novamente? Pois quando estou fazendo um a um o sistema verifica todas as chaves das tabelas envolvidas, mais depois de gravado em outra tabela chamada serviços isso ja fica impossivel de fazer a verificação, pois na época que foi crado não foi bolado para este tipo de rergra. |
de uma maneira bem simples, basta colocar na tabela serviços, mais um campo de controle e montar um código para tratar especificamente desse controle
abraço _________________ O conhecimento abre muitas portas |
|
Voltar ao Topo |
|
|
adriano_servitec Colaborador
Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
|
Voltar ao Topo |
|
|
cyberdisk Colaborador
Registrado: Domingo, 4 de Julho de 2010 Mensagens: 2391 Localização: São José dos Campos - SP
|
Enviada: Qui Out 14, 2010 11:06 pm Assunto: |
|
|
no meu caso tenho algo parecido, e para isso utilizei um dbnavigator especificamente para essa tabela ( incluir, editar, excluir e salvar )
dessa maneira da para mexer em todos os campos dessa tabela sem problemas
abraço _________________ O conhecimento abre muitas portas |
|
Voltar ao Topo |
|
|
adriano_servitec Colaborador
Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
|
Voltar ao Topo |
|
|
adriano_servitec Colaborador
Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
|
Voltar ao Topo |
|
|
cyberdisk Colaborador
Registrado: Domingo, 4 de Julho de 2010 Mensagens: 2391 Localização: São José dos Campos - SP
|
Enviada: Qui Out 14, 2010 11:15 pm Assunto: |
|
|
tambem é facil de solucionar ... crie campos como
valor1, valor2, valor3 ... etc ou outro nome
dessa maneira voce pode colcar os preços que quiser diferenciados pelos valores ... ai voce pode criar um diferenciador para o serviço ou condutor
que deverá ser solicitado no cadastro
abraço _________________ O conhecimento abre muitas portas |
|
Voltar ao Topo |
|
|
adriano_servitec Colaborador
Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
|
Voltar ao Topo |
|
|
cyberdisk Colaborador
Registrado: Domingo, 4 de Julho de 2010 Mensagens: 2391 Localização: São José dos Campos - SP
|
Enviada: Qui Out 14, 2010 11:24 pm Assunto: |
|
|
Citação: | o calculo ja é efetuado logo que o usuario escolhe o destino |
crie colunas com valores diferenciados, depois é só optar por qual coluna voce vai usar para um detrminado destino ... consegui entender ?
abraço _________________ O conhecimento abre muitas portas |
|
Voltar ao Topo |
|
|
adriano_servitec Colaborador
Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
|
Voltar ao Topo |
|
|
cyberdisk Colaborador
Registrado: Domingo, 4 de Julho de 2010 Mensagens: 2391 Localização: São José dos Campos - SP
|
Enviada: Qui Out 14, 2010 11:34 pm Assunto: |
|
|
Exatamente ... com isso vai resolver esse problema _________________ O conhecimento abre muitas portas |
|
Voltar ao Topo |
|
|
adriano_servitec Colaborador
Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
|
Voltar ao Topo |
|
|
cyberdisk Colaborador
Registrado: Domingo, 4 de Julho de 2010 Mensagens: 2391 Localização: São José dos Campos - SP
|
Enviada: Qui Out 14, 2010 11:40 pm Assunto: |
|
|
aplique a mesma regra para o condutor _________________ O conhecimento abre muitas portas |
|
Voltar ao Topo |
|
|
adriano_servitec Colaborador
Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Qui Out 14, 2010 11:55 pm Assunto: |
|
|
cyberdisk escreveu: | aplique a mesma regra para o condutor | Se vc reparar tenho na imagem acima a tabela de preço de um dos clientes, e tem o indice de 65% para cada serviço - o serviço - o valor do serviço e o valor do condutor. Isso foi uma regra que o usuario colocou para este cliente. Então este cliente paga o serviço desta forma ai.
Mais neste caso não diz que o condutor x tem que receber 85% e o condutor Y 70%, diz que todos condutores receberão 65%.
Só que tenho um condutor diferenciado que no serviços executados ele recebe 85% e não 65%, ai é que eu criei este novo campo na tabela do condutor.
Ai neste form o sistema verifica se o condutor tem este indice diferenciado e aplica na tabela de serviço, na grid que mostra no primeira imagem.
então inclui no codigo que faz este tratamento
Código: | procedure Tfrmcadordserv.tabpreco_cfe_tipo_clie;
var
_ChamaFrm : TfrmPesq;
qryTemp: TZQuery;
sTipoServ: String;
cPercServ, cVlrMotoboy: Real;
begin
//faço uma verificação se for cliente avuslo abro a lista de precos da tabela de precos
//frmPesq.qryTabserv.Connection := dm.connection;
_ChamaFrm := TfrmPesq.Create(Application);
qryTemp := TZQuery.Create(nil);
try
//Autor: Adriano
//Data: 12/10/2010
//Para tratar os condutores que tem valor diferenciado de seu salario dentro do form cadmotoboy
with qryTemp do
begin
if condutor.KeyValue <> null then
begin
Connection := dm.connection;
Close;
SQL.Clear;
SQL.Add(' select TIPOSERV, PERCSERV, VLRMOTOBOY ');
SQL.Add(' from motoboy where idmotoboy = :iBusca ');
ParamByName('iBusca').AsInteger := condutor.KeyValue;
Open;
if not IsEmpty then //Se não estiver vazio
begin
sTipoServ := qryTemp.FieldByName('TIPOSERV').AsString;
if Trim(sTipoServ) <EmptyStr> 0 then
cPercentual := cPercServ; //Variavel publica recebe o valor do motoboy individual
cValorMotoboy := 0; //Quando usar variavel publica, global etc...sempre limpar antes de iniciar para não ficar dados alocados.
if cVlrMotoboy > 0 then
cValorMotoboy := cVlrMotoboy; //Variavel publica recebe o valor do motoboy individual
end;
end;
end;
/////////-------------------------------------------////////////
if (trim(dbtext2.Caption) = EmptyStr) or (dbtext2.caption = '0') and (resultpesq = EmptyStr) then
begin
//precolocal := nil;
//CriaQuery(TComponent(Self), precolocal, dm.connection, dsprecolocal);
_resultLabel_Pesq('Listagem de preços [Modo Global]');
with qryTabserv do
begin
close;
SQL.clear;
SQL.Add (' select * from preco ');
open;
end;
end else
begin
//se for cliente cadastrado então abro a tabela preco e serviços local do proprio cliente
//precoservlocal := nil;
//CriaQuery(TComponent(Self), precoservlocal, dm.connection, dsprecoservlocal);
_resultLabel_Pesq('Listagem de preços [Modo Individual] '+lblcliente.Caption);
with qryTabserv do
begin
close;
SQL.clear;
SQL.Add (' select * from preserv ');
SQL.Add (' where idclientes = :pidclientes ');
SQL.Add (' and ativar = '+ QuotedStr('T') ); //carrega somente os preços marcados na tabela de preco
ParamByName('pidclientes').asinteger := strtoint(DBText2.Caption); // Pega a ID do cliente
open;
end;
end;
finally
_ChamaFrm.Free;
qryTemp.Free;
end;
end; |
Funciona...Mais como disse anteriormente, os condutores são mudados constantemente depois que ja encerrou a ordem de serviço.
Desculpe...Mas não vejo como sua ideia funcionaria aqui amigo. _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
Voltar ao Topo |
|
|
adriano_servitec Colaborador
Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
|
Voltar ao Topo |
|
|
|