sequencia de nfe

Forum sobre SQL.

Moderador: Moderadores

andrelucass
Usuário Nível 3
Usuário Nível 3
Mensagens: 145
Registrado em: 25 Fev 2005 10:40

sequencia de nfe

Mensagem por andrelucass »

Ola a todos

Estou migrando de DBF para postgresql gostaria de saber como voces fazem para a sequencia da nota fiscal, utilizo o AcbrMonitorPlus


Atenciosamente
André Lucas Souza
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

sequencia de nfe

Mensagem por alxsts »

Olá!

Crie a coluna que armazena o número da NF do tipo SERIAL (auto increment ). Veja: Como criar um campo auto-increment no PostgreSQL

Colunaauto-incrementPostgreSQL
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

sequencia de nfe

Mensagem por Itamar M. Lins Jr. »

Olá!
como voces fazem para a sequencia da nota fiscal
Faça da mesma forma que faz no DBF.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Fernando queiroz
Usuário Nível 4
Usuário Nível 4
Mensagens: 779
Registrado em: 13 Nov 2014 00:41
Localização: Porto Alegre/RS

sequencia de nfe

Mensagem por Fernando queiroz »

alxsts escreveu:Olá!

Crie a coluna que armazena o número da NF do tipo SERIAL (auto increment ). Veja: Como criar um campo auto-increment no PostgreSQL

Colunaauto-incrementPostgreSQL
Sem querer criar polemica, eu nao faria dessa forma, mesmo incluindo o campo SERIE no numero da NF , se for somente o numero da NF quando chegar aos 9 digitos ele teria de mudar de serie e voltar para a NF 000000001, ja em caso de uso como PDV que usa uma Serie para cada PDV o problema acontece bem antes.
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

sequencia de nfe

Mensagem por Itamar M. Lins Jr. »

Olá!
quando chegar aos 9 digitos
...
Pois é! E ainda tem a fila no meu caso que não tem como saber quem vai chegar primeiro.(Numero da NFe-NFCe)

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
andrelucass
Usuário Nível 3
Usuário Nível 3
Mensagens: 145
Registrado em: 25 Fev 2005 10:40

sequencia de nfe

Mensagem por andrelucass »

Ola a todos

Como ja falei eu uso um dbf para sequencia de notas fiscais, e como eu utilizo, na hora de emitir a nota, eu travo o registro pego a numeração acrescento mais 1, gravo no arquivo de nota fiscal e travo o registo, e mando transmitir usando o acbrmonitor, se a nota não for validada por algum motivo, dou replace no arquivo de nota fiscais para limpar o campo da numeração da nota, e dou um dbunlock() no arquivo de sequencia.
Caso a nota seja validada dou um replace no arquivo de sequencia para atualizar a sequencia e dou um dbunlock() no arquivo de sequencia.
A pergunta é: Como fazer esse processo usando o Postgresql, que é o banco de dados de estou usando atualmente.


Atenciosamente

André Lucas
andrelucass
Usuário Nível 3
Usuário Nível 3
Mensagens: 145
Registrado em: 25 Fev 2005 10:40

sequencia de nfe

Mensagem por andrelucass »

Ola pessoal

Geralmente estou precisando resolver isso, porque estou com quase todo o sistema migrado para o postgresql.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

sequencia de nfe

Mensagem por Itamar M. Lins Jr. »

Olá!
...
e travo o registo, e mando transmitir usando o acbrmonitor
...
com quase todo o sistema migrado para o postgresql.
Já que migrou o sistema quase TODO, e só deva faltar isso... Acredito que tenha lido sobre esse assunto:
https://pt.stackoverflow.com/questions/ ... e-rollback
http://www.bosontreinamentos.com.br/sql ... ql-server/

Especifico para PG.
http://postgresqlbr.blogspot.com/2007/0 ... lback.html

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
andrelucass
Usuário Nível 3
Usuário Nível 3
Mensagens: 145
Registrado em: 25 Fev 2005 10:40

