Sequencia de Item de Nota Fiscal
Pessoal to com uma duvida cruel veja:
no meu sistema to fazendo um modulo de impressao de Nota Fiscal onde tem 2 tabelas que sao as: NOTAFISCAL E ITEM_NOTAFISCAL
o ploblema é que os itens da tabela ITEM_NOTAFISCAL nao estao cadastrados em nenhuma outra tabela pq o campo descricao e preechido com qualquer descricao a gosto do usuario entao eu preciso criar um campo SEQUENCIAL e eu preciso incrementar esse campo sempre que é gerado uma nova Nota Fiscal e sempre começando com 1, no segundo item o campo SEQUENCIAL recebe o valor 2 e assim por diante. Lembrando que qndo eu gerar uma nova Nota Fiscal o campo SEQUENCIAL recebe o valor 1 novamente.
Uso: Delphi7/Interbase6
componentes DBExprex
grato:
no meu sistema to fazendo um modulo de impressao de Nota Fiscal onde tem 2 tabelas que sao as: NOTAFISCAL E ITEM_NOTAFISCAL
o ploblema é que os itens da tabela ITEM_NOTAFISCAL nao estao cadastrados em nenhuma outra tabela pq o campo descricao e preechido com qualquer descricao a gosto do usuario entao eu preciso criar um campo SEQUENCIAL e eu preciso incrementar esse campo sempre que é gerado uma nova Nota Fiscal e sempre começando com 1, no segundo item o campo SEQUENCIAL recebe o valor 2 e assim por diante. Lembrando que qndo eu gerar uma nova Nota Fiscal o campo SEQUENCIAL recebe o valor 1 novamente.
Uso: Delphi7/Interbase6
componentes DBExprex
grato:
Osmar
Curtidas 0
Respostas
Koplin
05/09/2003
Crie uma tabela de indice e trate-a para voltar a 1.
Eu uso isso inclusive para ECF. Ainda dá para fazer (não sei se com os componentes para IB) tabelaItens.Item:=TItem.recno; onde recno é a posicao do registro.
Agora - isso é apenas cogitação minha - Por que não guardar os itens mesmo sendo digitados. Se o cliente vier a trabalhar com sintegra vai precisar destes registros em arquivo, ou mesmo para consulta futura. A hora nque ele pedir, vai te dar trabalho. É só cogitação.
Eu uso isso inclusive para ECF. Ainda dá para fazer (não sei se com os componentes para IB) tabelaItens.Item:=TItem.recno; onde recno é a posicao do registro.
Agora - isso é apenas cogitação minha - Por que não guardar os itens mesmo sendo digitados. Se o cliente vier a trabalhar com sintegra vai precisar destes registros em arquivo, ou mesmo para consulta futura. A hora nque ele pedir, vai te dar trabalho. É só cogitação.
GOSTEI 0
Mmtoor
05/09/2003
Prezado colega:
Não uso interbase, mas deve iluminar um pouco a sua idéia e talvez ainda melhorar o que vou postar.
Num sistema tb de emissão de notas utilizei o seguinte recurso:
Campos da Tabela Itens:
Cod=+ *
CodCli=A
CodSeq = N;
Item=A
Quant=N,
VrUnit=$
desc=$
TotItem=$
TotNota=$
Para manter o sequencial da nota sempre iniciando em 1, inseri um label no form com a propriedade caption = 0.
Implementei o seguinte:
Sempre que uma nova nota fosse imposta pelo usuário o procedimento append confirmaria ainda o numero 0 no label.
ao final da nota, prevendo que algum item pudesse ser cancelado antes do fechamento da nota, carrego a tabela itens do seguinte modo:
var
v1= real;
begin
TblItem.First;
TblItem.Edit;
if not TblItem.Eof then
repeat
v1:= strtofloat(label1.caption);
tblitemcodseq.text:= floattostr(v1+1);
TblItem.Post;
tblitem.Next;
until tblitem.Eof;
Veja bem. Não sei em interbase se isso se aplica.
Espero ter ajudado.
MMTOOR2003
Não uso interbase, mas deve iluminar um pouco a sua idéia e talvez ainda melhorar o que vou postar.
Num sistema tb de emissão de notas utilizei o seguinte recurso:
Campos da Tabela Itens:
Cod=+ *
CodCli=A
CodSeq = N;
Item=A
Quant=N,
VrUnit=$
desc=$
TotItem=$
TotNota=$
Para manter o sequencial da nota sempre iniciando em 1, inseri um label no form com a propriedade caption = 0.
Implementei o seguinte:
Sempre que uma nova nota fosse imposta pelo usuário o procedimento append confirmaria ainda o numero 0 no label.
ao final da nota, prevendo que algum item pudesse ser cancelado antes do fechamento da nota, carrego a tabela itens do seguinte modo:
var
v1= real;
begin
TblItem.First;
TblItem.Edit;
if not TblItem.Eof then
repeat
v1:= strtofloat(label1.caption);
tblitemcodseq.text:= floattostr(v1+1);
TblItem.Post;
tblitem.Next;
until tblitem.Eof;
Veja bem. Não sei em interbase se isso se aplica.
Espero ter ajudado.
MMTOOR2003
GOSTEI 0