GARANTIR DESCONTO

Fórum duvida em manipulação dos valores de uma tabela #343888

01/08/2007

0

Pessoal,
preciso criar uma tabela semelhante a esta que segue na imagem, no entanto nao estou conseguindo idealizar como devo fazer para obter os valores ´B/A´, ´C/B´, ´D/C´ e ainda a estimativa para o ano de 2007....

aguem tem uns toques para dar??




[img:8e2db028fb]http://br.geocities.com/isaacqueirozee/Digitalizar.jpg[/img:8e2db028fb]


Barretoee

Barretoee

Responder

Posts

01/08/2007

Emerson Nascimento

B/A é exatamente isso: B dividido por A

[size=18:709bd54fb6][b:709bd54fb6]eis as fórmulas:[/b:709bd54fb6][/size:709bd54fb6]
B/A = RoundTo(((B / A) - 1) * 100, -2);
C/B = RoundTo(((C / B) - 1) * 100, -2);
D/C = RoundTo(((D / C) - 1) * 100, -2);

[b:709bd54fb6]a estimativa é calculada pela média obtida nos anos anteriores:[/b:709bd54fb6]
estimativa = RoundTo((B/A + C/B + D/C) / 3, -2);
valor_estimado = D * (1 + (estimativa / 100));

[size=18:709bd54fb6]trabalhando com a primeira linha de dados fornecidos:[/size:709bd54fb6]
B/A = RoundTo(((B / A) - 1) * 100, -2);
B/A = RoundTo(((42836 / 38654) - 1) * 100, -2)
B/A = RoundTo((1,1082 - 1) * 100, -2)
B/A = RoundTo(0,1082 * 100, -2)
[b:709bd54fb6]B/A = 10,82[/b:709bd54fb6]

C/B = RoundTo(((C / B) - 1) * 100, -2);
C/B = RoundTo(((43162 / 42836) - 1) * 100, -2)
C/B = RoundTo((1,0076 - 1) * 100, -2)
C/B = RoundTo(0,0076 * 100, -2)
[b:709bd54fb6]C/B = 0,76[/b:709bd54fb6]

D/C = RoundTo(((D / C) - 1) * 100, -2);
D/C = RoundTo(((45000 / 43162) - 1) * 100, -2)
D/C = RoundTo((1,0426 - 1) * 100, -2)
D/C = RoundTo(0,0426 * 100, -2)
[b:709bd54fb6]D/C = 4,26[/b:709bd54fb6]

estimativa = RoundTo((B/A + C/B + D/C) / 3, -2)
estimativa = RoundTo((10,82 + 0,76 + 4,26) / 3, -2)
estimativa = RoundTo(15,84 / 3, -2)
[b:709bd54fb6]estimativa = 5,28[/b:709bd54fb6]

valor_estimado = D * (1 + (estimativa / 100))
valor_estimado = 45000 * (1 + (5,28 / 100))
valor_estimado = 45000 * 1,0528
[b:709bd54fb6]valor_estimado = 47376[/b:709bd54fb6]
[size=18:709bd54fb6][color=darkred:709bd54fb6]
os valores podem sair diferentes em função do arredondamento, pois eu estou usando duas casas decimais para exibição dos percentuais. se for o caso, utilize apenas uma casa para que o valor saia mais próximo daquele exibido no seu exemplo.[/color:709bd54fb6][/size:709bd54fb6]
[size=18:709bd54fb6]se eu tivesse usado uma casa decimal:[/size:709bd54fb6]
estimativa = RoundTo((B/A + C/B + D/C) / 3, -2)
estimativa = RoundTo(([b:709bd54fb6]10,8[/b:709bd54fb6] + [b:709bd54fb6]0,8[/b:709bd54fb6] + [b:709bd54fb6]4,3[/b:709bd54fb6]) / 3, -2)
estimativa = RoundTo(15,9 / 3, -2)
[b:709bd54fb6]estimativa = 5,3[/b:709bd54fb6]

valor_estimado = D * (1 + (estimativa / 100))
valor_estimado = 45000 * (1 + (5,3 / 100))
valor_estimado = 45000 * 1,053
[b:709bd54fb6]valor_estimado = 47385[/b:709bd54fb6]


obs.: a função RoundTo() está na unit Math;[size=12:709bd54fb6][/size:709bd54fb6]


Responder

Gostei + 0

01/08/2007

Barretoee

Emerson, valew as dicas, vou tentar implementá-las e pelo visto vai dar tudo certo...


no entanto acho que fui confuso na minha pergunta e nao perguntei realmente o que queria saber.... meu problema maior não é com as operações matemáticas... mas sim como construir o banco de dados, relacionar as tabelas e ai sim realizar as operações.....ja tentei algumas opções mas ainda nao consegui fazê-lo.....

ou seja nao estou sabendo como pegar por exemplo o ´tributario´ do ano de 2003 e de 2004 direto do meu banco de dados e realizar a operação e ainda guardar o resultado no banco de dados....

Estou usando o Access e os componentes da paleta ADO para realizar a conexao...


eu consegui operar com os valores referentes ao mesmo ano, por exemplo calcular o subtotal e o totalgeral, mas como disse ainda nao consigo operar com dados referentes a anos distintos.... entao por hora meu problema está em ter acesso aos dados corretos pra efetuar os operações....

Acho que agora consegui explicar melhor o meu problemas...


SDS


Responder

Gostei + 0

01/08/2007

Emerson Nascimento

creio que isso possa ser resolvido com uma instrução SQL.
publique a estrutura das tabelas envolvidas pra que possamos tentar te ajudar de forma mais satisfatória.


Responder

Gostei + 0

01/08/2007

Barretoee

Caro Emerson,

ja que vc tão gentilmente se dispõe a ajudar e como vc sugeriu estou postando o link na qual é possível baixar tudo que consegui fazer ate agora, que nada mais é do que cadastrar os valores e as prefeituras em tabelas...

Como disse estou iniciando no delphi a pouco, entao agradeço d+ a ajuda dos colegas.....

http://www.4shared.com/file/21154443/c31a795c/_2__programa.html


Responder

Gostei + 0

02/08/2007

Barretoee

eu consegui criar uma relação no proprio banco de dados, acho que vai dar certo, no entanto na hra que vou rodar o código para ver se realemnte vai ficar como eu quero dá uma erro dezendo que é necessário criar um relacionamento para poder gravar os dados no banco. Estou me baseando em um código free que achei na net so que nao estou identificando qual parte do código faz isso... alguem pode me ajudar??? estou colocando todo meu código..

criei 3 tabelas: ANO, ORCAMENTO E PREFEITURA. dai no proprio banco de dados relacionei a tabela prefeitura com a tabela orcamento e no código coloquei um DBLookupComboBox para inserir a prefeitura junto com os dados do orçamento...

por via das duvidas ai vai o link de onde é possível baixar o programa
http://www.4shared.com/file/21183386/7fcd2852/Contbil.html

unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, StdCtrls, Mask, DBCtrls, ADODB, Buttons, ExtCtrls; type TForm1 = class(TForm) ADOConnection1: TADOConnection; orcamentos: TADOTable; orcamentosCdigo: TAutoIncField; orcamentosAno: TWideStringField; orcamentosPrefeitura: TWideStringField; orcamentosTributario: TIntegerField; orcamentosPatrimonial: TIntegerField; orcamentosTransCorrentes: TIntegerField; orcamentosOutras: TIntegerField; orcamentosDeducaoFundef: TIntegerField; orcamentosSubTotal1: TIntegerField; orcamentosOperCredito: TIntegerField; orcamentosAlienBens: TIntegerField; orcamentosTransCapital: TIntegerField; orcamentosSubTotal2: TIntegerField; orcamentosTotalGeral: TIntegerField; Label1: TLabel; DBEdit1: TDBEdit; DataSource1: TDataSource; Label2: TLabel; DBEdit2: TDBEdit; Label3: TLabel; DBEdit3: TDBEdit; Label4: TLabel; DBEdit4: TDBEdit; Label5: TLabel; DBEdit5: TDBEdit; Label6: TLabel; DBEdit6: TDBEdit; Label7: TLabel; DBEdit7: TDBEdit; Label8: TLabel; DBEdit8: TDBEdit; Label9: TLabel; DBEdit9: TDBEdit; Label10: TLabel; DBEdit10: TDBEdit; pnl_Menu: TPanel; sbtn_Novo: TSpeedButton; sbtn_Salvar: TSpeedButton; sbtn_Alterar: TSpeedButton; sbtn_Cancelar: TSpeedButton; sbtn_Atualizar: TSpeedButton; sbtn_Primeiro: TSpeedButton; sbtn_Anterior: TSpeedButton; sbtn_Proximo: TSpeedButton; sbtn_Ultimo: TSpeedButton; Sbtn_Sair: TSpeedButton; DBLookupComboBox1: TDBLookupComboBox; DBLookupComboBox2: TDBLookupComboBox; ADOConnection2: TADOConnection; ano: TADOTable; anoAno: TWideStringField; DataSource2: TDataSource; ADOConnection3: TADOConnection; prefeitura: TADOTable; prefeituraPrefeitura: TWideStringField; DataSource3: TDataSource; procedure sbtn_NovoClick(Sender: TObject); procedure sbtn_SalvarClick(Sender: TObject); procedure sbtn_AlterarClick(Sender: TObject); procedure sbtn_CancelarClick(Sender: TObject); procedure sbtn_AtualizarClick(Sender: TObject); procedure Sbtn_SairClick(Sender: TObject); procedure sbtn_PrimeiroClick(Sender: TObject); procedure sbtn_AnteriorClick(Sender: TObject); procedure sbtn_ProximoClick(Sender: TObject); procedure sbtn_UltimoClick(Sender: TObject); procedure orcamentosCalcFields(DataSet: TDataSet); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.sbtn_NovoClick(Sender: TObject); begin if orcamentos.State in [dsBrowse] Then begin DBEdit1.SetFocus; orcamentos.Insert; end else ShowMessage(´Operação Não Disponível!´); end; procedure TForm1.sbtn_SalvarClick(Sender: TObject); begin if not(orcamentos.State in [dsBrowse]) Then orcamentos.Post else ShowMessage(´Operação Não Disponível!´); end; procedure TForm1.sbtn_AlterarClick(Sender: TObject); begin if (orcamentos.State in [dsBrowse]) AND (orcamentos.RecordCount > 0) Then begin DBEdit1.SetFocus; orcamentos.Edit; end else ShowMessage(´Operação Não Disponível!´); end; procedure TForm1.sbtn_CancelarClick(Sender: TObject); begin if not(orcamentos.State in [dsBrowse]) Then orcamentos.Cancel else ShowMessage(´Operação Não Disponível!´); end; procedure TForm1.sbtn_AtualizarClick(Sender: TObject); begin if not(orcamentos.State in [dsBrowse]) Then orcamentos.Cancel; orcamentos.Close; orcamentos.Open; end; procedure TForm1.Sbtn_SairClick(Sender: TObject); begin close; end; procedure TForm1.sbtn_PrimeiroClick(Sender: TObject); begin if orcamentos.State in [dsBrowse] Then orcamentos.First else ShowMessage(´Operação Não Disponível!´); end; procedure TForm1.sbtn_AnteriorClick(Sender: TObject); begin if orcamentos.State in [dsBrowse] Then orcamentos.Prior else ShowMessage(´Operação Não Disponível!´); end; procedure TForm1.sbtn_ProximoClick(Sender: TObject); begin if orcamentos.State in [dsBrowse] Then orcamentos.Next else ShowMessage(´Operação Não Disponível!´); end; procedure TForm1.sbtn_UltimoClick(Sender: TObject); begin if orcamentos.State in [dsBrowse] Then orcamentos.Last else ShowMessage(´Operação Não Disponível!´); end; procedure TForm1.orcamentosCalcFields(DataSet: TDataSet); begin orcamentosSubTotal1.Value:=orcamentosPatrimonial.Value+orcamentosTransCorrentes.Value+orcamentosOutras.Value+orcamentosDeducaoFundef.Value; orcamentosSubTotal2.Value:=orcamentosOperCredito.Value+orcamentosAlienBens.Value+orcamentosTransCapital.Value; orcamentosTotalGeral.Value:=orcamentosSubTotal1.Value+ orcamentosSubTotal2.Value; end; procedure TForm1.FormCreate(Sender: TObject); begin end; end.



Responder

Gostei + 0

02/08/2007

Barretoee

iai pessoal,

Alguem poderia me ajudar a concluir meu código de modo que eu consiga gravar com sucesso as informações na banco de dados???


SDS


Responder

