Clipper On Line • Ver Tópico - sequencia de nfe

sequencia de nfe

Discussão sobre SQL

Moderador: Moderadores

 

sequencia de nfe

Mensagempor andrelucass » 05 Ago 2022 10:20

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
andrelucass
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 145
Data de registro: 25 Fev 2005 10:40
Curtiu: 0 vez
Mens.Curtidas: 6 vezes

sequencia de nfe

Mensagempor alxsts » 05 Ago 2022 11:02

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)
alxsts
Colaborador

Colaborador
 
Mensagens: 2945
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

sequencia de nfe

Mensagempor Itamar M. Lins Jr. » 05 Ago 2022 12:05

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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6951
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 312 vezes
Mens.Curtidas: 508 vezes

sequencia de nfe

Mensagempor Fernando queiroz » 05 Ago 2022 13:05

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
Fernando queiroz
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 737
Data de registro: 12 Nov 2014 23:41
Cidade/Estado: Porto Alegre/RS
Curtiu: 12 vezes
Mens.Curtidas: 58 vezes

sequencia de nfe

Mensagempor Itamar M. Lins Jr. » 05 Ago 2022 13:30

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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6951
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 312 vezes
Mens.Curtidas: 508 vezes

sequencia de nfe

Mensagempor andrelucass » 10 Ago 2022 10:15

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
Data de registro: 25 Fev 2005 10:40
Curtiu: 0 vez
Mens.Curtidas: 6 vezes

sequencia de nfe

Mensagempor andrelucass » 10 Ago 2022 14:20

Ola pessoal

Geralmente estou precisando resolver isso, porque estou com quase todo o sistema migrado para o postgresql.
andrelucass
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 145
Data de registro: 25 Fev 2005 10:40
Curtiu: 0 vez
Mens.Curtidas: 6 vezes

sequencia de nfe

Mensagempor Itamar M. Lins Jr. » 10 Ago 2022 14:59

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/203669/o-que-s%C3%A3o-as-transa%C3%A7%C3%B5es-begin-commit-e-rollback
http://www.bosontreinamentos.com.br/sql-com-sql-server/transacoes-commit-e-rollback-no-sql-server/

Especifico para PG.
http://postgresqlbr.blogspot.com/2007/05/os-comandos-begin-commit-e-rollback.html

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6951
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 312 vezes
Mens.Curtidas: 508 vezes

sequencia de nfe

Mensagempor andrelucass » 10 Ago 2022 17:06

Vou pensar como implementar

Obrigado
andrelucass
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 145
Data de registro: 25 Fev 2005 10:40
Curtiu: 0 vez
Mens.Curtidas: 6 vezes

sequencia de nfe

Mensagempor alxsts » 10 Ago 2022 17:55

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:
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)
alxsts
Colaborador

Colaborador
 
Mensagens: 2945
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

sequencia de nfe

Mensagempor Itamar M. Lins Jr. » 10 Ago 2022 21:58

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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6951
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 312 vezes
Mens.Curtidas: 508 vezes

sequencia de nfe

Mensagempor Itamar M. Lins Jr. » 11 Ago 2022 09:01

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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6951
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 312 vezes
Mens.Curtidas: 508 vezes

sequencia de nfe

Mensagempor andrelucass » 11 Ago 2022 09:18

Grato pelas informações
andrelucass
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 145
Data de registro: 25 Fev 2005 10:40
Curtiu: 0 vez
Mens.Curtidas: 6 vezes

sequencia de nfe

Mensagempor Fernando queiroz » 11 Ago 2022 09:35

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
************************************************************************************************************************************************************************************************************************
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
Fernando queiroz
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 737
Data de registro: 12 Nov 2014 23:41
Cidade/Estado: Porto Alegre/RS
Curtiu: 12 vezes
Mens.Curtidas: 58 vezes

sequencia de nfe

Mensagempor Itamar M. Lins Jr. » 11 Ago 2022 09:47

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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6951
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 312 vezes
Mens.Curtidas: 508 vezes

Próximo



Retornar para SQL

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 5 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro