Ola
Gustavo
Solicito sua ajuda.
Na rotina abaixo enumerei as linha para explicar.
Até a linha 27 ele executa bem, mas quando da movimentação para os campo da tabela da grade, linha 28, ele ocorre erro e exibe a mensagem da linha 39.
Preciso de uma orientação do que pode estar ocorrendo pois ja chequei todos os campos para ver se não era erro de digitação ou algo como um (;) sei que um erro de inconsistência, lembrado que a tabela GRADEPROD a chave é composta pelos campos ECF_NUMERO e PRO_CODIGGR.
visto que a sistematica do problema é, tenho uma venda e quando cadastro o item da venda ele executa essa rotina avulsa, filtrando os resgistros que compoem a produto e lançando os em uma tabela de grade com os campos ECF_NUMERO(numero da Venda), PRO_CODIGOGR(codigo da peça que compoem o produto que vem da Tabela ITECOMPPROD) e PRO_QUANTIDADE(quantidade de peças).
Se você puder ajudar-me agradeço.
1 // Variáveis Locais
2 CamposResultado: Variant;
3 Produto_fil: String; // Produto vendido
4 Quantid_Fil: Double Precision; // Quantidade Vendida
5 Venda_num: Double Precision; // Numero da venda
6 Wprodped: String; // Codigo do Produto (peças que Compoen o produto vendido)
7 Wquantped: Double Precision; // Qunatidade de peças
8 Wtotprodped: Double Precision; // Total de peças(Wquantped * Quantid_fil)
9
10 //A ROTINA
11
12 Begin
13 Produto_fil := TabGlobal.DITVENDA.PRO_CODIGO.Conteudo;
14 Quantid_fil := TabGlobal.DITVENDA.PRO_QUANTIDADE.Conteudo;
15 Venda_num := TabGlobal.DITVENDA.ECF_NUMERO.Conteudo;
16 end;
17 TabGlobal.DITECOMPPROD.filtro.Clear;
18 tabGlobal.DITECOMPPROD.filtro.Add('CPRO_CODIGO ='+ (Produto_fil));
19 TabGlobal.DITECOMPPROD.AtualizaSql;
20 tabglobal.DITECOMPPROD.First;
21 try
22 while tabglobal.DITECOMPPROD.Eof do
23 begin
24 if Ptabela(TabGlobal.DITECOMPPROD, ['CPRO_CODIGO'], [tabglobal.DITVENDA.PRO_CODIGO.Conteudo], ['CPPRO_CODIGO', 'CP_QUANT'],CamposResultado) then
25 begin
26 Wprodped:= CamposResultado[0];
27 Wquantped:= CamposResultado[1];
28 TabGlobal.DGRADPROD.ECF_NUMERO.Conteudo:= Venda_num ;
29 TabGlobal.DGRADPROD.PRO_CODIGOGR.Conteudo:= Wprodped;
30 Wtotprodped:= (Wquantped * Quantid_fil);
31 Showmessage('calc quantidade' + floattostr(Wtotprodped));
32 TabGlobal.DGRADPROD.PRO_QUANTIDADE.Conteudo:= TabGlobal.DGRADPROD.PRO_QUANTIDADE.Conteudo + Wtotprodped ;
33 TabGlobal.DGRADPROD.salva;
34 TabGlobal.DGRADPROD.Refresh;
35 end;
36 TabGlobal.DITECOMPPROD.next;
37 end;
38 except
39 showmessage('Erro de Leitura...');
40 end;
Rotina não adicionando -
-
- Mensagens: 244
- Registrado em: Dezembro 22nd, 2010, 1:05 am [phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1236: count(): Parameter must be an array or an object that implements Countable
Re: Erro em rotina de lançamento avulso
Verifique se sua chave é simples TabGlobal.DGRADPROD.ECF_NUMERO.Conteudo, pois se for, o erro está ocorrendo pois existe duplicidade de registros.
Uma alternativa é colocar a chave como composta e criar na tabela GRADPRO um campo sequencial, para não haver duplicidade dos registros visto que você terá esse campo sequencial para diferencia-los.
Ou ainda pode criar um outro ptabela abaixo do já criado, para fazer uma verificação.
Uma alternativa é colocar a chave como composta e criar na tabela GRADPRO um campo sequencial, para não haver duplicidade dos registros visto que você terá esse campo sequencial para diferencia-los.
Ou ainda pode criar um outro ptabela abaixo do já criado, para fazer uma verificação.
Att,
Gustavo Barreto
Gustavo Barreto
-
- Mensagens: 21
- Registrado em: Janeiro 25th, 2011, 9:25 am [phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1236: count(): Parameter must be an array or an object that implements Countable
Re: Erro em rotina de lançamento avulso
Ola
Gustavo
A tabela GRADPROD tem a seguinte composição
ECF_Numero - Tipo Numero e chave
PRO_CODIGOGR - Tipo Alfa e chave
PRO_QUANTIDADE - Tipo Numero e apenas campo de dados
sendo assim não é chave simples e sim composta.
mas irei postar uma nova situação pois com informações que você ja me enviou tive como montar uma que deu quase certo mas apresenta alguns erros.
por enquanto fico agradecido.
e passarei a postar algumas soluções simples que descobri no xmaker.
Gustavo
A tabela GRADPROD tem a seguinte composição
ECF_Numero - Tipo Numero e chave
PRO_CODIGOGR - Tipo Alfa e chave
PRO_QUANTIDADE - Tipo Numero e apenas campo de dados
sendo assim não é chave simples e sim composta.
mas irei postar uma nova situação pois com informações que você ja me enviou tive como montar uma que deu quase certo mas apresenta alguns erros.
por enquanto fico agradecido.
e passarei a postar algumas soluções simples que descobri no xmaker.
-
- Mensagens: 21
- Registrado em: Janeiro 25th, 2011, 9:25 am [phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1236: count(): Parameter must be an array or an object that implements Countable
gravação em duplicidade
Ola
Gustavo.
montei uma rotina que deu certo para a situação que estou vivendo.
A função da rotina.
em um venda eu tenho os itens, a cada item lançado efetuo um lançamento avulso, que é a rotina em questão, ela pega o código do produto e busca os componentes dele em uma tabela que é a DITECOMPPROD e inclui ou altera um registro na tabela de GRADPROD com chave é composta de dois campos ECF_NUMERO e PRO_CODIGOGR, está ocorrendo o seguinte ele inclui os registro, mas caso eu inclua mais 2 itens na venda ele ao dever ver se ja foi incluso e caso verdadeiro somar apenas a quantidade, isso não acontece, ele inclui uma nova chave. com os mesmos dados e do primeiro item da venda.
não sei como posso colar ou anexar um arquivo no fórum pois ja tentei em pdf e não deu certo.
mas preciso gravar nessa tabela os dados.
numero da venda
codigo da peça
quantidade de peças - campo esse que sera somado caso ja exista.
a Rotina abaixo funciona mas apresenta erros.
gostaria de uma solução se não for muito incomodo.
Begin
Produto_fil := TabGlobal.DITVENDA.PRO_CODIGO.Conteudo;
Quantid_fil := TabGlobal.DITVENDA.PRO_QUANTIDADE.Conteudo;
Venda_num := TabGlobal.DITVENDA.ECF_NUMERO.Conteudo;
end;
try
while not tabglobal.DITECOMPPROD.Eof do
begin
Pec_Produto := TabGlobal.DITECOMPPROD.CPPRO_CODIGO.Conteudo;
if TabGlobal.DITECOMPPROD.CPRO_CODIGO.Conteudo = Produto_fil then
begin
if Ptabela(TabGlobal.DGRADPROD, ['ECF_NUMERO', 'PRO_CODIGOGR'], [Venda_num, Pec_Produto]) then
begin
Wprodped:= TabGlobal.DITECOMPPROD.CPPRO_CODIGO.Conteudo ;
showmessage(Wprodped);
Wquantped:= TabGlobal.DITECOMPPROD.CP_QUANT.Conteudo ;
showmessage(floattostr(Wquantped));
TabGlobal.DGRADPROD.ECF_NUMERO.Conteudo:= Venda_num ;
TabGlobal.DGRADPROD.PRO_CODIGOGR.Conteudo:= Wprodped;
Wtotprodped:= (Wquantped * Quantid_fil);
TabGlobal.DGRADPROD.PRO_QUANTIDADE.Conteudo:= TabGlobal.DGRADPROD.PRO_QUANTIDADE.Conteudo + Wtotprodped ;
TABGLOBAL.DGRADPROD.Modifica;
TabGlobal.DGRADPROD.salva;
TabGlobal.DGRADPROD.Refresh;
end;
if not Ptabela(TabGlobal.DGRADPROD, ['ECF_NUMERO', 'PRO_CODIGOGR'], [Venda_num, Pec_Produto]) then
begin
// TABGLOBAL.DGRADPROD.insert;(se utilizo esta linha ela inclui normal mas com alguns defeitos se não uso da erro)
Wprodped:= TabGlobal.DITECOMPPROD.CPPRO_CODIGO.Conteudo ;
showmessage(Wprodped);
Wquantped:= TabGlobal.DITECOMPPROD.CP_QUANT.Conteudo ;
showmessage(floattostr(Wquantped));
TabGlobal.DGRADPROD.ECF_NUMERO.Conteudo:= Venda_num ;
TabGlobal.DGRADPROD.PRO_CODIGOGR.Conteudo:= Wprodped;
Wtotprodped:= (Wquantped * Quantid_fil);
TabGlobal.DGRADPROD.PRO_QUANTIDADE.Conteudo:= TabGlobal.DGRADPROD.PRO_QUANTIDADE.Conteudo + Wtotprodped ;
TABGLOBAL.DGRADPROD.Inclui(Nil);(o erro acontece aqui)
TabGlobal.DGRADPROD.Salva;
TabGlobal.DGRADPROD.Refresh;
end;
end;
TabGlobal.DITECOMPPROD.next;
end;
except
showmessage('Erro de Leitura...');
end;
Gustavo.
montei uma rotina que deu certo para a situação que estou vivendo.
A função da rotina.
em um venda eu tenho os itens, a cada item lançado efetuo um lançamento avulso, que é a rotina em questão, ela pega o código do produto e busca os componentes dele em uma tabela que é a DITECOMPPROD e inclui ou altera um registro na tabela de GRADPROD com chave é composta de dois campos ECF_NUMERO e PRO_CODIGOGR, está ocorrendo o seguinte ele inclui os registro, mas caso eu inclua mais 2 itens na venda ele ao dever ver se ja foi incluso e caso verdadeiro somar apenas a quantidade, isso não acontece, ele inclui uma nova chave. com os mesmos dados e do primeiro item da venda.
não sei como posso colar ou anexar um arquivo no fórum pois ja tentei em pdf e não deu certo.
mas preciso gravar nessa tabela os dados.
numero da venda
codigo da peça
quantidade de peças - campo esse que sera somado caso ja exista.
a Rotina abaixo funciona mas apresenta erros.
gostaria de uma solução se não for muito incomodo.
Begin
Produto_fil := TabGlobal.DITVENDA.PRO_CODIGO.Conteudo;
Quantid_fil := TabGlobal.DITVENDA.PRO_QUANTIDADE.Conteudo;
Venda_num := TabGlobal.DITVENDA.ECF_NUMERO.Conteudo;
end;
try
while not tabglobal.DITECOMPPROD.Eof do
begin
Pec_Produto := TabGlobal.DITECOMPPROD.CPPRO_CODIGO.Conteudo;
if TabGlobal.DITECOMPPROD.CPRO_CODIGO.Conteudo = Produto_fil then
begin
if Ptabela(TabGlobal.DGRADPROD, ['ECF_NUMERO', 'PRO_CODIGOGR'], [Venda_num, Pec_Produto]) then
begin
Wprodped:= TabGlobal.DITECOMPPROD.CPPRO_CODIGO.Conteudo ;
showmessage(Wprodped);
Wquantped:= TabGlobal.DITECOMPPROD.CP_QUANT.Conteudo ;
showmessage(floattostr(Wquantped));
TabGlobal.DGRADPROD.ECF_NUMERO.Conteudo:= Venda_num ;
TabGlobal.DGRADPROD.PRO_CODIGOGR.Conteudo:= Wprodped;
Wtotprodped:= (Wquantped * Quantid_fil);
TabGlobal.DGRADPROD.PRO_QUANTIDADE.Conteudo:= TabGlobal.DGRADPROD.PRO_QUANTIDADE.Conteudo + Wtotprodped ;
TABGLOBAL.DGRADPROD.Modifica;
TabGlobal.DGRADPROD.salva;
TabGlobal.DGRADPROD.Refresh;
end;
if not Ptabela(TabGlobal.DGRADPROD, ['ECF_NUMERO', 'PRO_CODIGOGR'], [Venda_num, Pec_Produto]) then
begin
// TABGLOBAL.DGRADPROD.insert;(se utilizo esta linha ela inclui normal mas com alguns defeitos se não uso da erro)
Wprodped:= TabGlobal.DITECOMPPROD.CPPRO_CODIGO.Conteudo ;
showmessage(Wprodped);
Wquantped:= TabGlobal.DITECOMPPROD.CP_QUANT.Conteudo ;
showmessage(floattostr(Wquantped));
TabGlobal.DGRADPROD.ECF_NUMERO.Conteudo:= Venda_num ;
TabGlobal.DGRADPROD.PRO_CODIGOGR.Conteudo:= Wprodped;
Wtotprodped:= (Wquantped * Quantid_fil);
TabGlobal.DGRADPROD.PRO_QUANTIDADE.Conteudo:= TabGlobal.DGRADPROD.PRO_QUANTIDADE.Conteudo + Wtotprodped ;
TABGLOBAL.DGRADPROD.Inclui(Nil);(o erro acontece aqui)
TabGlobal.DGRADPROD.Salva;
TabGlobal.DGRADPROD.Refresh;
end;
end;
TabGlobal.DITECOMPPROD.next;
end;
except
showmessage('Erro de Leitura...');
end;
-
- Mensagens: 18
- Registrado em: Fevereiro 1st, 2011, 4:29 pm [phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1236: count(): Parameter must be an array or an object that implements Countable
Re: gravação em duplicidade
tente dar um commit na tabela talvez resolva.
At,
Ricardo
At,
Ricardo
-
- Mensagens: 21
- Registrado em: Janeiro 25th, 2011, 9:25 am [phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1236: count(): Parameter must be an array or an object that implements Countable
Rotina não adicionando -
Ola
Gustavo
pode ajudar a resolver este problema.
minha rotina avulsa está apresentando um erro muito estranho 1º duplica os lançamento mas quando olhado o banco de dados os dados não tem duplicados mas pelo programa gerado no xmaker aparece duplicado.
o item da venda duplica exatamente a mesma quantia que ela processa os iten da composição do produto. sei também que a linha que contem a instrução Screen.Cursor := crHourGlass; ocorre um erro.
peço orientação no seguinte:
ela está efetuando a inclusão normal mas quando encontra um mesmo produto não efetua a soma da quantidade. a rotina está assim no DTIVENDA
Begin
Produto_fil := TabGlobal.DITVENDA.PRO_CODIGO.Conteudo;
Quantid_fil := TabGlobal.DITVENDA.PRO_QUANTIDADE.Conteudo;
Venda_num := TabGlobal.DITVENDA.ECF_NUMERO.Conteudo;
end;
TabGlobal.DITECOMPPROD.filtro.Clear;
tabGlobal.DITECOMPPROD.filtro.Add('CPRO_CODIGO ='+(Produto_fil));
TabGlobal.DITECOMPPROD.AtualizaSql;
tabglobal.DITECOMPPROD.First;
TABGLOBAL.DGRADPROD.Cancela;
try
while not tabglobal.DITECOMPPROD.Eof do
begin
Pec_Produto := TabGlobal.DITECOMPPROD.CPPRO_CODIGO.Conteudo;
if TabGlobal.DITECOMPPROD.CPRO_CODIGO.Conteudo = Produto_fil then
begin
if Ptabela(TabGlobal.DGRADPROD, ['ECF_NUMERO', 'PRO_CODIGOGR'], [Venda_num, Pec_Produto]) then
begin
TABGLOBAL.DGRADPROD.Modifica;
Wquantped:= TabGlobal.DITECOMPPROD.CP_QUANT.Conteudo ;
Wtotjapedid:= TabGlobal.DGRADPROD.PRO_QUANTIDADE.Conteudo;
showmessage('Ja p: ' +floattostr(Wtotjapedid) + ' Q Peça ' +floattostr(Wquantped) +' Q Vendi ' + floattostr(Quantid_fil));
Wtotprodped:= ((Wquantped * Quantid_fil) + Wtotjapedid);
TabGlobal.DGRADPROD.PRO_QUANTIDADE.Conteudo := Wtotprodped;
TabGlobal.DGRADPROD.Salva;
TabGlobal.DGRADPROD.Refresh;
TABGLOBAL.DGRADPROD.Cancela;
end;
if not Ptabela(TabGlobal.DGRADPROD, ['ECF_NUMERO', 'PRO_CODIGOGR'], [Venda_num, Pec_Produto]) then
begin
TABGLOBAL.DGRADPROD.Inclui(Nil);
Wprodped:= TabGlobal.DITECOMPPROD.CPPRO_CODIGO.Conteudo ;
Wquantped:= TabGlobal.DITECOMPPROD.CP_QUANT.Conteudo ;
TabGlobal.DGRADPROD.ECF_NUMERO.Conteudo:= Venda_num ;
TabGlobal.DGRADPROD.PRO_CODIGOGR.Conteudo:= Wprodped;
Wtotprodped:= (Wquantped * Quantid_fil);
TabGlobal.DGRADPROD.PRO_QUANTIDADE.Conteudo:= Wtotprodped ;
TabGlobal.DGRADPROD.Salva;
TabGlobal.DGRADPROD.Refresh;
TABGLOBAL.DGRADPROD.Cancela;
end;
end;
Screen.Cursor := crHourGlass;
TabGlobal.DITECOMPPROD.next;
end;
except
showmessage('Erro de Leitura...');
end;
a função dessa rotina é pegar o produto vendido e gravar uma grade de carga com os itens que ele compoem, e as tabelas que a rotina le é simples.
No filtro ela separa somente os itens que fazem parte dos produtos e faz corretamente.
Depois verifica se eles ja existe na grade se não existe inclui se existe ela deveria somar e isso não acontece.
quando inclui os itens da grade o ultimo item da grade duplica a tabela. apenas aparece na grid, pois quando vejo direto no banco sem utilizar o programa gerado pelo xmaker está correto, preciso de ajuda para resolver .
caso possa ajudar-me mando por e-mail mais detalhes se houver necessidade.
ps. como faço para adicionar imagens nas mensagens
Gustavo
pode ajudar a resolver este problema.
minha rotina avulsa está apresentando um erro muito estranho 1º duplica os lançamento mas quando olhado o banco de dados os dados não tem duplicados mas pelo programa gerado no xmaker aparece duplicado.
o item da venda duplica exatamente a mesma quantia que ela processa os iten da composição do produto. sei também que a linha que contem a instrução Screen.Cursor := crHourGlass; ocorre um erro.
peço orientação no seguinte:
ela está efetuando a inclusão normal mas quando encontra um mesmo produto não efetua a soma da quantidade. a rotina está assim no DTIVENDA
Begin
Produto_fil := TabGlobal.DITVENDA.PRO_CODIGO.Conteudo;
Quantid_fil := TabGlobal.DITVENDA.PRO_QUANTIDADE.Conteudo;
Venda_num := TabGlobal.DITVENDA.ECF_NUMERO.Conteudo;
end;
TabGlobal.DITECOMPPROD.filtro.Clear;
tabGlobal.DITECOMPPROD.filtro.Add('CPRO_CODIGO ='+(Produto_fil));
TabGlobal.DITECOMPPROD.AtualizaSql;
tabglobal.DITECOMPPROD.First;
TABGLOBAL.DGRADPROD.Cancela;
try
while not tabglobal.DITECOMPPROD.Eof do
begin
Pec_Produto := TabGlobal.DITECOMPPROD.CPPRO_CODIGO.Conteudo;
if TabGlobal.DITECOMPPROD.CPRO_CODIGO.Conteudo = Produto_fil then
begin
if Ptabela(TabGlobal.DGRADPROD, ['ECF_NUMERO', 'PRO_CODIGOGR'], [Venda_num, Pec_Produto]) then
begin
TABGLOBAL.DGRADPROD.Modifica;
Wquantped:= TabGlobal.DITECOMPPROD.CP_QUANT.Conteudo ;
Wtotjapedid:= TabGlobal.DGRADPROD.PRO_QUANTIDADE.Conteudo;
showmessage('Ja p: ' +floattostr(Wtotjapedid) + ' Q Peça ' +floattostr(Wquantped) +' Q Vendi ' + floattostr(Quantid_fil));
Wtotprodped:= ((Wquantped * Quantid_fil) + Wtotjapedid);
TabGlobal.DGRADPROD.PRO_QUANTIDADE.Conteudo := Wtotprodped;
TabGlobal.DGRADPROD.Salva;
TabGlobal.DGRADPROD.Refresh;
TABGLOBAL.DGRADPROD.Cancela;
end;
if not Ptabela(TabGlobal.DGRADPROD, ['ECF_NUMERO', 'PRO_CODIGOGR'], [Venda_num, Pec_Produto]) then
begin
TABGLOBAL.DGRADPROD.Inclui(Nil);
Wprodped:= TabGlobal.DITECOMPPROD.CPPRO_CODIGO.Conteudo ;
Wquantped:= TabGlobal.DITECOMPPROD.CP_QUANT.Conteudo ;
TabGlobal.DGRADPROD.ECF_NUMERO.Conteudo:= Venda_num ;
TabGlobal.DGRADPROD.PRO_CODIGOGR.Conteudo:= Wprodped;
Wtotprodped:= (Wquantped * Quantid_fil);
TabGlobal.DGRADPROD.PRO_QUANTIDADE.Conteudo:= Wtotprodped ;
TabGlobal.DGRADPROD.Salva;
TabGlobal.DGRADPROD.Refresh;
TABGLOBAL.DGRADPROD.Cancela;
end;
end;
Screen.Cursor := crHourGlass;
TabGlobal.DITECOMPPROD.next;
end;
except
showmessage('Erro de Leitura...');
end;
a função dessa rotina é pegar o produto vendido e gravar uma grade de carga com os itens que ele compoem, e as tabelas que a rotina le é simples.
No filtro ela separa somente os itens que fazem parte dos produtos e faz corretamente.
Depois verifica se eles ja existe na grade se não existe inclui se existe ela deveria somar e isso não acontece.
quando inclui os itens da grade o ultimo item da grade duplica a tabela. apenas aparece na grid, pois quando vejo direto no banco sem utilizar o programa gerado pelo xmaker está correto, preciso de ajuda para resolver .
caso possa ajudar-me mando por e-mail mais detalhes se houver necessidade.
ps. como faço para adicionar imagens nas mensagens
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 16 visitantes