sequencia de nfe

Mensagem por andrelucass »

Vou pensar como implementar

Obrigado
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

sequencia de nfe

Mensagem por alxsts »

Olá!

Estes links acima se referem ao tratamento de concorrência no acesso a tabelas do banco de dados (begin, commit, rollback), o que não é o caso da tua dúvida.
Fernando queiroz escreveu:Sem querer criar polemica, eu nao faria dessa forma, mesmo incluindo o campo SERIE no numero da NF , se for somente o numero da NF quando chegar aos 9 digitos ele teria de mudar de serie e voltar para a NF 000000001, ja em caso de uso como PDV que usa uma Serie para cada PDV o problema acontece bem antes.
Itamar M. Lins Jr. escreveu:Pois é! E ainda tem a fila no meu caso que não tem como saber quem vai chegar primeiro.(Numero da NFe-NFCe)
Você pode criar um tipo de objeto no banco de dados Postgre chamado sequnce( sequência). Se você tem várias séries de NFe, várias de NFCe várias de PDV, crie uma sequência para cada uma. Exemplos:

Código: Selecionar todos

CREATE SEQUENCE "NF"."NF_Serie_Unica"
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 1
  CACHE 1;

CREATE SEQUENCE "NF"."NF_Serie_A"
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 1
  CACHE 1;

CREATE SEQUENCE "NF"."PDV_Serie_001"
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 1
  CACHE 1;
Na hora de fazer o INSERT na tabela de NF, de acordo com o tipo de NF e série, você consegue pegar o próximo número de NF da sequência correspondente.
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

sequencia de nfe

Mensagem por Itamar M. Lins Jr. »

Olá!
concorrência
Não é concorrência. É concluir SOMENTE se a NFe, NFCe for aprovada.
Senão tem que reverter o processo todo. E tem muita informação para desfazer.
Bom, mas tem milhões de formas de fazer.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

sequencia de nfe

Mensagem por Itamar M. Lins Jr. »

Olá!
Uma forma por exemplo:
travo o registro pego a numeração acrescento mais 1
Aqui começa o "begin" e só vai haver commit se existir "aceite" na sefaz e se existir "aceite" no pgto. Dinheiro, Cheque, Cartão etc...
Senão, precisará desfazer tudo. Até baixa no estoque, contas a receber se for o caso...CARNÊ, SALDO CLIENTE, etc...

PDV só há movimentação efetiva(baixa) se tiver OK o PGTO. Numeração é o de menos. Basta olhar o numero atual e somar mais 1, quando for gravar(commit).
Não precisa saber do numero que está lá, quando faz o XML(Numero da NFe) tudo isso já deve está resolvido. Precisa criar o semáforo se trabalha com vários PDV's mandando cupom para o ACBrMonitor.
Por isso o pessoal trabalha com pré-venda nos terminais. Farmácias por exemplo, dá um "papelzinho" para o cliente com o numero do PDV(pedido) e a pessoa entra na fila no caixa. O número da "NFe ou NFCe" (XML) só é gerado DEPOIS do PGTO. Ai pode entrar até em contingência automaticamente, gerando outro número que não tem nada a ver.


Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
andrelucass
Usuário Nível 3
Usuário Nível 3
Mensagens: 145
Registrado em: 25 Fev 2005 10:40

sequencia de nfe

Mensagem por andrelucass »

Grato pelas informações
Fernando queiroz
Usuário Nível 4
Usuário Nível 4
Mensagens: 779
Registrado em: 13 Nov 2014 00:41
Localização: Porto Alegre/RS

sequencia de nfe

Mensagem por Fernando queiroz »

bom no meu caso eu criei uma tabela com todos os dados da NF-e/NFC-e com os mesmos nomes das TAG do XML e alguns campos de controle

Código: Selecionar todos

