Fórum Pesquisa #1406
15/12/2008
0
begin
inherited;
if key = #13 then
begin
idescricao:=deasy.CdsProdutos.FieldByName(nome).asstring;
icodigo:=deasy.CdsProdutos.FieldByName(barras).asstring;
cadastronotas.dbedit12.text:= idescricao;
cadastronotas.dbedit22.text:= icodigo; close; end;
end; criei duas variaveis globais pra armazenar o valor do campo quando eu teclo enter ela deveria armazenar o valor do campo, mais nao armazena fika em branco, quando teclo o enter fika em branco na outra tela se eu deixar ativado r o clientdataset ela so me traz o primeiro registro pelo menos foi o que pareceu, nao ta me trazendo o registro q eu to selecionado no dbgrid duvida 2 como eu faço pra calcular um valor x na tela de cadastro de um pedido pro exemplo, eu digito a quantidade depois coloco o valor unitario no campo valor total ele me retornar o valor total da quantidade * valor unitario, pra eu gravar esse valor total no banco de dados. duvida 3 preciso criar um campo na minha tabela que conte os itens tipo eu insiro um iten ele me mostra iten 1 eu insiro outro iten ele me mostra 2 e que tb eu possa gravar esses valores desses itens no banco de dados.
Paulo Silva
Curtir tópico
+ 0Posts
15/12/2008
Wesley Yamazack
Boa tarde
Vamos lá :
Pergunta 1===============================================================
Pelo que entendi, você esta dizendo que o valor volta em branco, uma duvida, estas variáveis globais estão em que formulário ? 1 - Se estiverem no Form onde você seleciona o item e da o enter, acho que não iria funcionar, elas deveriam estar no formulário que você chama esta telinha de seleção. 2 – Se estiver no Form que você chama a tela de seleção, observe se em algum lugar você não esta limpando estas variáveis. Para fazer a prova dos 9, faça o seguinte. procedure Tpesquisaprodutos.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
inherited;
if key = #13 then
begin
idescricao:=deasy.CdsProdutos.FieldByName(nome).asstring;
icodigo:=deasy.CdsProdutos.FieldByName(barras).asstring;
cadastronotas.dbedit12.text:= idescricao;
cadastronotas.dbedit22.text:= icodigo; showmessage(‘Descricao : ’ + idescricao + ‘ Codigo : ’ + icodigo); //obs se estas variáveis forem inteiras tem de converter para + inttostr(Idescricao) e o mesmo //para icodigo; close; end;
end;
Pergunta 2===============================================================
Você pode fazer de várias maneiras,duas delas : 1 – Criar 3 variaveis [ qnt : Integer; PrecoUnit, PrecoTotal : Real ] PrecoTotal := qnt * PrecoUnit; Na hora de inserir os dados na tabela, você faz assim: deasy.CdsProdutos.FieldByName(precototal).asstring := FloatToStr(PrecoTotal); 2 – Você não precisaria gravar o Total da venda, basta gravar a quantidade e o PrecoUnitario. E a qualquer momento que você queira saber qual é o total daquela venda, faça o seguinte: PrecoTotal:=StrtoFloat(CdsProdutos.FieldByName(quantidade).asstring) * StrtoFloat(CdsProdutos.FieldByName(PretoUnit).asstring);
Pergunta3 ===============================================================
Aqui você pode criar o campo como ‘AutoIncremento’, ele será incrementado toda vez que você executar um deasy.CdsProdutos.Insert, ele irá automaticamente incluir um valor para este campo, seguindo uma ordem, onde este numero nunca se repete, e caso você apague algum item, já mais outro item terá aquele código apagado.
Att,
Wesley Yamazack
Gostei + 0
15/12/2008
Paulo Silva
cadastronotas: Tcadastronotas;
iunidade, icodigo, idescricao: string; implementation
uses upesprodutos;
{$R *.dfm} procedure Tcadastronotas.btnpesqClick(Sender: TObject);
begin
inherited;
try
pesquisaprodutos:=Tpesquisaprodutos.Create(self);
pesquisaprodutos.ShowModal;
finally
pesquisaprodutos.Free;
end;
end; eu preciso gravar o numero do iten que é a minha terceira duvida sendo que quando eu cadastro uma nova nota esse numero começa a recontar de novo sabe tipo item 1,2,3 etc cada nota tem seus itens todos se iniciando do valor 1 eu preciso que esses itens estajam no banco de dados estou usando firebird 2.1 mais nao consegui imaginar uma maneira de mandar esses numeros sem ter q eu prencher tipo campo numero do item eu fika prenchendo la 1 depois no proximo lançamento eu coloco 2 sabe pra evitar esse desgaste aehuhueheuae.
Gostei + 0
16/12/2008
Wesley Yamazack
Ao inves de pegar o FieldByName do clientdataset, tenta pegar assim : DataSource1.DataSet.FieldByName(‘Campo’).AsString; O que eu tinha colocado anteriormente não adiantou não ? Se possível explicar um pouco mais a duvida. Pergunta3 ===============================================================Aqui você pode criar o campo como ‘AutoIncremento’, ele será incrementado toda vez que você executar um deasy.CdsProdutos.Insert, ele irá automaticamente incluir um valor para este campo, seguindo uma ordem, onde este numero nunca se repete, e caso você apague algum item, já mais outro item terá aquele código apagado.
Gostei + 0
16/12/2008
Paulo Silva
Gostei + 0
16/12/2008
Wesley Yamazack
Vamos lá, alguns problemas foram resolvidos, agora o seu problema é com relação a nota.
Pelo que entendi, você tem uma nota fiscal onde ela tem um código único.
A nota ela pode ter vários itens[1,2,3,4] - Cadastrados em uma tabela produtos por exemplo.
Na tabela dos itens da nota, você irá precisar ter o código dos produtos, e o código da nota que aqueles produtos pertencem.
Não sei se seria isso o que você esta querendo. Se tiver como você esmiuçar mais o seu problema.
Att,
Wesley Yamazack
Gostei + 0
16/12/2008
Paulo Silva
begin
cdsitendetalheNUMEROITEN.AsInteger :=
cdsitendetalhe.RecordCount+1;
end;
Gostei + 0
16/12/2008
Wesley Yamazack
Use o Edit.
Coloque o seguinte código no evento onkeypress do seu edit:
procedure TFrmPadrao.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in [ 0..9, #8, #13]) then
Key := #0;
end;
Para que ele so consiga digitar numeros no edit. Restringindo a digitação e assim evitando que ele digite letras ou caracteres especiais.
Att,
Wesley Yamazack
Gostei + 0
16/12/2008
Paulo Silva
Gostei + 0
16/12/2008
Wesley Yamazack
Var
vUltimoCodigo : Integer;
begin
//teu CDS ordene ele por código
cds.last; //vai para o ultimo registro.
vUltimoCodigo := cds.FieldByName(Codigo).asinteger + 1;
cds.insert;
// passe os dados do clientdataset(descricao, qnt, etc)
cds.FieldByName(Codigo).asinteger := vUltimoCodigo ;
cds.post;
end;
Gostei + 0
16/12/2008
Paulo Silva
Gostei + 0
16/12/2008
Wesley Yamazack
Usa edit para ficar mais fácil, sacou ? Fica mais facil de controlar. Dá mais trabalho porém é mais confiável.
Só não esquece depois de der um post no clientdataset :
edt1.clear;
edt2.clear;
Garantindo assim que ele nunca irá pegar lixo de registros anteriores. sacou ?
Att,
Wesley Yamazack
Gostei + 0
16/12/2008
Paulo Silva
DS.DataSet.FieldByName(EMISSORDOCUMENTO).AsString:=ComboBox1.TEXT; ds.dataset.post; dessa forma o registro e gravado mais é gravado com o texto que estiver quando eu dou o insert e vou pra alterar colocar outro valor o registro vai pro banco de dados com o valor q estiver atualmente tipo se eu deixar combobox2.text vai esse valor pro bd automaticamente apos o insert se eu inserir no botao gravar esse valor, ele cria uma outra linha no bd bom como soluciono isso e depois como eu faço pra exibir esses registros ja gravado no form denovo tipo consulto ele no form mais ele nao me retorna o valor do combobox O.o fika vazio. sei que ja estou enchendo o sako mais tenho essa duvida ae O.o
Gostei + 0
16/12/2008
Wesley Yamazack
Vamos lá. você pode fazer o seguinte.
if ((combobox1.ItemIndex > -1) and (Combobox2.ItemIndex > -1)) then
begin
ds.dataset.insert; DS.DataSet.FieldByName(SITUACAO).AsString:=ComboBox2.TEXT;
DS.DataSet.FieldByName(EMISSORDOCUMENTO).AsString:=ComboBox1.TEXT; ds.dataset.post;
combobox1.ItemIndex := -1;
combobox2.ItemIndex := -1;
cds.active := false;
cds.active := True;
end
else
begin
showmessage(Dados nao informados);
combobox1.setfocus;
end;
E com relação a esta pertubando, nao esquenta com isso não, estou aqui para te ajudar em tudo que precisar, fica tranquilo com relação a isso.
Abraço..
Wesley
Gostei + 0
16/12/2008
Paulo Silva
begin
inherited; ComboBox2.TEXT:= DS.DataSet.FieldByName(SITUACAO).asstring;
ComboBox1.TEXT:=DS.DataSet.FieldByName(EMISSORDOCUMENTO).asstring; end; no evento procedure Tcadastronotas.ds2UpdateData(Sender: TObject);
begin
inherited; DS.DataSet.FieldByName(SITUACAO).AsString:=ComboBox2.TEXT;
DS.DataSet.FieldByName(EMISSORDOCUMENTO).AsString:=ComboBox1.TEXT;
end; entao ele da o update certinho das informaçoes que estao na tabela quando eu clico no botao salvar mais quando eu vizualizo os dados nao vem igual em um dbedit sabe?
Gostei + 0
17/12/2008
Wesley Yamazack
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)