Página 1 de 2

sequencia de nfe

Enviado: 05 Ago 2022 10:20
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

sequencia de nfe

Enviado: 05 Ago 2022 11:02
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

sequencia de nfe

Enviado: 05 Ago 2022 12:05
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.

sequencia de nfe

Enviado: 05 Ago 2022 13:05
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.

sequencia de nfe

Enviado: 05 Ago 2022 13:30
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.

sequencia de nfe

Enviado: 10 Ago 2022 10:15
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

sequencia de nfe

Enviado: 10 Ago 2022 14:20
por andrelucass
Ola pessoal

Geralmente estou precisando resolver isso, porque estou com quase todo o sistema migrado para o postgresql.

sequencia de nfe

Enviado: 10 Ago 2022 14:59
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.

sequencia de nfe

Enviado: 10 Ago 2022 17:06
por andrelucass
Vou pensar como implementar

Obrigado

sequencia de nfe

Enviado: 10 Ago 2022 17:55
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.

sequencia de nfe

Enviado: 10 Ago 2022 21:58
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.

sequencia de nfe

Enviado: 11 Ago 2022 09:01
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.

sequencia de nfe

Enviado: 11 Ago 2022 09:18
por andrelucass
Grato pelas informações

sequencia de nfe

Enviado: 11 Ago 2022 09:35
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.

sequencia de nfe

Enviado: 11 Ago 2022 09:47
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.