************************************************************************************************************************************************************************************************************************
METHOD ABRE_DANFE(   ) CLASS ARQUIVOSCLASS
************************************************************************************************************************************************************************************************************************
LOCAL cQuery;

	cQuery:=	 "CREATE TABLE IF NOT EXISTS `danfe` (";
				+"`DANFE_Id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,";
				+"`PEDIDOS_ID` int(11) DEFAULT NULL,";
				+"`ENTRADA_ID` int(11) DEFAULT NULL,";
				+"`CLIENTE_ID` int(11) DEFAULT NULL,";
 				+"`A_VERSAO` varchar(4) DEFAULT NULL,";
 				+"`A_ID` varchar(47) DEFAULT NULL,";
 				+"`B_CUF` varchar(2) DEFAULT NULL,";
 				+"`B_CNF` varchar(8) DEFAULT NULL,";
 				+"`B_NATOP` varchar(60) DEFAULT NULL,";
 				+"`B_MOD` varchar(2) DEFAULT NULL,";
 				+"`B_SERIE` varchar(3) DEFAULT NULL,";
 				+"`B_NNF` int(9) DEFAULT NULL,";
 				+"`B_DHEMI` varchar(25) DEFAULT NULL,";
 				+"`B_DHSAIENT` varchar(25) DEFAULT NULL,";
 				+"`B_TPNF` varchar(1) DEFAULT NULL,";
 				+"`B_IDDEST` varchar(1) DEFAULT NULL,";
 				+"`B_CMUNFG` varchar(7) DEFAULT NULL,";
 				+"`B_TPIMP` varchar(1) DEFAULT NULL,";
 				+"`B_TPEMIS` varchar(1) DEFAULT NULL,";
 				+"`B_CDV` varchar(1) DEFAULT NULL,";
 				+"`B_TPAMB` varchar(1) DEFAULT NULL,";
 				+"`B_FINNFE` varchar(1) DEFAULT NULL,";
 				+"`B_INDFINAL` varchar(1) DEFAULT NULL,";
 				+"`B_INDPRES` varchar(1) DEFAULT NULL,";
 				+"`B_PROCEMI` varchar(1) DEFAULT NULL,";
 				+"`B_VERPROC` varchar(20) DEFAULT NULL,";
 				+"`B_DHCONT` varchar(25) DEFAULT NULL,";
 				+"`B_XJUST` text DEFAULT NULL,";
 				+"`C_CNPJ` varchar(14) DEFAULT NULL,";
 				+"`C_XNOME` varchar(60) DEFAULT NULL,";
 				+"`C_XFANT` varchar(60) DEFAULT NULL,";
 				+"`C_XLGR` varchar(60) DEFAULT NULL,";
 				+"`C_NRO` varchar(60) DEFAULT NULL,";
 				+"`C_XCPL` varchar(60) DEFAULT NULL,";
 				+"`C_XBAIRRO` varchar(60) DEFAULT NULL,";
 				+"`C_CMUN` varchar(7) DEFAULT NULL,";
 				+"`C_XMUN` varchar(60) DEFAULT NULL,";
 				+"`C_UF` varchar(2) DEFAULT NULL,";
 				+"`C_CEP` varchar(8) DEFAULT NULL,";
 				+"`C_CPAIS` varchar(4) DEFAULT NULL,";
 				+"`C_XPAIS` varchar(60) DEFAULT NULL,";
 				+"`C_FONE` varchar(14) DEFAULT NULL,";
 				+"`C_IE` varchar(14) DEFAULT NULL,";
 				+"`C_IEST` varchar(14) DEFAULT NULL,";
 				+"`C_IM` varchar(15) DEFAULT NULL,";
 				+"`C_CNAE` varchar(7) DEFAULT NULL,";
 				+"`C_CRT` varchar(1) DEFAULT NULL,";
 				+"`E_CNPJ` varchar(14) DEFAULT NULL,";
 				+"`E_IDESTR` varchar(20) DEFAULT NULL,";
 				+"`E_XNOME` varchar(60) DEFAULT NULL,";
 				+"`E_XFANT` varchar(60) DEFAULT NULL,";
 				+"`E_XLGR` varchar(60) DEFAULT NULL,";
 				+"`E_NRO` varchar(60) DEFAULT NULL,";
 				+"`E_XCPL` varchar(60) DEFAULT NULL,";
 				+"`E_XBAIRR` varchar(60) DEFAULT NULL,";
 				+"`E_CMUN` varchar(7) DEFAULT NULL,";
 				+"`E_XMUN` varchar(60) DEFAULT NULL,";
 				+"`E_UF` varchar(2) DEFAULT NULL,";
 				+"`E_CEP` varchar(8) DEFAULT NULL,";
 				+"`E_CPAIS` varchar(4) DEFAULT NULL,";
 				+"`E_XPAIS` varchar(60) DEFAULT NULL,";
 				+"`E_FONE` varchar(14) DEFAULT NULL,";
 				+"`E_INDIE` varchar(1) DEFAULT NULL,";
 				+"`E_IE` varchar(14) DEFAULT NULL,";
 				+"`E_ISUF` varchar(9) DEFAULT NULL,";
 				+"`E_IM` varchar(15) DEFAULT NULL,";
 				+"`E_EMAIL` varchar(60) DEFAULT NULL,";
 				+"`F_CNPJ` varchar(14) DEFAULT NULL,";
 				+"`F_XLGR` varchar(60) DEFAULT NULL,";
 				+"`F_NRO` varchar(60) DEFAULT NULL,";
 				+"`F_XCPL` varchar(60) DEFAULT NULL,";
 				+"`F_XBAIRR` varchar(60) DEFAULT NULL,";
 				+"`F_CMUN` varchar(7) DEFAULT NULL,";
 				+"`F_XMUN` varchar(60) DEFAULT NULL,";
 				+"`F_UF` varchar(2) DEFAULT NULL,";
 				+"`G_CNPJ` varchar(14) DEFAULT NULL,";
 				+"`G_XLGR` varchar(60) DEFAULT NULL,";
 				+"`G_NRO` varchar(60) DEFAULT NULL,";
 				+"`G_XCPL` varchar(60) DEFAULT NULL,";
 				+"`G_XBAIRR` varchar(60) DEFAULT NULL,";
 				+"`G_CMUN` varchar(7) DEFAULT NULL,";
 				+"`G_XMUN` varchar(60) DEFAULT NULL,";
 				+"`G_UF` varchar(2) DEFAULT NULL,";
 				+"`W_VBC` decimal(14,2) DEFAULT 0.00,";
 				+"`W_VICMS` decimal(14,2) DEFAULT 0.00,";
 				+"`W_VICMSD` decimal(14,2) DEFAULT 0.00,";
 				+"`W_VBCST` decimal(14,2) DEFAULT 0.00,";
 				+"`W_VST` decimal(14,2) DEFAULT 0.00,";
 				+"`W_VPROD` decimal(14,2) DEFAULT 0.00,";
 				+"`W_VFRETE` decimal(14,2) DEFAULT 0.00,";
 				+"`W_VSEG` decimal(14,2) DEFAULT 0.00,";
 				+"`W_VDESC` decimal(14,2) DEFAULT 0.00,";
 				+"`W_VII` decimal(14,2) DEFAULT 0.00,";
 				+"`W_VIPI` decimal(14,2) DEFAULT 0.00,";
 				+"`W_VPIS` decimal(14,2) DEFAULT 0.00,";
 				+"`W_VCOFINS` decimal(14,2) DEFAULT 0.00,";
 				+"`W_VOUTRO` decimal(14,2) DEFAULT 0.00,";
 				+"`W_VNF` decimal(14,2) DEFAULT 0.00,";
 				+"`W_VTOTTRIB` decimal(14,2) DEFAULT 0.00,";
 				+"`YA_TPAG` varchar(2) DEFAULT NULL,";
 				+"`YA_VPAG` decimal(14,2) DEFAULT 0.00,";
 				+"`YA_CNPJ` varchar(14) DEFAULT NULL,";
 				+"`YA_BAND` varchar(2) DEFAULT NULL,";
 				+"`YA_AUT` varchar(20) DEFAULT NULL,";
 				+"`Z_INFADFIS` text DEFAULT NULL,";
 				+"`Z_INFCPL` text DEFAULT NULL,";
 				+"`ZB_XNEMP` varchar(22) DEFAULT NULL,";
 				+"`ZB_XPED` varchar(60) DEFAULT NULL,";
 				+"`ZB_XCONT` varchar(60) DEFAULT NULL,";
 				+"`FL_VALIDA` tinyint(1) DEFAULT 0,";
 				+"`FL_ASSINA` tinyint(1) DEFAULT 0,";
 				+"`FL_TRANSM` tinyint(1) DEFAULT 0,";
 				+"`FL_IMPRIM` tinyint(1) DEFAULT 0,";
 				+"`FL_EXPORT` tinyint(1) DEFAULT 0,";
 				+"`FL_SITUAC` varchar(3) DEFAULT NULL,";
 				+"`FL_MOTIVO` varchar(60) DEFAULT NULL,";
 				+"`FL_CANCEL` tinyint(1) DEFAULT 0,";
 				+"`FL_DHEMI` varchar(25) DEFAULT NULL,";
 				+"`FL_INUTIL` tinyint(1) DEFAULT 0,";
 				+"`FL_DHRECBT` varchar(25) DEFAULT NULL,";
 				+"`FL_CONTIG` tinyint(1) DEFAULT 0,";
 				+"`FL_DHCONT` varchar(25) DEFAULT NULL,";
 				+"`FL_CONTEN` tinyint(1) DEFAULT 0,";
 				+"`FL_DHCOEN` varchar(25) DEFAULT NULL,";
 				+"`OPERADOR` varchar(20) DEFAULT NULL,";
				+"`MAQUINA` varchar(20) DEFAULT NULL,";
				+"`TIPPAG` tinyint(2) DEFAULT 0,";
				+"`CERTIFICADO_DIGITAL` varchar(100) DEFAULT NULL,";
				+"`cIdTokenCupom` int(6) DEFAULT NULL," ;
				+"`CSCCupomFiscal` varchar(40) DEFAULT NULL," ;
				+"`Tipo_Operacao` int(2) DEFAULT NULL)" ;
				+"COLLATE='utf8_general_ci' ENGINE=InnoDB "
  
				ConeccoesClass():ExecuteSQL(::oServer, cQuery)
		
		
RETURN NIL
e a geração dos dados de itens sao feitos em tempo de execucao atravez de uma query que traz tudo que preciso para gerar a DANFE.

Atualmente como antigamente tenho uma tabela que tem alguns dados de configuração, nesta tabela eu controlo a SERIE/NUMERO das NF-e/NFC-e algo parecido como a SEQUENCE mostrada em post acima.

o minha tabela de DANFE controla tanto as NF-e(mod 55) / NFC-e(mod 65)

outra coisa que mantenho é : mesmo que a NF-e/NFC-e seja recusada por algum motivo eu continuo com a numeracao e mantenho os dados basicos da nota , somente altero o que causou o erro e gero a NF novamente com dta/hora e chave nova, mantenho os dados do XML ate para poder colocar ele no validador do RS e verificar quais os erros.
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

sequencia de nfe

Mensagem por Itamar M. Lins Jr. »

Olá!
E lembrando que além da serie o XML NFe-NFCe tem DOIS números, o nosso e o do governo e não podem ser iguais.
Se tirar o NFCe e o cartão não passar ?
Resumindo, PAGOU(faz XML) tem "commit". Não pagou, desfaz. Tem que deixar todas essas informações em "stand by" pronto para o tal "ROLLBACK"


Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Responder