Gostei + 0

04/08/2007

Barretoee

bom pessoal,

ja consegui criar o relacionamento das tabelas assim como tambem ja consigo gravar todos os dados de interessa no meu banco de dados, essa etapa ja foi cumprida....

agora eu preciso operar com alguns valores, emerson.en ja me deu umas dicas, mas eu preciso saber como iniciar o procediemento, ou seja,
é necessário inserir um componente query??
onde posso salvar os rsultados das operações matemáticas??

preciso de umas dicas...

Ps. todas as operações que preciso realizar ja foram expostas nas primeiras perguntas... como disse o emerson.en ja deu uns toques, mas preciso de algo mais para conseguir dar procem]dimento aos calculos...


SDS


Responder

Gostei + 0

05/08/2007

Barretoee

sobe


Responder

Gostei + 0

06/08/2007

Barretoee

opa pessoal, mais uma vez eu aqui....

ja consegui dar inicio as minhas instruções SQL...no entanto uma nova dúvida surgiu... como eu ja disse eu tenho duas tabela relacionadas... uma delas prefeitura e outra orçamentos..então cada prefeitura tem o seu conjunto de orçamentos como mostrada naquela figura la em cima....

MInha dúvia é como posso filtrar e selecionar corretamente os campos por exemplo, o tributário de cada prefeitura???


Responder

Gostei + 0

06/08/2007

Barretoee

eu pensei em fazer o seguinte: como na tabela orcamentos ha um campo chamado CodPrefeitura onde cada prefeitura tem seu cógido usar um WHERE ficando o código assim
SELECTPatrimonial FROM orcamentos WHERE CodPrefeitura =1;
mas ta dando esse erro:
Instrução SQL inválida ´DELETE´, ´INSERTE´, ´PROCEDURE´, ´SELECT´ OU ´UPDATE´ esperado


mas dessa forma eu teria que fazer a seleção para apenas as prefeituras cadastradas ficando portanto impossível fazer essa operação para todas as prefeituras, inclusive as novas prefeituras que serão cadastradas.... alguem podee me dar uma segestão.....


Responder

Gostei + 0

06/08/2007

Emerson Nascimento

o erro deve ser pela falta de espaço entre select e patrimonial


Responder

Gostei + 0

06/08/2007

Barretoee

ok ok

é isso mesmo, essa eu consegui resolver

Meu problema agora consiste no seguinte: cada prefeitura teu seu conjunto de orçamentos, e cada prefeitura é identificada por um numero ´CodPrefeitura´ dai eu queria fazer de modo que as operações fossem feitas para cada prefeitura.... e se eu fizer como citei nao vou conseguir realizar o pocedimentos para as novas prefeituras cadastrtadas...


alguem tem dicas???
Estou u sando a paleta ADO...

SDS


Responder

Gostei + 0

06/08/2007

Emerson Nascimento

como você identifica os valores tributários, patrimoniais, transferências, etc?


Responder

Gostei + 0

06/08/2007

Barretoee

como você identifica os valores tributários, patrimoniais, transferências, etc?


Emerson, nao entendi sua pergunta...

mas o que desejo fazer é que na condição WHERE eu consiga entrar por exemplo com o nome da prefeitura ou com o código dela, de maneira que eu consiga mostrar os orçamentos de cada prefeitura


SDS


Responder

Gostei + 0

06/08/2007

Emerson Nascimento

se eu entendi a sua necessidade, acho que a solução é:

SELECT Patrimonial FROM orcamentos WHERE CodPrefeitura = :CodPrefeitura

daí você preenche o parâmetro CodPrefeitura com o valor desejado. Não trabalho com ADO, mas se você estiver utilizando ClientDatasets:
1- coloque a instrução ´SELECT Patrimonial FROM orcamentos WHERE CodPrefeitura = :CodPrefeitura´ na propriedade Command do ClientDataset

2- passe o valor desejado para o parâmetro:
//motra os dados da prefeitura 1
ClientDataset.Close;
ClientDataset.Params.ParamByName(´CodPrefeitura´).AsInteger := 1;
ClientDataset.Open;

//motra os dados da prefeitura 2
ClientDataset.Close;
ClientDataset.Params.ParamByName(´CodPrefeitura´).AsInteger := 2;
ClientDataset.Open;


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar