NUMERACAO DE NFE

FBGSYSTEMS 17/12/2013 11:38:52
#432191
Eu tambem faço assim.
Todos os dados da nota(exceto a numeração), entao na mesma procedure de gerar o xml, obviamente antes eu faço assim

1 numero = select ultimonumero +1
2 con.execute [Ô]update notafiscal set numeronf=numero where id=minhaid

[ô]gera chave de acesso
.
.
.

[ô] gera xml
.
.

Agora acho que ficou claro. Se na mesma hora aciona a linha 1 as duas notas terão o mesmo número.
FOXMAN 17/12/2013 19:08:56
#432224
Você realmente precisa [Ô]OCUPAR[Ô] o numero de NF de forma que outro usuário não utilize o mesmo número.

Eu gero o numero da NF somente na finalização do pedido, ou seja, o usuario vai digitando o pedido.Preenche como todos os dados da NFe, e somente gero o numero da nfe no momento de gerar o XML.

Neste momento eu vou ao banco e em uma tabela que gerencia sequencias eu gravo o numero atual + 1.






FBGSYSTEMS 18/12/2013 11:50:53
#432250
Bom dia galera.

FOXMAN, eu faço exatamente o mesmo que você.
Para tentar deixar mais claro, olha o inicio do meu botão que gera o xml.

Após este trecho eu gero o xml normalmente.

If frmNFe.cmbNumeroNota <> [Ô][Ô] Then
Sleep (1500)
Set dsverificasejatem = New ADODB.Recordset
dsverificasejatem.open [Ô]SELECT NUMERO FROM NOTAFISCAL WHERE NUMERO=[Ô] & Right(frmNFe.cmbNumeroNota, Len(frmNFe.cmbNumeroNota) - 9) & [Ô] and codigo<>[Ô] & varCodNotaFiscal, IIf(varBdExterno <> [Ô][Ô], con2, con), adOpenKeyset, adLockOptimistic
If Not dsverificasejatem.EOF Then
Set dsverificaultimonumero = New ADODB.Recordset
dsverificaultimonumero.open [Ô]select * from notafiscal where not isnull(numero) and numero <>0 order by numero[Ô], IIf(varBdExterno <> [Ô][Ô], con2, con), adOpenKeyset, adLockOptimistic
If Not dsverificaultimonumero.EOF Then
varanterior = 0
Sleep (1500)
[ô]con.execute [Ô]update notafiscal set numero=[ô][Ô] & Format(300, [Ô]000000000[Ô]) & [Ô][ô] where codigo=[Ô] & varCodNotaFiscal
Do While Not dsverificaultimonumero.EOF
DoEvents
VARULTIMANOTA = dsverificaultimonumero!numero
dsverificaultimonumero.MoveNext
Loop

IIf(varBdExterno <> [Ô][Ô], con2, con).Execute [Ô]update notafiscal set numero=[Ô] & Format(VARULTIMANOTA + 1, [Ô]000000000[Ô]) & [Ô] where codigo=[Ô] & varCodNotaFiscal
varNumeroNotaGerou = VARULTIMANOTA + 1
[ô]varNumeroNotaGerou = 300
End If

Else
varNumeroNotaGerou = Right(frmNFe.cmbNumeroNota, Len(frmNFe.cmbNumeroNota) - 9)

End If
Else
Set dsverificaultimonumero = New ADODB.Recordset
dsverificaultimonumero.open [Ô]select * from notafiscal where not isnull(numero) and numero <>0 order by numero desc[Ô], IIf(varBdExterno <> [Ô][Ô], con2, con), adOpenKeyset, adLockOptimistic
If Not dsverificaultimonumero.EOF Then
varanterior = 0
Sleep (1545)
[ô]con.execute [Ô]update notafiscal set numero=[ô][Ô] & Format(300, [Ô]000000000[Ô]) & [Ô][ô] where codigo=[Ô] & varCodNotaFiscal
DoEvents
VARULTIMANOTA = dsverificaultimonumero!numero

IIf(varBdExterno <> [Ô][Ô], con2, con).Execute [Ô]update notafiscal set numero=[Ô] & Format(VARULTIMANOTA + 1, [Ô]000000000[Ô]) & [Ô] where codigo=[Ô] & varCodNotaFiscal
varNumeroNotaGerou = VARULTIMANOTA + 1
[ô]varNumeroNotaGerou = 300
End If
End If



E mesmo fazendo isso eventualmente tenho problema de duas notas com o mesmo número. Acontece sempre ? Obviamente não. Mas quando acontece me da um trabalho do caramba arrumar manualmente isto.
ANDPAG 19/12/2013 00:55:54
#432288
Uso essa função que fiz a muito tempo e não tem erro...
Coloque ela em um modulo, crie uma tabela com a sequencia das notas por exemplo tabela --> S_NRO_NF
crie um campo chamado NEXTVAL do tipo int (uso int no caso do sql server)
coloque o valor 0 nele.

para usar a função crie uma variavel que ira pegar o nro da nota e use da seguinte maneira

vlNroNf = NroSequence(suaconexao,[Ô]S_NRO_NF[Ô])

e grave o nro da nota que estiver na variavel VlNroNf

Abs.

============================================================================================

Public Function NroSequenceSQL(ByRef aoConexao As ADODB.Connection, ByVal asNomeTabelaSequence As String) As Long
[ô]ONDE asNomeTabelaSequence E O NOME DE UMA TABELA QUE:
[ô] - CONTENHA UM REGISTRO (NEM MAIS NEM MENOS)
[ô] - TENHA UMA A COLUNA DE SEQUENCE SE CHAME [Ô]NEXTVAL[Ô]

Dim voRs As ADODB.Recordset, sSeq As String

Set voRs = New ADODB.Recordset
voRs.CursorLocation = adUseServer
voRs.Open [Ô]SELECT NEXTVAL FROM [Ô] & asNomeTabelaSequence, aoConexao, adOpenDynamic, adLockPessimistic, adCmdText
voRs!NEXTVAL.Value = voRs!NEXTVAL.Value + 1
voRs.Update

NroSequenceSQL = voRs!NEXTVAL

voRs.Close
Set voRs = Nothing
End Function

============================================================================================
Página 2 de 2 [14 registro(s)]
Tópico encerrado , respostas não são mais permitidas